2017-10-28 78 views
1

我在投资组合中有多个符号,但是在运行吸墨纸交易策略时,最终权益只会更新已运行的最后一个符号。当研究股票如何更新每笔交易时,似乎在引入新符号时,股权会回到原始价值(1mil)。投资组合中的最终权益(和其他交易数据)更新问题 - 吸墨纸

这是怎样的投资组合为符号逐月得到更新:

updatePortf(portfolioName,Symbols=symbolName, Dates=currentDate) 
updateAcct(accountName,Dates=currentDate) 
updateEndEq(accountName, currentDate) 

这究竟是为什么?

希望我的问题是有道理的,谢谢你提前

回答

0

这是一个很好的问题。如果您查看applyStrategy,您会看到循环中的每个符号都是独立运行的。你可能想看看applyStrategy.rebalancing这确实表格的嵌套循环:

for(i in 2:length(pindex)){ 

      #the proper endpoints for each symbol will vary, so we need to get 
      #them separately, and subset each one 
      for (symbol in symbols){ 
       #sret<-ret[[portfolio]] 

这意味着它遍历时间戳的部分,然后对每个符号,这是你想要什么,当你想之间的一些互动符号(applyStrategy只是对符号进行操作,然后是时间戳循环的内部操作,因此您将永远不会发生交互操作)。

当我第一次使用quantstrat时,我最初有同样的挫折感。我的解决方案是修改applyStrategy.rebalancing确实变成了一个(较慢)双循环,对于每个时间戳,然后遍历每个符号的内部循环。

是的,这意味着您无法直接在quantstrat中准确计算投资组合PL。因此,像开放头寸这样的东西是目前投资组合资产的头寸不能直接完成的。 (但你可以修改代码来做到这一点,如果你想)。

为什么默认情况下quantstrat的行为方式如此?作者会给你很好的理由。简而言之,我的观点是(在与作者简短的讨论之后),如果信号具有预测能力,并为您提供策略优势,那么无论您稍后如何将其与其他符号结合起来,它都可以工作。 quantstrat是关于识别信号是否与传递给它的mktdata相关。从逻辑上讲,如果一个信号在每个符号水平上是好的,那么它也可能在投资组合水平上也行(如果不是更好,平滑的投资组合PL)也可以。 quantstrat目前的方法会给你一个合理的近似PL组合的样子,但不是真正的“复利回报”意义。为此,您需要根据当前投资组合PL来调整您的头寸(如上所述,applyStrategy不可能)。这种为每个符号运行策略的简化也使模拟更加快速。请注意,您可以在applyStrategy中引入与其他符号的交互,方法是在符号数据中添加与其他符号相关的附加列(例如,成对交易等)。

在一天结束时,回溯测试结果总是简化了现实交易,因此获得非常准确的“超级”准确回溯测试结果并不能很好地预测利润/交易收入。