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

时间:2019-12-11 13:02:46

标签: mql4 metatrader4

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

enter image description here

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

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

如何让我的智能交易为当前图表窗口调整/调整价格范围?
(可能占可用总大小的百分比。)

1 个答案:

答案 0 :(得分:1)

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

它有什么作用?

  1. 添加bool设置以启用自动缩放,否则仅在 OnInit()上执行一次。
  2. 使用 OnChartEvent() 事件处理程序来检测CHARTEVENT_CHART_CHANGE(这是Windows产生的重新调整图表窗口大小的事件),并相应地缩放内容。
...
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();  
}