Гипотеза на базе Фурье - страница 11

 
equantis >>:

Точно, стоит оставить...

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

Синяя - цена

Красная - прогноз про программе с косинус-преобразованием с началом в 0

Лиловая - та же кривая, но рассчитанная от точки начала прогноза (100)

Зеленая - просто прогноз на базе кривой цены (пользовался встроенной функцией predict)



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

 
grasn писал(а) >>

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

Потратил почти месяц на разборки с ПФ и все впустую. Чего только не пытался предсказывать: и временные ряды, и скользящю средниюю, и индикаторы, и все результаты предсказаний были 50-50 (или около того).

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

На всякий случай опишу краткий алгоритм того, что делал:

  1. Брал тестовый набор данных, начинавшихся с номеров START = 1:FRAME
  2. Для каждого набора данных выбирал окно WIND (то есть, выборка производилась на диапазоне START:START+WIND)
  3. Для каждого окна делал косинус преобразование.
  4. Все результаты складывал в матрицу размером FRAME х WIND, где в столбцах были коэффициенты косинус-преобразования для каждой частоты, а в строках шли коэффициенты для одной частоты для каждого тестового набора данных
  5. Для каждого столбца с коэффициентами обучалась маленькая нейросеть, которая по четырем предыдущим значениям очень хорошо предсказывала грядущее изменения синусоиды на 1 бар. К нейросети обратился, так как AR-предсказание давало очень плохие результаты.

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

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

Возможно, данный результат будет полезен кому-то из математиков, но для задачи предсказания пары EURUSD он оказался бесполезным. Увы. Пока. )))

 
equantis >>:

Потратил почти месяц на разборки с ПФ и все впустую. Чего только не пытался предсказывать: и временные ряды, и скользящю средниюю, и индикаторы, и все результаты предсказаний были 50-50 (или около того).

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

На всякий случай опишу краткий алгоритм того, что делал:

  1. Брал тестовый набор данных, начинавшихся с номеров START = 1:FRAME
  2. Для каждого набора данных выбирал окно WIND (то есть, выборка производилась на диапазоне START:START+WIND)
  3. Для каждого окна делал косинус преобразование.
  4. Все результаты складывал в матрицу размером FRAME х WIND, где в столбцах были коэффициенты косинус-преобразования для каждой частоты, а в строках шли коэффициенты для одной частоты для каждого тестового набора данных
  5. Для каждого столбца с коэффициентами обучалась маленькая нейросеть, которая по четырем предыдущим значениям очень хорошо предсказывала грядущее изменения синусоиды на 1 бар. К нейросети обратился, так как AR-предсказание давало очень плохие результаты.

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

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

Возможно, данный результат будет полезен кому-то из математиков, но для задачи предсказания пары EURUSD он оказался бесполезным. Увы. Пока. )))

А я и не говорил, что будет чудо. Есть некоторые неясности:

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

я не уверен, что НС на 4 числах такого сложного ряда может хорошо предсказать будущее. Очень сомневаюсь. А если предсказывает, то почему такое сильное расхождение? И причем тут "синусоида". Что касается AR модели, то каждая кривулька, - это фактически AR процесс, очень близкий к нему по своим свойствам. Идентификация такой модели сложна, используется куча методов (как это не странно, более сложных, чем НС): разворот и прогноз назад, критерий Акиаке, "чемодан", авторегрессионные передаточные функции, критерии согласия и максимального правдоподобия (и их разновидности), взаимная корреляция, стохастическая аппроксимация,, фильтрация (на ней так же так же используется для идентификации моделей).


По крайне мере, идея ни чуть не хуже вашей. :о) Не сработало - значит не сработало, и такое бывает, мне искренне жаль потраченного вами времени, тут я не могу никак помочь его вернуть. Но, кстати вот тут https://forum.mql4.com/ru/24888/page9 на всякий случай предупреждал. В этой модели очень много тонкостей, о некоторых я скромно умолчал. Одна из таких тонкостей - бессмысленно предсказывать такой моделью один отсчет, просто бессмысленно. Вы просто не добьетесь нужной точности, причем никогда. Предсказывать нужно в "статистическом" смысле. Как то так, если литературно выражаться.


 

Grasn, anyway, огромное спасибо за идею! Процесс был приятный и времени не жаль)) А результат все равно еще будет!

grasn писал(а) >>

я не уверен, что НС на 4 числах такого сложного ряда может хорошо предсказать будущее. Очень сомневаюсь. А если предсказывает, то почему такое сильное расхождение? И причем тут "синусоида".

1. Если рассматривать изменение каждого коэффициента DCT, то как Вы писали, он очень похожа на некую "кривульку-синусоиду" (с частотой, соответствующей порядковому номеру коэффициента, особенно для колебаний с высокими частотами), которая со временем изменят свою амплитуду. Я пробовал использовать AR для прогнозирования "в лоб", примерно так, как это было сделано в Вашем примере на Маткаде.

Если рассматривать прогнозирование №ривулины" на 1 бар, то AR (по крайней мере я перепробовал все формулы, которые есть в Матлабе) дает очень неточные результаты, особенно для "кривулек-синусоид" с нечетными периодами (хотя, возможно, я перепробовал не все). В этом случае простая нейросеть (в Матлабе она реализована функцией newlind (кажется, это даже не нейросеть, а просто решатель набора линейных уравнений), при прогнозировании на 1 бал дает очень хорошие (визуально) результаты.

2. Прогноз по набору "кривулек" дает очень неплохой результат - из 50 баров она точно (почти точно) предсказывает 48 баров, сдвигая их на 1 позицию влево, ошибаясь только в 1 баре (не знаю почему) и в последнем (увы, собственно ради которого это все и делалось). По видимому "микроошибки" предсказания на каждой "кривулине" складываются при обратном преобразовании именно таким образом.

Я пробовал "обмануть" алгоритм, пытаясь спрятать последний бар внутрь тестового отрезка (делал простой сдвиг по кругу), но все равно, неправильными были именно эти последний и первый бары.

3. Кстати, пробовал предсказать не только close (как самый плохопресказуемый ряд), но и high/low/open, и разницу и даже минимумы-максимумы зигзага. (как пример ряда, с искаженной осью времени). Так как результат один и тот же, то вывод очевиден - "в лоб" такой метод только хорошо сдвигает N-2 бара влево на 1 бар, но не предсказывает forex-ряды.

Что касается AR модели, то каждая кривулька, - это фактически AR процесс, очень близкий к нему по своим свойствам. Идентификация такой модели сложна, используется куча методов (как это не странно, более сложных, чем НС): разворот и прогноз назад, критерий Акиаке, "чемодан", авторегрессионные передаточные функции, критерии согласия и максимального правдоподобия (и их разновидности), взаимная корреляция, стохастическая аппроксимация,, фильтрация (на ней так же так же используется для идентификации моделей).

Второй раз спасибо - много новых имен - есть еще чего еще пробовать!

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

Третий раз спасибо, попробуем в "статистическом" смысле))

 

рад был помочь. Желаю удачи :о)


Кстати, тут недалеко, в теме 'Тестирование Систем прогнозирования в реальном времени' постараюсь выложить прогноз на это методе. Если успею, то к понедельнику, если нет, то позже. Что называется "вливайтесь".

 
2 grasn:

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

2. Безусловно в случае долгосрочного прогнозирования определенного типа процессов AR будет лучше, хотя суперпозицию из двух синусоид можно вполне и нейросетью интерполировать.

3. Правильно ли я понял (где-то здлесь прочел Ваш пост), что для этого метода лучше прогнозировать ln(Xi/Xi-1) вместо самого Close?

 
equantis >>:

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

2. Безусловно в случае долгосрочного прогнозирования определенного типа процессов AR будет лучше, хотя суперпозицию из двух синусоид можно вполне и нейросетью интерполировать.

3. Правильно ли я понял (где-то здлесь прочел Ваш пост), что для этого метода лучше прогнозировать ln(Xi/Xi-1) вместо самого Close?

1. это надо пробовать

2. дело в том, что динамика по частотам не имеют периодов, это сложный процесс и совсем не суперпозиция синусоид

3. да, это один из вариантов приведения к стационарному ряду.

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