模拟盘对齐币本位:钱包支持 ETH/BTC,现货桥与期权权利金走本地撮合。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -145,3 +145,58 @@ def spot_usdc_usdt_fill(
|
||||
fee=fee,
|
||||
)
|
||||
raise ValueError("direction 须为 usdt_to_usdc 或 usdc_to_usdt")
|
||||
|
||||
|
||||
def spot_coin_usdt_fill(
|
||||
*,
|
||||
direction: str,
|
||||
amount: float,
|
||||
bid: float,
|
||||
ask: float,
|
||||
fee_rate: float,
|
||||
coin: str = "ETH",
|
||||
) -> SpotConvertResult:
|
||||
"""
|
||||
对齐实盘 ETH-USDT / BTC-USDT 现货市价:
|
||||
- usdt_to_coin: 用 USDT 买币, 吃卖一 ×(1+f); amount=USDT
|
||||
- coin_to_usdt: 卖币换 USDT, 吃买一 ×(1-f); amount=币数量
|
||||
"""
|
||||
f = float(fee_rate)
|
||||
amt = float(amount)
|
||||
ccy = (coin or "ETH").strip().upper() or "ETH"
|
||||
d = (direction or "").strip().lower()
|
||||
if d in ("usdt_to_coin", "usdt_to_eth", "usdt_to_btc"):
|
||||
base = float(ask)
|
||||
fill = base * (1.0 + f)
|
||||
if fill <= 0:
|
||||
raise ValueError("无效卖一价")
|
||||
to_amt = amt / fill
|
||||
fee = amt * f
|
||||
return SpotConvertResult(
|
||||
direction="usdt_to_coin",
|
||||
from_ccy="USDT",
|
||||
to_ccy=ccy,
|
||||
from_amount=amt,
|
||||
to_amount=to_amt,
|
||||
base_px=base,
|
||||
fill_px=fill,
|
||||
fee=fee,
|
||||
)
|
||||
if d in ("coin_to_usdt", "eth_to_usdt", "btc_to_usdt"):
|
||||
base = float(bid)
|
||||
fill = base * (1.0 - f)
|
||||
if fill <= 0:
|
||||
raise ValueError("无效买一价")
|
||||
to_amt = amt * fill
|
||||
fee = to_amt * f
|
||||
return SpotConvertResult(
|
||||
direction="coin_to_usdt",
|
||||
from_ccy=ccy,
|
||||
to_ccy="USDT",
|
||||
from_amount=amt,
|
||||
to_amount=to_amt,
|
||||
base_px=base,
|
||||
fill_px=fill,
|
||||
fee=fee,
|
||||
)
|
||||
raise ValueError("direction 须为 usdt_to_coin 或 coin_to_usdt")
|
||||
|
||||
Reference in New Issue
Block a user