Bitcoin 裁定取引と自動取引 abitra.netのブログ

Bitcoinの自動売買のあれこれ

MT4 ストラテジーテスターを一括で複数の通貨ペア、複数のEAを行う方法 その1


以前コメントで頂きまして 山なめこさんの"MT4BP"を教えてもらって凄い気になっていたので自分でもつくれないかなーって事で近しいプログラムを作成してみました。


※完全一致でもないですし制作自体1日程度なので勘違い及び間違ってる可能性があるので注意。


"EA山なめこ@養分"

twitter.com



"MT4BP" "MT4バッチプロセッサー"

www.gogojungle.co.jp


MT4バッチプロセッサーとは何か?


引用

バックテストの超時短ツール。複数EAのバックテスト作業を最大8並列で完全自動化できます。複数の通貨・時間足を含め、複雑な設定でバッチ処理を設定でき、時間短縮&高度な分析が可能になります。


簡単に書くと複数のバックテストを並列で処理出来るツール。


通常のMT4のバックテストは一つしか動かせない。


MT4の設計自体が古い影響なのか通常はバックテストは一つしか出来ないですし、PCのCPUも一つのコアしか動いていない。
私のPCは高性能なのに全く活用出来ていない。。。
高性能PCは1コア辺りの処理が早い傾向があるのでバックテストの処理は早いのですが複数コア使ってもっと高速に出来るんじゃないのーって。

注意

正確には今回の方法も1つのMT4を利用してバックテストを行っているのですが、一括で複数のMT4を利用する事によって複数のCPUでバックテストを行っている様な感じです。
"MT4BP" "MT4バッチプロセッサー"がどのような処理をしているのか不明です。同じような処理なのか全く違うのか。

並列でバックテストを処理出来ると何が便利?


バックテストの検証時間が短くなります。


自作EA及び購入EAに関わらず必ずバックテスト検証しているかと考えますが数年を最適化で複数の設定で行うとめちゃくちゃ時間が掛かります。
下手したら一つの検証で1日とかねw

それを色々な時間軸、いくつもの通貨ペアでって考えると、かなり面倒(時間的にも)です。

MT4でストラテジーテスターを一括で複数の通貨ペアで処理する


ここからが本題。

出来る事

  1. 複数の通貨ペア (例えば"USDJPY", "USDCAD", "NZDUSD", "GBPUSD", "GBPJPY", "EURUSD", "EURJPY", "EURGBP" )を一度にバックテスト出来ます。
  2. 複数のEAを一度にバックテスト出来ます。
  3. 複数の時間軸のバックテストを行えます。


今迄一つのバックテストが終わったら別の通貨ペアの選択を選択して再度バックテストをしてといった感じでバックテストを行っていたのを一気に複数通貨ペアをバックテストさせます。
もちろん最適化も行います。

出来ない事


ビジュアルモードでのバックテスト

最適化を行う前提ですのでデメリットではないかなー


MT4 ストラテジーテスターを一括で複数の通貨ペア、複数のEAを行う為の準備


事前にある程度準備が必要です。
といってもコピーとリンクを少し変更する程度。

必要なもの


MT4 portable インストール型ではなくalpariなどのportableタイプのMT4
ruby (pythonjava何でもOK)などのプログラム環境。私がrubyがで行っただけ。


※以下PortableタイプのMT4で行う前提で書いています。

MT4のコピー(複製した分だけ一括で処理出来るMT4が増えます)

私はPCが8コアなので8つ同時動かす前提で考えています。
8つ同時で動かしてもそこそこ重たいので自身のPCスペックと相談しながら何個複製するか検討下さいませ。


MT4のファイルを確認すると以下の様な構成になっているかと考えます。


f:id:hogehoge_kato:20190814165402p:plain



このフォルダをそのままコピー


私はコピーしたフォルダをコピー元の大元フォルダにいれいます。



コピーしたフォルダに分かりやすいように番号を設定。

こんな感じ。


f:id:hogehoge_kato:20190814165535p:plain


その後コピーしたフォルダのtesterフォルダとExpertsフォルダを削除
大元のtesterフォルダとExpertsフォルダは消しちゃダメですよ。削除するのはコピーしたものだけ。


f:id:hogehoge_kato:20190814170754p:plain



大元からコピー先にファイルを共有するので。


f:id:hogehoge_kato:20190814170446p:plain

f:id:hogehoge_kato:20190814170450p:plain



削除したらジャンクションを利用して大元からコピー先にtesterフォルダとExpertsフォルダをジャンクションリンクを設定。

コマンドプロンプトを利用してジャンクションを設定

こんな感じ

mklink /J C:\Users\hogehoge\MT4_alpari\MT4_alpari_2\MQL4\Experts C:\Users\hogehoge\MT4_alpari\MQL4\Experts
&
mklink /J C:\Users\hogehoge\MT4_alpari\MT4_alpari_3\MQL4\Experts C:\Users\hogehoge\MT4_alpari\MQL4\Experts
&
mklink /J C:\Users\hogehoge\MT4_alpari\MT4_alpari_4\MQL4\Experts C:\Users\hogehoge\MT4_alpari\MQL4\Experts
&
mklink /J C:\Users\hogehoge\MT4_alpari\MT4_alpari_5\MQL4\Experts C:\Users\hogehoge\MT4_alpari\MQL4\Experts
&
mklink /J C:\Users\hogehoge\MT4_alpari\MT4_alpari_6\MQL4\Experts C:\Users\hogehoge\MT4_alpari\MQL4\Experts
&
mklink /J C:\Users\hogehoge\MT4_alpari\MT4_alpari_7\MQL4\Experts C:\Users\hogehoge\MT4_alpari\MQL4\Experts
&
mklink /J C:\Users\hogehoge\MT4_alpari\MT4_alpari_8\MQL4\Experts C:\Users\hogehoge\MT4_alpari\MQL4\Experts

このジャンクションを利用してコピー先に大元のExpertsを利用する事が出来ます。

大元のMT4のExpertsにEAいれたらコピー先のMT4でも利用出来るようになります。
ショートカットリンクでは出来ませんので注意。


mklink /J C:\Users\hogehgoe\デスクトップ\MT4_alpari\MT4_alpari_2\tester C:\Users\hogehgoe\デスクトップ\MT4_alpari\tester
&
mklink /J C:\Users\hogehgoe\デスクトップ\MT4_alpari\MT4_alpari_3\tester C:\Users\hogehgoe\デスクトップ\MT4_alpari\tester
&
mklink /J C:\Users\hogehgoe\デスクトップ\MT4_alpari\MT4_alpari_4\tester C:\Users\hogehgoe\デスクトップ\MT4_alpari\tester
&
mklink /J C:\Users\hogehgoe\デスクトップ\MT4_alpari\MT4_alpari_5\tester C:\Users\hogehgoe\デスクトップ\MT4_alpari\tester
&
mklink /J C:\Users\hogehgoe\デスクトップ\MT4_alpari\MT4_alpari_6\tester C:\Users\hogehgoe\デスクトップ\MT4_alpari\tester
&
mklink /J C:\Users\hogehgoe\デスクトップ\MT4_alpari\MT4_alpari_7\tester C:\Users\hogehgoe\デスクトップ\MT4_alpari\tester
&
mklink /J C:\Users\hogehgoe\デスクトップ\MT4_alpari\MT4_alpari_8\tester C:\Users\hogehgoe\デスクトップ\MT4_alpari\tester


Expertsと同じくtesterもジャンクションでリンクさせておきます。

ちゃんとジャンクション出来ているとコピー先のフォルダにこんな感じのフォルダが出来ます。


f:id:hogehoge_kato:20190814165725p:plain


f:id:hogehoge_kato:20190814165728p:plain



今回はここまで次回rubyプログラムで設定ファイルを作成して一括で8つのMT4を動かして一括で複数の通貨ペアをバックテスト。させる予定。予定。予定。書くのが面倒になってきたw書ききれるかな。。。