获取 MQL 程序在图表上的放置坐标
用户经常使用鼠标将 MQL 程序拖放到图表上。除操作便捷之外,这还可以为算法提供一定的上下文。例如,指标可以应用到不同的子窗口,或者脚本可以在用户在图表上指定的价格点挂单。下一组函数用于获取程序被拖放至的点的坐标。
int ChartWindowOnDropped()
该函数返回当前 EA 交易、脚本或指标通过鼠标拖放操作所放置的图表子窗口编号。我们知道,主窗口编号为 0,子窗口编号则从 1 开始依次递增。子窗口编号不取决于其上方是否存在隐藏子窗口,即使子窗口被隐藏,其原始索引仍会保留。换言之,当存在 隐藏子窗口时,可见子窗口编号与其实际索引可能不一致。
double ChartPriceOnDropped()
datetime ChartTimeOnDropped()
此函数对返回程序放置点的坐标,以价格和时间为单位。请注意,子窗口中显示的可以是任意数据,而不仅限于价格,尽管函数名称 ChartPriceOnDropped包含 'Price’。
注意!目标点的时间不会按图表时间范围的大小进行取整,这意味着,即使在 H1 或 D1 图表上,仍可获取到精确到分钟甚至秒的值。
int ChartXOnDropped()
int ChartYOnDropped()
这两个函数返回某点的 X 和 Y 屏幕坐标(以像素为单位)。坐标原点位于图表主窗口的左上角。我们在 屏幕规格 章节讨论了坐标轴的方向。
Y 坐标始终从主图表的左上角开始计算,即使放置点属于某个子窗口。要将此值转换为相对于子窗口的坐标 y,请使用特性 CHART_WINDOW_YDISTANCE (请参阅示例)。
在 ChartDrop.mq5脚本中,我们将所有上述函数的值输出到日志中。
void OnStart()
|
例如,如果我们将此脚本拖放到运行 WPR 指标的第一个子窗口中,将得到以下结果。
ChartWindowOnDropped()=1 / ok
|
尽管脚本被被拖放到 EURUSD, H1 图表上,但我们仍获取了精确到分钟和秒的时间戳。
请注意,"price" 值为 -50,因为 WPR 值范围是 [0,-100]。
此外,点 312 的垂直坐标(相对于整个图表窗口)被转换为子窗口的本地坐标:由于主图表起点到子窗口的垂直距离为 282,因此子窗口内的 y值为 30。