2010/06/01

SwingLine

ZigZagというチャートがあります。値動きの山を名前通りジグザグに表示してくれるチャートです。

このチャートのジグザグ加減は画面サイズに依存するのかと思ったのですが、直近12本分(パラメータExtDepthで変更可)の最高値/最安値を更新したかどうかを見ているぽいです。

そこで現在表示してる領域(*)の24%(パラメータturningWidthで変更可)を基準にジグザグ線を引くチャートを作ってみました。
*:チャートの表示領域は表示範囲内の最高値と最安値によって変化します。

表示領域の高さが5%以上変化すると再描画します。後ろの方にスクロールしてコンテキストメニューから「更新」をすれば見ている範囲に応じて再描画されると思います。

プログラムの練習問題にあるような最大値と最小値の取得などの応用です。単純な配列内から最大値と最小値を探すのとは違い、一定期間の方向性(上昇中なのか下降中なのか)の判断が必要になります。

大体似た線を引くのですが若干違いの出る場所もあります。

どちらかというと描画するだけならゴリゴリif分岐していけばなんとかなるんですが、起動直後にWindowサイズが取れないとか、起動直後と起動後にチャートをリセットした場合で初期化される変数が異なるなどの環境要因の所為でいらない分岐が増えます。

デフォルトのMetaEditorは日本語の入力がおぼつかないので、コメントを英語で書いてますが、内容はかなり怪しい物です。

ソース:SwingLine.mq4 - Google Code(DL:SwingLine.mq4)