торговая стратегия на базе Волновой теории Эллиота - страница 282

 
to Neutron

Понятно, что ФЗ уменьшается с сужением окна выборки но, при этом ухудшаются сглаживающие свойства оператора. Приходится искать компромисс между качеством сглаживания и запаздыванием. Поэтому корректно сравнивать ФЗ операторов при одинаковых или близких параметрах их АЧХ (равномерность в полосе пропускания, крутизна среза). В этом плане, фильтр Баттерворта имеет минимальную (не нулевую!) ФЗ в полосе пропускания, которая заметно увеличивается на частоте среза. Именно в этом свете интересно сравнить метод фильтрации основанный на вейвлет преобразовании и классический.


Здесь я согласен с Вами. Насчет сравнения... Для вейвлетов не так просто вычислить напрямую те характеристики, о которых Вы говорите (АЧХ, ФЗ и пр.). Глубоко зарываться для этого в теорию мне сейчас не хочется. Я планирую, однако, кое-какие эксперименты с конкретными ценовыми рядами. Если получиться осмысленный результат - поделюсь. Но это требует времени...

Если мы собираемся, что-то экстраполировать куда-то, то неизбежно возникнет ФЗ. Действительно, сидя на правом конце временного ряда и экстраполируя на шаг в перёд, получаем вероятное значение исследуемого ряда. На следующем отсчёте, сравниваем полученное значение с истинным и запоминаем полученную ошибку. Повторяем эту процедуру ещё раз с учётом обновления входных данных для второй точки и т.д. и т.п. В итоге мы имеем два временных ряда - исходный и прогнозный. Очевидно, что они не совпадают точно, но и не расходятся сильно, лишь смещены друг относительно друга на ФЗ! Так что термин ФЗ для этого случая, думаю, уместен.


В принципе тоже согласен. Просто в разных областях сложилась своя терминология, базовый набор терминов и эти множества часто не пересекаются.

Еще нюанс по поводу прогнозирования. Мы можем экстраполировать исходный ценовой ряд, так сказать, в целом - например, приближая его полиномом и продолжая этот полином в будущее (этот пример Вы приводите далее).
Но есть и другой подход. Можно сначала разложить наш ряд на более простые компонетры. Обратимых преобразований без потери информации полно - Фурье, вейвлеты и масса других. Затем мы делаем экстраполяцию для каждого компонента. А раз эти части проще целого, то и экстраполяцию провести будет проще или, по крайней мере, удобнее и эффективнее. И возможно она получиться лучше. Полученный результат сворачиваем обратно, тем самым получая экстраполяцию для ряда в целом.
Конечно эти два подхода по своей глубинной сути эквивалентны, но второй мне нравиться больше. Наверное не только мне. Не раз набредал в сети на обсуждение прогнозирования цены с помощью Фурье гармоник. Хотя то, что я видел было довольно неуклюже. Соответственно и результат.


А теперь, коллеги, покритикуйте меня.
Я утверждаю, что любая экстраполяция подразумевает наличие у временного ряда (ВР) свойства "следования" выбранному направлению. Действительно, экстраполируя на шаг вперёд полиномом n-ой степени, мы предполагаем НЕИЗМЕННОСТЬ первой производной, второй... n-1 у исходного ряда, по крайней мере на этом шаге... Улавливаете, к чему я веду? Квазипостоянство первой производной это ни что иное, как положительный коэффициент автокорреляции (КА) ВР на выбранном таймфрейме (ТФ). Известно, что бессмысленно применять экстраполяцию к ВР типа броуновского. Почему? Да, КА такого ряда тождественно равен нулю! А, ведь, существуют ВР с отрицательным КА... применять к ним экстраполяцию просто некорректно (если я прав) - цена скорее пойдёт в противоположную сторону от предсказанного направления.
И уж на закуску: Почти все ВР на рынке Forex имеют отрицательную функцию автокорреляции (это функция, построенная из КА для всевозможных ТФ) - это медицинский факт! Исключение составляют некоторые валютные инструменты на небольших временных участках, да акции сбербанка и РАО ЕС на недельных ТФ. Этим, в частности, объясняется неработоспособность на современном рынке ТС основанных на эксплуатации скользящих средних - та же попытка экстраполяции.
Если я не заблуждаюсь, вейвлеты, априори, оказываются в области, в которой не смогут корректно выполнять свои функции.


Если я правильно помню Ваши прошлые посты, то для расчета автокорреляционной функции Вы прежде всего дифференцируете ценовой ряд. Тем самым, заметьте, вы выкидываете добрую толику низко- и среднечастотных гармоник ряда! Для статистики этот подход, конечно, здравый. Но не выплескиваем ли мы здесь с водой ребенка?
Ведь много чего интересного лежит в низких частотах. Например, трендовые движения.
На эмпирическом уровне все согласны, что фигуры рынка повторяются. Действительно, легко найти на истории любого финансового инструмента трендовые каналы или другие фигуры похожие, как близнецы братья, но разделенные весьма значительными промежутками времени (иногда годами). Это факт. Надеюсь, Вы не будете с этим спорить?
Причем характеристики (собственные частоты трендового канала, среднее время жизни и др. - сейчас не буду распространяться как я их определяю) этих "феноменов" зачастую практически совпадают (на соизмеримых масштабах - нет смысла сравнивать минутки и дневки) , а во времени не изменяются скачком, но всегда плавно дрейфуют. Этот факт я могу наглядно доказать с помощью вейвлет методов. Пока на отдельных примерах, но вскоре собираюсь поднабрать репрезентативной статистики на истории.

Что бы это могло означть? Прямая информационная связь - вряд ли, market long term memory - сомневаюсь, проявление какой-то внутренней структуры рынка, его глубинных свойств, о которых мы ничего не знаем - возможно. Кажется, что как будто есть целая серия наборов собственных частот рынка, которые он с течением времени плавно и спокойно перебирает.
Почему так похожи многие трендовые каналы? Почему их свойства так стабильны? почему на разных уровнях вложенности появляются похожие структуры и их раскладка по частотам не является совершенно случайной? Сослаться просто на фрактальнось - не очень конструктивно. А главное нельзя ли это использовать для торговли?

Нисколько не пытаюсь принизить здесь статистический подход. Вы когда-то считали горизонт прогноза на основе АК. Замечательно то, что он существует. Давайте этот факт использовать в подходящих обстоятельствах!
Но мне кажется, что одними статистическими свойствами рынок не исчерпывается. Если мы сможем увидеть и поймать, скажем так, "динамические" свойства рынка, это нам даст дополнительное преимущество. Надеюсь, Вы против этого не возражаете?

С уважением.
Успехов и попутных трендов!
 

Ведь много чего интересного лежит в низких частотах. Например, трендовые движения.


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

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

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

Получая прогнозные значения гармоник на будущих отсчетах, «как-то» восстанавливаем сигнал, т.е. по прогнозируемой низкой частоте, восстанавливаем низкочастотный сигнал, как бы будущий «тренд».

У меня до этого признаться, руку пока не дошли. Коллеги, как считаете, я понимаю, что амплитуды так же будут случайными величинами, и все-таки?
 
Andre69
Но есть и другой подход. Можно сначала разложить наш ряд на более простые компонетры. Обратимых преобразований без потери информации полно - Фурье, вейвлеты и масса других. Затем мы делаем экстраполяцию для каждого компонента.

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


Хм, не имеется ли в виду одновременная релаксация на многих частотах? :) Впрочем ладно, обещал про 1/f не говорить :)
Примерно это я начал пробовать, но простая экстраполяция ничего хорошего не дала - видимо при суммировании ошибки экстраполяции отдельных компонент не гасят друг друга. Возможно дело в том, что я экстраполировал слишком далеко (на 5 баров и больше). Но возможно и другое - изменения амплитуд компонент не являются независимыми. Вот, например, ФЗ - мы можем сказать, что фильтр как бы не видит высоких частот. Но фактически через некоторое время он на них всё же реагирует. То есть как бы имеет место перекачка энергии из высоких частот в низкие, с определённой конечной скоростью. Может быть здесь поискать какие-то закономерности? Что говорит по этому поводу теория?
 
Andre69
Но есть и другой подход. Можно сначала разложить наш ряд на более простые компонетры. Обратимых преобразований без потери информации полно - Фурье, вейвлеты и масса других. Затем мы делаем экстраполяцию для каждого компонента.

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


Хм, не имеется ли в виду одновременная релаксация на многих частотах? :) Впрочем ладно, обещал про 1/f не говорить :)
Примерно это я начал пробовать, но простая экстраполяция ничего хорошего не дала - видимо при суммировании ошибки экстраполяции отдельных компонент не гасят друг друга. Возможно дело в том, что я экстраполировал слишком далеко (на 5 баров и больше). Но возможно и другое - изменения амплитуд компонент не являются независимыми. Вот, например, ФЗ - мы можем сказать, что фильтр как бы не видит высоких частот. Но фактически через некоторое время он на них всё же реагирует. То есть как бы имеет место перекачка энергии из высоких частот в низкие, с определённой конечной скоростью. Может быть здесь поискать какие-то закономерности? Что говорит по этому поводу теория?



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

А на поиск закономерностей по перетеканию энергии между частотами можно всю жизнь потратить и ничего не найти. Хотя…. :о))))
 
Просто я довольно давно развлекался следующим:

- раскладывал ценовой ряд на импульсы (в среднем получалось несколько штук на ряд в 300-500 отсчетов)
- с помощью нейросети прогнозировал новый импульс
- выполнял свертку этих импульсов включая прогнозный

Результатами был не очень доволен. Вот я и подумал, а чего бы не прогнозировать низкие частоты.
 
Добавлю ещё картинку моей экстраполяции Фурье-компонент. Чем дальше горизонт, тем меньше компонент участвует в прогнозе.


На самом деле это был пробный шар и далеко не все мысли были реализованы. Но вдруг меня обуял неизъяснимый скепсис :), и дальше рыть в этом месте я пока не стал. Хотя в уме продолжаю держать.
 
Наконец появилось свободное окно во времени и я хочу продолжить пост про вейвлеты.
Извините за задержку. Суета сует жизни отвлекает...

Ранее я рассказал очень кратенько про DWT. Теперь о CWT.
Чтобы можно было сравнивать, кое что повторю:
1. Вейвлеты для DWT должны обязательно иметь скейлинг функцию.
2. DWT дает полную реконструкцию (PR) исходного ряда при обратном преобразовании и не только в теории, но и на практике.
3. Коэффициентов DWT ровно столько же, что и членов исходного ряда. Хранят их обычно как набор векторов разной длины.
4. Масштаб изменяется на каждом шаге преобразования ровно в два раза (диадное преобразование - шкала масштабов: 1,2,4,8...).
5. Практически коэффициенты DWT вычисляются с помощью применения к исходному ряду набора коротких фильтров. Два фильтра при разложении и два (других) при восстановлении (алгоритм Малла).
6. ...Остальное здесь и сейчас не важно...

Так вот, господа, непрерывное преобразование - CWT отличается от DWT по всем перечисленным пунктам!

1. Вейвлеты для CWT совсем не обязаны иметь скейлинг функцию. То есть те вейвлеты, которые применяються в DWT вполне годяться и для CWT, а вот обратное неверно. Что это означает практически. Вейвлет функция для CWT не обязана обращаться совсем уж в 0 вне конечного интервала, достаточно, чтобы она быстро там спадала. Поэтому появляется возможность использования здесь многих очень интересных и полезных вейвлетов. Среди них - вейвлет Морле (очень простая и полезная штука), мексиканская шляпа, семейство Гауссовых вейвлетов и пр.
2. CWT дает полную реконструкцию только в теории - в своем интегральном представлении. Практически же мы всегда оперируем с конечным набором данных и можем использовать конечный набор масштабов (ограниченная память компьютера, время вычислений и т.д.). Но это не значит, что обратное преобразование невозможно!
Вполне возможно! Если все делать грамотно, то мы исказим при обратном преобразовании только несоклько первых, самых низкочастотных гармоник (постоянную составляющую да одну-две из первых). Как показывает практика, часто это не имеет значения. Так что please relax..., идем дальше...
3. CWT очень избыточное преобразование. Коэффициентов может быть на порядки больше, чем членов исходного ряда. Они обычно организуются в прямоугольную матрицу. По ее ширине - время (номер члена исходного ряда), по высоте - масштаб.
А прямоугольная матрица - это что такое? Правильно. При соответствующем масштабировании данных - это изображение, картинка.
Вот это мне лично больше всего и нравится в CWT. Поскольку я в свое время весьма плотно занимался обработкой изображений, в том числе и в смысле распознавания образов, то я умею правильно обрабатывать такие картинки и искать на них всякие-разные особенности. Прелестно также то, что эти особенности легко можно связать с исходным рядом и всегда сказать какому месту в исходном ряду данная особенность соответствует. На результатах CWT для ценовых рядов во всей красе видна многомасштабная природа рынка, на раз выявляется фрактальность - ее просто явно видно, и многое, многое другое.
4. Шкала масштабов для CWT может быть любой. Точнее это может быть любой монотоно растущий ряд натуральных чисел. Хотите линейный, хотите логарифмический или иной. Как удобней для конкретной задачи. И это хорошо!
5. Практическое вычисление CWT не представляет трудности. Вейвлет функция дискретизируется подходящим способом, причем, чем лучше вы хотите получить точность преобразования, тем больше надо взять точек. Затем она растягивается в соответствии с первым масштабом и делается свертка с данными. Так сказать - примеряем костюмчик. Все повторяем, пока не исчерпаем набор масштабов. Результат записываем в соответствующие строки заранее подготовленной матрицы. Обратное преобразование также не вызывает проблем. Действуем в соответствии с формулой для обратного CWT, взятой из литературы.
Есть, правда, один минус - очень много вычислений и большой расход памяти. У меня на средненьком сейчас компьютере (три года назад был хороший) обработка кусков ценовых рядов длиной в 2000-3000 отсчетов занимает 15-20 сек. Хотя С++ код highly optimized - используется теорема о свертке и одна из самых быстрых в мире библиотек Фурье преобразования. Да... Такое на MQL не запрограммируешь.

Теперь о первых шагах, которые сделаны с CWT в направлении анализа рынка и поисков методов экстраполяции ценовых кривых.

Для начала я взял в работу вейвлет Морле. CWT с этим вейвлетом эквивалентно оконному Фурье преобразованию с Гауссовым окном. Ну об этом во всех учебниках написано... Подбирая всего один параметр вейвлета можно менять соотношение его ширин во временной и частотной областях. Это удобно.
Дальше на рисунке, как иллюстрация результат CWT (сверху, коэффициенты разложения показаны в условных цветах - где светлее максимумы, где темнее минимумы) для ряда EURUSD - часовые цены закрытия. Кусок взят из истории - где конкретно, думаю, не важно сейчас. Внизу - данный ценовой ряд.
Что можно тут сказать? Явно видна фрактальность рынка. Хорошо локализуются максимумы и минимумы ценовой кривой. Не так просто, но структуры на картинке можно связать с трендовыми каналами на разных масштабах. Что еще? Заметьте - виден замечательный факт - рынок не любит некоторых масштабов!



Я показал здесь вполне типичную картинку. Если сделать несколько таких картинок во времени и положить их рядом, то можно проследить, как некоторые структуры возникают, развиваются, затем пропадают, заменяются другими. Возникает даже иллюзия закономерности. Также хорошо вдохновляет перевод картинок в трехмерное представление. Чтобы лучше с этим разобраться, хочу сделать кино из таких картинок. Но это займет много времени...
Другие вейвлеты дают похожие картинки, но с Морле их интерпретация более прямая.
Так что я пока остановился на нем.

Кроме разглядывания таких картинок можно делать и более осмысленные вещи.
Ну, например, получить вейвлет спектры. Это возможно ибо теорема Парсеваля для вейвлетов работает. В случае вейвлета Морле, его спектр есть аналог Фурье спектра, толко сильно сглаженного и иначе отмасштабированного. Однако для анализа - это небо и земля. Я много разглядывал Фурье спектров для участков ценовых рядов, но не смог придти ни к каким определенным выводам, глядя на эти заборы. Здесь же все выглядит ясно и логично. Впрочем об этих спектрах разговор может быть долгим. Давайте не здесь и не сейчас. Sorry, картинку пока не выкладываю. Просто она лежит у меня в другом компьютере - надо принести. Если интересно - выложу позже.

Теперь экстраполяция. А давайте экстраполировать матрицу CWT вместо самого ряда. Как? О деталях умолчу, соблюдая копирайт. Но есть крутая и очень нетривиальная идея. Что-то мне подсказывает внутренний голос, что здесь можно либо сделать замечательную вещь, либо... наступить на очччень большие грабли. И в том и в другом случае вы поймете мотивы моей скрытности. Мне требуется воплотить идеи в код, протестировать на истории и на демо, переварить эти результаты - тогда можно о чем-то говорить. А это все, увы, долго.
Для затравки выкладываю картинку с результатом экстраполяции куска ценового ряда на 200 отсчетов вперед (синяя кривая).



Разумеется, так хорошо получается далеко не всегда, но довольно часто. Как часто - не проверял. Нет смысла. Это была самая первая попытка. Алгоритм - примитив полный, первое, что пришло в голову. Сейчас от этого всего уже отказался.

The end. Спасибо за внимание!
Пошел работать, все остальное в порядке обсуждения.

Всем удачи и попутных трендов!
 
to Andre69
...Вы прежде всего дифференцируете ценовой ряд. Тем самым, заметьте, вы выкидываете добрую толику низко- и среднечастотных гармоник ряда! Для статистики этот подход, конечно, здравый. Но не выплескиваем ли мы здесь с водой ребенка?...

При дифференцировании информация о низкочастотной составляющей сигнала не теряется. Действительно, после интегрирования ряда остатков, мы получим исходный временной со всеми трендами ряд плюс некая константа. Следовательно, остационаривание исходного ряда путём дифференцирования, вполне корректно с математической точки зрения. Тут, правда, возникает засада в другом: порождается ложная коррелированность соседних отсчётов, но это отдельная песьня.
В остальном, Andre69, я с Вами согласен. И спасибо за содержательные ответы.

to Yurixx
Но если взять что-нибудь посложнее, полином 2-й степени например, то все не совсем так.
Уточню: речь идет об экстраполяции на ближайшее будущее.
Так вот, с помощью обычной квадратичной функции (при условии, что числовой ряд действительно допускает это по своей природе) можно предсказывать приближение точки разворота. А это именно то, что всем нужно. Тем более - полиномы высших степеней.

Начал я на листочке выписывать формулки для интерполяции временного ряда в общем случае полиномами n-ой степени и знаете, Юра, что я получил в итоге? - разложение в ряд Тейлора (РТ) в окресности некоторой точки! Удивившись своей гениальности:-) и немного подумав, пришёл к выводу, что так и должно быть. Ведь, по сути РТ и есть приближение к исходной функции в точки путём суммирования полиномов всё больших степеней со всё меньшими весами, которые моделируют поведение первой, второй, ..., n-1 производных. По определению этот аппарат можно использовать если исходный ряд ГЛАДКИЙ, т.е. определены и существуют производные вплоть до n-1-ой. ВР финансовых инструментов не пренадлежат к классу гладких, а значит к ним нельзя применять разложение в РТ или, что тоже самое, использовать экстраполяцию полиномами.
Кстати, гладкость ряда, есть не что иное, как положительность КА! Т.е. ряд скорее продолжит начатое движение, чем изменит направление. Да-а, дела! Похоже, нам нужно создавать раздел математики в области изучения НЕ гладких функций и методах их анализа...

to Candid
Года полтора назад я активно занимался экстропаляцией ВР с помощью Фурье-анализа. Написал прогу, которая суммирует произвольное, наперёд заданное, число гармоник и продлевает их на заданное количество отсчётов в будущее. Для проверки корректности работы кода, я оцифровал звук самой первой клавиши пианино (для любознательных, ЛЯ субконтрактавы содержит более 500 гармоник и очень трудна для анализа), напустил на этот ряд код и получл их экстраполяцию на несколько периодов основной гармоники вперёд. Результат поразил меня своей красотой - полученный звук нельзя было отличить от настоящего. Т.е. мой код великолепно предсказывал дальнейшее поведение этой чёртовой мешанины звуков!!! Окрылённый, я готов был порвать Рынок... но рынок меня не заметил. Он перешагнул через меня - вооружённого до зубов солдата и пошёл дальше СВОЕЙ дорогой! Всё дело оказалось в том, что на рынке НЕТ стационарных гармоник...
 
to Candid
Всё дело оказалось в том, что на рынке НЕТ стационарных гармоник...

Мне казалось, я это учёл :). Коэффициенты экстраполяции для каждой гармоники заново рассчитывались на каждом баре. База равнялась четверти периода гармоники, длина экстраполяции одной восьмой периода. Кроме того цель состояла не в том, чтобы получить сплошной прогноз. Цель состояла в том, чтобы получить хороший прогноз хотя бы для некоторых участков и далее попытаться понять, чем эти участки отличаются от прочих. Увы, полученный прогноз показывал цены примерно так же, как остановившиеся часы показывают время :)
 
to Neutron, Candid

Я вообще так же немного (вернее СОВСЕМ) другое подразумевал, а не складывание гармоник. Ладно, выберу время и проверю.
Причина обращения: