Align margin display with CTP counter rates and position margin.

Read margin ratios from CTP instrument query and margin-rate API instead of vnpy ContractData (which lacks ratios). Keep occupied margin on position UseMargin; use per-lot max rate for recommend table.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-29 10:21:44 +08:00
parent 71c480a587
commit 19676943d0
5 changed files with 332 additions and 50 deletions
+3
View File
@@ -92,6 +92,7 @@ def margin_one_lot(
) -> tuple[float, str, dict]:
"""1 手保证金。CTP 已连接时优先读柜台合约保证金率,否则用本地参考规格估算。
direction 可为 long / short / max(多空费率取较大值,用于可开仓品种表)。
返回 (保证金, 来源 estimate|ctp, 合约规格片段)。
"""
spec = get_contract_spec(ths_code)
@@ -113,6 +114,8 @@ def margin_one_lot(
merged["mult"] = ctp_spec["mult"]
if ctp_spec.get("tick_size"):
merged["tick_size"] = ctp_spec["tick_size"]
if ctp_spec.get("margin_rate"):
merged["margin_rate"] = ctp_spec["margin_rate"]
return float(ctp_margin), "ctp", merged
except Exception:
pass