userたとえば、10年以上の長期期間で、ひと月ごとのバックテスト結果が欲しい場合。MT4のストラテジーテスターを使うと、逐一期間を変えて実行しなければならないため、大変に時間がかかります。ネット上には有料の自動化ソフトもありますが、最終的にはバックテストの実行にはMT4を使います。MT4のヘルプを読んで仕組みを理解すれば、有料のソフトを用意する必要はありません。MT4のヘルプには、コマンドラインで実行するために必要なパラメータが書かれています。起動時の構成テスターの起動設定ヘルプで示されているように、起動時にパラメータを渡すだけでテスターを実行できます。次はサンプルのパラメータです。AverageTestExpertParameters=ma0.setTestSymbol=EURUSDTestPeriod=H1TestModel=2TestRecalculate=falseTestOptimization=falseTestDateEnable=trueTestFromDate=1970.01.01TestToDate=2006.06.06TestReport=MovingAverageReportTestReplaceReport=falseTestShutdownTerminal=trueTestExpertParametersで示されているのは、EAのパラメータを含むファイルです。このファイルは、EAのロット等を変更するときに使っている「エキスパート設定」画面の「パラメーターの入力」タブから「保存」ボタンを押して作成できます。「エキスパート設定」画面の「パラメーターの入力」タブこの画面から保存すると、TestExpertParametersのパラメータに指定できる拡張子がsetのファイルが作成されます。ファイルを指定しなかった場合は、EAの現在のパラメータが使用されます。「エキスパート設定」画面に入力した内容は、MT4のデータフォルダ(「\tester\[エキスパート名].iniファイル」)に保存されています。頻繁にEAのパラメータを変更する必要がなければ、setファイルを保存して使うのではなく、「エキスパート設定」画面から変更しておくだけでよいです。TestExpertにEAの名前(拡張子ex4は不要)、TestSymbolに通貨ペア、TestPeriodに時間足、TestModelにモデル(全ティックなら0、コントロールポイントなら1、始値のみなら2)を指定します。TestFromDateとTestToDateは、期間をYYYY.MM.DD形式で指定します。TestReportは、バックテスト結果を出力するファイル名を指定します。ファイルが保存される場所は、データフォルダになります。データフォルダの場所は、MT4の「ファイル」メニューの「データフォルダを開く」コマンドを実行すると確認できます。4のヘルプこの記事を見ると、かなり古いバージョンでは、MT4をインストールした場所がデータフォルダになっていたようですが、ビルド600からデータフォルダの場所と構造が変わり、次の場所になりました。C:\Users\ユーザ名\AppData\Roaming\MetaQuotes\Terminal\長い文字列TestReplaceReportにfalseを指定すると、TestReportで指定した場所に同名のファイル名があっても上書きせず「ファイル名[1].htm」のように数字がつきます。他のパラメータは、最適化を行うのでなければ、特に変更する必要はないでしょう。パラメータに沿ってファイルを作り、コマンドラインから実行すると、MT4が起動してバックテストがはじまります。実行方法は、サンプルパラメータをTester.txtなどの名前でテキストファイルで保存し、コマンドラインからMT4に渡すだけです。Tester.txt実行しても、スプレッドの値が「現在値」(ブローカーから配信されている現在の値)になってテストされることがあります。これは、スプレッドの値をどのようにするか指定していないためです。ヘルプにはスプレッド値を設定するパラメータが見当たりません。原因はヘルプの一部に未記載のパラメータがあるためです。公式サイトを見に行くと、スプレッドのパラメータは「TestSpread」として用意されていることがわかります。4のヘルプに「TestSpread」のパラメータの記載がある公式サイトのヘルプには「TestSpread」のパラメータがあります。内容に新旧があるため、場合によっては手元のMT4のヘルプに、未記載のパラメータがあるでしょう。以上を踏まえて、(EAのパラメータはsetファイルを使わず「エキスパート設定」画面から変更するとして)テスター起動時のパラメータは次をベースにします。Average」というEAを、USDJPY、5分足、全ティック、スプレッド15、1999年1月1日~1999年1月31日の期間でテストする場合は、次のパラメータになります。AverageTestReplaceReport=falseTestShutdownTerminal=trueTestSpread=15実際に実行するときは、TestFromDateとTestToDateの日付を、一か月ごとに自動で変えていきます。これらをバッチファイルのみで対応するスクリプト例を次に示します。)):EXITENDLOCALバッチファイルの中で、Terminalに渡すパラメータのファイルを作成し、実行する、を繰り返しています。Tester.batなどのファイル名で保存して、コマンドプロンプトで実行します。Tester.batバックテストの結果は、パラメータTestReportで指定した場所に指定したファイル名で保存されます。「TestReport=tester\files\...」などのように相対パスで指定します。この場合、次の場所に保存されます。C:\Users\ユーザ名\AppData\Roaming\MetaQuotes\Terminal\長い文字列\tester\files\これで、1999年から2017年までの長期期間で一か月ごとのバックテスト結果を手に入れることができました。1回のテストは一か月という短期間であれば数秒程度で処理されます。一つのEAでパラメータを変えてバックテストを数十回も繰り返したり、数十個と気が遠くなるような数のEAをバックテストしたりするときには、今回のような自動化を行うと時短できます。単純な条件なら1つのEA毎にパラメータを変更することもありません。補足として、コマンドラインからの実行では、Terminalが起動時にパラメータを受け取る必要がある為、Terminalを起動させた状態で実行しても、フォーカスがうつるだけでテストは実行されません。テストのたびにTerminalは起動・終了しなければならないため、短時間にログインを繰り返します。パラメータTestShutdownTerminalにtrueを指定しているのでテスト毎にTerminalは終了しますが、かといってfalseにするとTerminalは終了せず、バッチファイルで戻り値を得ることもできず、自動で次のテストを実行できません。この場合は毎回Terminalを手動で終了しなければなりません。forumさらなる時短を求めるには、複数のTerminalを使うことです。