如何自动调整当前图表上显示的价格范围? (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 论坛非常缺乏这方面的信息,我什至找不到起点。可能相关的信息在这里:
- https://docs.mql4.com/constants/chartconstants/enum_chart_property
- https://book.mql4.com/functions/charts
- https://www.mql5.com/en/forum/154523
如何让我的 EA resize/re-scale 当前图表的价格范围 window?
(可能占总可用大小的百分比。)
在从各种论坛和来源收集了一些点点滴滴之后,我设法拼凑出一个漂亮的解决方案。
它有什么作用?
- 添加布尔设置以启用自动缩放,否则仅在OnInit().
时执行一次
- 使用
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();
}
我正在 mql4 中创建一个 MT4 EA,并希望根据一些指标结果自动调整显示的价格比例(y 轴)。
即我有来自枢轴指标的 (y-max, y-min) 值,并且想重新缩放我的图表以在枢轴线上居中,无论当前价格在哪里.例如,在所示的图中,我希望看到橙色线和黄色线之间的比例。也许在上方和下方添加几个像素以提高可见性。
不幸的是,MT4 论坛非常缺乏这方面的信息,我什至找不到起点。可能相关的信息在这里:
- https://docs.mql4.com/constants/chartconstants/enum_chart_property
- https://book.mql4.com/functions/charts
- https://www.mql5.com/en/forum/154523
如何让我的 EA resize/re-scale 当前图表的价格范围 window?
(可能占总可用大小的百分比。)
在从各种论坛和来源收集了一些点点滴滴之后,我设法拼凑出一个漂亮的解决方案。
它有什么作用?
- 添加布尔设置以启用自动缩放,否则仅在OnInit(). 时执行一次
- 使用
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();
}