為什麼你的 TradingView
自動下單開倉大小不對
qty_type=usdt vs margin_usdt — 語意陷阱完整解說
你的 TradingView Alert 寫了 qty: 20 加 leverage: 3。 理論上應該開 $60 倉位。實際打進交易所只開 $20。**這不是 bug**, 是永續合約 qty_type 一個會吃掉很多自動交易用戶的語意陷阱。 本文用真實 Binance fill 對照、五種計算方式拆解、Pine alert 範本, 一次講清楚怎麼避開。
qty_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_type | qty 的意思 | 實際倉位 | 保證金 |
|---|---|---|---|
| ⭐ margin_usdt | 保證金 USDT | $60 | $20 |
| margin_pct | 用餘額的 X% 當保證金 | 依餘額算 | 餘額 × X% |
| fixed | 寫死數量(顆數) | 20 × $50,000 = $1M ⚠️ | $333,333 |
| percent | USDT 餘額 % | 餘額 × 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。**沒一個自動橋接能逃過這個翻譯層**。
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 驗一次。
如何驗證你的設定是對的
三招都用,最保險:
- TVSBot Dry-run 模式:策略開 dry-run,TV alert 觸發後看 dashboard 訊號詳情頁的「resolved qty」欄位 — 那是真實會送出去的數字。
- 交易所小資金:實盤先用最小單位試一次,看交易所成交視窗的 「名義價值」欄位跟你預期是否一致。
- 看 TVSBot 訊號通知:成功下單後 TG / app 通知會寫
名義 $X / 保證金 $Y,跟你心中的數對得起來就 OK。
Get started
TVSBot 非託管 TradingView → 交易所自動下單,支援 Binance / OKX / Bitget / Bybit / Gate / BingX / Hyperliquid 共 7 家。本月剛把 qty_type UX 改到位 — 預設挑直覺對的、不直覺的選項加即時警示。
免費試用 3 天