分离图表窗口

终端中的图表窗口可以从主窗口中分离,分离后可移动到桌面任何位置,包括其他显示器。MQL5 允许你查询和更改此设置:相应特性包含在 ENUM_CHART_PROPERTY_INTEGER 枚举中。

标识符

说明

值类型

CHART_IS_DOCKED

图表窗口已分离(默认值为 true)。如果设置为 false,则图表可拖至终端窗口之外

bool

CHART_FLOAT_LEFT

已分离图表相对于虚拟屏幕的左侧坐标

int

CHART_FLOAT_TOP

已分离图表相对于虚拟屏幕的顶部坐标

int

CHART_FLOAT_RIGHT

已分离图表相对于虚拟屏幕的右侧坐标

int

CHART_FLOAT_BOTTOM

已分离图表相对于虚拟屏幕的底部坐标

int

让我们在 ChartDock.mq5脚本中设置对这些特性的追踪。

void OnStart()
{
   const int flags[] =
   {
      CHART_IS_DOCKED,
      CHART_FLOAT_LEFTCHART_FLOAT_TOPCHART_FLOAT_RIGHTCHART_FLOAT_BOTTOM
   };
   ChartModeMonitor m(flags);
   ...
}

如果你现在运行该脚本,使用上下文菜单分离图表(取消按下 Docked开关命令),并移动或调整图表大小,相应的日志将添加到日志记录中。

Initial state:
    [key] [value]
[0]    51       1
[1]    52       0
[2]    53       0
[3]    54       0
[4]    55       0
                              // undocked
CHART_IS_DOCKED 1 -> 0
CHART_FLOAT_LEFT 0 -> 299
CHART_FLOAT_TOP 0 -> 75
CHART_FLOAT_RIGHT 0 -> 1263
CHART_FLOAT_BOTTOM 0 -> 472
                              // changed the vertical size
CHART_FLOAT_BOTTOM 472 -> 500
CHART_FLOAT_BOTTOM 500 -> 539
                              // changed the horizontal size
CHART_FLOAT_RIGHT 1263 -> 1024
CHART_FLOAT_RIGHT 1024 -> 1023
                              // docked back
CHART_IS_DOCKED 0 -> 1

学习本节后,对于通过 ChartGetChartSet 函数管理的特性的介绍便已完毕,因此我们将使用通用脚本ChartFullSet.mq5 对内容进行总结。它会追踪所有类型的所有特性的状态。标志数组的初始化通过循环填充连续索引来完成。最大值会预留一定余量以应对新的特性,而额外的无效编号会被 ChartModeMonitorBase类内置的检查机制(参阅 detect 方法)自动丢弃。

激活脚本后,尝试更改任何设置,同时观察日志中的程序消息。