Подскажите решение или алгоритм на словах. Поиск не помогает.

 

Суть задачи такова. Нужно из истории закрытых позиций, выявить какие позиции остались открытыми на момент закрытия позиций.

Условие такое.

1. Имеем закрытую позицию в истории. (Знаем время открытия, время закрытия)

2. Во время закрытия позиции осталось несколько открытых ордеров в рынке. (Знаем время открытия)

3. Некоторые позиции были открыты по времени ранее чем была открыта закрытая конкретная позиция, а некоторые открыты позже.

4. Некоторые позиции из открытых ранее чем конкретная закрытая позиция были закрыты, а так же были закрыты несколько позиций открытых позже чем конкретная позиция.

Как выявить из истории позиций какие позиции остались открытыми на момент закрытия конкретной позиции.

Всю голову сломал уже, помогите кто понял суть вопроса.

 

Как выявить из истории позиций какие позиции остались открытыми на момент закрытия конкретной позиции.

1. берите дату закрытия ордера Х

2. Затем выбирайте ордера, которые был открыты ранее даты Х, но закрыты позже даты Х.

 
sergeev:

1. берите дату закрытия ордера Х

2. Затем выбирайте ордера, которые был открыты ранее даты Х, но закрыты позже даты Х.



Проверочный скрипт, надеюсь что правильно написал.

int i,x;
datetime OrdCloseTime, OrdOpenTime2, OrdCloseTime2;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   for( i = 0; i < OrdersHistoryTotal(); i++ ){
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
            OrdCloseTime = OrderCloseTime();
            Print("===== Positions: ",OrderTicket());

            for( x = 0; x < OrdersHistoryTotal(); x++ ){
               if (OrderSelect(x, SELECT_BY_POS, MODE_HISTORY)) {
                  if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
                     if (OrderOpenTime() < OrdCloseTime && OrderCloseTime() > OrdCloseTime){
                        Print(OrderTicket(),";",TimeToStr(OrderOpenTime(),TIME_DATE|TIME_MINUTES),";",OrderType(),";", OrderLots(),";",OrderSymbol(),";",OrderOpenPrice(),";",OrderStopLoss(),";",OrderTakeProfit(),";",TimeToStr(OrderCloseTime(),TIME_DATE|TIME_MINUTES),";");
                               }
                  }
               }
            }            

            for( x = 0; x < OrdersTotal(); x++ ){
               if (OrderSelect(x, SELECT_BY_POS, MODE_TRADES)) {
                  if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
                     if (OrderOpenTime() < OrdCloseTime){
                        Print(OrderTicket(),";",TimeToStr(OrderOpenTime(),TIME_DATE|TIME_MINUTES),";",OrderType(),";", OrderLots(),";",OrderSymbol(),";",OrderOpenPrice(),";",OrderStopLoss(),";",OrderTakeProfit(),";");
                               }
                  }
               }
            } 

         }
      }
   }
//----
   return(0);
  }

Всё оказалось проще, чем я думал изначально. Спасибо sergeev