本文目錄與來源 4 節
文章重點
- quantize 調整小數位數,不保證結果是指定刻度的整數倍。
- 向上或向下對齊都可能改變原本的價格或數量限制。
- 刻度對齊後,仍須檢查適用的數量、金額與預算限制。
兩位小數不保證能下單
價格 1.23、最小跳動單位 0.05,看起來都是兩位小數,卻對不上刻度:1.23 不是 0.05 的整數倍。本次合成測試把兩個數值交給 Decimal.quantize,結果仍是 1.23,除以 0.05 的餘數是 0.03。
quantize 管的是小數位數。Python 文件說明,它依第二個數值的指數調整位數;Binance 現貨的 PRICE_FILTER 則要求價格符合 tickSize 的倍數條件。顯示格式過關,還不能當成交易規則過關。[1][2]
把相同數值多寫幾個零
將刻度從 0.05 改寫為 0.05000000 後,quantize 的輸出是 1.23000000。小數位變多了,餘數仍是 0.03000000。對這組資料,先除以刻度、向下取整數、再乘回刻度,才得到 1.20;向上取整數則得到 1.25。原本已對齊的 1.25,兩種方向都維持 1.25。
讀者可用 Python 標準函式庫重做:from decimal import Decimal as D, ROUND_FLOOR, ROUND_CEILING;令 x = D('1.23')、step = D('0.05'),比較 x.quantize(step) 與 (x / step).to_integral_value(rounding=ROUND_FLOOR) * step。將 ROUND_FLOOR 換成 ROUND_CEILING 即可比較另一方向。價格與刻度直接從原始十進位字串建立,避免先轉 float 再轉 Decimal。[1]
捨入方向會改變委託
買方把最高限價訂在 1.23,調到 1.25 就超過原本上限;賣方把最低限價訂在 1.23,調到 1.20 就低於原本下限。要往哪邊調,得先看這筆委託的限制,不能替所有買單或賣單固定一個方向。對齊刻度也不保證成交。
數量也有相同問題。本次把數量設為 0.0049、步進設為 0.005,向下對齊得到 0.000,向上則得到 0.005。前者沒有可送出的正數量,後者超過原先數量。遇到這種情況,應回到原本的數量與預算限制決定是否取消,不應為通過格式檢查就擅自加量。
對齊之後,還有其他檢查
Binance 的 LOT_SIZE 另有數量上下限,名目金額也有獨立的篩選條件。以另一組合成限制為例,價格 1.20 乘數量 4 等於 4.80;如果最低名目金額設為 5,仍然不合格。應按當前交易對與委託類型讀取適用規則,不把本文示例當成實際門檻。[2]
這次於 2026-11-07 使用 Python 3.14.6、Decimal 精度 28 執行四組小型合成案例,沒有連接交易帳戶或送單,也沒有測量報酬、手續費、滑價或成交率。示例中的除法可在此精度下精確表示;更長的數值必須另測精度與邊界。正式驗證還需拒絕非有限值,處理零值或停用規則,並在調整後重查價格、數量與預算限制。本文由 AI 輔助研究與撰寫,封面為 AI 概念插畫。
資料來源與延伸閱讀
(2)
核對數據時,請一併確認來源的日期、統計期間與適用條件;部分連結會持續更新。
本文為資訊與教育用途,不構成投資建議。加密資產可能大幅波動,請獨立查證。


