ObjectGetValueByTime и OBJ_STDDEVCHANNEL

 

Всем привет, решил создать канал и вычислить цену по линиям данного канала, 

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

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

 

   datetime Time1=StrToTime(TimeStart);
   datetime Time2=StrToTime(TimeEnd);

   if(Time1>Time2)Time1=Time1-24*60*60;
   SetVLine(InpColor,InpName+"START1",Time1,InpStyle,InpWidth);
   SetVLine(InpColor,InpName+"START2",Time2,InpStyle,InpWidth);

   if(!StdDevChannelCreate(0,InpName,0,Time1,Time2,KoeficientStdDev,InpColor,InpStyle,
      InpWidth,InpFill,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
     {
      return(0);
     }
   if(TimeCurrent()<Time2)return(0);
   Print("ObjectGetValueByTime(0,InpName,Time2-((Time2-Time1)/2)0)="+ObjectGetValueByTime(0,InpName,Time2-((Time2-Time1)/2),0));
   Print("ObjectGetValueByTime(0,InpName,Time2-((Time2-Time1)/2)1)="+ObjectGetValueByTime(0,InpName,Time2-((Time2-Time1)/2),1));
   Print("ObjectGetValueByTime(0,InpName,Time2-((Time2-Time1)/2)2)="+ObjectGetValueByTime(0,InpName,Time2-((Time2-Time1)/2),2));
   SetHLine(InpColor,InpName+"HLINE1",ObjectGetValueByTime(0,InpName,Time2-((Time2-Time1)/2)),InpStyle,InpWidth);
   SetHLine(InpColor,InpName+"HLINE2",ObjectGetValueByTime(0,InpName,Time2-((Time2-Time1)/2),1),InpStyle,InpWidth);
 
2014.10.27 17:28:45.911 Exp - ValeraY EURCHF,M15: ObjectGetValueByTime(0,InpName,Time2-((Time2-Time1)/2)2)=1.2060989
2014.10.27 17:28:45.911 Exp - ValeraY EURCHF,M15: ObjectGetValueByTime(0,InpName,Time2-((Time2-Time1)/2)1)=1.2060989
2014.10.27 17:28:45.911 Exp - ValeraY EURCHF,M15: ObjectGetValueByTime(0,InpName,Time2-((Time2-Time1)/2)0)=1.2060989
Как решить данный вопрос кто в курсе? 
 

Наверное, внимательнее немного надо быть (но могу ошибаться, проверьте пожалуйста):

ObjectGetValueByTime(0,InpName,Time2-((Time2-Time1)/2),0)) ==

ObjectGetValueByTime(    0,    InpName,     Time2-((Time2-Time1)/2),0)    )  == 

ObjectGetValueByTime(    0,    InpName,     Time2-(0)    )    ==

ObjectGetValueByTime(    0,    InpName,     Time2        ) 

 

Если предположение верно то вычисление ObjectGetValueByTime по  0, -1, -2 секундам даст один и тот же результат. 

 

нет Вы ошибаетесь, время указано верно 

Time2-((Time2-Time1)/2) - дает середину времени данного отрезка. 

грубо говоря между Time2 Time1 = 9 часов, половина отрезка дает 4.5 часа, тут все верно 

Вопрос по линиям. Функция  ObjectGetValueByTime для канала стандартного отклонения должна выдавать значения по 3 линиям. а по итогу - все линии дают одно и то же значение. 

 

Vladon:

... а по итогу - все линии дают одно и то же значение. 

Да, и у меня в МТ4 так же получается по тестовому коду (значения равны средней линии):

   Print("Средняя линия канала(0), Time[1] = ",DoubleToString(ObjectGetValueByTime(0,InpName,Time[1],0),_Digits));
   Print("Верхняя линия канала(1), Time[1] = ",DoubleToString(ObjectGetValueByTime(0,InpName,Time[1],1),_Digits));
   Print("Нижняя линия канала(2), Time[1] = ",DoubleToString(ObjectGetValueByTime(0,InpName,Time[1],2),_Digits));


В МТ5 - значения по трём линиям:

Print("Средняя линия канала(0), time[1] = ",DoubleToString(ObjectGetValueByTime(0,InpName,time[1],0),_Digits));
Print("Верхняя линия канала(1), time[1] = ",DoubleToString(ObjectGetValueByTime(0,InpName,time[1],1),_Digits));
Print("Нижняя линия канала(2), time[1] = ",DoubleToString(ObjectGetValueByTime(0,InpName,time[1],2),_Digits));
 
DiPach:

Да, и у меня в МТ4 так же получается по тестовому коду (значения равны средней линии):


В МТ5 - значения по трём линиям:

Значит ошибка в мт4 данной функции 
 
Vladon:
Значит ошибка в мт4 данной функции 

Похоже на то.

P./S.: Сейчас поправила выше чуть свой код по МТ4. В порядке эксперимента просто в последний момент пробовала менять нумерацию линий на 1,2,3 вместо 0,1,2 и так в пост сначала и поставила выдержку из кода "не глядя".)  Так-то на скрине изначально в соответствии с 0,1,2 одни и те же значения.

 
DiPach:

Похоже на то.

P./S.: Сейчас поправила выше чуть свой код по МТ4. В порядке эксперимента просто в последний момент пробовала менять нумерацию линий на 1,2,3 вместо 0,1,2 и так в пост сначала и поставила не глядя)))

я пробовал и так, и 123, и 345 Думал мало ли. :-) 
 
Vladon:
я пробовал и так, и 123, и 345 Думал мало ли. :-) 

Коллеги-экспериментаторы, однако. )))

P./S.: Уточняющую фразу про скрин внесла ещё не видя ваш пост. Отдохнуть похоже мне пора.)
 
))
 

Извените, бес-справка попутала (3 параметра дает только):

double  ObjectGetValueByTime(
   string     object_name,   // имя объекта
   datetime   time,          // время
   int        line_id=0      // номер линии
   );

 

 + моя невнимательнось ((

 

если есть координаты средней линии то можно найти отклонение

Расстояние между границами канала и линией регрессии равно величине стандартного отклонения цены закрытия от линии регрессии.

 Стандартное отклонение (оценка среднеквадратического отклонения случайной величины x относительно её математического ожидания на основе несмещённой оценки её дисперсии):