Riskplayer
Riskplayer личный блог
15 ноября 2024, 19:49

О применимости или неприменимости ARIMA

Пока рыночек пилит, мы тоже попилим чего-нибудь. Данная статься написана по мотивам главы 3 «Time-Series Analysis» из книги «Machine trading» E.Chan.
Все расчеты сделаны на matlab.
Первым делом, берем 5-минутки нашего любимого Сбербанка и разделим на две набора данных, первый набор 01.01.2020-01.01.2024 для тренировки нашей модели ARIMA(p, 0, 0), а второй набор с 01.01.2024г. — 08.11.2024г. для проверки модели.
Для тренировки модели используется средняя цена, т.е. 0.5*(High + Low). Для нахождения оптимального числа p (лаг) на тренировочных данных используем цикл, где перебираются p от 1 до 60 и определяем для каждого лага Байесовский информационный критерий (BIC). Оптимальный лаг будет иметь минимальный BIC.
В нашем случае получилось, что оптимальное p = 41 с такими параметрами: 

 

ARIMA(41,0,0) Model (Gaussian Distribution):
 
                   Value       StandardError    TStatistic      PValue   
                ___________    _____________    __________    ___________

    Constant      0. <a name="cut"></a> 0044119       0.003667         1.2031         0.22893
    AR{1}            1.2416     0.00038211         3249.4               0
    AR{2}          -0.31171     0.00067491        -461.86               0
    AR{3}          0.050585      0.0010332         48.961               0
    AR{4}          0.022658      0.0012971         17.468      2.4899e-68
    AR{5}          -0.05493       0.001379        -39.833               0
    AR{6}           0.04739      0.0014496         32.692     2.0322e-234
    AR{7}         -0.018811      0.0015392        -12.221      2.3964e-34
    AR{8}          0.021583      0.0016458         13.114      2.7354e-39
    AR{9}          0.014553      0.0017273         8.4251      3.6049e-17
    AR{10}         0.028344      0.0016042         17.669      7.3227e-70
    AR{11}        -0.016945       0.001519        -11.155      6.7466e-29
    AR{12}        0.0011352      0.0011099         1.0228         0.30639
    AR{13}        -0.014298     0.00072126        -19.823      1.8809e-87
    AR{14}        -0.013205     0.00091651        -14.408      4.6262e-47
    AR{15}        -0.005481       0.001332        -4.1149      3.8736e-05
    AR{16}       -0.0060875      0.0013819        -4.4053      1.0565e-05
    AR{17}         -0.00308      0.0015478        -1.9899        0.046604
    AR{18}         0.022897      0.0015615         14.664      1.0998e-48
    AR{19}      -0.00057571       0.001496       -0.38484         0.70036
    AR{20}        0.0074662      0.0014159         5.2731      1.3415e-07
    AR{21}        -0.024364       0.001357        -17.954      4.4415e-72
    AR{22}         0.032438      0.0012885         25.175     7.5672e-140
    AR{23}        -0.015657      0.0010254        -15.269      1.2215e-52
    AR{24}        0.0031435      0.0008982         3.4998      0.00046566
    AR{25}       -0.0036452      0.0010939        -3.3323      0.00086145
    AR{26}        0.0036641      0.0014248         2.5717        0.010121
    AR{27}        -0.018374      0.0015304        -12.006      3.2975e-33
    AR{28}         0.013843      0.0014963         9.2514      2.2154e-20
    AR{29}        -0.018975      0.0015305        -12.398      2.6793e-35
    AR{30}         0.028452      0.0012616         22.553     1.2418e-112
    AR{31}        -0.019905      0.0013221        -15.055      3.1791e-51
    AR{32}         0.021178      0.0014053          15.07      2.5648e-51
    AR{33}        -0.018781      0.0015817        -11.874       1.625e-32
    AR{34}        0.0053725      0.0016047          3.348      0.00081383
    AR{35}        -0.020494      0.0013739        -14.916      2.5938e-50
    AR{36}         0.030063      0.0015222          19.75      8.0827e-87
    AR{37}       -0.0025714      0.0016767        -1.5336         0.12512
    AR{38}       -0.0039149      0.0018077        -2.1657        0.030333
    AR{39}        0.0058523      0.0016222         3.6076      0.00030904
    AR{40}        -0.034314      0.0015485        -22.159     8.5091e-109
    AR{41}          0.02384     0.00098174         24.284     2.9093e-130
    Variance        0.13025     3.7647e-05         3459.8               0

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

О применимости или неприменимости ARIMA
Вот такой красивый график получился на проверочном наборе данных ( OOS), т.е. данные с 01.01.2024г. Проблема только в том, что в реальности, такое торговать не получится, т.к. предполагается, что сделки идут по средним ценам, тогда как после формирования бара вряд ли можно войти по средней цене.

Ну и сам код в конце.
data = readtimetable(..\\sber5min.csv');
LOGL = zeros(60,1);
P = zeros(size(LOGL,1),1);
data.mid = (data.High + data.Low)*0.5;
fullset = timerange('2020-01-01 00:00:00','inf'); 
trainset = timerange('2020-01-01 00:00:00','2024-01-01 00:00:00');
testset = timerange('2024-01-01 00:00:00','inf');

data = data(fullset, :);

for p = 1:length(P)
    model = arima(p,0,0)
    [~,~,logL] = estimate(model,data.mid(trainset))
    LOGL(p) = logL;
    P(p) = p;
end

[~,bic] = aicbic(LOGL, P+1, length(data.mid(trainset)));
[~,pMin] = min(bic)
model = arima(pMin,0,0)
fit = estimate(model, data.mid(trainset));
yF = nan(size(data,1),1);
data = addvars(data,yF);
for t = size(data.mid(trainset)):size(data.mid)
    [y,~] = forecast(fit, 1, 'Y0', data.mid(t - pMin + 1:t));
    data.yF(t) = y(end);
end
data.deltaYF = data.yF - data.mid;
data.pos = zeros(size(data,1),1);
data.pos(data.deltaYF > 0) = 1;
data.pos(data.deltaYF < 0) = -1;
diff1 = diff(data.mid);
diff1(size(diff1,1)+1) = 0;
data = addvars(data, diff1);
data.proc_chg = data.diff1./data.mid;
data.proc_profit = data.proc_chg.*data.pos;
data.cum_p = cumsum(data.proc_profit);
plot(data.cum_p(testset))


25 Комментариев
  • bohemian rhapsody
    15 ноября 2024, 19:58
    Проблема только в том, что в реальности, такое торговать не получится
  • SergeyJu
    15 ноября 2024, 20:29
    ARIMA — система авторегрессии (AR) и скользящего среднего (MA), да еще и с наворотом I. 
    Вижу к-ты авторегрессии. А q=0 и I=0. Это просто подгонка к-тов авторегрессионного фильтра? 
    Если взять цены закрытия и заложить транзакционные издержки, что-то вообще получится, интересно. Не пробовали, или не работает.

      • А. Г.
        16 ноября 2024, 02:01
        Riskplayer, да на дневных (H+L)/2  можно «идеальную систему» построить и без ARIMA, а гораздо проще

        www.howtotrade.ru/phorum/read.php?3,196243
        • slavazavr
          20 июня 2025, 01:11
          А. Г., Добрый вечер, прочитал статью и не совсем понял условия системы, там же получаются взаимо исключающие условия, можете более детально рассказать ?
      • SergeyJu
        16 ноября 2024, 09:01
        Riskplayer, и вот так всегда. 

      • ezomm
        16 ноября 2024, 20:06
        Riskplayer, всяка ЦЗ для своей задачи. Само трудно ЦЗ сделать манипуляцию… типа зайти за край фрактала.Типично малый тайм заходит в манипуляцию одной свечей, но в большем тайме это делает тень. Причем тень может заходить за край фрактала во 2й волне … ниже 1й волны, что очень раздражает и нервирует волновиков, торгующих график в линию, а не свечной. Волновики тоже лентяи .Они не видят игры в большом объеме. Они догматы и любят правила, придуманные Эллиотом. Но Эллиот тоже человек и имеет право на ошибку.
  • Дмитрий Овчинников
    15 ноября 2024, 20:35
     Проблема только в том, что в реальности
    … существуют комиссии брокера и биржи. и проскальзывание.
    • SergeyJu
      15 ноября 2024, 20:37
      Дмитрий Овчинников, обычно такие простые заходы по книжке вообще не работают.
      • Дмитрий Овчинников
        15 ноября 2024, 20:48
        SergeyJu, 
        только по книжке как раз такие заходы и работают. то есть теоретически, если не вдаваться в нюансы. 
  • Константин Анохин
    15 ноября 2024, 21:09
    Хм… зачем изучать стратегию с нереальным входом по середине бара?
  • Replikant_mih
    15 ноября 2024, 21:12

    О, интересные посты подъехали).

    А чё правда какая-то средняя цена, а не клоуз?

     

    >> такое торговать не получится

    Что-то мне подсказывает, что проблема тут не в средней цене, по которой то ли дадут то ли не дадут и т.д., там ещё какой-то bias заложен явно, ARIMA ж это цикличность, трендовость, шум — график цены вот так легко на эти компоненты не раскладывается, чтобы модель вот такую OOS эквити просто так выдавала.

    • ezomm
      16 ноября 2024, 20:23
      Replikant_mih, эквити хороша когда сделка в середину свечи после ее рисования?
  • svgr
    15 ноября 2024, 23:55
    Так и надо сразу строить проверочную на следующей свече, в чём сложность?
    • ezomm
      16 ноября 2024, 20:24
      svgr, можно до проверяться до окончания тренда? А? Почему просто не жарить в конец коррекции? В 5ю точку?
  • svgr
    16 ноября 2024, 00:02
     Со стороны незнакомого с подходом выглядит как:
    переложили гадание о направлении цены на веру в волшебные коэффициенты модели, которая вывезет. Но зерна в них нет, просто в другую обёртку завернули 50/50.
    Ну, и сразу не верится, что в (p, 0, 0) что-то можно новое получить, отличное от шума.
    Если по какой-то идее модель составить, да разности брать не нулевого порядка, то может быть что-то и зацепится.
    • ezomm
      30 ноября 2024, 16:44
      svgr, идея элементарна. Трудно увидеть смысл в одной свече. Солдат хоть и красив, но если это двойной зигзаг, то это не импульс (не тренд). Для смысла надо не меньше 5 свечей. Иногда марибоза делает поглощение и рисует пин бар из 2х свечей. 

  • Кирилл Гудков
    16 ноября 2024, 15:29
    В таком тесте подглядывание на целый бар, еще и M5. При подглядывании можно собрать все деньги мира при любой стратегии, арима-шмарима для этого не нужна. Есть только один нюанс, и вы его вроде поняли. Непонятно только зачем весь остальной текст.
      • Кирилл Гудков
        18 ноября 2024, 12:34
        Riskplayer, 
        тогда как после формирования бара вряд ли можно войти по средней цене

        Это и есть подглядывание. Это «вряд ли можно» имеет огромную разницу с «точно можно».

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


        Интуитивно кажется невелика разница, на деле даже знание high-low текущей свечи в момент ее открытия даст преимущество, которое весомее любой стратегии на OHLC. Точное знание, а не какой-то там прогноз.

          • Кирилл Гудков
            18 ноября 2024, 12:46
            Riskplayer, если ваша стратегия превращается в тыкву при использовании корректной модели исполнения — то ловить нечего в этой стратегии, а не в лимитном исполнении. Это я пытаюсь до вас донести, но видимо труды напрасны.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн