Как лучше реализовать?

 

Есть класс, который оперирует данными нескольких таймфреймов одного инструмента (читай: всеми). Разделить его по таймфреймам не представляется возможным из-за логики.

В конечном счете результат его работы - графическое отображение информации для текущего таймфрейма графика инструмента.

Какие варианты рисуются у меня в голове:
  1. Реализация в виде простого индикатора или советника. При смене таймфрейма графика класс будет пересчитываться с нуля. Плохо.
  2. Реализация в виде индикатора, который не добавляется на график, но создаётся iCustom с фиксированным таймфреймом (например только M1). Данный вариант идеален, но как управлять дополнительными методами класса (к примеру что-то дополнительно вывести)? Прямое сообщение ему не отправить...
  3. Реализация в виде одного индикатора или советника для всех необходимых инструментов, без изменения таймфрейма графика, на который он будет "закинут" (всё рисование на отдельно открытом графике). Но здесь полностью теряется многопоточность вычислений...
У кого какие дельные мысли есть?
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 
Просто ограничить количество обсчитываемых на запуске баров не достаточно?
 

2.

Не совсем прямое) сообщение можно отправить через глобальные переменные.

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - Документация по MQL5
 
Integer:
Просто ограничить количество обсчитываемых на запуске баров не достаточно?

Не... всё ограничено...

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



Swan:

2.

Не совсем прямое) сообщение можно отправить через глобальные переменные.

Ну можно ещё через файлы, DLL и т.д. Только все эти способы требуют проверки состояния через определённые промежутки времени... Хотелось бы избежать этого

 
Реализация в виде простого индикатора или советника. При смене таймфрейма графика класс будет пересчитываться с нуля. Плохо.
Сделать расчеты только внутри функции "is new bar", а вывод графика сделать не только в "is new bar" но и в "on init". При этом, функция "is new bar" будет срабатывать по данным только одного таймфрейма, который определяется входным параметром индикатора. Таким образом, при смене тайм-фрейма будет происходить только перерисовка(согласно неким правилам), а трудоемкий расчет только по "is new bar" для фиксированного тайм-фрейма.
 
-Alexey-:
Сделать расчеты только внутри функции "is new bar", а вывод графика сделать не только в "is new bar" но и в "on init". При этом, функция "is new bar" будет срабатывать по данным только одного таймфрейма, который определяется входным параметром индикатора. Таким образом, при смене тайм-фрейма будет происходить только перерисовка(согласно неким правилам), а трудоемкий расчет только по "is new bar" для фиксированного тайм-фрейма.
Вы не внимательно прочли вводную...
 
AlexSTAL:
Вы не внимательно прочли вводную...
Думаю, все же внимательно. Или вы имеете в виду то, что не указали, как часто класс оперирует данными всех таймфреймов?
 
-Alexey-:
Думаю, все же внимательно. Или вы имеете в виду то, что не указали, как часто класс оперирует данными всех таймфреймов?
На каждом тике по всем ТФ... разделить ТФ невозможно.... Т.е. я оперирую плавающим общим ТФ на каждом тике...
 
AlexSTAL:
  1. Реализация в виде простого индикатора или советника. При смене таймфрейма графика класс будет пересчитываться с нуля. Плохо.
У кого какие дельные мысли есть?
Быть может следующая особенность позволит избежать пересчета. Если экземпляр класса инициализирован на уровне глобальных переменных, то конструктор класса запускается один раз при присоединении советника к графику. При смене таймфрейма (при уже присоединенном советнике) конструктор класса больше не запускается.  
 
Lizar:
Быть может следующая особенность позволит избежать пересчета. Если экземпляр класса инициализирован на уровне глобальных переменных, то конструктор класса запускается один раз при присоединении советника к графику. При смене таймфрейма (при уже присоединенном советнике) конструктор класса больше не запускается.  

Вы спасли мир! Большое спасибо. Почему то я в эту сторону даже не смотрел... С индикатором то это не прокатит - только с советником...

Пора на пенсию....

 
AlexSTAL:

Вы спасли мир! Большое спасибо. Почему то я в эту сторону даже не смотрел... С индикатором то это не прокатит - только с советником...

Пора на пенсию....

Что ж, передавайте привет спасенному миру. Да, в советнике точно можно.
Причина обращения: