ProsvirinAlexey
ProsvirinAlexey личный блог
27 октября 2021, 11:48

Новая СуперСкользяшка (PMA). Такой еще не было.

Скользящая средняя, построенная на основе линии линейной регрессии.

 

      Хочу сделать презентацию своей идеи, которая переросла в индикатор скользящей средней, построенной на основе линии линейной регрессии (ЛЛР). Код индикатора в конце поста.

Вот как эта скользяшка(PMA) выглядит рядом с SMA и EMA. Периоды построения у всех одинаковые.
Новая СуперСкользяшка (PMA). Такой еще не было.

 

        Изначально была идея такая- взять ряд данных (цена Close) на каком-то участке, построить по этим данным линию линейной регрессии. ЛЛР строим следующим образом. По оси Y будут цены Close, по оси X будут порядковые номера баров.  Угловой коэффициент (A) и коэффициент смещения (В) простой линейной регрессии y=A*x+B можно найти с помощью метода наименьших квадратов.
Новая СуперСкользяшка (PMA). Такой еще не было.
      Далее была идея — посмотреть в конце участка, как цена Close отклоняется от ЛЛР. Для этого надо построить ЛЛР и найти координату Y(цена) по координате X(N бара).
Новая СуперСкользяшка (PMA). Такой еще не было.

       Построил одну точку-> надо построить остальные. Сказано, сделано. Для каждой цены Close(ось Y) рассчитываем коэффициенты простой линейной регрессии за определенный период и смотрим, какое значение ЛЛР (ось Y) будет на последнем баре(ось X) рассматриваемого участка. Все значения собираем в список. В результате получилась скользящая средняя, рассчитанная на основе линии линейной регрессии.

public static IList<double> PMA(this IList<double> Xseries, int Period) //Prosvirin Moving Average
        {
            var result = new List<double>();
            double SumOfPowX, SumOfX, n, SumOfXY, SumOfY, x, y, det, a, b;

            for (int bar = 0; bar < Period; bar++)
            {
                result.Add(Xseries[bar]);
            }

            for (int bar = Period; bar < Xseries.Count; bar++)
            {
                SumOfPowX = 0; SumOfX = 0; n = Period; SumOfXY = 0; SumOfY = 0;

                for (int i = 0; i < Period; i++)
                {
                     x = bar - i;
                     y = Xseries[bar - i];
                    SumOfPowX += x * x;
                    SumOfX += x;
                    SumOfXY += x * y;
                    SumOfY += y;
                }
                 det = SumOfPowX * n - Math.Pow(SumOfX, 2);
                 a = (SumOfXY * n - SumOfX * SumOfY) / det;
                 b = (SumOfY - a * SumOfX) / n;
                result.Add(bar * a + b);
            }
            return result;
        }

     На первый взгляд, перспективная скользяшка. Но только, если не сравнивать ее с JURIK MOVING AVERAGE (JMA). Вот как PMA выглядит на фоне JMA с тем же периодом.
Новая СуперСкользяшка (PMA). Такой еще не было.

     Может до меня такой индикатор уже кто-то делал, но я не встречал. Поэтому решил сделать пост и выложить код индикатора и библиотеку с индикатором для ТсЛаб в открытый доступ. Эту скользяшку я не скромно назвал PMA (Prosvirin Moving Average)

ССЫЛКА НА БИБЛИОТЕКУ ДЛЯ ТСЛАБ И КОД ИНДИКАТОРА








17 Комментариев
  • SergeyJu
    27 октября 2021, 12:01
    И линейную и взвешенную линейную регрессию давно применяли. Даже на смартике можно найти. Даже более сложные вещи, типа сглаживающего сплайна, в качестве механизма построения индикатора применяли. 
    См. 
    ru.wikipedia.org/wiki/Фильтр_Ходрика_—_Прескотта
    А авторский код джурика у Вас есть ? 
  • bohemian rhapsody
    27 октября 2021, 13:08
    если это на самом деле новый, не существовавший до сих пор индикатор, то круто, молодец!
    … но только, если не сравнивать ее с JMA ;)
  • kot6ra
    27 октября 2021, 13:12
    а можно его как-то в трейдинг вью закинуть?
  • T-800
    27 октября 2021, 13:38
    Круто, но… Надо приложить результаты тестов.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн