条件スキャナー(Condition Scanner / cs)について
このコードのアイデアは、あなたのトレード条件を考え、それをテストするためのコードを書き、そのコードをこのチャンクの中に埋め込むというものです。いくつかの簡単な修正を加えることで、インディケーターがいくつか完成します。
一つは、現在のチャート上で条件が発生した履歴を示すインディケーターです。もう一つは、興味のあるすべての通貨ペアと時間枠において、現在条件が発生しているかどうかをパネルで表示するものです。これにより、手動でペアや時間枠をスキャンする手間が省けます。
インストール方法
次の4つのフォルダ(Indicators、Include、Templates、Profiles)の内容を、インストール先の対応するフォルダにコピーしてください。これには危険なものは含まれていません。すべてインディケーター関連です。
MetaQuotesプログラムを一度終了し、再度起動します。
スキャナーのデモ
この例は、Russ Hornが提唱したPower Pro(セットアップID = "PP")に基づいています。これはバンドブレイクアウト戦略で、上限は高値のEMA、下限は安値のEMAです。私の戦略に対する推奨はありませんが、開発可能な例としてご紹介します。
システム上で、プロファイルをcsppに変更します。初回表示には数秒かかる場合がありますが、その後はあまりリソースを使用しません。
以下のような画面が表示されるはずです:
上記の例には、次のものが含まれています:
- 4つのプロットを持つチャート上のインディケーター
- EMA of RSIを表示する別ウィンドウインディケーター
- 過去にロングまたはショートトレードの条件が発生した場所を示す別ウィンドウインディケーター
- 興味のある通貨ペアと時間枠で、現在発生した条件を示すパネルインディケーター
共通のコード
Utils.mqhには、すべてのインディケーター、エキスパートアドバイザーなどで使用できるユーティリティ関数が含まれています。
cs_Chart.mqhには、現在チャートのインディケーターに関するほとんどすべてのコードが含まれています。
cs_Panel.mqhには、パネル表示インディケーターに関するほとんどすべてのコードが含まれています。
PP(Power Pro)戦略の特定のコード
- csPP_0.mq4は関連する「チャートウィンドウ」インディケーターを表示します。
- csPP_1.mq4は関連する「別ウィンドウ」インディケーターを表示します。
- csPP_Chart.mq4は、現在のチャートで過去に発生したことを示すインディケーターです。
- csPP_Panel.mq4は、興味のあるすべてのペアと時間枠の現在の状況を示すインディケーターです。
- csPP_GetBarFlag.mqhは、チャートとパネルインディケーターの両方に「インクルード」されるコードです。これは特定のバーで興味のある条件があるかどうかを判断します。
MAX(移動平均クロスオーバー)戦略の特定のコード
- csMAX_0.mq4は、2つの移動平均を表示するカスタムインディケーターです。
- csMAX_1は必要ありません。PPとは異なり、別ウィンドウ表示が不要だからです。
- csMAX_Chart.mq4、csMAX_Panel.mq4、csMAX_GetBarFlag.mqhは、PP戦略と同様の機能を提供します。
csXXXXで始まるコード
これらは、追加のスキャンを開発する際に使用できるテンプレートです。
新しい条件のコーディング手順
まず戦略の識別子を決定します(例:PBはピンバーの略)。
スキャナーのデモで示したように、ウィンドウを設定し、既存のインディケーターを削除します。
新しいスキャンがチャート上のインディケーターに依存する場合、csXXXX_0.mq4をテンプレートとして使用して作成します。必ず「名前を付けて保存」でcsPB_0.mq4として保存します。
別ウィンドウインディケーターが必要な場合も同様に構築してください。こちらも「名前を付けて保存」でcsPB_1.mq4として保存します。
カスタムインディケーターを使用することで、他の場所でiCustom関数を使用して参照できるようにしています。これにより、戦略の基本パラメータ(例:移動平均の方法)を変更する場合でも、カスタムインディケーターを変更するだけで済みます。
csXXXX_Chart.mq4を取得し、すべての「XXXX」を戦略識別子「PB」に置き換え、csPB_Chart.mq4として保存します。まだコンパイルされませんが、「インクルード」コードを記述する必要があります。
「インクルード」コードを提供します。
テストしたい条件が簡単な場合は、csXXXX_GetBarFlag.mqhを使用して、自分のコードを書いて保存します。複雑な場合は、先ほど作成したcsPB_Chart.mq4に戻り、"#include
これでcsPB_Chart.mq4ファイルがコンパイルされ、左側のチャートに適用できます。
この時点で、左側のチャートのテンプレートをcsPB-CHART.tplとして保存します。これには、チャート上のカスタムインディケーター、別ウィンドウカスタムインディケーター、現在のチャートに適用される結果のプロットが含まれています。
次に、csXXXX_Panel.mq4をロードし、すべての「XXXX」を「PB」に置き換え、その後「名前を付けて保存」でcsPB_Panel.mq4として保存します。このファイルはコンパイルされ、右側のチャートに適用されます。初回の実行時は少し遅くなることがありますが、その後はあまりリソースを使用しません。
右側のチャートのテンプレートとしてcsPB_panel.tplを保存します。
通常はcsPBをプロファイルとして保存します。
注意:カスタムインディケーターを構築し、それをiCustom関数で参照する際は、名前が正確であることに注意してください。存在しないインディケーターを参照すると、警告はありません。
注意:パネルインディケーターが初めて読み込まれると、一貫性のない結果が表示されるバグがあるかもしれません。パネルウィンドウの時間軸を変更すると(再計算を強制するため)、すべてが正しく表示されます。この問題については、どなたかアドバイスをいただけると幸いです。
注意:自分で開発した...GetBarFlag.mqhコードでは、呼び出し元プログラムに表示する整数を返すことができます。現状のコードでは、ゼロは「結果なし」を意味し、テストされたバーを示す灰色のウィンドウが表示されます。負の整数を返すと赤い表示になり、正の整数を返すと緑の表示になります。
ソフトウェアの主な特徴
このコードはインディケーターとして書かれているため、パネルが表示されているときに特定のペアと時間枠を確認したい場合は、Market Watchウィンドウからペアを選択し、現在のチャートスペースにドラッグ&ドロップして時間枠を変更すればOKです。テンプレートが残りの処理を行います。
コンピュータのオーバーロードを減らすために、2つの方法を採用しました。
まず、時系列配列を扱う際には、主に200バーまでしか遡りません。
次に、パネル表示ソフトウェアは、ユーザーの条件を毎ティックでテストしません。タイマーメカニズムを使用して、bar[0]が90%形成されている場合にのみテストを適用します。そうでない場合はbar[1]に適用します。bar[1]がフォーカスされている場合(bar[0]が90%未満の場合)、一度だけテストされ、bar[0]に切り替える時間が計算されます。その後、切り替え時間が到達するまでの間、次に来るティックがあっても何も起こりません。これが正しくコーディングされているかは100%確信がありませんが、かなりうまく機能しているようです。
先述のタイマーメカニズムに加えて、パネルの上部ラインには最新の条件テストイベントが発生した日時が表示されます。また、ここで提供された例では、ニュートラルなウィンドウがbar[0]がフォーカスされている場合はゼロを、bar[1]がフォーカスされている場合は「1」を表示します。