如何为Expert Advisor中的Moving Average指标指定自定义颜色?
问题解决:EA中双EMA颜色不生效的修复
你的代码存在两个核心问题,导致两条EMA都显示默认红色:
1. 参数拼写错误(致命问题)
代码里的PRICE_СLOSE使用了俄文字母С(不是英文大写C),这会导致iMA函数调用失败,返回INVALID_HANDLE。而你的错误检查放在了颜色设置和添加指标之后,程序没及时报错,直接跳过了颜色设置逻辑,最终用默认参数加载EMA。
2. 代码顺序不合理
错误检查应该紧跟指标创建,这样能第一时间发现句柄无效的问题,避免后续无效操作。
修正后的代码:
int OnInit() { // 创建EMA句柄,注意使用英文PRICE_CLOSE hndlEMA_high = iMA(_Symbol, inp_tf, MA_Period_high, 0, MODE_EMA, PRICE_CLOSE); hndlEMA_low = iMA(_Symbol, inp_tf, MA_Period_low, 0, MODE_EMA, PRICE_CLOSE); // 先检查句柄有效性,失败直接返回 if (hndlEMA_high == INVALID_HANDLE || hndlEMA_low == INVALID_HANDLE) { Print("Error creating EMA indicators, error code: ", GetLastError()); return INIT_FAILED; } // 设置各自的线条颜色 PlotIndexSetInteger(hndlEMA_high, PLOT_LINE_COLOR, 0, C'252,191,77'); PlotIndexSetInteger(hndlEMA_low, PLOT_LINE_COLOR, 0, C'103,108,255'); // 添加指标到图表 ChartIndicatorAdd(0, 0, hndlEMA_high); ChartIndicatorAdd(0, 0, hndlEMA_low); return INIT_SUCCEEDED; }
额外排查方案:
如果修正后颜色仍不生效,可以尝试改用ChartIndicatorSetInteger设置已添加到图表的指标颜色,示例:
// 添加指标后执行颜色设置 long chart_id = 0; int subwin = 0; ChartIndicatorSetInteger(chart_id, subwin, hndlEMA_high, INDICATOR_LINE_COLOR, 0, C'252,191,77'); ChartIndicatorSetInteger(chart_id, subwin, hndlEMA_low, INDICATOR_LINE_COLOR, 0, C'103,108,255');
- 用
GetLastError()打印具体错误码,可快速定位其他潜在问题。
内容的提问来源于stack exchange,提问作者Degger
相关产品推荐
相关产品推荐

