评论

收藏

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

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

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

先列出需求,创建一条垂直线,价格涨时,颜色为白色,跌时为红色。这样这个实例里会包括创建一条线、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()”的时候都会声明一个,当函数返回的时候这个变量就被释放了,无法保留上一次的价格。前面讲过了。

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