Files
2026-07-06 21:58:56 +08:00

97 lines
3.6 KiB
Python

"""End-to-end: INIGenerator picks the right MT5 Symbol from explicit alias map.
Run: python tests/test_ini_generator.py
"""
import os
import sys
import tempfile
HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.normpath(os.path.join(HERE, "..", "scripts")))
from ini_generator import INIGenerator
def _make_cfg(aliases, symbols, out_dir):
return {
"mt5_settings": {"terminal_path": "", "data_dir": "",
"reports_dir": "{PROJECT_ROOT}/reports", "ini_dir": out_dir},
"backtest_settings": {
"currency": "USD",
"date_range": {"from": "2010.01.01", "to": "2024.12.31"},
"deposit": 10000, "execution_delay": 0, "forward_date": "",
"forward_mode": 0, "leverage": "1:100", "model": 0,
"optimization": 0, "replace_report": True, "shutdown_terminal": True,
"symbols": symbols, "timeframes": ["H1"], "visual": 0,
"symbol_aliases": aliases,
},
"eas": [{"name": "DummyEA", "filename": "MQL5/Experts/DummyEA.ex5", "parameters": {}}],
}
def _grep_symbol(ini_path, target):
with open(ini_path, "r", encoding="utf-8") as f:
for line in f:
if line.startswith("Symbol="):
return line.strip().split("=", 1)[1] == target
return False
def _get_ini_value(ini_path, key):
with open(ini_path, "r", encoding="utf-8") as f:
for line in f:
if line.startswith(f"{key}="):
return line.strip().split("=", 1)[1]
return None
def expect(label, ok):
print(f" {'PASS' if ok else 'FAIL'} {label}")
if not ok:
raise AssertionError(label)
def main():
with tempfile.TemporaryDirectory() as tmp:
cfg = _make_cfg({"XAUUSD": "XAUUSDc"}, ["XAUUSD", "EURUSD"], tmp)
files = INIGenerator(cfg).generate_ini_files()
expect("2 files", len(files) == 2)
expect("XAUUSD alias applied", any(_grep_symbol(f, "XAUUSDc") for f in files))
expect("EURUSD passes through", any(_grep_symbol(f, "EURUSD") for f in files))
with tempfile.TemporaryDirectory() as tmp:
cfg = _make_cfg({}, ["XAUUSD"], tmp)
files = INIGenerator(cfg).generate_ini_files()
expect("no alias -> bare", any(_grep_symbol(f, "XAUUSD") for f in files))
with tempfile.TemporaryDirectory() as tmp:
cfg = _make_cfg({"XAUUSD": "XAUUSDm"}, ["XAUUSD"], tmp)
files = INIGenerator(cfg).generate_ini_files()
expect("explicit override wins", any(_grep_symbol(f, "XAUUSDm") for f in files))
with tempfile.TemporaryDirectory() as tmp:
cfg = _make_cfg({}, ["XAUUSD"], tmp)
cfg["backtest_settings"]["execution_delay"] = 0
files = INIGenerator(cfg).generate_ini_files()
expect("delay=0 -> ExecutionMode=0", _get_ini_value(files[0], "ExecutionMode") == "0")
expect("delay=0 -> no ExecutionDelay line", _get_ini_value(files[0], "ExecutionDelay") is None)
with tempfile.TemporaryDirectory() as tmp:
cfg = _make_cfg({}, ["XAUUSD"], tmp)
cfg["backtest_settings"]["execution_delay"] = -1
files = INIGenerator(cfg).generate_ini_files()
expect("delay=-1 -> ExecutionMode=-1", _get_ini_value(files[0], "ExecutionMode") == "-1")
with tempfile.TemporaryDirectory() as tmp:
cfg = _make_cfg({}, ["XAUUSD"], tmp)
cfg["backtest_settings"]["execution_delay"] = 250
files = INIGenerator(cfg).generate_ini_files()
expect("delay=250 -> ExecutionMode=250", _get_ini_value(files[0], "ExecutionMode") == "250")
print("\nAll INI generator alias checks passed.")
if __name__ == "__main__":
main()