如果投資人設計的交易訊號是以當沖為基礎,則不需考量到結算日的操作,但若是波段的交易訊號會跨交易日,則需考量到結算日的交易操作,當結算日當天,訊號仍持有部位時,就需對這個持有的部位進行交易處理。
首先,撰寫一個「_IsSettleDay」的函式,來判斷當日是否為結算日,在策略中,即可以此函式的回傳值,進行後續的策略操作。
最簡單也是最多人的作法,就是不考量結算日後的轉倉價差,讓訊號的損益依照新倉的價位作為後續停損、停利、出場的判斷,此方式是假設在長期的交易下,價差的正負影響會趨於零,雖然在長期的統計的確顯示這些正負影響加總下會趨近於零,但若短期行情中,則會因為趨勢是長多或長空而造成價差偏向某一方而影響策略的績效正確性。
當策略判斷到當日為結算日時,就在當日選定一個時間(以上述的範例為13:05後即平倉),將策略的部位平倉,待隔日後,再依策略本身的進場邏輯判斷後續的交易訊號。
結算日當日在13:05過後,就讓策略將手中的部位平倉,台指期結算日的特性是在13:05過後期貨的價格大概就不太會跳動,已固定在上下三點內跳動,此時可先將手中未平倉的部位先平倉,隔日(或下個交易時段)開盤時,就將原有的部位建立倉位,再讓策略依寫入的規則持續判斷,自動出場。
此方式是最接近主觀交易者的交易模式,在結算日當日先將部位平倉,在程式中設定一個方向旗標,紀錄目前的部位方向,隔日(或下一個交易時段)開盤時,再依開盤時的價位進行多空判斷,若方向與原部位相同,則將原有的部位再之建立後,由策略判斷後續的出場規則出場。
在程式中的註解區塊,讀者可依自己的判斷邏輯來設定EntryCondition,讓程式可再多加判斷此條件後,決定是否再進場建倉。