R语言quantstrat包

来源:互联网 发布:医疗行业数据分析 编辑:程序博客网 时间:2024/05/16 03:19

在引入blotter包之后,一个完整的交易系统就已经可以建立起来了。但是作为盈利的基础,基于quantmodTTR虽然具有了必要的建模工具,我们依然希望能够有更加灵活易用的交易建模方法。这就是quantstrat包的目标。

1quantstrat包简介

quantstrat包以xts,quantmod,TTR,blotter等为基础,提供了基于交易信号的金融交易建模和回测的基础架构。利用quantstrat包可以相当大程度上简化建立或检验交易策略的过程。quantstrat包的名字就是量化策略。
quantstrat
包和blotter包都是R-forgeTradeAnalytics项目的组成部分。也是一个依然在开发中的包。
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",

   auto.assign = FALSE)

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,即1000000

# 初始化指定和策略
initOrders(portfolio = q.strategy, initDate = "2007-12-31")
strategy(q.strategy, store = TRUE)
ls(all = T) #quantstrat
创建了.strategy环境

# 策略是什么呢?看一下
strategy <- getStrategy(q.strategy)
summary(strategy)

 R语言quantstrat包

下面是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",

   sigval = TRUE, orderqty = 900, ordertype = "market", orderside ="long",

   pricemethod = "market"), type = "enter", path.dep = TRUE) #买入数量为900

add.rule(q.strategy, name = "ruleSignal", arguments = list(sigcol ="Cl.lt.SMA",

   sigval = TRUE, orderqty = "all", ordertype = "market", orderside ="long",

   pricemethod = "market"), type = "exit", path.dep = TRUE)

# 此时的策略对象

summary(getStrategy(q.strategy))## Length Class Mode

R语言quantstrat包

现在的策略strategy中有1个指标,2种信号和相应的两个规则(买入、卖出)。

下面开始使用这个策略:

out <- applyStrategy(strategy = q.strategy, portfolios =q.strategy)

R语言quantstrat包
summary(out)

mktdata["2013"]

mktdata是在执行策略过程中创建的一个特殊的变量,包含了原交易数据的时间序列以及指标和信号。在我们上面的ZSYH里,在20136月出现一次卖出的信号。

接下来对相关对象(组合、账户和权益价值)进行更新

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包给出了MAEmaximumadverse excursion)和MFEmaximumfavorable excursion)的图形
chart.ME(Portfolio = q.strategy, Symbol = "ZSYH", type = "MAE",scale = "percent")
chart.ME(Portfolio = q.strategy, Symbol = "ZSYH", type = "MFE",scale = "percent")

R语言quantstrat包

R语言quantstrat包


原文:http://site.douban.com/182577/widget/notes/10568316/note/313993652/

0 0
原创粉丝点击