参数优化报告自动保存
This commit is contained in:
@@ -161,7 +161,7 @@ class ResultAnalyzer:
|
||||
|
||||
return results
|
||||
|
||||
def copy_xml_results_to_reports(self, mt5_terminal_dir: str, ea_name: str, reports_dir: str) -> str:
|
||||
def copy_xml_results_to_reports(self, mt5_terminal_dir, ea_name: str, reports_dir: str) -> str:
|
||||
xml_patterns = [
|
||||
f'{ea_name}_optimization.xml',
|
||||
f'{ea_name}_optimization[1].xml',
|
||||
@@ -172,13 +172,18 @@ class ResultAnalyzer:
|
||||
latest_xml = None
|
||||
latest_time = 0
|
||||
|
||||
for pattern in xml_patterns:
|
||||
xml_path = os.path.join(mt5_terminal_dir, pattern)
|
||||
if os.path.exists(xml_path):
|
||||
mtime = os.path.getmtime(xml_path)
|
||||
if mtime > latest_time:
|
||||
latest_time = mtime
|
||||
latest_xml = xml_path
|
||||
search_dirs = mt5_terminal_dir if isinstance(mt5_terminal_dir, (list, tuple)) else [mt5_terminal_dir]
|
||||
|
||||
for base_dir in search_dirs:
|
||||
if not base_dir or not os.path.isdir(base_dir):
|
||||
continue
|
||||
for pattern in xml_patterns:
|
||||
xml_path = os.path.join(base_dir, pattern)
|
||||
if os.path.exists(xml_path):
|
||||
mtime = os.path.getmtime(xml_path)
|
||||
if mtime > latest_time:
|
||||
latest_time = mtime
|
||||
latest_xml = xml_path
|
||||
|
||||
if latest_xml:
|
||||
dest_path = os.path.join(reports_dir, os.path.basename(latest_xml))
|
||||
@@ -269,7 +274,7 @@ class ResultAnalyzer:
|
||||
|
||||
return output_path
|
||||
|
||||
def analyze_walk_forward(self, mt5_terminal_dir: str, ea_name: str, reports_dir: str) -> Dict:
|
||||
def analyze_walk_forward(self, mt5_terminal_dir, ea_name: str, reports_dir: str) -> Dict:
|
||||
result = {
|
||||
'ea_name': ea_name,
|
||||
'in_sample': {},
|
||||
@@ -286,11 +291,20 @@ class ResultAnalyzer:
|
||||
best_is = sorted(is_results, key=lambda x: x.get('profit_factor', 0), reverse=True)[0]
|
||||
result['in_sample'] = best_is
|
||||
|
||||
forward_xml = os.path.join(mt5_terminal_dir, f'{ea_name}_optimization.forward.xml')
|
||||
if not os.path.exists(forward_xml):
|
||||
forward_xml = os.path.join(mt5_terminal_dir, f'{ea_name}_optimization[1].forward.xml')
|
||||
search_dirs = mt5_terminal_dir if isinstance(mt5_terminal_dir, (list, tuple)) else [mt5_terminal_dir]
|
||||
forward_xml = None
|
||||
for base_dir in search_dirs:
|
||||
if not base_dir or not os.path.isdir(base_dir):
|
||||
continue
|
||||
for candidate in (f'{ea_name}_optimization.forward.xml', f'{ea_name}_optimization[1].forward.xml'):
|
||||
p = os.path.join(base_dir, candidate)
|
||||
if os.path.exists(p):
|
||||
forward_xml = p
|
||||
break
|
||||
if forward_xml:
|
||||
break
|
||||
|
||||
if os.path.exists(forward_xml):
|
||||
if forward_xml and os.path.exists(forward_xml):
|
||||
oos_results = self.parse_mt5_xml_optimization(forward_xml)
|
||||
if oos_results:
|
||||
best_oos = sorted(oos_results, key=lambda x: x.get('profit_factor', 0), reverse=True)[0]
|
||||
@@ -317,4 +331,4 @@ class ResultAnalyzer:
|
||||
if is_dd > 0 and oos_dd > 0:
|
||||
result['dd_increase'] = round((oos_dd / is_dd - 1) * 100, 1) if is_dd > 0 else 0
|
||||
|
||||
return result
|
||||
return result
|
||||
|
||||
Reference in New Issue
Block a user