這是一個很好的問題。如果您查看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
中引入與其他符號的交互,方法是在符號數據中添加與其他符號相關的附加列(例如,成對交易等)。
在一天結束時,回溯測試結果總是簡化了現實交易,因此獲得非常準確的「超級」準確回溯測試結果並不能很好地預測利潤/交易收入。