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

来源:百度文库 编辑:中财网 时间:2024/05/10 19:52:50

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

由 小时候可帅了 于 星期三, 01/18/2012 - 22:43 提交

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

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

转载请注明,转载自:特厉害 ? 随价格涨跌变色的线(特厉害的MT5/MQL5指标编程教程第十一篇:修改物件的颜色属性)
原文链接:http://www.telihai.com/node/13