Jump to content
Programmer

Циклический анализ рынков

Recommended Posts

transcendreamer
Вариантов ТС может быть масса. В данный момент наша задача будет отделить шум от рыночного сигнала, научиться разделять тренд и циклические движения рынка, переписать некоторые стандартные индикаторы так, чтобы они работали только с определенными частотами, и т.д.

 

Хорошо, значит конечная цель Вашего исследования - получить качественный сигнал для входа-выхода?

 

Кстати, про "шум", он не всегда вреден, его можно использовать чтобы улучшить точку входа - когда цена немного опускается/поднимается против основного тренда, это еще не коррекция, а просто микродвижения. Зная свой предопределенный стоп можно выставить лимитный ордер и спокойно "идти гулять", шум зацепит лимитник, войдем по лучшей цене.

Share this post


Link to post
Share on other sites
Programmer
Хорошо, значит конечная цель Вашего исследования - получить качественный сигнал для входа-выхода?

 

В идеале - да, но к этому нам надо прийти совместными усилиями.

 

Кстати, про "шум", он не всегда вреден, его можно использовать чтобы улучшить точку входа - когда цена немного опускается/поднимается против основного тренда, это еще не коррекция, а просто микродвижения. Зная свой предопределенный стоп можно выставить лимитный ордер и спокойно "идти гулять", шум зацепит лимитник, войдем по лучшей цене.

 

Отличная идея. Хороший метод использования шума для получения преимущества.

Share this post


Link to post
Share on other sites
Leon_2009

"Чем больше амплитуда какой-либо из составлящих сигнала, тем больше вклад этой волны в итоговый сигнал."

 

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

резонанс итоговый сигнал обеих волн "разрушает мосты" Радисты любят гармоники. ;) Есть также понятие "Джитер" это очень интересное явление. Форманты я бы сравнил с "утренней" и "вечерней звездой".

Мне попалась как-то интересна статистика: после квантования, кодирования и декодирования амплитуды аналогового сигнала в цифровой сигнал получаем сигнал с двумя значениями "0" и "1", которые можно организовать в байты, тетрады и т.д. и передавать по каналам связи. Самым необъяснимым фактом оказалось то, что по статистике ошибок на четных каналах больше чем на нечетных. Можно принять во внимание и этот факт, если уж речь зашла о спектре сигнала. В технике когда две дублирующие друг друга ЭВМ обрабатывающие один и тот же сигнал возможно из-за ошибок четности-нечетности появление явления клинча Это когда обе ЭВМ перестают обрабатывать общий сигнал. Это уже тема других исследований и методов коррекции ошибок (таких как введение избыточного кода (шума)- кода четности, циклического кода (вспомнил 9 дорожек на магнитной ленте), кода Хэмминга и др.

Edited by Leon_2009

Share this post


Link to post
Share on other sites
transcendreamer
"Чем больше амплитуда какой-либо из составлящих сигнала, тем больше вклад этой волны в итоговый сигнал."

 

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

резонанс итоговый сигнал обеих волн "разрушает мосты" Радисты любят гармоники. ;) Есть также понятие "Джитер" это очень интересное явление. Форманты я бы сравнил с "утренней" и "вечерней звездой".

Мне попалась как-то интересна статистика: после квантования, кодирования и декодирования амплитуды аналогового сигнала в цифровой сигнал получаем сигнал с двумя значениями "0" и "1", которые можно организовать в байты, тетрады и т.д. и передавать по каналам связи. Самым необъяснимым фактом оказалось то, что по статистике ошибок на четных каналах больше чем на нечетных. Можно принять во внимание и этот факт, если уж речь зашла о спектре сигнала. В технике когда две дублирующие друг друга ЭВМ обрабатывающие один и тот же сигнал возможно из-за ошибок четности-нечетности появление явления клинча Это когда обе ЭВМ перестают обрабатывать общий сигнал. Это уже тема других исследований и методов коррекции ошибок (таких как введение избыточного кода (шума)- кода четности, циклического кода (вспомнил 9 дорожек на магнитной ленте), кода Хэмминга и др.

 

это как-то совсем круто.....

когда-то давно я решил записать взять котировки разных пар, экспортировал в csv

потом импортировал в звуковой редактор cooledit и попробовал послушать

мне казалось что я могу слышать как евродоллар отличается от долларйены

но потом понял что это ерунда

Share this post


Link to post
Share on other sites
transcendreamer

с точки зрения конечной цели работы с сигналами и фильтрами должен получиться дискретный сигнал со значениями "0", "1", "-1" что соответствует "ждать", "покупать", "продавать", причем для открытых позиций контрсигнал должен говорить о сокращении и/или перевороте

Share this post


Link to post
Share on other sites
Programmer
с точки зрения конечной цели работы с сигналами и фильтрами должен получиться дискретный сигнал со значениями "0", "1", "-1" что соответствует "ждать", "покупать", "продавать", причем для открытых позиций контрсигнал должен говорить о сокращении и/или перевороте

 

Для более общего подхода можно еще добавить "2" и "-2", означающие "закрыть покупку" и "закрыть продажу" соответственно.

Share this post


Link to post
Share on other sites
transcendreamer

для начала можно просто бинарный сигнал +1 и -1

Share this post


Link to post
Share on other sites
Programmer

Урок 4 - Частотная плоскость

 

Добрый день друзья,

 

Раз мы теперь знаем определения, давайте вернемся к разложению рыночного сигнала.

 

post-50854-1404220701,3951_thumb.png

Рис.1 - Разложение рыночного сигнала

 

Как мы видим из Рис. 1 - сигнал (черная линия) состоит из волн различных циклических периодов: есть функции с большими циклическими периодами (вытянутая зеленая линия и большая синия линия), средними циклическими периодами (синия линия поменьше) и малыми циклическими периодами (фиолетовая линия).

 

А теперь то же самое, но в частотах. Как мы видим из Рис. 1 - сигнал (черная линия) состоит из волн различных частот: есть функции с низкими частотами (вытянутая зеленая линия и большая синия линия), средними частотами (синия линия поменьше) и высокими частотами (фиолетовая линия).

 

Циклические периоды на одном таймфрейме

Здесь необходимо понять одну очень важную концепцию. Сейчас мы говорим об одном графике выбранной валюты и периода. Например, пусть это EURUSD M15. Забудьте на пять минут про существование других таймфреймов. То, что необходимо понять - это то, что линия, которую Вы видите на графике EURUSD M15, состоит из волн низких, средних и высоких частот. Другие таймфреймы здесь совсем ни при чем. Только потому что мы говорим, например, про "низкие чатсоты" или "длинные циклические периоды", совершенно не значит, что мы имеем ввиду более высокие таймфреймы. Отнюдь нет, мы говорим про составляющие волны все того же графика EURUSD M15. Именно поэтому я различаю понятия циклический период и период (таймфрейм).

 

Частотная плоскость

Вторая важная концепция, которую необходимо понять, - это то, что раньше Вы видели рынок только в одной плоскости (временной), а теперь Вы можете видеть рынок в двух плокостях (временной и частотной). Что это значит? Временная плоскость - эта та, которую Вы видите на графике. Частотная плоскость - это графическая запись разложения сигнала на частоты. Пример:

 

post-50854-1404220701,4752_thumb.gif

Рис.2 - Частотная плоскость

 

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

 

Думаю, следующий рисунок прояснит ситуация. Ниже изображены временная и частотная плоскость для отрезка модельного графика FOREX:

 

post-50854-1404220701,5215_thumb.png

Рис.3 - Временная и частотная плоскости

 

Низкие частоты

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

 

post-50854-1404220701,5747_thumb.jpg

Рис.4 - Низкие частоты

 

Высокие частоты

Волны с высокими частотами (короткими циклическими периодами) для нас означают флуктуации на рынке, в предельном случае - это шум.

 

post-50854-1404220701,6322_thumb.jpg

Рис.5 - Высокие частоты

 

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

 

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

 

До встречи на следующем уроке!

 

© Kirill. StockProgrammer@mail.ru

Share this post


Link to post
Share on other sites
transcendreamer

Добрый день, Кирилл!

 

спасибо за новые труды, давайте поскорее уже разложим евро или фунт!

 

что скажете про этот мегакомбайн?

http://sentienttrader.com/

Share this post


Link to post
Share on other sites
Programmer
Добрый день, Кирилл!

 

спасибо за новые труды, давайте поскорее уже разложим евро или фунт!

 

что скажете про этот мегакомбайн?

http://sentienttrader.com/

 

Приветствую transcendreamer,

 

Циклы Херста достаточно интересны - я про них немного читал, но к сожалению, пока не знаю достаточно, чтобы сформировать четкую точку зрения. :search: Про sentient слышал, но никогда не пользовался. Буду рад, если кто-то знающий поведует нам..

 

Кирилл

Share this post


Link to post
Share on other sites
transcendreamer

так как же поиски идеального индикатора?

 

способна ли современная математика найти модель которая обыграет живого человека на рынка?

Share this post


Link to post
Share on other sites
AntFX
способна ли современная математика найти модель которая обыграет живого человека на рынка?

 

без сомнения, учитывая тот факт что 95% живых людей постоянно сливает :lsmile:


1

Share this post


Link to post
Share on other sites
transcendreamer
без сомнения, учитывая тот факт что 95% живых людей постоянно сливает :lsmile:

 

ну если так ставить вопрос - то надо сравнивать кто эффективнее сольет человек или алгоритм - задача в принципе эквивалентная....... опять таки вопрос к высокачественному сигналу преобразующему график любого инструмента в растущую или падающую кривую

Share this post


Link to post
Share on other sites
AntFX
ну если так ставить вопрос - то надо сравнивать кто эффективнее сольет человек или алгоритм - задача в принципе эквивалентная....... опять таки вопрос к высокачественному сигналу преобразующему график любого инструмента в растущую или падающую кривую

 

чтобы торговать роботом, никакая математика не нужна. она только путает.

 

П.С. я имел в виду сложную математику...

Edited by AntFX

1

Share this post


Link to post
Share on other sites
transcendreamer
чтобы торговать роботом, никакая математика не нужна. она только путает.

 

но в общем смысле даже если в роботе стоит простейший цикл на отправку лимитных ордеров с отступом то это тоже математика, а индикатором будет price change

Share this post


Link to post
Share on other sites
Vlad Minkov
чтобы торговать роботом, никакая математика не нужна. она только путает.

 

П.С. я имел в виду сложную математику...

Очень спорная мысль. Скорее даже неверная.


Постоянны только перемены!

Share this post


Link to post
Share on other sites
AntFX
Очень спорная мысль. Скорее даже неверная.

 

Может быть покажете мониторинг успешного робота, доказывающего обратное?


1

Share this post


Link to post
Share on other sites
transcendreamer

нейросети?

Share this post


Link to post
Share on other sites
Programmer

Урок 5 - Полосовой Фильтр

 

Приветствую друзья,

 

Сегодня мы рассмотрим следующий индикатор из книги Эхлерса - Roofing Filter (Полосовой Фильтр).

В книге описывается два полосовых филтра - Bandpass Filter и Roofing Filter. Сегодня мы рассмотрим второй, а в будущем обратимся к первому.

 

Roofing Filter предназначен для того, чтобы выделить из рыночного сигнала только нужный диапазон частот для дальнейшего анализа. Это делается путем отсечение частот ниже диапазона и частот выше диапазона двумя раздельными составляющими фильтра. Нижние частоты (медленные движения рынка) аттенюируются фильтром High Pass Filter (дословно: Высоко-Пропускной Фильтр). Верхние частоты (быстрые движения рынка) отбрасываются фильтром SuperSmoother Filter. Ниже иллюстрация:

 

post-50854-1404220809,1403_thumb.gif

Рис.1 - Полоса частот

 

Ранее мы не разбирали High Pass Filter, однако он достаточно прост и представляет из себя двух-полюсный фильтр частот. Почему именно двух-полюсный, а не одно-полюсный мы узнаем подробней в следующих уроках, когда будем разбирать децибелы и октавы, взвешенное случайное движение, и, наконец, спектральную диаляцию.

 

Обратимся к коду фильтра:

 

//+------------------------------------------------------------------+
//|                                                RoofingFilter.mq4 |
//|                                         Copyright © 2014, Kirill |
//|                                          StockProgrammer@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, Kirill"
#property link      "StockProgrammer@mail.ru"

//+------------------------------------------------------------------+
//| Description                                                      
//|
//| Roofing filter = 2-Pole HighPass Filter + SuperSmoother
//| Recommended for universal use to remove Spectral Dilation
//| 2-Pole - therefore zero mean
//| NOTE: 1-Pole is insufficient to remove Spectral Dilation
//| because market amplitude rises 6 db/octave (Brownian motion ~1/F^2)
//| and a 1-pole filter attenuates at 6 db/octave
//| however, a 2-pole is sufficient, because it attenuates at 12 db/octave
//+------------------------------------------------------------------+


#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 White
//---- indicator parameters
extern int LPPeriod = 40;             
extern int HPPeriod = 80;             
extern int Shift  = 0;                          //Shift Left
//---- indicator buffers
double ExtMapBuffer[];
double HP[];           //used for calculations only
//----
int ExtCountedBars=0;
int BarsUsed = 3;                               //This indicator always needs data from the current bar + only 2 previous bars
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
  int    draw_begin;
  string short_name;
//---- drawing settings
  SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,3);
  SetIndexShift(0,-1*Shift);   

  SetIndexStyle(1,DRAW_NONE);

  IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));

  SetIndexDrawBegin(0,BarsUsed);                                      
//---- indicator short name
  IndicatorShortName("RoofingFilter("+LPPeriod+","+HPPeriod+")");
//---- indicator buffers mapping
  SetIndexBuffer(0,ExtMapBuffer);
  SetIndexBuffer(1,HP);    
//---- initialization done
  return(0);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start(){
  if(Bars<=BarsUsed) return(0);
  ExtCountedBars=IndicatorCounted();
//---- check for possible errors
  if (ExtCountedBars<0) return(-1);
//---- last counted bar will be recounted
  if (ExtCountedBars>0) ExtCountedBars--;
//----
  RoofingFilter();
//---- done
  return(0);
}
//+------------------------------------------------------------------+
//| RoofingFilter Calculation                                        |
//+------------------------------------------------------------------+
void RoofingFilter(){
  double alpha,a,b,c1,c2,c3;
  double pi = 3.1415926535;
  int    i,pos1 = Bars-ExtCountedBars-1;
  int    pos2 = pos1;                       //because we have two cycles in this idicator
//---- calculate constants
  alpha = (MathCos(0.707*2*pi/HPPeriod) + MathSin(0.707*2*pi/HPPeriod) - 1) / MathCos(0.707*2*pi/HPPeriod);

  a = MathExp(-1.414 * pi / LPPeriod);
  b = 2 * a * MathCos(1.414 * pi / LPPeriod);
  c2 = b;
  c3 = -1 * a * a;
  c1 = 1 - c2 - c3;

//---- zero initial bars
  if(ExtCountedBars<1)
     for(i=1;i<BarsUsed;i++){
        HP[bars-i]=0;
        ExtMapBuffer[bars-i]=0; 
        pos1--;
        pos2--;
     }
//---- calculate all other bars      
  //Highpass filter low-frequency cyclic components
  //Using two-pole Highpass filter to achieve 12db/octave attenuation roll-on (with falling frequency)
  while(pos1>=0)
  {
     HP[pos1] = MathPow((1-alpha/2),2) * (Close[pos1]-2*Close[pos1+1]+Close[pos1+2]) + 2*(1-alpha)*HP[pos1+1] - MathPow((1-alpha),2)*HP[pos1+2];

     pos1--;
  }
  //Lowpass filter high-frequency cyclic components
  while(pos2>=0)
  {
     ExtMapBuffer[pos2] = 
                          c1 * (HP[pos2] + HP[pos2+1]) / 2 
                             + c2 * ExtMapBuffer[pos2+1] + c3 * ExtMapBuffer[pos2+2];

     pos2--;
  }
}

 

Вы можете скопировать данный код в новый файл индикатора в редакторе MetaEditor своего терминала и откомпилировать, чтобы получить рабочий индикатор. Или же, лучше, просто скачайте готовый файл индикатора из первого поста данной темы. Таким образом Вы скачаете самую последнюю версию в случае, если в дальнейшем будут изменения кода.

 

Давайте теперь рассмотрим пример того, как применять данный фильтр на рынке Форекс. Обратимся к паре EURUSD, график H4. Применим фильтр с полосой частот между 50 и 60 циклическими барами - частоты 0.020 Гц и 0.016 Гц. Вот, что мы получим в итоге:

 

post-50854-1404220809,1668_thumb.jpg

Рис.2 - Применение фильтра

 

Как видите, белая полоса, представляющая собой выходное значение фильтра очень похожа на синусоиду. Причем, весьма интересны два наблюдения:

- верхушки (отмечены) и впадины филтра совпадают с верхушками и впадинами цены, движущейся внутри отмеченного канала

- период "синусоиды" находится вбилизи значений 50-60 (отмечены значения периода 55, 55, и 65).

 

Второе наблюдение особенно важно, поскольку задача полосового фильтра как раз и заключается в том, чтобы выделить компоненты сигнала с циклическими периодами в указанном диапазоне! Конечно, всегда стоит помнить, что фильтр неидеален и будут отклонения (например, значение 65 баров).

 

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

 

post-50854-1404220809,2067_thumb.png

Рис.3 - Разложение фигуры голова и плечи

 

Мне особенно нравится этот пример, поскольку он показывает, что такая непростая фигура как голова и плечи может быть разложена на волновые компоненты!

 

Надеюсь, что сегодня Вы узнали много нового, и теперь сможете успешно применять фильтр Roofing Filter на практике.

До встречи на следующем уроке!

 

© Kirill. StockProgrammer@mail.ru

Share this post


Link to post
Share on other sites
Leon_2009
:readme:_
_

post-94257-1404220809,3955_thumb.gif

Share this post


Link to post
Share on other sites
transcendreamer

спасибо за новый урок!

прочитал с удовольствием

видится использование этого фильтра в качестве осциллятора

очевидно нужен еще трендовый индикатор

Share this post


Link to post
Share on other sites
transcendreamer

поигравшись с индикатором я понял что первый индикатор (supersmoother) мне нравится больше (насколько это слово вообще можно применять к индикаторам), мне кажется суперсглаживатель больше подходит с точки зрения практического трейдинга (проще настраивать, проще интерпретировать, меньше отставание, по крайней мере визуально)

Share this post


Link to post
Share on other sites
Programmer
спасибо за новый урок!

прочитал с удовольствием

видится использование этого фильтра в качестве осциллятора

очевидно нужен еще трендовый индикатор

 

Приветствую,

Спасибо за отзыв. Рад, что Вам понравился урок :beer_drink:

Трендовый индикатор есть - он называется Decycler, и мы его обязательно разберем.

 

Кирилл

Share this post


Link to post
Share on other sites
Programmer
поигравшись с индикатором я понял что первый индикатор (supersmoother) мне нравится больше (насколько это слово вообще можно применять к индикаторам), мне кажется суперсглаживатель больше подходит с точки зрения практического трейдинга (проще настраивать, проще интерпретировать, меньше отставание, по крайней мере визуально)

 

Эти два фильтра имеют два разных назначения:

SuperSmoother - убирает алиасинговый шум и согласно Эхлерсу (я поддерживаю) должен применяться повсеместно без исключений

RoofingFilter - выделяет определенные компоненты из сигнала для дальнейшего анализа

 

При этом, я совершенно согласен с Вами, что отставание суперсглаживателя намного меньше. Этому есть математическое обоснование и мы обсудим это явление подробней в предстоящих уроках.

 

Кирилл

Share this post


Link to post
Share on other sites
transcendreamer
Эти два фильтра имеют два разных назначения:

SuperSmoother - убирает алиасинговый шум и согласно Эхлерсу (я поддерживаю) должен применяться повсеместно без исключений

RoofingFilter - выделяет определенные компоненты из сигнала для дальнейшего анализа

 

При этом, я совершенно согласен с Вами, что отставание суперсглаживателя намного меньше. Этому есть математическое обоснование и мы обсудим это явление подробней в предстоящих уроках.

 

Кирилл

 

хорошо, спасибо, очень жду!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×