OrdersHistoryTotal, что не так?

 

2015.06.26 15:13:04buy0.02eurusd1.11671.11171.12172015.06.29 00:00:021.09870.000.000.00-36.00 

 

Как видно ордер был открыт 2015.06.26 15:13:04, а закрылся 2015.06.29 00:00:02 т.е. был открыт в пятницу потом прошли выходные и он закрылся в понедельник. 

из файла 20150629.log

00:59:54.484  : order # buy 0.02 EURUSD at 1.1167 closed due stop-loss at price 1.0987

Следующий ордер который открылся в понедельник т.е. сегодня

00:59:55.359    : instant order buy 0.01 EURUSD at 1.0988 sl: 1.0938 tp: 1.1038

00:59:57.359    : order was opened : # buy 0.01 EURUSD at 1.0988 sl: 1.0938 tp: 1.1038

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

код выборки из истории

int accTotal=OrdersHistoryTotal();
         for(i=accTotal-1;i>=0;i--)
           {
            if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
               if(OrderSymbol()==Symbol() && OrderType()==OP_BUY)
                 {
                  if(OrderClosePrice()==OrderStopLoss())
 

Потому что if(OrderClosePrice()==OrderStopLoss()) - не правда.

 
voviko:

2015.06.26 15:13:04buy0.02eurusd1.11671.11171.12172015.06.29 00:00:021.09870.000.000.00-36.00 

 

Как видно ордер был открыт 2015.06.26 15:13:04, а закрылся 2015.06.29 00:00:02 т.е. был открыт в пятницу потом прошли выходные и он закрылся в понедельник. 

из файла 20150629.log

00:59:54.484  : order # buy 0.02 EURUSD at 1.1167 closed due stop-loss at price 1.0987

Следующий ордер который открылся в понедельник т.е. сегодня

00:59:55.359    : instant order buy 0.01 EURUSD at 1.0988 sl: 1.0938 tp: 1.1038

00:59:57.359    : order was opened : # buy 0.01 EURUSD at 1.0988 sl: 1.0938 tp: 1.1038

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

код выборки из истории

попробуйте сравнивать цену открытия и закрытия, потому как сравнивать по стоплоссу и закрытию - крайне не верно, часто закрытие идет с проскальзыванием.

  if(OrderType()==OP_BUY && (OrderClosePrice()-OrderOpenPrice())<0);
  if(OrderType()==OP_SELL && (OrderOpenPrice()-OrderClosePrice())<0) ; 
 
Vitaly Muzichenko:

попробуйте сравнивать цену открытия и закрытия, потому как сравнивать по стоплоссу и закрытию - крайне не верно, часто закрытие идет с проскальзыванием.

Спасибо попробую.
 

Чуть не так.

Закрытие по СЛ должно определяться вот так:

if ( (OrderType() == OP_BUY && OrderStopLoss() - OrderClosePrice() > -DBL_EPSILON) || 
     (OrderType() == OP_SELL && OrderClosePrice() - OrderStopLoss() > -DBL_EPSILON) )
 

чет-то я засомневался, что если по СЛ закроется, то OrderClosePrice()   не равен  OrderStopLoss()

                                         если по ТП закроется, то OrderClosePrice()   не равен  OrderTakeProfit()

проверил по истории, если закрылись по СЛ то ,   OrderClosePrice() == OrderStopLoss(), если по ТП то OrderClosePrice() == OrderTakeProfit()

Файлы:
 
pako:

чет-то я засомневался, что если по СЛ закроется, то OrderClosePrice()   не равен  OrderStopLoss()

                                         если по ТП закроется, то OrderClosePrice()   не равен  OrderTakeProfit()

проверил по истории, если закрылись по СЛ то ,   OrderClosePrice() == OrderStopLoss(), если по ТП то OrderClosePrice() == OrderTakeProfit()

Попробуйте проверить историю на ECN-счетах. Будете удивлены.

Далеко не всегда есть цена, соответствующая заявленному ТР или SL. В итоге рыночный ордер будет закрыт по действующей рыночной цене, а не по заявленной. Проскальзывание называется. ))

 
Игорь Герасько:

Попробуйте проверить историю на ECN-счетах. Будете удивлены.

Далеко не всегда есть цена, соответствующая заявленному ТР или SL. В итоге рыночный ордер будет закрыт по действующей рыночной цене, а не по заявленной. Проскальзывание называется. ))

мне это понятно, а понятно ли это вашему терминалу?

 купили по 1,5;   ТП поставили 1,6 ;    Бид зацепил 1,6;   ECNсчет + проскальзывание + расширенный спред,  закрылись по цене 1,597, что будет написано в терминале?    OrderClosePrice() = 1,597  OrderTakeProfit()=1,6???   OrderComment()= "тп"

терминал должен закрыть позицию по событию ТП, если  OrderClosePrice() = 1,597    не равен  OrderTakeProfit()=1,6 -----> значит события ТП не было , почему закрылись?

терминал закрыл позицию по событию ТП         OrderClosePrice() = 1,597  ;    равен   OrderTakeProfit() = 1,597  ;   OrderComment()= "тп"

 
Andrey Khatimlianskii:

Чуть не так.

Закрытие по СЛ должно определяться вот так:

по   OrderComment()= [tp]
 
pako:
по   OrderComment()= [tp]
А вот фиг.
 
Vitalie Postolache:
А вот фиг.
извеняюсь  OrderComment()= [sl]  :)
Причина обращения: