рекомендации

пятница, 19 февраля 2021 г.

Тестирование торговых стратегий на исторических данных с помощью Quantstrat. Часть 9. Тестирование нескольких активов.

Первая часть
Вторая часть
Третья часть
Четвертая часть
Пятая часть
Шестая часть
Седьмая часть

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

Давайте теперь возьмем три акции из разных секторов, например ВТБ, Роснефть и НЛМК. Непосредственно в коде стратегии необходимо отредактировать всего одну строку:

 

# Наши активы, которыми мы торгуем

symbols <- c("VTBR", "ROSN", "NLMK")

 

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

 

# Визуализация результатов тестирования

for(symbol in symbols) {

  filename <- paste(symbol, ".tiff")

  chart.Posn(portfolio.st, Symbol = symbol, 

        TA = "add_SMA(n = 7, col = 4); add_SMA(n = 21, col = 2)")

}

 

 

 

Статистические показатели тестирования выводятся с помощью той же команды:

 

# Статистика торговли

tstats <- tradeStats(portfolio.st)

kable(t(tstats), format = "simple", caption = "Стратегия пересечения двух скользящих средних")

 

Table: Стратегия пересечения двух скользящих средних

 

                     NLMK           ROSN           VTBR         

-------------------  -------------  -------------  -------------

Portfolio            Port.CrossMA   Port.CrossMA   Port.CrossMA 

Symbol               NLMK           ROSN           VTBR         

Num.Txns             56             71             65           

Num.Trades           28             35             32           

Net.Trading.PL       5495.000       9939.000       -1298.701    

Avg.Trade.PL         216.25000      161.25714      -19.97719    

Med.Trade.PL         -41.000        -404.000       -20.113      

Largest.Winner       2757           6585           0            

Largest.Loser        -750.00        -1822.00       -20.55       

Gross.Profits        9774.500       24197.000      -153.975     

Gross.Losses         -3719.500      -18553.000     -485.295     

Std.Dev.Trade.PL     771.2340940    1794.3742370   0.6113361    

Std.Err.Trade.PL     145.74954      303.30460      0.10807      

Percent.Positive     50             40             25           

Percent.Negative     50             60             75           

Profit.Factor        2.6279070      1.3042096      0.3172812    

Avg.Win.Trade        698.17857      1728.35714     -19.24687    

Med.Win.Trade        438.0000       1000.5000      -19.5715     

Avg.Losing.Trade     -265.67857     -883.47619     -20.22062    

Med.Losing.Trade     -198.7500      -830.0000      -20.2405     

Avg.Daily.PL         216.25000      161.25714      -19.97719    

Med.Daily.PL         -41.000        -404.000       -20.113      

Std.Dev.Daily.PL     771.2340940    1794.3742370   0.6113361    

Std.Err.Daily.PL     145.74954      303.30460      0.10807      

Ann.Sharpe           4.451129       1.426613       -518.745772  

Max.Drawdown         -1819.000      -6715.000      -1299.301    

Profit.To.Max.Draw   3.0208906      1.4801191      -0.9995382   

Avg.WinLoss.Ratio    2.6279070      1.9563143      -0.9518437   

Med.WinLoss.Ratio    2.2037736      1.2054217      -0.9669475   

Max.Equity           6464           11409          0            

Min.Equity           -1537.000      -3277.000      -1299.301    

End.Equity           5495.000       9939.000       -1298.701    

 

Наибольшую прибыль показала Роснефть, но у нее также самая большая просадка, поэтому наибольший профит-фактор у НЛМК. В то же время ВТБ оказался убыточным.

 

Выведем также графики эффективности торговой стратегии, здесь вышеприведенные показатели можно посмотреть в графическом виде:

 

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

 

# Показатели эффективности портфеля

ret <- Return.calculate(equity, method = "log")

charts.PerformanceSummary(ret, colorset = bluefocus, 

                          main = "Strategy Performance")

 

Кривая эквити:

 

 

Комментариев нет:

Отправить комментарий