handle тормоз

 

На минутках нескольких пар, чтобы взять значения индикаторов

нужны несколько хэндлов. Все они при проверке barscalculated должны просчитать все бары. А в итоге все обычно не нужны.

Т.е. даже чтобы на один бар посмотреть нужно подготовить все данные этому хендлу.

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

Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Доступ к таймсериям и индикаторам / Bars - Документация по MQL5
 

Со статьями знакомы:

1 - Принципы экономного пересчета индикаторов

2 - Уменьшаем расход памяти на вспомогательные индикаторы

?

PS

Кроме того - Очень частой ошибкой многих новичков становится "привязка" индикатора к хендлу в обработчике OnTick() или OnTimer().

Подобная схема является серьезной ошибкой и может привести к очень большим проблемам.


 

не знаком. очень уместно. благодарю. Не в ините разумеется все. Просто barscalculated  если возвращает ненужное значение я просто жду когда же появится нужное. А на третьем хедле  довольно долго все просчитывается. Но видимо надо просто бары в окне уменьшить. 

Да статья помогла !))) быстро стало. Спасибо. Уменьшил бары  и все летает. 

 
x_trader:

не знаком. очень уместно. благодарю. Не в ините разумеется все. Просто barscalculated  если возвращает ненужное значение я просто жду когда же появится нужное. А на третьем хедле  довольно долго все просчитывается. Но видимо надо просто бары в окне уменьшить. 

Да статья помогла !))) быстро стало. Спасибо. Уменьшил бары  и все летает. 

Все летает к сожалению только на индикаторе.  Т.е. баров в окне скажем 6000  rates total индикатор показывает 6000

Запускаю советник обращаюсь к индикатору и советник стоит. rates total этот же индикатор печатает 570000 видит баров. Т.е. то что я обошел для индикатора, так и не обошлось для советника.  Т.е. как я понимаю хэндл грузит все 570000 баров, а не желаемые 6000

Я точно не знаю, но индикатор на 570000 работает. А советник 2011.07.27 16:17:39 Core 2 AUDUSD,M1: history begins from 2010.01.04 00:00 и стоит и стоит уже 15 минут загрузка проца есть. Вычислил что такое пишет и стоит как раз когда к хендлу индикатора обращается. Как может индикатор работать, а советник никак с ним не управится. Фух ну и устал же я. Столько сложностей с простейшим.  

 

 
x_trader:

Все летает к сожалению только на индикаторе.  Т.е. баров в окне скажем 6000  rates total индикатор показывает 6000

Запускаю советник обращаюсь к индикатору и советник стоит. rates total этот же индикатор печатает 570000 видит баров. Т.е. то что я обошел для индикатора, так и не обошлось для советника.  Т.е. как я понимаю хэндл грузит все 570000 баров, а не желаемые 6000

Я точно не знаю, но индикатор на 570000 работает. А советник 2011.07.27 16:17:39 Core 2 AUDUSD,M1: history begins from 2010.01.04 00:00 и стоит и стоит уже 15 минут загрузка проца есть. Вычислил что такое пишет и стоит как раз когда к хендлу индикатора обращается. Как может индикатор работать, а советник никак с ним не управится. Фух ну и устал же я. Столько сложностей с простейшим.  

 

Почему не сделать просто? - В индюке параметр задающий нужное количество баров. Туда из эксперта можно передавать, например, хоть 3, если используются значения индюка только с последних баров. Внутри индюка рассчитываете буфера на барах только в количестве, переданном в этом параметре, а из OnCalculate возвращаете rates_total, чтобы терминал "думал", что все рассчитано полностью.
 
Interesting:

Кроме того - Очень частой ошибкой многих новичков становится "привязка" индикатора к хендлу в обработчике OnTick() или OnTimer().

Подобная схема является серьезной ошибкой и может привести к очень большим проблемам.


Это где написано? Мне сегодня пришлось как раз перенести инициализацию хендлов из OnInit в OnTick. Работает без проблем.
 
marketeer:
Почему не сделать просто? - В индюке параметр задающий нужное количество баров. Туда из эксперта можно передавать, например, хоть 3, если используются значения индюка только с последних баров. Внутри индюка рассчитываете буфера на барах только в количестве, переданном в этом параметре, а из OnCalculate возвращаете rates_total, чтобы терминал "думал", что все рассчитано полностью.

Звучит прекрасно!!! Как это сделать?!  У меня хэндл в ините индикатора как я понимаю сразу же все rates_total рассчитывает т..е подготавливает все данные. А только потом я вожусь с on calculate.

 

 
x_trader:

Звучит прекрасно!!! Как это сделать?!  У меня хэндл в ините индикатора как я понимаю сразу же все rates_total рассчитывает т..е подготавливает все данные. А только потом я вожусь с on calculate.

Что за индикаторы, хэндлы которых инициализируются? Если есть их исходники, то можно сделать, как я предложил. Если нет, то такая оптимизация не выйдет.
 
marketeer:
Что за индикаторы, хэндлы которых инициализируются? Если есть их исходники, то можно сделать, как я предложил. Если нет, то такая оптимизация не выйдет.
любой стандартный из i** ima скажем. Просто уже при хендлировании рассчитываются все доступные бары как я понимаю (при тестировании). Как их уменьшить )?!. 
 
x_trader:
любой стандартный из i** ima скажем. Просто уже при хендлировании рассчитываются все доступные бары как я понимаю (при тестировании). Как их уменьшить )?!. 
Я вижу 2 решения: реализовать своими силами эти самые ima с полным контролем глубины пересчета, или плюнуть на однократную трехминутную задержку, которая возникает только единожды на старте эксперта, поскольку на всех следующих барах будет рассчитываться только последний, и тормозов не будет (если только хэндлы каждый раз не прибиваются с помощью IndicatorRelease).
 
marketeer:
Я вижу 2 решения: реализовать своими силами эти самые ima с полным контролем глубины пересчета, или плюнуть на однократную трехминутную задержку, которая возникает только единожды на старте эксперта, поскольку на всех следующих барах будет рассчитываться только последний, и тормозов не будет (если только хэндлы каждый раз не прибиваются с помощью IndicatorRelease).
Буду думать, спасибо. У меня то если я хэндлы убираю все работает, а если ставлю то советник стоит до бесконечности, а не 3 минуты )))  с удовольствием бы плюнул)