- www.mql5.com
Проблема вот в чем:
нужно отловить момент закрытия позиции (по sl, tp или ручное закрытие) в неттинг версии. Ловлю это простой проверкой:
То есть каждый тик проверяю, если на прошлом тике позиция была, а на этом тике позиции нет - она только что закрылась.
Суть проблемы такая:
ЕА открывает три отложенных ордера, к примеру SellStop. Один из них становится рыночным. Чуть позже позиция закрывается по SL и на этом же тикеодин из отложенных ордеров становится рыночным. Таким образом, технически позиция осталась открытой - но закрытие по SL было и я пока не могу понять как в этом случае отловить это закрытие.
Может у кого нибудь будут идеи? Заранее спасибо!
Дополню предыдущий ответ: OnTradeTransaction и ENUM_DEAL_REASON
Идентификатор |
Описание |
DEAL_REASON_CLIENT |
Сделка проведена в результате срабатывания ордера, выставленного из десктопного терминала |
DEAL_REASON_MOBILE |
Сделка проведена в результате срабатывания ордера, выставленного из мобильного приложения |
DEAL_REASON_WEB |
Сделка проведена в результате срабатывания ордера, выставленного из веб-платформы |
DEAL_REASON_EXPERT |
Сделка проведена в результате срабатывания ордера, выставленного из MQL5-программы – советником или скриптом |
DEAL_REASON_SL |
Сделка проведена в результате срабатывания ордера Stop Loss |
DEAL_REASON_TP |
Сделка проведена в результате срабатывания ордера Take Profit |
DEAL_REASON_SO |
Сделка проведена в результате наступления события Stop Out |
DEAL_REASON_ROLLOVER |
Сделка проведена по причине переноса позиции |
DEAL_REASON_VMARGIN |
Сделка проведена по причине начисления/списания вариационной маржи |
DEAL_REASON_SPLIT |
Сделка проведена по причине сплита (понижения цены) инструмента, по которому имелась позиция на момент проведения сплита |
https://www.mql5.com/ru/docs/event_handlers/ontradetransaction
Дополню предыдущий ответ: OnTradeTransaction и ENUM_DEAL_REASON
Должно помочь, спасибо!
Пока что не вижу ручного удаления, но проведу тесты, может выкинет в лог нужную причину. Потом отпишусь.
Проблема вот в чем:
нужно отловить момент закрытия позиции (по sl, tp или ручное закрытие) в неттинг версии. Ловлю это простой проверкой:
То есть каждый тик проверяю, если на прошлом тике позиция была, а на этом тике позиции нет - она только что закрылась.
Суть проблемы такая:
ЕА открывает три отложенных ордера, к примеру SellStop. Один из них становится рыночным. Чуть позже позиция закрывается по SL и на этом же тикеодин из отложенных ордеров становится рыночным. Таким образом, технически позиция осталась открытой - но закрытие по SL было и я пока не могу понять как в этом случае отловить это закрытие.
Может у кого нибудь будут идеи? Заранее спасибо!
Я бы на Вашем месте немного изменил логику программы. То как это есть сейчас, на реальном счете чревато проблемами.
Ситуация. Есть позиция селл и у нее есть стоплосс. На этом же уровне стоплосс вы хотите открыться в бай тем же лотом (установлен отложенный ордер). В реальности может получиться так, что отложка сработает ДО стопа и позиция схлопнется. И новой не будет. Если же отложка большего объема чем текущая позиция, то в результате будет INOUT сделка и новая позиция мелкого объема, да еще и без стопов.
В тестере этого не наиграть, а на живом счете может быть легко.
Я бы на Вашем месте немного изменил логику программы. То как это есть сейчас, на реальном счете чревато проблемами.
Ситуация. Есть позиция селл и у нее есть стоплосс. На этом же уровне стоплосс вы хотите открыться в бай тем же лотом (установлен отложенный ордер). В реальности может получиться так, что отложка сработает ДО стопа и позиция схлопнется. И новой не будет. Если же отложка большего объема чем текущая позиция, то в результате будет INOUT сделка и новая позиция мелкого объема, да еще и без стопов.
В тестере этого не наиграть, а на живом счете может быть легко.
К сожалению, логику стратегии менять нельзя.
Сделал так:
- в начале и конце каждого тика запихиваю в массивы все сделки, которые были выполнены по DEAL_ENTRY_OUT.
- сравниваю количество тикетов в конце прошлого тика и начале нового тика.
- Если количество разное - значит только что было какое то закрытие.
пока что все работает как надо.
Всем спасибо!
К сожалению, логику стратегии менять нельзя.
Я написал логику программы, а не логику стратегии. Это разные вещи.
Я бы на Вашем месте немного изменил логику программы. То как это есть сейчас, на реальном счете чревато проблемами.
Ситуация. Есть позиция селл и у нее есть стоплосс. На этом же уровне стоплосс вы хотите открыться в бай тем же лотом (установлен отложенный ордер). В реальности может получиться так, что отложка сработает ДО стопа и позиция схлопнется. И новой не будет. Если же отложка большего объема чем текущая позиция, то в результате будет INOUT сделка и новая позиция мелкого объема, да еще и без стопов.
В тестере этого не наиграть, а на живом счете может быть легко.
А если стратегия не предусматривает открытие отложенных ордеров вообще? Зачем давать советы, равно как и ходить в чужой монастырь со
своим уставом?
А если стратегия не предусматривает открытие отложенных
ордеров вообще? Зачем давать советы, равно как и ходить в чужой монастырь со своим уставом?
А Вы первый пост ветки читали?
Я написал логику программы, а не логику стратегии. Это разные вещи.
Дело в том, что в данном случае термины "логика программы" и "логика стратегии" совпадают. Уровень отложенных ордеров определяется из
индикаторов - вмешиваться в эту логику не могу (не моя стратегия).
Описанный вами баг будем решать как только он проявит себя, суть его понял. Интересно будет его споймать.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Проблема вот в чем:
нужно отловить момент закрытия позиции (по sl, tp или ручное закрытие) в неттинг версии. Ловлю это простой проверкой:
То есть каждый тик проверяю, если на прошлом тике позиция была, а на этом тике позиции нет - она только что закрылась.
Суть проблемы такая:
ЕА открывает три отложенных ордера, к примеру SellStop. Один из них становится рыночным. Чуть позже позиция закрывается по SL и на этом же тикеодин из отложенных ордеров становится рыночным. Таким образом, технически позиция осталась открытой - но закрытие по SL было и я пока не могу понять как в этом случае отловить это закрытие.
Может у кого нибудь будут идеи? Заранее спасибо!