Кто может на словах объяснить, как устроена ARIMA(без сложных формул)? У меня есть желание и возможность сделать индикатор на этом алгоритме.

 
forexman77:
Собственно вопрос в названии темы.
Смысл вопроса не понятен. Во-первых, без формул вам всё равно не обойтись никак. Во-вторых, если вы даже не знаете суть этой модели, то откуда взялось желание сделать индикатор и откуда уверенность, что получится?
 
Sergey Vradiy:
Смысл вопроса не понятен. Во-первых, без формул вам всё равно не обойтись никак. Во-вторых, если вы даже не знаете суть этой модели, то откуда взялось желание сделать индикатор и откуда уверенность, что получится?

Много раз мне доводилось видеть математические функции в описании. Как правило с использованием математических символов некоторые из них понял, а другие нет.

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

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

И потом вычислить c,b,a, для получения значений самой регрессии.

Вот кто-нибудь смог бы мне объяснить на таком уровне, как устроена ARIMA. То сделать индикатор мне будет не слишком сложно, могу на MQL4,5.

 
forexman77:

Много раз мне доводилось видеть математические функции в описании. Как правило с использованием математических символов некоторые из них понял, а другие нет.

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

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

И потом вычислить c,b,a, для получения значений самой регрессии.

Вот кто-нибудь смог бы мне объяснить на таком уровне, как устроена ARIMA. То сделать индикатор мне будет не слишком сложно, могу на MQL4,5.

Никакого отношения к линейной регрессии Ваши вычисления не имеют.


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

Но это еще не все. 

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

Поэтому дело в формулах а в понимании того, что Вы делаете.

 
СанСаныч Фоменко:

Никакого отношения к линейной регрессии Ваши вычисления не имеют.


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

Но это еще не все. 

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

Поэтому дело в формулах а в понимании того, что Вы делаете.

Поэтому и обратился к форуму, чтобы понять как устроена ARIMA. В описаниях все на формулах. Читаю и пока понял что нужны данные:

а -коэффициент (постоянный множитель);

е - ошибка прогноза.

А вот как их получают не понятно. Они есть в описании автокорреляции первого и второго порядка.

Ошибка прогоноза предполагаю, что это разница между фактической ценой и прогнозируемым значением линейной регрессии?

 

Посмотрите это, мб поможет в понимании

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


 
Maxim Dmitrievsky:

Посмотрите это, мб поможет в понимании

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


Мне больше для "практики" нужно, давно хотел сделать.
 

Нашел описание авторегрессии первого порядка: берется один ценовой ряд и второй со сдвигом на один бар. Рассчитываются коэффициенты и подставляются в формулу, для получения прогноза.

Сделал индикатор на этой основе. Вопрос что такое авторегрессия второго порядка?

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

Файлы:
 
forexman77:

Нашел описание авторегрессии первого порядка: берется один ценовой ряд и второй со сдвигом на один бар. Рассчитываются коэффициенты и подставляются в формулу, для получения прогноза.

Сделал индикатор на этой основе. Вопрос что такое авторегрессия второго порядка?

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

просто добавляется еще один влияющий фактор, ценовой бар со сдвигом на 2 бара, и суммируется с первым сдвигом

Yi = a0 + ai*Yi-1+Ɛi - первого порядка

Yi = a0 + ai*Yi-1 + ai*Yi-2 +Ɛi - второго

Yi = a0 + ai*Yi-1 + ai*Yi-2 + ai*Yi-3 +Ɛi - третьего

.....

авторегрессия 1-го порядка всегда эквивалентна приращением цен с тем же сдвигом

Про корреляцию - скорее всего имеется в виду коэффициент детерминации R^2, чем меньше дисперсия между построенным рядом и регрессионной моделью тем она лучше приближает котировки, ну можно и коэффициент корреляции смотреть.

Т.е. после этих манипуляций получается AR(p) модель, где p - порядок модели

что бы получить ARMA(p,q) нужно сложить AR(p) авторегрессионную модель с MA(q), где q это порядок модели, или период мувинга. ARMA используется для прогнозирования стац. рядов

А на следующем шаге уже ARIMA для нестационарных рядов. ARIMA(p,d,q) - для этого еще нужно продифференцировать исходный временной ряд, т.е., грубо, сделать из него стационарный и потом применить к нему ARMA(p,q)

На этом канале все от и до разжевано.

https://www.youtube.com/playlist?list=PLu5flfwrnSD6wzkzgs4TocGL5GOXmEjZE


Анализ временных рядов (теория) - YouTube
Анализ временных рядов (теория) - YouTube
  • www.youtube.com
Модели временных рядов, стационарные и нестационарные ряды динамики, процессы авторегрессии и скользящего среднего, AR, MA, ARIMA, построение прогнозов и дру...
 

Вот текст индикатора (правда очень старый) на основе ar.


// шшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшш
// Версия от 25.06.2012
// щщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщщ
#property copyright "© 2010 Bernd Kreuss"
// http://www.forexfactory.com/showthread.php?t=260422
// Здесь исходный текст
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_width1 2
#property indicator_color2 Aqua
#property indicator_width2 1
#include <mt4R.mqh>

extern   int      order    =  200;
extern   int      back     =  500;
extern   int      ahead    =  2;

         bool     First    =  true;
         int      R;
double buf_prediction[];
double buf_prediction_const[];
// шшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшш
int init()
{
   SetIndexBuffer (0, buf_prediction);
   SetIndexStyle  (0, DRAW_LINE);
   SetIndexShift  (0, ahead);

   SetIndexBuffer (1, buf_prediction_const);
   SetIndexStyle  (1, DRAW_LINE);
   SetIndexShift  (1, ahead);

   R     = RInit("G:/Program Files/R-2.15.3/bin/x64/Rterm.exe --no-save", 2);
   Comment("history: " + back + " bars, method: OLS, order: " + order);
}
// шшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшш
int deinit()
{
   RExecute(R, "q");
   RDeinit(R);
}
// шшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшш
int start()
{
   double      hist[];
   double      pred[];
   int         i;
   
   if (RIsBusy(R))
   {
      // Последний RExecuteAsync() все еще не закончил - ничего не делать.
      return(0);
   }
   
   if (RGetInteger   (R, "as.integer(exists('model'))") == 1)
   {
      // Здесь существует модель (переменная установлена). 
      // Это означает, что предыдущий старт  RExecuteAsync() завершился. 
      // Теперь можно предсказать от модели и нарисовать предсказание.
      RAssignInteger (R, "ahead", ahead);
      RExecute       (R, "pred <- predict(model, n.ahead=ahead)$pred");
      ArrayResize    (pred, ahead);
      RGetVector     (R, "rev(pred)", pred, ahead);   // Обратная упорядоченность pred
      if (First)                                      // Добавил для проверки прогноза при запуске.
      {
         for (i=0; i<ahead; i++)
         {
            buf_prediction_const[i] = pred[i];
         }      
         First       =  false;
      }
      for (i=0; i<ahead; i++)
      {
         buf_prediction[i] = pred[i];
      }
   }
   
   // Сделать (новое) предсказание
   // Передать некоторую историю в  R   
   ArrayResize       (hist, back);
   for (i=0; i<back; i++)
   {
      hist[i]     =  Close[i];
   }
   RAssignVector     (R, "hist", hist, ArraySize(hist));
   RExecute          (R, "hist <- rev(hist)");  // Обратная упорядоченности hist
   
   // crunch the numbers in the background and return from the start() function
   // RIsBusy() на следующем тике скажет нам когда он закончит.
   RAssignInteger    (R, "ord", order);
   RExecuteAsync     (R, "model <- ar(hist, aic=FALSE, order=ord, method='ols')");
   return(0);   
}
//    шшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшшш


В отмеченной строке меняете название функции с ar на ARIMA. Дописываете параметры и вперед. Предсказываете.

Кстати меняете несколько символов и получаете индикатор, предсказание по которому ведется по любому из алгоритмов, доступных в R.

Индикатор был в кодобазе, 7500 просмотров. Текст индикатора взял из собственного архива.

 
Спасибо! Если удастся разобраться сделаю индикатор и выложу здесь.