Когда нужно создать МНОГО индикаторов. Как лучше это сделать?

 

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

Сразу вопросы возникают:

  1. Так как создание стольких индикаторов потребует время, как организовать их создание? Чтобы не споткнуться?
  2. Имеет ли смысл создавать обычные индикаторы? Или нужно немного переписать индикаторы, чтобы ограничить (сильно ограничить) глубину расчётной части?
  3. ...

 

Хороший вопрос, только не сказан, много похожих индикаторов (один индикатор и разные настройки, или разные индикаторы целиком).

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

И у меня вопрос про индикаторы, если индикатор есть в советнике, но советник обращался к нему пару часов/дней назад, то при повторном обращении он будет пересчитан/досчитан или независимо от обращения расчеты индикатора происходят на каждом тике (новом баре)?

 
Aleksey Vyazmikin:

Хороший вопрос, только не сказан, много похожих индикаторов (один индикатор и разные настройки, или разные индикаторы целиком).

***

Пока речь об одном типе индикатора, на одном таймфрейме, но с разными настройками. Например iTriX: у каждого из 100 создаваемых индикаторов разные периоды усреднения.


Aleksey Vyazmikin:

***

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

***

Уже ищу ответы

   string text="";
   StringConcatenate(text,
                     "Terminal memory used ",TerminalInfoInteger(TERMINAL_MEMORY_USED),", MB",
                     "\n",
                     "The memory size used by MQL5 program ",MQLInfoInteger(MQL_MEMORY_USED),", MB");
   Comment(text);


Aleksey Vyazmikin:

***

И у меня вопрос про индикаторы, если индикатор есть в советнике, но советник обращался к нему пару часов/дней назад, то при повторном обращении он будет пересчитан/досчитан или независимо от обращения расчеты индикатора происходят на каждом тике (новом баре)?

По идеи после создания индикатора он живёт своей жизнью - сам себя обсчитывает.

 

Пример:

"A lot of iTriX.mq5"
version   "1.000"


Отображение сколько памяти кушает терминал на экране.

Файлы:
 
Vladimir Karputov:

Пример:

"A lot of iTriX.mq5"
version   "1.000"


Отображение сколько памяти кушает терминал на экране.

Вот бы понять, сколько памяти кушает индикатор :) Терминала потребления можно посмотреть и штатными средствами винды.

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

Vladimir Karputov:

По идеи после создания индикатора он живёт своей жизнью - сам себя обсчитывает.

И я так думаю, но иногда компы так жужжать начинают, что я сомниваюсь... как бы это точно проверить!?

 
Aleksey Vyazmikin:

Вот бы понять, сколько памяти кушает индикатор :) Терминала потребления можно посмотреть и штатными средствами винды.

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

***

Там две строчки - вставьте в индикатор и проверяйте.


Диспетчер задач и 

   string text="";
   StringConcatenate(text,
                     "Terminal memory used ",TerminalInfoInteger(TERMINAL_MEMORY_USED),", MB",
                     "\n",
                     "The memory size used by MQL5 program ",MQLInfoInteger(MQL_MEMORY_USED),", MB");
   Comment(text);

- это не одно и тоже. Можете проверить.

 
Vladimir Karputov:

Там две строчки - вставьте в индикатор и проверяйте.


Диспетчер задач и 

- это не одно и тоже. Можете проверить.

А, понял, это значение за вычетом самого терминала, только пользовательские программы, верно?

 
Aleksey Vyazmikin:

А, понял, это значение за вычетом самого терминала, только пользовательские программы, верно?

У меня нет 100% информации. Поэтому не могу сказать.

 

При таком количестве индюков( а значит - и ограничений!) Вы будете иметь сигнал на вход примерно ОДИН В МЕСЯЦ. 

:-)))))))))))))))))))))

 

Я думаю, что индикаторы, о которых идет речь, при проектировании не были предусмотрены для единовременного использования с сотней других индикаторов, следовательно их необходимо ПЕРЕПРОЕКТИРОВАТЬ под необходимые условия.

  1. Вычисление буферов индикаторов перенести с CPU на GPU с помощью OpenCL. Это позволит тратить меньше времени на получение новых значений. Например, на минутном таймфрейме это сыграет в большой плюс, т.к. если оставить вычисления на CPU, минуты может не хватить, чтобы получить новые данные
  2. Ограничить диапазон используемой информации для вычислений. Ну, скажем до 50 баров от последних данных (тут можно для каждого индикатора подобрать свой диапазон).
  3. Уменьшить размер буферов, хранящих значения индикаторов. 
Короче, все придется переписывать, шоб работало быстро и без использования лишней памяти. 

 
Artemij:

При таком количестве индюков( а значит - и ограничений!) Вы будете иметь сигнал на вход примерно ОДИН В МЕСЯЦ. 

:-)))))))))))))))))))))

Не обязательно, индикаторы с разными входными параметрами (например усреднение), дают интересную картину, пример из 20 индикаторов с разным периодом усреднения.

20