Блог им. SciFi

Бектест трендовой торговой системы на R

    • 23 апреля 2017, 14:59
    • |
    • SciFi
  • Еще
Берем два индикатора: SMA(40) и MACD со стандартными параметрами на дневном графике. Когда сигналы двух индикаторов совпадают, покупаем или продаем. Если не совпадают — ничего не делаем.

Протестируем эту стратегию на акциях Газпрома с 2015 по 2017 год с использованием R.

Бектест трендовой торговой системы на R

 

Результат: эквити, дневные доходности и просадка. Как видно, в результате такой торговли мы бы потеряли 35% счета.

Бектест трендовой торговой системы на R


Код на R:

# БЕКТЕСТ ТОРГОВОЙ СТРАТЕГИИ НА АКЦИЯХ GAZP

#system.time(source('D:/Dropbox/R/MACD-SMA-StrategyBacktest-GAZP.r'))
#Вызов этого скрипта

#install.packages("quantmod")
#install.packages("rusquant", repos="http://R-Forge.R-project.org")
#install.packages("PerformanceAnalytics")
#Установка пакетов. Она не требуется, если уже все установлено.

library(quantmod)
library(rusquant)
library(PerformanceAnalytics)
#Подключение библиотек

getwd()
#Получение рабочей папки

setwd("D:/Dropbox/R")
#Установка рабочей папки

#rm(list = ls())
#Очистка среды R от лишних переменных в памяти, если требуется

if ( dev.cur() ) {
  #dev.off()
}
#Очистка графика через выключение графического устройства R, если требуется

startDate <- as.Date('2015-01-01')
endDate <- as.Date('2017-04-23')
getSymbols('GAZP', src = 'Finam', period = 'day', from = startDate, to = endDate)

chartSeries(GAZP, subset = 'last 2 years', 
            TA = c(addMACD(), addSMA(n = 40, col = 'white')))

#Конструирование торгового правила
SMA40 <- SMA(Cl(GAZP), n = 40)
SMACross <- Cl(GAZP) - SMA40
sig1 <- ifelse(SMACross > 0, 1, -1)

MACD <- MACD(Cl(GAZP), fast = 9, slow = 16, signal = 14)
MACDCross <- MACD$macd - MACD$signal
sig2 <- ifelse(MACDCross > 0, 1, -1)

DataSet <- data.frame(Cl(GAZP), SMA40, SMACross, sig1, MACD$macd, MACD$signal, MACDCross, sig2)
DataSet <- DataSet[-c(1:40),]
colnames(DataSet) <- c('Price', 'SMA40', 'SMACross', 'sig1', 'MACD', 'MACD Signal', 'MACDCross', 'sig2')
DataSet$sig <- with(DataSet, ifelse(DataSet$sig1 * DataSet$sig2 > 0, DataSet$sig1, 0))
#Если оба сигнала совпадают, то их произведение будет больше 0, и тогда берем показание первого сигнала

bmkReturns <- dailyReturn(Cl(GAZP), type = "arithmetic")
bmkReturns <- bmkReturns[-c(1:40),]

ret <- bmkReturns*Lag(DataSet$sig, 1)
# Расчет доходностей, основанных на сигнале

#Оценка показателей системы
table.Drawdowns(ret, top=10)
table.DownsideRisk(ret)
charts.PerformanceSummary(ret)
# chart equity curve, daily performance, and drawdowns
★16
34 комментария
Мощное исследование
avatar
спасибо за скрипты, хорошее обучение Р.
avatar
лучше использовать hchart он удобнее хоть и чуть сложнее первое время.
avatar
evgen000, а чем лучше?
avatar
Подскажите, на какой платформе запускаются скрипты на  R?
Евгений Гуревич, практически на любой
Zweroboi, спасибо, конечно, но это не ответ. На квике будет работать?
Евгений Гуревич, квик это платформа? Ну если подключишь то конечно будет, что за вопрос )
Zweroboi, КВИК — это ИМЕННО ПЛАТФОРМА!
Счастливый Лузер, чего?
Zweroboi, того!
Евгений Гуревич, я под Windows использую RStudio — бесплатной версии мне хватает, есть и платная версия.
avatar
Если не обращать внимания на шлаковость тестируемой системы, то любопытно как пример того, что тестить очень легко на R с библиотеками). На Python такое сможете повторить? — посмотрел бы с утроенным интересом) 
avatar
Replikant_mih, мне пока R хватает
avatar
Replikant_mih, в чем конкретно шлаковость? как улучшить?
avatar
SciFi, Не, ну может это вопрос вкусов, а не качества, я не настаиваю, но я просто скептически отношусь к индикаторным стратегиям — не лежит душа у меня к ним. Какие-то они искусственные, ненастоящие)
avatar
Replikant_mih, бывают неиндикаторные стратегии?
avatar
Sergey Pavlov, Я под индикаторными стратегиями понимаю стратегии, в которых берется предустановленный или любой другой индикатор, определенный не в коде стратегии. Да, некоторые сущности, определяемые в самой стратегии тоже можно притянуть к понятию индикатора, но в моей системе координат то, что называю индикаторной стратегией я обозначил выше. В этой системе координат да, есть неиндикаторные стратегии.
avatar
Replikant_mih, так что же это такое в вашей системе координат?
avatar
Sergey Pavlov, Не буду рассказывать пока, мне все говорят, что много теории, мало практики, я расстроился и замкнулся в себе))). Щас курсы по Велс-лабу допройду и погнал изыскания проводить, по-любому по ходу рисёча какие-то стратегии или мысли по идеям стратегий буду озвучивать в запале энтузиазма).
avatar
Replikant_mih, проблема теории в том, что теория это развитие исходных предпосылок. Не более. Если исходные предпосылки не имеют отношения к трейдингу, то все стройные правильно сделанные выводы можно выкинуть на помойку. Практика позволяет проверить, какие из предпосылок более-менее годны, а какие надо выкинуть. Если идти долго теоретически, то время будет потеряно. Нужно двигаться этапами. Немного теории, немного практики, поьом снова теория и опять практика. Потом непрерывная практика и параллельно непрерывная теория.
avatar
Sergey Pavlov, Я согласен! Я с этим не спорю! Всё так! 
avatar

Как видно на графике это период большого флэта.
avatar
Андрей Зуев, норм так флэт с движами по 20-30%
Андрей Зуев, на моем графике визуально кажется, что предлагаемая ТС будет работать
avatar
SciFi, главное что бы кукл не догадался.)
avatar
Хорошее введение, но если нужно будет добавить ещё пару сигналов или стопы с тейкпрофитами, то лучше использовать пакет quantstrat.
avatar
r0man, спасибо, посмотрю
avatar
SciFi, у меня есть несколько вопросов по тестам на R, как с вами можно связаться?
avatar

теги блога SciFi

....все тэги



UPDONW
Новый дизайн