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"