3

我正在考虑使用 R 和 quantstrat 来回测一些策略。我查看了一些文档和 youtube 视频,以了解是否可以做我想做的事。我对 R 完全陌生,我愿意深入研究必要的文档,但如果我想要的东西是可能的,我想得到一个提示。

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

然而,我需要使用的是几个外部计算的指标,我将它们作为真/假信息与价格数据一起使用。因此,我在包含 OHLC 数据的 CSV 中有许多附加列,这些列的值大多数时候是错误的,但在某些行上是正确的。我想生成信号,例如使用其中两个列并说“如果两者都是正确的,则在最后一天的高点设置止损买入,在最后一天的低点设置止损并计算头寸大小,以便最大损失是基于高低差的固定金额。

还有更多的规则要应用,然后是关于何时平仓获利,何时调整止损或何时取消未触发的止损买入订单,我还必须处理第二天开盘价已经高于止损买入价,但那是另一回事。此外,我必须考虑如何回测只有日终数据的日终策略(接下来的几天蜡烛可能会同时高位止损买入和止损卖出,而不是会发生什么模棱两可的事情)

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

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

编辑:

实际上,我现在创建了一个带有 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 对象中,并设置了一个 quantstrat 策略,在最后一列是 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" 
4

1 回答 1

0

由于您试图做空,您的订单数量可能应该是一个负数。

于 2018-02-20T14:32:53.757 回答