白名单仅一币时选择币种默认显示 env 币种(关键位/实盘下单共用)。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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 %}
|
||||
<select name="{{ name }}" id="{{ id }}" {% if required %}required{% endif %} class="trade-policy-symbol-select">
|
||||
<option value="">选择币种</option>
|
||||
{% for sym in trade_policy.symbol_whitelist %}
|
||||
<option value="{{ sym }}" {% if value and ((value|upper) == sym or (value|upper).startswith(sym ~ '/')) %}selected{% endif %}>{{ sym }}/USDT</option>
|
||||
{% set wl = trade_policy.symbol_whitelist %}
|
||||
{% set sole_sym = wl[0] if (wl|length) == 1 else '' %}
|
||||
{% set effective = value if value else sole_sym %}
|
||||
<select name="{{ name }}" id="{{ id }}" {% if required %}required{% endif %} class="trade-policy-symbol-select"{% if sole_sym %} data-sole-symbol="{{ sole_sym }}"{% endif %}>
|
||||
{% if not sole_sym %}<option value="">选择币种</option>{% endif %}
|
||||
{% for sym in wl %}
|
||||
<option value="{{ sym }}" {% if effective and ((effective|upper) == sym or (effective|upper).startswith(sym ~ '/')) %}selected{% endif %}>{{ sym }}/USDT</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
{% else %}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user