Подскажите пожалуйста!!!

 
Как определить OrderType()  последнего ордера среди всех открытых ордеров?
 
liza >>:
Как определить OrderType() последнего ордера среди всех открытых ордеров?

Найти самый молодой ордер из открытых по OrderOpenTime() и определить его тип.

 

Вот что я сделала.

void OT()
  {
  datetime t=0;
 int actTotal = OrdersTotal();
for(int i=0; i<actTotal;i++)
  {
   
  if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
  {
  if( OrderSymbol()==Symbol()) 
  {
  if( t > OrderOpenTime()) t = t;
  else t = OrderOpenTime();
  }
  }
  }  
}
Только не могу сообразить как из этого достать OrderType()

 
liza >>:
Как определить OrderType()  последнего ордера среди всех открытых ордеров?

Если я правильно понял вопрос, то может быть подойдет:

https://www.mql5.com/ru/forum/107476/page20

Функция GetTypeLastOpenPos().
Эта функция возвращает тип последней открытой позиции или -1. Более точный отбор учитываемых позиций задаётся внешними параметрами:

sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент. 
mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор. 


//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тип последней открытой позиции или -1               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetTypeLastOpenPos(string sy="", int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal(), r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (t<OrderOpenTime()) {
            t=OrderOpenTime();
            r=OrderType();
          }
        }
      }
    }
  }
  return(r);
}
 

Большое спасибо!!!

А кто может подсказать почему в этом куске выставляются отложенные ордера без остановки?

Мне надо чтобы после выставления обычного ордера выставлялся отложенный в другую сторону.

И как это исправить?

for(i=0; i<actTotal;i++)
  {
   
  if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
  {
  if( OrderSymbol()==Symbol())
  {
  if(OrderType()==OP_BUY) {BuyOrders++; oop1 = OrderOpenPrice();}
  if(OrderType()==OP_SELL) {SellOrders++; oop2 = OrderOpenPrice();}
  if(OrderType()==OP_BUYSTOP) BuyStop++;
  if(OrderType()==OP_SELLSTOP) SellStop++;
  }
  }
   
if(BuyOrders > 0 || SellOrders > 0 && OT() == 1 && SellStop < 1)
{
  double pBid=oop1-(Pips*Point);
  OrderSend(Symbol(),OP_SELLSTOP,2*Lots,pBid,Slippage,NULL,NULL,"",0,0,Red);
  }
  if(SellOrders > 0 || BuyOrders > 0 && OT() == 2 && BuyStop < 1)
  {
  double pAsk=oop2+Pips*Point;
  OrderSend(Symbol(),OP_BUYSTOP,2*Lots,pAsk,Slippage,NULL,NULL,"",0,0,Blue);
 }
}