diff --git a/crypto_monitor_binance/templates/index.html b/crypto_monitor_binance/templates/index.html index 98c71c8..575c6bb 100644 --- a/crypto_monitor_binance/templates/index.html +++ b/crypto_monitor_binance/templates/index.html @@ -796,7 +796,7 @@ - + diff --git a/crypto_monitor_gate/templates/index.html b/crypto_monitor_gate/templates/index.html index bf55b05..d20da3f 100644 --- a/crypto_monitor_gate/templates/index.html +++ b/crypto_monitor_gate/templates/index.html @@ -762,7 +762,7 @@ - + diff --git a/crypto_monitor_okx/templates/index.html b/crypto_monitor_okx/templates/index.html index f546cd5..585d38e 100644 --- a/crypto_monitor_okx/templates/index.html +++ b/crypto_monitor_okx/templates/index.html @@ -791,7 +791,7 @@ - + diff --git a/lib/hub/hub_bridge.py b/lib/hub/hub_bridge.py index 7a88955..d0925ab 100644 --- a/lib/hub/hub_bridge.py +++ b/lib/hub/hub_bridge.py @@ -68,6 +68,7 @@ def install_instance_theme_static(app) -> None: "strategy_roll.js": "application/javascript; charset=utf-8", "instance_page.css": "text/css; charset=utf-8", "instance_embed.js": "application/javascript; charset=utf-8", + "order_entry_model.js": "application/javascript; charset=utf-8", "focus_chart_page.js": "application/javascript; charset=utf-8", "focus_chart_page.css": "text/css; charset=utf-8", "trade_stats_calendar.js": "application/javascript; charset=utf-8", diff --git a/lib/instance/templates/embed_boot_scripts.html b/lib/instance/templates/embed_boot_scripts.html index 42d7858..b219d0a 100644 --- a/lib/instance/templates/embed_boot_scripts.html +++ b/lib/instance/templates/embed_boot_scripts.html @@ -3,6 +3,52 @@ const JOURNAL_ENTRY_REASON_OPTIONS = {{ entry_reason_options | tojson }}; const ORDER_ENTRY_MODEL_TRADE_STYLE = {{ entry_model_trade_style_map | tojson }}; const JOURNAL_ENTRY_REASON_OTHER = {{ entry_reason_other_value | tojson }}; +function tradeStyleForEntryModelSelect(sel){ + if(!sel || !sel.value) return "trend"; + var opt = sel.options[sel.selectedIndex]; + if(opt){ + var ds = opt.getAttribute("data-trade-style"); + if(ds === "swing" || ds === "trend") return ds; + } + return (ORDER_ENTRY_MODEL_TRADE_STYLE && ORDER_ENTRY_MODEL_TRADE_STYLE[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 labels = { trend: "趋势单", swing: "波段单" }; + var ts = tradeStyleForEntryModelSelect(sel); + hidden.value = ts; + if(hint) hint.textContent = labels[ts] || ts; +} +function paintOrderLeverageHint(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"; +} +function initOrderEntryModelSelect(root){ + var scope = (root && root.querySelector) ? root : document; + var sel = scope.querySelector ? scope.querySelector("#order-entry-model") : document.getElementById("order-entry-model"); + if(!sel) return; + if(sel.dataset.entryModelWired !== "1"){ + sel.dataset.entryModelWired = "1"; + sel.addEventListener("change", syncOrderEntryModelTradeStyle); + } + syncOrderEntryModelTradeStyle(); +} +window.syncOrderEntryModelTradeStyle = syncOrderEntryModelTradeStyle; +window.paintOrderLeverageHint = paintOrderLeverageHint; +window.initOrderEntryModelSelect = initOrderEntryModelSelect; + function reloadInstancePage(){ if(document.body && document.body.getAttribute("data-embed-shell") === "1" && window.InstanceEmbed){ window.InstanceEmbed.reloadCurrentTab(); @@ -1026,12 +1072,7 @@ function refreshOrderDefaults(){ .then(data=>{ if(!data.ok){ return; } if(data.leverage){ - if(typeof paintOrderLeverageHint === "function"){ - paintOrderLeverageHint(data.leverage); - } else { - const levEl = document.getElementById("order-leverage"); - if(levEl) levEl.value = data.leverage; - } + paintOrderLeverageHint(data.leverage); } if(typeof data.available_trading_usdt !== "undefined" && data.available_trading_usdt !== null){ latestAvailableUsdt = Number(data.available_trading_usdt); @@ -1242,6 +1283,7 @@ if(addOrderForm){ } refreshOrderDefaults(); +if(typeof initOrderEntryModelSelect === "function") initOrderEntryModelSelect(); refreshPriceSnapshotConditional(); setInterval(refreshAccountSnapshot, Number(document.body.dataset.balanceRefreshMs || 30000)); function refreshPriceSnapshotConditional(){ diff --git a/lib/instance/templates/embed_shell.html b/lib/instance/templates/embed_shell.html index 7b63b02..620a5d3 100644 --- a/lib/instance/templates/embed_shell.html +++ b/lib/instance/templates/embed_shell.html @@ -121,7 +121,7 @@ - + diff --git a/lib/instance/templates/order_entry_model_fields.html b/lib/instance/templates/order_entry_model_fields.html index 0f84fbe..0a05e0b 100644 --- a/lib/instance/templates/order_entry_model_fields.html +++ b/lib/instance/templates/order_entry_model_fields.html @@ -1,7 +1,7 @@ {# 趋势户:开仓类型 → 自动 trade_style;日内户:仍选手动 trend/swing #} {% macro order_entry_type_fields() -%} {% if order_entry_profile == 'trend_div' %} - {% for opt in entry_model_options %}