Сергей Фролов
Сергей Фролов личный блог
21 июня 2017, 11:59

Работаем с площадью. Алгоритм на WelathLab

Работаем с площадью. Алгоритм на WelathLab
Работаем с площадью. Алгоритм на WelathLab


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

Первое, что пришло в голову – это использовать площади на графике. Изначально идея была такой:

  1. Строим кривую по хаям и по лоям
  2. С помощью интерполяции находим промежуточные значения нашей кривой для большей точности.
  3. Аппроксимировать получившуюся кривую.
  4. Взять интеграл от получившейся в третьем шаге функции.

По задумке получившееся значение должно было отражать глубину рынка, то есть насколько сильно ходит рынок от локального хая/лоя до хая/лоя внутри дня. Если же мы добавим сюда время (за сколько рынок сходил), то получим индикатор флэта (маленькое значение + большой временной промежуток).  По ходу построения индикатора возникали мысли о том, что всё это можно реализовать гораздо проще, и действительно – можно.
Работаем с площадью. Алгоритм на WelathLab

Так как мы ищем площадь области над или под графиком, то мы можем просто складывать разницы между текущим high/low и high/low за определенный период. Тогда получаем такую формулу:

 

 Работаем с площадью. Алгоритм на WelathLab

 

Чтобы лучше представлять картинку визуально и удобнее расписывать входы, я решил представить эту разницу свечками.  Свеча строится так:

Low = Low(period)

High = Low(now)

Close = Low(now)

Open = Low(period)

Аналогично для high. Вот что получилось:
Работаем с площадью. Алгоритм на WelathLab
Далее считаем площади под образующимся графиком и выводим их на отдельную панель. Если хай или лоу за период обновляются, то обнуляем счетчик. Красным обозначены площади под графиком, зеленым – над ним. 
Работаем с площадью. Алгоритм на WelathLab

 

Теперь подумаем как можно использовать получившиеся наблюдения.
  1. Определяем флэт
Тут все элементарно – маленькие площади можно интерпретировать как сужение волатильности.

Пример:

Работаем с площадью. Алгоритм на WelathLab
  2. Бэкграунд пробойной стратегии

Очень распространенная стратегия на обновление локального хая может быть дополнена этим индикатором как мерой волатильности. Учитывать движения до пробития важно! Так можно отфильтровать часть убыточных сделок. Возможно, стоит попробовать.
  3. Технические паттерны

Можно посмотреть разные паттерны типа пробоя тренда и прочих.
Работаем с площадью. Алгоритм на WelathLab

Работаем с площадью. Алгоритм на WelathLab

  4. Следуем за трендом

Как правило трендовое движение сопровождается коррекциями, которые внутри дня могут быть незначительными и их площадь соответственно не так велика.
Работаем с площадью. Алгоритм на WelathLab

Возможно, все уже используют эти методы, но я пока не замечал.

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

DataSeries size_area_dwn = new DataSeries(Bars,"");
                        DataSeries size_area_up = new DataSeries(Bars, "");
                        DataSeries dwn_space_ds = new DataSeries(Bars, "");
                        DataSeries up_space_ds = new DataSeries(Bars, "");
                        double dwn_space = 0;
                        double up_space = 0;
           

                        DataSeries highs_b = Highest.Series(High, 10);
                        DataSeries lows_b = Lowest.Series(Low, 10);
        
                        DataSeries highs = Highest.Series(High, 1);
                        DataSeries lows = Lowest.Series(Low, 1);
                        var synth_high = GetExternalSymbol("SPFB.RTS", true);
                        var synth_low = GetExternalSymbol("SPFB.Eu", true);
                        for (int bar = 0; bar < Bars.Count; bar++) // Пробегаемся по всем барам
                        {
                                synth_high.Close[bar] = highs_b[bar];
                                synth_high.Open[bar] = High[bar];
                                synth_high.High[bar] = highs_b[bar];
                                synth_high.Low[bar] = High[bar];
                                synth_low.Close[bar] = Low[bar];
                                synth_low.Open[bar] = lows_b[bar];
                                synth_low.High[bar] = Low[bar];
                                synth_low.Low[bar] = lows_b[bar];
                                
                                size_area_up[bar] = synth_high.Close[bar] - synth_high.Open[bar];
                                size_area_dwn[bar] = synth_low.Close[bar] - synth_low.Open[bar]; // тут отнимал от close open для красоты отображения

                                up_space = up_space + size_area_up[bar];
                                dwn_space = dwn_space + size_area_dwn[bar];

                                if (synth_high.Close[bar] == synth_high.Open[bar] || synth_low.Close[bar] == synth_low.Open[bar])
                                {
                                        up_space = 0;
                                        dwn_space = 0;
                                }
                                dwn_space_ds[bar] = dwn_space;
                                up_space_ds[bar] = up_space;
                        }
                        PlotSeries(PricePane, highs, Color.CornflowerBlue, LineStyle.Solid, 1);
                        PlotSeries(PricePane, lows, Color.CornflowerBlue, LineStyle.Solid, 1);
                    PlotSymbol(PricePane, synth_high, Color.RoyalBlue, Color.Blue);
                        PlotSymbol(PricePane, synth_low, Color.RoyalBlue, Color.Blue);
                        var RatioPane = CreatePane(40, false, true);
                        PlotSeries(RatioPane, dwn_space_ds, Color.Red, LineStyle.Histogram, 3);
                        PlotSeries(RatioPane, up_space_ds, Color.Green, LineStyle.Histogram, 3);
                        
24 Комментария
  • ICEDONE
    21 июня 2017, 12:32
    прикольно смотреть свежие идеи)
  • HunterSrike
    21 июня 2017, 12:54
    Все в кашу, то про площади, то про разницы в хаях. А нарисован вообще индикатор «ширина рынка». Велс какаха, изучайте Си.
      • Маркин Павел
        21 июня 2017, 20:56
        Сергей Фролов, Это же самый обычный и стандартный price channel )))
  • SergeyJu
    21 июня 2017, 13:34
    Я почти забыл велс и не все понимаю.
    1. Период 10 — почему именно 10?
    2. Почему у Вас 2 разных тикера подгружаются в хай и лоу, это о чем?
    3. Про обнуление счетчиков я вообще не понял, о чем это, почему при новом хае обнуляется, при лоу нет.
      • Макс
        21 июня 2017, 15:50
        Сергей Фролов, индюк рисует картинку очень похожую на картинку стандартного индюка в МТ4 ишимоку кинко.
        А почему бы для определения флета не использовать болинджер? почитай мой пост поймешь о чем я.
        Как можно вообще использовать площади которые ты ищешь, может просто выразить их в виде объема — точнее числовое значение найденой площади можно использовать в качестве объема?
        Получиться объем бычьего или медвежьего рынка...
        Можно даже посчитать их соотношение друг к другу...
        Мысль интересна, но ты мало написал про сам расчет… более подробно сможешь написать? Я имею ввиду весь расчет простыми словами — а то не могу понять как работает апроксимация в расчете.
          • Макс
            21 июня 2017, 21:26
            Сергей Фролов, давай я попробую объяснить проще (как я видимо понял расчет)
            предположим расчет на 10 свечей (баров или периодов)

            Расчет будет таким.
            берем хай первой свечи и отнимаем хай 2 свечи
            берем хай первой свечи и отнимаем хай 3 свечи
            и т.д 10 свечей
            затем полученные значения суммируем
            затем полученная сумма становиться показателем площади фигуры над графиком.
            И т.д
            Я правильно понял расчет, подход интересен… серьезно.
            Но у меня вопрос, почему в расчете участвует только хай, ведь для точности желательно использовать оба экстремума?


            • Макс
              21 июня 2017, 21:32
              Сергей Фролов, и еще один момент. Я тут увидел что границы площади лучше всего использовать не для пробоя, а для установки стопа, отрисовка площади очень хорошо подчеркивает тренд.
              Но тот самый момент, именно в расчете видимо заключается...
              на скрине я заметил что только в бычий тренд хорошо ставить стоп на границе площади, а вот медвежий тренд — граница очень близко находиться и стоп чаще будет выбивать.
              Мне кажется нужно использовать в расчете не только хай но и лоу...
              Как ты считаешь?
              • Макс
                21 июня 2017, 21:38
                Сергей Фролов, и еще один момент.
                Тот скрин где написано поджатие вверх, это по сути пробой низкой волатильности.
                Я именно поэтому сравнил индюк с болинджером, несмотря на расчет отрисовка графика почти идентична — такое же затухание волатильности и дальнейший пробой…
              • Макс
                22 июня 2017, 04:51
                Сергей Фролов, не не все понятно, на скрине разобрался. видно что расчет по лоу для нижней части графика работает…
  • Пафос Респектыч
    21 июня 2017, 14:03
    Прошлое можно описывать миллионом разных способов — а предсказательная сила тут откуда возьмётся-то? Продолжайте лучше со скользяшками возится — у них хоть смысл понятен они шумы фильтруют
  • Феликс Осколков
    21 июня 2017, 17:57
    По сути это ленты Боллинджера, только выглядит иначе.
      • Маркин Павел
        21 июня 2017, 21:06
        Сергей Фролов, по факту, если наложить Ваш price channel и болинджер на один график с одним и тем же периодом для обоих индикаторов, то различий мало.
        Хотя нет - price channel запаздывает с изменением ширины канала.




          • Макс
            21 июня 2017, 21:43
            Сергей Фролов, а есть этот индюк для МТ4, я прогнал бы его по истории — поискал бы закономерности...
            а то уже ниче нового давно не попадалось…
              • Макс
                22 июня 2017, 04:51
                Сергей Фролов, ок
          • Пафос Респектыч
            21 июня 2017, 22:49
            Сергей Фролов, чувак, ты маешься фигнёй. То, что ты придумал — полная ерунда, лучше выбрось и забудь, не трать время. Хочешь мотивации? Сгенери график случайного блуждания, и напусти на него свою «идею», не отличишь одно от другого
              • Пафос Респектыч
                21 июня 2017, 23:50
                Сергей Фролов, ты не понял, алго это норм ) алго это хорошо и правильно ) от таких своих «роботов» ты мог заработать и совершенно случайно, молод и зелен же ) иди учись лучше дата сайенсу раз такой умный

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

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