Как экономно перебрать периоды индикаторов в МТ5 и получить массивы значений? - страница 3

 
Dmitry Fedoseev:

Один хэндл, это как минимум один индикаторный буфер, а один буфер это массив с размером соответствующим количеству баров. Надо ориентироваться на доступный объем оперативной памяти не хватить.


Всё верно. Чтобы как-то решить задачу ресурсоёмкости, в Настройках нужно ставить минимум: Настройки --> Графики --> Макс.баров в окне = 5000.

 
Dennis Kirichenko:

Я пользуюсь СБ, в частности коллекцией индикаторов типа CIndicators. Очень удобно, особенно для "освежевания" данных. 

Там есть такой метод:

С его помощью создаётся любой индикатор.

Потом добавляем его в коллекцию.

И при необходимости получить новое значение любого индикатора из коллекции просто предварительно  вызываем int CIndicators::Refresh(void).


выглядит интересно, спасибо, надо разобраться

 
Dennis Kirichenko:

Я пользуюсь СБ, в частности коллекцией индикаторов типа CIndicators. Очень удобно, особенно для "освежевания" данных. 

Там есть такой метод:

С его помощью создаётся любой индикатор.

Потом добавляем его в коллекцию.

И при необходимости получить новое значение любого индикатора из коллекции просто предварительно  вызываем int CIndicators::Refresh(void).


Там получается либо нужно свой индикатор переписать в класс, или:

Существует два способа программно создавать хэндл индикатора для последующего доступа к его значениям. Первый способ состоит в непосредственном указании имени функции из списка технических индикаторов. Второй способ позволяет с помощью функции IndicatorCreate() единообразно создавать хэндл любого индикатора заданием идентификатора из перечисления ENUM_INDICATOR. Оба варианта создания хэндла индикатора равноправны, можно использовать тот, который наиболее удобен в каждом конкретном случае при написании программы на MQL5.

что будет равносильно просто созданию хэндла через iCustom.. пока не вижу большого смысла усложнять себе жизнь :)

или можно небольшой пример? я не оч. понимаю какие плюсы это даст

 

Ничего переписывать не нужно. Уже есть класс-адаптер CiCustom.

Посмотрите пример в статье. Там автор пишет про класс-сигнальщик, где есть такая строка:

CiCustom          m_pivots;            // объект-индикатор "Pivots"

Просто нужно правильно заполнить структуру параметров MqlParam и отдать её на съедение методу

//+------------------------------------------------------------------+
//| Creation of the indicator with universal parameters              |
//+------------------------------------------------------------------+
bool CIndicator::Create(const string symbol,const ENUM_TIMEFRAMES period,
                        const ENUM_INDICATOR type,const int num_params,const MqlParam &params[])
{
  ...
}
 
Dennis Kirichenko:

Ничего переписывать не нужно. Уже есть класс-адаптер CiCustom.

Посмотрите пример в статье. Там автор пишет про класс-сигнальщик, где есть такая строка:

Просто нужно правильно заполнить структуру параметров MqlParam и отдать её на съедение методу


Спасибо :) залип в другие ваши статьи по статистике, оч интересно. мб позже появится пара вопросов и по ним

 

Есть еще вариант, рассчитывать период в самом индикаторе, то есть не передавать из советника в индикатор.

Причина обращения: