метатрейдер 5 метатрейдер 4 в чем разница
В данной статье разговор пойдет о различиях между версией 4 и 5 популярных торговых терминалов MetaTrader. МТ4 был и остается самым распространенным ПО для совершения сделок на Форекс через интернет. Простота навигации, удобный и понятный интерфейс и множество других преимуществ объясняют его бесспорное лидерство на данном поприще. Вместе с тем MT5 (скачать можно здесь) медленно, но уверенно завоевывает свою долю рынка, поражая воображение модными и полезными “фишками”. Давайте рассмотрим их детальнее.
“Нет” локированию, “Да” новым рынкам
Кстати, старый добрый MT4 остается. Просто MT5 (MetaTrader 5) будет его хорошей альтернативой. Для 4-й версии имеется множество скриптов, советников и т.д., в то время как 5-я позволит развиваться самой программе, улучшая и модифицируя ее суть для удобства трейдеров.
Трейдеры, работающие на MT5, смогут торговать не только на валютных парах, но и на акциях, фьючерсах и других биржевых инструментах.
Позиции, ТФ и интерфейс MT5
В МТ4 мы могли открывать несколько ордеров на разных уровнях по одному инструменту. В МТ5 мы сможем делать также, но все сделки перейдут в одну позицию, которую трейдер и увидит в торговом окне.
Появился стакан цен, который пока отображается не у всех брокеров.
Интерфейс в целом остался таким же, все иконки и значки на месте. А вот количество таймфреймов значительно увеличилось: из новых М2-3-4-6-10-12-20, Н2-3-6-8-12. На любой вкус, как говорится.
Очередное приятное новшество – возможность управления позицией с помошью обычной мышки, а именно уровни SL и TP. Также трейдеров порадует встроеный в терминал экономический календарь.
Входить в позицию можно, сделав один клик мышкой. Несомненно, любители быстро заключить сделку это оценят.
История котировок теперь хранится только в формате М1. Тема котировок обширна, поэтому мы не будем здесь ее затрагивать.
Тестер стратегий в MT5
Встроенный тестер стратегий в MT4 был удобен, но в новой версии он стал еще лучше, гибче, мощнее. Можно назвать его лучшим достижениям в новом терминале. Тестер позволяет протестировать торговую стратегию (советника) на нескольких валютных парах одновременно! Также благодаря эффекту многоядерности можно делать тесты, используя несколько компьютеров. Это ускорит процесс тестирования или оптимизации, даже если ваша торговая система сложна. Другими словами, мы получили дистанционное тестирование с участием нескольких компьютеров. Это позволяет использовать максимум мощности машин и получить значительный прирост в скорости.
Новая уникальная возможность, реализованная в MT5 создание советников (роботов) с помощью генератора торговых стратегий. Чтобы создать простого советника, достаточно определиться с модулем торговых сигналов, трейлинг стопом и управлением капиталом, после чего они подключаются к новому советнику. Это происходит на этапе создания кода “Мастером MQL5”.
В наличии готовая библиотека работоспособных роботов, которая поставляется с терминалом. Мастер генерации поможет сделать процесс создания советника простым и комфортным.
Резюме
MetaTrader 5 стал ожидаемым шагом от разработчиков ПО для трейдинга. Удобный, с множеством новых функций, не полностью реализованный, но потенциально очень перспективный – именно таким нам и видится новый терминал.
Несмотря на некоторые недостатки вроде нового языка программирования (MQL5 вместо MQL4) и экзотических таймфреймов, продукт получился добротным и интересным. Надеемся, что в скором времени валютные брокеры включат MT5 в свой функционал, и трейдер сможет выбирать, что лучше – старый добрый MT4 или навороченный модный MT5. А, может, использовать оба? Это не замена МетаТрейдера 4, а дополняющий и развивающий его идеи отдельный продукт.
Успехов и помните, что прибыльность торговли очень сильно зависит от выбранного вами брокера!
Что выбрать: Metatrader 4 или Metatrader 5?
Долгие годы МТ4 оставался безоговорочным лидером по популярности среди трейдеров. Пока что такая ситуация сохраняется, но MetaTrader5 имеет все шансы повторить успех предыдущей версии торгового терминала.
На данный момент МТ4 использует более 60% трейдеров, и пока что нет никаких предпосылок для массовой их миграции на МТ5 либо другие платформы. При сравнении будем выделять ключевые новые возможности обновленного терминала.
MetaTrader5 по сравнению с МТ4 обладает:
Всего доступно 30 таймфреймов
Время выхода каждой новости подписано под графиком
Инструмент для нумерации волн Эллиотта
Новые типы отложенных ордеров
Смысл этих ордеров лучше пояснить на примере:
Смысл использования ордера Sell Stop Limit
Новые возможности в оптимизации
Выбор режима торговли
Режимы моделирования поведения цены
ЧТО СДЕРЖИВАЕТ РАСПРОСТРАНЕНИЕ МТ5
На данный момент причина одна – трейдеров и так все устраивает в МТ4, просто нет смысла менять терминал. К тому же, индикаторы и советники от МТ4 не подойдут для нового МетаТрейдера, так что при переходе трейдеры лишатся любимых инструментов и не факт, что удастся найти им замену.
В прошлом была еще одна причина – невозможность локирования, то есть при открытии 2 разнонаправленных позиций происходило их поглощение друг другом. В середине 2016 года этот изъян исправили.
ЗАКЛЮЧЕНИЕ
На данный момент МетаТрейдер5 в состоянии составить серьезную конкуренцию МТ4. Задача стоит только в том, чтобы стимулировать переход трейдеров со старой версии терминала.
Просим учесть, что в рамках обзора мы затронули только основные изменения, те, которые важны для каждого трейдера без исключения. При внешнем сходстве обоих терминалов работа была проделана колоссальная, внешний вид терминала не стали менять только для того, чтобы трейдерам не пришлось заново учиться с ним работать.
Все самое лучшее от Академии
только нашим подписчикам
MetaTrader 4 или MetaTrader 5? Сравнение торговых платформ. Часть 2 из 4.
Часть 2 из 4.
MetaTrader 4 и Metatrader 5. Какая лучше?
Какая лучше: МТ4 или МТ5? Платформа MetaTrader 5 – это модифицированная версия MetaTrader 4, которая устанавливается на 64-разрядные ОС. Она и быстрее, и функциональнее, и гибче. Операции, на которые МТ4 затратила бы минуты, MetaTrader 5 выполняет в секунды. Стало больше отложенных торговых ордеров, поменялся принцип исполнения заявок. Терминал многопотоковый. К примеру, можно включить оптимизацию в стольких потоках, сколько ядер на вашем компьютере. Цель этих усовершенствований – ускорить передачу внутренних данных и предоставить пользователям новые многофункциональные инструменты, позволяющие создавать продвинутые торговые стратегии.
Начните торговать на Форекс с проверенными брокерами, перечисленными ниже | ||||||
Платформа МТ5 прекрасно подходит и для торговли на фондовых рынках. Функционал, оснащённый полновесным ценовым стаканом, создаёт условия для торговли различными деривативами, параллельно делать ставки на традиционном Форексе.
Теперь сведём сравнение МТ4 с МТ5 в таблицу:
Кое-что из приведённых различий между MetaTrader 4 и MetaTrader 5 разберём детальнее.
Интерфейсы платформ
Чем отличаются интерфейсы MetaTrader 4 и MetaTrader 5, трудно определить на глаз. В версии МТ5 разработчики больше потрудились над модификацией функционала платформы, практически не изменяя интерфейс терминала. Незначительные изменения внесли в главное меню, однако чаще всего используемые опции оставили в прежнем виде. И в MetaTrader 4, и в MetaTrader 5 можно открыть окно «Навигатора», включать вспомогательные меню таймфреймов, а также видов графиков.
На картинке интерфейс МТ4 с раскрытыми панелями и главными окнами.
А это – интерфейс МТ5
Изменения несущественны: в MetaTrader 5 стали крупнее иконки панели инструментов, стало больше вкладок в окошке «Терминал».
Изменения главного меню МТ5, отличные от платформы МТ4:
В окошко «Терминал» добавлены виртуальные выделенные серверы и новостной календарь.
Вывод. Овладел функционалом платформы МТ4, версию МТ5 вы освоите часа за 2 максимум. Также наоборот, разобравшись с МТ5, вы за один-два часа привыкнете к функционалу МТ4.
Таймфреймы
В MetaTrader 5 число таймфреймов стало больше: со стандартных 9-ти увеличилось до 21-го. Базовые 9 расположены так же, как в MetaTrader4, вверху окна. Чтобы загрузить нестандартный таймфрейм надо кликнуть по графику ПКМ и выбрать «Период графика».
Потребность в этом новшестве вызывает сомнения. Допустим, что скальпер может чувствовать принципиальную разницу между интервалами в одну и две минуты. Но какая разница во внутридневной системе торговли между 12 и 15 мин не очень понятно. Более того, в MetaTrader4 нестандартные временные периоды можно добавить с помощью скрипта в течение пяти минут.
Вывод. Увеличение количества таймфреймов вряд ли можно назвать значимым достоинством терминала МТ5. Искушённым спекулянтам это, наверное, удобно, однако для освоения торговли вполне хватает таймфреймов и версии МТ4.
Принцип исполнения торговых заявок
В MetaTrader 4 есть 3 вида исполнения заявок:
Выбранный брокером вид исполнения заявок по каждому аккаунту указывается в условиях торговли.
В MetaTrader5 принцип исполнения торговых ордеров дополнили новшествами, которые теперь трейдер может выбирать сам, указав в окошке ордера:
Сообщество трейдеров практически не заметило усовершенствования МТ5. Трейдинг гораздо больше ценит скорость, поэтому популярностью пользуется как раз наоборот «Торговля в один клик». На рынках по технологии ECN с огромной ликвидностью котировка меняется в течение миллисекунд, да и объёмы по актуальной цене в достаточном количестве есть всегда. В MetaTrader 5 разработчики лишь усложнили процедуру подачи ордеров. Поэтому я затрудняюсь сказать, чей принцип исполнения заявок лучше и практичнее.
Вывод. Режим частичного и полного исполнения заявок – это преимущество МТ5. Однако его используют лишь профессионалы, каких на рынке не очень много. Новичкам же я советую пользоваться MetaTrader 4, потому что легче усвоить основы работы на платформе, если на ней немного опций.
Копирование торговли из MetaTrader 5 в MetaTrader 4
Введение
Не так давно многие трейдеры считали MetaTrader 5 сырой платформой, непригодной для реальной торговли, но сейчас, спустя небольшой срок, общественное мнение задается вопросом: когда же релиз на реале? Многие оценили преимущества, реализованные в MetaTrader 5. К тому же Чемпионат, проводимый компанией MetaQuotes Software Corp. подхлестнул интерес разработчиков к языку MQL5. И теперь этот интерес желает реализоваться в виде получения прибыли от реальной торговли. Сам вопрос «когда же релиз на реале?» адресован не по адресу. Его решение зависит от конкретного брокера. Именно они принимают окончательное решение о сроках перехода на новую платформу.
Что же может трейдер одиночка, предпринять в этой ситуации? Ответ очевиден, нужно использовать возможности реальной торговли предоставленные MetaTrader 4, как транзитные для MetaTrader 5. т.е. написать копировщик. Связки между двумя MetaTrader 4 не новация в сети. Теперь пришло время реализовать такую связку с MetaTrader 5.
Пролог
Чем трейдер может управлять? Что из этих двух составляющих торговли является рулем в его торговле? Ну, конечно же, объем торговой позиции. Ведь котировки трейдер получает от брокера, и их изменение ему не подвластно. Отсюда первый вывод: для того чтобы сделать копию торговли нужно поддерживать синхронно объемы торговых позиций.
1. Сравнение двух платформ
1.1 Различия в системе учета
Сравниваемые платформы имеют разную систему учета торговли и это должно осложнить вопросы копирования. Но не нужно забывать, что ведущим в этой связке является MetaTrader 5. А это значит, что в MetaTrader 4 нужно виртуально повторить туже самую систему учета.
Торговая позиция в MetaTrader 5 набирается из отдельных торговых приказов, что не противоречит ордерному учету, принятому в MetaTrader 4. Общий Stop Loss и Take Profit на позицию можно реализовать через установку каждому открытому ордеру одинакового Stop Loss и Take Profit. Существенные разногласия между платформами возникают лишь в вопросе о том, какой ордер закрывать в MetaTrader 4. Так как в MetaTrader 5 раздельного учета ордеров в торговой позиции не ведется, то этот вопрос может стать камнем преткновения.
1.2 Объемы торговых позиций
Рассмотрим в деталях, есть ли разница какой ордер закрывать? Не скажется ли это на прибыли? Например, имеем два ордера, открытые в разное время, и закрытые так же в разное время, но имеющие пересечения по времени жизни. То есть, попробуем в ордерной системе учета эмулировать торговую позицию.
Рассчитаем по вариантам, что произойдет с прибылью, если мы поменяем уровни закрытия ордеров местами:
тип | объем | уровень открытия | уровень закрытия |
---|---|---|---|
sell | 0.1 | 1.39388 | 1.38438 |
sell | 0.1 | 1.38868 | 1.38149 |
Для расчета набросаем код калькулятора:
Вот распринтовка калькуляции:
А теперь поменяем местами значения close1 и close2.
Рисунок 1. Варианты закрытия ордера
Из рисунка 1 видно, что участки AB и CD имеют в обоих вариантах объем 0.1, а участок BC объем 0.2, и это не зависит от того, объем какого ордера закрыт.
В профитах отдельных ордеров имеем разницу, однако итоговые прибыли от реализованных позиций равны. Но прошу обратить внимание читателя на то, что приведенный пример рассчитывался на равных объемах ордеров. То есть, на одних и тех же уровнях реализовано закрытие не ордера, а одинакового объема. Причем, если строго придерживаться принципа закрытия объемов, то не имеет значения, каким объемом обладает сам ордер. Если закрывающий объем будет больше ордерного, то произойдет частичное закрытие.
Отсюда главный вывод: в суммарной позиции не важно, какой ордер был закрыт, главное, чтобы закрытые объемы на заданных уровнях были равны.
1.3 Особенности копирования сделок
Из вышеописанных примеров видно, что для получения той же прибыли совсем нет необходимости транслировать сигналы, которые дает советник, написанный на MQL5. Достаточно повторять объемы торговых позиций. Хотя сразу оговорюсь, что по ряду причин, которые будут рассмотрены ниже, это не будет полностью тождественная торговля. Однако эти причины не могут быть препятствием для получения реальной прибыли с использованием прибыльной АТС, написанной на языке MQL5.
Эти две причины сводят на нет все пипсовочные стратегии. Поэтому, пока не будет реализована реальная торговля на MetaTrader 5, такие стратегии применять не получится.
Системы, подразумевающие получение прибыли (с трейда), намного превышающие спрэд и нечувствительные к котировкам конкретного брокера, вполне могут быть запущены для получения реальной прибыли с помощью копировщика позиций.
2. Постановка задачи
2.1. Связка по передаче сигналов между MetaTrader 5 и MetaTrader 4
Для связки можно использовать свойство MetaTrader 5 писать подкаталоги на любую глубину. Я не проверял утверждение «на любую», но до 10 вложений подкаталоги пишутся, это точно. А большего нам и не нужно. Можно конечно использовать DLL для организации доступа, но не пользоваться DLL, если вопрос можно решить без них, это моя принципиальная позиция. Чтобы решить вопрос без DLL, достаточно установить MetaTrader 4 в каталог \Files\ терминала MetaTrader 5 (см. особенности работы с файлами).
Таким образом, путь к общему файлу будет выглядеть так:
При таком расположении файл будет доступен как в MetaTrader 4, так и в MetaTrader 5, возможность совместного пользования файлом предусмотрена в функционале MQL5.
2.2. Трансляция позиций из MetaTrader 5
Для трансляции позиции и экономного расходования ресурсов нужна функция, которая будет отслеживать ситуацию появления/изменения/закрытия торговой позиции по всем инструментам. Выше было установлено, что для передачи торговли достаточно знать объем торговой позиции. Добавим к объему символ инструмента и уровни SL и TP.
Для отслеживания изменений нам потребуется знать прежнее состояние позиции. И в случае, если предыдущее и теперешнее состояния не равны (а значит, позиция изменилась), это нужно отобразить в файле. Также потребуется функция записи этой информации в файл. При этом файл нужно открывать так, чтобы он был доступен для одновременного пользования несколькими программами.
Чтобы не пропустить момент изменения позиции, следящая система должна быть реализована в функции OnTimer(), т.к. следить придется за всеми инструментами сразу, а тики приходят на разных символах в разное время. Также требуется передать сигнал об изменении содержимого файла.
2.3. Получение сигналов в MetaTrader 4
Требуется отслеживание сигнала обновления файла. Это можно организовать через переменную, состояние которой отслеживается для входа в зону изменения позиций. Нужна функция считывания файла с состоянием позиций. Стандартная функция, каких много, тут темных пятен быть не может.
Передача содержимого файла в массивы для расчетов. Тут потребуется синтаксический анализатор, т.е. парсер. Поскольку передаваться будут не только числа, но и символы, то удобней при передаче из MetaTrader 5, все кодировать в string. К тому же, записав все данные по одному символу, в одну текстовую строку, будет исключена возможность спутать данные.
2.4. Повторение торговых позиций в MetaTrader 4
Это самый большой набор функций. Он, в свою очередь, должен быть поделен на несколько подклассов.
2.4.1. Сравнение виртуальных позиций
Сравнение виртуальных позиций требуется для того, чтобы удостоверится в том, что позиции приведены в соответствие. Функция должна подсчитывать позицию по каждому инструменту в отдельности, а также иметь возможность отфильтровывать позиции, по которым торговля запрещена (если такие имеются).
В практике может встретиться ситуация, когда у брокера нет инструмента, по которому передан сигнал из MetaTrader 5. Но это не должно блокировать торговлю в целом, хотя нужно предусмотреть предупреждение. Пользователь вправе знать о нештатной ситуации.
2.4.2. Функция выбора ордеров
Данная функция должна выбирать ордера в зависимости от символа для дальнейшей работы с ними. При этом, поскольку мы транслируем только открытые позиции, ордера также должны фильтроваться, чтобы не попались отложенные.
2.4.3. Функция открытия ордеров
Должна содержать максимальное количество расчетов. Таким образом, достаточно будет передать объем и тип.
2.4.4. Функция закрытия ордеров
Так же как и предыдущая должна все обсчитывать перед отдачей команды на закрытие.
2.4.5. Функция модификации ордеров
Функция должна содержать проверку на предмет близости к рынку. Также, желательно развести во времени выставление ордера и его стоп-уровней, т.к. совместное выставление стоп-уровней при открытии разрешено не у всех брокеров. К тому же, совместное открытие ордера и выставление стоп-уровней увеличивает вероятность реквот.
Таким образом, позиция будет максимально быстро повторена. А выставление стоп-уровней вещь уже второстепенная, хотя и не менее важная.
3. Реализация
Коды подробно комментированы, почти построчно. Поэтому в разъяснениях к кодам, я буду останавливаться лишь на самых сложных моментах.
Связка по передаче сигналов между MetaTrader 5 и MetaTrader 4
Сама связка реализована в MetaTrader 5 функцией:
Флаги открытия означают:
файл открывается для записи | разрешено совместное пользование разными программами для чтения | в кодировке ansi
В MetaTrader 4 связка реализована функцией:
параметр resize запрещает перераспределение памяти массива получаемых данных. В коде выделение памяти под этот массив идет на каждой итерации т.к. разработчику невозможно предсказать, сколько строк будет. Это зависит от количества выбранных инструментов в MetaTrader 5. Поэтому высчитать его заранее в MetaTrader 4 не получится.
Как выход, следует увеличивать массив на каждом шаге на один. Но эту операцию следует блокировать уже на втором вызове функции, т.к. длинна массива, уже установлена, и меняться не будет. Для этого и предусмотрена переменная bool resize.
Трансляция позиций из MetaTrader 5
Для организации трансляции в функции OnTimer с частотой 1 сек. идет получение данных обо всех позициях в функции:
С последующим сравнением предыдущего значения позиций, с текущим значением в функции:
Причем выход по return ( true ) происходит, в случае если хоть одна ячейка не совпадает. Выход по return ( true ) означает, что позиции не равны, и файл нужно переписать. При перезаписи файла счетчик перезаписи cnt_command увеличивается на один.
Получение сигналов в MetaTrader 4
После считывания файла функцией READS() имеем заполненный массив строк s[].
Для того, чтобы эти строки превратились в полезную информацию, нужен парсер.
является лишь оболочкой для вызова функции распознавания строки:
Функция ведет распознавание всех ячеек, кроме символов.
Распознавание символов ведется циклом, единожды, в начале алгоритма, с помощью функции:
Далее мы не будем обращаться к коду на mql5, и рассмотрение кода переносится строго к коду mql4, если это не будет оговорено отдельно.
Сравнение виртуальных позиций
Сравнение позиций разделено на две части. Сравнение объема и типа позиций реализовано в функции:
в этой оболочке реализован вызов получения реального состояния позиций в функции:
и цикл сравнения, по уже упомянутому принципу «все или нечего». То есть, если хоть одна ячейка не совпадает, все позиции признаются различными. В real_pos_volum() реализованы ряд фильтров, которые описаны подробно в самом коде и будут использоваться неоднократно в других функциях.
В частности, при суммировании объема всех ордеров по одному инструменту в одну виртуальную позицию. При этом, для того чтобы локовые позиции (если такие будут), обрабатывались правильно, ордера buy будут иметь объем с минусом, а ордера sell с плюсом.
Второй частью сравнения является сравнение стоповых уровней (под стоповыми уровнями подразумевается не только Stop Loss, но и Take Profit) реализована в функции, подобной вышеописанной:
Как и с объемами, внутри оболочки следует вызов получение информации о реальном состоянии стоп-уровней в функции:
Функция выбора ордеров
Ордера следует выбирать только для закрытия объема, поэтому сложная специализированная функция выбора реализована только для закрытия:
Имеет параметры символа и объема, который следует закрыть. Для того чтобы меньше дробить ордера, в первом цикле функции ведется поиск ордера, который равен по объему с закрывающим объемом, переданным в параметре.
Выбора ордеров для модификации стоп-уровней реализован в функции:
Ордера фильтруются лишь по символу, т.к. все стоп-уровни, в пределах одного инструмента равны.
Функция открытия ордеров
Реализуется в функции:
содержит все требуемые проверки для комфортного открытия ордера по указанным данным.
Функция закрытия ордеров
Реализуется в функции:
В коде имеется проверка на случай превышения lot параметра над реальным объемом выбранного ранее ордера.
Функция модификации ордеров
Реализуется в функции:
В коде имеются проверки, на случай если споп-уровни, не соответствуют типу ордера, производится обмен значениями. Так же проверяется случай, когда уровни уже имеют запрашиваемое значение.
4. Функции логики
Ранее составленный план окончен, но в коде остались не разъясненные функции. Это функции логики, можно сказать основные функции движущие сам процесс.
Код из советника в зацикленный скрипт переносится вот так:
Код цикла, расположенного в start () будет выглядеть так:
Самые сложные логические построения находятся в функциях processing_signals() и processing_sl_tp_levels().
Начнем описание функций по принципу «от простого к сложному». Хотя вызов в коде идет наоборот.
Как уже упоминалось раньше, функция представляет собой бесконечный цикл с выходом по двум условиям:
Первое условие выхода из цикла происходит в случае, если значение cnt_command не равно аналогичному значению в файле. Перед этим происходит получение последней информации о файле при условии, что время работы цикла превысило задержку, установленную в глобальной переменной delay_time.
Время может быть превышено, т.к. все модификации защищены фильтром Busy_and_Connected(). То есть входить только в случае, если торговый поток свободен.
Тут стоит объяснить, что в MetaTrader 4 (в отличие от MetaTrader 5) невозможно послать серию команд серверу, не получив реквот. Сервер может принять только первый запрос, остальные будут потеряны. Поэтому перед выставлением команды серверу следует сделать проверку, свободен ли торговый поток.
Вторая проверка на выход из цикла, это ранее уже описанная функция сравнения позиции по стоп-уровням compare_sl_tp_levels(): если позиции равны, то покидаем цикл.
Теперь к сложному: функция processing_signals() организована похожим образом, но логическая часть сильно отличается по функциональности.
Вот этот участок разберем подробно:
Переменные TF,TR сохраняют значение типа позиции в виде buy=-1,sell=1. Соответственно, TF-это значение, хранящееся в файле, TR-реальное значение виртуальной позиции. Аналогично с объемами VF,VR.
Таким образом, неравенство:
будет true в случае, если не равны объемы или типы позиций.
Далее идет логическая связка:
означающая, что если реальный объем не равен нулю и типы не равны, то следует закрыть всю позицию.
Сюда входят варианты, когда объем в файле равен нулю и вариант, когда позиция перевернута по направлению. В варианте, когда позиция перевернута по направлению, следует сначала подготовить позицию к открытию, т.е. закрыть предыдущий объем. Тогда при следующей итерации, логика пойдет по другой ветке, на открытие.
Второе сложное условие логической связки означает, что если тип верный, но реальный объем больше того, что хранится в файле, то следует уменьшить реальный объем. Для этого предварительно высчитывается размер лота, на который нужно уменьшить объем.
Если же ни одно условие закрытия не подходит к данной ситуации, а позиции, как мы выяснили в первом фильтре, не равны, то следует открытие нового ордера. Здесь тоже есть два варианта: открыть ордер на весь размер позиции в файле или долиться до уже имеющихся ордеров. Тут хочу отметить, что проверка на превышение предельного объема имеется в самой функции открытия, поэтому недостающий объем (если этого не позволила проверка) будет открыт при следующей итерации алгоритма. Благодаря тому, что вначале обрабатываются ситуации закрытия, а лишь потом открытия, практически не может быть ситуации локирования.
Под конец разбора кодов хочу отметить тонкое место, над которым пришлось попотеть при разработке алгоритма. Ситуация переоткрытия ордера, который только что закрылся в MetaTrader 4 по стопам. Я уже упоминал ранее, что расхождение котировок чаще всего держится в районе 2-3 пункта пятизнака. При спрэде в 15 разница несущественная. Но при этой разница при срабатывании стоплосса или тейкпрофита в MetaTrader 4, раньше чем в MetaTrader 5, создавала ситуацию, когда алгоритм стремился воссоздать только что закрытую позицию, с последующим ее удалением, при срабатывании стопов на MetaTrader 5.
К крупным убыткам это не приводило, но зря терялся один спрэд. Поэтому алгоритм был переработан так, чтобы после удаления позиции MetaTrader 4 не восстанавливал бы ее, а ожидал, пока изменится состояние файла. И лишь потом, снова выйдет на боевое дежурство. В данной ситуации трейдер руками может удалить позицию, если посчитает ее неверной. И она не будет восстановлена, пока MetaTrader 5 не сделает изменения в файле.
5. Проверка реализации на практике
Установим MetaTrader 4 в каталог C:\Program Files\MetaTrader 5\MQL5\Files\
Запустим, скомпилированный советник Translator positions на любом чарте в MetaTrader 5 (работа советника не зависит от чарта, на котором он запущен).
Рисунок 2. Translator positions в MetaTrader 5
На экране появился многострочный комментарий, с состоянием счетчика в первой строке и логом всех позиций построчно.
Запустим скомпилированный скрипт Copyist positions на любом чарте в MetaTrader 4 (работа зацикленного скрипта не зависит от чарта, на котором он запущен). На экране появился многострочный комментарий, с состоянием счетчика в первой строке и логом всех позиций построчно.
Рисунок 3. Copyist positions в MetaTrader 4
Далее можно в MetaTrader 5 запускать любой советник, результаты его работы будут максимально быстро скопированы в MetaTrader 4.
Рисунок 4. Позиции и ордера в терминалах MetaTrader 4 (сверху) и MetaTrader 5 (снизу)
Кстати говоря, управление счетом MetaTrader 5 может осуществляться и вручную, либо счет может быть залогинен по инвест-паролю.
Так, к примеру, копировщик можно запустить на любом чемпионатном счете.
Заключение
Данная статья призвана ускорить переход трейдеров на новую платформу, и стимулировать изучение MQL5.
В заключение хочу сказать, что приведенный код не может полностью заменить прямую торговлю на реале в MetaTrader 5. Он написан как универсальный, под любую систему торговли без учета логики, поэтому, как все универсальное, неидеален. Но на основе него может быть написан транслятор сигналов под конкретную стратегию. Для многих трейдеров, не разбирающихся в программировании, он может служить переходным этапом в ожидании релиза.
Тем же, кто хорошо разбирается в программировании, рекомендую доработать код на распознавание ордеров по магику и реализовать передачу и выставление отложенных ордеров. Выставление отложенных ордеров не влияет на получение прибыли при условии устойчивого соединения с сервером. Если же разрывы связи часты, то следует скопировать всю серверную часть, в том числе и отложенные ордера.
Изучайте новый язык, пишите на нем робастные системы. Удачи в торговле.