無料でロボットをダウンロードする方法を見る
Twitter上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
スクリプトを気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
スクリプト

RepaintTest - measure whether a drawing indicator repaints - MetaTrader 5のためのスクリプト

Yogeswaran Suppiah
Yogeswaran Suppiah
Independent MetaTrader developer based in Malaysia, publishing chart analysis tools for discretionary traders. On MQL5 since 2015.
| Japanese English Русский 中文 Español Deutsch Português 한국어 Français Italiano Türkçe
ビュー:
12
評価:
(2)
パブリッシュ済み:
MQL5フリーランス このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

ほぼすべての指標の説明には「ノンリペイント」という表現が含まれています。しかし、数値が記載されているものはほとんどありません。この表現が誤りであるはずはありません。なぜなら、これには具体的な検証手順が伴わないからです。つまり、検証したことがない開発者も、徹底的に検証した開発者も、同じ文章を書くことになるのです。このスクリプトは、その表現を具体的な数値に置き換えます。

不変条件

バーがクローズして処理された後、そのバー上にインジケーターが描画したオブジェクトは、いかなる場合も変更されてはならない。移動も、色変更も、テキストの変更も、消滅も許されない。これは誤り得る主張であり、だからこそ検証する価値があるのだ。

方法

カスタムシンボルに実際の履歴の「ウォームアップ用スライス」を初期データとして読み込み、テンプレートを通じてインジケーターを適用し、インジケーターが描画したすべてのオブジェクトを記録します。さらにバーを追加し、チャートを強制的に完全再計算させることで、インジケーターはより長い履歴に基づいてすべてのオブジェクトを最初から再構築します。 その後、以前の処理で生成されたオブジェクトのうち、すでにクローズされたバー上に存在するものは、新しい処理で照合され、フィールドごとに比較されます。比較対象は、両方のアンカータイム、両方のアンカー価格、色、およびテキストです。指定したステップ数だけ、この処理を繰り返します。

完全な再構築は、増分ティックよりも厳しいテストとなります。 インジケーターは、前回何を描いたかの記憶を持たずに、異なる配列インデックスを使用して、より長い履歴から同一のマップを再現しなければなりません。これはまさに、ユーザーが十分に遡ってスクロールし、ターミナルが古いバーを取得するように促すことで引き起こされる現象であり、バーの「時間」ではなく「インデックス」をキーとするオブジェクト名が機能しなくなる点でもあります。

重要な点

変更と消失は別々にカウントされ、変更があった場合のみ、その主張は誤りとなります。ほとんどの描画インジケーターは、上限を超えると意図的に古いオブジェクトを削除するため、消失は通常、不具合ではなく、ユーザー自身の「MaxObjects」や「HistoryBars」の設定によるものです。これらの上限を解除して実行してください。

比較対象がない実行は「INCONCLUSIVE」と報告され、「合格」とは決して報告されません。テストハネスが抱えうる最も危険なバグは、空の実行に対して成功と報告してしまうことです。なぜなら、その数値が最終的に引用されてしまうからです。

出力は MQL5\Files にある CSV ファイルで、シンボル、時間枠、ステップごとに 1 行ずつ、比較されたオブジェクト数、変更されたオブジェクト数、消失したオブジェクト数、および最初の問題のあるオブジェクトが記載されています。「marks_compared」列の合計が、公表できる数値となります。また、それを裏付けるファイルも用意されています。

使用方法

1. 「Prefix」には、インジケーターのオブジェクト名のプレフィックスを設定してください。「Exclude」には、設計上変更されるもの(ティックごとに再描画される凡例やカウントダウンタイマーなど)をすべてリストアップしてください。これらはマークではありません。これらをここで明示的に指定する方が、黙ってフィルタリングするよりも誠実な対応と言えます。

2. 描画制限をすべて解除した状態でインジケーターをチャートに追加し、そのチャートをテンプレートとして保存します。テンプレート設定でそのチャートを指定してください。

3. 最初のパスにおけるマーク数が実行間で変化しなくなるまで、`SettleMs` の値を上げていきます。値が短すぎるとエラーは発生しませんが、マークが突然消えてしまう現象が発生します。

4. 意図的に一度だけ何かを壊してみてください。1つのオブジェクトを1バー分ずらし、スクリプトがそれを報告し、フィールド名を特定することを確認してください。これまで故障を見たことがないという事実だけでは、証拠にはなりません。

これだけではわからないこと

そのインジケーターが正確かどうか、あるいはそのシグナルに価値があるかどうか。それは一つの限定的な質問に答えるだけであり、その答えに価値があるのは、その一点に限られる。

テストのように見えて実はテストではない、このテストの前に試されて却下された2つのテストがある。1つは「ストラテジーテスター」で、ここではiCustom駆動のインジケーターのオブジェクトが、MT4上のEAからはまったく列挙できない。 もう一つは、ライブチャート上でインジケーター自身のHistoryBars入力を変更する方法ですが、これによりループの開始位置は変わるものの、rates_totalやすべての配列インデックスは変更されないため、このクラスが検出しようとしているバグは決して発生しません。

無料で、出典の明記も不要です。もしあなたのコードで何かが見つかったら、その内容をお聞かせいただければ幸いです。

RepaintTestの結果:不変条件チェック 199,984 件、変更 0 件、消滅 0 件

テストの仕組み:シードを指定し、バーを追加し、完全な再構築を強制し、比較する

MetaQuotes Ltdによって英語から翻訳されました。
元のコード: https://www.mql5.com/en/code/76632

Sniper Gold Hybrid Recovery EA Sniper Gold Hybrid Recovery EA

XAUUSD 15分足用バスケット回復EA。適応型ATR間隔、LL/LH構造の検証、動的RSIゲート、暴落検知、ニュースフィルター、スマートトレードトリミング機能を搭載。

Volume Profile Levels Indicator Volume Profile Levels Indicator

直近のルックバックウィンドウにわたる水平方向の出来高ヒストグラムを生成し、標準的なTPO/出来高バリューエリア拡張アルゴリズムを用いてコントロールポイント(POC)とバリューエリアをマークします。これは、単にPOCに固定オフセットを加減しただけのものではありません。新しいバーが生成されるたびに更新され、価格の横にサイドバーとして表示されます。

Support Resistance zig zag based Support Resistance zig zag based

「サポート・レジスタンス・ジグザグ」は、チャート上にサポート、レジスタンス、および転換エリア(フリップゾーン)を自動的かつ動的に表示するように設計されたプライスアクション指標です。この指標は、明確な価格構造の可視化と、重要な反転エリア(SBRおよびRBS)の強調表示に純粋に焦点を当てています。また、市場のバイアスをリアルタイムで監視するためのインタラクティブなダッシュボードも備えています。

Accelerator Oscillator (AC) Accelerator Oscillator (AC)

アクセルレーション/デセレレーションインジケーター(AC)は現在の市場を動かす力の加速と減速を測ります。