2017-10-28 82 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中引入與其他符號的交互,方法是在符號數據中添加與其他符號相關的附加列(例如,成對交易等)。

在一天結束時,回溯測試結果總是簡化了現實交易,因此獲得非常準確的「超級」準確回溯測試結果並不能很好地預測利潤/交易收入。