【TQuant 從 0 到 1 - Day 2】 避開量化交易的隱形殺手:用 TQuant Lab 精準控制手續費與滑價,讓策略更勝一籌!

量化交易

Photo by Kelly Sikkema on Unsplash

前言

在投資市場中,往往都會忽略一個關鍵問題:交易其實是有成本的!手續費與滑價看似不起眼,但卻可能在不知不覺間吞噬你的獲利。我們今天就要用最簡單易懂的方式,帶你認識什麼是手續費和滑價,並教你如何用 TQuant Lab 精準控制這些交易成本,讓你的投資策略事半功倍!不管你對量化交易有多陌生,放心,跟著我們的步驟,馬上就能輕鬆上手!


手續費

手續費,其實在我們的日常生活中隨處可見。比如,當你轉帳給朋友,銀行可能會收取轉帳手續費;又或者你在 ATM 提款,有些銀行會收取跨行手續費。這些都是我們支付服務費用的一種形式。

在交易中也是一樣,每當我們買賣股票、期貨或其他金融商品,券商會收取一筆手續費作為交易服務的費用。就像轉帳需要付銀行手續費一樣,這筆費用看起來很小,但累積起來卻可能對你的投資回報產生不小的影響。所以,了解手續費並學會計算,是每個投資新手必須掌握的一個重要概念!

from zipline.api import set_commission
from zipline.finance import commission

def initialize(context):
    set_commission(commission.<其中一種commission models>)

程式碼中的commission models就是將以下五種模型依照使者用需求去做選用

1. NoCommission()

這種方式不收取任何手續費,通常會出現在模擬交易或某些優惠活動中。

2. PerDollar(cost = 0.0015)

這種方式是按照交易金額的比例來收取手續費,每交易一元的股票所需支付的固定費用。預設為 0.0015 元。舉例來說,我們今天將cost設定為0.002,那麼買賣 10,000 元的股票就會支付 20 元手續費。

3. PerTrade(cost = 0.0)

這種模式是根據每筆交易來收取固定的手續費。不管交易金額大小,都會支付相同的費用。預設為 0 元。舉例來說,我們今天將cost設定為50,那麼無論買賣 1,000 元還是 1,000,000 元的股票,手續費都固定是 50 元。

4. PerShare(cost = 0.001 , min_trade_cost = 0.0)

這種方式是根據你交易的股數來計算手續費,每一股會收取固定的費用。例如,假設每股手續費是 0.01 元,那麼買賣 1,000 股 的股票,手續費就是 10 元

此外,這種計算方式通常可以設定一個「最低手續費」,也就是參數 min_trade_cost,預設情況下沒有最低收費限制(即為 0)。設定「最低手續費」的目的,是確保即使交易量很小,也能達到基本的收費標準。

延續上面的例子,假設我們設定 min_trade_cost = 15.0,但計算出來的手續費只有 10 元,這時候模型會自動將手續費調整為 15 元,以符合最低手續費的要求。

5. Custom_TW_Commission(min_trade_cost = 20 , discount = 1.0 , tax = 0.003)

台灣股票市場的手續費與稅金

在台灣股票市場,進行股票交易時主要會產生 兩個直接成本手續費證交稅

手續費

  • 計算方式:手續費 = 成交價 × 成交股數 × 0.1425% × 折扣
    • 預設手續費率為 0.1425%
    • 折扣(discount)預設值為 1,即沒有折扣(可自行設定優惠折扣)。
  • 最低手續費:預設最低手續費(min_trade_cost) 20 元,即使計算的手續費低於 20 元,也會按照 20 元收費。
  • 特點買進賣出時皆須繳交。

證交稅

  • 計算方式:證交稅 = 成交價 × 成交股數 × 證交稅率
    • 證交稅率(tax)預設值為 0.003
  • 特點:只有在賣出股票時才需要支付證交稅,買進時不收取。

舉例說明

假設你在台灣股票市場進行一筆交易:

  • 成交價:50 元/股
  • 成交股數:1,000 股
  • 手續費折扣:預設為 1.0(無折扣)

手續費計算  (買進或賣出都要繳交)

50×1,000×0.1425%×1=71.25 元
由於手續費高於最低手續費 20 元,所以實際收取手續費為 71.25 元(實際交易時若有小數點皆採無條件捨去)。

證交稅計算(賣出時才需要繳交)

50×1,000×0.3%=150 元


滑價

滑價(Slippage)是指你下單時所預期的價格和實際成交價格之間的差異。這種現象通常發生在市場價格快速波動流動性不足的情況下,特別是當你的下單量較大、標的交易量較小時更容易出現。

在交易中,滑價是一種中性現象,並不一定是壞事。當市場價格對你有利時,滑價可以幫你節省成本或提高收益;而當市場價格對你不利時,滑價則可能增加你的交易成本或降低收益。

為什麼會發生滑價?

  1. 市場價格波動
    在市場波動較大的情況下,下單時價格可能迅速變動,導致實際成交價格與你看到的預期價格不同。
  2. 市場流動性不足
    當市場上的買賣單量較少(流動性低)時,很難立即以理想價格成交,可能需要與其他價格的單子進行撮合,導致滑價發生。
  3. 大額交易的影響
    若你的交易量較大,而市場上的買賣單有限,則訂單可能會逐步撮合到不同的價格,這會產生較大的滑價。

例子

假設你準備買入 100 股股票,預期價格是 50 元/股

  1. 不利滑價(價格上漲)
    市場價格在你下單的瞬間上漲至 50.2 元,你實際成交的價格變為 50.2 元
    • 預期成本:100 股 × 50 = 5,000 元
    • 實際成本:100 股 × 50.2 = 5,020 元
    • 滑價成本:增加了 20 元
  2. 有利滑價(價格下跌)
    市場價格在你下單的瞬間下跌至 49.8 元,你實際成交的價格變為 49.8 元
    • 預期成本:100 股 × 50 = 5,000 元
    • 實際成本:100 股 × 49.8 = 4,980 元
    • 滑價收益:節省了 20 元

如何控制滑價?

雖然滑價難以完全避免,但我們可以透過以下方式來降低不利滑價的影響:

  1. 選擇流動性較高的標的:交易量大的股票或市場,較少出現流動性不足的問題。
  2. 避開市場波動劇烈的時段:例如開盤、收盤前後,或重要消息發布時。
  3. 使用限價單:透過限價單設定成交價格上限,避免出現超出預期的成交價格。

為了更貼近真實交易的狀況,TQuant Lab提供了四種滑價模型,讓你可以根據需求設定不同的滑價情境,詳請請見後續教學”回測四大架構的基本設定 initialize的具體設定有什麼”:

from zipline.api import set_slippage
from zipline.finance import slippage

def initialize(context):
    set_slippage(slippage.<其中一種slippage models>)


程式碼中的slippage models就是將以下四種模型依照使用者需求去做選用

1. FixedSlippage(spread=0.0)

這種滑價模型設定一個固定的價差(spread)來模擬交易成本,不能設定成交量限制。

  • 計算方式
    • 買入時的成交價格:
      成交價格 = price + spread/2
    • 賣出時的成交價格:
      成交價格 = price – spread/2
  • Parameters
    • spread(float, optional):固定的價差,預設為 0.0

2. VolumeShareSlippage(volume_limit=0.025, price_impact=0.1)

這個模型根據交易量佔當天總成交量的比例(volume share)來計算滑價,並考慮價格影響。

  • 計算方式
    • 買入時:
      price × [1 + (price_impact) × (volume_share2)]
    • 賣出時:符號改為減號。
  • Parameters
    • volume_limit(float, optional):設定交易量佔當日總量的最高百分比,預設為 2.5%
    • price_impact(float, optional):滑價影響係數,預設為 0.1

3. FixedBasisPointsSlippage(basis_points=5.0, volume_limit=0.1)

這種模型使用固定基點(basis points)來計算滑價,並設置交易量限制。

  • 計算方式
    • 買入時:
      price × [1+(basis_points × 0.0001)]
    • 賣出時:符號改為減號。
  • Parameters
    • basis_points(float, optional):設定滑價的基點,預設為 5.0
    • volume_limit(float, optional):交易量佔當日總成交量的最高百分比,預設為 10%

4. NoSlippage

這種模型不設定任何滑價

【TQuant Lab 回測系統】解決你的量化金融痛點

全方位提供交易回測所需工具

下一篇 -【TQuant 從 0 到 1 – Day 3】(連結待補)

延伸閱讀

程式交易是什麼?程式交易教學、優缺點及常見策略懶人包 – TEJ台灣經濟新報

相關連結

返回總覽頁
Procesing