如何自动调整当前图表上显示的价格范围? (MT4智能交易)

How can I automatically rescale the price range shown on the current chart? (MT4 EA)

我正在 mql4 中创建一个 MT4 EA,并希望根据一些指标结果自动调整显示的价格比例(y 轴)。

即我有来自枢轴指标的 (y-max, y-min) 值,并且想重新缩放我的图表以在枢轴线上居中,无论当前价格在哪里.例如,在所示的图中,我希望看到橙色线和黄色线之间的比例。也许在上方和下方添加几个像素以提高可见性。

不幸的是,MT4 论坛非常缺乏这方面的信息,我什至找不到起点。可能相关的信息在这里:

如何让我的 EA resize/re-scale 当前图表的价格范围 window?
(可能占总可用大小的百分比。)

在从各种论坛和来源收集了一些点点滴滴之后,我设法拼凑出一个漂亮的解决方案。

它有什么作用?

  1. 添加布尔设置以启用自动缩放,否则仅在OnInit().
  2. 时执行一次
  3. 使用 OnChartEvent() 事件处理程序来检测 CHARTEVENT_CHART_CHANGE,这是 Windows 发起的调整图表大小的事件 window,并相应地缩放内容。
...
extern bool  autoChartScaling = true;         // Enable Automatic chart scaling

...
void AdjustChartPrice() {
    ...
    ChartSetInteger(cid,CHART_SCALEFIX, 0, true);    // Set the MODE for using a fixed chart scale ([x] Fixed MT4 option)
    ChartSetDouble(cid,CHART_FIXED_MAX, ymax);       // Maximum chart price (height) in [points]
    ChartSetDouble(cid,CHART_FIXED_MIN, ymin);       // Minimum chart price (height) in [points]
}

...
int OnInit() {
   ...
   OnChartEvent();
}

void OnChartEvent(const int id, const long& lparam, const double& dparam,  const string& sparam) {
    // Adjust the chart price Max/Min if chart window changed
    if (autoChartScaling && id == CHARTEVENT_CHART_CHANGE) AdjustChartPrice();  
}