评论

收藏

新建一个MT5的自定义指标(特厉害的MT5/MQL5指标编程教程第二篇:关于MT5的自定义...

avatar 億秒 | 802 人阅读 | 0 人评论 | 2014-02-18

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


初始化函数和计算事件函数代码如下:
int OnInit(){
// 创建一条叫telihai_hline的水平线,
ObjectCreate(0, "telihai_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, "telihai_hline", OBJPROP_PRICE, close[rates_total-1] + 0.002);
}
价格是双精度类型的,“OBJPROP_PRICE”就是价格坐标属性,类型得是双精度,所以这里要用“ObjectSetDouble()”而非“ObjectSetInteger()”。“close[rates_total-1]”可以理解为rates_total-1号柱的收盘价,MT5默认是从左开始排序的,序号从0号开始,第一根是0号,第二根是1号,一共rates_total根,也就是最后一根是rates_total-1号。价格每跳动一次,当前柱的收盘价就会变,整个“OnCalculate()”就会再运行一遍,在这里就是重新写一下水平线的坐标。加0.002是为了跟收盘价格线分开。
《特厉害的MT5/MQL5指标编程教程第四篇:基础语法、数据类型、函数声明》中已经介绍过“OnCalculate()”中参数的意思,除了收盘价,还可以使用“open[]”、“high[]”和“low[]”。不过只有使用当前柱的高、低、收盘价作为坐标水平线才会跳动,像开盘价或者rates_total-2号柱的收盘价都是不会再变化了的。
“xxx[]”这种就是数组,接下来介绍变量和数组。

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