我正在考虑使用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"
答案 0 :(得分:0)
由于您试图卖空,您的订单数量应该是负数。