
什麼是 Open tomorrow?簡單講就是把還沒發生的下一根K棒的開盤價,拿來做條件判斷或是價位計算,過去有發表過一篇相關的「」。
結算後的第一天,按照我在策略程式中的設計,應該要在開盤的時候,把昨天參與結算的部位給建回來,理由可參考「」。不過,我發現了一點點的問題...
我們來做個實驗,寫一段程式碼如下。從 Print 出來的資訊來看,很明顯在結算日最後一根,marketposition 的資訊是沒有因為 setexitonclose 而"即時"更新的,它還停留在 多單 的狀態,而這是正常或說是我們習慣的,因為 MultiCharts 是必須要等到"換棒"時才會更新資訊的。

接著我要把 Open tomorrow 引進來,程式碼如下。從 Print 的訊息看到,在結算日最後這一根的 marketposition 竟然變成了...零!從這個反應,我假設程式碼裡如果引進了 Open tomorrow 會讓資訊往前提早到K棒的收盤就更新而不是等到換棒的時候。只不過這對我要處理跨月換倉帶來了麻煩~

Open tomorrow 引進會讓資訊的更新從換棒提前到K棒的收盤(我推測的),因此我將不能沿用一般處理系統部位跨月換倉的方式,因為結算日的最後一根都會因為 setexitonclose 而且在收盤就更新資訊而使 marketposition=0,造成無法判斷隔天開盤應該要建立的是多單還是空單,或是...本來就空手。因此,我嘗試著把記錄 marketposition 與部位數量的時間往前移一根,結算日的倒數第二根。程式碼如下。

一旦引進 Open tomorrow 的話,取最後一根的資訊會得到真正的即時資訊,讓我無法在結算日隔天延續部位(方向與數量都因 setexitonclose 都是零)。而取用前一根的資訊則會如果就剛巧最後一根K棒有動作的話,造成資訊落後而錯誤!到目前,我還沒想到解決之道。
結論:如果交易策略的程式碼需要引入 Open tomorrow 的話,首先必須知道資訊更新的時間不同。再來,為了兼顧我不要回測報表有灌水的因素,我選擇結算日一樣收盤出場,之後則等待新訊號再進場了。
ps. 你的策略回測有沒有灌水?