OrdersHistoryTotal, что не так? - страница 2

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

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

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

сейчас проверил на ECN-счете, действительно удивлен 



 OrderClosePrice() = 1,10837   OrderStopLoss()=1,10836  OrderComment()= [sl]      OrderClosePrice() = 1,10837   не равен OrderStopLoss()=1,10836  но терминал пишет OrderComment()= [sl] 

откуда терминал знает что было событие  OrderStopLoss() ???

это очередной баг? , или неисправимый баг - это фича  

 
pako:

сейчас проверил на ECN-счете, действительно удивлен 



 OrderClosePrice() = 1,10837   OrderStopLoss()=1,10836  OrderComment()= [sl]      OrderClosePrice() = 1,10837   не равен OrderStopLoss()=1,10836  но терминал пишет OrderComment()= [sl] 

откуда терминал знает что было событие  OrderStopLoss() ???

это очередной баг? , или неисправимый баг - это фича  

Сервер закрывает стоплосс с проскальзыванием и добавляет комент [sl]. Вроде давно так уже, а возможно и всегда так было. Ecли при открытии ордера отправляется комент, то к нему в начале добавляется тоже [sl]. Например [sl]myea
 
Vladimir Zubov:
Сервер закрывает стоплосс с проскальзыванием и добавляет комент [sl]. Вроде давно так уже, а возможно и всегда так было. Ecли при открытии ордера отправляется комент, то к нему в начале добавляется тоже [sl]. Например [sl]myea

я понимаю , что сегодня жарко , но не до такой же степени

т.е если сова купила , поставила комент "куплено", то к этому коменту в начало добавится [sl]? хотя позиция еще не закрылась

 
pako:
а понимаю , что сегодня жарко , но не до такой же степени
//+----------------------------------------------------------------------------+
//|  Автор    : BeerGod                                                        |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.01.2015                                                     |
//|  Описание : Возвращает флаг торговли c отбором                             |
//|             по комментарию в закрытом ордере [sl]. 0 небыло 1 была              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    comm - комметарий в закрытом ордере                                     |
//+----------------------------------------------------------------------------+
int isLossLastPos(string sy="", int op=-1, int mn=-1, string comm ="")
{
  datetime t=0;
  int      i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++)
   {  
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
         {
            if (OrderSymbol()==sy || sy=="")
               {
                  if (OrderType()==OP_BUY || OrderType()==OP_SELL)
                     {
                        if (op<0 || OrderType()==op)
                           {
                              if (mn<0 || OrderMagicNumber()==mn)
                                 {
                                    if (OrderComment()==comm || OrderComment()==SL+comm )
                                       {
                                          if (t<OrderCloseTime())
                                             {
                                                t=OrderCloseTime();
                                                j=i;
                                             }
                                       }
                                 }
                           }
                     }
               }
         }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    if (OrderProfit()!=0) return(1);
  }
   return(0);
}
//End
У меня такая функция безошибочно определяет был стоп или нет в независимости насколько было проскальзывание при закрытии.
 
pako:

я понимаю , что сегодня жарко , но не до такой же степени

т.е если сова купила , поставила комент "куплено", то к этому коменту в начало добавится [sl]? хотя позиция еще не закрылась

Добавится если будет закрытие по стопу, пока нет закрытия ничего не добавится.
 
pako:

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

 купили по 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()= "тп"

Take Profit - это лимитный ордер, который исполняется по цене, не хуже заявленной. Т. е. при таком профите закрытие может быть по цене 1.6 или выше, но никак не ниже. Stop Loss - это стоповый ордер, который исполняется по цене, не лучше заявленной. При указании стопа 1.6 для длинной сделки цена закрытия будет 1.6 или меньше.
 
Vladimir Zubov:
У меня такая функция безошибочно определяет был стоп или нет в независимости насколько было проскальзывание при закрытии.

так определяю, была-ли последняя позиция закрыта по СЛ

//+------------------------------------------------------------------+
bool IsLastPosCloseSL()
  {
   datetime Zeit=0;
   int      pos=-1;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()<2)
              {
               if(OrderCloseTime()>Zeit)
                 {
                  Zeit=OrderCloseTime();
                  pos=i;
                 }
              }
           }
        }
     }
   if(OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderComment()=="[sl]")//если сам добавлял комент, то " + комент "
        {
         OrderPrint();
         return(true);
        }
     }
   return(false);
  }
//+------------------------------------------------------------------+

 но я спросил, как определяет терминал , что закрылись по СЛ

именно как определяет?, не то что пишет в логи

по вашей фукции, если был СЛ и  OrderProfit()==0, так называемый БУ ??

 
Игорь Герасько:
Take Profit - это лимитный ордер, который исполняется по цене, не хуже заявленной. Т. е. при таком профите закрытие может быть по цене 1.6 или выше, но никак не ниже. Stop Loss - это стоповый ордер, который исполняется по цене, не лучше заявленной. При указании стопа 1.6 для длинной сделки цена закрытия будет 1.6 или меньше.

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

 

т.е  в данном случае      если OrderClosePrice() >=  OrderTakeProfit() ----> то закрылись по ТП

а если ТП был "0 "   ,   OrderClosePrice() = 1,6001 ;   >=   OrderTakeProfit() =0    ----> то закрылись тоже  по ТП ???

 
pako:

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

 

т.е  в данном случае      если OrderClosePrice() >=  OrderTakeProfit() ----> то закрылись по ТП

а если ТП был "0 "   ,   OrderClosePrice() = 1,6001 ;   >=   OrderTakeProfit() =0    ----> то закрылись тоже  по ТП ???

Нет, поскольку ТП=0 )))

 
Vitalie Postolache:

Нет, поскольку ТП=0 )))

т.е "0" не меньше 1,6001  иначе закрылись бы по ТП:))