diff --git a/desktop/gold_order_app.py b/desktop/gold_order_app.py index 6d85954..bb7cbcd 100644 --- a/desktop/gold_order_app.py +++ b/desktop/gold_order_app.py @@ -75,6 +75,7 @@ COLOR_TEXT = "#f0f0f5" COLOR_ACCENT = "#4cc2ff" BE_MIN_MOVE_USD = 3.0 # 价格向有利方向走出该美金距离才可保本(非账户浮盈) BE_OFFSET_USD = 1.0 # 保本止损 = 开仓价 ± 1$ +SPREAD_WARN_USD = 0.50 # 点差超过该美金时,买卖按钮区提示(不禁开) def simpledialog_ask_server(parent: tk.Misc) -> str: @@ -715,6 +716,7 @@ class OrderApp(tk.Tk): self._pos_sig = None self._pos_profit_labels: dict = {} self._metric_values: dict = {} + self._last_spread: float = 0.0 self._build_ui() self.after(200, self._try_connect_and_refresh) self.after(3000, self._hub_heartbeat) @@ -987,6 +989,7 @@ class OrderApp(tk.Tk): root, text=( f"最多同时 {MAX_OPEN_POSITIONS} 笔 · 同向≤{MAX_SIDE_LOTS:.2f} 手 · " + f"点差>{SPREAD_WARN_USD:.2f} 买卖提示 · " "亏≥5%或盈≥10%禁止开仓 · 保本:有利方向>3$ 后止损到开仓价±1$" ), bg=COLOR_BG, @@ -1110,7 +1113,7 @@ class OrderApp(tk.Tk): ) def _sync_open_buttons(self, symbol: str) -> None: - """满仓 / 同向上限 / 日内达标 → 买卖置灰,并显示禁止开仓标识。""" + """满仓 / 同向上限 / 日内达标 → 买卖置灰;点差过大时买卖区提示(不禁开)。""" if not hasattr(self, "btn_buy"): return try: @@ -1135,6 +1138,7 @@ class OrderApp(tk.Tk): self._set_trade_btn(self.btn_buy, can_buy, COLOR_BUY) self._set_trade_btn(self.btn_sell, can_sell, COLOR_SELL) + spread_wide = self._last_spread > SPREAD_WARN_USD + 1e-9 pct = rate * 100.0 if lock_kind == "loss": badge = f"亏损达标 {pct:.2f}% · 禁止开仓" @@ -1151,14 +1155,32 @@ class OrderApp(tk.Tk): banner = f"持仓已满 {MAX_OPEN_POSITIONS} 笔,平仓后再开" color = COLOR_WARN bg = "#3a3220" + elif spread_wide: + badge = f"点差偏大 {self._last_spread:.2f}$" + banner = ( + f"⚠ 点差过大 {self._last_spread:.2f}$(阈值 {SPREAD_WARN_USD:.2f})|" + "建议暂缓开仓" + ) + color = COLOR_WARN + bg = "#3a3220" else: badge = "" banner = "" color = COLOR_NEUTRAL - bg = "#1e1e1e" + bg = COLOR_BG - self.lbl_day_lock.configure(text=badge, fg=color, bg=bg if badge else "#1e1e1e") - self.lbl_open_block.configure(text=banner, fg=color, bg=bg if banner else "#1e1e1e") + # 买卖按钮文案:可开且点差大时直接写在按钮上 + if can_buy: + self.btn_buy.configure(text="买入 ⚠点差大" if spread_wide else "买入") + else: + self.btn_buy.configure(text="买入") + if can_sell: + self.btn_sell.configure(text="卖出 ⚠点差大" if spread_wide else "卖出") + else: + self.btn_sell.configure(text="卖出") + + self.lbl_day_lock.configure(text=badge, fg=color, bg=bg if badge else COLOR_CARD) + self.lbl_open_block.configure(text=banner, fg=color, bg=bg if banner else COLOR_BG) def _toggle_ticket_select(self, ticket: int) -> None: if ticket in self._selected_tickets_set: @@ -1405,6 +1427,7 @@ class OrderApp(tk.Tk): market_open = False spread = ask - bid if ask and bid else 0.0 + self._last_spread = spread try: buy, sell, profit = self.bridge.exposure(symbol) except TradeError: @@ -1445,11 +1468,14 @@ class OrderApp(tk.Tk): self.lbl_quote.configure(text=f"Bid {bid:.{digits}f} Ask {ask:.{digits}f}") else: self.lbl_quote.configure(text="Bid -- Ask --") + spread_wide = spread > SPREAD_WARN_USD + 1e-9 self.lbl_info.configure( text=( - f"点差 {spread:.{digits}f} ATR {atr_txt} " + f"点差 {spread:.{digits}f}" + f"{' ⚠偏大' if spread_wide else ''} ATR {atr_txt} " f"SL${sl_txt} TP${tp_txt} 持仓 {pos} 浮盈 {profit:.2f}" - ) + ), + fg=COLOR_WARN if spread_wide else COLOR_MUTED, ) try: day = self.bridge.day_ohlc(symbol) diff --git a/releases/黄金市价辅助.exe b/releases/黄金市价辅助.exe index e39ae3d..1e5bc6c 100644 Binary files a/releases/黄金市价辅助.exe and b/releases/黄金市价辅助.exe differ