1 min read

R中的量化投资包:quantstrat

quantstrat是什么东西?

quantstrat是Quantitative Strategy(量化策略)的缩写,它是由Peter Carl、 Brian G. Peterson、Josh Ulrich、Garrett See、Yu Chen等联合开发的用于量化投资的R包。

这个包为用户提供了一个测试和模拟基于信号的量化策略模型的泛型框架。它不仅可以 帮助用户构建交易系统,还可以对构建的交易系统进行仿真测试;能够支持对多资产类别和多币种组合进行回测(backtesting)等。

这个包在设计的过程中充分贯彻了“交易导向型”(Transaction-oriented)原则。

目前,这个包由Brian G.Peterson在维护,还在开发中,不过已经被很多业内人士拿来实战了。

因为quantstrat包是一个建立在xts, FinancialInstrument,blotter等包上的高级抽象包,所以,在应用quantstrat包时, 除了除了安装quantstrat包之外,还得记得装上这三个支撑包。看起来安装有点麻烦,正式因为安装麻烦,所以,它才能使得用户用几行简单的代码就能来构建和测试策略。

quantstrat涉及的量化策略基础知识

基于信号的策略的泛型建模

基于信号的策略模型需要先生成交易信号。交易指标是从市场数据中获知的量化指标(包括移动平均、RSI、波动带、通道、动量等)。交易指标应该以矢量化(快速回测)和数据流(实施执行)的形式应用于市场数据,并且假定交易指标是路径独立的(即不受账户、组合类型、现有头寸和交易的限制)。

交易指标和市场数据的相互作用会生成交易信号(交叉、阈值、倍数),交易信号标示交易者应当采取交易行动的时间,虽然,有时候,你无法行动。跟交易指标类似,交易信号也应该以矢量化和流形式应用于市场数据,并且需要假定交易信号是路径独立的。

交易规则基于交易指标、交易信号、账户头寸和账户/组合特性生成交易指令。注意关于头寸大小、填补模拟、指令生成和管理的规则与交易指标和交易信号的生成过程是独立的。与交易指标和交易信号不同,交易规则在是执行时是路径依赖式(事实上,也支持非路径依赖式的交易规则,然而,非路径依赖式的交易规则在现实中很少见)的,与已往市场数据和执行规则时的头寸大小相关。交易规则可以生成新的交易指令,也可以对现有交易指令进行修改(比如风险控制、填补、再平衡、介入、退出等)。

Quantstrat如何构建策略?

quantstrat通过FinancialInstrument包指定金融工具(包括所用币种)、通过blotter包跟踪交易信息和市值及组合和账户的变动。

交易指标通常是跟TTR包中函数类似的标准技术分析函数;交易信号通常有quantstrat包中的sig*族函数指定(比如sigComparison、sigCrossover、sigFormula、sigPeak、sigThreshold);规则通常有quantstrat包中的ruleSignal函数指定。

用来指定交易指标、交易信号和加以规则的函数不限于上述那些。add.indicator、add.signal、和add.rule的参数为任意R函数。因为支持链是基于xts对象构建的,因此,如果自定义的函数返回结果是xts对象的话,其能够被很好地整合到quantstrat包中。

策略模型以层形式创建,并且是延迟执行的。这意味着策略可以不加调整地应用于多种不同的组合。执行之前,策略不知道自身将应用到何种金融工具上,也不知道将被传递什么参数。例如,移动平均的时间参数和阈值参数很可能影响策略的性能。参数的默认值可以在策略对象中设定,也可以在执行时通过applyStrategy的参数(参数是一个命名列表,跟参数列表的用法类似)来设定。

quantstrat对交易指令进行建模,交易指令可能转化为实际交易,也可能不能转化为实际交易。这提供了一个额外功能,可以用来评估策略是如何工作的、为何不工作以及如何改进。例如,策略的性能经常受到“休息现价订单”的改变、替换和删除的影响。订单允许量化策略师检查决策作出时的市场条件。同时,订单历史使得针对许多策略的颇为重要的计算过程变得简单,比如填补比率的计算。

参数匹配规则

Quantstrat中很多地方会应用到通过策略技术参数传递(参数列表或者…)给交易指标、信号和交易规则函数的变元:

这些变元按照下面的顺序进行匹配,后面的赋值可以覆盖前值。具体的顺序如下: 赋值给每个交易指标、交易信号和交易规则的arguments=list(…)参数; 调用applyStrategy是应用的parameters=list{…}参数; 调用applyStrategy时,在…中传递的任意附加参数。