Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Как протестировать программу перед покупкой?
Роман Стар
170
Роман Стар 2014.06.16 07:59 

Добрый день.

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

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

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

Vitalie Postolache
12128
Vitalie Postolache 2014.06.16 08:33  

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

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

Роман Стар
170
Роман Стар 2014.06.16 08:44  
evillive:

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

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

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

Роман Стар
170
Роман Стар 2014.06.16 08:59  
evillive:

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

Благодарю. Понял :)
Vitalie Postolache
12128
Vitalie Postolache 2014.06.16 09:01  
Если МА переделать слишком сложно, тогда берём MACD и оставляем там только вызов iMA и расчёт 1-го буфера, а iMA вызываем с указанием нужного символа, таймфрейма, и прочих параметров. Если всё сделать правильно, то получится индикатор МА с расширенными пользовательскими настройками, только в подвале основного графика.
Vadim Zhunko
5226
Vadim Zhunko 2014.06.16 12:42  

Библиотека.

//==========================================================================================================================================
// 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" запрещено.
//==========================================================================================================================================
Роман Стар
170
Роман Стар 2014.06.16 15:02  

Здесь же нет параметра символа индикатора, только имя.
Ihor Herasko
9042
Ihor Herasko 2014.06.16 15:13  
lelectrohardl:

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


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

int hwndChart = WindowHandle(symbol, period);

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

Vadim Zhunko
5226
Vadim Zhunko 2014.06.16 15:22  
lelectrohardl:

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

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

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

Dmitry Fedoseev
42902
Dmitry Fedoseev 2014.06.16 16:31  
lelectrohardl:

Добрый день.

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

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

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


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