From f94728fa8895cc4444ba050f075c3d4f831b5903 Mon Sep 17 00:00:00 2001 From: gavindiaz Date: Mon, 6 Jul 2026 05:06:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BC=98=E5=8C=96=E8=B6=85?= =?UTF-8?q?=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gui.py | 18 ++++++++++++++++-- scripts/optimizer/ea_auto_scanner.py | 2 +- scripts/scan_set_prompt.py | 3 ++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/gui.py b/gui.py index b9f3c0c..d4ff7b1 100644 --- a/gui.py +++ b/gui.py @@ -1532,6 +1532,11 @@ class MT5BacktestGUI: self.opt_leverage.set("1:100") self.opt_leverage.pack(side='left', padx=5) + ttk.Label(acct_row, text="等待超时(分钟):").pack(side='left', padx=10) + self.opt_timeout_min = ttk.Entry(acct_row, width=8) + self.opt_timeout_min.insert(0, "60") + self.opt_timeout_min.pack(side='left', padx=5) + wf_frame = ttk.LabelFrame(test_frame, text="向前优化 (Forward)") wf_frame.pack(fill='x', padx=5, pady=5) @@ -1754,6 +1759,9 @@ class MT5BacktestGUI: self.opt_deposit.insert(0, str(test_cfg.get('deposit'))) if test_cfg.get('leverage'): self.opt_leverage.set(str(test_cfg.get('leverage'))) + if 'timeout_min' in test_cfg: + self.opt_timeout_min.delete(0, tk.END) + self.opt_timeout_min.insert(0, str(test_cfg.get('timeout_min'))) exec_delay = int(test_cfg.get('execution_delay', 0) or 0) if exec_delay == 0: @@ -1905,7 +1913,8 @@ class MT5BacktestGUI: 'optimization_mode': self._get_opt_optimization_mode(), 'optimization_criterion': self._get_opt_optimization_criterion(), 'deposit': int(self.opt_deposit.get()) if self.opt_deposit.get().isdigit() else 10000, - 'leverage': self.opt_leverage.get() + 'leverage': self.opt_leverage.get(), + 'timeout_min': int(self.opt_timeout_min.get()) if self.opt_timeout_min.get().isdigit() else 60 }, 'walk_forward': { 'enabled': self.wf_enabled.get(), @@ -2206,7 +2215,12 @@ class MT5BacktestGUI: self.opt_log.insert('end', f"等待XML结果,候选目录: {mt5_data_dir} | {mt5_install_dir}\n") self.opt_log.update() - wait_timeout = 600 + try: + wait_timeout = int(self.opt_timeout_min.get()) * 60 + except ValueError: + wait_timeout = 60 * 60 + self.opt_log.insert('end', f"等待超时: {wait_timeout // 60} 分钟\n") + self.opt_log.update() start_time = time.time() while time.time() - start_time < wait_timeout: xml_path = _find_latest_optimizer_xml([mt5_data_dir, mt5_install_dir], ea_name) diff --git a/scripts/optimizer/ea_auto_scanner.py b/scripts/optimizer/ea_auto_scanner.py index 62c8f07..55cfd09 100644 --- a/scripts/optimizer/ea_auto_scanner.py +++ b/scripts/optimizer/ea_auto_scanner.py @@ -33,7 +33,7 @@ class EAAutoScanner: "test_config": { "symbol": "EURUSD", "period": "H1", "from_date": "2025.01.01", "to_date": "2025.12.31", - "model": 1, "deposit": 10000, "leverage": "1:100" + "model": 1, "deposit": 10000, "leverage": "1:100", "timeout_min": 60 }, "walk_forward": {"enabled": False, "forward_mode": 0, "forward_date": ""} } diff --git a/scripts/scan_set_prompt.py b/scripts/scan_set_prompt.py index 879b0e1..58afa92 100644 --- a/scripts/scan_set_prompt.py +++ b/scripts/scan_set_prompt.py @@ -279,7 +279,8 @@ def generate_prompt(results: List[SetFileResult], output_dir: str = '.') -> List lines.append(' "optimization_mode": 2, // 优化模式: 0=禁用, 1=慢速完整算法, 2=快速遗传算法, 3=MarketWatch所有符号') lines.append(' "optimization_criterion": 1, // 优化指标: 0=余额最大, 1=盈利因子最大, 2=期望收益, 3=回撤最小, 4=恢复因子, 5=夏普比率, 6=自定义, 7=复合指标') lines.append(' "deposit": 10000, // 初始保证金') - lines.append(' "leverage": "1:100" // 杠杆') + lines.append(' "leverage": "1:100", // 杠杆') + lines.append(' "timeout_min": 60 // 等待优化结果的超时(分钟)') lines.append(' },') lines.append(' "walk_forward": {') lines.append(' "enabled": true, // 是否启用前向测试')