返回風控與心理
風控與心理

合約交易成本怎麼算?手續費、滑價與淨損益

Trader Stan·2026.10.19·閱讀時間 16 min

合約交易成本要按成交逐筆計費,再分開資金費與其他調整。USDT線性合約用數量乘價差算價格損益,不能用保證金當計費基數。已用成交價計入滑價,就不再扣同一段價差;預留資金費不等於實際扣款。價差減已核實費用才得到相應口徑的結果;費用未齊只列部分結果。本文用BTC歷史行情與假設成交示範對帳,資料不齊時保留待查,不補成實盤淨損益。

計畫最多虧50 USDT,最後對帳卻出現三個數字:35.39、39.303305、40.303305。哪一個是這筆交易的損失?如果只挑最小的,費用可能漏掉;如果全部加起來,同一段滑價或一筆預留,又可能被算了兩次。

我更在意的是,你能不能說清每個數字從哪裡來。下面先分開價差、交易費與持倉成本,再沿同一段BTC行情,把一筆空單從等待入場算到退出。帳算得清楚,才能知道問題出在事前預算、實際執行,還是資料根本沒收齊。

合約交易成本先分清價差、費用與資金占用

價格損益、額外收費與保證金占用要分開記。 本篇只處理以USDT報價及結算、數量用BTC表示的線性永續合約;BTC是比特幣,USDT是穩定幣。以幣作保證金及結算、採反向算式的幣本位合約,計價不同,不直接套用下方全部算式。商品與倉位的完整順序,可先接回永續合約入門流程。

毛損益、淨損益與帳戶餘額,不是同一個數字

這裡把「數量乘進出價差」稱為價格毛損益;再按歸屬加減交易費、資金費及其他已核實調整,才算該口徑的淨損益。Bybit官方《P&L Calculations》2026年8月12日版本區分未實現價格損益與含交易費、資金費的平倉結果,說明了只看浮盈為什麼容易少算。實際對帳前,仍要確認平台欄位是否已含費,不能只按中文名稱猜。

帳戶餘額的變化則可能包含其他部位、入出金、資金劃轉與延後入帳項目。你轉入100 USDT,餘額增加,不代表這筆合約賺100。保證金解除占用也不是多賺一筆,不能把開倉時被占用、平倉後釋放的資金再算進收益。

概念圖分開價格毛損益、交易費、資金費收付及資金占用,保證金釋放與帳戶餘額不是本筆獲利。

手續費看成交金額,Maker和Taker看實際角色

線性合約的每筆交易費,可先用「成交數量×成交價格×該筆適用費率」理解,開倉與平倉各算各的。OKX官方《合約交易手續費怎麼計算?》2026年8月26日版本採成交價值乘費率,若平台用張數,還要帶入合約面值與乘數;換成BTC數量後才對得上本文單位。保證金不是計費基數,同樣數量只改槓桿,不能把交易費直接除以槓桿。

Maker是提供流動性的成交角色,Taker是取走既有流動性,不等於「限價一定便宜、市價一定貴」。限價若立即與已有委託撮合,也可能按Taker處理。Bybit《Post-Only Order》以可能立即成交就取消的方式說明這個差別:掛單意圖不等於已成交,更不是所有退出都適合為了費率繼續等。

滑價有兩種記法,選一條路算到底

滑價可以單獨分析,但不能重複扣除。 先固定比較的參考價,再記實際或假設成交價;若兩者的差異已經進入價格損益,就只作執行偏差說明,不再多扣一次。資金費則另依結算資格與實際收付對帳,不能和這段價差混成同一項。

已用成交價算損益,就不再扣同一段滑價

空單退出是買回,若計畫78600退出,最後均價78620,這20 USDT/BTC就是相對該計畫價的不利偏差。它不是額外出現在帳單上的另一張20元收據。若入場價減掉78620已算過,就已承擔這段價格差;若先按78600算計畫損益,才需要另減數量乘20。兩條路用相同費用和數量時,結果應相等。

參考價若換成送單時最佳報價、觸發價或中間價,量到的偏差會不同。價差、流動性與行情移動也可能同時影響成交,不能把同一段偏差拆成幾個名稱後全部扣一遍。設定滑價容忍也不是成交保證;Bybit《Market Order with Slippage Tolerance》說明,範圍內流動性不足時仍可能只成交部分,剩餘量須另行處理。

資金費預留是預算,不是已發生的扣款

事前預留1 USDT,是替可能發生的持倉支出留空間;事後要填多少,仍要看當期費率、合資格持倉數量與帳戶流水。預留沒用到,不必製造一筆支出;尚未核清,也不能為了湊出整齊總額直接填零。

資金費收入則要放對方向。若統一記「支付為正、收取為負」,淨損益減去這個有符號金額,收到款項時就會增加結果。平台帳單若用另一套正負號,先轉成同一口徑再加總。收付時間與數量的細節,可接續資金費率是什麼?結算時間、支付方向與持倉成本。

BTC歷史案例:把同一筆空單的成本接完整

下面用Binance USDⓈ-M Futures公開的Kline/Candlestick Data(合約K線),取2026年9月10日至11日BTCUSDT永續歷史行情,示範怎麼把價格事件接到成本帳。時間採UTC(協調世界時),UTC+8時區加八小時;四小時與十五分鐘K線都以開盤時刻命名,完整價格範圍等收盤後才可確認。行情是真實歷史,但下方數量、成交價、費率及預留全部是教學假設,沒有實際下單或私人帳單。

第一步:確認價格時序,再列成交假設

這份計畫等四小時收盤低於9月8日已知日低77,600.1;9月10日12:00那根收77,218.5,到16:00才確認。確認後回查前六根已完成K線,最近的陽線是10日00:00那根,取其完整影線範圍,固定觀察區77,912.2至78,543.9,等待首次回測下緣做空,按最新成交價觀察78,600.0停損,目標76,536.6。只等接下來六根四小時,到11日16:00前仍未觸及就取消;入場前四小時若先收盤上破觀察區上緣78,543.9,或下一段十五分鐘開盤直接高於上緣,也取消。

歷史十五分鐘圖中,11日12:30那根最低到76,000.3,最高卻只有77,671.4,還沒到入場價,不能把這個低點算作空單獲利。12:45–13:00才首次包含77,912.2;之後各根未先到目標,到13:45–14:00才跨過78,600.0。這兩段分屬不同K線,能核對觸價順序,卻不能證明委託已觸發或成交,也不提供標記價格的路徑。標記價格是平台用於估值與風險判定的參照,與最近一筆撮合的最新成交價不同。

現在另作明確假設:空單在77,912.2全數成交0.050 BTC,事前另設退出偏差20的壓力情境,因此假設退出均價為78,620.0。這20屬教學滑價設定,不是K線提供的成交回報;它位於該根高低範圍內,也不因此變成可取得的保證價格。原數量如何同時受風險與資金占用限制,可看停損距離與倉位大小。

BTCUSDT15分鐘歷史圖:12:30低點在入場前、12:45首次觸及77912.2、13:45跨78600;後續遮蔽,78620另標假設。

第二步:逐筆算開倉與平倉費

假設兩端費率各為0.05%,且費用都以USDT計,不代表交易所現行報價或個人等級。百分比要先換成0.0005,不能把0.05直接乘進去。開倉名義成交額為0.050×77,912.2=3,895.61,開倉費1.947805 USDT;平倉名義成交額為0.050×78,620.0=3,931.00,平倉費1.9655。兩端合計3.913305。

開倉和平倉價格不同,不能只把開倉費乘二代替;這次差額雖小,數量或價差放大後仍會累積。若實際分成幾筆,每筆按自己的價格、數量與適用費率計算,再合計。這份假設帳只有一筆完整入場與一筆完整退出,所以先確認兩側數量同為0.050,才繼續結算。

教學0.050BTC按77912.2與78620雙邊0.05%計費,開倉1.947805、平倉1.9655,合3.913305USDT。

第三步:用兩條路核對滑價沒有扣兩次

第一條路直接使用假設成交價:價格毛損益是0.050×(77,912.2-78,620.0)=−35.39 USDT,再扣交易費3.913305,得到−39.303305 USDT。這個數字只完成了價格與交易費,尚未包括未核清的資金費與其他調整。

第二條路從計畫退出價開始:0.050×(77,912.2-78,600.0)=−34.39。相對計畫的不利滑價為0.050×20=1,再扣同一筆3.913305交易費,結果仍是−39.303305。兩條路對上,表示這一段退出偏差沒有漏算,也沒有重複扣。用78600計算的平倉費會不同,因此對照時兩條路都採78620的同一假設成交費。

完整比較表:成交價路徑與計畫價路徑同得−39.303305,錯誤重扣得−40.303305;均未含未知資金費與調整。

第四步:資金費未知,就先保留未完成的結算

原計畫另外預留1 USDT資金費,所以事前把35.39、3.913305與1相加,成本情境預算是40.303305 USDT。它恰好和上表錯誤重扣的絕對值相同,意義卻不同:一個是在做預算,一個是把已計入的滑價再扣一遍。只看總數,找不到這個差別。

這個短時段模型按假設在當日下午結束,但帳戶是否參與結算、是否有延後入帳與其他費用,仍未取得私人紀錄。資金費欄填「待對帳」,預留欄另記1。不能因為想讓試算表顯示最終答案,就宣布資金費已扣1或確定為零;−39.303305也不能改名為帳戶最終淨損益。

若之後核實資金費支付0.4、沒有其他調整,同一套算式才得到−39.703305;若反而收取0.4,則是−38.903305。兩者都只是另外設的對帳情境,不是這組教學情境的已知結果。補來的每筆費用還要核商品、帳戶、資產與期間,不能把別筆部位的一次扣款塞進來。

這份記錄可以先標成「假設價格與交易費已算、其他費用待查」,不用強迫每一列都顯示已結算。若0.050完全沒有成交,應記未成交計畫,不能沿用這筆損失;若只有部分成交,就按已確認數量重做,剩餘委託另查取消狀態。帳算到哪一層,要和證據齊到哪一層一致。

事前預算40.303305含固定1預留;事後價格費用部分−39.303305,資金費等未知,不能記成最終淨損益。

第五步:改數量或費率,另存一份情境

只把數量減半成0.025 BTC,其他價格與費率不變,價格損失變17.695,交易費變1.9566525,兩項合計19.6516525。若仍保留固定1 USDT,預算為20.6516525,而不是把40.303305全部除二。固定金額與隨成交量變動的費用,縮放方式不同。

另一份情境保持0.050 BTC,只把兩端費率加倍為0.10%,交易費變7.82661,含同一筆1 USDT預留的預算為44.21661。價格損益不因此改變,費率降低也不會使一筆先停損的交易變成看對行情。每次只改指定條件,保留原結果,才知道差異從哪裡來。

基準、數量減半及雙邊費率加倍的獨立情境預算分別40.303305、20.6516525、44.21661;固定預留不跟數量縮放。

成本對不上,先查欄位再改公式

先確認每項費用屬於哪一筆成交、哪種資產和哪個期間,再核算式。 少了費用幣別、把部分成交當全數退出,或將平台已含費的結果再扣費,算得再多位小數也不會更準。遇到這些缺口,先停止完整淨損益計算,保留已核清的部分。

分批成交與不同費用幣別,逐筆歸屬

每筆至少記成交識別碼、時間與時區、方向、價格、數量、交易費及費用幣別。分批均價用價格乘數量的總和除以該側總數量,不能拿最後一筆價格代表全部。出入數量未對齊,就先找未成交餘單、剩餘倉位或漏掉的成交,不硬把兩邊當成已結束交易。

費用若不是USDT,先保留原幣數量,再記換算時點、匯率及來源。沒有換算依據,就只列各資產原額與待查項,不把USDT與另一種代幣直接相加。這是統一對帳單位,不表示所有平台都用其他幣收這筆合約費;實際收費資產仍以紀錄為準。

平台已含費的結果,不能再扣一輪

OKX《交易手續費規則常見問題》將合約已實現結果與交易、資金費放在一起解釋;Bybit的平倉結果也有自己的費用歸屬口徑。若畫面給的是已扣相關費用的數字,再減一次開平倉費,就不是更完整,而是重複扣。反過來,原始成交表中的價差欄也不能只憑「已實現」三字就認定全部含費。

還要留意費用後到或跨日的情況。第一次對帳未齊,可以保留「暫結、待資金費」;補齊後再更新,留下調整來源。不要一面用帳戶餘額差核總額,一面又把同一筆已在餘額扣過的費用減掉,最後誤以為平台多收。

把成本放回事前計畫與複盤

成本紀錄的用途,是讓下一份預算更接近可能遇到的情境,並保留超支原因。完整記錄價格偏差、費率與未知項,比只把最高槓桿調低一格更能指出問題;但任何預留都不能保證實際最大損失,行情與執行條件仍可能超出設定。

降費與保護退出,各有取捨

如果只為了Maker費率而等待,價格可能先離開,退出也可能沒有完成。若採市價或帶價格限制的委託,則要知道流動性不足時如何處理餘量。費用優化必須放在原先風險與退出條件內比較,不能先把必須退出的規則取消,再說自己省下一筆費用。

後續學習與使用範圍

把計畫價、假設成交價、實際成交價和費用分欄,可沿用交易日誌的欄位與範本。合約止盈止損怎麼設?觸發價格、成交與只減倉,接續處理退出委託;資金費則按前述方向與結算逐期記,不拿預留替代帳單。先把這一筆算得回去,再擴大到整批交易,會比只看一個勝率更有用。

本文僅供合約機制與歷史計算練習,不構成投資建議。歷史價格不證明可取得的成交,所有示例費率、滑價與帳戶設定均為假設;真實交易可能有未成交、因保證金不足被強制平倉,以及額外成本。

常見問題

Q1. 合約手續費是用保證金乘費率嗎?

本文USDT線性合約按每筆成交數量、價格與適用費率計算。若以張數表示,須先核面值及乘數;保證金占用不是同一個計費基數。

Q2. 限價單一定按Maker費率收費嗎?

不一定。立即與既有委託撮合的限價單也可能是Taker。Post-only可能因會立即成交而取消,不能把掛單意圖當成已成交。

Q3. 已經用成交價算損益,還要扣滑價嗎?

不再扣同一段已包含的偏差。可以另列滑價作執行分析,或從計畫價路徑扣一次;兩條路應使用同一數量及交易費。

Q4. 預留1 USDT資金費,可以直接記成支出嗎?

不能。預留屬事前預算,實際支付或收取仍按帳戶流水。未知時填待對帳,不填1或零來湊最終結果。

Q5. 不同幣別的交易費怎麼加總?

先保留原幣數量,再記換算時點、匯率與來源。缺少換算依據就保留待查,不能把不同資產的數字直接相加。

Q6. 為什麼成本表對不上平台顯示的淨損益?

先核欄位是否已含費,再查成交數量、費用資產、資金費、期間與延後入帳。帳戶餘額還可能包含其他交易及劃轉,不直接等於本筆結果。

合約交易成本合約手續費滑價淨損益Maker Taker資金費永續合約風險管理