9875ee6d44
- 止盈止损改为程序本地监控,触发后市价平仓(含跳空) - 交易前30分钟后台自动连接 CTP - 保证金占用上限默认30%,可在系统设置修改 - K线标准蜡烛图红跌绿涨,费率表全宽固定表头 - 品种推荐按保证金比例×总资金计算推荐手数 Co-authored-by: Cursor <cursoragent@cursor.com>
57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
"""交易上下文:设置读取、资金、模式。"""
|
|
from __future__ import annotations
|
|
|
|
from typing import Callable, Optional
|
|
|
|
TRADING_MODE_SIM = "simulation" # SimNow CTP
|
|
TRADING_MODE_LIVE = "live" # 期货公司 CTP
|
|
|
|
|
|
def get_trading_mode(get_setting: Callable[[str, str], str]) -> str:
|
|
m = (get_setting("trading_mode", TRADING_MODE_SIM) or TRADING_MODE_SIM).strip().lower()
|
|
return m if m in (TRADING_MODE_SIM, TRADING_MODE_LIVE) else TRADING_MODE_SIM
|
|
|
|
|
|
def get_sizing_mode(get_setting: Callable[[str, str], str]) -> str:
|
|
from position_sizing import normalize_sizing_mode
|
|
return normalize_sizing_mode(get_setting("position_sizing_mode", "risk"))
|
|
|
|
|
|
def get_risk_percent(get_setting: Callable[[str, str], str]) -> float:
|
|
try:
|
|
return max(0.1, float(get_setting("risk_percent", "1") or 1))
|
|
except (TypeError, ValueError):
|
|
return 1.0
|
|
|
|
|
|
def get_max_margin_pct(get_setting: Callable[[str, str], str]) -> float:
|
|
"""单笔/总仓位保证金占权益上限(%),默认 30。"""
|
|
try:
|
|
return max(1.0, min(100.0, float(get_setting("max_margin_pct", "30") or 30)))
|
|
except (TypeError, ValueError):
|
|
return 30.0
|
|
|
|
|
|
def get_account_capital(conn, get_setting: Callable[[str, str], str]) -> float:
|
|
"""优先 SimNow/期货公司 CTP 权益;未连接时用设置中的参考资金。"""
|
|
del conn
|
|
mode = get_trading_mode(get_setting)
|
|
try:
|
|
from vnpy_bridge import ctp_status, get_ctp_balance
|
|
|
|
st = ctp_status(mode)
|
|
if st.get("connected"):
|
|
bal = get_ctp_balance(mode)
|
|
if bal and bal > 0:
|
|
return float(bal)
|
|
except Exception:
|
|
pass
|
|
try:
|
|
return float(get_setting("live_capital", "0") or 0)
|
|
except (TypeError, ValueError):
|
|
return 0.0
|
|
|
|
|
|
def trading_mode_label(get_setting: Callable[[str, str], str]) -> str:
|
|
return "SimNow" if get_trading_mode(get_setting) == TRADING_MODE_SIM else "期货公司实盘"
|