📅 财经日历 📊 实时波动 📈 大盘云图 📶 行情走势 🆚 投机情绪 🚀 今日热点

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

    億秒 LV7
    2014-02-18 · 1258 阅读
    前几篇写了几个编程基础:变量、选择结构、逻辑运算等,那么这一篇就把这些都用上,理论与实践结合,写个实例,帮助理解。

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

    新建一个自定义指标:

    名称:Indicators\telihai-11
    作者:Copyright 2012, telihai.
    链接:http://www.telihai.com/

    #property copyright "Copyright 2012, telihai."
    #property link "http://www.telihai.com/"
    #property version "1.00"
    #property indicator_chart_window
    // 声明一个全局变量。
    double telihai_last_price = 0;
    int OnInit(){
    ObjectCreate(0, "telihai_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, "telihai_vline", OBJPROP_TIME, time[rates_total-1]);
    // 当前价是否大于等于“telihai_last_price”。
    if(telihai_last_price <= close[rates_total-1]){
    ObjectSetInteger(0, "telihai_vline", OBJPROP_COLOR, clrWhite);
    } else {
    ObjectSetInteger(0, "telihai_vline", OBJPROP_COLOR, clrRed);
    }
    // 将当前价赋于“telihai_last_price”。
    telihai_last_price = close[rates_total-1];
    return(rates_total);
    }

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

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

    ""
    还没有人打赏,支持一下
    回复

    举报

     
    微信二维码

    有问题联系客服