Прогнозирование цены с использованием Linear prediction

 

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

Как с ним работать:

1-    Массив цен из МТ сохраняем в файл с расширением *.csv

2-   Открываем файл  Linear prediction.xmcd в Mathcad13

3-      В верхнем левом углу щелкаем правой кнопкой на значок приравненный к массиву М. В контекстном меню выбираем Свойства =>     Обзор и указываем на файл *.csv с ранее сохраненными ценами.

4-      Изменяя переменную popravka от 0 до n мы сдвигаем начало экстраполяции на n периодов в прошлое.

5-      На графике ниже появятся три кривые: красная – значения цен из файла; черная – предсказанные (экстраполированные)  значения цен; синяя – реальные цены при сдвиге экстраполяции в прошлое.

Как это выглядит:

В красный кружок обведена функция осуществляющая экстраполяцию.

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

Да, и самое главное, я не рассчитываю на то что индикатор будет показывать цены с точностью до пункта и минуты. Меня интересует направление цены на ближайшие 5-10 периодов.  Даже в этом варианте индикатор неплохо справляется с подобной задачей, только иногда предательски врет.


Файлы:
 

Не подскажете, какой метод экстраполяции используется в функции predict?

 
lea >>:

Не подскажете, какой метод экстраполяции используется в функции predict?

Точно казать не могу. Но в справке по Mathcad для функции predict (Linear prediction) написано следующие:

Linear prediction can be used for extrapolation, but should not be confused with linear or polynomial extrapolation. This algorithm is useful when data is smooth and oscillatory, though not necessarily periodic.

перевод (PROMT):

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

 

 

Забыл отметить: при сохранении истории из МТ, в файле должно быть сохранено баров  не меньше чем число  predict(K,5000,200). В принципе это значение можно менять как душе угодно, но я опытным путем определил для себя значения от 1500 до 5000.

 
Если кому интересно, неплохая книга "The Theory of Linear Prediction"
 
lea писал(а) >>

Не подскажете, какой метод экстраполяции используется в функции predict?

метод Бурга

PS: Есть несколько не сильно отличных модификаций друг от друга. Одну из них можно посмотреть в "открытом коде m-файла" в MathLAB. Кажется так и называется (на вскидку по памяти burg.m)

 
salewin писал(а) >>

Забыл отметить: при сохранении истории из МТ, в файле должно быть сохранено баров не меньше чем число predict(K,5000,200). В принципе это значение можно менять как душе угодно, но я опытным путем определил для себя значения от 1500 до 5000.

Вы немного перепутали:

1 параметр, это временной ряд (какой то длины)

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

3 параметр, это прогнозная длина

PS: довольно трудно идентифицировать AR для котировок, не легкое это дело :о)

 
grasn >>:

Вы немного перепутали:

1 параметр, это временной ряд (какой то длины)

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

3 параметр, это прогнозная длина

PS: довольно трудно идентифицировать AR для котировок, не легкое это дело :о)

Абсолютно с вами согласен GRASN. 

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

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

Думаю на лицо явная корреляция, а вот чего и с чем ума не приложу.

 

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


А потом посмотрите на результат. Думаю, станет понятно, что "удачно" оценить параметры модели:

  • длину выборки (это так же важно, как и порядок)
  • порядок модели

задача просто не простая.


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

Метод хороший, и сдвиг на отсчет вперед, не особо меняет форму прогнозного сигнала. Это видимо и объяснят стабильную форму . Но если у Вас форма стабильна всюду, то тут какая то ошибка. Лучше проверить лишний раз. Или я не очень понял о чем Вы написали :о)

 
salewin писал(а) >>

Про экстраполяцию написано много... Прошу всех желающих высказаться, а также предложить свои усовершенствования.

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

Для ВР типа рыночних НЕ выполняется условие стационарности! Это основная причина по которой на рынке не работают линейные/нелинейные АР-модели всех порядков, фурье-анализ и "тривиальные" нейро-сетки (тривиальные, в плане входных данных), а сам Рынок - является эффективным.

P.S. Если уж быть точным, то на рыночных ВР всё же имеются очень СЛАБЫЕ стационарные корреляции, эксплуатация которых - тонкая кухня и профитность ТС на их основе едва дотягивает до долей комиссии ДЦ (в среднем). Но это лучшее, что есть на сегодня и уж точно, задача выявления этих закономерностей не сводится к скармливанию ценовых баров в линейную АР-модель.

 

добавлю к сказанному Сергеем еще один важный факт. Метод Бурга, как и другие линейные методы предполагают, что ряд стационарный, и для приведения к нему, используется преобразование вида x(n)-x(n-1). Такой ряд действительно является близким к стационарному, т.е. при любом временном сдвиге распределения вероятности совпадают (в этом легко убедиться). Такие ряды обладают этим свойством, но тут возникает проблема другого рода :о) Уж и не помню всех математических подробностей, но смысл очень простой, если распределения вероятностей исходного ряда и прогнозного не совпадают, то прогнозировать просто бессмысленно. И наоборот, прогноз возможен в статистическом смысле, если такое совпадение распределений присутствует.


Так вот, проблема то не только в том, что ряд не стационарный (это всего лишь небольшие затруднения), а в том, что котировочный процесс просто не является AR процессом "по определению" (совершенно разные распределения). Вообще никаким AR процессом. Природа этого процесса совершенно другая.



PS: Дописка. Сказанное совершенно не означает, что AR процесс может быть только стационарным, вовсе нет!!! Он может быть и нестационарным совершенно легко. :о)

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