Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 36
- Рейтинг:
- Опубликован:
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Вам когда-нибудь приходилось копировать и вставлять некоторые графические объекты между открытыми графиками? Думаю, да. Удивительно, но в 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 - флаг, делающий все объекты выбираемыми (обычно false для объектов, созданных программно);
- 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 (бесплатная версия).

Сервис для MetaTrader 5, создающий синтетический пользовательский символ "USDX.synthetic", отражающий индекс доллара США (US Dollar Index, DXY) в реальном времени.

Скрипт рисует уровни Рудолфа Акселя

Индикатор рассчитывает % роста или падения относительно CLOSE, написан с применением ООП, и легко интегрируется в любой советник или иной индикатор.