EAラボラトリー::FX自動売買システムのWin-Win型研究開発サイト

engineeeerが提供する、スクリプトEA SpreadLoggerを使ってスプレッドを調べるとこのようなグラフを作ることができます。

Spread_FXCM_NY_EURGBP_2009.png

調査対象は、2009.05.07 15:00 - 24:00(UTC-4) FXCM-NY EURGBP です。
いわゆる、アジア早朝時間帯におけるユロポンのスプレッドチェックです。
ちょっと古いですが、勘弁してください。
ゴールデンウィーク前はこのブローカーもスプレッドは5くらいありました。ボストンテクノロジーへの移管が発表された時期に急にスプレッドが3くらいになりました。(当然寄り付きがひどいですがねw) でも現在、FXCM-UK & BT(ボストンテクノロジー)にサーバー変更してユロポンはさらにおかしなことになってます。この辺りはまた近いうち書きましょう。


しかし、こう見ると便利だと思いませんか?ブローカー毎にスプレッドの平均・付き方のクセが違いますので、EAのパラメータ設定の参考となります。しかもこの元データはTick毎に記録されています。皆さん活用してくださいね。

使用上、いくつか注意があります。
このスクリプトEAを走らせっぱなしにしておくと、どんどんファイルが溜まって、いつの間にかHDDがいっぱいに・・・なんてことに注意してください。
もう一つ、EXCELなどの表計算で集計するとき、表計算ソフトの取り扱い限界行に注意してください。engineeeerもEXCEL 2003を使用していまして、65535行までしか取り扱いできません。当然データを分けて扱うことになります。

Strategy Tester Report(ストラテジーテスターレポート)日本語訳すると、運用試験報告。

今回はバックテスト結果であるこのストラテジーテスターレポートの見方と、それを利用した効率の良いEAのOptimize(オプティマイズ)最適化について書こうと思います。間違った解釈をしている方が多いですのできちんと抑えておきましょう。また、ここを頭に入れておくことで使えるEAと使えないEAの区別ができるようになっていただければ幸いです。ネット上で安全に使えるEAというのはなかなかお目にかかれませんよ。

Strategy_setsumei.jpg

 

これは今開発検証中の、Monkeyシリーズのポン円Verのあるテスト結果です。パラメータはすべて削除してあります。注文ロットは固定で0.1ロットです。
まずは各項目の説明です。

  1. Bars in test ・・・ テストをしたBarの数
  2. Tick modeled ・・・ テストで使用したティック数
  3. Modelling quality ・・・ テストで利用したティックの割合
  4. Mismatched charts errors ・・・ 試験時間足と測定に使用に使用した時間足データとの相違数
  5. Initial deposit ・・・ 初期準備額
  6. Total net profit ・・・ 総純損益(純利益-純損失)
  7. Gross profit ・・・ 純利益
  8. Gross loss ・・・ 純損失
  9. Profit factor ・・・ プロフィットファクター(総利益/総損失)
  10. Expected payoff ・・・ 1トレード当たりの期待損益(総純損益/総トレード数)
  11. Absolute drawdown ・・・ 初期投資額からのドローダウン
  12. Maximal drawdown ・・・ 最大ドローダウン(最大金額)
  13. Relative drawdown ・・・ 相対ドローダウン(最大比率)
  14. Total trades ・・・ 総トレード数
  15. Short positions (won %) ・・・ 売りトレード数(勝率)
  16. Long positions (won %) ・・・ 買いトレード数(勝率)
  17. Profit trades (% of total) ・・・ 勝ちトレード数(率)
  18. Loss trades (% of total) ・・・ 負けトレード数(率)
  19. Largest profit trade ・・・ 1トレード当たりの最大利益
  20. Largest loss trade ・・・ 1トレード当たりの最大損失
  21. Average profit trade ・・・ 勝ちトレードの平均利益
  22. Average loss trade ・・・ 負けトレードの平均損失
  23. Maximum consecutive wins ・・・ 最大連続勝ちトレード数(利益)
  24. Maximal consecutive losses ・・・ 最大連続負けトレード数(損失)
  25. Maximal consecutive profit ・・・ 最大連続利益(勝ちトレード数)
  26. Maximal consecutive loss ・・・ 最大連続損失(負けトレード数)
  27. Average consecutive wins ・・・ 平均連続勝ちトレード数
  28. Average consecutive loss ・・・ 平均連続負けトレード数

 

のようになります。とても便利ですよね。

さてここで、このテスト結果のいくつかのパラメータに注目して、EAの最適化をしていくことを考えます。
あくまで、engineeeerのやり方でもありますがまあ見て下さい。基本的に重要であるのが、

9.  Profit factor ・・・ プロフィットファクター(総利益/総損失)
12.  Maximal drawdown ・・・ 最大ドローダウン(最大金額)
13.  Relative drawdown ・・・ 相対ドローダウン(最大比率)
14.  Total trades ・・・ 総トレード数

になります。目標の目安ですが、

 

Profit factor は、一般的に2.0以上あれば優秀であると言われています。engineeeerもそう思います。というか、3.0やそれ以上のPFをたたき出すEAにはろくなものなありませんし、ろくな結末がありません。この辺は後で説明します。

 


Maximal drawdownRelative drawdownですが、これが一番大事です。かつ、皆さんとらえ違えているところだと思います。説明します、
前者はレポート画像のの場所にあたります。後者はの場所にあたります。どちらも山の頂上から谷の最下点以下までの金額差になります。
ここで今、最下点以下と書きました。そうです、その通りなんです。グラフを見ると青と緑の折れ線グラフがあるのが分かりますね?青はBalance(口座残高)、緑はEquity(純資産)を表します。こう書くとわかりにくいですが、

Balance(青)は、オーダーを出しても減りません、そしてオーダーが決済されて始めて増減されます。
Equity(緑)は、オーダー時にブローカーに預ける証拠金分がすぐ引かれます、そして当然オーダーが決済されるとロスカットで無い限りもちろん証拠金は口座に戻ってきますのでその分元に戻ります。

金額差と書いたのもこの辺を分かってもらうためにあえてあいまいな言葉を使いました。
ということは・・・、私たちが最悪の事態を想定して考えなければならない、余剰証拠金の推移がグラフに出ていないのです!

テスターレポートの金額差(ドローダウン)は、余剰証拠金の高低の金額差です。

そして、なぜ Maximal drawdownRelative drawdown が違うドローダウンの場所になっているかです。ここも捉え違えている人が多いです。金額と割合を入れ替えただけとか言っている人もいます。違いますよ^^; これは、金額と割合のどちらに注目しているかで取り扱うポイントが違うからです。
 

 

 

Relative drawdown は、テスト期間中に起きたドローダウンの中で、上記の割合が最大になったときのドローダウンの割合を算出しています。その括弧内の金額は、そのドローダウン額です。

グラフの横軸は決済したオーダーの順番です。その最中に他にいくつのオーダーがあって、それらがどれだけ損失を抱えているかはグラフからは分かりません。しかし、グラフには出ていなくても、数値としては Maximal drawdownRelative drawdown として算出されているのです。EA視点で言いますと、よくあるナンピンをフル活用してマネーマネジメントしているEA(ナンピンは使い方を間違わなければ効果バツグンです。数学的に考えての話です。)は、ストラテジーのグラフで見るときれいな右肩上がりの一直線を出します。でも実際の口座内の動きは恐ろしいものです。そんなときこのRelative drawdown をチェックしてください。

もう一度話を戻します。

上の画像での、
Maximal drawdown) 4684.64(12.90%) は、
最大ドローダウン額=4684.64$
最大ドローダウン額/ドローダウンが起きる前の口座残高×100=最大ドローダウン率(%) ですので、
4,684.64/36,315.04×100=12.90% となります。

Relative drawdown) 27.86%(2876.39)は、
ドローダウン額=2876.39$
ドローダウン額/ドローダウンが起きる前の口座残高×100=ドローダウン率(%) ですので、
2876.39/10324.44×100=27.86% となります。(初期投資額より324.44$多いのは、一瞬プラス損益が出たからでしょう。)

このデータから推測しなければならないことは、このテストの注文ロットは固定で0.1ロットですので、グラフのどの位置の事象もどこでも起き得ると考えなければなりません。ですので、
最大ドローダウンがもし、EAスタート直後に起きたらどうなるかを考えなければなりません。テストの期間を①の直前からに設定してテストしてみると分かります。Relative drawdown 50% になります。スタートしていきなり口座資金が半分になります。

また、Maximal drawdownRelative drawdown の両方が小さい数値を出しいてる場合は、初期投資額を見てみてください。グラフの縦軸の最下段は0ではありません。ストラテジーの結果で自動調節されています。
どうでしょう? 50000$とかになっていませんか?500万円ですよ?大金スタートですねぇ。それならドローダウンの値が小さくなるのは当然です。

ここまで来て初めて、投資計画を考えます。そのままのEAのパラメータで取引を行うなら、テストから算出される最大ドローダウンの十倍くらいの資金を用意しましょう。でなければ、パラメータを変更して、最大ドローダウンが小さくなるようにしましょう。小さくならなければそのEAはあなたに適していません。破産する前にしかも1銭も市場にお金をさらさずに判明してよかったですね。(有料EAならEA購入代金分は損しちゃいますけどね)

 

次に、総トレード数ですね。

これはですね、2つの点から考えます。
投資心理面 と 統計学的見解 です。

PFもDDもバッチリだけど、取引は1回/月程度・・・ ってどうですか?
engineeeerはイヤです。両方の見方からです。月一回の取引のために、PCを24時間フル稼働ですか?なら、ここぞとばかしの指標発表時にスキャルを一回やったほうがいいのではないでしょうか?投資という枠から外れるような気がします。でももっと納得がいかないのは、統計学的見解からのことです。
1回/月ってことは、過去5年のバックテストを行っても、60回の取引データしかないことになります。たった60回のバックテストによる統計を信じる気ですか・・・。

というわけで、engineeeerの作るEAも最低でも月20回は取引できるようにしています。なら平均1日1回は取引を見れるでしょう?

 

これらをTotalで見て、もう一度PF(プロフィットファクター)を考えます。すると、不思議ですね~。やっぱり年間ベースでPF3.0を超えたりすることはなかなかないです。engineeeerがまだ未熟で作れていないだけかもしれません。作れている人がいたら是非教えてください。w(教えてくれるわけはないでしょうがねw)

そして、仮に偶然ではなく作れたりしたとします。そのようなものは、engineeeerは攻略法的EAだと思っていますので、誰かに知られれば、すぐさま連鎖的に広がっていきます。そしてなんらかの対策が打たれ終焉を迎えます。最近のユロポンのようにですね。
そう、出る杭は打たれるんです。私も本職でそんな経験をいっぱいしてきました。
この研究所発のEAが将来出たとしたら、努力した私たち研究員だけで使っていきたいですね。そうできるように、アルゴリズムがばれたりしないようengineeeerは頑張ります。

 

Maximal drawdown は、テスト期間中に起きたドローダウンで最大の金額差になったところを指し、その金額を算出してます。その括弧内の割合は、そのドローダウンが起きる直前の余剰証拠金の最大額を100%としたときのドローダウンの割合です。

 

MetaTraderの新バージョン、MetaTrader5が今年中にリリースされるようです。フォーラムに情報がありました。

forum.mql4.com/22700

MT5_client_terminal.png

トレード画面を見ると、さらに使い勝手が良くなってそうですね。楽しみですね。

しかし、今現在のMetaTrader4でも、かなりの頻度でバージョンアップがされているところを見ると、この新バージョンの安定稼動は、もう少し先のことになるでしょうかね。ブローカーさんの対応にも注目ですね。

プログラムの観点からかき集めた情報では、MetaTrader4に比べてかなりプログラムしやすくなっていそうです。今回はちゃんとしたデバッガも付いているよう。オブジェクト指向がフルで使用できそうです。engineeeerの対応が急がれますねw
でも大丈夫です。以前からこの情報は得ていましたので、すぐ移行できるようにプログラムを整えてあります。非常に楽しみです。

前回に続き、バックテストの豆知識というかお得情報を書きます。

MetaTraderはバックテスト時、スタートを押した瞬間のサーバーのスプレッドに準じてAskデータが作られ、固定スプレッドとしてテストが行われます。
これがとても肝心なところです。知らない方、また困っている方が多数いらっしゃることと思います。
そうなんです。MetaTraderはAsk(買い)のデータが保存されていないのです。そしてだからこそ当然、変動スプレッド制を採用しているブローカーが多い中、スプレッドが固定されてバックテストが行われます。

さらに言うと、週末市場がお休みのときに、バックテストをしようとすると金曜の深夜市場がクローズしたときのスプレッドでしかバックテストができません。

短期トレードでは、スプレッドの影響が大ですよね。それなのに、スプレッドの状況がこのようにリアルと全く違うことはバックテスト結果の信頼性とは相反する要素です。

そこで、
engineeeerは、この問題を打開すべくMetaTraderのスクリプトを同志には無料配布しています。
このスクリプトは指定通貨ペアのスプレッドを自在に変化させることができるすぐれものです。サーバーオフライン中でも関係ありません。よく他の方が実践されている、『スプレッドの数値がバックテストしたい値になった瞬間にマウスをクリック』なんてする必要はありません。

最近変動スプレッド制を採用しているブローカーが増えてますよね。普段はスプレッド1でも急な値動きがあったり、逆に取引が薄い時間帯になるとスプレッドが大きくなります。そういった事象に耐えうるEAのパラメータ設定はこのスクリプトが大変役に立ちます。是非ご活用下さい。

バックテスト方法は、ODLさんのHPで詳しく書かれていますのでそちらを参考にしてください。
www.odls-manual.jp/mt4/07/01.php

重要かつもっと掘り下げた説明を何点かしていきたいと思います。バックテストの基本ロジックを理解して、効率のいいバックテストを行えるようになりましょう。

今回はテストモデルに関してお話いたします。
テストモデルとは以下の画像の、”モデル”の部分のことですね。

tester.jpg

 モデルは現時点で3種類あります。

  • Open prices only
  • Control points
  • Every tick

ですね。どんなモデル(テストロジック)なのかきちんと理解する必要があります。詳しく説明しますね。

Open prices only

選択したタイムフレーム(時間枠)の4本値のみを使用します。3つの中で一番速いバックテストですが、バーの内部の細かい値動きは全く考慮されませんので、EAによっては検証にならない可能性があります。バーの始値でエントリーするようなEAだとこのモデルでも問題ありません。

Control points

選択したタイムフレームの一つ細かいタイムフレーム(例えば4Hなら1H)までを使用します。
バーの内部の値動きがある程度は考慮されるので、Open prices onlyよりは信頼度の高いテストが行えます。

Every tick

1分足のデータを使用し、さらに仮想でTickデータを作り出しバックテストを行います。
当然、3つの中で一番遅いバックテストですが、信頼度は高いです。

 

先に書きましたとおり、MetaTraderにはTickデータのバックアップはありませんので、リアルさながらの・・・とまでのバックテストはできませんが、超最短スキャルピングEAみたいなものでなければ、Every tickでのテスト結果はなかなか信頼・期待のもてる重要参考になるのではないかと思います。とはいえ、非常に時間のかかるテストモデルですので、Control pointsで一度大まかなパラメータの枠決めをしてから、次にEvery tickでテストするといいでしょう。

前回は短期間(3ヶ月ほど)ではありますが、信頼性の高いブローカーそのもののデータ取得方法と整理について書きました。今回は、長期のデータを取得する方法について書きます。
ちょうど、前回の記事『バックテスト方法 ① (全ブローカー対応)』の方法②と読み替えてください。

②ヒストリーデータの取得

長期のヒストリーデータの取得を行います。ここではまず、MetaTraderの開発元であるMetaquotes社のヒストリーデータの取得方法についてご紹介いたします。Metaquotes社のヒストリーデータは実際の使用ブローカーのデータとは違いがありますので、特にスキャルピングEAなど短期売買のバックテストは信頼性が欠けます。ですが質より量的な考えが該当する目的であったり、長期足のスイングトレードEAなどでは重宝するデータになることでしょう。

  1. ”ツール>History Center”を選択します。以下のダイヤログが表示されます。
  2. 通貨ペアの一覧から、取得したい通貨ペアの1分足(M1)を選択します。(
  3. ”Download”を押し、次に出てくる注意書きダイヤログ(「ご使用の実際のブローカーのデータとは違いますよ~」という内容)を”OK”で承諾してダウンロードを開始します。ダウンロードには数分~数十分かかります。

history_center.jpg

以上の作業でMetaquotes社のヒストリーデータを取得することができます。

 

次に、各ブローカーで用意されているヒストリーデータの取得方法をご紹介いたします。ブローカーによって準備のあるなしがありますのでご自身でご確認下さい。

今回はFXDDのヒストリーデータの取得方法をご紹介いたします。FXDDは以下のサイトに1分足のヒストリーデータが公開されています。
www.fxdd.com/jp/mt1m-data.html

ここからヒストリーデータをダウンロードします。ダウンロードしたファイルを解凍すると、”USDJPY.hst”(今回はドル円での説明)というファイルが確認できると思います。
このファイルを上の画面にある”インポート”(③)で選択するとMetaTraderにFXDDのヒストリーデータを取得することができます

バックテストをできる限り正確に行うためには、事前に設定とヒストリーデータの収集整理を行う必要があります。今回はその設定と、だれでも簡単にでき全ブローカーに対応したヒストリーデータの収集整理方法を紹介いたします。

 

①MetaTraderの設定

以下の設定をして、バックテストで扱うデータ量を最大化します。

  1. MetaTraderを 起動して、”ツール>オプション”(Ctrl+O)を選択してください。
  2. オプションダイアログが表示されたら、”チャート”タブを選択します。
  3. その中の、”ヒストリー内バーの最大数”9999999999と入力し、”OK”でこの画面を閉じてください。
history_setting.jpg

こうすることで最大化の設定ができます。(再びこの画面を見てみると数字が変わっているのが分かります。)

 

②ヒストリーデータの取得

次にヒストリーデータの取得を行います。今回は、全ブローカーに対応していてもっとも信頼性のある取得方法の紹介です。

  1. データを収集したい通貨ペア(今回はドル円)の1分足を表示させます。(
  2. チャートのズームを最小にします。(
  3. チャートの自動スクロール機能をOFFにします。(

history_chart_ready.jpg

あとはページスクロールが止まるまで、ひたすら”カーソルの左””ページアップ”を押し続けます。

この作業で得られるデータはおおよそ3ヶ月分くらいでしょう。今後は①で設定したデータ量になるまでずっとヒストリーデータが蓄積されていきます。言い方を変えると、3ヶ月間ほどの間MetaTraderを一度も起動せずに放置しておくと、その後データを取得しようとしたときに穴が開くことになります。注意してください。

たった3ヶ月ほどのデータですが、このデータは使用しているブローカーのサーバーデータそのものですので、信頼性が高いです。ヒストリーデータは各社違いますから。

 

③1分足のデータから他の時間足のデータを作る

②で1分足のデータを取得しました。今度はそのデータを利用して他の時間足のデータを作ります。他の時間足で②のようにしてデータを取得する方法もありますが、バックテスト時Mismatched charts errorsが多く発生する原因になりますのでお勧めしません。

  1. まず、ここで一度再起動します。
  2. 次に、”ファイル>オフラインチャート”を選択して下の画面を出します。
  3. この中から先ほど取得した、1分足のデータを選択します。(今回はドル円ですので、USDJPY,M1になりますね)
  4. choose_offlinechart.jpg
    すると、チャートが表示されます。
  5.  次は、以下の画面左下にある”ナビゲーター”内の”Scripts”にある?の”period_converter”)を選択します。すると以下のダイヤログが表示されます。
  6. ”パラメータの入力”タブにある項目、”ExtPeriodMultiplier”の値”value”)をこれから作り上げたい時間足の数値に変更します。たとえば、5分足なら"5"、15分足なら"15"、1時間足なら"60"というように、すべて分で入力します。
  7. 入力後”OK”でダイヤログを閉じると、指定の時間足データが作成されるのです。
period_converter.jpg

同様にして、すべての時間足のデータを作り上げます。(再度"period_converter"を選択すると、エラーのようなダイヤログが出ますが、そのまま”はい”を押して進んでください。)

このブログは初心者さんも見ている可能性がありますので、ちょっと詳しく説明しましょうかね。

まずスプレッドとは何か?これはまぁ買値(Ask)と売値(Bid)の差になるのですが、この差額分が業者(ブローカー)利益になります。要は早い話取引手数料になっているわけです。よくTVで「ドル円 99.60-99.63」とか言うのはこの差額の3銭がスプレッドということになりますね。

では今回は質問形式で、
「スプレッド0.5銭キャンペーン♪」

なんてのをやっているブローカーがあるとします。いったいこのブローカーはどうやって儲けているのでしょうか?

「キャンペーンだから儲けてないんだろう?」

とか思いますか? いいえ、しっかり儲けています。不思議に思いますか?

からくりはこんな感じです。ご存知の通り値付けはブローカーがそれぞれ行っています。ではたとえば、

A社:スプレッド 5銭
B社:スプレッド 1銭

の2社があるとします。ドル円のレートを観察します。
ある時、

A社:100.00 - 100.05 
B社:100.02 - 100.03

だったとします。(まあこんな時はレンジ相場のときなのですが)
この後、明らかな上昇トレンドが発生しました。すると、

A社:100.05 - 100.10 
B社:100.09 - 100.10

今度は、下降トレンドが発生しました。すると、

A社:99.90 - 99.95 
B社:99.90 - 99.91

わかりましたか?

トレンド方向に寄り付くことがわかりますね?

トレードしている側に立ってみてみましょうか?
B社を利用してる場合、トレンドの読みが当たっているときは、スプレッド1銭の恩恵をモロに受けますね。
しかし、エントリー後トレンドの読みが外れて逆方向に行ってしまった場合、一瞬にしてまるでスプレッドが4銭もあったかのようにビハインドな状態になってしまいますでもそのときにスプレッドをみてもやはり1銭ですね
また、A社を利用している場合は、トレンドに値付けが振り回されることがありませんので、落ち着いて見ていることができますが、もちろん最初から大きなスプレッド分はビハインドな状態から始まります。

結局答えは、スプレッドが小さいからといって有利とは言えませんよってことです。この例でいけば、トレンドを読んだものがどちらのブローカーを使っても勝者になるのです。そして、トレンドを読み間違ったものはどちらのブローカーを使用していても同じだけ損失を被ることになると思います。

以外と、「おお!」と思った方多いのではないでしょうか? はい、ブローカーさんはこんなことをコンピューターにやらせてうまく儲けているのですね。

そしてもう少し言うと、この値付けの寄り付きがブローカーによってクセがあります。あるブローカーはあるブローカーよりも1秒速く寄り付くとかですね。engineeeerは、あらゆるブローカーと契約してこのクセを探して、一種のアービトラージ的な取引をしていたことがあります。まだ使えると思います。でもEAを使用するようになってからは止めました。今思えばよくあんな疲れる取引を毎日していたものだと思います。ほんと疲れるんですよ。

もっと言いたいですが、辞めておきます。最近の人気EAの使用に繋がるヒントですね。

<<前のページへ 5657585960616263646566

 カテゴリ

open all | close all
 ※各最新10エントリー表示

 最近の記事

 最近のコメント

 フラッシュタグクラウド

 お勧めサービス

安心国内WindowsVPS
engineeeerも利用しています♪
レンタルサーバーなら使えるねっと

最近話題の激安中古PCショップ
engineeeerも良く行きますし買います♪
激安PCショップ img

 ランキング

クリック協力よろしくお願いします。
FXランキング ブログランキング
ブログランキング 為替ランキング
FXランキング
人気ブログランキング ページビューランキング
fxランキング ranking
相互リンクとランキングプラス くる天 人気ブログランキング
外為ランキング FX

 相互リンクサイト様(50音順)

リンクして頂ける際はDLしてご使用下さい。
相互リンク用画像
TOPへ
TOPへ