Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликуй программу в Маркете и продавай ее миллионам трейдеров!
Nefedov Kirill
2889
Nefedov Kirill 2011.05.28 08:31 

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

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

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

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

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

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

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

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

o_O
Модератор
23287
o_O 2011.05.28 08:48  

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

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

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

Nefedov Kirill
2889
Nefedov Kirill 2011.05.28 10:37  
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

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий