А что-же ты скрин обрезал так, что не видно какой СЛ поставлен ордеру sell limit
И удали знак = в цикле. Ордера, но нумеруются с нуля до OrdersTotal() - 1 следовательно ордера с индексом OrdersTotal() быть не может.
А что-же ты скрин обрезал так, что не видно какой СЛ поставлен ордеру sell limit
И удали знак = в цикле. Ордера, но нумеруются с нуля до OrdersTotal() - 1 следовательно ордера с индексом OrdersTotal() быть не может.
Стоп лосс ему не поставился, т.к. этот sell limit выше желаемого стоплосса. Зато ему поставился Тейкпрофит аналогичной функцией, которая также не должна работать с лимитными ордерами.
знак = то я уже от безвыходности поставил. он как бы ничего не меняет, уже убрал. Сам факт почему выбирает лимитный ордер, когда ограничение четко стоит на OP_BUY или OP_SELL.
Попробуйте перебирать ордера в цикле в обратном порядке. И что за chek_way()?
chek_way() определяет направление торговли. но как она может влиять, если попросту игнорируется условие на работу с рыночными ордерами.
//+------------------------------------------------------------------+ //| Проверяем направление торговли | //+------------------------------------------------------------------+ int chek_way() { int up_down; for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol()) { if(OrderMagicNumber()==magic) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { if(OrderComment()=="1_BUYSTOP") {up_down=1;} if(OrderComment()=="1_SELLSTOP") {up_down=0;} } } } } } return(up_down); }
В обратном порядке это не то что вы показываете...
Стоп лосс ему не поставился, т.к. этот sell limit выше желаемого стоплосса. Зато ему поставился Тейкпрофит аналогичной функцией, которая также не должна работать с лимитными ордерами.
знак = то я уже от безвыходности поставил. он как бы ничего не меняет, уже убрал. Сам факт почему выбирает лимитный ордер, когда ограничение четко стоит на OP_BUY или OP_SELL.
Что-то сдаётся мне что в коде есть ещё аналогичная функция для работы с лимитниками. Не может-же терминал одновременно путать рыночные ордера с лимитными и сл с тп
Попробуй изменить текст принта, и если текст останется прежним, значит модифай не от сюда.
В обратном порядке это не то что вы показываете...
for(i = OrdersTotal(); i =0; i--)
так? бестолку
так? бестолку
for(i = OrdersTotal()-1; i >=0; i--)
Не поможет это. Порядок перебора влияет при закрытии ордеров, когда после закрытия ордера индексация оставшихся нарушается.
Что-то сдаётся мне что в коде есть ещё аналогичная функция для работы с лимитниками.
Попробуй изменить текст принта, и если текст останется прежним, значит модифай не от сюда.
Принт идет именно с этой функции. Вот изменил:
считать-то кто будет? обратный порядок полезен всегда при работе с ордерами, не только при закрытии.
Я-же сказал причину при закрытии ордеров.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Дорогие товарищи программисты! У меня беда, помогите пожалуйста.
Совсем уже голову сломал об этот код.
Вот вся функция:
Доходит до Print и вот что он выдает:
В то время как тикет: 225299700 является тикетом ордера OP_SELLLIMIT.
И дальше все как положено модифицирует стоплосс этого выбранного ордера. А OP_BUY в упор не видит, хотя они конечно же есть:
В чем может быть проблема? Помогите разобраться пожалуйста!