以前「正しいバックテストのやり方」として、アルパリなどの精度の高いヒストリカルデータを使い不整合チャートエラーをゼロにするための方法を書きましたが、今回はストラテジーテスターの使い方から無料EAなどのパラメーターの最適化の方法などを簡単に説明していこうと思います。
無料EAの利用者の方は、よろしければオリジナルのパラメーターの作成に取り組んでみていただければと思います。自分でやってみると発見も多く大変勉強になると思います。
まず、正しくバックテストができることが前提になりますので、「正しいバックテストのやり方」を参照していただき正確なヒストリカルデータを準備しましょう。
コンテンツ
EAの元パラメーターなどは作業フォルダにコピーする
元のパラメーターファイルを修正して改良する場合は、元のパラメーターをMT4のフォルダーの中の「tester」フォルダーの中にもコピーしておきます。
「tester」フォルダは、MT4のファイルメニューの「データフォルダを開く」からもアクセスできます。
*以下画像はクリックで拡大できます。
MT4ストラテジーテスターの設定
では、実際にMT4のストラテジーテスターを開いて最適化のための準備をしましょう。
MT4の表示メニューから「ストラテジーテスター」を選択します。
MT4のウインドウの中に「テスター」という項目が開きます。ここでバックテストやパラメーターの最適化を行います。
今回は「Scal-8」を例にあげて説明します。
テスターのウインドウの左上「エキスパートアドバイザ」の右となりのプルダウンメニューで最適化(バックテスト)する無料EAを選択しダブルクリックします。(今回はScal-8)
次にテストする通貨ペアを選択します。今回はEURUSDですが、事前にヒストリカルデータが準備されている必要があります。
ヒストリカルデータについては「正しいバックテストのやり方」を参照してください。
次に、その下の「モデル」の部分で「全ティック」を選択します。
ここには以下の3種類項目がありますが、軽く説明します。
1、全ティック
(利用可能な全時間枠を使い全てのティックを生成する、最も正確な方法)
2、コントロールポイント
(ひとつ下の時間枠を使った大まかな方法、結果はあまり信頼性はない)
3、始値のみ
(最も早い方法、バーの始めにしか動かないEA向け)
書いてある通りですが、この中で最も正確なものが1の「全ティック」です。デメリットとしてはこの中では一番時間がかかります。
それとは逆に最も早いのが3の「始値のみ」です。しかし一般的には正確差にかけるのであまり使わないと思います。
ただ、始値でしか動かないEAの場合は精度に問題は生じないので有効な方法となります。
*わからない場合は、「始値のみ」と「全ティック」でそれぞれバックテストしてみて、結果に余り差がなければ「始値のみ」を使うメリットは十分あると思います。
これら2つの中間的な方法が「コントロールポイント」です。
どのモデルにもいえますが、一つのバー(該当時間足のローソク)の中で2つ以上の注文が入るEAの場合や1分足を使うEAの場合は著しく精度が落ちます。
前者の代表例として、ステップ(刻み)の小さなトレーリングストップが挙げられます。
そのようなロジックのEAの場合は「全ティック」であっても信頼性は低いものになります。
対策としてはトレーリングストップのステップ幅をやや広げて、なるべく同じ足の中でトレーリングストップが2度以上作動しないようにすると、多少は精度が上がると思います。
これらのモデルは速さと精度のトレードオフなのですが、使用目的によって使い分けます。
たとえば、パラメーターの最適化を行う場合は、正確なバックテストデータの数値が必要なわけではなく、数ある設定のうちどれが相対的に良いか悪いかがわかれば良いと割り切れば、場合によっては時間の短縮ができる可能性が上がります。
当サイトの無料EAの場合、「Scal-8」と「Break-2」以外はコントロールポイントを使って大まかな最適化を行ってから、「全ティック」で最後の詰めを行なうこともあります。
次にテスト期間、タイムフレーム(EAをセットする時の時間足ですが、なぜか期間と表示されています)、スプレッドを入力して「最適化」にチェックを入れます。
この最適化にチェックを入れるか入れないかで、バックテストかパラメーターの最適化かが変わります。
テスト期間は長ければ信頼度は上がりますが、時間がかかるばかりか難易度も非常に上がり、なかなか長期で通用する設定が見つからない場合も多々あります。
次に「期間」と書かれた項目のプルダウンでEAをセットする時のタイムフレームを選択します。
次にその下のスプレッドを指定します。
私の場合でいうと、XMのEURUSDのスプレッドが1.7pips〜1.8pipsくらいが平均なような気がするので、スキャルピングEAの場合は0.5pipsくらいプラスして2.3pipsくらいでやることが多いです。
ブレイクアウトの場合はネガテイブスリップを考慮して2.5〜2.7pipsくらいでやることが多いと思います。
MT4に入力するスプレッド値はピップスではなくポイントなのでアルパリやFXDDやXMもそうだと思いますが、2.3pipsの場合は「23」と入力します。
EAのパラメーターの最適化
次に、エキスパートの設定をクリックして、設定パネルを開きます。
まず、パラメーターのテスト設定で、必要な場合は「Long only」、「Short only」、「Long & Short」の中から、作るパラメーターファイルに合わせて選択します。
*当サイトのEAの場合は、2019年1月現在「Break-1、2」以外は「Long & Short」で行います。
一般的なEAの場合は「Long & Short」で良い場合が多いと思います。
「Scal-8」の場合は「Long & Short」を選択します。
初期証拠金と通貨単位を入力、選択します。
円(JPY)でテストしたい場合は、プルダウンの項目になく選択できませんが、半角英数でキーボードから入力すると円(JPY)で最適化やバックテストができます。
次に、パラメーターの入力タブを選択します。
本来は以下のような感じで、調整する項目全てにチェックを入れて、各パラメーターの範囲を指定すると思います。
*以下パラメーターの各項目の数値はイメージです。
上記のような方法なら、かなり高確率で最適なパラメーターが見つかると思いますが、現実的には不可能です。
なぜかというと、パラメーターの最適化はMT4が内部で各パターンのバックテストを順番に行なっているので、上記の方法でパラメーターの最適化を行うと数百兆回以上のバックテストを行う必要があり、ログファイルのサイズが大きくなってエラーを吐くようになるのと、かりにできたとしても時間が5万年(適当w)くらいかかると思います。
*上記の場合何パターンのパラメーターの組み合わせがあるか私の計算機では桁数がたりませんでした。
ここからは、人それぞれで経験や考え方で違いが出てくると思いますが、関係性の少ない設定項目は別々に最適化した方が、大幅に時間を短縮できます。
「Scal-8」の場合はまず、Long用のパラメータとShort用のパラメータで分けることができます。
それでも多すぎなのでなるべく一度に最適化する項目は少なくなるようにします。
たとえばですが、以下のように2項目にだけを最適化します。
最適化が終わったら「最適化結果」タブを選択して結果を見ます。
損益やプロフィットファクター、ドローダウンなどの項目を見て、最も良さそうな設定を選びます。
その設定の上で右クリックして「パラメーターの設定」を選ぶと、パラメーター設定パネルの項目に最適化された数値が書き込まれています。
作業がだいぶ進んだところで、MT4が落ちたりマシンがフリーズしたりすると泣くに泣けないので、私はその都度最適化したパラメーターファイルを名前をつけて上書き保存しています。
上記2項目の最適化ができたら、他の2項目(1〜3個程度)の最適化を行います。
これを繰り返していき、全項目の最適化を一通り行います。
さらにもう一度EAの最適化する
一通り終わったら、再度最初から最適化の手順を繰り返します。
2周目はは、同時に行うテスト項目を若干多めにし、テスト範囲を前後1〜2程度に狭めて最適化を行います。
ここら辺のさじ加減は、経験で変えても良いと思います。
数値が変わった場合は、最適値がテスト範囲の最小値か最大値だった場合は、その項目についてもう少し(2〜3くらい)外側までの範囲を指定して再度最適化を行います。
*必ず最適値の前後1つ以上はテストしないと、その値が最適値かはわからないので…。
これを繰り返して、各項目の最適化の精度を上げていきます。
全項目を同時に最適化しなくても、この手順を繰り返していけば、かなり精度は上げられるのではないかと思います。
MT4でテスト中にエラーが出た場合
バックテストやパラメータの最適化をやっていると以下のようなエラーが出ることがあります。このようなエラーが出ると正確なバックテストや最適化はできなくなります。
ネット上でもこの点に言及した記事は少なく、ここで躓く初心者の方は多いかもしれません。
*エラーを出そうと思ったらなかなか出なかったのですが、確かこんな感じのエラーだったと思います。
このような場合は、「tester」フォルダの中の「history」フォルダの中に巨大なサイズの「〜FXTファイル」なるものが溜まってきているはずです。
そのファイルを削除してMT4を再起動させると、問題が解消されます。
エラーが出たテストはあてにならないので、直近の保存したパラメーターファイルから、続きを行うようにしましょう。
出来上がったパラメーターでバックテストしてみる
最後に、出来上がったパラメーターファイルを使ってバックテストを行います。
収益曲線や各項目を細かく見ていきます。詳しいバックテストデータの見方は「MT4バックテストデータの見方」に詳しくまとめましたので参考にしてみてください。
*バックテスト結果はイメージです。
時間と労力と電気代を使ってパラメーターを最適化したにも関わらず、満足できる結果が得られないケースは多々あります。(うまくいかないことの方が多いです。)
こればっかりは、実際にテストして試して見ないとわからないと思いますので、良いパラメーターが得られなかった場合でも「その期間や条件EAなどではうまくいかない事が分かった」という大きな収穫があったと考え、次の最適化を頑張りましょう。
私自身、日常的にバックテストとパラメーターの最適化をやっていますが、なかなか良い設定は見つかるものではないと思います。
しかし、自動売買をやり続ける限り、新しいEAや設定をテストすると同時に、既存のポートフォリオのEAについてもパラメーターの検証と最適化を定期的に行う必要があります。
諦めずにバックテストと最適化をやっていれば、そのうち必ず良いパラメーターを見つけることができると思います。
*元のEAそのものがダメダメな場合は別ですが….w
現在無料EAと一緒に公開しているパラメーターファイルは全てこのような方法で最適化したものです。
さらなる効率アップの方法
実際にパラメーターの最適化を行うと、あまりの遅さに心が折れそうになります。
これはマシンのスペックを上げれば多少は改善しますが、劇的な改善はないと思います。
CPU換装、メモリー増量、SSD化といろいろ試しましたが、CPUの換装以外はあまり効果がないように思います。
CPUの換装も劇的に変わるわけではなく、費用対効果でいえばかなり微妙なような気がします。
逆に言えば、遅いのはマシンのせいではないので、スペックの低いマシンでも勝負できると思います。
それでも、なんとかパラメータの最適化のスピードを上げられないかと考えてあの手この手とやるのですが、いくつか効果的な方法があります。
1、度にテストするパラメータの項目をなるべく少なくする。
前の方で書きましたが、関係のない(影響し合わない)パラメーターは別々に最適化するようにすると、MT4が行うバックテストの回数を劇的に減らすことができる。
2、テストするパラメータの範囲をなるべく小さい範囲にする。
当然内部で行うバックテストの回数が減るので早くなるのですが、最適値が範囲の外にある可能性がある場合は、再度範囲を変えて最適化します。
具体的に言うと、テスト結果の最適値が範囲の最小値か最大値だった場合は、そのテスト範囲の外側に本当の最適値が存在する可能性があると思います。
再度行うことについて、「2度手間で遅くなるのでは?」と思う方もいるかもしれませんが、2回、3回、4回と再テストを行っても、断然こっちの方が早いと思います。
3、コントロールポイントで最適化する。
対象のEAにもよるのですが、最適化に使うバーのモデルを「全ティック」ではなく「コントロールポイント」を使って行います。
もちろん上記1、2の方法を併用して行います。
かなり早く最適化できると思いますが、そのままのパラメータでは信頼性に欠けるので、出来上がったパラメーターをもう一度「全ティック」で最適化を行います。
ただ、コントロールポイントでの最適化で、イイ線に来ているはずなので、全ティックでの最適化の際は、項目の範囲を前後1つだけに絞ってテストしていきます。
最適値が変わる場合は、その部分だけ再テストするようにして行きます。
*トレーリングストップを使っているEAや、バーの途中で注文を出したり、1本のバーの中で2回以上注文を出すEAの場合は使えません。….といいますか、そのようなEAの場合は全ティックでやっても微妙な場合もあります。
4、さらに奥の手として、複数のMT4で同時にパラメーターの最適化を行う。
MT4はマルチコアのCPUに対応していないので、12コアのマシンを使っていて最適化をやっていても、最適化中はほぼ1つのコアしか使っていません。これが遅い原因の一つでもあるのですが、それならばCPUのコア数の許す限り多くのMT4で分割して最適化を行えばスピードアップに繋がります。
たとえば4コア(実コア)のCPUであれば3つくらい同時にMT4を立ち上げて、ストラテジーテスターの最適化をブン回せば3倍くらいのスピードアップになります。
ただし、かなりCPUをシバくことになるのでマシンによっては熱対策などが必要になるかもしれません。
*MT4の環境は簡単にコピーできますので、興味のある方は以下を参照してください。
これらの方法を繰り返すことにより、だいぶ早く最適化ができるようになると思います。
ただ、それでもやはり数時間から1日くらい、EAによってはそれ以上かかるものもあります。
FXで自動売買の場合、EAトレーダーが日々やることのほとんどが今回説明したようなバックテストとパラメーターの最適化だと思います。
これは結構大変でして、努力と根性がないとなかなか続けられない事かもしれません。
しかし逆に言えば、学歴や職歴などは関係なく努力と根性でなんとかなる事でもあります。
自動売買に真剣に取り組みたい人は頑張りましょう!
***
いつもやっているパラメータの最適化ですが、文章にして書こうと思うと結構難しいです。
私の文才がないだけかもしれませんが…w
<関連記事>
短期間での最適化の信頼性を上げる方法 ←注目かも…
スポンサードリンク