diff --git a/desktop/gold_order_app.py b/desktop/gold_order_app.py index 22254a1..097b6f8 100644 --- a/desktop/gold_order_app.py +++ b/desktop/gold_order_app.py @@ -39,6 +39,7 @@ DEFAULT_TP_USD = 12.0 DEFAULT_PARTIAL = 0.10 ATR_PERIOD = 14 ATR_TIMEFRAME = None +ATR_FLOOR_USD = 10.0 # ATR 低于该值时,止损/止盈按 10 美金计;高于则用实际 ATR MAGIC = 20261016 COMMENT = "GoldPanel" DEVIATION = 100 @@ -1110,7 +1111,7 @@ class OrderApp(tk.Tk): self.var_use_atr = tk.BooleanVar(value=True) ttk.Checkbutton( opt, - text="用 M15 ATR(14) 做止损/止盈", + text="用 M15 ATR(14) 做止损/止盈(ATR<10 按 10)", variable=self.var_use_atr, command=self._sync_sl_label, ).pack(side=tk.LEFT) @@ -1292,8 +1293,13 @@ class OrderApp(tk.Tk): except ValueError as exc: raise TradeError(f"{name} 不是有效数字") from exc + @staticmethod + def _atr_for_stops(atr: float) -> float: + """止损/止盈用的 ATR:小于 10 按 10,大于等于 10 用实际值。""" + return max(float(atr), ATR_FLOOR_USD) + def _resolve_stops(self, symbol: str) -> Tuple[float, float, float, float, float]: - """返回 sl_usd, tp_usd, atr, sl_mult, tp_mult""" + """返回 sl_usd, tp_usd, atr(原始), sl_mult, tp_mult""" if not self.var_use_atr.get(): sl = self._parse_float(self.var_atr_mult.get(), "SL$") tp = self._parse_float(self.var_tp.get(), "TP$") @@ -1304,7 +1310,8 @@ class OrderApp(tk.Tk): if sl_mult < 0 or tp_mult < 0: raise TradeError("ATR 倍数不能为负") atr = self.bridge.atr(symbol) if (sl_mult > 1e-8 or tp_mult > 1e-8) else 0.0 - return atr * sl_mult, atr * tp_mult, atr, sl_mult, tp_mult + base = self._atr_for_stops(atr) if atr > 1e-12 else 0.0 + return base * sl_mult, base * tp_mult, atr, sl_mult, tp_mult def _confirm(self, title: str, body: str) -> bool: if not MUST_CONFIRM: @@ -1752,11 +1759,12 @@ class OrderApp(tk.Tk): if self.var_use_atr.get(): try: atr = self.bridge.atr(symbol) - atr_txt = f"{atr:.2f}" + base = self._atr_for_stops(atr) + atr_txt = f"{atr:.2f}" + (f"→{base:.0f}" if base > atr + 1e-9 else "") sl_m = float(self.var_atr_mult.get().replace(",", ".") or "0") tp_m = float(self.var_tp.get().replace(",", ".") or "0") - sl_txt = f"{atr * sl_m:.2f}" - tp_txt = f"{atr * tp_m:.2f}" + sl_txt = f"{base * sl_m:.2f}" + tp_txt = f"{base * tp_m:.2f}" except Exception: pass else: diff --git a/releases/黄金市价辅助.exe b/releases/黄金市价辅助.exe index 9e7ce72..8765793 100644 Binary files a/releases/黄金市价辅助.exe and b/releases/黄金市价辅助.exe differ