некорректно работает MODE_HISTORY (возможно) - страница 2

 
PapaYozh:

TheXpert  прав.

Когда время закрытия ордера попадает в 0-й бар, стрелка рисуется правильно. После появления нового бара, время закрытия попадает на 1ый бар, и стрелка переносится с 1-го на 0-ой бар.  А после этого движется вместе с графиком.

Нет коллеги, вот как раз стрелки здесь ни причем, так как стрелка ставится на каждом нулевом баре (на Time[0]), если есть почему ее ставить (то есть в наличии время закрытия ордера). На следующем баре она тоже может поставиться, с другим именем. То есть стрелки не перерисовываются, а рисуются постоянно другие. У них у всех имена разные, привязанные к Time[0].
 
int ti=0;
void start()
  {
//---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
   if(ti!=Time[0])
   {
   ti=Time[0];
   int ClTi=0;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
   {
       if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
       {
          int cmd=OrdersTotal();
          ClTi=OrderCloseTime();
          if(cmd==OP_BUY)
          {
             if(ClTi>=Time[1])
             {
               ObjectCreateTrend(Time[0],OBJ_VLINE,0,Time[0],0,0,0,Blue,2);
             }
          }
          if(cmd==OP_SELL)
          {
             if(ClTi>=Time[1])
             {
                ObjectCreateTrend(Time[0],OBJ_VLINE,0,Time[0],0,0,0,Red,2);
             }
          }
       }
   }
   }
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//----
  }
//+------------------------------------------------------------------+
void ObjectCreateTrend(string iObjectName,int Type,int iWindow,int X1Time,double Y1Price,int X2Time,double Y2Price,color iColor,int Width)
{
        if (ObjectFind(iObjectName)<0) {
                ObjectCreate(iObjectName,Type,iWindow,0,0);
                ObjectSet(iObjectName,OBJPROP_RAY,true);
                //Alert("");
        }
        ObjectSet(iObjectName,OBJPROP_WIDTH,Width);
   ObjectSet(iObjectName,OBJPROP_COLOR,iColor);
        if (X1Time!=0)
           ObjectSet(iObjectName,OBJPROP_TIME1,X1Time);
        ObjectSet(iObjectName,OBJPROP_PRICE1,Y1Price);
        if (X2Time!=0)
           ObjectSet(iObjectName,OBJPROP_TIME2,X2Time);
        if (Y2Price!=0)
           ObjectSet(iObjectName,OBJPROP_PRICE2,Y2Price);
}
 
sanyooooook (и всем остальным отвечавшим) - спасибо за помощь!! Я пока ошибку не нашел, но понял, что она глубоко в коде. Просто поставил разбор history и свою отрисовку сразу после формирования нового бара и все показывает нормально. Значит глюк где-то у меня с обработкой баров.
 
mt4trade:
sanyooooook (и всем остальным отвечавшим) - спасибо за помощь!! Я пока ошибку не нашел, но понял, что она глубоко в коде. Просто поставил разбор history и свою отрисовку сразу после формирования нового бара и все показывает нормально. Значит глюк где-то у меня с обработкой баров.

если из кода выше убрать вот это

   if(ti!=Time[0])
   {
   ti=Time[0];

то рисуется на баре закрытия и на следующем.

 
sanyooooook: если из кода выше убрать вот это ... то рисуется на баре закрытия и на следующем.
Ок! THANX! Откомпилить я этот код не смог, там CalculateCurrentOrders и т.д. не хватает, но думаю все понятно. А я ошибку в своем коде нашел - скобочки фигурные контролировать лучше нужно!! А ведь с этим эксп уже пару лет работает, мли-ин!.. :))))
 
mt4trade:

Коллеги, простой вопрос. Нужно определить, есть ли закрывшийся ордер определенного типа на предыдущем баре.

На открытии бара делаю примерно так:

Но штука в том, что тестер почти всегда находит ордер только ЧЕРЕЗ бар:

  

 Модель в тестере пробовал и все тики и контрольные точки - одинаково.

И то, это работает если поставишь  if (dtlBuyCloseTime>=Time[2])  

Что это - глюки тестера, неправильная работа MODE_HISTORY или у меня баг ??

Причем ведь бывают и нормальные срабатывания, но реже!

Как победить, кто подскажет?

 


Это, я  к не профи но слово вставлю , при установке стрелки вы ставите время и цену 0 бара

 вот строчка:

fSetArrow(Time[0],High[0]+100*Point,TimeToStr(Time[0]),254,Orange); // ставим галку

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

 Не смейтесь и не ругайте.

 
r772ra: Это, я  к не профи но слово вставлю , при установке стрелки вы ставите время и цену 0 бара

 вот строчка:

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

 Не смейтесь и не ругайте.

О чем речь, ругать за желание помочь?? Я - никогда! :) А вот код мой в плане стрелок правильный, осознанный. Мне нужно видеть, когда эксп узнал о времени закрытия ордера. На предыдущем баре он знать не мог (хотя поза, конечно, закрылась именно там).
Причина обращения: