Форум трейдеров » Торговые стратегии » Адаптивные фильтры. Применение в торговле
+ Подписаться
Страница 27 из 55 ПерваяПервая ... 17252627282937 ... ПоследняяПоследняя
  1. 1,025
    Комментарии
    2
    Темы
    1971
    Репутация Pro
     
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от avtomat Посмотреть сообщение
    Не надо сохранять среднюю ошибку -- нет такой нужды. Да и это противоречило бы поставленной задаче минимизации.
    А вот смена знака средней ошибки -- это возможно использать.
    Как утверждает карандашное решение, для минимизации дисперсии ошибки
    надо сохранять среднюю ошибку.

    Так что - не противоречит.
    Или - ищите ошибку в выкладках поста №240. Опечатку с отсутствием квадрата Неофит уже заметил, это - именно опечатка, итоговая формула верна.
  2. 1,025
    Комментарии
    2
    Темы
    1971
    Репутация Pro
     
    Мастер форумных наук

    4 Медалей
    Написал я текст для Омеги этого минимизатора дисперсии.
    Программировал, естественно, точное решение.

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

    Так, например, если использовать параметры Автомата аМин=0,1 и аМах=0,4, то индикатор с точным решением идет практически по графику ЕМА с пармтером 0,4, т.е. практически по графику цены.
    А вариант с градиентным спуском медленнее разгоняется и медленнее тормозится, так как требется затратить ещё некотрое количество шагов на изменение параметра фильтра.


    Тут есть почва для доследования.
    Дело в том, что при минимизации дисперсии градиентным спуском есть ещё одно неявно наложенное на поведение фильтра требование: ограничение скорости изменения параметра фильтра, определяемое размером шага, параметром da.

    Возможно, что это отличие существенно (тогда этому требованию есть место на содержательном уровне, оно не является недостатком градиентного спуска).
    Как там у программистов: "Это баг? Что вы, это фича!":D
    ===================
    Ниже - исходник функции, вычисляющей выходное значение фильтра.
    "пишется - как слышится"
    А. ведем вычисление текущей средней ошибки.
    Б. по приходе очередного входного отсчета вычисляем идеальный (сохраняющий среднюю ошибку) выходной отсчет и соответствующий ему идеальный параметр фильтра.
    В. Проверяем попадание идеального значения параметра в ограничения. При удаче - всё хорошо, при неудаче - насильственно сажаем параметр фильтра на нарушенное ограничение вычисляем выходной отсчет по правилам ЕМА.
    Все переменные имеют "говорящие" имена, комментировать в исходнике после столь бурного обсуждения алгоритма, собственно, уже нечего.==============
    Код:
    Inputs: price(Numericseries),alfaMin(Numeric),alfaMax(Numeric),N(Numeric), useSMA(truefalse);
    	Variables:  Err(0),meanErr(0),outId(0),alfaId(0),w(0);
    
    If CurrentBar <= N Then Begin 
    	w=$A1(price,alfaMax,0);
    	minVarErr=w;
    	Err=price-w;
    end
    Else Begin
    	if useSMA then meanErr=Average(Err[1],N-1) else meanErr=XAverage(Err[1],N-1);
    	outId=price-meanErr;
    	alfaId=(outId-minVarErr[1])/(price-minVarErr[1]);
    
    	if alfaId > alfaMax then alfaId=alfaMax;
    	if alfaId < alfaMin then alfaId=alfaMin;
    
    	w=alfaId*price + (1-alfaId)*minVarErr[1];
    	minVarErr=w;
    	Err=price-w;
    	
    end
    А ниже - исходник индикатора, рисующего несколько линий.
    Код:
    Inputs: price(close),alfaMin(0),alfaMax(0.1),N(22), useSMA(true);
    
    Value1=minVarErr(price,alfaMin,alfaMax,N, useSMA);
    Plot1(Value1, "minVarErr MA");
    Plot2($A1(price,alfaMax,0),"Fast EMA");
    if alfaMin>0 then Plot3($A1(price,alfaMin,0),"Slow EMA");
    
    Value2=price-Value1;
    if useSMA then Plot4(Value1+Average(Value2,N)) else Plot4(Value1+XAverage(Value2,N));
    Первая линия - выходной сигнал нашего адаптивного фильтра.
    Вторая - слиния ЕМА с параметром alfaMax (это и из исходника видно)
    Третья - линия ЕМА с параметром alfaMin, и рисуется она только в случае ненулевого alfaMin.

    Четвертая линия - это то, о чем спрашивал автомат в посте №258. Это линия, представляющая собой сумму выходного сигнала адаптивного фильтра и средней за N баров ошибки слежения. Смена знака средней ошибки - пересечение этих линий.

    На рисунке первая линия - толстая красная, вторая - тонкая красная, третья не рисуется (alfaMin=0), четвертая - толстая синяя.
    ============
    Как мне кажется, поведение вариантов реализации минимизирующего дисперсию ошибки слежения фильтра с точным решением и с градиентным спуском можно сделать очень похожим, но параметры при этом будут немного разные.
  3. 1,025
    Комментарии
    2
    Темы
    1971
    Репутация Pro
     
    Мастер форумных наук

    4 Медалей
    Кстати, есть у меня адаптивный фильтр с именем D2, брат фильтра D1.
    Он использует для управления параметрами фильтра такую меру степени направленности движения - отношение средней ошибки слежения к СКО ошибки слежения.

    Было бы интересно сравнить поведение его и этого минимизатора дисперсии ошибки.
  4. 8,531
    Комментарии
    46
    Темы
    15162
    Репутация Pro
    Аватар для avtomat  
    Старожил

    7 Медалей
    Здесь вы считаете как-то иначе, поэтому и различия.
    "что-то не так"... С "точным решением" явно "не то..."
  5. 8,531
    Комментарии
    46
    Темы
    15162
    Репутация Pro
    Аватар для avtomat  
    Старожил

    7 Медалей

    M(E)
  6. 8,531
    Комментарии
    46
    Темы
    15162
    Репутация Pro
    Аватар для avtomat  
    Старожил

    7 Медалей

    D(E)
  7. 8,531
    Комментарии
    46
    Темы
    15162
    Репутация Pro
    Аватар для avtomat  
    Старожил

    7 Медалей
    Другой подход, другой расчёт - другой результат.
  8. 1,025
    Комментарии
    2
    Темы
    1971
    Репутация Pro
     
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от avtomat Посмотреть сообщение
    Другой подход, другой расчёт - другой результат.
    Подход тот же: параметр фильтра находится минимизайией дисперсии ошибки при ограничениях на значение параметра фильтра.

    Реализация различная: у меня тупое аналитическое решение именно этой задачи, у вас - градиентный спуск (или что-то до крайности похожее).

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

    Если же это ограничение существенно, если именно его соблюдение обеспечивает какие-то достоинства, то надо его внести в требования, то есть поднять с уровня реализации на содержательный уровень.
    ========
    Вот это надо пропонимать.
    А насчет
    "что-то не так"... С "точным решением" явно "не то..."
    - так все выкладки приведены, можно и ошибку поискать.
    Там выкладок-то - одно дифференцирование дисперсии по последнему выходному отсчету, и больше ничего нет.
  9. 8,531
    Комментарии
    46
    Темы
    15162
    Репутация Pro
    Аватар для avtomat  
    Старожил

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

    Говоря "не то...", я имею ввиду другое... Со средним D(е), как решением dD(e)=0, согласен... Но тут ведь что получается -- назначая текущему отсчёту "среднюю D(е)" как задание, вы ограничиваете движение процесса величиной D(е), как сверху, так и снизу.
    Ведь фактическая ошибка есть функция входного сигнала, и поэтому она может изменить свою динамику, с фактической D(е) меньше расчётной средней D(е) ! А вы ей не позволяете уменьшиться, насильно удерживая её на уровне средней D(е).


    ps. Категорически не согласен про "костыль". Подавляющее большинство оптимизационных задач могут быть решены только численными методами. И аналитическое решение здесь редкое исключение из этого правила.
  10. 8,531
    Комментарии
    46
    Темы
    15162
    Репутация Pro
    Аватар для avtomat  
    Старожил

    7 Медалей
    Цитата Сообщение от BQQ Посмотреть сообщение
    Четвертая линия - это то, о чем спрашивал автомат в посте №258. Это линия, представляющая собой сумму выходного сигнала адаптивного фильтра и средней за N баров ошибки слежения. Смена знака средней ошибки - пересечение этих линий.
    А я вижу это несколько иначе.

    Анализ по М(e) -- переключения -- ловля разворотов вверх/вниз





    Для наглядности разложил на составляющие -- вот такое кольцо -- e ---> M(e) ---> D(e) ---> a =====> relay[M(E)]

    И всё это -- единое целое!

    =============================
    Здесь, кстати, очень хорошо видно, как скачет дисперсия -- это я говорю, касательно предыдущего поста.

Вверх
РегистрацияX

чтобы писать, читать, комментировать