如何在MQL5编写的EA中默认设置不同颜色的EMA?
在MQL5中为两个EMA设置不同默认颜色的方法
要让两个EMA默认显示不同颜色,核心是利用MQL5的IndicatorSetInteger()函数修改指标的显示属性,同时可以添加输入参数让颜色支持自定义(默认值设为不同颜色即可)。以下是具体修改方案:
修改后的完整代码
struct EMA_STRUCT { double ema[]; int handle; }; // 添加颜色输入参数,设置不同默认值 input int ema1_period = 10; // EMA1周期(短周期) input color ema1_color = clrBlue; // EMA1默认颜色:蓝色 input int ema2_period = 25; // EMA2周期 input color ema2_color = clrOrange; // EMA2默认颜色:橙色 EMA_STRUCT ema_struct[]; // 补充全局变量声明,原代码中可能遗漏 int OnInit() { if(ema1_period != 0) { ArrayResize(ema_struct, ArraySize(ema_struct)+1); int idx = ArraySize(ema_struct)-1; ema_struct[idx].handle = iMA(_Symbol, PERIOD_CURRENT, ema1_period, 0, MODE_EMA, PRICE_CLOSE); // 设置EMA1的颜色 IndicatorSetInteger(ema_struct[idx].handle, INDICATOR_COLOR, 0, ema1_color); ChartIndicatorAdd(0, 0, ema_struct[idx].handle); ArraySetAsSeries(ema_struct[idx].ema, true); } if(ema2_period != 0) { ArrayResize(ema_struct, ArraySize(ema_struct)+1); int idx = ArraySize(ema_struct)-1; ema_struct[idx].handle = iMA(_Symbol, PERIOD_CURRENT, ema2_period, 0, MODE_EMA, PRICE_CLOSE); // 设置EMA2的颜色 IndicatorSetInteger(ema_struct[idx].handle, INDICATOR_COLOR, 0, ema2_color); ChartIndicatorAdd(0, 0, ema_struct[idx].handle); ArraySetAsSeries(ema_struct[idx].ema, true); } panel_creator(); panel_updater(); //--- return(INIT_SUCCEEDED); }
关键改动说明
- 新增颜色输入参数:添加
ema1_color和ema2_color两个输入项,分别设置默认值为clrBlue和clrOrange,你也可以替换成MQL5支持的其他颜色常量(比如clrGreen、clrPurple等)。 - 调用IndicatorSetInteger设置颜色:在创建每个EMA的句柄后,调用该函数指定指标的线颜色。其中
INDICATOR_COLOR是属性标识,第三个参数0表示指标的第一条线(EMA只有一条线,固定为0),最后一个参数是目标颜色值。 - 简化索引获取:用变量
idx存储数组索引,避免重复调用ArraySize(ema_struct)-1,让代码更简洁易读。
修改完成后,EA加载时两个EMA会默认显示不同颜色,用户也可以在EA设置界面手动调整颜色。
内容的提问来源于stack exchange,提问作者Mohammad Saad
相关产品推荐
相关产品推荐

