Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Virtual - библиотека для MetaTrader 5
- Просмотров:
- 7272
- Рейтинг:
- Опубликован:
- 2018.10.03 22:54
- Обновлен:
- 2024.03.27 09:30
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Данная кроссплатформенная библиотека позволяет работать с виртуальным торговым окружением одним из самых простых способов.
Сценарии использования виртуального торгового окружения.
- Тестер реального времени. Это значит, что Вы можете в реальном времени наблюдать, что было бы, если бы советник торговал на свежайших ценах в Тестере. Это всегда полезно, т.к. позволяет выявить причины расхождения между реалом и Тестером. При этом не требуется дожидаться наступления новых суток (ограничение MT5-тестера) или создавать спец. инструментарий для Тестера, чтобы он мог подцепить свежие данные. Соответственно, не нужно запускать Тестер снова и снова для обновлений. Фактически, виртуальное торговое окружение - это и есть Тестер, могущий работать в реальном времени.
- Авто-оптимизация. Виртуальное торговое окружение предполагает, что Вы диктуете ему, на каких данных работать. Поэтому имея массив исторических данных Вы можете прогнать любую ТС на них внутри виртуального торгового окружения. Таким образом появляется простая возможность внутри программ делать авто-оптимизацию - программа сама себя регулярно оптимизирует, будто это делает штатный Тестер.
- Перевод реальной торговли в виртуальную (и обратно). Например, практикуется отключение ТС при убытках до "лучших времен". Как правило, "лучшие времена" предлагается анализировать либо через Тестер, либо через торговлю минимальным лотом. Виртуальное же окружение позволяет прекратить торговлю в реальном торговом окружении, при этом продолжив торговлю в виртуальном торговом окружении. Это дает ощутимое удобство при анализе "лучших времен" и легкое обратное включение торговли на реале.
- Упрощение торговой логики на боевом счету. Рынок создает ситуации, которых нет в Тестере. Это и реджекты и частичное исполнение. Что порождает массу сложностей, чтобы торговля на реальном счету велась близко к той идеальной картине, которая была, когда создавась ТС в Тестере. Как правило, авторы ТС тратят очень большие усилия для борьбы с рыночными нюансами, которые крайне сложно предусмотреть. Фактически, учатся на своих ошибках за реальные деньги. Т.к. демо-счета не в состоянии эмулировать многие вещи реального мира. Виртуальное же окружение позволяет видеть в любой момент идеалистическую картину исполнения. Соответственно, для обхода подводных камней настоящего рынка нужен только доступ в реальном времени к этой идеальной картине и качественный синхронизатор (копир-сервис) из виртуального окружения в реальный. Поэтому при решении сложных ситуаций на реальном рынке большую помощь оказывают виртуальные торговые окружения.
- Ускорение Тестера. Штатный Тестер является универсальным. Это значит, что он вынужден эмулировать торговое окружение максимально полно. Что влечет за собой высокие издержки в виде ограничений скорости работы. При создании и исследованиях ТС столь высокая точностью является исчерпывающей. Имеются разные способы ускорения Тестера. От использования кастомных символов (до сотен процентов) до виртуальных торговых окружений (десятки и сотни процентов), которые могут позволить себе что-то не учитывать ради скоростных показателей. Ускорение Тестера - существенный конек виртуальных торговых окружений, т.к. экономит вычислительные ресурсы и самое главное - время.
- Переворот ТС. Виртуальное торговое окружение позволяет очень просто переворачивать любые ТС.
- Торговля нескольких ТС на Netting-счете. С помощью виртуального торгового окружения процесс запуска любого количества ТС на Netting-счете значительно упрощается. ТС не будут мешать друг другу.
- Однонаправленные позиции на Netting-счете. Можно открывать в одном направлении несколько позиций, каждая из которых будет иметь свои Magic, OpenTime, OpenPrice, Comment и т.д. Это, например,позволяет на Netting-счете создавать сеточные ТС, где у каждой однонаправленной позиции разные TP.
- Скрытие Limit/Stop/SL/TP-уровней. Если возникает задача скрыть значимые торговые уровни от чужих глаз, то она быстро решается с помощью виртуального торгового окружения.
- Запуск Hedge-ТС на Netting-счете. Все ТС запускаются в Hedge-виртуальном окружении. Netting-реальное окружение только синхронизируется с виртуальным.
- Продолжение работы ТС после (нештатной) остановки. Логика многих ТС зависит от того, что ТС делала ранее. Поэтому даже выключив ТС и сразу запустив заново может не получится результата, как будто ТС работала без выключения. Помочь решить эту проблему может виртуальное торговое окружение. При старте сначала ТС временно запускается в виртуальном окружении на ценовой истории до текущего момента, а затем переводится в реальное торговое окружение на постоянной основе. Например, таким образом могут быть решены многие нештатные ситуации с отключением и включением ТС.
Реализация.
Данная библиотека позволяет создавать виртуальное торговое окружение: вести торговлю так, будто это реальное торговое окружение. Данный функционал для библиотек не нов, но представленная кроссплатформенная библиотека обладает одним (иногда важным) свойством: для ее использования не нужно ничего изучать, достаточно только знать торговую логику MT4 (не MT5).
Для проведения виртуальной торговли выбрана MT4-style торговая логика, как наиболее удобная и позволяющая легко писать кроссплатформенные советники.
Пример.
Функционал библиотеки традиционно хорошо может продемонстрировать специально написанный для этого пример.
// Запуск ТС в реальном и виртуальном торговых окружениях #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006 #include <fxsaber\Virtual\Virtual.mqh> // Виртуальное торговое окружение input double Lots = 1; input int Interval = 100; // Время жизни позиции input bool Example = true; // Какой пример кода выбрать // Переворотная ТС void System() { if (!OrderSelect(OrdersTotal() - 1, SELECT_BY_POS)) OrderSend(_Symbol, OP_BUY, Lots, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 100, 0, 0); // Если нет позиции - открываем else if (TimeCurrent() - OrderOpenTime() > Interval) // Если позиция прожила больше заданного времени { // Перевернули позицию OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100); OrderSend(_Symbol, 1 - OrderType(), Lots, OrderClosePrice(), 100, 0, 0); } } void OnTick() { static const int handle = VIRTUAL::Create(); // Создали хэндл виртуального торгового окружения. 0 - реальное торговое окружение if (Example) { if (VIRTUAL::SelectByHandle()) // Выбрали реальное торговое окружение System(); // Запустили ТС на выбранном торговом окружении (реальное) if (VIRTUAL::SelectByHandle(handle)) // Выбрали виртуальное торговое окружение { VIRTUAL::NewTick(); // Добавили тик в виртуальное торговое окружение System(); // Запустили ТС на выбранном торговом окружении (виртуальное) } } else // Альтернативная запись тех же действий. // Пробегаемся по всем имеющимся торговым окружениям for (int i = 0; i <= VIRTUAL::Total(); i++) if (VIRTUAL::SelectByIndex(i)) // Выбрали соответствующее торговое окружение { VIRTUAL::NewTick(); // Добавили тик в выбранное торговое окружение System(); // Запустили ТС на выбранном торговом окружении } Comment(VIRTUAL::ToString()); // Вывели на чарт состояние виртуального торгового окружения }
Это кроссплатформенный переворотный советник, торговая логика которого помещается всего в несколько строк (System-функция), благодаря MT4-style. Советник запускает ТС одновременно в реальном и виртуальном торговых окружениях. Это хорошо можно увидеть в Тестере MT4 или MT5 (CTRL+F5)
На скрине показано, что торговля в реальном и виртуальном окружениях идентична.
Обратите внимание, что код ТС абсолютно не меняется. Делается только выбор торгового окружения: реальное или любое количество виртуальных.
Приведенный код избыточен - два варианта одного и того же, дабы продемонстрировать логику работы с библиотекой.
Ускорение Тестера.
Поскольку сценарий ускорения Тестера (см. п. 5 выше) может быть восстребован чаще остальных, включена возможность переключючения любой ТС в виртуальное окружение и обратно добавлением в начало кода только двух строк.
#define VIRTUAL_TESTER // Запуск в виртуальном торговом окружении #include <fxsaber\Virtual\Virtual.mqh> // Виртуальное торговое окружение
Как раз выделенная строка дает возможность не вмешиваться в оригинальный код ТС.
Этот режим сделан специально для Тестера. Предполагается, что запускается длительная Оптимизация с включенным (VirtualTester = true) виртуальным окружением вместо реального. Что дает существенный выигрышь в скорости (времени) Оптимизации. Полученные результаты (OnTester-критерий - Баланс) далее могут быть использованы для классических одиночных прогонов в реальном торговом окружении (VirtualTester = false).
Переворот ТС.
Те же две строки, что предназначены для ускорения Тестера, дают решить еще одну распространенную задачу - переворот ТС.
Режим ReverseDeals = true включает переворот сделок. Внутренний алгоритм таков:
- Оригинальный советник торгует внутри виртуального окружения, как будто в реальном.
- В реальном же окружении отображаются позиции, обратные соответствующим позициям в виртуальном окружении.
Таким образом логика советника никак не нарушается, но при этом можно видеть, что даст переворот ТС. Этот режим опять же предназначен для Тестера.
Особенности.
- Далеко не все реализовано в данном виртуальном торговом окружении, по сравнению с тем же штатным Тестером.
- Поддерживаются оба режима Hedge/Netting. Например, можно в MT4/5 создать Netting и Hedge виртуальные окружения одновременно.
- Нет ограничений на количество виртуальных окружений.
- Нет и не будет исполнения по last-ценам, как это иногда происходит в MT5-Тестере. Т.к. last-цена не является актуальной для любого момента времени.
- Лимитные ордера и TakeProfit-уровни всегда исполняются по заявленным ценам - не скользят. Это позволяет убрать граальность некоторых ТС, что может показывать MT5-тестер.
- Стоповые ордера и StopLoss-уровни всегда исполняются по первой цене акцепта (отрицательные проскальзывания). Опять же с целью борьбы с тестерными граалями.
- Выставление отложенных ордеров и SL/TP-уровней по текущим ценам запускает сразу их акцепт, в отличие от некоторых режимов работы MT5-тестера. Такое поведение соответствует рыночным реалиям.
Индикатор на трёх скользящих средних
RNNСоветник на базе индикатора iRSI (Relative Strength Index, RSI) и небольшой нейросети
Индикатор отображает наклонную трендовую линию, параметры которой устанавливаются при старте индикатора трейдером, с помощью которой задается уровень срабатывания сигнала и подаются сигналы с отправкой почтовых и push-сообщений на смартфон при пробое этой трендовой линии.
XBullsBearsEyes_Vol_DirectИндикатор XBullsBearsEyes_Vol с индикацией направления движения баров гистограммы цветными значками на этих барах