Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 818

 
Vladimir Karputov:

Надеюсь Вы хендлы индикатор создаёте ОДИН раз в OnInit()?

Глубина расчёта - всё зависит от самого индикатора. Редкие индикаторы принудительно ограничивают глубины - как правило все считают на всю историю. Поэтому Вам, возможно, пригодится такой вариант: в индикаторе ввести переменную отвечающую за глубину и затем в советнике, через iCustom, передавать этот параметр.

1. Да, я понимаю, что по-хорошему это делается один раз в ините. Но вопрос в том, что входные параметры индикаторов могут меняться. Например, в спектральном анализе вычисляются резонансные частоты, результатом расчётов является период используемой МА. И если запрашивать данные МА для новой размерности, то это - новый хэндл. Практически частоты меняются же не на каждом баре, поэтому достаточно долго (~ минуты) в расчётах используется один и тот же хэндл МА. Но всё равно наступает момент, когда хэндл меняется. И тогда мне нужно либо кучу хэндлов юзать, либо использовать один хэндл, но периодически его пересчитывать. Вот здесь-то и нужна экономия.

2. iCustom я освоил. Но как ограничить глубину расчётов в самом индикаторе? В технических - никак. Видимо, придётся понасоздавать кучу пользовательских клонов тех. индикаторов. Это противно, конечно, но должно быть эффективно. Спасибо за совет. Хорошая идея. Спасибо.

 
User_mt5:

1. Да, я понимаю, что по-хорошему это делается один раз в ините. Но вопрос в том, что входные параметры индикаторов могут меняться.

Разработчики могут написать СБ, в которой с индикаторами можно без потери эффективности работать в MQL4-стиле. Т.е. все кеши и хендлы спрятаны в СБ.

 
User_mt5:

1. Да, я понимаю, что по-хорошему это делается один раз в ините. Но вопрос в том, что входные параметры индикаторов могут меняться. Например, в спектральном анализе вычисляются резонансные частоты, результатом расчётов является период используемой МА. И если запрашивать данные МА для новой размерности, то это - новый хэндл. Практически частоты меняются же не на каждом баре, поэтому достаточно долго (~ минуты) в расчётах используется один и тот же хэндл МА. Но всё равно наступает момент, когда хэндл меняется. И тогда мне нужно либо кучу хэндлов юзать, либо использовать один хэндл, но периодически его пересчитывать. Вот здесь-то и нужна экономия.

2. iCustom я освоил. Но как ограничить глубину расчётов в самом индикаторе? В технических - никак. Видимо, придётся понасоздавать кучу пользовательских клонов тех. индикаторов. Это противно, конечно, но должно быть эффективно. Спасибо за совет. Хорошая идея. Спасибо.


1. В таком случае вероятно лучше неиспользуемый хендл убивать и создавать новый (главное - контроль, чтобы не нашлёпать в OnTick() миллион хендлов :) ).

2. Создаёте копию встроенного индикатора, но с другим названием (например добавить в название "depth of history") и вводите новый параметр: InpDepthHistory. То есть нужно написать новые пользовательские индикаторы. 

 
User_mt5:

1. Да, я понимаю, что по-хорошему это делается один раз в ините. Но вопрос в том, что входные параметры индикаторов могут меняться. Например, в спектральном анализе вычисляются резонансные частоты, результатом расчётов является период используемой МА. И если запрашивать данные МА для новой размерности, то это - новый хэндл. Практически частоты меняются же не на каждом баре, поэтому достаточно долго (~ минуты) в расчётах используется один и тот же хэндл МА. Но всё равно наступает момент, когда хэндл меняется. И тогда мне нужно либо кучу хэндлов юзать, либо использовать один хэндл, но периодически его пересчитывать. Вот здесь-то и нужна экономия.

2. iCustom я освоил. Но как ограничить глубину расчётов в самом индикаторе? В технических - никак. Видимо, придётся понасоздавать кучу пользовательских клонов тех. индикаторов. Это противно, конечно, но должно быть эффективно. Спасибо за совет. Хорошая идея. Спасибо.

Как я понял, вы хотите как в mql4 получать только 1 значение с помощью iCustom() но не учитываете что в mql4 тоже пересчитывался индикатор на всю глубину истории при первом обращении. Точно так-же пересчитывается и при смене хотя-бы одного параметра.

Отсюда вывод: Не надо заморачиваться. Если "устаревший" индикатор больше не нужен, его можно просто удалить и получить хендл индикатора с другими параметрами.

 
fxsaber:

Разработчики могут написать СБ, в которой с индикаторами можно без потери эффективности работать в MQL4-стиле. Т.е. все кеши и хендлы спрятаны в СБ.

Извините, я не понял. Здесь слово Разработчики - это те, кто создал МТ или я грешный прикладник? И СБ - это..?

 
Vladimir Karputov:

1. В таком случае вероятно лучше неиспользуемый хендл убивать и создавать новый (главное - контроль, чтобы не нашлёпать в OnTick() миллион хендлов :) ).

2. Создаёте копию встроенного индикатора, но с другим названием (например добавить в название "depth of history") и вводите новый параметр: InpDepthHistory. То есть нужно написать новые пользовательские индикаторы. 

1. Да. Пока у меня получился 3-мерный массив одних хэндлов. Но теперь, видимо, я всё это перестрою.

2. Да. Благо, есть практически все коды техн. индикаторов. А уж свои и подавно.

Спасибо.

 
User_mt5:

Извините, я не понял. Здесь слово Разработчики - это те, кто создал МТ или я грешный прикладник? И СБ - это..?

MetaQuotes при желании может создать такую Стандартную Библиотеку. Большой вопрос, а нужна ли она?

 
Alexey Viktorov:

Как я понял, вы хотите как в mql4 получать только 1 значение с помощью iCustom() но не учитываете что в mql4 тоже пересчитывался индикатор на всю глубину истории при первом обращении. Точно так-же пересчитывается и при смене хотя-бы одного параметра.

Отсюда вывод: Не надо заморачиваться. Если "устаревший" индикатор больше не нужен, его можно просто удалить и получить хендл индикатора с другими параметрами.

Хотеть-то я, может быть, и хочу. Но теперь уже и не хочу. Вы правы. Если устаревший индикатор не нужен, то давить их, гадов, как тараканов:)

Хорошее решение - ограничить глубину технических клонов. Это сэкономит ресурсы и время. Так что, теперь так и сделаю.

Спасибо.

 
fxsaber:

MetaQuotes при желании может создать такую Стандартную Библиотеку. Большой вопрос, а нужна ли она?

Это для грядущих поколений. Я посмотрел некоторые примеры из библиотеки. Тысячи строк некомментированного кода. Не знаю кто как, а я так не умею. Так что, спасибо за идею, но просто в моём случае это неприемлемо.
 
User_mt5:
Это для грядущих поколений. Я посмотрел некоторые примеры из библиотеки. Тысячи строк некомментированного кода. Не знаю кто как, а я так не умею. Так что, спасибо за идею, но просто в моём случае это неприемлемо.

Вот это работает уже сейчас в MT5

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

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2018.01.09 10:20

Для адептов MQL4 есть древний способ работы с ТФ в MQL5 в привычном стиле

Возможно, кому-то пригодится MQL4-подход и в работе с историей тиков

if (Tick[0].bid > Tick[100].bid) // сравниваем текущий и исторический тики
  Print("Hello World!");

if (High[0] > Close[100]) // https://www.mql5.com/ru/forum/42122/page24#comment_2904023
  Print("Hello World!");

Технически ничто не мешает подобное же ОДИН РАЗ сделать и с индикаторами (без потерь в эффективности) и поместить решение в СБ.

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