随价格涨跌变色的线(指标编程教程第十一篇:修改物件的颜色属性)

提示

这是 2011 年写的一个系列教程。

前几篇写了几个编程基础:变量选择结构逻辑运算等,那么这一篇就把这些都用上,理论与实践结合,写个实例,帮助理解。

先列出需求,创建一条垂直线,价格涨时,颜色为白色,跌时为红色。这样这个实例里会包括创建一条线if 语句、顺带用一下颜色数据类型

新建一个自定义指标

名称:Indicators\bary-11
作者:Copyright 2012, bary.
#property copyright "Copyright 2012, bary."
#property link "http://www.bary.com/"
#property version "1.00"
#property indicator_chart_window
// 声明一个全局变量。
double bary_last_price = 0;
int OnInit(){
    ObjectCreate(0, "bary_vline", OBJ_VLINE, 0, 0, 0);
    return(0);
}
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]){
    // 垂直线的时间坐标为当前时间。
    ObjectSetInteger(0, "bary_vline", OBJPROP_TIME, time[rates_total - 1]);
    // 当前价是否大于等于“bary_last_price”。
    if(bary_last_price <= close[rates_total - 1]){
        ObjectSetInteger(0, "bary_vline", OBJPROP_COLOR, clrWhite);
    } else {
        ObjectSetInteger(0, "bary_vline", OBJPROP_COLOR, clrRed);
    }
    // 将当前价赋于“bary_last_price”。
    bary_last_price = close[rates_total - 1];
    return(rates_total);
}

OnCalculate() 函数第一次运行的时候,bary_last_price 的值为 0,所以物件的颜色一定是白色,然后会把 close[rates_total-1](当前价格)的值赋值给 bary_last_price,当下次运行 OnCalculate() 的时候,close[rates_total-1] 的值已经更新,但是 bary_last_price 还是前一次的值,所以可以比较出价格是在涨还是在跌。

bary_last_price 是一个全局变量,如果给它放到 OnCalculate() 里声明,那么每次运行 OnCalculate() 的时候都会声明一个,当函数返回的时候这个变量就被释放了,无法保留上一次的价格。前面讲过了。

  • 516
回复内容较长可以拖右下角↑
回到
顶部