Блог им. HsergeyF

Работаем с площадью. Алгоритм на 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);
                        
★20
24 комментария
прикольно смотреть свежие идеи)
avatar
Все в кашу, то про площади, то про разницы в хаях. А нарисован вообще индикатор «ширина рынка». Велс какаха, изучайте Си.
avatar
HunterSrike, Писатель не ах, согласен. С шириной рынка вообще ничего общего не вижу. А с Вэлсом Вы зря так все же... 
Сергей Фролов, Это же самый обычный и стандартный price channel )))
Я почти забыл велс и не все понимаю.
1. Период 10 — почему именно 10?
2. Почему у Вас 2 разных тикера подгружаются в хай и лоу, это о чем?
3. Про обнуление счетчиков я вообще не понял, о чем это, почему при новом хае обнуляется, при лоу нет.
avatar
SergeyJu, 1.Период произвольный, поставил 10 для примера(вообще — оптимизируемый параметр).
2. Для того, чтобы рисовать свечки над графиком и под ним. Эти свечки можно сказать делят площадь под/над графиком на равные прямоугольники(у которых 1 ребро = 1(1 минута или любой другой таймфрейм), а другое ребро = разница между хаем за период(в данном случае 10) и хаем свечи). Суммируя площади прямоугольников получаем общую площадь. Разные тикеры берутся для того, чтобы создать два разных массива со свечками, в которых мы уже будем менять значения Open, High, Low, и Close на нужные нам. Возможно, можно создать свечи иначе, но мне было удобнее. 
3. Обнуляем счетчик, когда фигура замкнулась, то есть Хай свечи коснулся Хая с периодом 10, например. Это сделано для отображения на гистограмме. Лоу тоже обновляется, может быть Вы просто кусок кода не увидели:
 if (synth_high.Close[bar] == synth_high.Open[bar] || synth_low.Close[bar] == synth_low.Open[bar])
Сергей Фролов, индюк рисует картинку очень похожую на картинку стандартного индюка в МТ4 ишимоку кинко.
А почему бы для определения флета не использовать болинджер? почитай мой пост поймешь о чем я.
Как можно вообще использовать площади которые ты ищешь, может просто выразить их в виде объема — точнее числовое значение найденой площади можно использовать в качестве объема?
Получиться объем бычьего или медвежьего рынка...
Можно даже посчитать их соотношение друг к другу...
Мысль интересна, но ты мало написал про сам расчет… более подробно сможешь написать? Я имею ввиду весь расчет простыми словами — а то не могу понять как работает апроксимация в расчете.
avatar
Макс, 
 В индикаторе 1 параметр — количество свечей для рассчёта хай/лоу. Применение(кроме флета) гораздо более специфическое. Использовать площадь можно как душа пожелает, 4 варианта как минимум я накинул. Площадь и объем в вашем случае два названия одного явления, от перемены названия суть не изменится. 
Считать соотношение — разумная идея, возьму на заметку!
Аппроксимации в расчете нету. Формула расчета проста как камень:
площадь фигуры над графиком = сумма разниц между значением хай(за икс свечей) и хай(за 1 свечу). Фигура замыкается, когда Хай (за 1 свечу) = хай (за икс свечей), после чего площади начинает считаться с нуля.
Надеюсь так понятнее, наверное действительно плохо описал идею.
Сергей Фролов, давай я попробую объяснить проще (как я видимо понял расчет)
предположим расчет на 10 свечей (баров или периодов)

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


avatar
Сергей Фролов, и еще один момент. Я тут увидел что границы площади лучше всего использовать не для пробоя, а для установки стопа, отрисовка площади очень хорошо подчеркивает тренд.
Но тот самый момент, именно в расчете видимо заключается...
на скрине я заметил что только в бычий тренд хорошо ставить стоп на границе площади, а вот медвежий тренд — граница очень близко находиться и стоп чаще будет выбивать.
Мне кажется нужно использовать в расчете не только хай но и лоу...
Как ты считаешь?
avatar
Сергей Фролов, и еще один момент.
Тот скрин где написано поджатие вверх, это по сути пробой низкой волатильности.
Я именно поэтому сравнил индюк с болинджером, несмотря на расчет отрисовка графика почти идентична — такое же затухание волатильности и дальнейший пробой…
avatar
Макс, насчёт лоёв не понял, я их использую для расчета нижней площади. Как можно использовать для верхней не подскажете?
Сергей Фролов, не не все понятно, на скрине разобрался. видно что расчет по лоу для нижней части графика работает…
avatar
Прошлое можно описывать миллионом разных способов — а предсказательная сила тут откуда возьмётся-то? Продолжайте лучше со скользяшками возится — у них хоть смысл понятен они шумы фильтруют
По сути это ленты Боллинджера, только выглядит иначе.
Oskolkov, обидно быть непонятным, видимо всё-таки плохо описал. Бойлинджером тут и не пахнет: алгоритм рассчета, применение(кроме флета), отрисовка, фундаментальная идея, — всё разное.
Сергей Фролов, по факту, если наложить Ваш price channel и болинджер на один график с одним и тем же периодом для обоих индикаторов, то различий мало.
Хотя нет - price channel запаздывает с изменением ширины канала.




Маркин Павел, Спасибо за интересное сравнение) На самом деле, весь прикол не в линиях канала, а в гистограмме в нижней области графика, потому что работать будем именно с ней(усреднять, ставить критические уровни и тому подобное). В построении канала оригинального ничего не вижу, да и вообще на научную новизну не претендую).
Сергей Фролов, а есть этот индюк для МТ4, я прогнал бы его по истории — поискал бы закономерности...
а то уже ниче нового давно не попадалось…
avatar
Макс, Индюка нет, с МТ4 не работаю, если будет время разобраться, то обязательно напишу и скину)
Сергей Фролов, ок
avatar
Сергей Фролов, чувак, ты маешься фигнёй. То, что ты придумал — полная ерунда, лучше выбрось и забудь, не трать время. Хочешь мотивации? Сгенери график случайного блуждания, и напусти на него свою «идею», не отличишь одно от другого
Zweroboi, Спасибо за мнение. Пока молод и зелен, нахожусь в поиске своего. Заработок от роботов вполне устраивал, так что, думаю всё-таки продолжить ковыряться в алгопесочнице, несмотря на ваши советы) может одумаюсь, кто знает... 
Сергей Фролов, ты не понял, алго это норм ) алго это хорошо и правильно ) от таких своих «роботов» ты мог заработать и совершенно случайно, молод и зелен же ) иди учись лучше дата сайенсу раз такой умный

теги блога Сергей Фролов

....все тэги



UPDONW
Новый дизайн