使用外部提供的指标数据进行量化

时间:2016-02-17 17:01:56

标签: r quantitative-finance quantstrat

我正在考虑使用R和quantstrat来回溯一些策略。我查看了一些文档和youtube视频,看看是否有可能做我想做的事情。我对R来说是全新的,我愿意深入研究必要的文档,但如果我想要的话,我想得到一个提示。

我已经完成了一些使用quantstrat进行回测的示例,所有这些示例的共同点是它们使用的指标是根据价格数据由R函数计算的

然而,我需要使用的是一些外部计算的指标,以及我作为真/假信息以及价格数据。因此,我在CSV中包含许多包含OHLC数据的其他列,并且这些列的值在大多数情况下都是假的,但在某些行上却是如此。我想生成信号,例如使用其中两列,并说“如果两者都是真的,在最后一天的高点设置止损买入,在最后一天的低点止损并计算头寸大小,以便最大损失是基于高低差异的固定金额。

还有很多规则需要应用,关于何时关闭止盈位置,何时调整止损或何时取消未触发的止损买单,我还要处理下一天开盘的情况已经超过止损买价,但这是另一个故事。此外,我必须考虑如何回溯测试只有日终数据的一天结束策略(接下来的几天蜡烛可能会高点停止买入和停止卖出,而不是它的暧昧会发生什么)

首先,我想知道是否有可能将此类外部指标数据作为量化策略的来源

如果您说“是”或“否”,它会对我有帮助,并且可能会向我指出适用的文档。谢谢你的建议!

编辑:

我实际上现在用OHLC列编写了一个CSV文件,并添加了另一个包含1和0的列,就像这个非常简单的例子:

Date,Open,High,Low,Close,SRot
2016-02-01,28,31,20,20,0
2016-01-29,34,35,30,31,1
2016-01-28,22,30,21,28,0
2016-01-27,18,23,17,20,0
2016-01-26,30,32,20,25,0
2016-01-25,30,35,25,32,1

我把它变成了一个xts对象,然后设置了一个量子策略,我设法在最后一列为1的那天之后触发止损限价空单。

add.rule(strategy.st,name = "ruleSignal",
arguments=list(sigcol="srotxsignal",
               sigval=TRUE,
               ordertype="stoplimit",
               orderside="short",
               replace=FALSE,
               prefer="Low",
               orderqty=10,
               tradeSize=tradeSize),
type="enter",path.dep=TRUE,label="normalEntryShort")

第一个信号已经在1月25日的第一个蜡烛上,低点25,我预计系统会触发一个价格水平为25的止损限价单。这也是订单似乎显示的内容。但是,该系统实际上在第二天以30的价格出售,即开放价格。对于倒数第二天的第二个信号,订单被触发,但从未执行过。这可能是正确的,因为开盘价已经低于止损限价水平,但价格在最后一天上涨至31,因此订单应该被触发。

我想对于第二个信号,我需要编写更多的逻辑,但对于第一个,我不知道为什么订单在30执行。

out<-applyStrategy(strategy=strategy.st,portfolios=portfolio.st)
[1] "2016-01-26 00:00:00 adidas 10 @ 30"

 getOrderBook(portfolio.st)
 $dshort
 $dshort$adidas
       Order.Qty Order.Price Order.Type  Order.Side Order.Threshold Order.Status Order.StatusTime      Prefer
2016-01-25 "10"      "25"        "stoplimit" "short"    NA              "closed"     "2016-01-26 00:00:00" "Low" 
2016-01-29 "10"      "30"        "stoplimit" "short"    NA              "open"       NA                    "Low" 

1 个答案:

答案 0 :(得分:0)

由于您试图卖空,您的订单数量应该是负数。