2026年九月22日 · 期貨

你的連續期貨圖表,是一份沒人能交易的合約

你的連續期貨圖表,是一份沒人能交易的合約

連續期貨序列會把陸續到期的合約接成一段歷史資料。你可以用這段歷史研究訊號,但若直接依照序列價格變化計算交易損益,每次轉倉都可能憑空生出獲利或虧損。這段序列並沒有告訴你持有的是哪份合約。

來看一個特別嚴苛的例子:2020 年 4 月 20 日的 NYMEX WTI 原油。5 月合約每桶結算價為負 $37.63,6 月合約則為正 $20.43。兩個價格都是真實的,兩者相差 $58.06 也是真的。但把圖表從 5 月切換到 6 月,並不會讓多頭部位賺進這筆差額。

我們來拆解這次接續。以下是歷史結算價;下方假設的帳務範例用這些價格說明計算方式,並非表示訂單當時一定能以該價格成交。

CLK20 與 CLM20:圖表省略的合約代碼

欄位5 月合約6 月合約
合約代碼CLK20CLM20
交割月份2020 年 5 月2020 年 6 月
4 月 20 日結算價,美元/桶−37.6320.43
合約規模1,000 桶1,000 桶

月份代碼比代號前綴更重要。K 代表 5 月,M 代表 6 月。這兩份合約的交割義務不同,價格也不同。5 月合約即將到期,當時儲存空間正承受異常壓力;6 月合約則多了整整一個月。

資料供應商的連續代號把這項差異藏在簡潔的符號裡。我喜歡簡潔的代號,直到它成為交易紀錄裡唯一留下的識別資訊。接著除錯就像考古,咖啡還更難喝。

連續歷史資料也沒有放諸四海皆準的一種版本。資料供應商可能在到期前固定幾個營業日轉倉,也可能依成交量交叉點,或按其他時程操作。許多歷史序列早在 4 月 20 日之前就已經轉出 5 月合約。我們刻意用這兩份合約的結算價來示範接續,讓問題更清楚;這不代表任何特定資料供應商採用這種轉倉方式。

1,000 桶:每個價格背後的乘數

標準的 NYMEX WTI 期貨合約代表 1,000 桶。因此,價格每變動 $1,一口多單的價值就變動 $1,000;每跳動 $0.01,損益則變動 $10。

持有一口合約且部位不變時,基本計算方式如下:

gross_pnl = contracts × 1,000 × (ending_price − starting_price)

價格低於零時,這個公式仍然適用。但以期貨報價計算百分比報酬就不太有意義了:價格跨越零時,百分比報酬可能無法定義,也可能讓表面意義反轉。策略報酬應根據帳戶權益與現金流慣例計算;每桶報價並不是策略投入的資本。

$58.06:接續處的斷層

假設一個天真的引擎看到 5 月合約結算價之後接著出現 6 月合約結算價,便套用公式,彷彿標的合約沒有改變:

invented_pnl = 1 × 1,000 × (20.43 − (−37.63))
             = $58,060

這個比較裡沒有任何時間經過。那是同一個交易時段中兩份合約的價格。引擎把跨合約的價差誤當成持有期間的獲利。

在實際的每日接續序列中,昨天舊合約的價格與今天新合約的價格也包含一般市場波動,因此錯誤更難察覺。記錄下來的變化同時混入了舊合約的價格變動,以及切換時兩份合約之間的價差。

把 $58,060 當成所謂的現金「轉倉成本」扣掉,也無法修正模型。期貨不是用全額支付報價名目金額來買進的。平倉一份合約、再開倉另一份,會帶來部位變動、已實現或結算損益、費用、執行影響與保證金需求。兩份合約的價格水準差異不會自動成為一筆現金支出。

+58.06:回溯調整寫進歷史資料

一種常見的連續序列建構方式,是把轉倉價差加到較早的價格上。依照這種慣例,5 月合約的 −37.63 會變成 20.43,與 6 月合約接上時不再出現跳空。同一段歷史裡更早的觀測值也會上調 58.06。

建構方式在這次接續處的變化對研究的影響
未調整$58.06 的價差保留指標可能把合約切換解讀成市場波動
加法回溯調整較早的資料段加上 58.06資料段內的美元變動維持不變;歷史價格水準與百分比變化會改變
比例回溯調整較早的資料段乘以 20.43 / −37.63,約為 −0.543負乘數會反轉資料段內價格變動的正負號

最後一列正是我不接受只寫「比例調整」就算交代完整的原因。對嚴格正值價格表現合理的方法,仍須明確說明遇到零與負值時的處理方式。

加法調整也有自己的影響。若訊號是在價格低於絕對門檻 $30 時買進,後續轉倉改寫先前價格水準後,訊號也可能改變。只要兩個視窗都受到相同位移,快慢均線差訊號可能不受共同加法位移影響。跨越調整邊界的視窗則需要另外檢查。

研究結果應一併記錄調整方法、轉倉時程與資料版本。若訊號會受到調整後價格水準影響,就要重建每個決策日期當時可取得的歷史資料。目前下載的資料可能已包含當時尚未發生的轉倉調整。

連續圖表裡缺少的兩筆委託紀錄

以下是一份刻意簡化的帳本。假設轉倉前,一口 5 月合約以 −30.00 計價;再假設 5 月合約以以上歷史結算價平倉,並以同樣方式在 6 月合約進場,之後 6 月合約以 21.00 計價。這些假設成交價只是用來示範帳務處理。

帳務事件計算方式毛損益
以 −37.63 平掉一口 5 月多單1,000 × (−37.63 − (−30.00))−$7,630
以 20.43 開立一口 6 月多單進場時沒有價格變動$0
以 21.00 計價 6 月合約1,000 × (21.00 − 20.43)+$570
合計未計執行成本與費用−$7,060

$58.06 的價差不會以獨立收入或支出的形式出現。每日變動保證金決定期貨損益何時反映在現金中;它不會讓同一筆損益重複計算。

實際轉倉可能透過跨期價差委託執行,而非分成兩筆獨立委託。模擬器應呈現它所假設的執行方式,包括成交與費用,同時保留底層各份合約的部位資料。

我的驗收標準很簡單:期貨交易的每一美元損益,都必須能對應到具名合約、數量、乘數,以及屬於該合約的兩個價格。我也要看到轉倉決策時間戳記與所用輸入資料。若依據今日完整交易時段的成交量決定轉倉,就不能悄悄在同一時段更早的時間交易。

連續價格線可以用來掌握背景;在它下方,畫出實際持有的合約並標記每次切換。如果權益曲線在切換時跳動,我會先檢查那兩筆委託紀錄。

連續期貨回測期貨轉倉市場資料損益核算
← 所有文章