You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 01:50:01