К содержимому
Форекс
на автомате

Перенос советника с MQL4 на MQL5: OrdersTotal не видит открытую позицию

Сергей 1973с 01.2025
Системный практик
14сообщений
Автор темы#1
Переношу своего старого советника с MQL4 на пятёрку: брокер переводит счета на MT5, четвёрку обещают отключить к лету. Советник простой, пробой диапазона азиатской сессии, одна позиция на символ, стоп и тейк сразу в заявке, плюс перевод в безубыток. На четвёрке он у меня с 2017 года, логику знаю наизусть.

Переписал в лоб: где было OrdersTotal() и OrderSelect по индексу, поставил OrdersTotal() и OrderGetTicket. И началось. В тестере советник открывает вторую, третью позицию на том же баре, как будто своей не видит. Безубыток не срабатывает вообще. При этом ошибок в журнале нет, OrderSend на входе возвращает 10009.

Счёт хеджинговый, проверил. Подозреваю, что OrdersTotal в пятёрке считает что-то другое, но в справке я запутался между ордерами, сделками и позициями. Кто переносил, на что ещё наступили?
armen_72с 07.2021
Испытатель
13сообщений
#2
Это первое, на что наступают все. В MQL5 ордер это только заявка, пока она не исполнена. Рыночный ордер исполнился, ушёл в историю, появилась сделка, а то, что у тебя открыто, теперь позиция. Поэтому после входа OrdersTotal() у тебя ноль, советник считает, что ничего нет, и заходит снова.

Для твоего случая нужен PositionsTotal(), выбор через PositionGetTicket(i), дальше фильтр по PositionGetString(POSITION_SYMBOL) и PositionGetInteger(POSITION_MAGIC). Отложенные, если появятся, как раз через OrdersTotal.

С безубытком то же самое. Стоп открытой позиции меняется запросом TRADE_ACTION_SLTP с тикетом позиции. Если у тебя остался TRADE_ACTION_MODIFY, сервер откажет, а ты, судя по журналу, пишешь только результат входа. По полям запроса есть нормальная страница: https://www.mql5.com/ru/docs/trading/ordersend

И проверь новый бар. На четвёрке ты его наверняка ловил через Time[0], а здесь такого массива нет, нужен iTime или CopyTime.
mamontс 04.2023
Исследователь
10сообщений
#3
Я свой так и не перенёс, через неделю плюнул. Позиции, сделки, история через HistorySelect, всё по-другому. Сижу на четвёрке, пока дают.
Сергей 1973с 01.2025
Системный практик
14сообщений
Автор темы#4
armen_72, всё сошлось. Проверку переделал на PositionsTotal с фильтром по символу и мэджику, лишние входы пропали. С безубытком было ровно так: остался TRADE_ACTION_MODIFY, а код возврата я не смотрел, писал в журнал «стоп перенесён» в любом случае. Теперь пишу ответ сервера на каждую модификацию. Прогнал 2023-2024 на реальных тиках: 412 сделок, на четвёрке за тот же период было 409, разница в праздничных днях.
Продолжить обсуждение

Для ответа войдите в свой аккаунт.

Войти
← Предыдущая темаСледующая тема →