English Русский 中文 Español Deutsch Português
ランダムサンドボックス

ランダムサンドボックス

MetaTrader 4 | 1 12月 2015, 08:18
629 0
Clerin
Clerin

本稿の目的は、MetaTraderが提供するエキスパートアドバイザー・パフォーマンスの計測、プロフィットファクターや相対ドローダウンなどに対するより良い理解を、ユーザーの皆様が得られるようにすることです。これは、EAと関連する測定をまねる、インタラクティブな"サンドボックス"を使用することで可能になります。


はじめに

エキスパートアドバイザーのパフォーマンスが実際にどの程度なのか、どうやって知ることができるでしょうか?

MetaTraderは初期設定状態でメトリックスのレンジを提供しており、トレードやバックテスト、最適化の際のEAパフォーマンスを教えてくれます。このデータはしばしば無視されるか単純に誤解されがちです。初心者トレーダーはこれらの数字を比較検討するたけの十分大きな結果を持っていないからです。トレーダーが十分なデータを生成し、適切なプロフィットファクターや許容ドローダウンとは何かを完全に理解するだけの経験を得るまで、数カ月あるいは数年を費やすかもしれません。

アドバイスを求めればすぐに見つけられるだけあるにも関わらず、人間の性か、軽視してしまい、テスト結果から自分で解釈した独自の結論に辿り着いてしまいます。残念なこと、にこれでは多くの費用がかかってしまう失敗をすることになります。本稿の目的は、ユーザーが素早く簡単かつ安全に、MetaTraderが提供するパフォーマンス・メトリックスの詳細な意味を探求することができるサンドボックスを提供することです。むやみに他人のアドバイスを聞いたり、さまざまなEAからテストデータを大量に生成するのに数カ月、数年を費やす必要はありません。

本稿にシンプルなエクセルファイルを添付しています(ページ下のZIPフォルダにあります)。即座に1000ものトレードをランダムにおこない、MetaTraderが提供するパフォーマンスメトリクスをグラフと共に表示します。これは作成されテストされた新たなエキスパートアドバイザー戦略の結果をシュミレートします。様々なキー入力パラメータを変更することができ、ランダム化したバックテストデータのシュミレートの膨大な結果を即座に生成することができます。多くのトレーダーが興味を持ち、これは使える思いそうな、とても早く簡単なインタラクティブな経験させてくれます。

データ結果の列は、自動的に新しい出力をワークシートが変わる度に生成するよう設定しています。新たなデータを生成するときは空白セルの箇所を選んで"delete"(削除)ボタンを押してください(選択したセルは変更されませんが、エクセルワークシートが更新され、新しい乱数が生成されます。)これらランダムなトレードはスタンダード・メトリックスと一緒に3つのグラフに表示されます。エクセルファイル内に3つのワークシートがあります。最初のワークシートは入力とグラフ、出力があります。2番目のワークシートはシュミレートしたトレード計算を含んでいます。3番目のシートにはトレードの予想勝率を決定するための計算が含まれています。

アクティビティ:エクセルファイルを開き、最初のワークシートの空白セルを選択したら"delete"(削除)キーを押して結果一式をランダムに生成しましょう。"delete"キーを押すたびに、新たな結果一式がランダムに生成されます。

最初のワークシートには3つのチャートと関連するメトリックスがあります:

  1. 価値/負け 合計(win = 1, loss = -1)。
  2. 一定のロットサイズを使用した場合の利益/損失。
  3. 1回のトレードごとに資金に応じて設定したパーセンテージに基づいてロットサイズを調整した場合の利益/損失。

入力項目

  • 初期投資金額
  • ストップロス(小数単位)
  • リスク:リワード率(この数値でストップロス値を掛けて利益確定までのスプレッド分を足します。)
  • 固定ロットサイズ(2番目のグラフの計算に使います。)
  • % トレードに投入する金額(3番目のグラフの計算に使います。)
  • スプレッド(小数単位)
  • £(ユーロ) 1標準ロット・ピップス単位(3番目のグラフの計算に使います。1 ロット  = 100,000)
  • 実行パフォーマンス(ランダムチャンスのみから予測される数値の上に、この数値パーセント分だけ人為的に勝率を増やしたもの)

出力項目

  • 予想勝率パーセント(設定したストップロス:テイクプロフィット率とスプレッドを踏まえた勝率)
  • 実行結果勝率パーセント(ランダム状態での実利益)
  • 最大連勝数
  • 最大連敗数
  • プロフィットファクター(総利益/総損失)
  • 相対ドローダウン(最大%ドローダウン)
  • ROI %(投資リターンパーセント)

仮定事項

  • 1度に1つのポジションをオープンする。
  • どのトレードもストップロスかテイクプロフィットのどちらかの結果のみで、トレーリングストップは使用しません。
  • すべてのトレードは同じストップロスです。
  • テイクプロフィットはストップロスの2倍に設定しています。
  • 勝率はストップロス:テイクプロフィットの割合とスプレッドに基づいています。ランダムに抽出しています。
  • 固定スプレッド
アクティビティ:様々な入力項目を変更し、どのようにグラフの形が変わっていくか、出力結果、特にプロフィットファクターと相対ドローダウンはどうか、よく調べてください。


ランダム生成データ

エクセルワークシートにおける結果の計算は、マーケットが完全にランダムに動き、トレードはそのマーケットでランダムに行われるという仮定のもとにおこなわれています(これは単純化されたものであり、マーケットの真実について言及する必要はないでしょう)。

時々トレーダーは、トレード結果は勝ちか負けのどちらかしかないから、ストップロスもテイクプロフィットも同じサイズで良いと思っています。ランダム・チャンスは50%の勝者と50%の敗者を生むものだと考えています。システムトレードの方向を単純に反転すれば負け戦略が勝ち戦略になるとすら考えています。現実はそんなに甘くはありません。

実際にマーケットがランダムなものであろうとなかろうとも、トレーダーは自分のトレードに、トレーダーに対するオッズを自動的に歪めてしまうスプレッドを払わなければなりません。そのため、勝利するか負けるかの確率は、ストップロスとテイクプロフィットがオープン値からどれだけ離れて置かれているか、これら2つの距離はスプレッドによってどれだけ歪められているか、と言ったことに基づくのです。計算はファイルにある2番目のワークシートにあります。

例えば、ストップロスは10ピップスで、テイクプロフィットも10ピップス、スプレッドは2ピップスとします。マーケットが好ましい方向へ10ピップス動き、ゲインはテイクプロフィットして10ピップスです。それからスプレッド分の2ピップスが支払われるので、結果、総利益は8ピップスになります。逆に、マーケットがトレードの意図に反して10ピップス動き、ロスはストップロスして10ピップスだとします。それからまたスプレッド分の2ピップスを支払うと、結果、総損失は12ピップスになってしまいます。両方向へマーケットが動かしたピップス比は10:10です。しかし、総利益と総損失のピップス比は8:12になります。

ストップロスで失う資金と、テイクプロフィットで得られる資金とが一致するためには、テイクプロフィットをスプレッド分をカバーできるようにほんの少しストップロスより大きくし、ストップロスは同じ分だけ小さくしてクローズするだけで良いのです。その結果ストップロスは8ピップス(10ピップスのロス)に設定し、テイクプロフィットは12ピップス(10ピップスのゲイン)に設定します。レンジ内でどこかのポイントにプライス・”ランディング”できる確率を考えると、テイクプロフィットになる確率は、1-(12/(8+12))=0.4=40%です。ストップロスになる確率は、その逆の60%になります。

3番目のワークシートの計算結果である表とチャートにはいくつかの例があります。ストップロス・テイクプロフィット比が大きいほど、予想パーセント勝率へのスプレッドの影響は小さくなります。

アクティビティ:スプレッドとストップロス、比率を変更してみて、予想パーセント勝率への影響を調べてください。


予想パーセント勝率はストップロス・テイクプロフィット率と関連している

予想パーセント勝率は、ストップロスとテイクプロフィットの比率で決定され、スプレッドは両者にいくらか影響を与えます。どのマーケットにおいても真実であるこの影響は変えることができるでしょう。しかし、根本のコンセプトは同じはずです。ここで、重要なポイントを2つ述べます。

  • ストップロス・テイクプロフィット比率やスプレッド、それらがEA稼働中にどのトレードでも同じ影響を残すかどうかを知らないでパーセント勝率を語ることは無意味です。
  • 高いパーセント勝率が必ずしも利益を得る戦略であることを意味しません。また反対に、低いパーセント勝率だからといって失敗する戦略だとも言えません。
アクティビティ:このことを確かめるためにリスク・リワード比を10に変更してみましょう。パーセント勝率は下がって、1番目のグラフはとても急な下り坂ですが、2番目、3番目のグラフに見えるランダムな結果はまだ利益がある状態で終わっています。では反対に比を0.1にするとどうでしょうか。勝率は1番目のグラフに見えるようにとても急な上り坂になるでしょうが、ランダムな結果は損失がある状態のまま終わっています。

画像1シナリオ1:リスクリワード比=10


画像2シナリオ2:リスクリワード比=0.1


増大するリスクの影響

良いトレードとは、どの1回のトレードでも口座資金のn%以上のリスクを絶対にとらないものだ、とよく言われています。これは普通、3~10%くらいです。なぜそうなのか、一般に説明はされないものです。確かにそうすることで、口座資金を吹き飛ばす大きなロス・トレードを防ぐことができます。おそらくもっと重要なことは、”複利計算でのロットサイズ”に驚くほど大きなインパクトを与える、ということです。

トレーダーが、”リスク”n%という言葉を使うときは、大概、ストップロスが発動した時に損失した口座資金に対するパーセントだと考えています。通常ストップロスまでの距離はトレードがオープンされる前に決めておくものですが、ロットサイズは口座資金のn%のロスになるようにピップス単位での距離を決めるように計算します。利益が増え新たなポジションをオープンするのに必要な資金が増加し、そのことでロットサイズも大きくなり、得られる期待利益も増加することになります。このようなやり方での利益は、”複利計算された”ものです(損失分もまた複利計算されることを知っておくことも当然需要です)。

3番目のチャートはこの方法の結果を示しています。チャートを見ると、システムの利益においてリスクの変更の影響が見て取れます。初期値はリスクを1%にします。

アクティビティ: リスクを1%から20%へ増やして、3番目のグラフでパフォーマンスの変化を見てください。そのパフォーマンス(特に相対ドローダウンとプロフィットファクター)と一定ロットサイズのグラフとを比べて見てください。

1%にリスクをセットすると、パフォーマンスは固定ロットサイズを使用した場合と、とてもよく似ています。リスクを増やしていくと潜在最大利益も増えていきます。しかし、ランダムなパフォーマンスのもとでは、大きなリスクほど、そのトレード戦略は期間の終わりを迎える前にクラッシュしてしまうことになるでしょう。これはまた、相対ドローダウンが非常に大きくなる原因にもなります。

画像3この1番目の画像は1%のリスクで設定したトレードと全く同じものです。2番目の画像は10%のリスクで設定したものです。


1%以上の%リスクを増やすと利益が上がっていますが、あるポイントを越えると、リスクを増やすほど大きな利益を得るのではなく、むしろリスクを増やすほど利益が減少していることに気が付きます。

リスク・リワード比率を変更したり、初期投資資金を増やしたりしても、この問題は解決しないでしょう。これを根本から解決するにはただ1つ、勝率を上げることだけです(ありがちな連続するたくさんの損失を減らすのです)。このようなことがあるので、入力ボックスは、"フォース・ベター・パフォーマンス"と呼ばれています。この入力値を増やすことによって、EAが予想よりもチャンスをしっかり掴むかどうかテストすることができます。

初期値は15%の改善に設定しています(もし15%でなければ、ほとんどのランダム化したトレードは、一貫して、これまで説明した予想勝率におけるスプレッドの影響のために純利益を得ることに失敗することになるからです)。しかし、トレード戦略がほとんど機能しなくなるであろうパーセント・リスクはまだ残っています。

アクティビティ:もしランダムに新しい結果を生成するワークシートを停止し、別の方法で設定した入力値の変更がどのように同じデータに影響するのみたいのならば、”形式を選択して貼り付け”を使い、”値”を選択して列Cと列Dの出力結果をコピーしてください(逆にする場合は、単純に列Cと列Dをコピーして入れ替えてください)。”フォース・ベター・パフォーマンス”の値を上昇させてみて3番目のグラフで影響を観察してみます。

この方法が上手くいけば、実際に使用されているEAの予想パフォーマンスの、どのパーセント・リスクでもよさそうなグラフになるパフォーマンスの向上を、より簡単に比較することができるようになるでしょう。


ランダムに(バックテスト中に)トレードをシュミレートするEA

ランダム(偶然性)の利用法はより幅広くあります。実際にバックテストにおいてランダムにトレードをおこなうEAは簡単に作成することができます。実際のEAのパフォーマンスは、このランダム・パフォーマンスと同じ期間で比べてみることができます。科学的実験が、”コントロール”テストと並んで行われるようなものと全く同じ方法です。これをまだ試験していないトレーダーは、単純にランダムなトレードをおこなうだけで得られる結果に驚くかもしれません。

この目的のために、とても簡単なEAが本稿に添付されています。名前を"Random EA"と呼びます(一番下の添付ファイルを参照してください)。このEAはバックテストと最適化の時だけに、ランダムにトレードをおこなうようにできています(このEAは実際のトレードやデモ口座でのトレード用にも作られていません)。

入力パラメータは、セットされるバーにおける、トレードが行われる確率(%)を決めます(0~100%)。1度に1つだけトレードをオープンします。1本のバーに1つだけのトレードです。トレードはバーの始値に置かれます。

ストップロスとテイクプロフィットの距離(小数値)を選択できます。これらの距離は口座が失う実際のロスと同じとみなします(そのため、スプレッドの影響も含まれているものとします)。300ポイントのテイクプロフィットは、ここでは300ポイントのストップロスとディポジット通貨単位で同じです。トレード1つ1つに使用されるランダムなストップロスとテイクプロフィットを選択することも可能です。トレード1つにつき100から1000までの値でランダム化することができます。ロングかショート・トレードをオープンする機会は同じになるように設計されています。

ロットサイズは変更することができます。固定ロットサイズか、トレードごと事前に決めておいた口座資金の割合パーセントのリスクをとる可変ロットサイズかのどちらかです。

ランダム化はあらゆるバックテストで機能するでしょう。最適化が必要な場合は、"OptimizationNumber"を選択し、最適化値を必要な数だけ入れてください。

この実際にランダムなトレードをおこなうことから、学び取れる2つの大事なことがあります。

  1. ストップロス・テイクプロフィット比率は、与えられたヒストリー期間において、コンスタントに利益がでるランダムなトレードを作ることができます。
    ストップロス・テイクピロフィット比率を変更すること、つまり、テイクプロフィットをストップロスよりはるかに大きくするか小さくするかすると、パフォーマンス特性に多大な影響を及ぼすことになる、ということを知るでしょう。大事なことは、ランダム化したトレードの大半が利益をだすようなヒストリー期間から、このような好ましいストップロス・テイクプロフィット比率を選択することは可能だということです。例えば、テストされているヒストリー期間が主に強気相場であるならば、テイクプロフィットをストップロスよりはるかに大きく設定することによって、ユーザーは好きなように結果を歪めることができるのです。このようなケースではトレードがいつ置かれたかは問題ではありません。トレードは確かにランダムに置かれてはいます。純利益はとて良いものになっているでしょう。

    このシチュエーションでは、バックテスト中のシステムの有用性に大きな影響を及ぼすのがストップロス・テイクプロフィット比率となり、トレードを選択するようなことは重要でなくなります。これが、同じテスト期間でランダムにトレードをおこない、同じストップロス・テイクプロフィット比率を使用しているEAのパフォーマンスに対して、より良いEAのパフォーマンスをテストすることが有用である理由です。

    トレーダーは、EA作成のために(バックテストの結果から)利益を上げそうなインディケーターの組み合わせを作成できた時は、自画自賛したいものです。事実それは、トレードシステムにおいて最もよく”機能するもの”を生み出すストップロス・テイクプロフィットです。大きなトレンドが発生しているヒストリー期間でテスト下から生まれたのです。フラットなマーケットでこのようなシステムをテストすると、良いパフォーマンスは消えてしまいます。通貨ペアによっては、トレンドは1年、またはそれ以上長く発生することもあるので注意してください。

    ランダムにトレードするEAと同じヒストリー期間で、あるEA(同じストップロス・テイクプロフィット比率とロットサイズ・ルール)のパフォーマンスをテストすると、パフォーマンスは同じようにみえます。それはあなたのトレード戦略にとって何か大切なことを伝えようとしているのかもしれません。

  2. ランダムなトレードは多くのトレードにとって有効である
    いくつかバックテストをおこなうと、ランダムにトレードをおこなっていても、あるトレード設定で長い期間ずっと利益を出し続けているものを見つけるかもしれません。このことは、良いトレード戦略かどうか判別するのに、根拠となるトレード数が少ししかない、といことを意味していることが考えられます。ランダムにトレードするEAは、例えば300回ものトレードでコンスタントに利益を出すようにみえることもあります。しかし、次のたった50回のトレードで失敗することもあるのです。ユーザーはこのことを、トレード戦略のパフォーマンスを調べるのに有効に使ってください。
アクティビティ:Randam EAを使用し、数値を色々変えてバックテストをしてみていください。ストップロスやテイクプロフィット、ロットサイズの値を変更してみて、その結果がどう影響するかみましょう。ストップロスとテイクプロフィットの設定を変えて、テスト期間でコンスタントに利益をだすランダム・トレードをおこなうのに最適な比率を見つけてください。それから、同じ期間で数値を色々変えてテストをおこない、EAがコンスタントに利益を生み出すような最大トレード数を、非常に大きなドローダウンが生まれる前までのものを計測してください。


おわりに

本稿はトレードのアドバイスを提供するものではりません。単にトレード探求のためのサンドボックスを提供する目的で書かれました。ユーザーは自分自身で良いトレード戦略を描かなければいけません。


注意

  • エクセル2003バージョンで書かれています。
  • たまにランダムナンバー・ジェネレータはナンバーを使い果たしランダムトレードを停止します。このようなことが発生したら、エクセルファイルを一回閉じて、再度開いてみてください。
  • 計算は小数第4位または第5位の値をもつ通貨ペアでシュミレートするよう設計されています(そのためドルストレート、クロス円のものには対応していません)。
  • 結果のランダム性はエクセルファイルのランダムナンバー・ジェネレータと予想勝率を予測する雑な計算のクオリティにもとづいており、そのため、現実のトレード結果を完全に反映することはありません。しかし、本稿の目的は十分に達成されたと考えています。

MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/1360

添付されたファイル |
Random_EA.mq4 (8.13 KB)
MQL4を使ってRSSニュースフィードを読むには MQL4を使ってRSSニュースフィードを読むには
本稿は、HTMLタグ分析関数を使って、MQL4でRSSマークアップ言語を読む方法について書かれています。ニュース・インディケーターか、MQL4言語のRSSリーダーに使用することができるワークピースの作成にチャレンジします。
合成バー - 値の視覚情報を表示する新次元 合成バー - 値の視覚情報を表示する新次元
バーや日本製のローソク足を使って値情報を表示する古典的な方法の主な欠点は、それらが期間にたよっている、ということです。これらの方法がつくられた頃では大変良いものであったかもしれませんが、マーケットの値動きが、ときに急な動きをする今日では、このやり方でチャートに表示された値は新たな値動きに素早く反応するのには役立ちません。ここで紹介するプライスチャート表示方法はこの欠点がなく非常に分かり易いレイアウトで表示されます。
非標準タイムフレームでエキスパートアドバイザーをテストするには 非標準タイムフレームでエキスパートアドバイザーをテストするには
これは簡単なことではありません。”超”簡単なことです。非標準タイムフレームでエキスパートアドバイザーをテストすることは可能です!必要なことは、標準タイムフレームのデータを非標準タイムフレームのデータに置き換えることだけです。加えて、非標準タイムフレームのデータをいくつか使ってエキスパートアドバイザーをテストすることもできます。
EX5 ライブラリ使用による開発プロジェクトの促進 EX5 ライブラリ使用による開発プロジェクトの促進
.ex5 ファイルにクラス/関数の実装詳細を非表示にすることでノウハウアルゴリズムを他の開発者と共有し、共通のプロジェクトを設定し、ウェブ上でそれらを進めていくことができるようになります。そして MetaQuotes チームが ex5 ライブラリクラスの直接継承機能を実現することに全力を傾ける一方で、われわれはそれをいますぐ実装していこうとしているのです。