А с чего вы решили что OrdersTotal()-1 будет последним ордером ?
Вам нужно правильно пересчитать ордера, выявить ордер с самым большим временем установки (на данный момент) проверить его на тип, магик, и уж потом принимать решение.
по алгоритму работы советника в данном конкретном случае последним ордером будет именно SELL и соответственно у него будет самый большой номер, который будет равняться OrdersTotal()-1
Ставил в цикл, открывал два ордера BUY и два ордера SELL и все равно выдавало "0" по всем 4 позициям
Мой дорогой друг, вы очень сильно заблуждаетесь, сие случается не всегда, так что последуйте совету, или не спрашивайте совсем.
Ну а если вам лень написать лишнюю пару строк кода, то в программировании вам делать нечего.
... и еще - обратите ваше драгоценное внимание на нижеследующую ссылку с кладезями ценнейшей информации : https://www.mql5.com/ru/forum/131853
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
OrderSelect(OrdersTotal()-1, SELECT_BY_POS, MODE_TRADES);
OrdTotMag=dan_ord_mag(OrdTotMag);
if(OrderType()==OP_SELL && OrderMagicNumber()==22 && OrdTotMag>=3)
{
while(!IsTradeAllowed()) Sleep(100);
OrderSend (Symbol(),OP_BUYSTOP,Lot,buy,0,buysl,buytp,"22",22,0,CLR_NONE);
}
OrdTotMag - функция подсчитывающая количество ордеров с магиком "22".
Открыто 4 ордера, последний SELL, по идее как только открывается SELL должен выставиться BUYSTOP, но этого не происходит. Расстояние между SELL и BUYSTOP достаточное. При выводе в коментах значения OrderType() выдает "0" хотя должен "1".
Не могу понять в чем тут ошибка.