R语言blotter包回测实例
来源:互联网 发布:医疗行业数据分析 编辑:程序博客网 时间:2024/05/25 20:00
下面使用Faber策略,对招商银行历史数据进行回测。Faber策略是个非常简单的战术资产配置方法:如果月收盘价高于10月均线,买入;如果月收盘价低于10月均线,卖出。(忽略交易成本和滑点)
http://static.squarespace.com/static/510654e4e4b0c3c708391d25
初始化:初始化一个现金和一个股票工具
currency("RMB")
stock("ZSYH", currency = "RMB", multiplier = 1)
ls(envir = FinancialInstrument:::.instrument) #设置.instrument环境
get("RMB",envir = FinancialInstrument:::.instrument)
Sys.setenv(TZ = "UTC") #设立时区
ZSYH <- getSymbols("600036.ss", from = "2008-01-01", to =Sys.Date(), src = "yahoo",
ZSYH <- to.monthly(ZSYH, indexAt = "endof")
ZSYH$SMA10m <- SMA(Cl(ZSYH), 10)
#绘制月k线及10月均线
myTheme <- chart_theme()
myTheme$col$dn.col <- "lightgreen"
myTheme$col$up.col <- "lightblue"
myTheme$col$dn.border <- "grey"
myTheme$col$up.border <- "grey"
chart_Series(x = ZSYH, theme = myTheme, name = "ZSYH", TA ="add_SMA(n=10,col=4)")
#初始化组合和账户
b.strategy <- "bFaber"
initPortf(b.strategy, "ZSYH", initDate = "2007-12-31")
initAcct(b.strategy, portfolios = b.strategy, initDate ="2007-12-31", initEq = 1e+06) #初始的资金是1e6,即1,000,000
ls()
ls(.blotter)
ls(envir = FinancialInstrument:::.instrument)
#Bar-by-bar 处理: 交易规则的实现。在这个过程中实现组合和账户的更新。
for( i in 1:nrow(ZSYH) )
{
#对日期更新
CurrentDate <- time(ZSYH)[i]
equity<-getEndEq(b.strategy, CurrentDate)
ClosePrice <- as.numeric(Cl(ZSYH[i,]))
Posn <- getPosQty(b.strategy, Symbol='ZSYH',Date=CurrentDate)
UnitSize<-as.numeric(trunc(equity/ClosePrice))#全仓
MA <- as.numeric(ZSYH[i,'SMA10m'])
#如有必要改变头寸
if(!is.na(MA)) #如果移动均线开始
{
if( Posn == 0 ) {#没有头寸,测试是否买入
if( ClosePrice > MA ) {
#进入多头头寸(买入)
addTxn(b.strategy, Symbol='ZSYH', TxnDate=CurrentDate,
TxnPrice=ClosePrice, TxnQty = UnitSize , TxnFees=0) }
} else {#有头寸,检测是否退出
if( ClosePrice < MA ) {
#退出头寸
addTxn(b.strategy, Symbol='ZSYH', TxnDate=CurrentDate,
TxnPrice=ClosePrice, TxnQty = -Posn , TxnFees=0) }
}
}
#计算盈亏并更新
updatePortf(b.strategy, Dates = CurrentDate)
updateAcct(b.strategy, Dates = CurrentDate)
updateEndEq(b.strategy, Dates = CurrentDate)
}
结果如下:
注:这个例子是基于quantstrat包的demo:faber.R来写的。
#评价交易表现chart.Posn函数可以绘出交易、头寸、累计盈亏和回撤。getTxns函数是成交统计,输出值包括成交量(股),成交价格,成交额(元),平均成本,盈亏tradeStats函数是一个交易过程的统计。
chart.Posn(b.strategy, Symbol = "ZSYH", Dates = "2008::", theme =myTheme)
getTxns(Portfolio = b.strategy, Symbol = "ZSYH")
(tstats <- tradeStats(Portfolio = b.strategy, Symbol ="ZSYH"))
使用PerformanceAnalytics包来评价交易表现
library(PerformanceAnalytics)
rets <- PortfReturns(Account = b.strategy)
rownames(rets) <- NULL
charts.PerformanceSummary(rets, colorset = redfocus)
tab.perf <- table.Arbitrary(rets, metrics =c("Return.annualized", "SharpeRatio.annualized"),
tab.perf #
- R语言blotter包回测实例
- R语言blotter包及相关工具
- R语言经典实例
- 正态分布R语言实例
- R语言 实例操作
- R语言数据框行转列实例
- R语言学习-实例一
- R语言数据结构实例入门
- R语言实例-数据过滤
- R语言中的svm实例
- R语言第七天---实例
- R语言 实例操作2
- R语言回归分析实例
- R语言BP神经网络实例
- R语言: 极大似然估计实例
- R调用C语言简单实例
- R语言实例-身份证信息提取
- R语言各种方法总结及实例
- 第13讲 日期和时间 EXCEL2010…
- R语言任务视图:机器学习与统计学…
- GridView
- R语言blotter包及相关工具
- 探究php底层运行机制
- R语言blotter包回测实例
- R语言quantstrat包
- 分类算法——K近邻算法及其R实现
- 分类算法——决策树算法及其R实现
- 主成分分析和因子分析及其在R中的…
- 最小二乘(OLS)回归法及其在R中的…
- Linux下手动配置firefox的搜索引擎
- gradle好文章
- 分类算法——决策树(1)