Динамические периоды для индикаторов

 
Очень много индикаторов используют для рассчета своих значений так называемый "период". Обычно это количество баров которое учавствует в расчете очередного значения. Возьмем например RSI. Если очень грубо - этот индикатор показывает отношение длинны "пробега" цены вверх по отношению к аналогичной длине пробега цены вниз. При очень маленьких периодах получается жуткая болтанка, при очень длинных - нечто слабопульсирующее около нуля. Однако рынок не всегда равномерен. Точнее всегда не равномерен. После выхода новостей смены торговых сессий да еще на коротких таймах, чтобы поймать все движения период нужно выбирать не очень большой. С другой стороны во время длинного "затяжного" тренда (или флэта) этот период вполне разумно увеличить чтобы отслеживать тенденцию самого тренда, а не колебаний внутри его канала.
Кто нибудь пробовал строить индикаторы которые сами адаптируют длину периода под меняющиеся условия? Вот, например "здесь", когда какойто другой индикатор (или какието вычисления внутри текущего индикатора) в таком то диапазоне мы пропорционально сокращаем длинну перода для этого бара, а при таких то условиях (уже на другом баре) - наоборот увеличиваем.
Если да - то какие получались результаты? да и вообще - есть ли здравое зерно в этой идее (автоподстройки длинны периода)?
 
Если бы кто нибудь знал - как отличить затяжной флет, от длинного тренда, или вообще просто как определить, что закончился флет и начался тренд. и соответственным образом подстроить индикаторы или адаптировать свою ТС.
Это бы и был грааль.
 
Пробовал . Очень интересные варианты получаются. Например гибрид МА и стохастика . Т.е угол МА влияет на периоды стохастика . Но, представляете сколько вариантов. Результаты противоречивые и к чему то дельному я не пришёл.
 
ForexTools >>:
да и вообще - есть ли здравое зерно в этой идее (автоподстройки длинны периода)?

Зерно-то есть, но подходящая мельница нужна.

Идея не нова, поройся в кодебейзе и на форуме. Заодно и в индикаторах поставляемых с MT5.

// Вумное название "адаптивные цифровые фильтры" в принципе означает по сути то же самое. Точнее немного обобщает идею.

 
ForexTools >>:
Очень много индикаторов используют для рассчета своих значений так называемый "период". Обычно это количество баров которое учавствует в расчете очередного значения. Возьмем например RSI. Если очень грубо - этот индикатор показывает отношение длинны "пробега" цены вверх по отношению к аналогичной длине пробега цены вниз. При очень маленьких периодах получается жуткая болтанка, при очень длинных - нечто слабопульсирующее около нуля. Однако рынок не всегда равномерен. Точнее всегда не равномерен. После выхода новостей смены торговых сессий да еще на коротких таймах, чтобы поймать все движения период нужно выбирать не очень большой. С другой стороны во время длинного "затяжного" тренда (или флэта) этот период вполне разумно увеличить чтобы отслеживать тенденцию самого тренда, а не колебаний внутри его канала.
Кто нибудь пробовал строить индикаторы которые сами адаптируют длину периода под меняющиеся условия? Вот, например "здесь", когда какойто другой индикатор (или какието вычисления внутри текущего индикатора) в таком то диапазоне мы пропорционально сокращаем длинну перода для этого бара, а при таких то условиях (уже на другом баре) - наоборот увеличиваем.
Если да - то какие получались результаты? да и вообще - есть ли здравое зерно в этой идее (автоподстройки длинны периода)?

Пробовал такое делать через корреляцию с эталонными гармониками,

но получается иногда периоды резко прыгают а затем возвращаются на исходную тем самым портят всю картину,

и к тому же такой метод очень долгий если в реалтайме его можно ещё применять то в тестере да при оптимизации это полное Ж,

ну а вообще тема перспективная.

 
ForexTools >>:
Очень много индикаторов используют для рассчета своих значений так называемый "период". Обычно это количество баров которое учавствует в расчете очередного значения. Возьмем например RSI. Если очень грубо - этот индикатор показывает отношение длинны "пробега" цены вверх по отношению к аналогичной длине пробега цены вниз. При очень маленьких периодах получается жуткая болтанка, при очень длинных - нечто слабопульсирующее около нуля. Однако рынок не всегда равномерен. Точнее всегда не равномерен. После выхода новостей смены торговых сессий да еще на коротких таймах, чтобы поймать все движения период нужно выбирать не очень большой. С другой стороны во время длинного "затяжного" тренда (или флэта) этот период вполне разумно увеличить чтобы отслеживать тенденцию самого тренда, а не колебаний внутри его канала.
Кто нибудь пробовал строить индикаторы которые сами адаптируют длину периода под меняющиеся условия? Вот, например "здесь", когда какойто другой индикатор (или какието вычисления внутри текущего индикатора) в таком то диапазоне мы пропорционально сокращаем длинну перода для этого бара, а при таких то условиях (уже на другом баре) - наоборот увеличиваем.
Если да - то какие получались результаты? да и вообще - есть ли здравое зерно в этой идее (автоподстройки длинны периода)?

Да, пробовал. Много раз и по-разному. Результат, безусловно, улучшается (для стандартных применений), но все же это - как уже неодн. писал - примерка фрачной пары на осьминога, т.к. рассматривается ВР, а не ряд импульсов. Вот, напр,, очень простой способ (кроме тех, что уже выкладывал в базе): если размах бара меньше заданного порога, то период индикатора увеличивается на 1. Т.е. длина выборки будет равна длине отрезка, в ктр. найдутся значащие (с размахом больше порога) бары. Условия, разумеется, можно придумать (логичные, конечно) самые разнообразные.

Вот так, например, будет выглядеть RSI по этому элементарнейшему отбору в выборку: отбираются бары с размахом больше 2 пп. (увеличивается период, пока не наберется необходимый мин.; период ограничен сверху задаваемым параметром - здесь от 14 до 33 (синий - обычный RSI, красный - с порогом). Окно снизу показывает как изменялся период.

на 0-е окно не смотрите - не стер просто индюк. Он тут не при чем. // ))) хотя там тоже используется адаптация по периоду через коэфф. EMA

===
Да. Но - повторюсь - это, хоть и лучше, чем ничЁ, но ...)))
Кстати, если кто не знал, то, например, есть т.н. DMI (Dynamic Momentum Index), где тоже меняется период RSI, но в зависимости уже от СКО. Можете посмотреть описание у Вильямса и Чанда.
===
А описанный мной простенький подход можно применить к чему угодно, где есть длина выборки. Если нужно что-то посложнее, то есть специальный управляющий индикатор - MsterSlave (см. в базе).

===========
А вот, где верхняя граница длины периода практически не ограничена. Т.е. период RSI будет увеличиваться до тех пор, пока не наберется 14 баров с размахом больше 2 пп. Как видно, для этого достаточно, как правило, 100 баров на данном инструменте и ТФ - др. словами, период не выходит за 100 баров.
Файлы:
_rsi_tr.mq4  3 kb
 
Svinozavr >>:

но все же это - как уже неодн. писал - примерка фрачной пары на осьминога, т.к....

да вот и у меня такое же чувство. вместо одной неопределенности (какой выбрать период) вводим другую (как выбирать механизм смены длины периода) и думаем что она устранит первую.
но от замены одной неопределенности на другую, судя по всему, качественного результата так и не получишь. блин, почти философия получилась, мать всех наук.
Спасибо всем откликнувшимся - попробую переварить\подумать\придумать чтото.
 
написал про философию в шутку, а потом задумался: а возможно на цену и ее движения тоже распостраняются какие то общие законы? например из той же физики: принцип неопределенности Гейзенберга. Может действительно нельзя одновременно измерить (и в нашем случае - спрогнозировать) "два параметра из разных групп". т.е. мы может знать точное значение времени и цены но не можем знать направления ее движения, импульса (по одной свечке МА не построиш). и наоборот, зная направление, импульс мы не сможем узнать когда и где находится цена (МА никогда не совпадает с текущей ценой).
 

адаптивный по периоду индикатор - это уже перенос части системы и торговый идеи в его код. Т.е. тайминг зависит не от индикатора, а от торговой идеи, а индикатор всего лишь преобразование цены.
ТА пытается идентифицировать объективно протекающие процессы на рынке и дать возможность их использовать пока они еще не закончились. Т.е. первоначален процесс, а события на графике это возможность своевременно выявить в какой фазе развития он находится. С этой т.з. для адаптивности нужно вычислять не величину периода, а новые моменты отсчета. Т.е. есть возникло определенное событие ТА (пробой, импульс и т.д. и т.п.) - есть новый момент времени от которого идет отсчет. Фактически это новая т-ка отсчета. Индикатор считается на адаптивном окне с периодом равным смещению текущего момента времени от т-ки отсчета. Если идентифицирована новая т-ка отсчета, то и период исчисляется от нее. Хотя м.б. и полезен вариант когда при возникновении нового события ТА период индикатора становится некоторой дефолтовой величиной, что фактически означает захват цен формирования самого этого события. Или для вычисления периода индикатора использовать время между соседними событиями ТА

 

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

//=====================================================================================================================================
extern int PIB= 33;
extern int PIS= 37;
extern double PMB= 3.98;
extern double PMS= 3.98;
//====================================================================================================================================

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init() {

        PPB=NormalizeDouble(PIB*Point,Digits);
        PPS=NormalizeDouble(PIS*Point,Digits);
        PMB=NormalizeDouble(PMB*Point,Digits);
        PMS=NormalizeDouble(PMS*Point,Digits);
           }
expert start function :

     PR=NormalizeDouble((High[1]-Low[1])+(High[2]-Low[2])+(High[3]-Low[3])+(High[4]-Low[4])+(High[5]-Low[5])+(High[6]-Low[6])+(High[7]-Low[7]),Digits);
     PRB=NormalizeDouble(PMB/PR,Digits); 
     PRS=NormalizeDouble(PMS/PR,Digits); 
      
      BTH[0]=High[0]-PR/17-PRB/2;
  if ((MathAbs(BTH[0]-BTH[1])<=PPB))
      BTH[0]=BTH[1];
      
      BTC[0]=Close[0]-PR/10;
  if ((MathAbs(BTC[0]-BTC[1])<=PPB))
      BTC[0]=BTC[1];
      
      BTC[0]=0.4*BTC[0]+0.6*BTC[1];
      
      BTL[0]=Low[0]-PR/17+PRB/2;
  if ((MathAbs(BTL[0]-BTL[1])<=PPB))
      BTL[0]=BTL[1];
  
      STH[0]=High[0]+PR/17-PRS/2;
  if ((MathAbs(STH[0]-STH[1])<=PPS))
      STH[0]=STH[1];
      
      STC[0]=Close[0]+PR/10;
  if ((MathAbs(STC[0]-STC[1])<=PPS))
      STC[0]=STC[1];
      
      STC[0]=0.4*STC[0]+0.6*STC[1];
      
      STL[0]=Low[0]+PR/17+PRS/2;
  if ((MathAbs(STL[0]-STL[1])<=PPS))
      STL[0]=STL[1];
Как видно, параметры каналов адаптивно корректируются в зависимости от усредненных динамических показателей нескольких последних баров.
В результате получается такая картинка:


ВТН - синий, ВТС - желтый, BTL - розовый, STH - голубой, STC - красный, STL - фиолетовый;
Конечно, это тоже упрощенный подход, для боле точной адаптации под меняющиеся фазы рынка нужно более сложное решение, но тем не менее, и такой вариант существенно улучшает характеристики индикатора.
 
Моя последняя разработка )))

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