新しい上向きのセグメントをジグザグが描画するまでに10本のロウソク足を必要としました。色のドットは、以前の形成足を示します。このインジケーターは、「ブルーのドットと足の新しい上昇セグメント」と「赤いドットと足の新しい下方セグメント」のプロットを始めていました。図5赤と青のドットを示すジグザグ反転この特異性にもかかわらず、ジグザグはその人気と魅力を失うことはありません。リングし、価格の動きの主な軌跡を検出するのに役立ちます。サポート/レジスタンスのレベルを検出するため、パターンの識別インジケーターとして使用する可能性もあります。ツールと同じように、近似曲線を描画するための基礎として使用することができます。ジグザグを使用すると、洗練されたトレーダーのような一覧表示をすることが可能です。ジグザグの亜種のプロットジグザグに2つの状態があることは明らかです。:つまり、上向きか下向きか。ラインは上向きに指示されるとき、新たしい高値が出現し、下向きを表しているとき安値が出現します。この方向の変化を示す条件の監視が必要です。よって、ジグザグをプロットするために次の必要があります。ソースデータを取得します。ラインの方向を変更するための条件を策定します。新高値と安値の発生を監視します。つのシリーズをとることができます。1つのデータ系列が使用されている場合、終値のみならず、あらゆるインジケーターを使うことができます。インジケーターのデータに基づいてジグザグを描写するときも、2つのデータ系列を使用することが可能です。高値と別に安値に基づくインジケーターです。方向の変更の条件は、ジグザグの種類を定義する最も重要なポイントです。これらの条件は大きく異なります。足より先で高値/安値の形成があるかもしれません。個の足を最大値または最小値の方向によって定義されます。インジケーターで使用されています。別のメソッド-固定の最大値または最小値からロールバックのサイズに基づいたものもあります。サイズはポイント単位で指定することができます。任意のインジケーターを使用して、方向を決定することが可能です。下回る場合は、ジグザグは上向きに指します。ADXに基づいて方向を決定する方法もあります。線の上の場合上向き、PDIがMDIの下は場合は下向き。別の亜種を組み合わせれば、多様なジグザグが得られます。データを使用して、確率などに基づいて方向を決定します。オプションは非常に異なります。つの部分に分割する必要があり、ここでは不変な指標を取得します。個々のパーツは、ソースデータとインジケーターバッファーをエントリーに使います。3つのバッファーは、プロット自体インジケーターを使用して、共通の部分に渡されます。最初に動作する別のインジケーターを作成するには、足とその方向に基づいて変更します。インジケーター作成ウィザードでは、"iHighLowZigZag"という名前を入力します。ハンドラーを選択します。.「ジグザグ」バッファーがジグザグを表示するため使用する、残りのバッファーは補助です。すべての補助バッファーのOnInit()関数内のSetIndexBuffer()関数の呼び出しでINDICATOR_DATA型をINDICATOR_CALCULATIONSに変更します。その後、インジケーターを一つの「ジグザグ」バッファー描画のみ使い、余分な行は描画されません。同時に、追加のバッファーはiCustom()関数によって処理可能になります。インデックスはOnCalculate()関数で決定されます。バッファーの要素を初期化します。i=start;i<rates_total;i++){上記の通り、不変性を達成するために必要なジグザグとそのプロットの計算にコードを分割します。この原則が今も支持されるでしょう。最初の方向を決定するコードを記述します。ArrayMaximum()とArrayMinimum()関数を使用します。値を割り当てられます。方向を計算する前に各足では、ジグザグの現在の方向についての情報を持っているために、バッファーの前の要素から値を取得し、現在の要素に割り当てます。//安値DirectionBuffer[i]=-1;}コードの最後の部分に注意してください。時々、非常に長い足があり、両方の方向になる場合があります。この場合、方向のバッファーは、以前に決定された方向になります。レーダー5ターミナル内で、同じ足に2つの変更を表示することが可能なジグザグ垂直セグメントを描画するを作成することが可能です。このようなジグザグ型はこの記事では考慮しません。メインループ内のコードの記述を続けます。次のフラグメントは、ジグザグ線を描画を担当します。他の2つのバッファーになるバッファーと同様にします。LastHighBarBuffer[i]=LastHighBarBuffer[i-1];LastLowBarBuffer[i]=LastLowBarBuffer[i-1];2つのバッファーは、最新の高値または安値のジグザグと足のインデックスのデータが格納されます。インジケーターの描画に直接必要である足のインデックスに加えて、EAから、ジグザグを呼び出します。最新のトップを求めてループで足を反復処理する必要がありません。バッファーのクリアを確認します。ZigZagBuffer[i]=EMPTY_VALUE;ヒストリーがダウンロードされるときにインジケーターの完全な計算が実行される必要があります。バッファーのインディケータ線を歪める古いデータがあります。図面を読み進めてください。新しい上向きの動き、新しい下方の始まり、上方への動きの継続、下向きの動きの継続の始まり。方向をチェックするには、足の計算結果とスイッチ演算子を使用します。つのコードの記述が残っています。新しい上向きの動きと上向きの動きの継続の始まりとみなされます。バッファー内の値が変更されたときに行われます。そのとき、アルゴリズムはジグザグの新しいポイントを描画し、新しい方向が始まりまった足のインデックスを格納します。ZigZagBuffer[i]=high[i];LastHighBarBuffer[i]=i;運動の継続はもう少し複雑です。このアルゴリズムは、現在の足がジグザグの以前の高値よりも大きいか確認します。大きい場合は、最後のセグメントの終点を移動させ、つまり、以前に描いたポイントを削除し、新しいものを配置します。ここでは、新しいポイントが描かれている情報を格納します。ポイントを削除ZigZagBuffer[(int)LastHighBarBuffer[i]]=EMPTY_VALUE;//新しい場所ZigZagBuffer[i]=high[i];//新しいトップと足のインデックスLastHighBarBuffer[i]=i;}これで完了です。右かっこでループを終了することを忘れないでください。モードでインジケーターをテストします。"iHighLowZigZag"インジケーターは、添付ファイルにあります。終値に基づいたシンプルなジグザグ新しく作成したインジケーターは終値に基づいています。ゼロからスタートする必要はありません。配列への呼び出しに置き換えます。不正な操作を示しています。高値/安値に基づいてインジケーターから変換された「close」に基づくジグザグの不正な操作なぜこれが起こるかを見てみましょう。現在の足の高値形成の足の特定の範囲内のトップなら、この足が残り方に関係ありません。天井が終値によって形成される場合、終値は足の形成中に変化するので、より高値が存在かもしれません。古いポイントを削除する条件が満たされるのも、問題があります。新しい高値が取り消されるか、新しいポイントが削除され、同様に削除されます。よって、古いポイントのポジションを復元する必要があります。LastHighBarBuffer、LastLowBarBuffer。2つの最新のポイントから復元されます。行のコードを追加します。ZigZagBuffer[(int)LastHighBarBuffer[i]]=close[(int)LastHighBarBuffer[i]];ZigZagBuffer[(int)LastLowBarBuffer[i]]=close[(int)LastLowBarBuffer[i]];この改正後、インジケーターが正常に動作する必要があります。結果として得られる"iCloseZigZag"インジケーターは、この記事の添付ファイルにあります。解くことによって達成されます。データをバッファーを充填します。つのバッファーが使用されます。高値と安値でできるようにする必要があります。終値または他のインジケーターに基づいてジグザグを得るためには、同じ値を持つ両方のバッファーを使う必要があります。データの解析に基づくバッファーを使います。ウィンドウでその組み合わせを選択することができます。クラスを追加する"CSorceData.mqh"ファイルが含まれます。