Помогите разобраться

 


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".

Не могу понять в чем тут ошибка.

 

А с чего вы решили что OrdersTotal()-1 будет последним ордером ?

Вам нужно правильно пересчитать ордера, выявить ордер с самым большим временем установки (на данный момент) проверить его на тип, магик, и уж потом принимать решение.

 

по алгоритму работы советника в данном конкретном случае последним ордером будет именно SELL и соответственно у него будет самый большой номер, который будет равняться OrdersTotal()-1

Ставил в цикл, открывал два ордера BUY и два ордера SELL и все равно выдавало "0" по всем 4 позициям

 

Мой дорогой друг, вы очень сильно заблуждаетесь, сие случается не всегда, так что последуйте совету, или не спрашивайте совсем.

Ну а если вам лень написать лишнюю пару строк кода, то в программировании вам делать нечего.

... и еще - обратите ваше драгоценное внимание на нижеследующую ссылку с кладезями ценнейшей информации : https://www.mql5.com/ru/forum/131853

Причина обращения: