Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 50

 
mytarmailS:

Вот даже этот не глупый паренек говорит, смотреть с 10-ой минуты

https://www.youtube.com/watch?v=KUdWTnyeBxo&list=PLDCR37g8W9nFO5bPnL91WF28V5L9F-lJL&index=3 

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

Не обязательно использовать именно фурье, раз не советуют. Алексей например предлагает брать дельты между барами, а не сырые значения. Юрий в libVMR использовал различные математические преобразования, тоже интересно, посмотрите его исходники на джаве. Можно разложить данные по методу основных компонент, и подавать в нейронку компоненты, про это тут СанСаныч и я статьи и примеры выкладывали. То что вы хотите сделать имеет сотни решений, фурье это только одно из них.

Или можно просто взять нейронку с десятками слоёв, она сама на сырых данных разберётся без всяких ядерных преобразований. Но там будет куча проблем с регуляцией, кроссвалидацией, итд.

А ещё ни один из этих способов не избавит от проблемы мусора на входе. Мусор на входе -> мусор после преобразования -> мусор на выходе -> слив на фронттесте. 

 
mytarmailS:

Вопрос был один : возможно ли мерять схожести между функциями через  амплитуду, фазу и частоту если да то как это делается?

 

ВСЕ!!!  больше мне ничего не интересно ..

 Все остальное написанное про Фурье  это следствие ответа СС и к моему вопросу отношения не имеет

Если функции периодические, то можно. Если непериодические, то будут иметь место погрешности при сравнении краёв (в начале - 0 значение аргумента, и в конце периода - значение аргумента 2*PI) двух функций.
 
Dr.Trader:

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

Или можно просто взять нейронку с десятками слоёв, она сама на сырых данных разберётся без всяких ядерных преобразований.

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

Dr.Trader:


Или можно просто взять нейронку с десятками слоёв, она сама на сырых данных разберётся без всяких ядерных преобразований.

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


Dr.Trader:


Юрий в libVMR использовал различные математические преобразования, тоже интересно, посмотрите его исходники на джаве


Не различные, а алгоритмически скомпонованные по методу группового учёта аргументов (GMDH) А. Г. Ивахненко. Если взять случайные, т.е. без какой либо структуры, то получится  фигня.


 
Yury Reshetov:
Если функции периодические, то можно. Если непериодические, то будут иметь место погрешности при сравнении краёв (в начале - 0 значение аргумента, и в конце периода - значение аргумента 2*PI) двух функций.

Понял, те по концам все таки будут искажения и чем ближе к краю тем сильнее, жаль , не подойдет....

 

Dr.Trader

как там ваша нейросеть? натренировалась? 

 

Нашел еще такую заметку на одном сайте, он уже почему то не работает

Может кому то будет интересно :

 

«…. Следуя Вашим рекомендациям я сделал несколько моделей роботов, роботы обучаются, что-то распознают на новых данных, но результаты увы пока далеки от требуемого.

….Сначала я применил полиномиально-гармоническую аппроксимацию к фильтрам низких частот для получения первого набора вторичных признаков, один фильтр для определения краткосрочной тенденции, второй для долгосрочной. В качестве вторичных признаков взял частоты, амплитуды cos и sin, коэффициенты P. … Сеть обучилась, но обобщением не обладала.

…Следующим шагом была новая модель: к цене закрытия применяем фильтр низких частот (я использовал фильтр Батерворта 2-го порядка), применяем полиномиально-гармоническую аппроксимацию, преобразуем A*cos(wx)+B*sin(wx) к виду M*sin(wx+f) и в качестве вторичных признаков берем M и f.

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

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

После этого я применил такую модель к реальным котировкам:

— фильтруем цену закрытия адаптивным фильтром НЧ .

— для определения рыночных волн строим набор из полосовых фильтров.

— применяем преобразование Гильберта.

— первый набор вторичных признаков: значения полосовых фильтров, значения мгновенных амплитуд и фаз.

— строим фильтр НЧ от close цены.

— второй набор вторичных признаков – относительное отклонение значений close и low цены последней свечи, уровней поддержки и сопротивлений от значения фильтра НЧ, относительный объем в баре (по отношение к среднему значению).

— создаем обучающую выборку.

В результате получилось следующее: сеть обучается, но на новых данных работает плохо. Где-то точно предсказывает минимумы, а где-то вообще «забывает что ей нужно делать». По сравнению с тем, что я делал раньше результат кажется качественно на другом уровне, но это на мой субъективный взгляд. Да. Еще уточню, я везде соблюдал эмпирические правила: число входных признаков сети (в данном случае это вторичные признаки) < размер обучающей выборки/10, число нейронов в скрытом слое не больше числа входов сети…» Надеюсь, что эти вырезки из письма дают Вам представление о возможных подходах к поиску признаков. 

 
mytarmailS:

Понял, те по концам все таки будут искажения и чем ближе к краю тем сильнее, жаль , не подойдет....

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

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

mytarmailS:

как там ваша нейросеть? натренировалась?

Смотря для каких задач и данных? Если ей подсунуть выборку из случайных чисел, то она матюкается: "Garbage in, Garbage out". А если дать выборку из значимых предикторов, то она выдаёт значения обобщающей способности. Тренируется она не так долго, по крайней мере, для выборки из десятка предикторов и нескольких тысяч примеров.
 
Yury Reshetov:

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

Я наверное сделаю так.... Сначала расскажу что я вообще делаю и что мне надо решить, а потом вы скажете свои предложения по этому поводу, потому что мне кажется я вас всех путаю...
 

Немного пред истории....

Начинал я с того что искал паттерны в истории по такому принципу :  

1) есть у нас текущая цена - пусть будет последних 20 свечей

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

3) когда находим такую ситуацию то смотрим чем она закончилась - ростом или падением

4) когда найдено много таких аналогов то можно собрать некую статистику с каким то перевесом , например нашли 10 аналогов

из которых 8 закончились ростом а 2 падением вот вам и прогноз что будет с ценой :)

 То есть делал я что то похожее как и у Ивахненка "метод комплексирования аналогов - безмодельное прогнозирование"  "МГУА"  только у меня намного примитивнее

 Так вот подход этот оказался не рабочим из за ряда причин

1) чем больше свечей в искомом векторе тем меньше аналогов можно найти в истории, на практике если брать все цены OHLC и точность по корреляции пирсона >0.93 , то пределом будет вектор из 3-ох свечей, а для нормального прогноза нужно существенно больший вектор

 2) на практике на рынке практически не бывает идентичных ценовых ситуаций....

3)  И получается ситуйовина  что увеличить вектор мы не можем так как сильно потеряем в точности, а если все таки сможем то все равно не найдем аналога на большом векторе так как идентичных ситуаций не бывает

 

Решение все же было найдено..... 

 
Yury Reshetov:

Смотря для каких задач и данных? Если ей подсунуть выборку из случайных чисел, то она матюкается: "Garbage in, Garbage out". А если дать выборку из значимых предикторов, то она выдаёт значения обобщающей способности. Тренируется она не так долго, по крайней мере, для выборки из десятка предикторов и нескольких тысяч примеров.

Приветствую!!!! Пользуюсь LibVMR Но видать старой версией, потому как вылетает ошибка "Bad Data" . Я так понимаю что вышла новая версия. Где её можно скачать??? Если это возможно??
 
mytarmailS:

Немного пред истории....

Начинал я с того что искал паттерны в истории по такому принципу :  

1) есть у нас текущая цена - пусть будет последних 20 свечей

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

Не совсем понятно? Вы берёте цены в виде OHLC для паттернов или их какие-то преобразования?

Дело в том, что если взять OHLC, как есть, то похожий паттерн, но отстоящий на 1000 пунктов выше или ниже от сравниваемого будет по евклидову расстоянию отличаться сильнее, чем совершенно не похожий паттерн, но отстоящий на 10 пунктов выше или ниже от сравнивемого. Причём разница будет на два порядка, а соответственно и ошибка сравнения также будет двухпорядковая.

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