Избранное трейдера Quant-Invest
Небольшая статья с ресурса http://www.talaikis.com/ о построении простой стратегии, использующую наивный байесовский классификатор при создании процесса возврата к среднему. Весь код в статье приведен на языке Python.
Это достаточно большая область исследований, но расскажем все очень кратко. Мы попытаемся найти взаимоотношение между временными сериями (в данном случае возьмем в качестве сигнала взаимный фонд XLF из финансового сектора, сдвинутый по времени на 1 день назад), а нашей целью будет фьючерс S&P500 в форме CFD. Будем входить в длинную позицию по этой бумаге при нулевой вероятности приращения. Логически нулевая вероятность ни о чем не говорит, другими словами, будем покупать возврат к среднему.
1. Получение данных
Y = read_mongo(dbase, "S&P5001440") X = read_mongo(dbase, syms[s]).shift() #готовим набор данных res = pd.concat([X.CLOSE, Y.CLOSE], axis=1, join_axes=[X.index]).pct_change().dropna() res.columns = ['X', 'Y']

Продолжаем рассуждения о долгосрочном инвестировании, которые являются плавным продолжением эпопеи про поездку Александра к дедушке Баффету
Для начала, повторю основные тезисы моего предыдущего поста

# Created by SciFi, 2016
runUnluck <- function(n) {
runArray <- numeric(10000)
for(i in 1:10000) {
runArray[i] <- sum(rle(sample(c(-1, 1), 1000, TRUE))$lengths == n)
}
hist(runArray, main="Гистограмма")
mean(runArray)
}
> source("D:\\Dropbox\\R\\RunUnluck.r")
> runUnluck(6)
[1] 7.8161
> runUnluck(2)
[1] 125.2208
> runUnluck(3)
[1] 62.4047
> runUnluck(4)
[1] 31.179
> runUnluck(5)
[1] 15.6559
> runUnluck(6)
[1] 7.7635
> runUnluck(7)
[1] 3.8831
> runUnluck(8)
[1] 1.9382
> runUnluck(9)
[1] 0.9738
> runUnluck(10)
[1] 0.4922
require(quantmod)
require(xts)
require(TTR)
require(PerformanceAnalytics)
getSymbols('^GSPC', src='yahoo', from = '1900-01-01')
monthlyGSPC <- Ad(GSPC)[endpoints(GSPC, on = 'months')]
movAvg <- SMA(monthlyGSPC, 10)
signal <- monthlyGSPC > movAvg
gspcRets <- Return.calculate(monthlyGSPC)
Далее построим две системы одна с ошибкой заглядывания, вторая корректная. Суть системы простая, месячная SMA с периодом 10, выше покупаем, ниже продаем.lookahead <- signal * gspcRets correct <- lag(signal) * gspcRets
compare <- na.omit(cbind(gspcRets, lookahead, correct))
colnames(compare) <- c("S&P 500", "Lookahead", "Correct")
charts.PerformanceSummary(compare)
rbind(table.AnnualizedReturns(compare), maxDrawdown(compare), CalmarRatio(compare))
logRets <- log(cumprod(1+compare))
chart.TimeSeries(logRets, legend.loc='topleft')
