Как узнать текущую цену второй линии объекта objchannel в mql4?

 

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

priceObj = ObjectGetValueByShift(ObjectName(i),0);
 
Aleh Prykhodzka:
ObjectName

Не очень понятно, что нужно. Наверное, ObjectGet() поможет.

Графические объекты - Справочник MQL4
Графические объекты - Справочник MQL4
  • docs.mql4.com
Графические объекты - Справочник MQL4
 

Совершенно не понятно о каком именно канале идёт речь. Скажем так, это инструмент "Равноудалённый канал"? Или может это Канал Фибоначчи? Или может это....

Скорее всего Вам нужен именно метод Get с указанием номера линии. В общих чертах это так. Но без конкретики мы будем тыкать пальцем в небо.

 
Vitaly Murlenko #:

Совершенно не понятно о каком именно канале идёт речь. Скажем так, это инструмент "Равноудалённый канал"? Или может это Канал Фибоначчи? Или может это....

Скорее всего Вам нужен именно метод Get с указанием номера линии. В общих чертах это так. Но без конкретики мы будем тыкать пальцем в небо.

Да, это равноудаленный канал

Файлы:
 
Putnik #:

Не очень понятно, что нужно. Наверное, ObjectGet() поможет.

эта функция покажет цену из точки привязки, а мне нужна текущая цена на линии

Файлы:
 
Все это рассчитывается по уравнению прямой. Если нужны данные от второй линии, то сначала для первой линии нужно рассчитать коэффициенты b (это то, что уже получено через ObjectGetValueByShift, но удобнее будет сделать самостоятельно) и k (тангенс угла наклона линий к оси абсцисс). На основании полученного значения k рассчитывается коэффициент b для второй линии. Зная коэффициенты для обеих линий, легко и быстро рассчитываются значения линий на любом баре.
 
Ihor Herasko #:
Все это рассчитывается по уравнению прямой. Если нужны данные от второй линии, то сначала для первой линии нужно рассчитать коэффициенты b (это то, что уже получено через ObjectGetValueByShift, но удобнее будет сделать самостоятельно) и k (тангенс угла наклона линий к оси абсцисс). На основании полученного значения k рассчитывается коэффициент b для второй линии. Зная коэффициенты для обеих линий, легко и быстро рассчитываются значения линий на любом баре.

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

 
Aleh Prykhodzka #:

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

библиотечная вроде как работает. ObjectGetValueByTime имеет параметр номер линии. Для канала основная линия 0, дополнительная 1.

Для произвольного времени (например времени привязки) взять оба значения и вычесть одно из другого

--

Но с хитростью - до вызова надо установить свойства OBJPROP_RAY (и RAY_LEFT RAY_RIGHT) в 1, после вызова вернуть как было. 

И с глюками - в терминале, их алгоритмами и функциями, параллельные линии иногда пересекаются, причём быстро :-) 

 
Aleh Prykhodzka #:

эта функция покажет цену из точки привязки, а мне нужна текущая цена на линии

Специальной функции в справке не нашел. Придется рассчитывать в ручную. Нужно найти расстояние по вертикали между линиями (в районе единственной точки). Поскольку канал равноудаленный, то расстояние везде одинаковое. Далее от основной линии (с двумя точками) отнимать/прибавлять это расстояние.

-------------

PS 

Из личного опыта:

Если нужны данные по уже известным барам, назад(в прошлое). Тогда удобнее вычислять по барам.

Если нужно заглянуть вперед(в будующее), тогда лучше вычислять по времени, использую переменную типа datetime, и пропорции или тригонометрию.

 
Putnik #:

Специальной функции в справке не нашел. Придется рассчитывать в ручную. Нужно найти расстояние по вертикали между линиями (в районе единственной точки). Поскольку канал равноудаленный, то расстояние везде одинаковое. Далее от основной линии (с двумя точками) отнимать/прибавлять это расстояние.

-------------

PS 

Из личного опыта:

Если нужны данные по уже известным барам, назад(в прошлое). Тогда удобнее вычислять по барам.

Если нужно заглянуть вперед(в будующее), тогда лучше вычислять по времени, использую переменную типа datetime, и пропорции или тригонометрию

Ну вот.. значит тригонометрию вычеркиваем из планов на вечер))), вот такие объяснения мне понятны, низкий поклон!)

 
Aleh Prykhodzka #:

Ну вот.. значит тригонометрию вычеркиваем из планов на вечер))), вот такие объяснения мне понятны, низкий поклон!)

Держите тригонометрию

//+------------------------------------------------------------------+
//| Уравнение прямой                                                 |
//+------------------------------------------------------------------+
double EquationDirect(const int left_bar,const double left_price,const int right_bar,const double right_price,const int bar_to_search) 
  {
   return(right_bar==left_bar ? left_price : (right_price-left_price)/(right_bar-left_bar)*(bar_to_search-left_bar)+left_price);
  }
//+------------------------------------------------------------------+