Как написать собственную функцию ObjectGetValueByTime ()?

 

Я просмотрел документацию и нашел эти строки: https://www.mql5.com/en/docs/objects/objectgetvaluebytime

Примечание

Функция использует синхронный вызов – это означает, что функция дожидается выполнения всех команд, которые были помещены в очередь графика перед её вызовом, и поэтому данная функция может быть затратной по времени. Нужно иметь это обстоятельство в виду, если ведется работа с большим количеством объектов на графике.

Так как объект в одной координате цены может иметь несколько значений, то необходимо указать номер линии. Эта функция применима только для следующих объектов:

Трендовая линия (OBJ_TREND)
Трендовая линия по углу (OBJ_TRENDBYANGLE)
Линия Ганна (OBJ_GANNLINE)
Равноудаленный канал (OBJ_CHANNEL) - 2 линии
Канал на линейной регрессии (OBJ_REGRESSION) - 3 линии
Канал стандартного отклонения (OBJ_STDDEVCHANNEL) - 3 линии
Линия со стрелкой (OBJ_ARROWED_LINE)

Меня интересует Trendline (OBJ_TREND).

Это может быть опасно для моего кода, поскольку мой код зависит от значений, полученных из функции.

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

Пожалуйста, помогите мне в этом.

 
jaffer wilson:

Я просмотрел документацию и нашел эти строки: https://www.mql5.com/en/docs/objects/objectgetvaluebytime

Меня интересует Trendline (OBJ_TREND).

Это может быть опасно для моего кода, поскольку мой код зависит от значений, полученных из функции.

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

Пожалуйста, помогите мне в этом.

вот готовый код https://www.mql5.com/ru/code/24803 

- а там, Ваша сообразительность.   

AutoClose Line
AutoClose Line
  • www.mql5.com
Закрытие позиций по символу, если цена Close пересекла линию.
 
jaffer wilson:

Я просмотрел документацию и нашел эти строки: https://www.mql5.com/en/docs/objects/objectgetvaluebytime

Меня интересует Trendline (OBJ_TREND).

Это может быть опасно для моего кода, поскольку мой код зависит от значений, полученных из функции.

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

Пожалуйста, помогите мне в этом.

Артём Тришкин поможет.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Вопросы от начинающих MQL5 MT5 MetaTrader 5

Artyom Trishkin, 2020.05.02 12:27

Используйте уравнение прямой:

//+------------------------------------------------------------------+
//| Уравнение прямой                                                 |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+

Указываете номер и цену бара точки слева, указываете номер и цену бара точки справа (по этим точкам строится виртуальная линия) и указываете искомый бар.
Функция вернёт цену искомого бара.


 
SanAlex :

вот готовый код  https://www.mql5.com/ru/code/24803  

- а там, Ваша сообразительность.   

Спасибо за ответ. Но я не ищу цены закрытия позиций или что-то вроде того, что вы предложили.

Но ваше предложение хорошее.

У меня проблема с использованием ObjectGetValueByTime (), потому что он ненадежен. Это ленивая функция. Я хочу получать значения быстрее, поскольку мне нужно использовать значения строк из программы, которую я пишу.

Во-вторых, есть тысяча строк. Я не могу переименовать их по очереди. Невозможно даже иметь тысячу строк с тем же именем.

Также мне не нужно крайнее значение линии. Но промежуточный. Скажите средние или близкие к средним значениям. Следовательно, это сложно, если ObjectGetValueByTime () не работает.

 
jaffer wilson:

Но я не ищу цены закрытия позиций или что-то вроде того, что вы предложили.

А в чем разница? Уравнение прямой от этого не изменяется.

 
Alexey Viktorov :

Артём Тришкин поможет.


Артем Тришкин - отличный человек. Я видел, как он творит много чудес.

Но то, что вы мне предложили, - это не то, о чем я спрашиваю. Я могу рисовать линии с помощью моей программы, но я не могу получить доступ к значениям из линий. К крайним точкам я могу получить доступ через функцию ObjectGetDouble (), используя OBJPROP_PRICE. Но не где-то посередине значения.

Я нашел только один способ - использовать ObjectGetValueByTime (). Но это нехорошо. Поскольку он может иногда давать неправильные значения, поскольку это синхронная функция.

Следовательно, я ищу другой способ доступа к значениям строк, помимо ObjectGetValueByTime ().

Надеюсь, я высказал свою точку зрения.

 
jaffer wilson:

Но то, что вы мне предложили, - это не то, о чем я спрашиваю. Я могу рисовать линии с помощью моей программы, но я не могу получить доступ к значениям из линий. К крайним точкам я могу получить доступ через функцию ObjectGetDouble (), используя OBJPROP_PRICE. Но не где-то посередине значения.

Зная координаты ЛЮБЫХ двух точек прямой, можно получить координату ЛЮБОЙ другой точки этой же линии. Функцию Вам дали.

 
jaffer wilson:

Артем Тришкин - отличный человек. Я видел, как он творит много чудес.

Но то, что вы мне предложили, - это не то, о чем я спрашиваю. Я могу рисовать линии с помощью моей программы, но я не могу получить доступ к значениям из линий. К крайним точкам я могу получить доступ через функцию ObjectGetDouble (), используя OBJPROP_PRICE. Но не где-то посередине значения.

Я нашел только один способ - использовать ObjectGetValueByTime (). Но это нехорошо. Поскольку он может иногда давать неправильные значения, поскольку это синхронная функция.

Следовательно, я ищу другой способ доступа к значениям строк, помимо ObjectGetValueByTime ().

Надеюсь, я высказал свою точку зрения.

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

 
Alexey Viktorov :

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

Хорошо, я попробую это. Благодарю.

 
jaffer wilson:

Хорошо, я попробую это. Благодарю.

О результатах пожалуйста сообщите. Это реально работает. Я самостоятельно тоже делал, но мои наработки разбросаны по нескольким советникам, а не одной функцией.

 
Alexey Viktorov :

О результатах пожалуйста сообщите. Это реально работает. Я самостоятельно тоже делал, но мои наработки разбросаны по нескольким советникам, а не одной функцией.

Вау, это решение действительно работает. Спасибо, что поделились со мной.