OnTradeTransaction Неверный объем.
Я подозреваю, что в том, как я использую перечисление, может быть ошибка. DEAL_VOLUME , однако мне не удалось определить, в чем будет заключаться логическая ошибка.
Важные моменты: 1- Баг всегда возникает при меньшем количестве контрактов, большего количества контрактов не добавлялось.
2- Ошибка не возникает на демо-счетах и на Тестер стратегий .
3- На реальном счете иногда размещается правильное количество контрактов, а иногда возникает ошибка.
4- Если вы используете советник в течение длительного времени, всегда будет возникать ошибка, уменьшающая количество контрактов до тех пор, пока за час не останется только 1 контракт.
Причина в политике заполнения ордеров ENUM_ORDER_TYPE_FILLING. У вас скорее всего ордера заполняются ORDER_FILLING_RETURN, поэтому исполняются частично как итог deal_volume != первоначальному объёму ордера,
а затем вы берёте этот частичный объём и выставляете новый ордер с этим объёмом.
trade.BuyLimit(deal_volume,deal_price-take* Point (), _Symbol , 0 , 0 , 0 , 0 , "Compra Recolocada" );
Нужно дождаться полного закрытия всей позиции, а затем при выставлении ордера использовать не deal_volume, а первоначальный объём.
Вот эти строки кода, вызывают сомнение в их целесообразности. Возможно из за них вы видите только частичное закрытие позиции.
if (preco.last>=value_open) if (preco.last<value_open)
Причина в политике заполнения ордеров ENUM_ORDER_TYPE_FILLING . У вас скорее всего ордера заполняются ORDER_FILLING_RETURN, поэтому исполняются частично как итог deal_volume != первоначальному объёму ордера,
а затем вы берёте этот частичный объём и выставляете новый ордер с этим объёмом.
Нужно дождаться полного закрытия всей позиции, а затем при выставлении ордера использовать не deal_volume, а первоначальный объём.
Вот эти строки кода, вызывают сомнение в их целесообразности. Возможно из за них вы видите только частичное закрытие позиции.
Спасибо за помощь. Так достаточно ли будет использовать trade.SetTypeFilling(ORDER_FILLING_FOK) в OnInit??
- Бесплатные приложения для трейдинга
- Форексный VPS бесплатно на 24 часа
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте, я разработал советник (аккаунт Неттинг ), который использует отложенные ордера. SellLimit и КупитьЛимит вместо Собственный TakeProfit для МТ5 . Причина этого заключалась в том, чтобы избежать проскальзывания, которое происходит при использовании TP и SP MT5, поскольку они закрывают рыночные позиции, а не безадресными ордерами.
EA размещает заказы КупитьЛимит Это SellLimit на графике для входа в операцию, и когда один из этих ордеров исполняется, он размещает обратный ордер (BuyLimit или SellLimit) для выхода из операции, действуя как TakeProfit. Когда этот ордер на выход исполняется, он заменяет ордер на вход в том же месте, что и раньше, и с тем же объемом контрактов.
Оказывается, я использовал функцию ОнТрейдТранзакция за эту манипуляцию ордерами и все происходит корректно на ДЕМО счете и на РЕАЛЬНОМ счете с 1 объемным контрактом.
Проблема возникает, когда я пытаюсь использовать более одного объемного контракта на РЕАЛЬНОМ счете. Советник исполняет ордер на вход с 4 контрактами и иногда размещает ордер на выход только с 3 контрактами, или иногда он размещает ордер на выход с правильным количеством контрактов, но когда он исполняется, ордер на вход заменяется. В итоге контрактов становится меньше.
Я подозреваю, что в том, как я использую перечисление, может быть ошибка. DEAL_VOLUME , однако мне не удалось определить, в чем будет заключаться логическая ошибка.
Важные моменты: 1- Баг всегда возникает при меньшем количестве контрактов, большего количества контрактов не добавлялось.
2- Ошибка не возникает на демо-счетах и на Тестер стратегий .
3- На реальном счете иногда размещается правильное количество контрактов, а иногда возникает ошибка.
4- Если вы используете советник в течение длительного времени, всегда будет возникать ошибка, уменьшающая количество контрактов до тех пор, пока за час не останется только 1 контракт.
Ниже приведен код OnTradeTransaction (Остальная часть кода советника не имеет никакого отношения к этой функции)
Если кто-то может мне помочь и нуждается в дополнительной информации, я был бы признателен.