皆さんこんにちは。Catherineです。
たかがバックテスト、されどバックテスト。
だって、バックテストで勝てないEAがフォワードで勝てるはずがありませんから。
(かといってバックテストだけ信じてもだめなのはご理解いただけていると思いますけど(^^;)
このバックテストでのEAの働時間等のパラメータの適切値、皆様どうやって算出されていますでしょうか?
あ、その前にバックテストに使うヒストリカルデータ(.hst)を揃えないといけません。
ちなみに、販売されているヒストリカルデータとかMT4標準でDLできるMetaquotesのデータではスキャルピングEAでは正確なバックテストができません。
必ず自分のお使いの、しかもライブサーバーのデータでないとだめです。
私のブログからですが・・・(^^;
困ったちゃんのFXDDヒストリカルデータ(その3)http://catherine2010.blog119.fc2.com/blog-entry-17.htmlブローカーの違うチャートを比べてみると一目瞭然。たとえECNブローカーであったとしても、チャートはサーバーによって全く違うのです。日足(ひあし)とかはまず大丈夫でしょうけど、1分足等を見るスキャルピングEAでは全くと言っていいほど使えません。
同じブローカーであったとしても、デモとライブで違うブローカーなんていうのもざらです。
FXDDなんかは過去のhstデータを提供していますが、そんな都合のいいブローカーは現実にはほとんどありません。
http://www.fxdd.com/jp/mt1m-data.htmlしかもFXDDデータは2005年とか時期によって時間がずれていて朝スキャルでは全くダメダメです(汗)。
困ったちゃんのFXDDヒストリカルデータ(その2) ←また私のブログからですが・・・(^^;
http://catherine2010.blog119.fc2.com/blog-entry-16.html↑FXDDでも2008年以降ならばOKですよ。
さて、FXDD以外のブローカーの方は、もう次の方法しかありません。
まず下準備。
最初にC:\Program Files\BROKERS MT4\historyにあるフォルダとファイルをすべて削除しておきます。
(以下、C:\Program Files\BROKERS MT4\は適時自分のMT4フォルダに読み替えてください)。
自分の使うブローカーのMT4を起動して、メニューバーの[ツール]-[オプション]をクリックしてヒストリーセンターおよびチャートのローソク足の上限数を設定します。バックテスト期間を最大にするため[ヒストリー内のバーの最大数]および[チャート表示バーの最大数]を12 桁以上の数字で埋め尽くします(99・・・とか)。
MT4を再起動してこのWEBの方法で[1分足だけを]DLします。←重要
神速のHistorical Data ダウンロード術。http://d.hatena.ne.jp/fai_fx/20100318/1268838133しかし、この方法ではサーバーに残っているデータ量はせいぜい1ヶ月から3ヶ月くらいしかゲットできません(ブローカーによって違います)
(私は毎週これを実行して、コツコツ過去データを追加して貯めています)。
では、それ以前のデータを入手するには????
・・・それは、・・・過去からずっとデータを取得している人からもらう以外の方法はありません(絶句)。
だから、自分の使うブローカーサーバーから取得したhstデータってそれほど大変貴重なのです!!。
データの入手できない方、ご愁傷様です。
仕方がないので、ヒストリカルデータのある分だけでバックテストします。もしも誰かからもらえた方、とてもラッキーです\(^O^)/
次にスクリプトを用意します。
Period_converter_auto
http://codebase.mql4.com/6534ここでPeriod_converter_auto.mq4 を入手してC:\Program Files\BROKERS MT4\experts\scriptsフォルダに入れておいてください。
先ほどDLして用意したデータは1分足のデータですので、オフラインでMT4を起動し、このスクリプトPeriod_converter_autoからM1データから他の時間足のデータを作成します。
ターミナルウインドウでは[Experts]タブをクリックして経過を表示させておきます。
ナビゲータウインドウの[Script]→[Period_converter_auto]をダブルクリックします。
そのまま[OK]をクリックします。ターミナルウインドウの[Experts]タブを見ると全足の変換結果が表示されていきます。
これで、正確な1分足から日足までの全ての時間足のデータが作成されました。
あとは任意の期間指定(データのある分だけですが)をしてEAでバックテストが可能です。
これが正確なバックテストです。
……………………………………………………………………………………………
さて、バックテスト時にEAの有効な時間帯分析をされる方の中には、私の作った^^;、
バックテストデータから時間帯及び曜日毎プロフィットをグラフにするツールviewtopic.php?f=28&t=67を使って大方の分析を行っている方もいらっしゃると思います。
ただ、そのトピック中にも書いておりますけどこのグラフだけを見て時間を設定してもダメです。
理由はと申しますと、たとえば21時からの稼働を想定したEAの場合、もしも20時に取ったポジションが残る傾向があった場合には
そのことが毎回のバックテストに大きく影響するために、この検証結果が役に立たなくなるからです。
ですから、こういった「いつから稼働を開始するか?」という時間帯別分析表を使うには次の行程でタイムフレームで区切って行う必要があります。
1.24時間フルタイム等の時間で中長期のバックテストを行って、だいたいの時間帯を絞ります。
※朝スキャルEAではNYの終わり頃からアジア時間にかけてを(非常に重要です)スタートとして行うことになると思いますので飛ばしても問題ないと思います。
2.時間を分単位で再度バックテストします。この場合、EAが15分足のものであれば15分のタイムフレーム単位とします。
1800~1815、1815~1830・・・・2100~2115、2115~2130・・・といったように、です。
3.使いたい通貨ペア全部でこのタイムフレーム単位で分けたバックテストをします。
ここまでやると勝てる時間帯がグラフで一目瞭然でわかってきますので、ここで満足できるカーブが出ない時間帯や通貨ペアは却下します。
4.次はパラメータがデフォルトで、何かしらのフィルタがあればその数値を分けながらこのバックテストを繰り返します。
と、このようにやるわけですが、これをPCの前でいちいちセットすることはまず無理?だと思います(汗)。
だって、20通貨ペアで15分毎を5時間分とかPCの前でやっていたら1週間では終わらなさそう・・。
そこで、これらを全自動でやってしまいましょう。
私が行っている方法を書いておきますので、初心者の方は参考にしてみてください。
手動でのバックテストでは効率が悪いですが、faiさんがそのバッチファイルさえも自動で作ってくれるparlスクリプトを公開されています。
このツールを使うとバックテストが全自動で寝ている間にできて便利です 。
バックテストを複数のペアに対して自動で行う。http://d.hatena.ne.jp/fai_fx/20100527/1274886367これで複数通貨ペア、複数期間、複数セットが一括でできます。
難しい!!と思われた方のためにパンデミックを例とした25通貨ペアのplセットを ↓ に置いておきます。このファイルに対しての質問は決してfaiさんはしないでくださいね(^^;。
※このスクリプトの実行には ActivePerl のインストールが必要です。
ActivePerlのインストールhttp://www.perlplus.jp/perlinstall/install/次にtester 以下に batch フォルダを用意して(C:\Program Files\BROKERS MT4\tester\batch\)
そこに置いたAllTimeBatchFileMakerTypeC.pl を実行すると、各通貨用のテスト設定ファイルと、
バッチファイル( AutoTest.bat )が出来ます。
・・・が、それを実行する前にここで問題発生。時間毎のsetファイルも全時間分が必要なのですね(^^;
たとえば1600時から15分毎に2315時まで用意しようと思うと、それだけでも29個の時間帯別セットファイルを作らないといけません(汗)。
例としてパンデミックで時間だけをとりあえずバックテストする場合ならばセットファイルの以下のあたりを変更したファイルが必要です。
……………………………………………………………………………………………
Auto_UTC_OFFSET=0 ←Falseが0、パンデミックの場合、かならずBT時は0です。
Use_DT_Adjust_US_onBT=1 ←サーバーに合わせて変更米国サーバーはこちらが1
Use_DT_Adjust_EU_onBT=0
UTC_OFFSET=2 ←サーバーに合わせて変更
FullTimeTrading=0
StartTime=1600 ←開始時間 ※ここを換える
StopTime=1615 ←終了時間 ※ここを換える
StartTime2=2300
StopTime2=2300
StartDayOfTheWeek=1 (月曜稼働するときは0)
StartingTimeOfWeek=300 ←とりあえずデフォルトでいいでしょう
EndDayOfTheWeek=5
EndingTimeOfWeek=1200 ←とりあえずデフォルトでいいでしょう
EndDayOfTheWeekOfClose=5
EndingCloseTimeOfWeek=1300 ←とりあえずデフォルトでいいでしょう
Lots=0.10000000 ←必ずロットは固定で
Max_Lot=50.00000000
MicroLot=1
LotsOptimized=0←必ずMMなしで
・・・・
・・
……………………………………………………………………………………………
・・!!そんなの大変じゃん!!!
そう、大変なのです。そこで再び私の作ったVBAアプリ
[Pandeeeemic2]パラメータの多通貨setファイルをエクセル管理表から自動生成してみる。viewtopic.php?f=28&t=1892を使います(おぉ)
通貨ペア名のところにA列からB,C,と順に
「Pandeeeemic2_1800-1815」
「Pandeeeemic2_1815-1830」
・・・・・
・・・
と入れてあとは
StartTime=1800 ←開始時間
StopTime=1815 ←終了時間
のところを変えるだけで一気に生成してくれますね^^
このセットファイルをC:\Program Files\BROKERS MT4\tester\に置き、
C:\Program Files\BROKERS MT4\tester\batch\に置いたAutoTest.bat を実行すると順番に実行されて、結果レポートが集まります。
あ、ちなみにパンデミックは自動で夏冬時間を切り替えてくれるので問題ないのですが、ほとんどのEAはサマータイムを考慮する必要があります。そういうEAの場合、仕方がありません・・夏と冬で時間をずらしてそれぞれでバックテストをする必要がありますので念のため。
ところが、そのままではさらに問題が起きるのです。(またですかっ!)
何が問題かといいますと、ECNブローカーの場合、スプレッドが1日の中でかなり上下動するため、起動毎にその時点でのサーバーからスプレッドを読み込んでくるMT4では全く均一な結果になりません。
特に朝と昼ではスプレッドは全然違いますから、読み込んだ時点がたまたま1.0pipsであったり3.5pipsであったりすると困るわけです。
そこで、ツールでスプレッドを固定してしまいます。
ラボには「MySpreadExecution」というスプレッドを固定するツールもあるのですが(^^;、
バックテスト時のスプレッドを自在に変更する。http://d.hatena.ne.jp/fai_fx/20100227/1267196449こちらのSpreadChangerを使ってスプレッド変更してMT4 を起動し、ログインしない状態でバックテストを行うと、 symbols.sel 内の全てのペアが調整済の同一のスプレッドでテストを行うことができます。
えっ?自分のブローカーは変動スプレッドだからその時間帯のスプレッドがわからないって?
そんなときは、スプレッドログからグラフを作るツールを使ってみましょう。(また私の作ったものです^^;)
自分の使っているブローカーで、EAの稼働時間における正しいスプレッドを取得してみたり。http://catherine2010.blog119.fc2.com/blog-entry-26.htmlあとはここで算出した使いたい時間の平均値等でスプレッドを固定してやります。
※バックテスト時にログインしない状態を維持するには、MT4 の設定でツール -> オプション -> サーバ の「プロキシサーバを有効にする」にチェックを入れます。
プロキシサーバのサーバー欄は適当な文字を入れておかないといけません(ポート番号など)。
プロキシサーバを使ってでたらめなID/PASSでログインすると不通にはなりますが、その後のMT4起動ではログインウィンドウが開かなくなりますから、バックテスト専用terminalが出来上がります。
はい。、あとはAutoTest.batを実行することで全自動でバックテストをやってくれます。
こうして全通貨のステートメントを収集してベストな時間帯を絞ることができたら、いよいよ全通貨でそのベストパラメータを入力してバックテストをします。
このとき、パンデミックについては通貨ペア毎に管理しながら入力するのは大変ですので、再び私の作ったVBAアプリ
[Pandeeeemic2]パラメータの多通貨setファイルをエクセル管理表から自動生成してみる。viewtopic.php?f=28&t=1892を使います(照)。
ちなみに私のクアッドコアCPUを積んだノートPCで、25通貨をパンデミック2で18時から24時までを15分単位で全自動で実行した場合、終わるまでに3日間かかりました(汗)。
まあ、バックテスト中も他のことはマルチタスクでPCが出来るので、さほど問題はないのですけど。
下のグラフの並んだ画像がサンプル画像です。
さて、いよいよ大詰めです(大袈裟)。
パンデミックのような複数ペアで稼働させるEAのバックテストを統合したとき、どんな資産曲線になって、どのくらいDDするか?を考えないとリスク設定ができません。
調子に乗って単通貨のMM20%とかにしてしまうと、もしも多通貨でDDを起こしたときに一発退場となってしまいます(汗)。
そこで、このツールを使います。これは複数ペアでステートメントを読み込んでひとつのグラフにします。
無料ですし、結果表示も慣れ親しんだStrategyTesterReportと同じなので見やすいです。
http://www.mqlsoft.com/download/reportmanager先ほどベストパラメータで行った通貨ペア分のステートメントを選ぶと合算してグラフまで生成してくれます。素敵!
この結果をもとに十分安全域のリスクを設定します。パンデミックでの多通貨の場合は、1通貨あたりせいぜい5%程度までではないでしょうか。
それでは、皆さん、快適なバックテストライフをお送りください。 (違 ←