R语言quantstrat包
来源:互联网 发布:医疗行业数据分析 编辑:程序博客网 时间:2024/05/16 03:19
在引入blotter包之后,一个完整的交易系统就已经可以建立起来了。但是作为盈利的基础,基于quantmod和TTR虽然具有了必要的建模工具,我们依然希望能够有更加灵活易用的交易建模方法。这就是quantstrat包的目标。
(1)quantstrat包简介
quantstrat包以xts,quantmod,TTR,blotter等为基础,提供了基于交易信号的金融交易建模和回测的基础架构。利用quantstrat包可以相当大程度上简化建立或检验交易策略的过程。quantstrat包的名字就是量化策略。
quantstrat包和blotter包都是R-forge上TradeAnalytics项目的组成部分。也是一个依然在开发中的包。
http://r-forge.r-project.org/projects/blotter/
它的主要特征是:
支持应用于多资产多币种的投资组合;支持包括指标(indicators),信号(signals)和交易规则(rules)的完整的交易策略;支持包括market,limit, stoplimit, 和stoptrailing等在内的多种委托(订单,指令order)方式;支持委托规模(ordersizing)和参数优化。
quantstrat包进行策略建模的基本思路是:
(i)初始化金融产品导入数据
(ii)依次引入指标、信号和规则以形成策略,按照策略下达指令。
指标是指源自交易数据的一个数量值:如均线、MACD等;
信号是指指标在某些交易时点和交易数据相互作用的结果,比如交叉、阈值、底顶等;
规则是指结合交易数据、信号以及当前的组合和账户情况进而做出委托(下达指令)的准则。
(iii)指令和市场数据的交互生成一个交易(transaction),按照交易情况更新组合和账户。
主要函数:
(i)初始化:
initOrders 初始化指令容器(order container)
strategy strategy 对象的构造器
(ii)定义策略
add.indicator 为策略加入一个指标
add.signal 为策略加入一个信号
add.rule 为策略加入一个规则
add.distribution 为策略的参数集合加入一个分布
add.constraint 为一个参数集上的两个分布加入约束
(iii)运用策略
applyStrategy 把策略运用到数据上
addPosLimit 在时间戳上加上头寸和等级限制(level limits)
apply.paramset 把参数集合运用到策略上
applyStrategy.rebalancing 把策略运用到周期性调整的数据上
(2)基于quantstrat包的回测:单资产情况
现在可以结合quantstrat包和blotter包给出一个更好的量化策略回测。首先做初始化,这里包括blotter包里边对金融工具和账户和组合的初始化,也包括quantstrat包对策略和指令的初始化。
下面以之前做过的faber策略为例。
#金融产品初始化
library(quantstrat)
currency("RMB")
stock("ZSYH", currency = "RMB", multiplier = 1)
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)
#初始化组合和账户
q.strategy <- "qFaber"
initPortf(q.strategy, "ZSYH", initDate ="2007-12-31")
initAcct(q.strategy, portfolios = q.strategy, initDate ="2007-12-31", initEq = 1e+06) #初始的资金是1e6,即1,000,000
# 初始化指定和策略
initOrders(portfolio = q.strategy, initDate = "2007-12-31")
strategy(q.strategy, store = TRUE)
ls(all = T) #quantstrat创建了.strategy环境
# 策略是什么呢?看一下
strategy <- getStrategy(q.strategy)
summary(strategy)
下面是quantstrat包的关键:加入指标、信号和规则。
# 加入一个指标,10月均线
add.indicator(strategy = q.strategy, name = "SMA", arguments =list(x = quote(Cl(mktdata)),n = 10), label = "SMA10")
# 加入信号,向上交叉10月线,向下交叉10月线
add.signal(q.strategy, name = "sigCrossover", arguments =list(columns = c("Close","SMA10"), relationship = "gt"), label ="Cl.gt.SMA")
add.signal(q.strategy, name = "sigCrossover", arguments =list(columns = c("Close","SMA10"), relationship = "lt"), label ="Cl.lt.SMA")
# 加入规则,买入规则和卖出规则
add.rule(q.strategy, name = "ruleSignal", arguments = list(sigcol ="Cl.gt.SMA",
add.rule(q.strategy, name = "ruleSignal", arguments = list(sigcol ="Cl.lt.SMA",
# 此时的策略对象
summary(getStrategy(q.strategy))## Length Class Mode
现在的策略strategy中有1个指标,2种信号和相应的两个规则(买入、卖出)。
下面开始使用这个策略:
out <- applyStrategy(strategy = q.strategy, portfolios =q.strategy)
summary(out)
mktdata["2013"]
mktdata是在执行策略过程中创建的一个特殊的变量,包含了原交易数据的时间序列以及指标和信号。在我们上面的ZSYH里,在2013年6月出现一次卖出的信号。
接下来对相关对象(组合、账户和权益价值)进行更新
updatePortf(q.strategy)
updateAcct(q.strategy)
updateEndEq(q.strategy)
最后按照现在的组合和账户情况给出策略表现
myTheme <- chart_theme()
myTheme$col$dn.col <- "lightgreen"
myTheme$col$up.col <- "lightblue"
myTheme$col$dn.border <- "grey"
myTheme$col$up.border <- "grey"
# 策略表现可视化
chart.Posn(q.strategy, Symbol = "ZSYH", Dates = "2008::", theme =myTheme)
# 交易统计
(tstats <- tradeStats(Portfolio = q.strategy, Symbol ="ZSYH"))
# 指令簿(orderbook)
ob <- getOrderBook(q.strategy)
head(ob$qFaber$ZSYH)
#quantstrat包给出了MAE(maximumadverse excursion)和MFE(maximumfavorable excursion)的图形
chart.ME(Portfolio = q.strategy, Symbol = "ZSYH", type = "MAE",scale = "percent")
chart.ME(Portfolio = q.strategy, Symbol = "ZSYH", type = "MFE",scale = "percent")
原文:http://site.douban.com/182577/widget/notes/10568316/note/313993652/
- R语言quantstrat包
- knitr包 R语言
- R语言 -- 包
- R语言quantmod包
- R语言tseries包
- R语言_xlsx包
- [R语言] 加载和安装R包
- R语言中帮助和R包
- 【R】R语言指定包安装目录
- [R语言] 加载和安装R包
- R语言常用包分类
- R语言_安装包
- R语言安装包地址
- R语言常用包分类
- R语言数据挖掘包
- R语言-data.table包
- R语言常用算法包
- R语言-数据处理包 dplyr
- R语言任务视图:机器学习与统计学…
- GridView
- R语言blotter包及相关工具
- 探究php底层运行机制
- R语言blotter包回测实例
- R语言quantstrat包
- 分类算法——K近邻算法及其R实现
- 分类算法——决策树算法及其R实现
- 主成分分析和因子分析及其在R中的…
- 最小二乘(OLS)回归法及其在R中的…
- Linux下手动配置firefox的搜索引擎
- gradle好文章
- 分类算法——决策树(1)
- 在Receiver或Server中修改主Activity对应布局中的控件