見出し画像

各年毎にEAの最適化を行い、結果をファイル保存する(Pythonで実行)

過剰最適化避けるために、年毎のデータ取得したいじゃん?
でも年毎に取得するとなると手間じゃん?
やっぱり自動化したいじゃん?ってことで作成

python側のプログラム

import subprocess
import configparser
import os
import shutil

# EAや通貨ペアの設定
ea_name = "CS_bora"  # 結果を保存する名前
symbol = "USDJPY"  # 通貨ペア
comment = "Optimization"  # 結果ファイルに付与するコメント
years = [2018, 2019, 2020, 2021, 2022, 2023, 2024]  # バックテスト対象年
tick_model = 1  # ティック生成モード (0: 全ティック, 1: 1分足OHLC, 2: 始値のみ, 3: 数値計算, 4: リアルティック)

# iniファイルと最適化を行うMT5のパス
ini_file_template = r"C:\Users\const\OneDrive\Documents\mt5_myconfig\myconfig_temp.ini"
mt5_executable = r"C:\Program Files\OANDA MetaTrader 5\terminal64.exe"

# 結果の保存先ディレクトリ
save_directory = r"E:\FX_EA_データ検証\202408_XXXXXXXXXXXXXXX_bora"

# 最適化結果が生成されるフォルダのパス(MT5のTarminal)
results_directory = r"C:\Users\const\AppData\Roaming\MetaQuotes\Terminal\EE0000000000000000000"

def modify_ini_file(year):
    config = configparser.ConfigParser()
    config.read(ini_file_template)

    # iniファイルの修正
    config['Tester']['fromdate'] = f"{year}.01.04"
    config['Tester']['todate'] = f"{year}.12.25"
    config['Tester']['symbol'] = str(symbol)
    config['Tester']['model'] = str(tick_model)  # ティック生成モードを設定
    config['Tester']['report'] = f"{ea_name}_{symbol}_{comment}_{year}"  # レポートファイル名(ディレクトリ指定なし)

    # 修正されたiniファイルを上書き保存
    with open(ini_file_template, 'w') as configfile:
        config.write(configfile)

    return ini_file_template


def run_optimization(year, ini_path):
    # MT5の最適化を実行
    subprocess.run([mt5_executable, f"/config:{ini_path}"])

    # 保存先のファイル名
    generated_file = os.path.join(results_directory, f"{ea_name}_{symbol}_{comment}_{year}.xml")
    file_path = os.path.join(save_directory, f"{ea_name}_{symbol}_{comment}_{year}.xml")

    # 結果ファイルを移動
    if os.path.exists(generated_file):
        shutil.move(generated_file, file_path)
        print(f"Optimization for {year} saved to {file_path}")
    else:
        print(f"Result file not found for {year}.")


for year in years:
    ini_path = modify_ini_file(year)
    run_optimization(year, ini_path)


iniファイルとsetファイルを準備 (テストパラメーターは[TesterInputs]として、iniファイルに書き込めるので、setファイルの準備は不要です・・・)

C:\Users\const\OneDrive\Documents\mt5_myconfig\myconfig_temp.ini

[Tester]
expert = XXXXXXXXXXXXX
symbol = USDJPY
period = M15
deposit = 1000000
leverage = 1:100
model = 1
executionmode = 0
optimization = 1
optimizationcriterion = 6
fromdate = 2024.01.04
todate = 2024.12.25
forwardmode = 0
report = CS_bora_USDJPY_Optimization_2024
replacereport = 1
shutdownterminal = 1

[TesterInputs]
; MagicNumber
MagicNumber_bid=1211||1211||1||12110||N
MagicNumber_ask=1201||1201||1||12010||N
; 入力パラメータ
Trade_action=-1||1||0||-1||Y
TimeFrame1=15||1||0||16408||N
hoge1=-3||-3||1||3||Y
hoge2=-2||-3||1||3||Y
TimeFrame2=16385||1||0||16408||N
hoge3=-3||-3||1||3||Y
hoge4=-3||-3||1||3||Y
; トレードルール
initialLot=0.1||0.1||0.010000||1.000000||N
target_ATR=100||0||50||150||Y
; ATR
ATR_Period=9||9||1||90||N



後はpythonから実行するだけ。
説明雑だけど、コピペするだけなんでみんなできると思う。


MQL5コード一覧はコチラ

https://note.com/noway_pway/n/na50e47a51645


この記事が気に入ったらサポートをしてみませんか?