0
92
Пускай будет у меня в блоге, чтобы я не забыл.
Ордер и позиция - это разные вещи.
Сначала проверяем наличие ордеров. Далее, если ордер найден, производим проверку, и в логическую переменную записываем условие контроля.
if(OrdersTotal()>0) { for(i=0;i<=OrdersTotal();i++) { if(OrderGetTicket(i)) { O_type=int(OrderGetInteger(ORDER_TYPE)); O_symbol=string(OrderGetString(ORDER_SYMBOL)); O_opentime=int(OrderGetInteger(ORDER_TIME_SETUP)); if(O_symbol==Symbol() && O_type==3) { Bar_sell_base_tf=iBarShift(Symbol(),base_tf,O_opentime); //--- верхний уровень for(n=Bar_sell_base_tf+1;n<bars_base_tf;n++) { j1=High_base_tf[n+1]-High_base_tf[n]; if(j1<0) { j1=j1*-1; } if(j1*f<=k) break; } UpperLevel_1_base_tf_sell=n; } Third_downtrend_control_bool=(Time_base_tf[UpperLevel_1_base_tf_sell]==Time_base_tf[UpperLevel_1_base_tf]); } } }
Далее после срабатывания ордера, открывается позиция, но контроль все равно должен работать. При этом ордер уходит в историю и мне нужно его оттуда вытащить через функцию HistoryOrderSelect(), используя свойство позиции POSITION_IDENTIFIER. Нужно обратиться к свойству именно ордера, а не позиции. Так как контроль привязан к времени установки ордера, а не времени открытия позиции.
//--- если ордера нет, но сработала позиция if(OrdersTotal()==0) { if(PositionsTotal()>0) { for(i=0;i<=PositionsTotal();i++) { if(PositionGetTicket(i)) { //--- определяем символ, тип и время открытия позиции P_symbol=string(PositionGetString(POSITION_SYMBOL)); P_type=int(PositionGetInteger(POSITION_TYPE)); P_opentime=int(PositionGetInteger(POSITION_TIME)); P_identifier=int(PositionGetInteger(POSITION_IDENTIFIER)); //--- если символ позиции совпадает с текущим графиком и тип сделки "sell" if(P_symbol==Symbol() && P_type==1) { if(HistoryOrderSelect(P_identifier)) { O_opentime=ORDER_TIME_SETUP; //--- находим бар, на котором была открыта позиция Bar_sell_base_tf=iBarShift(Symbol(),base_tf,O_opentime); //--- верхний уровень for(n=Bar_sell_base_tf+1;n<bars_base_tf;n++) { j1=High_base_tf[n+1]-High_base_tf[n]; if(j1<0) { j1=j1*-1; } if(j1*f<=k) break; } UpperLevel_1_base_tf_sell=n; } Third_downtrend_control_bool=(Time_base_tf[UpperLevel_1_base_tf_sell]==Time_base_tf[UpperLevel_1_base_tf]); } } } } }