記事「高度なICT取引システムの開発:インジケーターへのオーダーブロックの実装」についてのディスカッション

 

新しい記事「高度なICT取引システムの開発:インジケーターへのオーダーブロックの実装」はパブリッシュされました:

この記事では、オーダーブロックのミティゲーションを検出し、描画し、アラートを発するインジケーターの作り方を学びます。また、チャート上でこれらのブロックを正確に特定する方法や、正確なアラートの設定方法、価格の動きをより理解しやすくするために矩形で位置を可視化する方法についても詳しく解説します。このインジケーターは、スマートマネーコンセプトやインナーサークルトレーダーの手法を用いるトレーダーにとって重要なツールとなるでしょう。

オーダーブロックとは、チャート上で未決注文が蓄積されていると考えられるゾーンを指します。

この現象は通常、金融機関などの大口参加者が大規模なポジションを持ちたいと考えているにもかかわらず、市場に十分な流動性が存在せず、一度にすべての注文を約定させると価格に大きな影響を与えてしまう場合に発生します。需給の基本法則に従えば、たとえば買い注文の一部を執行するだけで価格は上昇し始め、さらに注文を執行するには、それに応じる売り手(=流動性)を積極的に市場から探し出す必要があります。

そのため、機関投資家は価格を大きく動かさないように、注文を複数の小さなロットに分割して執行します。こうすることで、ポジションを完成させる前に価格が意図せず大きく動いてしまうことを防ぎます。

このような理論から、チャート上でこうしたゾーンは「供給と需要のバランスが大きく崩れている領域(買いまたは売り)」として特定できます。以下では、こうしたゾーンを識別する3つの方法と、それをコードで実装する方法について解説していきます。


作者: Niquel Mendoza

 

こんにちは、メンドーサ

ご苦労様です。

OnCalculate関数を 使用しているので、質問があります:

int OnCalculate(const int rates_total、

const int prev_calculated、

const datetime &time[],// オープン時間の時系列

const double &open[],// オープン価格の時系列

const double &high[],//高値の 時系列

const double &low[],// 安値の時系列

const double &close[],// 終値の時系列

const long &tick_volume[],//ティックボリュームの時系列

const long &volume[],// バー 価格の時系列

const int &spread[])// 棒グラフの時系列


なぜ新しい配列を作成して並べ替えなければならないのか?

 
Ahmed Fouad Abdellatief OnCalculate関数を 使用しているので、質問です:

int OnCalculate(const int rates_total、

const int prev_calculated、

const datetime &time[],// オープン時間の時系列

const double &open[],// オープン価格の時系列

const double &high[],//高値の 時系列

const double &low[],// 安値の時系列

const double &close[],// 終値の時系列

const long &tick_volume[],//ティックボリュームの時系列

const long &volume[],// バー 価格の時系列

const int &spread[])// バー価格の時系列


なぜ新しい配列を作って並べ替える必要があるのか?

こんにちは、アーメド。その通りです。OnCalculate関数がすでにすべてのデータを用意してくれているので、新しい配列を作る必要はありません。当時は習慣でそうしていたのですが、すでにあるデータを直接扱うのが一番です。 ところで、最新のコードをお望みでしたら、ここに置いておきます。 この新しいコードでは、デフォルトですでにある配列が使用され、順序ブロックを検出するロジックは同じです。
ファイル:
 
Niquel Mendoza #:
datetime  mitigados_alcsitas(double price, const double &lowArray[], const  datetime &Time[], datetime start, datetime end)
 {
  int startIndex = iBarShift(_Symbol, PERIOD_CURRENT, start);
  int endIndex = iBarShift(_Symbol, PERIOD_CURRENT, end);

  NormalizeDouble(price, _Digits);
  for(int i = startIndex - 2 ; i >= endIndex + 1 ; i--)
   {
    if(price > lowArray[i])
     {
      return Time[i]; //もし緩和がなされたのなら、その時点から時間を戻す必要がある。
      Print("el orderblock tuvo mitigaciones", TimeToString(end));
     }
   }

  return 0; //軽減策が見つからない場合は0を返す
 }

このように、4つの機能が隣接している。

 
trader6_1 #:

このように、4つの機能が隣接している。

こんにちは。NormalizeDoubleが参照で動くと思っていたのは間違いでした。実際には丸めた値を返すので、変数にその値を代入するには、明示的に代入する必要があります。そのコードを書いたときにそのように覚えたので、それが定着してしまったのだと思います。本当に申し訳ない。NormalizeDoubleは、強気注文ブロックが緩和されたかどうかのチェックには大きな影響はないと思いますが、念のため使っています(私のテストに基づく)。ご指摘ありがとうございます。価格 = NormalizeDouble(価格, _Digits)」を直接代入するか、正規化は審査に大きな影響を与えないようなので、その行を削除するか、選択することができます。

 
本当にありがとう。次のパートに進んでください。
 
Niquel Mendoza #:
アハメド、コメントありがとう。おっしゃる通りです。OnCalculate関数がすでにすべてのデータを用意してくれているので、新しい配列を作る必要はありません。当時は習慣でそうしていましたが、すでにあるデータを直接扱うのが一番です。 ところで、最新のコードが必要でしたら、ここに置いておきます。 この新しいコードでは、すでにデフォルトで用意されている配列が使用され、オーダーブロックを検出するロジックは同じです。
Niquel Mendoza#:
Ahmedさん、こんにちは。おっしゃるとおりです。OnCalculate関数がすでにすべてのデータを用意してくれているので、新しい配列を作る必要はありません。当時は習慣でそうしていましたが、すでにあるデータを直接扱うのが一番です。 ところで、最新のコードが必要でしたら、ここに置いておきます。 この新しいコードでは、すでにデフォルトで用意されている配列が使用され、オーダーブロックを検出するロジックは同じです。

このロジックをEAに組み込む場合、OnCalculate関数がありません。 また、マルチ通貨やマルチタイムフレームバージョンを作成する場合、複数の配列やマルチディメン配列が必要になり、作業の90%はすでに完了しています。

私の疑問は、なぜほとんどの開発者がデータを時系列にするのかということです。 私はMQ4のEAをMQ5に変換したのですが、時系列が利用できることを知らなかったので、すべての配列を時系列ではなくゼロベースとして保持しました。データとサポートする配列の間に1対1の対応があり、時系列のためにリセット、リサイズ、リセットを繰り返す必要がなく、リサイズのみで、最終的に最も重要なことは、1つのバー番号システムのみであるため、生活が非常に楽になることがわかりました。 時系列を主張するMetaquotes関数については、呼び出し時に逆インディキシングを行います。


こんにちは、私はちょうどあなたのソース、バージョン1をダウンロードし、コンパイルし、H4 EURUSDチャートに適用したところ、何も表示されませんでした。 私はプロパティパネルに行き、何も変更せず、閉じたところ、pngが表示されました。 緑のバーだけで、赤はなく、それらが開始されると、それらは終了しません。 何か提案はありますか?上記のディスカッションからPart2をダウンロードしたところ、概ね同じ問題がありましたが、より新しいものも3つありました。 スタート・ストップ・グリーン・レッドの問題は明らかでした。 さらに、バンドの数が正確に一致しなかったため、異なる基準があったようです。 さらに、グリーンの色をclrLimeに変更しようとしたところ、変更されましたが、明らかにLimeではありませんでした。

また、アニメーションはどのように作成されているのでしょうか。 ストラテジーテスターを使用されているのでしょうか。 ビジュアルモードでEAをテストするときや、インジケーターをテストするときに、ストラテジーテスターを画面に正しく表示させることができないのでお聞きしました。
ファイル:
EURUSDH4_1.png  72 kb
EURUSDH4.png  63 kb
 

こんにちは、ニケル、

あなたのパート2を少し修正したものを添付します。

STDLIB.EX5にあるErrorDescription(errornumber)を追加して、あなたの様々なエラーメッセージを拡大しました。 どういうわけか、インポートを直接インジケーターに入れることができなかったので、私の回避策は、インクルードファイルBlockOrder Common.mqhにインクルードすることでした。 インジケーターをGoogle翻訳にかけて、テキストを英語に変換できますか?

また、プログラムにバージョン番号2.01を追加しました。defineを使って、RectangleCreateの接頭辞としてバージョン番号を追加し、バージョン1と2を一緒に実行できるようにしました。

提案として、出来高の移動平均を 計算し、画面の下に表示することができます。 小数の調整が必要になると思いますが。


次のアップデートを楽しみにしています。


ケープコッダ

ファイル:
 
CapeCoddah #:

EAにロジックを組み込む場合、OnCalculate関数がありません。 また、複数の通貨や複数の時間枠のバージョンを作りたい場合、複数の配列または複数のdemen配列が必要になり、作業の90%はすでに終わっています。

私の疑問は、なぜほとんどの開発者がデータを時系列にするのかということです。 私はMQ4のEAをMQ5に変換したのですが、時系列が利用できることを知らなかったので、すべての配列を時系列ではなくゼロベースとして保持しました。データとサポートする配列の間に1対1の対応があり、時系列のためにリセット、サイズ変更、そして再びリセットする必要がなく、サイズ変更のみで、最終的に最も重要なことは、1つのバー番号システムのみであるため、生活が非常に楽になることがわかりました。 時系列を主張するMetaquotes関数については、呼び出し時に逆インディキシングを行います。

こんにちは、 CapeCoddah。私の場合、価格データやインジケータを扱うのに、主に利便性と習慣から、時系列形式の配列を使用することが多いです。しかし、このような使い方が常に最良の理由であるとは限りません。インデックスの管理が簡単になり、常に再初期化やサイズ変更をする必要がなくなるからです。私の場合、オーダー・ブロック・インジケータをプログラミングする際、時系列を使用することにしました。

 
CapeCoddah #:

こんにちは、私はちょうどあなたのソース、バージョン1をダウンロードし、コンパイルし、H4 EURUSDチャートに適用したところ、何も表示されませんでした。 私はプロパティパネルに行き、何も変更せず、閉じたところ、pngが表示されました。 緑のバーだけで、赤はなく、それらが開始すると、それらは終了しません。 何か提案はありますか?上記のディスカッションからPart2をダウンロードしたところ、概ね同じ問題がありましたが、より新しいものも3つありました。 スタート・ストップ・グリーン・レッドの問題は明らかでした。 さらに、バンドの数が正確に一致しなかったため、異なる基準があったようです。 さらに、グリーンの色をclrLimeに変更しようとしたところ、変更されましたが、明らかにLimeではありませんでした。

ストラテジーテスターを使用していますか? ビジュアルモードでEAをテストするときや、インジケーターをテストするときに、ストラテジーテスターを画面に正しく表示させることができないので質問しました。

最初の問題については、インジケーターがデータを正しく読み込んでいないことが原因かもしれません。これは通常、チャートを変更したり、新しいチャートを開いたりしたときに起こります。しかし、すでに使用していたチャートであれば、注文ブロックが取得されない理由をさらに調査する価値があるでしょう。その場合、問題を特定するために、コードにデバッグ(印刷)メッセージを含めることが有用であろう。

強気の注文ブロックのみが描画される2つ目の問題については、H4時間枠のEURUSDが現在ローソク足の高値600-700にあることが原因である可能性があります。そのような状況では、すべての弱気注文ブロックが緩和されている可能性があり、それがチャートに描かれていない理由です。

基準の変更については、コード内のブール変数をいくつか減らしました。しかし、必要であれば、これらの条件を再び導入することは問題ないでしょう。

色については、コメントに掲載した最新版では、注文ブロックの長方形の色に透明度を適用しています。そのためか、以前のバージョンと視覚的に色が一致していません。最後に、アニメーションについてですが、何を指しているのかよく理解できませんでした。この文脈でのアニメーションの意味をもう少し詳しく説明していただけますか?

 
Niquel Mendoza #:

CapeCoddahさん、こんにちは 。私の場合、価格データや指標を扱うのに、主に利便性と習慣から、時系列形式の配列を使うことが多いです。しかし、このような使い方が常に最良の理由であるとは限りません。インデックスの管理が簡単になり、常に再初期化やサイズ変更をする必要がなくなるからです。私の場合、オーダー・ ブロック ・インジケータをプログラミングする際、時系列を使用することにしました。

MQ4で配列のサイズを変更する際に、配列の時系列をfalseに設定し、サイズを変更した後、時系列をtrueに再設定する必要があることがわかりました。 MQ5では使用していないので、まだ適切かどうかわかりません。