Не получается брать данные индикатора со старшего ТФ - страница 2

 
Slawa:

Неоднократно уже обсуждалось.

1. В OnInit запросить все символы-периоды, которые предполагается использовать

2. Запустить 1-минутный таймер

3. В OnTimer запрашивать все нужные символы-периоды. Без дальнейшего использования, типа CopyRates(symbol,period,0,1,rates_array). Только спрашивать (на всякий случай), синхронизировано или нет

4. В OnCalculate спокойно запрашивать и использовать через минуту-полторы после первого запуска.

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

Все запрашивать? Их 21. Если лишь один период в момент первого запуска по полминуты грузится, то 21 ? ...

 
Artyom Trishkin:

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

Как такое возможно? Всегда на уровне параметров известно, с какими периодами будем работать.
 
Andrey F. Zelinsky:
Как такое возможно? Всегда на уровне параметров известно, с какими периодами будем работать.

Хорошо.

Ситуация: человек ставит индикатор на М1, выбирает параметр для получения данных с М5.

Запросили данные с М1 и с М5 - чудесно.

Далее, человек переходит на М15 и индикатор просто корректирует параметр для получения данных теперь с М15. А их заранее не было. Ждём подгрузку данных полминуты при смене тф.

Это нормально? В МТ 4 всё далается "на лету", хочется такого же поведения и в МТ5 без костылей:


 
Artyom Trishkin:

Мое скромное мнение. Если вы хотите работать с вызываемыми индикаторами динамически и при этом экономить ресурсы, тогда вам нужно перенести все алгоритмы в основной индикатор и не использовать вызов индикаторов на "i". Только нужно создать необходимые таймсерии в OnInit и все, дальше работать только с ними.

Иначе вы будете тащить показания всего и вся на всех барах "Макс. баров в окне:" для каждой таймсерии, те самые X минут, уничтожая все носители ГБ и флопс на вашем ПК.

 
Artyom Trishkin:

В МТ 4 всё далается "на лету", хочется такого же поведения и в МТ5 без костылей:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Renat Fatkhullin, 2017.04.12 22:07

Инструменты не обязательно должны быть добавлены в обзор рынка, чтобы по ним получить историю. Любое обращение к данным символа вызывает фоновую синхронизацию данных.

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

Уже поставлена задача изменить эту стратегию и поднимать данные, не глубже 500 баров от самой далекой даты запроса. Это позволит безболезненно писать скринеры рынка.

 
Marat Sultanov:

Мое скромное мнение. Если вы хотите работать с вызываемыми индикаторами динамически и при этом экономить ресурсы, тогда вам нужно перенести все алгоритмы в основной индикатор и не использовать вызов индикаторов на "i". Только нужно создать необходимые таймсерии в OnInit и все, дальше работать только с ними.

Иначе вы будете тащить показания всего и вся на всех барах "Макс. баров в окне:" для каждой таймсерии, те самые X минут, уничтожая все носители ГБ и флопс на вашем ПК.

Алгоритм в основном индикаторе таков: ищем пики/донышки на заданном тф АО или MACD, и ищем по ним дивергенции на заданном пользователем тф. Заранее не известно какой тф выберет пользователь, и на какой в процессе решит потом переключиться. В МТ4 горя не знал. В МТ5 добиться того же, как на видео не могу. Придётся в ините запрашивать данные по 21-му тф и создавать 42 хендла двух индикаторов?

Или как поступать для экономии ресурсов и ускорения просчётов - ну не дело по полминуты ждать подгрузку данных.

 
Artyom Trishkin:

Алгоритм в основном индикаторе таков: ищем пики/донышки на заданном тф АО или MACD, и ищем по ним дивергенции на заданном пользователем тф. Заранее не известно какой тф выберет пользователь, и на какой в процессе решит потом переключиться. В МТ4 горя не знал. В МТ5 добиться того же, как на видео не могу. Придётся в ините запрашивать данные по 21-му тф и создавать 42 хендла двух индикаторов?

Или как поступать для экономии ресурсов и ускорения просчётов - ну не дело по полминуты ждать подгрузку данных.

Нужна скорость и экономичность памяти? Тогда только если отказаться от хендлов и перенести все алгоритмы в основной индикатор. В ините лишь иницировать запрос к необходимым таймсериями:

datetime TimeBuf[];

for (int i=0; i<TFTotal; ++i)
{
   CopyTime(_Symbol, TFsBuf[i], 0, MinRequiredBars, TimeBuf);
}

И далее работать с этими ТФ как вам угодно. Просто напишите алгоритмы AO и MACD, как отдельные функции.

Сердито и дешево! :)

 
Marat Sultanov:

Нужна скорость и экономичность памяти? Тогда только если отказаться от хендлов и перенести все алгоритмы в основной индикатор. В ините лишь иницировать запрос к необходимым таймсериями:

И далее работать с этими ТФ как вам угодно.

Сердито и дешево! :)

Зачем мне копии таймфреймов? Мне нужны данные двух индикаторов AO и MACD получать с любых тф находясь на младшем тф. Вы предлагаете перетащить расчёты АО и MACD в основной индикатор и пользоваться функциями расчёта этих индикаторов вместо получения данных с нужных тф от стандартных индикаторов?
 
Artyom Trishkin:
Зачем мне копии таймфреймов? Мне нужны данные двух индикаторов AO и MACD получать с любых тф находясь на младшем тф. Вы предлагаете перетащить расчёты АО и MACD в основной индикатор и пользоваться функциями расчёта этих индикаторов вместо получения данных с нужных тф от стандартных индикаторов?
Именно это! Иначе вы больше времени и нервов потратите...
 
Marat Sultanov:
Именно это! Иначе вы больше времени и нервов потратите...
Это можно, но это не решит главную озвученную проблему: как получить от стандартных индикаторов нужные данные быстро, просто и не затратно.
Причина обращения: