您是否需要在打开的图表之间复制和粘贴一些图形对象?我想您一定有过。令人惊讶的是,MetaTrader 并不提供对象的 "复制和粘贴 "功能。唯一可以实现类似效果的是模板(tpl 文件)。但模板存储了完整的图表状态,包括指标、设置和大量辅助内容,这些内容可能与所需的复制程序无关,也没有必要。
这就是我开发ChartObjectsCopyPaste.mq5 指标的原因。它可以将选定对象复制到剪贴板,然后粘贴到其他图表上。无附加条件。
该指标基于算法交易书中 发布的另一个指标 -ObjectGroupEdit.mq5。
请点击链接了解更多有关幕后工作的所有底层类(ObjectMonitor、MapArray 及其他)的信息。
该指标没有缓冲区。它至少应连接到两个图表:要复制对象的源图表和要粘贴对象的目标图表。
在图表上运行时,指标会跟踪现有的图形对象,并记录选中了哪些对象。
通常,"复制和粘贴 "命令是成对使用的:
- 按 Ctrl+Q 热键可将所有选中对象以文本形式复制到 Windows 剪贴板中(可在任何文本编辑器中保存和查看,下面有一个示例)。
- 在目标图表上按 Ctrl+J 从剪贴板粘贴所有对象。
为什么要按 Ctrl+Q/Ctrl+J?这只是从极少数按键中自愿选择的 2 个空闲按键组合。这是因为 MetaTrader 会拦截许多热键,但不会将它们传播到 MQL 程序中。尤其是标准的 Ctrl+C/Ctrl+V/Ctrl+Ins/Shift+Ins 在此情况下无法使用。
由于源代码可用,您可以将热键改成其他组合。
由于指示器使用系统 DLL 访问 Windows 剪贴板,因此应在 "属性"对话框的 "依赖关系"选项卡上允许 DLL 导入。
由于代码库不允许 DLL 导入,与剪贴板相关的代码被封装在条件预处理器指令 #ifdef DLL_LINK 中,因此请取消注释该行
#define DLL_LINK
行。否则,你会看到剪贴板函数存根会在按下热键时显示提示,但不会执行任何实际操作!
- MakeAllSelectable- 使所有对象都可选择的标志(对于以编程方式创建的对象,该标志通常为假);
- LogDetails- 标志,用于将传输对象的所有属性输出到日志中;
以下是包含 2 个对象的剪贴板文本示例:
OBJ_VLINE H1 Vertical Line 5578 0 0 enum ENUM_OBJECT_PROPERTY_INTEGER 0 OBJPROP_COLOR 55295 1 OBJPROP_STYLE 2 2 OBJPROP_WIDTH 1 3 OBJPROP_BACK 0 4 OBJPROP_SELECTED 1 7 OBJPROP_TYPE 0 8 OBJPROP_TIME 1726739940 10 OBJPROP_SELECTABLE 1 11 OBJPROP_CREATETIME 1726847009 12 OBJPROP_TIMEFRAMES 2097151 200 OBJPROP_LEVELS 0 207 OBJPROP_ZORDER 0 208 OBJPROP_HIDDEN 0 1032 OBJPROP_RAY 1 enum ENUM_OBJECT_PROPERTY_DOUBLE 9 OBJPROP_PRICE 1.11449 enum ENUM_OBJECT_PROPERTY_STRING 5 OBJPROP_NAME H1 Vertical Line 5578 6 OBJPROP_TEXT 206 OBJPROP_TOOLTIP OBJ_CHANNEL H1 Equidistant Channel 40885 5 1 enum ENUM_OBJECT_PROPERTY_INTEGER 0 OBJPROP_COLOR 255 1 OBJPROP_STYLE 0 2 OBJPROP_WIDTH 1 3 OBJPROP_BACK 0 4 OBJPROP_SELECTED 1 7 OBJPROP_TYPE 5 8 OBJPROP_TIME 1726758000 8 OBJPROP_TIME.1 1726797600 8 OBJPROP_TIME.2 1726758000 10 OBJPROP_SELECTABLE 1 11 OBJPROP_CREATETIME 1726847883 12 OBJPROP_TIMEFRAMES 2097151 200 OBJPROP_LEVELS 0 207 OBJPROP_ZORDER 0 208 OBJPROP_HIDDEN 0 1003 OBJPROP_RAY_LEFT 0 1004 OBJPROP_RAY_RIGHT 0 1031 OBJPROP_FILL 0 enum ENUM_OBJECT_PROPERTY_DOUBLE 9 OBJPROP_PRICE -28.113879003558715 9 OBJPROP_PRICE.1 -21.708185053380777 9 OBJPROP_PRICE.2 -48.04270462633452 enum ENUM_OBJECT_PROPERTY_STRING 5 OBJPROP_NAME H1 Equidistant Channel 40885 6 OBJPROP_TEXT 206 OBJPROP_TOOLTIP
下面是粘贴到图表上的对象:
由MetaQuotes Ltd译自英文
原代码: https://www.mql5.com/en/code/52263

通过 vlines,您可以轻松查看 "之 "字形指标确认的看涨和看跌期。您可以控制 "之 "字形的显示方式,选择从图表的起点开始或从一定数量的柱状图开始,还可以控制显示峰值或谷值价格、过去一段时间的方向及其振幅(以点为单位)的标签的显示方式。当然,该功能在主窗口和子窗口均可使用。 警告这是理解和校准指标以及制定策略的重要辅助工具,但不能直接使用。翻译自 DeepL.com(免费版)。

- 该脚本会扫描当前图表,查找任何可用的图表对象 - 对其进行计数和相应删除 - 并分别记录图表上对象的名称。