我有個交易腳本會希望印出出場後一日的情況,所以在換日檢查時用以下寫法:
if date <> date[1] then begin
...
if Position = 0 and Filled = 0 and barlast(Position <> 0) = 1 then Print(xxxxxx)
...
end;
但這條加進去之後,使用日頻率回測跑 40 個商品,範圍設置 2018/01/01-2023/01/01,都無法無論正常跑完回測。
試過強制設定 setBarBack 跟 setTotalbar 設長一點(200/500/1000/2000...),最多只能跑不到 3 個商品就掛了,中斷回測看結果,這 3 個商品也都是無觸發。
如果 setBarBack 跟 setTotalbar 設太短,回測又會立即結束,所有商品都執行失敗。
我把 barlast 那行檢查註解掉之後,跑 40 個商品只要 8-15 秒不等,而且原本無觸發的商品也都會正常觸發訊號。由於這支進場訊號的條件所需的計算長度也需要參考 120 天期,setBarback(200) 應該夠用;而實際只需要參考當天的值,所以之前一直使用 setTotalBar(1) 。
想知道為什麼這樣寫會無法正常跑回測呢?
另外問,如果應用 barlast 這種無法預期需要計算多長時間的邏輯 (例如每支標的平倉後,到下次進場再平倉的時間長度不一),該怎麼做才能確保策略能正常運算完畢呢?直接用 setBarBack 設一個超過回測範圍的K棒運算長度嗎?
1 評論