バックテスト/最適化 - ページ 82

 

バックテスト、ビッド/アスクプライスに関する良い記事です。

https://www.mql5.com/en/forum/181204

 

ストラテジーテスターロットサイズリミットMT4

こんにちは。

MT$のストラテジーテスターで、最大ロットサイズの設定を変更するにはどうしたらよいでしょうか?現在、ストラテジーテスターは50ロット以上のポーションを開くことができません。

また、ストラテジーテスターにBalance Limitはありますか?

助けてください。ありがとうございます。

 
lsteixeira:
私が使用したいくつかのまともなデータは、ここから来ました。

Http://www.histdata.com

乾杯

アドバイスありがとうございます!Ducasのtickdataを使用していますが、99%のモデリング品質です。これがどれだけ現実に近いかは分かりませんが、十分に近いことを望んでいます^^。

 

[langtitle=fr]バックテストに関する問題[/langtitle].

[lang=fr]世界中の皆さん、こんにちは。

私のEAのバックテストで問題が発生したため、お伺いします。

Comme vous pourrez voir sur le graphique, il y a une chute brutale et je ne sais pas d ou ca vient j ai unstop loss regler sur 10 pips

ファイル:
graphique.jpg  117 kb
rapport.jpg  97 kb
 

テスターストップアウトの正常終了

targetik:
[lang=fr]Bonjour tout le monde,

私のEAのバックテスト中に問題が発生しましたので、お伺いします。

このグラフからわかるように、il y a une chute brutale et je ne sais pas d ou ca vient j ai un stop loss regler sur 10 pipsです。

Targetikさん、こんにちは。

これは通常の「ストラテジーテスターの 終了」ストップアウトです...

テスターが終了すると、すべてのオープントレードがクローズアウトされ、アクティブなオープントレードは通常損失でクローズされます。

私は、最後のトレードを無視するか、そのトレードを通過するように日付を再設定して、適切にクローズできるようにします...または、最後のクローズしたトレードの日付を設定して、テスト終了時にオープントレードを持たないようにします。

これがお役に立てれば幸いです。

ロバート

 

[lang=fr]Merci beaucoup [/lang].

 

素晴らしいスレッド!

--

 

最適化から最高資本を取得する?

MT4 の最適化結果の各実行によって到達した最高資本に関する情報を取得することは可能ですか?

私が知る限り、MT4はバックテスト中にストラテジーが到達した最高エクイティの情報を結果ウィンドウに表示しません。(最も近いのはドローダウンで、前のピークが何であったかを判断するには、関連する谷の値を知る必要があり、最終残高から推測するしかないようです)。おそらく、ストラテジーテスターは、計算中のある時点で、その正確な最高値の株式数を知っていたはずです。最適化の結果を得るために、そのデータを取得する方法はないでしょうか。

部分的な回避策を考えています。EA に変数を追加して、資本の面で到達した「最高水位」の記録として機能させ、実行の最後(またはいつでも)にジャーナルにそれを印刷すれば、1 つの手動バックテスト中に到達した最高資本を見ることができるかもしれません。問題は、同じストラテジーを最適化の一部として実行する場合、ジャーナル情報は利用できないようです。これは、少数の手動実行には適していますが、多数の最適化には適していません。

他に考えられるのは、EAとして動作するインジケータを使用し、それを通常のターミナルチャートに読み込ませることです。外部変数として「開始時間」を入力することで、損益を集計することができます(ローソク足でポジションを建てない限りは)。しかし、その問題も同じです。最適化の可能性を実行するたびに、異なる外部変数を手動で入力する必要があります。

別の方法として、EAの資本に人工的な上限を設け、所定の資本に達した時点ですべてのポジションを決済し、EAでの取引を終了させることもできます。そうすると、最適化の結果、その値で終了した実行回数のリストが表示されます。しかし、これだけでは、あるランスルーがより高いエクイティに達したかどうかは、異なるエクイティ上限で多数のランスルーを実行しない限り、わかりません。しかし、これは非常に不器用で非効率的な方法だと思います。

(残高と取引数の簡単なグラフを見ることができるようになるだけでも、手始めだと思うのですが、それも最適化から利用できないようです)。

どなたか、より効率的に最適化できる方法をご存じないでしょうか?

 

私自身の疑問に対する答えを見つけたような気がするので、まだ答えを知りたがっている人がいるかもしれないので、ここに書き込んでおこうと思います。

一つの解決策は、グローバル変数を使うことです(グローバル変数 - MQL4 Documentation)。結論から言うと、グローバル変数は最適化の各実行中に設定または更新されます。私はここで、EA内の「グローバル変数」ではなく、クライアント端末全体のグローバル変数を指しています。変数がグローバルであるため、Strategy Testerの外で何か使ってクエリーを行うことができます。EAの中に通常の(double)変数を追加して、毎ティックごとに過去最高のエクイティに更新し、同じEAのdeinit()セクションでその値をグローバル変数に設定することができます。このグローバル変数は、最適化の各パスが完了すると、ターミナルの通常のチャートウィンドウのスクリプトで GlobalVariableGet() を使用して照会することができ、結果の値はコメントとして表示するか、ターミナルジャーナルに印刷で記録することができます。

この方法の唯一の問題は、最適化の各パスの実行後(次の実行が完了する前)に手動でスクリプトを実行する必要があることです - したがって、あなたはまだ座って最適化を監視する必要があります。EAは、最適化の複数の実行をキャプチャするために複数回実行する必要があるため、グローバル変数のクエリにEAを使用することはできないと思われます。最適化の間、スプレッド設定を維持するためにライブデータから切り離されるため、ティックを受信しない可能性が高いです。EAに「偽ティック」を送る様々な方法は、最適化の実行から通常のターミナルチャートには使えないと思います...

この問題は、スプレッドサイズが安定している口座を使用している場合には、スプレッドデータを変更するリスクなしに、受信するライブデータに接続しながら最適化を実行することができる場合、あまり問題になりません。週末に最適化する場合は、まだ問題があります。また、新しいティックを受信する前に次の最適化パスが完了すると、最後のパスのデータが記録されなくなります。

これを回避するには、最適化の各パスで別々のグローバル変数を設定し、最後にF3キーを押してそれらをすべて読み出すことができます。これは、deinit()のサイクル操作で、現在のグローバル変数の数(「n」)を取得し、現在のグローバル変数に「n+1」という名前を付けて、関連する持分値に設定することで実現できます。そうすれば、最後に F3 キーを押してすべてを表示でき、変数名はランスルーのパスの番号と同じになります(最適化の開始時にグローバル変数が存在しない限り、各最適化の前に GlobalVariablesDeleteAll() を実行すれば容易に達成できます)。グローバル変数の最大数は分かりませんが、適度な数の最適化が行われている限り、問題ないと思います。残念ながら、F3キーを押したときのデータはエクスポートできないと思うので、スクリーン・キャップや紙とペンを使ってコピーする必要があります(あるいは、膨大な数のパスを使用している場合は、最適化ごとに別のMT4インストールを行う必要があります)。代わりに、最適化が完了した後、グローバル変数のすべての名前と値をターミナルジャーナルに印刷し、そのジャーナルをエクスポートするスクリプトを作成することもできます。

この方法は、Strategy Testerの最適化結果ウィンドウの限られた情報に頼ることなく、最適化からあらゆるデータを取得するために使用することができます!この方法によって、最適化からすべてのデータを取得することができます。誰かのお役に立てれば幸いです:-)

 

p.s. - PrintもAlertも64文字しか使えないので、ほんの一握り以上の最適化を使っている場合、グローバル変数をPrintするスクリプトは書けないことに今気づきました。(ターミナルジャーナルで各グローバル変数を別々の行にプリントし、それをクリックしてエクセルなどに1つずつコピーしていれば別ですが。ジャーナルで一度に複数のエントリーを選択する方法はないようです)。

これを回避するには、代わりにサイクル操作でグローバル変数の値を順番に巨大な文字列に書き込み(グローバル変数の値を それぞれ新しい行に配置するために˶‾‾‾)、その文字列を SendMail() で自分自身にメールすることができます。Send Mailの文字数には制限がないようです。このメールデータをパソコンのテキスト文書にコピーして、エクセルのDataImport External Dataのボタンを使って、好きな形式でデータを取り込むことが簡単にできます。最適化の結果もテキスト文書にコピーして、同じ方法でエクセルにインポートすれば(最初の画面で「区切り」を選択し、「その他」のボックスにチェックを入れて、その入力ボックスに「=」を入力して、テキストと数字を分離する)、最適化から直接エクスポートしたデータに、メールのデータを並べるだけでいいのです。そうすれば、グローバル変数を使用して最適化から抽出した情報が、最適化からエクスポートされた関連データと同じ行に、任意のパスで表示されることになります。簡単ですね。