Обсуждение статьи "Рецепты MQL5 - Создаем кольцевой буфер для быстрого расчета индикаторов в скользящем окне" - страница 2

 
Vasiliy Sokolov:

Я прекрасно понял Вашу мысль и в первый раз.

Что такое "сигнатура изменений значений"? Это некоторая величина, изменяемая в динамике. Следовательно это индикатор. Развивать кольцевой буфер для этого не надо, а достаточно просто создать на основе нескольких этих кольцевых индикаторов алгоритм расчета того самого "характера изменения" о котором Вы говорите.

Сигнатура это не величина. Сигнатура - это характер изменения величины.

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

Именно этот механизм, - сложнейшая вещь. Вы поймете это, если попытаетесь его создать.

Если просто выводить кривую на график, то наш мозг сам видит сигнатуру изменения значения. Он приспособлен для этого.

Но попробуйте сделать так, чтобы это видела программа.

 

Добавлю:

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

Советники не могут извлекать смысловой концентрат из истории изменений значений записанных в массивах данных (кольцевых буферах например).

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

Наличие механизма синтеза сигнатур позволит вывести торговые советники на новый уровень. Пользователь сможет задавать характеры изменений рыночных параметров внутри торговых условий своей программы.

Уровень и качество такой программы будет на голову выше того, что мы делаем сейчас.

 

Интересная статья.

Когда рассчитываю индикатор в МТ4 по последним к примеру 50 барам, то в тестере такой индикатор работает значительно быстрее, чем при расчете по всем барам.

У меня сложилось впечатление, что в МТ5 такой подход (расчет индикатора по последним n-барам) не сильно быстрее. Кто знает по этой тематике так ли это или я, что-то не правильно делаю?

 
forexman77:

Интересная статья.

Когда рассчитываю индикатор в МТ4 по последним к примеру 50 барам, то в тестере такой индикатор работает значительно быстрее, чем при расчете по всем барам.

У меня сложилось впечатление, что в МТ5 такой подход (расчет индикатора по последним n-барам) не сильно быстрее. Кто знает по этой тематике так ли это или я, что-то не правильно делаю?

Не совсем понял про расчет. Любой индикатор требует n периодов для своего расчета. Если n=50, то вы рассчитывает его на последних 50 барах. А что такое расчет по всем барам? 
 
Vasiliy Sokolov:
Не совсем понял про расчет. Любой индикатор требует n периодов для своего расчета. Если n=50, то вы рассчитывает его на последних 50 барах. А что такое расчет по всем барам? 


Расчет по последним n-барам и есть расчет по 50 барам, а расчет по всем барам это расчет по всей доступной истории в терминале(Bars-Period_). В МТ4 использую такую конструкцию:

P=Period_+10;
  
limit=Bars-counted_bars-1;
if (limit > P)limit=P;//то есть, если лимит больше P, то рассчитываем начиная с бара под номером P
for(int i=limit;i>=0;i--)

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

В МТ5 у меня скорость оптимизации с таким подходом не сильно снижается.

 
forexman77:

Интересная статья.

Когда рассчитываю индикатор в МТ4 по последним к примеру 50 барам, то в тестере такой индикатор работает значительно быстрее, чем при расчете по всем барам.

У меня сложилось впечатление, что в МТ5 такой подход (расчет индикатора по последним n-барам) не сильно быстрее. Кто знает по этой тематике так ли это или я, что-то не правильно делаю?

Отличается только скорость первоначального расчета на 1000 баров, которые готовит тестер. Потом любой экономно написанный индикатор будет работать одинаково быстро, и в МТ4 и в МТ5.

 
Andrey Khatimlianskii:

Отличается только скорость первоначального расчета на 1000 баров, которые готовит тестер. Потом любой экономно написанный индикатор будет работать одинаково быстро, и в МТ4 и в МТ5.

Кстати о скорости, MQL не пальцем сделан, и расчеты в нем выполняются очень быстро. Настолько быстро, что не так просто обогнать стандартное решение. Возьмем пример ArrayMaximum/ArayMinimum. Обе функции находят максимум и минимум перебирая переданный массив полностью. Сократить данный расчет невозможно, потому что элементы переданного массива всегда не известны. В статье представлен оптиизированный вариант поиска экстремумов. Благодаря тому, что значения в нем поступают последовательно, можно сократить  перебор, написав оптимизированный алгоритм. Однако преимущества такой оптиизации будут проявлятся только на достаточно больших сериях. Если серия не большая, 5-10-20 элементов, то оба алгоритма работают вровень. Это я к тому, что по дефолту разработчиками предоставлены очень быстрые решения, улучшать которые как правило уже не получиться, поэтому начинающим программистам я настоятельно не рекомендую использовать выверты с конструкциями программирования, которые как они думают способны ускорить код. 
 
Vasiliy Sokolov:
 использовать выверты с конструкциями программирования, которые как они думают способны ускорить код. 

В МТ4  с помощью этого выверта в разы оптимизация быстрее считается и это мне не кажется, это видно. Вполне возможно, что в МТ5 делаю что-то не правильно.

Может вообще дело не в индикаторе, а в советнике.

 
forexman77:

В МТ4  с помощью этого выверта в разы оптимизация быстрее считается и это мне не кажется, это видно. Вполне возможно, что в МТ5 делаю что-то не правильно.

Может вообще дело не в индикаторе, а в советнике.

Василий обращался к начинающим. 90% пользователей тестера и оптимизатора МТ это действительно не пригодится.
 
forexman77:


Расчет по последним n-барам и есть расчет по 50 барам, а расчет по всем барам это расчет по всей доступной истории в терминале(Bars-Period_). В МТ4 использую такую конструкцию:

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

В МТ5 у меня скорость оптимизации с таким подходом не сильно снижается.

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

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