创建一条随价格跳动的线(指标编程教程第七篇:价格坐标)

简单的编译调试,创建物件都会了,这一篇来获取价格,并把它作为坐标值赋值到物件的坐标属性。前一篇使用的是初始化函数 OnInit(),这个函数只运行一次,如果希望物件或者指标跟随价格跳动变化,就需要用后面的 OnCalculate() 函数。新建一个自定义指标,详细步骤可以回去看《指标编程教程第二篇:MT5 自定义指标文件

名称:Indicators\bary-7
作者:bary

初始化函数和计算事件函数代码如下:

int OnInit(){
    // 创建一条叫 bary_hline 的水平线,
    ObjectCreate(0, "bary_hline", OBJ_HLINE, 0, 0, 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[]){
    // 设置水平线的价格坐标为当前价 + 0.002。
    ObjectSetDouble(0, "bary_hline", OBJPROP_PRICE, close[rates_total - 1] + 0.002);
}

价格是双精度类型的,OBJPROP_PRICE 就是价格坐标属性,类型得是双精度,所以这里要用 ObjectSetDouble() 而非 ObjectSetInteger()close[rates_total-1] 可以理解为 rates_total - 1 号柱的收盘价,MT5/MQL5 默认是从左开始排序的,序号从 0 号开始,第一根是 0 号,第二根是 1 号,一共 rates_total 根,也就是最后一根是 rates_total - 1 号。价格每跳动一次,当前柱的收盘价就会变,整个 OnCalculate() 就会再运行一遍,在这里就是重新写一下水平线的坐标。加 0.002 是为了跟收盘价格线分开。

指标编程教程第四篇:基础语法、数据类型、函数声明》中已经介绍过 OnCalculate() 中参数的意思,除了收盘价,还可以使用 open[]high[]low[]。不过只有使用当前柱的高、低、收盘价作为坐标水平线才会跳动,像开盘价或者 rates_total - 2 号柱的收盘价都是不会再变化了的。

xxx[] 这种就是数组,接下来介绍变量和数组。

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