各年毎に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
この記事が気に入ったらサポートをしてみませんか?