From 71a91484a35dc0b501c9acdc9417b1b38c6bdf50 Mon Sep 17 00:00:00 2001 From: dekun Date: Wed, 12 Aug 2026 19:27:05 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BD=E5=90=8D=E5=8D=95=E4=BB=85=E4=B8=80?= =?UTF-8?q?=E5=B8=81=E6=97=B6=E9=80=89=E6=8B=A9=E5=B8=81=E7=A7=8D=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E6=98=BE=E7=A4=BA=20env=20=E5=B8=81=E7=A7=8D=EF=BC=88?= =?UTF-8?q?=E5=85=B3=E9=94=AE=E4=BD=8D/=E5=AE=9E=E7=9B=98=E4=B8=8B?= =?UTF-8?q?=E5=8D=95=E5=85=B1=E7=94=A8=EF=BC=89=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .../templates/trade_policy_fields.html | 11 +++++--- lib/trade/trade_policy_app_lib.py | 13 +++++++--- tests/test_trade_policy_lib.py | 26 +++++++++++++++++++ 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/lib/strategy/templates/trade_policy_fields.html b/lib/strategy/templates/trade_policy_fields.html index 137f1d9..449c1ec 100644 --- a/lib/strategy/templates/trade_policy_fields.html +++ b/lib/strategy/templates/trade_policy_fields.html @@ -4,10 +4,13 @@ {% endif %} {% macro trade_policy_symbol(name, id, value='', required=true, placeholder='BTC 或 BTC/USDT') -%} {% if trade_policy.symbol_restrict_enabled and trade_policy.symbol_whitelist %} - + {% if not sole_sym %}{% endif %} + {% for sym in wl %} + {% endfor %} {% else %} diff --git a/lib/trade/trade_policy_app_lib.py b/lib/trade/trade_policy_app_lib.py index 3d7adf2..b35ea3f 100644 --- a/lib/trade/trade_policy_app_lib.py +++ b/lib/trade/trade_policy_app_lib.py @@ -17,15 +17,20 @@ def trade_policy_template_context(policy: TradePolicy) -> dict: def default_symbol_for_policy(policy: TradePolicy, raw_default: str) -> str: - d = (raw_default or "BTC/USDT").strip() or "BTC/USDT" + d = (raw_default or "").strip() if policy.symbol_restrict_enabled and policy.symbol_whitelist: + # 白名单仅一币时直接用 env 币种,表单下拉同步默认选中 + if len(policy.symbol_whitelist) == 1: + return f"{policy.symbol_whitelist[0]}/USDT" from lib.trade.trade_policy_lib import symbol_base_coin - base = symbol_base_coin(d) + base = symbol_base_coin(d or "BTC/USDT") if base not in policy.symbol_whitelist: return f"{policy.symbol_whitelist[0]}/USDT" - return d - + if d: + return d if "/" in d else f"{base}/USDT" + return f"{policy.symbol_whitelist[0]}/USDT" + return d or "BTC/USDT" def check_symbol_policy( policy: TradePolicy, diff --git a/tests/test_trade_policy_lib.py b/tests/test_trade_policy_lib.py index 617c980..2e9d152 100644 --- a/tests/test_trade_policy_lib.py +++ b/tests/test_trade_policy_lib.py @@ -88,3 +88,29 @@ def test_badge_parts(): } ) assert trade_policy_badge_parts(p) == ("仅多", "BTC/ETH") + + +def test_default_symbol_when_whitelist_sole(): + from lib.trade.trade_policy_app_lib import default_symbol_for_policy + + p = load_trade_policy( + { + "TRADE_SYMBOL_RESTRICT_ENABLED": "true", + "TRADE_SYMBOL_WHITELIST": "BTC", + } + ) + assert default_symbol_for_policy(p, "") == "BTC/USDT" + assert default_symbol_for_policy(p, "ETH/USDT") == "BTC/USDT" + + +def test_default_symbol_when_whitelist_multi(): + from lib.trade.trade_policy_app_lib import default_symbol_for_policy + + p = load_trade_policy( + { + "TRADE_SYMBOL_RESTRICT_ENABLED": "true", + "TRADE_SYMBOL_WHITELIST": "BTC,ETH", + } + ) + assert default_symbol_for_policy(p, "ETH") == "ETH/USDT" + assert default_symbol_for_policy(p, "SOL/USDT") == "BTC/USDT"