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' %}
-