fix: 小分歧联动波段单显示,杠杆改为按币种默认只读

option 增加 data-trade-style;修复 JS 初始化顺序。杠杆隐藏输入,显示 BTC/ETH 10x 其它 5x。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-06 00:28:10 +08:00
parent ea429b2694
commit e81343ae91
14 changed files with 106 additions and 36 deletions
+10 -6
View File
@@ -17,6 +17,7 @@
<title>{{ exchange_display }} · 加密货币 | 交易监控复盘系统</title>
<style>
.order-trade-style-hint{font-size:.78rem;color:#8fc8ff;margin-left:4px;white-space:nowrap}
.order-leverage-hint{font-size:.78rem;color:#cfd3ef;white-space:nowrap;align-self:center}
body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;background:#0b0d14;color:#eaeaea;padding:14px 20px}
.container{width:100%;max-width:min(1440px,94vw);margin:0 auto;padding:0 clamp(8px,1.5vw,20px)}
.header{display:flex;flex-direction:column;align-items:center;gap:8px;margin-bottom:12px}
@@ -387,9 +388,8 @@
</select>
{% from 'order_entry_model_fields.html' import order_entry_type_fields with context %}
{{ order_entry_type_fields() }}
{% if position_sizing_mode != 'full_margin' %}
<input id="order-leverage" name="leverage" type="number" min="1" step="1" placeholder="杠杆(可选)">
{% endif %}
{% from 'order_leverage_fields.html' import order_leverage_fields with context %}
{{ order_leverage_fields() }}
<label style="display:flex;align-items:center;gap:4px;font-size:.82rem;color:#cfd3ef">
<input type="checkbox" name="breakeven_enabled" value="1" checked> 启用移动保本(关闭则仅保留初始止损与交易所挂单)
</label>
@@ -796,7 +796,7 @@
<script src="/static/time_close_ui.js?v=2"></script>
<script src="/static/ai_review_render.js?v=2"></script>
<script src="/static/form_submit_guard.js?v=2"></script>
<script src="/static/order_entry_model.js?v=1"></script>
<script src="/static/order_entry_model.js?v=2"></script>
<script src="/static/manual_order_rr_preview.js?v=5"></script>
<script src="/static/symbol_live_price.js?v=2"></script>
<script src="/static/strategy_roll.js?v=6"></script>
@@ -1844,8 +1844,12 @@ function refreshOrderDefaults(){
.then(data=>{
if(!data.ok){ return; }
if(data.leverage){
const levEl = document.getElementById("order-leverage");
if(levEl) levEl.value = data.leverage;
if(typeof paintOrderLeverageHint === "function"){
paintOrderLeverageHint(data.leverage);
} else {
const levEl = document.getElementById("order-leverage");
if(levEl) levEl.value = data.leverage;
}
}
if(typeof data.available_trading_usdt !== "undefined" && data.available_trading_usdt !== null){
latestAvailableUsdt = Number(data.available_trading_usdt);
+9 -6
View File
@@ -367,9 +367,8 @@
</select>
{% from 'order_entry_model_fields.html' import order_entry_type_fields with context %}
{{ order_entry_type_fields() }}
{% if position_sizing_mode != 'full_margin' %}
<input id="order-leverage" name="leverage" type="number" min="1" step="1" placeholder="杠杆(可选)">
{% endif %}
{% from 'order_leverage_fields.html' import order_leverage_fields with context %}
{{ order_leverage_fields() }}
<label style="display:flex;align-items:center;gap:4px;font-size:.82rem;color:#cfd3ef">
<input type="checkbox" name="breakeven_enabled" value="1" checked> 启用移动保本(关闭则仅保留初始止损与交易所挂单)
</label>
@@ -763,7 +762,7 @@
<script src="/static/time_close_ui.js?v=2"></script>
<script src="/static/ai_review_render.js?v=2"></script>
<script src="/static/form_submit_guard.js?v=2"></script>
<script src="/static/order_entry_model.js?v=1"></script>
<script src="/static/order_entry_model.js?v=2"></script>
<script src="/static/manual_order_rr_preview.js?v=5"></script>
<script src="/static/symbol_live_price.js?v=2"></script>
<script src="/static/strategy_roll.js?v=6"></script>
@@ -1770,8 +1769,12 @@ function refreshOrderDefaults(){
.then(data=>{
if(!data.ok){ return; }
if(data.leverage){
const levEl = document.getElementById("order-leverage");
if(levEl) levEl.value = data.leverage;
if(typeof paintOrderLeverageHint === "function"){
paintOrderLeverageHint(data.leverage);
} else {
const levEl = document.getElementById("order-leverage");
if(levEl) levEl.value = data.leverage;
}
}
if(typeof data.available_trading_usdt !== "undefined" && data.available_trading_usdt !== null){
latestAvailableUsdt = Number(data.available_trading_usdt);
+9 -6
View File
@@ -396,9 +396,8 @@
</select>
{% from 'order_entry_model_fields.html' import order_entry_type_fields with context %}
{{ order_entry_type_fields() }}
{% if position_sizing_mode != 'full_margin' %}
<input id="order-leverage" name="leverage" type="number" min="1" step="1" placeholder="杠杆(可选)">
{% endif %}
{% from 'order_leverage_fields.html' import order_leverage_fields with context %}
{{ order_leverage_fields() }}
<label style="display:flex;align-items:center;gap:4px;font-size:.82rem;color:#cfd3ef">
<input type="checkbox" name="breakeven_enabled" value="1" checked> 启用移动保本(关闭则仅保留初始止损与交易所挂单)
</label>
@@ -792,7 +791,7 @@
<script src="/static/time_close_ui.js?v=2"></script>
<script src="/static/ai_review_render.js?v=2"></script>
<script src="/static/form_submit_guard.js?v=2"></script>
<script src="/static/order_entry_model.js?v=1"></script>
<script src="/static/order_entry_model.js?v=2"></script>
<script src="/static/manual_order_rr_preview.js?v=5"></script>
<script src="/static/symbol_live_price.js?v=2"></script>
<script src="/static/strategy_roll.js?v=6"></script>
@@ -1799,8 +1798,12 @@ function refreshOrderDefaults(){
.then(data=>{
if(!data.ok){ return; }
if(data.leverage){
const levEl = document.getElementById("order-leverage");
if(levEl) levEl.value = data.leverage;
if(typeof paintOrderLeverageHint === "function"){
paintOrderLeverageHint(data.leverage);
} else {
const levEl = document.getElementById("order-leverage");
if(levEl) levEl.value = data.leverage;
}
}
if(typeof data.available_trading_usdt !== "undefined" && data.available_trading_usdt !== null){
latestAvailableUsdt = Number(data.available_trading_usdt);
+2 -1
View File
@@ -13,7 +13,8 @@
- **不写盈亏比**:止盈/止损随行情人工设定,不写入策略 MD。
- **界面短标签**`大分歧A` / `大分歧B` / `小分歧`;全称在 option `title` / 策略 MD 说明。
- **多空共用三字**:方向由「做多/做空」表达,不复用为「大分歧A多」等。
- **自动联动**:大分歧 A/B → 趋势单;小分歧 → 波段单;平仓写入交易记录 `entry_reason`;复盘「填入」自动带入。
- **自动联动**:大分歧 A/B → 趋势单;**小分歧 → 波段单**;平仓写入交易记录 `entry_reason`;复盘「填入」自动带入。
- **杠杆默认**BTC/ETH **10x**,其它 **5x**;与开仓类型无关(env `BTC_LEVERAGE` / `ALT_LEVERAGE`)。
- **日内 profile 独立**env 启用 `TRADE_SYMBOL_WHITELIST=BTC,ETH` 且限制开启时,**不显示**上述三项(Gate 当前);日内开仓类型后续单独定义。
- **策略模块独立**:趋势回调、顺势加仓不走上述三项。
+11 -1
View File
@@ -22,12 +22,22 @@
|----------|-----------|------|----------------------|
| **大分歧A** | `big_div_a` | 趋势单 | 突破前收敛小结构,不创新低企稳 |
| **大分歧B** | `big_div_b` | 趋势单 | 结构突破确认后入场 |
| **小分歧** | `small_div` | 波段单 | 二次探底 N 字突破,或 5m 三均线重新多头 |
| **小分歧** | `small_div` | **波段单** | 二次探底 N 字突破,或 5m 三均线重新多头 |
- 下拉 **仅三选一**,不可手输。
- **小分歧 = 波段单**(系统自动写入 `trade_style=swing`,界面旁显示「波段单」)。
- 原「趋势单/波段单」手选已隐藏,由开仓类型自动设定。
- A/B 差异在 **入场方式**,不绑定盈亏比。
### 杠杆(与开仓类型无关)
| 币种 | 默认杠杆 |
|------|----------|
| BTC、ETH | **10x**`BTC_LEVERAGE` |
| 其它山寨 | **5x**`ALT_LEVERAGE` |
选币种后表单「杠杆」会自动带入;可选手改。大分歧 / 小分歧 **均适用同一套杠杆规则**
---
## 3. 大分歧(趋势单)
+2
View File
@@ -12,6 +12,8 @@
| 方向 | 仅多 | 多 + 空 |
| 开仓类型 UI | 大分歧A / B / 小分歧 | **相同三字** |
| profile | 趋势户 | 趋势户(非 BTC/ETH 日内白名单) |
| 小分歧 | 波段单 | 波段单(同左) |
| 杠杆默认 | BTC/ETH 10x,其它 5x | **同左** |
---
+4 -1
View File
@@ -64,7 +64,10 @@
}
if (tab === "trade") {
if (typeof global.refreshOrderDefaults === "function") global.refreshOrderDefaults();
if (typeof global.initOrderEntryModelSelect === "function") global.initOrderEntryModelSelect();
if (typeof global.initOrderEntryModelSelect === "function") {
var root = document.getElementById("embed-page-root") || document;
global.initOrderEntryModelSelect(root);
}
if (global.ManualOrderRrPreview && typeof global.ManualOrderRrPreview.wire === "function") {
global.ManualOrderRrPreview.wire();
}
+1
View File
@@ -1,4 +1,5 @@
.order-trade-style-hint{font-size:.78rem;color:#8fc8ff;margin-left:4px;white-space:nowrap}
.order-leverage-hint{font-size:.78rem;color:#cfd3ef;white-space:nowrap;align-self:center}
body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;background:#0b0d14;color:#eaeaea;padding:14px 20px}
.container{width:100%;max-width:min(1440px,94vw);margin:0 auto;padding:0 clamp(8px,1.5vw,20px)}
.header{display:flex;flex-direction:column;align-items:center;gap:8px;margin-bottom:12px}
+41 -8
View File
@@ -1,28 +1,61 @@
(function (global) {
function tradeStyleForSelect(sel) {
if (!sel || !sel.value) return "trend";
var opt = sel.options[sel.selectedIndex];
if (opt && opt.getAttribute) {
var ds = opt.getAttribute("data-trade-style");
if (ds === "swing" || ds === "trend") return ds;
}
var map = global.ORDER_ENTRY_MODEL_TRADE_STYLE || {};
return map[sel.value] || "trend";
}
function syncOrderEntryModelTradeStyle() {
var sel = document.getElementById("order-entry-model");
var hidden = document.getElementById("order-trade-style-hidden");
var hint = document.getElementById("order-trade-style-hint");
if (!sel || !hidden) return;
var map = global.ORDER_ENTRY_MODEL_TRADE_STYLE || {};
var labels = { trend: "趋势单", swing: "波段单" };
var ts = map[sel.value] || "trend";
var ts = tradeStyleForSelect(sel);
hidden.value = ts;
if (hint) hint.textContent = labels[ts] || ts;
}
function initOrderEntryModelSelect() {
var sel = document.getElementById("order-entry-model");
if (!sel || sel.dataset.entryModelWired === "1") return;
sel.dataset.entryModelWired = "1";
sel.addEventListener("change", syncOrderEntryModelTradeStyle);
function initOrderEntryModelSelect(root) {
var scope = root && root.querySelector ? root : document;
var sel =
scope === document
? document.getElementById("order-entry-model")
: scope.querySelector("#order-entry-model");
if (!sel) return;
if (sel.dataset.entryModelWired !== "1") {
sel.dataset.entryModelWired = "1";
sel.addEventListener("change", syncOrderEntryModelTradeStyle);
}
syncOrderEntryModelTradeStyle();
}
global.paintOrderLeverageHint = function (leverage) {
var hidden = document.getElementById("order-leverage");
var hint = document.getElementById("order-leverage-hint");
if (!hidden && !hint) return;
var lev = parseInt(leverage, 10);
if (!Number.isFinite(lev) || lev <= 0) {
if (hint) hint.textContent = "杠杆 —";
if (hidden) hidden.value = "";
return;
}
if (hidden) hidden.value = String(lev);
if (hint) hint.textContent = "杠杆 " + lev + "x";
};
global.initOrderEntryModelSelect = initOrderEntryModelSelect;
global.syncOrderEntryModelTradeStyle = syncOrderEntryModelTradeStyle;
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", initOrderEntryModelSelect);
document.addEventListener("DOMContentLoaded", function () {
initOrderEntryModelSelect();
});
} else {
initOrderEntryModelSelect();
}
@@ -1026,8 +1026,12 @@ function refreshOrderDefaults(){
.then(data=>{
if(!data.ok){ return; }
if(data.leverage){
const levEl = document.getElementById("order-leverage");
if(levEl) levEl.value = data.leverage;
if(typeof paintOrderLeverageHint === "function"){
paintOrderLeverageHint(data.leverage);
} else {
const levEl = document.getElementById("order-leverage");
if(levEl) levEl.value = data.leverage;
}
}
if(typeof data.available_trading_usdt !== "undefined" && data.available_trading_usdt !== null){
latestAvailableUsdt = Number(data.available_trading_usdt);
@@ -44,9 +44,8 @@
</select>
{% from 'order_entry_model_fields.html' import order_entry_type_fields with context %}
{{ order_entry_type_fields() }}
{% if position_sizing_mode != 'full_margin' %}
<input id="order-leverage" name="leverage" type="number" min="1" step="1" placeholder="杠杆(可选)">
{% endif %}
{% from 'order_leverage_fields.html' import order_leverage_fields with context %}
{{ order_leverage_fields() }}
<label style="display:flex;align-items:center;gap:4px;font-size:.82rem;color:#cfd3ef">
<input type="checkbox" name="breakeven_enabled" value="1" checked> 启用移动保本(关闭则仅保留初始止损与交易所挂单)
</label>
+1 -1
View File
@@ -121,7 +121,7 @@
<script src="/static/time_close_ui.js?v=2"></script>
<script src="/static/ai_review_render.js?v=2"></script>
<script src="/static/form_submit_guard.js?v=2"></script>
<script src="/static/order_entry_model.js?v=1"></script>
<script src="/static/order_entry_model.js?v=2"></script>
<script src="/static/manual_order_rr_preview.js?v=5"></script>
<script src="/static/symbol_live_price.js?v=2"></script>
<script src="/static/strategy_roll.js?v=6"></script>
@@ -4,7 +4,7 @@
<select name="entry_model" id="order-entry-model" required title="大分歧A/B为趋势单,小分歧为波段单">
<option value="">开仓类型</option>
{% for opt in entry_model_options %}
<option value="{{ opt.code }}" title="{{ opt.help }}">{{ opt.label }}</option>
<option value="{{ opt.code }}" data-trade-style="{{ opt.trade_style }}" title="{{ opt.help }}">{{ opt.label }}</option>
{% endfor %}
</select>
<input type="hidden" name="trade_style" id="order-trade-style-hidden" value="trend">
@@ -0,0 +1,7 @@
{# 以损定仓:杠杆按币种默认(BTC/ETH 10x,其它 5x),不可选手输 #}
{% macro order_leverage_fields() -%}
{% if position_sizing_mode != 'full_margin' %}
<input type="hidden" id="order-leverage" name="leverage" value="">
<span id="order-leverage-hint" class="order-leverage-hint" title="BTC/ETH 默认10x,其它默认5x">杠杆 —</span>
{% endif %}
{%- endmacro %}