我正在考虑使用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" 发布于 2018-02-20 22:32:54
由于您正在尝试做空,您的订单量可能应该是负数。
https://stackoverflow.com/questions/35463060
复制相似问题