Зерно-то есть, но подходящая мельница нужна.
Идея не нова, поройся в кодебейзе и на форуме. Заодно и в индикаторах поставляемых с MT5.
// Вумное название "адаптивные цифровые фильтры" в принципе означает по сути то же самое. Точнее немного обобщает идею.
Очень много индикаторов используют для рассчета своих значений так называемый "период". Обычно это количество баров которое учавствует в расчете очередного значения. Возьмем например RSI. Если очень грубо - этот индикатор показывает отношение длинны "пробега" цены вверх по отношению к аналогичной длине пробега цены вниз. При очень маленьких периодах получается жуткая болтанка, при очень длинных - нечто слабопульсирующее около нуля. Однако рынок не всегда равномерен. Точнее всегда не равномерен. После выхода новостей смены торговых сессий да еще на коротких таймах, чтобы поймать все движения период нужно выбирать не очень большой. С другой стороны во время длинного "затяжного" тренда (или флэта) этот период вполне разумно увеличить чтобы отслеживать тенденцию самого тренда, а не колебаний внутри его канала.
Кто нибудь пробовал строить индикаторы которые сами адаптируют длину периода под меняющиеся условия? Вот, например "здесь", когда какойто другой индикатор (или какието вычисления внутри текущего индикатора) в таком то диапазоне мы пропорционально сокращаем длинну перода для этого бара, а при таких то условиях (уже на другом баре) - наоборот увеличиваем.
Если да - то какие получались результаты? да и вообще - есть ли здравое зерно в этой идее (автоподстройки длинны периода)?
Пробовал такое делать через корреляцию с эталонными гармониками,
но получается иногда периоды резко прыгают а затем возвращаются на исходную тем самым портят всю картину,
и к тому же такой метод очень долгий если в реалтайме его можно ещё применять то в тестере да при оптимизации это полное Ж,
ну а вообще тема перспективная.
Очень много индикаторов используют для рассчета своих значений так называемый "период". Обычно это количество баров которое учавствует в расчете очередного значения. Возьмем например RSI. Если очень грубо - этот индикатор показывает отношение длинны "пробега" цены вверх по отношению к аналогичной длине пробега цены вниз. При очень маленьких периодах получается жуткая болтанка, при очень длинных - нечто слабопульсирующее около нуля. Однако рынок не всегда равномерен. Точнее всегда не равномерен. После выхода новостей смены торговых сессий да еще на коротких таймах, чтобы поймать все движения период нужно выбирать не очень большой. С другой стороны во время длинного "затяжного" тренда (или флэта) этот период вполне разумно увеличить чтобы отслеживать тенденцию самого тренда, а не колебаний внутри его канала.
Кто нибудь пробовал строить индикаторы которые сами адаптируют длину периода под меняющиеся условия? Вот, например "здесь", когда какойто другой индикатор (или какието вычисления внутри текущего индикатора) в таком то диапазоне мы пропорционально сокращаем длинну перода для этого бара, а при таких то условиях (уже на другом баре) - наоборот увеличиваем.
Если да - то какие получались результаты? да и вообще - есть ли здравое зерно в этой идее (автоподстройки длинны периода)?
Да, пробовал. Много раз и по-разному. Результат, безусловно, улучшается (для стандартных применений), но все же это - как уже неодн. писал - примерка фрачной пары на осьминога, т.к. рассматривается ВР, а не ряд импульсов. Вот, напр,, очень простой способ (кроме тех, что уже выкладывал в базе): если размах бара меньше заданного порога, то период индикатора увеличивается на 1. Т.е. длина выборки будет равна длине отрезка, в ктр. найдутся значащие (с размахом больше порога) бары. Условия, разумеется, можно придумать (логичные, конечно) самые разнообразные.
Вот так, например, будет выглядеть RSI по этому элементарнейшему отбору в выборку: отбираются бары с размахом больше 2 пп. (увеличивается период, пока не наберется необходимый мин.; период ограничен сверху задаваемым параметром - здесь от 14 до 33 (синий - обычный RSI, красный - с порогом). Окно снизу показывает как изменялся период.
на 0-е окно не смотрите - не стер просто индюк. Он тут не при чем. // ))) хотя там тоже используется адаптация по периоду через коэфф. EMA
Да. Но - повторюсь - это, хоть и лучше, чем ничЁ, но ...)))
Кстати, если кто не знал, то, например, есть т.н. DMI (Dynamic Momentum Index), где тоже меняется период RSI, но в зависимости уже от СКО. Можете посмотреть описание у Вильямса и Чанда.
===
А описанный мной простенький подход можно применить к чему угодно, где есть длина выборки. Если нужно что-то посложнее, то есть специальный управляющий индикатор - MsterSlave (см. в базе).
===========
А вот, где верхняя граница длины периода практически не ограничена. Т.е. период RSI будет увеличиваться до тех пор, пока не наберется 14 баров с размахом больше 2 пп. Как видно, для этого достаточно, как правило, 100 баров на данном инструменте и ТФ - др. словами, период не выходит за 100 баров.
но от замены одной неопределенности на другую, судя по всему, качественного результата так и не получишь. блин, почти философия получилась, мать всех наук.
Спасибо всем откликнувшимся - попробую переварить\подумать\придумать чтото.
адаптивный по периоду индикатор - это уже перенос части системы и торговый идеи в его код. Т.е. тайминг зависит не от индикатора, а от торговой идеи, а индикатор всего лишь преобразование цены.
ТА пытается идентифицировать объективно протекающие процессы на рынке и дать возможность их использовать пока они еще не закончились. Т.е. первоначален процесс, а события на графике это возможность своевременно выявить в какой фазе развития он находится. С этой т.з. для адаптивности нужно вычислять не величину периода, а новые моменты отсчета. Т.е. есть возникло определенное событие ТА (пробой, импульс и т.д. и т.п.) - есть новый момент времени от которого идет отсчет. Фактически это новая т-ка отсчета. Индикатор считается на адаптивном окне с периодом равным смещению текущего момента времени от т-ки отсчета. Если идентифицирована новая т-ка отсчета, то и период исчисляется от нее. Хотя м.б. и полезен вариант когда при возникновении нового события ТА период индикатора становится некоторой дефолтовой величиной, что фактически означает захват цен формирования самого этого события. Или для вычисления периода индикатора использовать время между соседними событиями ТА
Решила встрять в разговор ученых мужей, и внести свой кулинарный рецепт. Практически все индикаторы последние пару лет делаю с адаптивно изменяющимися параметрами. Примитивные решения на рынке не работают, давно пришла к такому выводу, и давно вынашиваю идею сделать полностью адаптивную систему, только руки пока не доходят, делаю отдельные фрагменты адаптации в индикаторах. В качестве примера могу привести фрагмент последнего индикатора. Вообще индикатор состоит из нескольких функциональных блоков, каждый из которых формирует свои целевые сигналы, всего 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 - фиолетовый;
Конечно, это тоже упрощенный подход, для боле точной адаптации под меняющиеся фазы рынка нужно более сложное решение, но тем не менее, и такой вариант существенно улучшает характеристики индикатора.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Кто нибудь пробовал строить индикаторы которые сами адаптируют длину периода под меняющиеся условия? Вот, например "здесь", когда какойто другой индикатор (или какието вычисления внутри текущего индикатора) в таком то диапазоне мы пропорционально сокращаем длинну перода для этого бара, а при таких то условиях (уже на другом баре) - наоборот увеличиваем.
Если да - то какие получались результаты? да и вообще - есть ли здравое зерно в этой идее (автоподстройки длинны периода)?