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))


28 Комментариев
  • 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
      • SergeyJu
        16 ноября 2024, 09:01
        Riskplayer, и вот так всегда. 

      • ezomm
        16 ноября 2024, 20:06
        Riskplayer, всяка ЦЗ для своей задачи. Само трудно ЦЗ сделать манипуляцию… типа зайти за край фрактала.Типично малый тайм заходит в манипуляцию одной свечей, но в большем тайме это делает тень. Причем тень может заходить за край фрактала во 2й волне … ниже 1й волны, что очень раздражает и нервирует волновиков, торгующих график в линию, а не свечной. Волновики тоже лентяи .Они не видят игры в большом объеме. Они догматы и любят правила, придуманные Эллиотом. Но Эллиот тоже человек и имеет право на ошибку.
  • Дмитрий Овчинников
    15 ноября 2024, 20:35
     Проблема только в том, что в реальности
    … существуют комиссии брокера и биржи. и проскальзывание.
    • Виктор Громов
      15 ноября 2024, 20:37
      Дмитрий Овчинников, и деградация коэф. шарпа)))) зайду с козырей
      • Дмитрий Овчинников
        15 ноября 2024, 20:50
        Виктор Громов, 
        надо строить кроме графика эквити еще график коэф. шарпа, наблюдать за его деградацией. теоретически я согласен с вами, он должен деградировать.
        • Виктор Громов
          15 ноября 2024, 20:52
          Дмитрий Овчинников, выходит хорошая система такая, где шарп деградирует медленнее. 
    • 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х свечей. 

  • ezomm
    16 ноября 2024, 20:40
    Середина тайма, периода работает в Ишимоку. Этим и силен этот индюк. Не надо брать середину свечи. Полезно понимать форму свечи и расклад объема по телу свечи.Свеча может быть или началом, или серединой или окончанием тренда.Тренд из 3х шагов. Середина тренда важнее просто середины свечи.
    Также важно форма графика.Лучший график Хейкен Аши.Там каждая свеча — приседающий — на половину размаха. Типа тень показывает направление тренда.К этому графику надо добавить правило новой перемены -рендж график.



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

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

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


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

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

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

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