- 登入
- 註冊
對於進行期貨自動交易的投資人來說,正確掌握台指期結算日與轉倉時機是建立穩健策略的第一步。尤其是在使用 TradingView 撰寫 Pine Script 自動化策略時,更需要精準設計「什麼時候轉倉、何時平倉」的邏輯。
因此,本篇文章將帶你了解台指期結算與轉倉的時間邏輯,並透過實務案例說明如何使用 TradingView 撰寫出「判斷轉倉日並自動出場」的程式碼。
根據台灣期交所的規定,台指期(台灣指數期貨)每月的結算日固定為第三個星期三。
市場實務上,為避免在結算日當天,遇到大幅波動與流動性不足的風險,多數交易者會選擇在結算日前一個交易日的夜盤提前完成「轉倉」操作。
在期貨交易中,所謂的轉倉是指在舊的合約即將到期時,把持有的部位平倉,同時建立新的遠月合約部位,以持續維持相同方向的市場曝險(多單或空單)。
也由於 TradingView 採用與國際期貨市場的轉倉習慣,其轉倉時間設為結算日的前一天(週二)下午三點(15:00)。這樣的設計目的,是為了讓用戶在圖表上能預先察覺轉倉節點,提早因應。
總結來說,TradingView 台指期的轉倉時間,是在第三個星期三的「前一日」的夜盤 15:00。
如果沒有設定轉倉標記,可以透過以下方式設定:
啟用後,系統將在每月固定時間點,以紫色虛線標示出轉倉位置,讓策略回測與實盤操作更加一致。
請注意,「第三個星期三的前一天」≠「第三個星期二」。
以 2025 年 1 月為例:
第三個星期三為 1/15,它的前一天是 1/14(二),但是當月的「第三個星期二」其實是 1/21!因此切記,「前一天」是指字面上的日曆順序,不是「同一週的星期二」。
如下圖所示,由於每個月的第一天,會隨機分佈在週一到週日之間,因此在往後推算結算日時,也有可能會出現在不同的日期上。
但是根據我們所總結的經驗,可以得出轉倉日的規律如下:
這兩個條件組合後,即可初步判斷轉倉日是否成立。以下為語法範例:
or (dayofweek == dayofweek.tuesday and dayofmonth >= 14 and dayofmonth <= 20)
透過逐年資料對照,我們發現在遇到國定假日時,有可能會導致轉倉日異常提前,以下為具體案例:
年份 | 節日 | 結算日 | 實際轉倉日 |
2024 | 中秋節 | 9/18(三) | 9/16(一) |
2023 | 農曆新年 | 1/30(一) | 1/17(二) |
2021 | 農曆新年 | 2/17(三) | 2/5(五) |
2018 | 農曆新年 | 2/21(三) | 2/12(一) |
因此在遇到特殊節假日的情況,我們會針對特定結算日撰寫程式碼,實際將會在下一章節說明。
Pine Script:
OverMonthDate = time_tradingday==timestamp('GMT',2024,9,16) //2024中秋
or time_tradingday==timestamp('GMT',2023,1,17) //2023農曆年
or time_tradingday==timestamp('GMT',2021,2,5) //2021農曆年
or time_tradingday==timestamp('GMT',2018,2,12) //2018農曆年
講解說明:這段程式碼列出「歷年來特別的轉倉日(非固定日期,如農曆年或中秋)」並以 timestamp() 指定精確的日期時間點。time_tradingday 是 TradingView 的內建變數,代表目前 K 棒的時間。
Pine Script:
or (dayofweek==dayofweek.tuesday and dayofmonth>=14 and dayofmonth<=20)
這段是在捕捉「例行性轉倉日」:每月第三個星期三前一天的「星期二」,日期落在 14~20 日之間就符合條件。
Pine Script:
OverMonthTime = time(timeframe.period, "1200-1345")
講解說明: 定義當日中午 12:00 到 13:45 為「程式要監測是否結算出場」的時間範圍,避免提前或延遲出場。
同時,因為出場時間並非單一固定值,以下的根據 K 棒週期不同所提供的建議出場時間,你可以根據交易週期自行調整:
K 棒週期 | 建議出場時間 |
5分鐘K | 12:00-13:45 ~ 13:20-13:45 |
15分鐘K | 12:00-13:45 ~ 13:00-13:45 |
30分鐘K | 12:00-13:45 ~ 12:30-13:45 |
60分鐘K | 12:00~13:45 |
Pine Script:
OverMonthExit = OverMonthDate and OverMonthTime>1
講解說明: 當「日期」與「時間」條件都成立時(也就是符合轉倉日並落在該時段內),才會觸發結算出場。至於程式碼的結尾「>1」,是為了確保只要有任何值出現,就符合我們所設定的條件。
Pine Script:
bgcolor(OverMonthExit ? color.new(color.purple, 90) : na)
講解說明: 如下圖所示,若當下符合出場條件,則在 TradingView 圖表上標記紫色背景,作為視覺提醒。
Pine Script:
if OverMonthExit
strategy.close_all("結算日出場")
講解說明: 當 OverMonthExit 為 true 時,執行 strategy.close_all() 指令清倉所有持倉部位,並加上註解「結算日出場」。
透過本篇教學,我們從台指期結算日的基本規則、轉倉時間判斷,到 Pine Script 的出場語法與視覺提示,都逐一拆解並示範具體實作方式。
如果想要進一步瞭解如何打造屬於自己的量化交易系統,歡迎參考【TradingView x 台指期 x 加密貨幣|量化交易全方位實戰】線上課程。