EAラボラトリーフォーラム::FXシステムトレード情報満載のコミュニティサイト http://forum.ea-labo.com/ | |
【全自動】EAの稼働時間等のパラメータを詳細に分けて簡単にバックテストする方法【完璧】 http://forum.ea-labo.com/viewtopic.php?f=24&t=1898 |
ページ 1 / 1 |
作成者: | Catherine [ 2012年1月10日(火) 14:44 ] |
記事の件名: | 【全自動】EAの稼働時間等のパラメータを詳細に分けて簡単にバックテストする方法【完璧】 |
皆さんこんにちは。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%程度までではないでしょうか。 それでは、皆さん、快適なバックテストライフをお送りください。 (違 ← |
作成者: | 獅子太郎 [ 2012年1月10日(火) 19:34 ] |
記事の件名: | Re: 【全自動】EAの稼働時間等のパラメータを詳細に分けて簡単にバックテストする方法【完璧】 |
Catherineさん 素晴らしい力作の書き込みですね。 私もバックテストには色々と苦労してきた方ですが、この作業・・・ 私も実行して調査していますが、setファイルは手作業で作りました。(笑) ReportManagerはまだ試した経験はありませんでした。 今度試してみますね。 いつもありがとうございます。 似たような機能がある国産のソフトも一緒にご紹介しておきます。 損益合算ソフト https://www.systemtraderscafe.com/tool_ ... ence02.php 会員登録をすれば無料で使えるソフトです。 自動売買をする前に有料会員だった事があります。(笑) MT4用の計算ソフトではありませんので、一度、CSVに日付と損益を残して 不要な部分を削除の後に書き出す必要がありますが、日本語です。 英語が苦手な方はこちらも便利だと思います。(笑) EAだけでなくエクセルのシステムや225先物などの損益もCSVで読み込めば 全て合算してデータを計算してくれるようになっています。 |
作成者: | Catherine [ 2012年1月10日(火) 21:16 ] |
記事の件名: | Re: 【全自動】EAの稼働時間等のパラメータを詳細に分けて簡単にバックテストする方法【完璧】 |
獅子太郎さん、早速こんな記事に反応いただいてありがとうございます ご紹介のソフトも色々な用途に使えそうですね! ReportManagerはMT4専用であることと、バックテストで出した多通貨でのステートメントを1個のフォルダに入れておけばそのフォルダを指定してやるだけで別EAのステートメントを混ぜてもすぐに出力します。 csvを作らなくてもいいので視覚的にすぐに使えるようになっていますから、是非使ってみてください。 |
作成者: | KEISHO_MAN [ 2012年1月11日(水) 07:29 ] |
記事の件名: | Re: 【全自動】EAの稼働時間等のパラメータを詳細に分けて簡単にバックテストする方法【完璧】 |
Catherineさん力説ありがとうございます。 BTはBT専用のサーバー設定ファイル?を削除した完全オフラインMT4を用意しておくと楽ですよ ヒストリー蓄積用のMT4も用意して週末、月末のみ起動し蓄積させておいて、BTするときBT用MT4にインポートするって感じで。 やはり環境づくりは大切な作業ですね |
作成者: | レフィン [ 2012年1月11日(水) 19:36 ] |
記事の件名: | Re: 【全自動】EAの稼働時間等のパラメータを詳細に分けて簡単にバックテストする方法【完璧】 |
メタトレーダー全使用者に向けたバックテスト完全TIPSですね 1分足データは重要ですよね! 2008年頃からコツコツためてのがPCクラッシュ時に無くなってしまった時はしばらく自分がフリーズしてしまいました スプレッド調整はMySpreadExecution([url]viewtopic.php?f=22&t=22[/url])も。 複数ペアのステートメントグラフは見やすくて分かりやすいですね! 情報の宝庫過ぎる書き込みにこんな数行のレスで恐縮。。。 【バックテスト完全版】勉強させて頂きます!! |
作成者: | Catherine [ 2012年1月12日(木) 10:52 ] |
記事の件名: | Re: 【全自動】EAの稼働時間等のパラメータを詳細に分けて簡単にバックテストする方法【完璧】 |
KEISHO_MANさん> >BTはBT専用のサーバー設定ファイル?を削除した完全オフラインMT4を用意しておくと楽ですよ >ヒストリー蓄積用のMT4も用意して週末、月末のみ起動し蓄積させておいて、BTするときBT用MT4にインポートするって感じで。 これもTipsですね!(^-^*)。私もブローカー毎に作っています。 どうしてもいつも使っているMT4ではデータを軽くする必要がありますから、BT用と同じMT4では弊害が大きすぎますしね。 おっしゃるとおり、環境作りですね。 レフィン さん> >メタトレーダー全使用者に向けたバックテスト完全TIPSですね 正直、自分の覚えです(爆)。 「いや、ここは間違っているよ」とか「もっとこうしたほうがいいよ」という事がありましたらどんどんアドバイスをください(汗)。 しかしながら、こうやってみるといかにfaiさんの小技集+ツールが世界中のMT4トレーダーにとって役に立っているかということがわかります。 私もfaiさんがいらっしゃらなかったらMQLやMT4の使い方は3年は遅れていたと思うのです。 よろしくお願いいたします。 |
作成者: | berry [ 2012年1月15日(日) 10:20 ] |
記事の件名: | Re: 【全自動】EAの稼働時間等のパラメータを詳細に分けて簡単にバックテストする方法【完璧】 |
いやぁー!こうやって まとめて書かれていると とてもありがたいですねぇー! 改めて、複読・感心します。 わたしは、Period_Converter_All もありますが 同じ機能の Period_Converter_Auto を使いますね! また、極最近 こんなよさそうな物も 「簡易的にヒストリカルデータの欠落をチェックするScript」 http://gamaushi.blog81.fc2.com/blog-entry-773.html も使えるかも知れません! |
作成者: | Catherine [ 2012年1月15日(日) 10:57 ] |
記事の件名: | Re: 【全自動】EAの稼働時間等のパラメータを詳細に分けて簡単にバックテストする方法【完璧】 |
berry さんが書きました: いやぁー!こうやって まとめて書かれていると とてもありがたいですねぇー! 改めて、複読・感心します。 わたしは、Period_Converter_All もありますが 同じ機能の Period_Converter_Auto を使いますね! また、極最近 こんなよさそうな物も 「簡易的にヒストリカルデータの欠落をチェックするScript」 http://gamaushi.blog81.fc2.com/blog-entry-773.html も使えるかも知れません! berryさん、そうですね!Period_Converter_Auto のほうがもっと簡単便利ですね!早速修正させていただきました。 「簡易的にヒストリカルデータの欠落をチェックするScript」のご紹介ありがとうございます。 常日頃からこういったツールで自分のPCに貯めているヒストリカルデータをチェックできればいいのですけど、ブローカーが増えてきますとなかなか大変で億劫になってきます・・ |
作成者: | berry [ 2012年1月15日(日) 16:39 ] |
記事の件名: | Re: 【全自動】EAの稼働時間等のパラメータを詳細に分けて簡単にバックテストする方法【完璧】 |
Catherine さんが書きました: berryさん、そうですね!Period_Converter_Auto のほうがもっと簡単便利ですね!早速修正させていただきました。 「簡易的にヒストリカルデータの欠落をチェックするScript」のご紹介ありがとうございます。 常日頃からこういったツールで自分のPCに貯めているヒストリカルデータをチェックできればいいのですけど、ブローカーが増えてきますとなかなか大変で億劫になってきます・・ Catherine さん こんにちは そんなぁ、書き換えまでしなくてもー! まぁ こうやって、データを取り入れてBTしても 一度、MT4を終了して 再度立ち上げた場合 結果に反映されていない事もあるんですよねぇ! 困ったもので、 |
ページ 1 / 1 | All times are UTC + 9 hours |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |