2. Вы смешиваете мух и котлеты:
if(PositionGetInteger(POSITION_TYPE) <= ORDER_TYPE_SELL &&
ПОЗИЦИЯ - НЕ ЕСТЬ ОРДЕР!!!
И вот ещё - тоже самое: попали в кучи кони, люди ...
if(PositionGetInteger(POSITION_TYPE) == ORDER_TYPE_BUY
1. Почему советник выдает ДВА приказа на закрытие подряд (ведь в цикле идет проверка на имя пары)?
Задвоение разбиралось подробно на форуме. После MT4 нужно сломать голову, чтобы въехать, почему так происходит. Это не ошибка.
3. Почему закрывается позиция по EURUSD?
Нет выбора позиции ДО сверки с символом.
Советник переделан из mql4.
Низкие шансы, что будет работать, как в MT4. Не работает подход "замени названия функций".
Задвоение разбиралось подробно на форуме. После MT4 нужно сломать голову, чтобы въехать, почему так происходит. Это не ошибка.
Нет выбора позиции ДО сверки с символом.
Низкие шансы, что будет работать, как в MT4. Не работает подход "замени названия функций".
Ссылочку, пожалуйста, на разбор задвоения.
Выбор позиции происходит здесь:
string s = PositionGetSymbol(cnt)
Возвращает символ соответствующей открытой позиции и автоматически выбирает позицию для дальнейшей работы с ней
Простейший цикл перебора позиций (взято из кода подсчёта количества позиций):
for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positions { ulong ticket=PositionGetTicket(index); if(ticket>0); { if(PositionGetString(POSITION_SYMBOL)==Symbol() && PositionGetInteger(POSITION_MAGIC)==InpMagic) { total++ } }
Вместо
{ total++ }
поставьте закрытие позиции.
Только не вздумайте засовывать сюда Sleep.
![Проверка на наличие дублей ордеров/позиций в MT5 Проверка на наличие дублей ордеров/позиций в MT5](https://c.mql5.com/36/51/proverka-na-nalichie-dubley-orderov.png)
- 2021.09.12
- www.mql5.com
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Один советник MQL5 запущен на разных парах. Фрагмент кода (некоторые функции переделаны из MQL4, например, RefreshRates)
К моменту проблемы открыты две позиции на покупку по NZDCAD и EURUSD. Советник на паре NZDCAD выдает ДВА раза подряд приказ на закрытие ОДНОЙ и той же позиции.
Закрываются ОБЕ позиции и по NZDCAD и по EURUSD.
Вопросы.
1. Почему советник выдает ДВА приказа на закрытие подряд (ведь в цикле идет проверка на имя пары)?
2. Почему не отрабатывается Sleep()?
3. Почему закрывается позиция по EURUSD?
Заранее спасибо.