Добавление индикатора на график

 

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

Изначально, я решил, что мне нужно лишь добавить индикатор на график функцией ChartIndicatorAdd(). Но интересно то, что эта функция принимает хэндл индикатора, который, в моём случае, кастомный и его можно создать при помощи функции iCustom(). А вот здесь самое интересное.

Зачем нужна функция ChartIndicatorAdd(), если при вызове функции  iCustom() в любом месте кода индикатора, индикатор добавляется на график. По сути, это и натолкнуло меня на мысль спросить зачем вообще нужна функция ChartIndicatorAdd()? И нужно ли она вообще?

Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
ChartIndicatorAdd - Операции с графиками - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Индикатор добавляется только в тестер с визуализацией.

А зачем советнику уровни из индикатора? Они рисуются графическими, горизонтальными линиями? Может достаточно задать числовое значение уровня в советник?

 
Alexey Viktorov:

Индикатор добавляется только в тестер с визуализацией.

Это понятно. Т.е. если режим не визуализации при тестировании, то для такого режима нужно всё-таки добавить индикатор при помощи функции ChartIndicatorAdd(). А в остальных случаях эта функция не бесполезна и можно обойтись лишь функцией iCustom(), верно?


Alexey Viktorov:

А зачем советнику уровни из индикатора? Они рисуются графическими, горизонтальными линиями? Может достаточно задать числовое значение уровня в советник?

Ну как сказать. Все расчёты индикатора перенести в советник? Не вариант.. Там уровни высчитываются динимачески.

 
Viktar Dzemikhau:

Это понятно. Т.е. если режим не визуализации при тестировании, то для такого режима нужно всё-таки добавить индикатор при помощи функции ChartIndicatorAdd(). А в остальных случаях эта функция не бесполезна и можно обойтись лишь функцией iCustom(), верно?


Ну как сказать. Все расчёты индикатора перенести в советник? Не вариант.. Там уровни высчитываются динимачески.

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

 

Вот для чего нужна мне эта функция ChartIndicatorAdd

В тестере Индикатор рисует трендовые или горизонтальные линии - а Эксперт открывает от этих линии 

так же и в реале - по времени выставится Индикатор от рисует свои уровни - но когда Эксперт откроет от его уровней Индикатор выставит опять эти уровни, Эксперт зациклится на открывании,

нужно что бы индикатор удалился после первого срабатывания Эксперта. 

1. Выставит на график Индикатор

input group    "---- Time ChartIndicatorAdd ----"
input string   InpIndi_name                 = "Имя Индикатора";  // Installation Indicator Name
input datetime InpHoursFrom_1               = D'1970.01.01';     // Time Installation Indicator

2. Удалит Индикатор как Эксперт откроет позицию 

input group    "---- Indicator Delete ----"
input string   Inpshort_name                = "Имя Индикатора";  // Delete Indicator Name
input string   Inpshort_name_1              = "Имя Индикатора";  // Delete Indicator Name
input bool     Inpres                       = false;             // Delete All Indicators

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

тут вообще мудрил от трендовой линии выставляется Индикатор - круговорот Установится Удалится Индикатор

input string   t8="----- ChartIndicatorAdd  -----";              // : Работа с Trailing Line: 2
input bool     InpChartInd                  = false;             // Avto Line Chart Indicators
input string   InpIndiL                     = "AVERAGE 0";       // Line name (ChartIndicatorAdd)
input int      InpStep5                     = 0;                 // Obj: Шаг сетки, пунктов("0" -> false)
input string   InpIndi_name                 = "Имя Индикатора";  // Installation Indicator Name
input int      InpChart                     = 0;                 // Window numbe
input datetime InpMonday_1                  = D'1970.01.01';     // Installation Indicator (00::00->off)
 
Alexey Viktorov:

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

Да ладно? Причём здесь индикатор? Я спросил о том, что по-моему, функция ChartIndicatorAdd() избыточна. Свою позицию я обосновал. Но, вчера я проверил это всё вскольз. Есс-но, возможно варианты. Поэтому и спросил.

Так вот каким боком индикатор в возможной избыточности функции в MQL это уже вопрос..

Вы сами поняли, что речь совсем не об индикаторе и индикатор на функции не влияет никак?

 
Viktar Dzemikhau:

Вы сами поняли, что речь совсем не об индикаторе и индикатор на функции не влияет никак?

А вы сами поняли это предложение?

Если вам нужно из советника добавить индикатор на график, добавляйте и флаг вам в руки… Но факт, что при тестировании в режиме визуализации индикатор автоматом отображается, никак не говорит о бесполезности функции…

На этом я с вами прощаюсь, диалог закончен…………

 
Alexey Viktorov:

А вы сами поняли это предложение?

Конечно, понимаю. Как индикатор может влиять на функцию? Это тоже самое, что приложение на базе того же Андроида будет влиять на язык Kotlin или Java, а не наоборот, архитектура языка влияет на приложение..

Alexey Viktorov:

А вы сами поняли это предложение?

Если вам нужно из советника добавить индикатор на график, добавляйте и флаг вам в руки… Но факт, что при тестировании в режиме визуализации индикатор автоматом отображается, никак не говорит о бесполезности функции…

На этом я с вами прощаюсь, диалог закончен…………

Ну так есс-но. Так проще. Написать что-то и закончить разговор. Странные обиды без причины. Мой вопрос был такой:

Это понятно. Т.е. если режим не визуализации при тестировании, то для такого режима нужно всё-таки добавить индикатор при помощи функции ChartIndicatorAdd(). А в остальных случаях эта функция не бесполезна и можно обойтись лишь функцией iCustom(), верно?

Вместо ответа я услышал то, что вам влом изучать индикатор. Но я об этом и не просил.

Кстати, индикатор добавляется на график не только в режиме визуализации в тестере, но и в режиме реальной торговли. По сути, как я написал в первом сообщении функция ChartIndicatorAdd() полностью бесполезна.

 
SanAlex:

Вот для чего нужна мне эта функция ChartIndicatorAdd

В тестере Индикатор рисует трендовые или горизонтальные линии - а Эксперт открывает от этих линии 

так же и в реале - по времени выставится Индикатор от рисует свои уровни - но когда Эксперт откроет от его уровней Индикатор выставит опять эти уровни, Эксперт зациклится на открывании,

нужно что бы индикатор удалился после первого срабатывания Эксперта. 

1. Выставит на график Индикатор

2. Удалит Индикатор как Эксперт откроет позицию 

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

тут вообще мудрил от трендовой линии выставляется Индикатор - круговорот Установится Удалится Индикатор

Ваше сообщение я понял. Но ответа на мой вопрос это не даёт.

 
Viktar Dzemikhau:

Это понятно. Т.е. если режим не визуализации при тестировании, то для такого режима нужно всё-таки добавить индикатор при помощи функции ChartIndicatorAdd(). А в остальных случаях эта функция не бесполезна и можно обойтись лишь функцией iCustom(), верно?


Ну как сказать. Все расчёты индикатора перенести в советник? Не вариант.. Там уровни высчитываются динимачески.

Если функция НЕ бесполезна, вероятно она очень нужна и её можно и нужно применять. Так?

Если можно обойтись только iCustom() то эта функция бесполезна и она НЕ нужна.

А вот как это может быть одновременно, поскольку две части предложения объединены союзом И, я не понимаю………

Плюс ко всему вы не дали ответ на вопрос об уровнях. И о чём продолжать разговор?

 
Viktar Dzemikhau:

Это понятно. Т.е. если режим не визуализации при тестировании, то для такого режима нужно всё-таки добавить индикатор при помощи функции ChartIndicatorAdd(). А в остальных случаях эта функция не бесполезна и можно обойтись лишь функцией iCustom(), верно?

iCustom используется для индикаторов, оперирующих индикаторными буферами. Результат расчета таких индикаторов не отображается на графике. А вот те индикаторы, которые оперируют графическими объектами, отображают свои данные на графике. Думаю, что это побочный эффект (не продумано разработчиками) и такого быть не должно. То есть iCustom добавляет индикатор на виртуальный чарт, а ChartIndicatorAdd - на реально существующий.