Описание торгового бота для рынка FOREX под MetaTrader 4 / MetaTrader 5 (скрипты на языках MQL4 / MQL5).
Описание функций.#
1.1. Использование торговых сетапов#
- Торговля ведется на основе сетапов аналогичных реализованным в функционале «эмуляция трейда».
- При срабатывании условия сетапа открывается торговая позиция с параметрами, определенными в сетапе (SL/TP, trailing и пр.).
- По одному сетапу по конкретной точке допустимо только однократное срабатывание (открытие торговой позиции).
1.2. Применение торговых стратегий#
- В зависимости от типа торговой стратегии обеспечивается своевременное вхождение в рынок.
- при достижении «уровня подхода» при торговой стратегии «rev» (на разворот);
- при подтверждении т.4 для торговой стратегии “reach” (на достижение уровня подхода к расчётной 6-ой [APPROACH]);
- при пробое расчётной 6-ой (для «классической» торговой тактики) либо при подтверждении t4 при «агрессивной» торговой тактике при торговой стратегии «P6over» (на пробой P6) и аналогичных;
- Размер лота определяется в зависимости от заранее определенной доли разрешенных потерь от текущего баланса.
1.3. Условия для открытия позиций#
- При исчерпании свободного баланса новые сделки не открываются.
- Добавлена переменная, задающая минимальное отношение P/L. Если соотношение меньше, сделка не открывается.
1.4. Логирование#
- Бот автоматически ведет лог всех своих действий. Лог сохраняется на сервере в текстовом формате.
- В логе фиксируются все срабатывания сетапов и причины, по которым сделка не была открыта.
Лог также содержит информацию о всех открытых и закрытых позициях, включая время входа и выхода, уровни входа и выхода, текущие финансовые результаты, а также соотношение потенциальной прибыли к потенциальным потерям.
1.5. Функция отслеживания реальных 6-ых до достижения уровня подхода к расчетной 6-ой#
Опция Proto6ctrl отключена по умолчанию, но может быть активирована при запуске бота: для этого в настройках нужно установить значение true вместо false. Информация о статусе этой настройки (включена/отключена) выводится на графике слева вверху.
Опция распространяется только на позиции, которые относятся к сетам, которые указаны в настраиваемом перечне (аналогично как у нас реализовано для опции, которая закрывает позиции по NN4).
При включенной опции Proto6ctrl бот отслеживает следующие условия (должны выполняться одновременно):
- сформирован ордер на базе сигнала от одного из сетов из настраиваемого перечня;
- уровень PREAPPROACH у давшей сигнал модели находится ближе к уровню расчётной т.6, чем уровень т.4;
- уровень PREAPPROACH фактически достигнут полностью сформированным баром на участке начиная с бара подтверждения т.4 (conf_t4), а уровень APPROACH не достигнут (на формирующемся баре).
Если условия соблюдены, бот отслеживает (на формирующемся баре) достижение уровня 1-ой цели на участке начиная с бара достижения PREAPPROACH.
Примечание:
- Когда эти опции будут переноситься в тестер стратегий на истории, планируются следующие допущения:
- если бар достижения PREAPPROACH совпадает с баром conf_t4, то отслеживание достижения уровня 1-ой цели начинается со следующего за ним бара;
- достижение 1-ой цели баром, достигшим PREAPPROACH, засчитывается если это нисходящий бар (в случае, когда т.3 - low).
Если после достижения PREAPPROACH 1-ая цель будет достигнута до того, как достигнут уровень APPROACH, то ордера по данном сигналу отменяются и больше не устанавливаются (сигнал бракуется).
2. Доработка серверной части (PHP) в рамках задачи (описание подхода).#
Функционал разработан в форме REST API: советник в MT4/MT5 отправляет запросы, а сервер отвечает в формате JSON.
Первый тип запроса — по мере появления новых баров формируется задание для открытия новых торговых ордеров с указанием уровня входа в сделку, уровня и времени отмены, целевых уровней и других параметров, определенных конкретным сетапом. Каждое такое задание маркируется уникальным сочетанием «ID модели + сетап» (тип цели уже заложен в сетапе). Серверный скрипт заранее просчитывает задания для открытия новых торговых позиций на текущем баре, обрабатывая крайний завершенный.
Например:
- Завершился бар →
- Сформировалась новая модель →
- Получили ответы нейронок на случай, если необходимый уровень ([APPROACH], например для стратегии rev) будет достигнут на новом (текущем баре) →
- Получили «срабатывание» определенного сетапа при условии достижения нужного уровня →
- Зафиксировали в активных «заданиях», что нужно открыть позицию на текущем баре при условии достижения определенного уровня с определенными параметрами сделки, указанными в сетапе →
- При очередном запросе со стороны MT4/MT5 обновленный список заданий передается эксперту: какой «сет» нужно отслеживать, на каком уровне открыть сделку и какие параметры отмены, сопровождения и целей использовать. Дальнейшее сопровождение уже выполняет сам эксперт в MT4/MT5: он отменяет сделку при выполнении условий отмены, открывает ее при касании нужного уровня, переставляет уровни по правилам сетапа и закрывает позицию по достижении
SLилиTP.
Второй тип запроса — информирование сервера PHP о текущей ситуации. Эксперт MT4/MT5 с настраиваемой периодичностью сообщает серверу о текущих открытых позициях: времени открытия, сете, текущем финансовом результате, спреде, текущих SL и TP. Сервер регулярно обновляет эту информацию в текстовом файле, чтобы затем по отдельному запросу выдать пользователю сводку по активным позициям и их текущему результату.
Третий тип запроса — технический запрос для контроля: по HTTP возвращается JSON с текущей информацией по торговым позициям, полученной от эксперта MT4. Это позволяет пользователю по отдельному URL видеть открытые позиции, не заходя в терминал MT4/MT5.
Четвертый тип запроса — информирование сервера PHP о сделках, завершившихся по SL или TP. Этот сценарий нужен для логирования и последующего анализа. При закрытии позиции советник передает серверу финальную информацию: уровни, время открытия и закрытия, финансовый результат и другие параметры. Эти данные записываются в отдельную таблицу sets_log в MySQL.
При появлении нового бара и при срабатывании условий отмены сделки (по уровню или по времени) информация об отмененных сделках также фиксируется в sets_log с пометкой «отмененная по времени» или «отмененная по уровню» и указанием значений на момент отмены.
Взаимодействие с сервером:#
- Бот взаимодействует с сервером посредством HTTP-запросов с запросами в PHP сервер.
- Торговля ведется в одном советнике (запущенном, например, на паре EURUSD) одновременно по всем парам, имеющимся на сервере (по которым идут сигналы от советника, который шлет инфу по чартам).
- Робот с определенной периодичностью (задается в настройках) запрашивает задания у сервера (PHP) – перечень сетов, по которым нужно открыть сделку (и в дальнейшем её отслеживать в соответствии с указанными в сетапе параметрами и переданными советнику сервером PHP). Если определенный сет исчез из списка при очередном запросе заданий, его отслеживание советником прекращается (он удаляется из активного списка).
- При срабатывании условия вхождения в сделку, советник открывает торговую позицию, сообщает об этом при очередном информировании сервера по текущей ситуации. Далее отслеживание торговой позиции ведётся советником, сервер PHP фиксирует, что данный сет уже в работе и перестаёт слать задания по нему.
- В противном случае, при появлении нового бара и возможном изменении ответа нейронки информация по заданию может обновляться. Соответственно, советник периодически запрашивает новый список заданий, по которым сделка пока не открыта. Например, если на очередном баре касание уровня подхода не произошло, сервер запрашивает новый ответ нейронки на случай касания уровня на следующем баре, заново проверяет условия сетапа и корректирует список активных заданий.
- После открытия сделки советник самостоятельно ведет сопровождение по полученным параметрам, параллельно сообщая серверу о текущей ситуации.
- После закрытия позиции советник также информирует сервер для логирования результата.
- Если нужно закрыть позиции, пользователь должен самостоятельно закрыть позиции в MT4/MT5, при этом в логе сервера данные позиции не будут отражены.
- В дальнейшем можно предусмотреть «обратную связь», которая позволит пользователю вручную закрывать отдельные сделки через web-интерфейс. Для этого потребуется объединить мониторинг и управление ботом в одном web-интерфейсе.
Правки#
21.09.23
- ждать, скажем 1 сек, и проверять, что ордер действительно не был создан, иначе эти сообщения игнорировать и подключать ордер к дальнейшему отслеживанию
- также сделал два клона mp_bot_db_log_mt4.php и mp_bot_db_log_mt5.php - для показа соответствующих логов для mt4 и mt5
- они сейчас в одной таблице живут. их можно по ip отличать или так
25.09.23
- добавил вербальную расшифровку не только ошибок, но и кодов возврата торгового терминала. Актуализировал список ошибок МТ5. Поменял все описания на английскую версию;
- сделал проверку (при получении ненулевого кода возврата), что ордер действительно не создался. Если все таки создан, то повторно уже не создаем и считаем, что все ок.