Программно запустить индикатор с разных инструментов

 

Добрый день.

Есть стандартный индикатор Moving Average, которая позволяет вешать себя на текущий инструмент.
Есть стандартная функция iCustom(), которая позволяет получать данные той же МА, но уже с любого инструмента и таймфрейма.

Можно ли на график программно повесить индикатор из другого инструмента. Чтобы его можно было увидеть? И как "свести" значения котировок?
Например, находимся на паре EURUSD, а МА рисует цену USDCHF?

Подскажите пожалуйста. 

 

iMA(USDCHF,0,13,8,0,0,0);

Для универсальности придётся переделать стандартный индикатор МА, добавить туда в настройки название символа и значение таймфрейма, в кодобазе уже есть примеры как это сделать. Правда, лучше выводить полученный индикатор в отдельное окно, вроде как стохастик, а то график МА с евродоллара на йене, например, как-то не смотрится, да и франк на евродолларе как-то тоже не очень.

 
evillive:

iMA(USDCHF,0,13,8,0,0,0);

В коде значения я получу. А как на график поставить этот индикатор, от другого символа?
 
lelectrohardl:
В коде значения я получу. А как на график поставить этот индикатор, от другого символа?

Так же как ставят и другие индикаторы, код ведь придётся встроить в полноценный индикатор, чтобы получить возможность рисовать график. Берём МА и переделываем.

 
evillive:

Так же как ставят и другие индикаторы, код ведь придётся встроить в полноценный индикатор, чтобы получить возможность рисовать график. Берём МА и переделываем.

Благодарю. Понял :)
 
Если МА переделать слишком сложно, тогда берём MACD и оставляем там только вызов iMA и расчёт 1-го буфера, а iMA вызываем с указанием нужного символа, таймфрейма, и прочих параметров. Если всё сделать правильно, то получится индикатор МА с расширенными пользовательскими настройками, только в подвале основного графика.
 

Библиотека.

//==========================================================================================================================================
// 8.11.1. Функция загружает на указанный график стандартный индикатор по его имени. Функция предназначена для ANSI-строк.
void ServiceLoadStdIndicatorA(int    hwndChart,         // Системный дескриптор окна графика, куда загружается индикатор.
                               uchar &szNameIndicator[], // Имя загружаемого индикатора.
                               int    bOK);              // Подтверждение запуска индикатора, при наличии диалогового окна свойств индикатора.
                                                         //   TRUE  - автонажатие на кнопку "OK" разрешено.
                                                         //   FALSE - автонажатие на кнопку "OK" запрещено.
//------------------------------------------------------------------------------------------------------------------------------------------
// 8.11.2. Функция загружает на указанный график стандартный индикатор по его имени. Функция предназначена для UNICODE-строк.
void ServiceLoadStdIndicatorW(int    hwndChart,      // Системный дескриптор окна графика, куда загружается индикатор.
                               string sNameIndicator, // Имя загружаемого индикатора.
                               int    bOK);           // Подтверждение запуска индикатора, при наличии диалогового окна свойств индикатора.
                                                      //   TRUE  - автонажатие на кнопку "OK" разрешено.
                                                      //   FALSE - автонажатие на кнопку "OK" запрещено.
//==========================================================================================================================================
 

Здесь же нет параметра символа индикатора, только имя.
 
lelectrohardl:

Здесь же нет параметра символа индикатора, только имя.


За то есть параметр, указывающий, к какому конкретно графику присоединить индикатор:

int hwndChart = WindowHandle(symbol, period);

 В symbol указываете нужный символ, а в period - нужный таймфрейм.

 
lelectrohardl:

Здесь же нет параметра символа индикатора, только имя.

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

Т.е. можно попытаться запустить с символом и периодом на графике, которого не существует. 

 
lelectrohardl:

Добрый день.

Есть стандартный индикатор Moving Average, которая позволяет вешать себя на текущий инструмент.
Есть стандартная функция iCustom(), которая позволяет получать данные той же МА, но уже с любого инструмента и таймфрейма.

Можно ли на график программно повесить индикатор из другого инструмента. Чтобы его можно было увидеть? И как "свести" значения котировок?
Например, находимся на паре EURUSD, а МА рисует цену USDCHF?

Подскажите пожалуйста. 


Средствами mql нельзя программно повесить индикатор даже своего инструмента. Наверно вопрос скорее о том, как сделать, чтобы индикатор прикрепленный на график одного символа показывал данные с другого символа. Просто так - никак (нет такой кнопочки). Надо или переделывать индикатор, или делать индикатор-прокладку, вызывать требуемый индикатор через iCustom(), или непосредственно (если стандартный индикатор, наприме iMA()), а при вызове указывать символ, это первый параметры всех функций индикаторов и iCustom(). Тут есть одна маленькая, но вредная проблемка - пропуски баров. Нужно применять специальные меры для определения индекса бара одного символа соответствующего индексу бара на другом символе (последний параметры функции индикаторов). Для этого подойдет функция iBarShift().