Трендовые линии в тестере

 

Прошу помощи и указании что сделал не так.

Имеем две ирендовые линии которые привязаны к текущему бару

TrendCreate(0,"LineAsk",0,iTime(_Symbol,PERIOD_CURRENT,1),b_p.PriceVolume_Ask,iTime(_Symbol,PERIOD_CURRENT,0),b_p.PriceVolume_Ask,ColorAsk,1,1);  // линия хай                
TrendCreate(0,"LineBid",0,iTime(_Symbol,PERIOD_CURRENT,1),b_p.PriceVolume_Bid,iTime(_Symbol,PERIOD_CURRENT,0),b_p.PriceVolume_Bid,ColorBid,1,1);  // линия лоу                
//+------------------------------------------------------------------+ 
//| Создает линию тренда по заданным координатам                     | 
//+------------------------------------------------------------------+ 
bool TrendCreate(const long            chart_ID=0,        // ID графика 
                 const string          name="TrendLine",  // имя линии 
                 const int             sub_window=0,      // номер подокна 
                 datetime              time1=0,           // время первой точки 
                 double                price1=0,          // цена первой точки 
                 datetime              time2=0,           // время второй точки 
                 double                price2=0,          // цена второй точки 
                 const color           clr=clrRed,        // цвет линии 
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии 
                 const int             width=1)           // толщина линии
  { 
//--- создадим трендовую линию по заданным координатам 
   if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,time1,price1,time2,price2)) 
     { 
      Print(__FUNCTION__, 
            ": не удалось создать линию тренда! Код ошибки = ",GetLastError()); 
      return(false); 
     } 
//--- установим цвет линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
//--- установим стиль отображения линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); 
//--- установим толщину линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); 
//--- отобразим на переднем (false) или заднем (true) плане 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,true); 
//--- включим (true) или отключим (false) режим перемещения линии мышью 
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект 
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection 
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,false); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,false); 
//--- включим (true) или отключим (false) режим продолжения отображения линии влево 
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,false); 
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо 
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,true); 
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,true); 
//--- установим приоритет на получение события нажатия мыши на графике 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0); 
//--- установка видимости объекта на различных таймфреймах  
   ObjectSetInteger(chart_ID,name,OBJPROP_TIMEFRAMES,OBJ_ALL_PERIODS);
   //--- установим текст всплывающей подсказки
   ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,"\n");   
//--- успешное выполнение 
   return(true); 
  } 


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


Можно ли сделать так что бы линии смещались при появлении нового бара привязываясь к его времени и как это сделать.

Спасибо.

 
Konstantin Seredkin:

Прошу помощи и указании что сделал не так.

Имеем две ирендовые линии которые привязаны к текущему бару


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


Можно ли сделать так что бы линии смещались при появлении нового бара привязываясь к его времени и как это сделать.

Спасибо.

//+------------------------------------------------------------------+ 
//| Создает линию тренда по заданным координатам                     | 
//+------------------------------------------------------------------+ 
void TrendCreate(const long            chart_ID=0,        // ID графика 
                 const string          nm="TrendLine",  // имя линии 
                 const int             sub_window=0,      // номер подокна 
                 datetime              time1=0,           // время первой точки 
                 double                price1=0,          // цена первой точки 
                 datetime              time2=0,           // время второй точки 
                 double                price2=0,          // цена второй точки 
                 const color           clr=clrRed,        // цвет линии 
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии 
                 const int             width=1)           // толщина линии
 { 
   if(ObjectFind(chart_ID,nm)<0) {
    ObjectCreate(chart_ID,nm,OBJ_TREND,sub_window,0,0,0);
    ObjectSetInteger(chart_ID,nm,OBJPROP_RAY,true);
    ObjectSetInteger(chart_ID,nm,OBJPROP_STYLE,style);
    ObjectSetInteger(chart_ID,nm,OBJPROP_WIDTH,width);
    ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
    ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,false);
    ObjectSetInteger(chart_ID,nm,OBJPROP_HIDDEN,false);
    ObjectSetInteger(chart_ID,nm,OBJPROP_BACK,false);
    ObjectSetInteger(chart_ID,nm,OBJPROP_COLOR,clr);
   }
    ObjectSetInteger(chart_ID,nm,OBJPROP_TIME,time1);
    ObjectSetDouble(chart_ID,nm,OBJPROP_PRICE,price1);
    ObjectSetInteger(chart_ID,nm,OBJPROP_TIME,1,time2);
    ObjectSetDouble(chart_ID,nm,OBJPROP_PRICE,1,price2);
 }
 
Vitaly Muzichenko:
Спасибо, теперь все понятно, добавил чего не хватает, все работает.
Причина обращения: