О решении задачи определения состояния рынка (тренд или флет) при помощи незапаздывающего фильтра

 

Доброго времени суток.


Ключ к успешной торговле - цифровые фильтры. Даже простейшая скользящая средняя (SMA) - есть цифровой фильтр. Довольно бесполезный, с точки зрения торговли, поскольку запаздывает.


Если конкретнее: SMA порядка s = 1+2z запаздывает на z интервалов между отсчётами (подразумевается, что отсчёты сигнала следуют равномерно по времени, через одинаковые интервалы времени).

Примера для - фрагмент курса (500 отсчётов) EURUSD (в таймфрейме М5, то есть отсчёты следуют с интервалом 5 минут), и SMA порядка 51 (то есть запаздывающая на 25 интервалов между отсчётами): 


Можно сдвинуть эту SMA в прошлое для наглядности на 25 интервалов между отсчётами:


Тогда получим незапаздывающий прогнозирующий фильтр. Почему незапазыдывающий - потому что запаздывание мы учли, сдвинули вручную на величину запаздывания. Почему прогнозирующий - потому что если смотреть на уже сдвинутую SMA, то в каждый момент времени в значении этой сдвинутой SMA содержится информация о будущих относительно этого момента времени значениях цены. И можно торговать 100% прибыльно, либо восстановив цену из SMA (элементарная арифметика, обращающая формулу вычисления SMA), либо применяя какие-то другие подходы (например, открывать сделки с любыми разумными TP и SL так: если цена выше (сдвинутой) SMA - продавать, если ниже - покупать).

Проблема, однако, в том, что после сдвига на z = 25, мы имеем значения фильтра лишь в области, не включающей последние z отсчётов.

И обойти это никак нельзя. Чтобы построить (сдвинутую) SMA в этой области нужно подсмотреть в будущее, что сделать затруднительно.


Рассмотрим для ясности эту же SMA на сигнале, представляющем собой меандр:


Пока всё вполне очевидно.  

 

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

1. Незапаздывающий фильтр не будет прогнозирующим, в отличие от, например, сдвинутой SMA. Он будет "всего лишь" незапаздывающим (зато физически реализуемым!), но торговля с его помощью по соображениям в духе "открывать сделки с любыми разумными TP и SL так: если цена выше фильтра - продавать, если ниже - покупать" не будет прибыльной (так как в нём нет информации о будущем). 

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


Рассмотрим это на практике: 

1. Меандр: 

 


Здесь Aup - некоторая кривая, которая, по определению её (способу построения) всегда выше цены, а Adw - некоторая кривая, которая по способу её построения всегда ниже цены. Af = 0.5*(Aup + Adw) - и есть фильтр. 

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

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


2. Реальный случай - 500 отсчётов EURUSD в таймфрейме М5 (исходный сигнал - кривая А - в данном случае это - EURUSD - показан более толстой кривой, чтобы её было видно за красной и синей кривыми, соответствующими Aup и Adw): 

 


Разность между A и Af будем характеризовать в нормированном виде K - формула для K приведена на рисунке: 

 

Теперь самое важное: утверждается, что если фильтр пребывает в таком состоянии, что не фильтрует, а тупо следует за исходной кривой, чтобы не отклониться от неё больше допустимого, то есть при значениях K вблизи 1 или -1 - имеет место ТРЕНД (либо вврех, либо вниз - соответственно). 

Ну а как известно: trend is your friend. 

В данном случае, сейчас, в 20:40 Мск 11.03.2021 следует EURUSD - покупать. И ждать. 

 

Ну что же, EURUSD несколько подрос. В полном соответствии с прогнозом. Текущее состояние - тренд вверх (К близок к 1) - стою на покупку, курс на сейчас EURUSD = 1.1983 

 


GBPUSD - аналогично. Имеет место тренд вверх, купил и жду, курс на сейчас GBPUSD = 1.3978 

   

 
А стрелочки где?
 
Олег, перелогиньтесь ! :-)
 
Evgeniy Zhdan:
А стрелочки где?

Какие стрелочки? 

Я старался максимально ясно изложить, что изображено на графиках. Там везде по 500 отсчётов. Текущий момент времени - самый правый отсчёт. 

Основная идея создания незапаздывающего фильтра тоже изложена: не пытаться фильтровать всегда, как только разница между фильтром и фильтруемой кривой достигает критического значения - бросать фильтрование, и тупо повторять исходную кривую. Таким образом, фильтр никогда не отклонится сильно от исходной кривой, но при этом на участках флета сможет осуществлять фильтрацию. На участках тренда (К близко к 1 по модулю, ну или хотя бы более 0,5) - торгуем по тренду, на участках флета - наоборот, контртрендово, то есть против сделанных ценой А отклонений от фильтра Af. 

 

Ну что же, по EURUSD результат пока нулевой (отбит спред и пара пипс в плюсе), а вот по GBPUSD отбит спред и 15 пипс в плюсе.

Расклад по GBPUSD таков - значение К (текущий момент времени это отсчёт с номером n-1 в моей системе нумерации от 0 до n-1, где n = 500) сейчас 1,000 - идеально, продолжаем стоять на покупку. 

   

 

Пока стоим в сделках на покупку EURUSD и GBPUSD имеет смысл рассмотреть, как оно выглядит в случае отсутствия тренда... в этом случае фильтр - фильтрует (так сказать, "честно", а не просто повторяет исходный сигнал, как на участках тренда). 

Рассмотрим на примере USDJPY. Для удобства я домножу USDJPY на 0.01, чтобы получить величину порядка единицы. 

     

Очевидно, что тренда нет, и не стоит входить в рынок. Но если уж входить - то лучше продать. 


P.S. Заметил опечатку на рисунках. В отношении волатильностей, я, разумеется, имею в виду отношение волатильности (суммы модулей разностей между отсчётами на показанном интервале) фильтра к волатильности цены, оно всегда меньше 1.

Для ясности надо было бы написать "Отношение волатильностей фильтра Af и цены A", а сейчас написано  "Отношение волатильностей цены A и фильтра Af" (хотя, в общем-то, и так понятно, что имеется в виду). 

 

Наступает любопытный момент. Решается, будет тренд продолжаться, или нет. Если К пройдёт вниз до нуля или тем более менее - пора выходить из сделки. Если же К снова поднимется в область выше, чем сейчас (примерно 0,7), ближе к 1, то тренд будет продолжаться. 

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

   

 

Очень красива ситуация по EURUSD (по GBPUSD похожа): вероятна смена тренда (нужно будет признать убыток, и закрыться), но пока что можно рассматривать это снижение как шанс докупиться! Докупаюсь (и по GBPUSD тоже). 

   

Причина обращения: