Третья часть
Четвертая часть
Пятая часть
Шестая часть
Первым делом, давайте визуализируем результаты нашей торговли, так как в графическом виде информация воспринимается намного лучше. Также нанесем на график на график наши индикаторы.
Для этого воспользуемся функцией chart.Posn(). Она создает четкую и информативную визуализацию эффективности вашей торговой системы в ходе моделирования.
chart.Posn(portfolio.st, Symbol = symbols,
TA = "add_SMA(n = 7, col = 4); add_SMA(n = 21, col = 2)")
Подробную статистику по торговле можно вывести с помощью следующего кода:
# Статистика торговли
tstats <- tradeStats(portfolio.st)
kable(t(tstats), format = "simple", caption = "Стратегия пересечения двух скользящих средних")
При этом результаты выводятся в виде таблицы непосредственно в консоль R:
Table: Стратегия пересечения двух скользящих средних
SBER
------------------- -------------
Portfolio Port.CrossMA
Symbol SBER
Num.Txns 75
Num.Trades 37
Net.Trading.PL 5384
Avg.Trade.PL 105.9189
Med.Trade.PL -72
Largest.Winner 2380
Largest.Loser -937
Gross.Profits 10631
Gross.Losses -6712
Std.Dev.Trade.PL 668.7483
Std.Err.Trade.PL 109.9415
Percent.Positive 43.24324
Percent.Negative 56.75676
Profit.Factor 1.58388
Avg.Win.Trade 664.4375
Med.Win.Trade 383.5
Avg.Losing.Trade -319.619
Med.Losing.Trade -242
Avg.Daily.PL 105.9189
Med.Daily.PL -72
Std.Dev.Daily.PL 668.7483
Std.Err.Daily.PL 109.9415
Ann.Sharpe 2.514265
Max.Drawdown -3582
Profit.To.Max.Draw 1.503071
Avg.WinLoss.Ratio 2.078842
Med.WinLoss.Ratio 1.584711
Max.Equity 5749
Min.Equity -1689
End.Equity 5384
Здесь можно просмотреть все основные результаты тестирования. Например, в нашем случае всего было совершено 75 сделок, доля прибыльных трейдов (Percent.Positive) составила 43,2%, общая прибыль (Net.Trading.PL) составила 5384 рублей.
Profit factor, то есть результат отношения общего количества всех сделок, принесших прибыль, к сумме убыточных торговых операций за определенный временной интервал, равен 1,58. Он близок к единице, поэтому результат торговли можно считать практически нулевым.
Далее можно вывести классические графики, отражающие эффективность торговой системы во времени: совокупная прибыль (cumulative return), дневная прибыль (daily return) и просадка (Drawdown).
rets <- PortfReturns(Account = account.st)
rownames(rets) <- NULL
charts.PerformanceSummary(rets, colorset = bluefocus)
Для тех, кто хочет подробно изучить работу торговой системы, можно вывести таблицу всех сделок. Она, как правило, имеет большой размер и включает множество показателей, поэтому ее целесообразно сохранить в отдельном файле в формате html, и позже просмотреть в браузере. Это можно сделать с помощью следующего кода:
pts <- perTradeStats(portfolio.st, Symbol = symbols)
kable(pts, booktabs = TRUE, caption = symbols)
kable(pts, format = "simple")
pts %>%
kable() %>%
kable_styling() %>%
save_kable(file = "table1.html", self_contained = T)
Ниже на скриншоте приведен фрагмент данной таблицы.
Разберем подробнее показатели, которые включаются в таблицу всех сделок:
Start - временная метка POSIXct начала торговли;
End - временная метка POSIXct окончания торговли;
Init.Qty- количество ценных бумаг при инициации сделки;
Init.Pos - размер позиции после инициации сделки;
Max.Pos - максимальный размер открытой позиции;
End.Pos - размер позиции, оставшейся после закрытия сделки;
Closing.Txn.Qty - количество ценных бумаг, закрывающее сделку;
Num.Txns - количество комиссий, включенных в сделку;
Max.Notional.Cost - максимальная условная инвестиционная стоимость этой сделки;
Net.Trading.PL - чистая торговая прибыль/убыток;
MAE - максимальный плавающий убыток, который был во время удержания позиции;
MFE - максимальная плавающая прибыль, которая была во время удержания позиции;
Pct.Net.Trading.PL - чистая торговая прибыль/убыток в процентах от максимальной условной инвестиционной стоимости этой сделки;
Pct.MAE - MAE в процентах;
Pct.MFE - MFE в процентах;
tick.Net.Trading.PL - чистая торговая прибыль/убыток в тиках;
tick.MAE - MAE в тиках;
tick.MFE - MFE в тиках;
duration - difftime, описывающий продолжительность сделки, в секундах.
Можно вывести основные совокупные показатели эффективности стратегии:
tab.perf <- table.Arbitrary(rets,
metrics=c(
"Return.cumulative",
"Return.annualized",
"SharpeRatio.annualized",
"CalmarRatio"),
metricsNames=c(
"Совокупный доход",
"Годовая прибыль",
"Годовой коэффициент Шарпа",
"Коэффициент Кальмара"))
kable(tab.perf, format = "simple")
SBER.DailyEqPL
-------------------------- ---------------
Совокупный доход 0.0542655
Годовая прибыль 0.0106504
Годовой коэффициент Шарпа 0.5330113
Коэффициент Кальмара 0.3015005
Таким образом, общая прибыль за период тестирования составила 5,43% от депозита, а средняя годовая прибыль - 1,06%.
Можно также посмотреть показатели рисков стратегии:
# Показатели рисков
tab.risk <- table.Arbitrary(rets,
metrics=c(
"StdDev.annualized",
"maxDrawdown",
"VaR",
"ES"),
metricsNames=c(
"Annualized StdDev",
"Max DrawDown",
"Value-at-Risk",
"Conditional VaR"))
kable(tab.risk, format = "simple")
SBER.DailyEqPL
------------------ ---------------
Annualized StdDev 0.0199816
Max DrawDown 0.0353246
Value-at-Risk -0.0017052
Conditional VaR -0.0018119
Поскольку уровень прибыльности очень маленький, то и ожидаемые потери незначительные.
Вывод основной информации по счету в графическом виде:
# Информация по счету в графическом виде
a <- getAccount(account.st)
xyplot(a$summary, type = "h", col = 4)
Кривая эквити:
equity <- a$summary$End.Eq
plot(equity, main = "Equity Curve")
Распределение прибылей:
Комментариев нет:
Отправить комментарий