feat: 计仓改为固定手数/固定金额,推荐过滤与CTP保证金,下单与持仓UI优化
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -372,7 +372,11 @@ def init_db():
|
||||
if not get_setting("trading_mode"):
|
||||
set_setting("trading_mode", "simulation")
|
||||
if not get_setting("position_sizing_mode"):
|
||||
set_setting("position_sizing_mode", "risk")
|
||||
set_setting("position_sizing_mode", "fixed")
|
||||
if not get_setting("fixed_lots"):
|
||||
set_setting("fixed_lots", "1")
|
||||
if not get_setting("fixed_amount"):
|
||||
set_setting("fixed_amount", "5000")
|
||||
if not get_setting("risk_percent"):
|
||||
set_setting("risk_percent", "1")
|
||||
if not get_setting("max_margin_pct"):
|
||||
@@ -755,7 +759,13 @@ def api_symbols_mains():
|
||||
def api_symbols_recommended():
|
||||
"""品种下拉:仅展示当前资金下推荐的品种(与下方品种推荐表一致)。"""
|
||||
from recommend_store import recommend_payload
|
||||
from trading_context import get_account_capital, get_max_margin_pct
|
||||
from trading_context import (
|
||||
get_account_capital,
|
||||
get_fixed_lots,
|
||||
get_max_margin_pct,
|
||||
get_sizing_mode,
|
||||
get_trading_mode,
|
||||
)
|
||||
|
||||
conn = get_db()
|
||||
try:
|
||||
@@ -764,6 +774,9 @@ def api_symbols_recommended():
|
||||
conn,
|
||||
live_capital=capital,
|
||||
max_margin_pct=get_max_margin_pct(get_setting),
|
||||
trading_mode=get_trading_mode(get_setting),
|
||||
sizing_mode=get_sizing_mode(get_setting),
|
||||
fixed_lots=get_fixed_lots(get_setting),
|
||||
)
|
||||
return jsonify(list_recommended_symbols_grouped(payload.get("rows") or []))
|
||||
finally:
|
||||
@@ -1639,17 +1652,30 @@ def settings():
|
||||
mode = request.form.get("trading_mode", "simulation").strip()
|
||||
if mode not in ("simulation", "live"):
|
||||
mode = "simulation"
|
||||
sizing = request.form.get("position_sizing_mode", "risk").strip()
|
||||
if sizing not in ("fixed", "risk"):
|
||||
sizing = "risk"
|
||||
sizing = request.form.get("position_sizing_mode", "fixed").strip()
|
||||
if sizing == "risk":
|
||||
sizing = "amount"
|
||||
if sizing not in ("fixed", "amount"):
|
||||
sizing = "fixed"
|
||||
set_setting("trading_mode", mode)
|
||||
set_setting("position_sizing_mode", sizing)
|
||||
try:
|
||||
fl = int(float(request.form.get("fixed_lots", "1") or 1))
|
||||
set_setting("fixed_lots", str(max(1, fl)))
|
||||
except ValueError:
|
||||
flash("固定手数无效")
|
||||
return redirect(url_for("settings"))
|
||||
try:
|
||||
fa = float(request.form.get("fixed_amount", "5000") or 5000)
|
||||
set_setting("fixed_amount", str(max(1.0, fa)))
|
||||
except ValueError:
|
||||
flash("固定金额无效")
|
||||
return redirect(url_for("settings"))
|
||||
try:
|
||||
rp = float(request.form.get("risk_percent", "1") or 1)
|
||||
set_setting("risk_percent", str(max(0.1, min(100.0, rp))))
|
||||
except ValueError:
|
||||
flash("风险比例无效")
|
||||
return redirect(url_for("settings"))
|
||||
pass
|
||||
try:
|
||||
mp = float(request.form.get("max_margin_pct", "30") or 30)
|
||||
set_setting("max_margin_pct", str(max(1.0, min(100.0, mp))))
|
||||
@@ -1699,7 +1725,9 @@ def settings():
|
||||
username=username,
|
||||
quote_label=get_quote_source_label(ctp_connected=bool(ctp_st.get("connected"))),
|
||||
trading_mode=get_setting("trading_mode", "simulation"),
|
||||
position_sizing_mode=get_setting("position_sizing_mode", "risk"),
|
||||
position_sizing_mode=get_setting("position_sizing_mode", "fixed"),
|
||||
fixed_lots=get_setting("fixed_lots", "1"),
|
||||
fixed_amount=get_setting("fixed_amount", "5000"),
|
||||
risk_percent=get_setting("risk_percent", "1"),
|
||||
max_margin_pct=get_setting("max_margin_pct", "30"),
|
||||
trailing_be_tick_buffer=get_setting("trailing_be_tick_buffer", "2"),
|
||||
|
||||
Reference in New Issue
Block a user