自動交易陷阱 · 永續合約

為什麼你的 TradingView
自動下單開倉大小不對

qty_type=usdt vs margin_usdt — 語意陷阱完整解說

2026-06-05·8 分鐘閱讀·所有 TradingView 自動交易橋接用戶必看

你的 TradingView Alert 寫了 qty: 20leverage: 3。 理論上應該開 $60 倉位。實際打進交易所只開 $20。**這不是 bug**, 是永續合約 qty_type 一個會吃掉很多自動交易用戶的語意陷阱。 本文用真實 Binance fill 對照、五種計算方式拆解、Pine alert 範本, 一次講清楚怎麼避開。

TL;DRqty_type=usdt 表示qty 就是倉位名義價值(leverage 只影響保證金需求、不放大倉位)。 想要「20 USDT × 3x 槓桿 = $60 倉位」這種散戶直覺,應該用qty_type=margin_usdt。三秒解法:把 payload 的 "qty_type": "usdt"改成 "qty_type": "margin_usdt"

真實案例:NEAR 永續測試開單

一個 TVSBot 用戶設了 TradingView Alert 跑 1 小時短線策略,payload 如下:

{
  "secret": "...",
  "strategy": "NEAR測試",
  "side": "buy",
  "symbol": "NEARUSDT",
  "exchange": "binance",
  "market_type": "futures",
  "order_type": "market",
  "qty_type": "usdt",
  "qty": 20,
  "leverage": 3
}

他預期:20 USDT × 3 倍槓桿 = 60 USDT 倉位。實際 Binance fill 出來:

數量 / 成交數量 (USDT):  19.592 / 19.592
均價 / 價格:             2.449 / 市價
手續費:                  0.00001478 BNB

倉位只有 $19.6 名義價值(成交 NEAR ≈ 8 顆 × $2.449)。 槓桿 3x 並沒有讓倉位變成 $60。看起來「leverage 沒生效」, 但其實 leverage 完全有生效 — 只是它影響的是保證金需求而不是倉位大小

為什麼這跟你的直覺相反

散戶大腦的模型通常是:「我有 20 USDT 想開倉,用 3 倍槓桿放大成 $60 倉位」。 這個直覺對應的是保證金視角 — 你出 X 元保證金、交易所給你 Y 倍曝險。

但交易所 API 視角不同。永續合約下單時,你直接告訴交易所 「我要開 N USDT 名義價值的倉位」, leverage 是另一個獨立參數 (只決定這筆名義要扣多少保證金)。所以:

# 交易所 API 語意(多數橋接套用 qty_type=usdt 的解讀)
notional  = qty                      # 你說 20 就是 20 USDT 名義
margin    = notional / leverage      # 自動算保證金 = 20/3 ≈ $6.67

結果:你被扣 ~$6.67 保證金、開了 $20 倉位、槓桿 3x。**對交易所而言完全正確。** 但跟你腦中「我用 20 元 × 3 倍 = 60 元曝險」完全不一樣。

五種 qty_type 完整對照

TVSBot 支援 5 種 qty_type,每種對應一種計算方式。以下用 相同情境(qty=20、leverage=3、symbol=BTCUSDT 假設 $50,000)展示差異:

qty_typeqty 的意思實際倉位保證金
⭐ margin_usdt保證金 USDT$60$20
margin_pct用餘額的 X% 當保證金依餘額算餘額 × X%
fixed寫死數量(顆數)20 × $50,000 = $1M ⚠️$333,333
percentUSDT 餘額 %餘額 × 20%餘額 × 20% / lev
⚠️ usdt倉位 notional$20$6.67

重點不是哪個「對」 —5 種都對,差別是你想用哪個心智模型計算

為什麼這個 trap 不只是 TVSBot 的事

幾乎所有 TradingView 自動交易橋接都有這個語意陷阱。差別只是「誰會幫你擋」:

3Commas

DCA bot 預設用「保證金 USDT」邏輯(自己乘 leverage),但 SmartTrade API 的 units 欄位是 base currency 顆數, 換 USDT 又是另一種解讀。同一平台不同產品內語意不一致是常見坑。

TradingConnector / Pine 內建 strategy.order

Pine 的 strategy.order(qty=X) 在 backtest 是 base 顆數、 串自動下單 webhook 後常需手動換算成 notional/margin — 很多人 backtest 報酬曲線跟實盤不一樣,第一個嫌疑犯就是這個。

CCXT 直接寫 bot

create_order(amount=X) 的 amount 各所定義不一: Binance Futures USDT-M 是 base 顆數、COIN-M 是合約張數、 OKX swap 又有自己的 contract size。**沒一個自動橋接能逃過這個翻譯層**。

這就是為什麼 TradingView 自動交易橋接這品類存在 — 把交易所 API 那層醜陋的「合約規格 × qty 語意 × 槓桿關係」抽象掉,給 trader 直覺的選項。 但抽象做得不好就會變成新陷阱

TVSBot 怎麼擋

本月(2026 年 6 月)我們做了 3 個改動避免新用戶踩坑:

1. 策略編輯頁 dropdown 把 margin_usdt 設為 futures 推薦預設,標 ⭐ 並寫成「保證金 USDT(推薦:你用 X USDT × 槓桿開單)」。 usdt 改成「倉位 USDT(進階:直接指定名義價值)」。

2. 選 usdt 即時跳黃色警示: 「倉位固定 $X、leverage 只影響保證金需求(不會放大倉位)」。 選 margin_usdt 跳綠色算式:「用 20 USDT × 3x → 倉位 $60」。 進場前先看清楚數字。

3. 市集策略發布頁同步:策略作者設訊號預設參數時 也是 margin_usdt 排第一 + 範例 placeholder 寫「20(保證金,× 槓桿 = 倉位)」。 訂閱者照 KOL 設定跑時,自然落在直覺對的那條軌道。

三秒解法:你現在能改的

# 把 TradingView Alert payload 改成:
{
  "secret": "...",
  "strategy": "NEAR測試",
  "side": "buy",
  "symbol": "NEARUSDT",
  "exchange": "binance",
  "market_type": "futures",
  "qty_type": "margin_usdt",  // ← 改這行
  "qty": 20,
  "leverage": 3
}
# 結果:保證金 $20、倉位 $60、槓桿 3x ✓

下次 Alert 觸發、Binance 那邊就會看到正確的 $60 名義倉位。 不用改 Pine、不用改任何 backtest — 只改這一個字串。

常被一起踩的兩個變形

變形一:margin_pct 的 100 是「100」還是「100%」?

答:TVSBot 的 margin_pct: 10 表示「用餘額 10%」,不是 10 元。 如果你寫 margin_pct: 100,那是用整個餘額當保證金、 搭配 leverage 開超大倉。容易爆。

變形二:fixed 在 perpetual 上的單位

Binance USDT-M futures 的 fixed qty 是「BTC 顆數」。 所以 qty_type=fixed, qty=20 在 BTC 上意思是「20 顆 BTC」、 $50k 一顆就是 $1M 名義倉位。誤踩會直接被交易所擋 (超過槓桿上限),但偶爾會在小幣(如 NEAR)成功送進去然後當天就爆。fixed 永遠先在 testnet 驗一次

如何驗證你的設定是對的

三招都用,最保險:

  1. TVSBot Dry-run 模式:策略開 dry-run,TV alert 觸發後看 dashboard 訊號詳情頁的「resolved qty」欄位 — 那是真實會送出去的數字。
  2. 交易所小資金:實盤先用最小單位試一次,看交易所成交視窗的 「名義價值」欄位跟你預期是否一致。
  3. 看 TVSBot 訊號通知:成功下單後 TG / app 通知會寫名義 $X / 保證金 $Y,跟你心中的數對得起來就 OK。

Get started

想把今天學到的東西自動化跑起來?

TVSBot 非託管 TradingView → 交易所自動下單,支援 Binance / OKX / Bitget / Bybit / Gate / BingX / Hyperliquid 共 7 家。本月剛把 qty_type UX 改到位 — 預設挑直覺對的、不直覺的選項加即時警示。

免費試用 3 天