
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
2. Как я понял, ByPASS обрабатывает все возможные виды рассинхронизации, кроме одного: если ордер выполнился, еще находится в списке живых, но PositionsTotal() уже обновился с учетом выполнения этого ордера - см пример в вашем посте, пункт 12?:
https://www.mql5.com/ru/forum/368178/page11#comment_22140275
Или это тоже как-то обрабатывается?
Мой ответ схож с этим.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: TradesID
fxsaber, 2021.05.13 21:40
Вы все верно поняли. Это сделано намеренно. Т.к. позиция, которая закрыта, но еще не отражена, как закрытая, не в состоянии что-либо испортить.
Т.е. не вижу криминала в этом, поэтому не заставляю советник ждать исчезновения рассинхрона. Расчет на то, что советник будет готов к бою в этом случае, не потеряв драгоценные время на ожидание.
MT4Orders, которую использую с ByPass, такие ордера даже не покажет. Фильтрует такое.
Мой ответ схож с этим.
Т.е. не вижу криминала в этом, поэтому не заставляю советник ждать исчезновения рассинхрона. Расчет на то, что советник будет готов к бою в этом случае, не потеряв драгоценные время на ожидание.
MT4Orders, которую использую с ByPass, такие ордера даже не покажет. Фильтрует такое.
Согласен, тоже не считаю это проблемой.
Просто хотел уточнить, правильно ли я понял логику кода.
Вопрос к вам, как эксперту по ордерной системе MT5: какие могут быть ордера в истории, по которым не было сделок и которые не выставлялись экспертом через OrderSend?
Из тех, что я знаю:
-ордера выставленные пользователем вручную и отмененные/снятые сервером
-выставленные системой и несработавшие SL/TP/SO
Может быть еще что-то?
На случай, если разрабы не вернут старый порядок добавления ордеров в историю, я набросал (больше для себя) алгоритм работы с историей, который НЕ зависит от порядка сортировки ордеров.
В BYPASS добавить новый элемент - массив тикетов исторических ордеров CHashMap HistOrders;
На примере текущей версии BYPASS.IS() :
Сейчас при запуске проверки истории заполнение/обновление массивов OrdersID,DeasID производится непосредственно в TRADESID.RefreshOrders() и RefreshDeals().
ВМЕСТО этого, при вызове проверки истории, делаем следующие шаги:
1. Создаем/обнуляем список "новых" исторических ордеров ulong NewHistOrders[];
2. Обновляем свою историю сделок DealsID - так же, как это делается в TradesID.RefreshDeals(), но добавляется:
а) для каждой новой сделки получаем тикет ордера DEAL_ORDER
б) проверяем, есть ли этот тикет в HistOrders
если нет - проверяем, есть ли он в истории через HistoryOrderGetInteger( , ORDER_TICKET)
если да, добавляем в HistOrders и NewHistOrders и пополняем CLASSIFICATOR OrdersID (как сейчас в TRADESID)
иначе проверяем, есть ли он в своем массиве живых ордеров (сейчас в BYPASS.Orders[]). если нет - добавить.
3. Обновляем историю ордеров - примерно так же, как сейчас делается в TradesID.RefreshOrders(), но только сначала проверяем, есть ли ордер в HistOrders. и если нет, то добавляем в HistOrders и NewHistOrders и OrdersID (это позволит избежать дублирования ордеров в OrdersID.ValuesID). При этом, если ордера не дописываются в историю последовательно, и какие-то новые ордера вставились до индекса LastTotalOrders, то они могут быть пропущены на данном этапе - это отлавливается на следующих шагах.
4. Делаем сверку своего списка живых ордеров BYPASS.Orders со списком системы - также как сейчас в BYPASS.CheckOrders(), но добавляется:
если ордер ушел из BYPASS.Orders и появился в истории, то добавляем его в HistOrders и, если его там не было, пополняем OrdersID и NewHistOrders.
После этих шагов (если все ордеры, выставляемые из эксперта, добавляются в BYPASS через +=) в HistOrders и OrdersID есть все исторические ордера, по которым:
Т.е в учтенной в BYPASS истории ордеров будут отсутствовать только невызвавшие сделки ордера, которые :
По идее они не на что не влияют???
5. Делаем проверку рассинхронизации - как CheckHistory(), только новые исторические ордера для проверки отбираем не через перебор истории (пока i >= this.PrevTotalOrders), а проверяем ордера из NewHistOrders. (для ускорения - может быть лучше сохранять и проверять не "новые" исторические ордера, а "новые" PositionID).
Для MT4Orders в RefreshHistory() можно применить такой же принцип (только п.5 и NewHistOrders там не нужны).
Вопрос к вам, как эксперту по ордерной системе MT5: какие могут быть ордера в истории, по которым не было сделок и которые не выставлялись экспертом через OrderSend?
Из тех, что я знаю:
-ордера выставленные пользователем вручную и отмененные/снятые сервером
-выставленные системой и несработавшие SL/TP/SO
Может быть еще что-то?
Из другого Терминала.
На случай, если разрабы не вернут старый порядок добавления ордеров в историю, я набросал (больше для себя) алгоритм работы с историей, который НЕ зависит от порядка сортировки ордеров.
Спасибо, не вникал сильно в идею алгоритма. Понятно, что должна быть полностью своя учетка, которая вынуждена будет съедать вычислительные ресурсы и память. Честно говоря, верю, что разработчики исправят введенное "правило" с бухты барахты. Но, боюсь, по приоритетам оно где-то с конца, т.к. тема бесконечна далека от обсуждений на форуме.
Реальный случай, что выявил ByPass.
Исполнился лимитный ордер - породил сделку, оба попали в историю Терминала. Соответствующая позиция появилась через четыре секунды после этого события на стороне Терминала.
Реальный случай, что выявил ByPass.
Исполнился лимитный ордер - породил сделку, оба попали в историю Терминала. Соответствующая позиция появилась через четыре секунды после этого события на стороне Терминала.
Круто.
Думается, была потеря связи.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Акцептирование SL/TP-ордеров
fxsaber, 2022.01.11 09:53
Архитектурно происходит так.
Проверка может не пройти, если, например, был триггер тейка открытой позиции, которая уже находится в состоянии закрытия.
Таким образом, в Терминале можно видеть текущие полноценные ордера (пройдут проверку и попадут (даже в случае реджектов) в историю торгов) и фантомные ордера (проверку не пройдут, в истории торгов будут отсутствовать). Оба варианта будут иметь свои тикеты. Теоретически, фантомные ордера могут иметь одинаковые тикеты.
Такая схема выстроена из-за асинхронной архитектуры сервера MT5. Это чем-то напоминает логику OrderSendAsync из Терминала. Сложно сказать, правильно ли, что сервер отправляет в Терминал информацию о фантомных ордерах до проверки на корректность.
Скорее всего, избавиться от таких (пусть и редких) алертов нет возможности.