一定期間のMAが水平であるかをチェックするプログラム

Sponsored Links

Pocket

過去一定期間(A)の移動平均(MA)の変動幅(MAの最大値-MAの最小値)が閾値(MAneutralRange)以下であれば垂直線を引くプログラムをまとめました。

パラメータ

パラメータ説明
neutralPeriod期間Aの長さ
MAneutralRange移動平均が水平であると判断するための閾値
neutralOffset期間Aの現在からのオフセット。

水平チェックの式

maMax – maMin <= MAneutralRange なら期間AのMAは水平であると判断する。
記号説明
maMax期間AのMAの最大値
maMin期間AのMAの最小値
maMax – maMin期間AのMAの変動幅

プログラムの流れ

  1. 初期化
    1. 移動平均の指標ハンドルを取得する。
  2. 毎ティックごとに次の処理を実行
    1. 移動平均の値を取得する。
    2. 期間Aの移動平均線が水平かチェックする
    3. 水平なら垂直線を引く

ソースコード

1.初期化

maPeriodは移動平均線の期間です。サンプルコードでは500期間を初期値としています。他は上述した通りです。

毎ティックの処理

ティックごとの処理はOnTick()に記述します。
移動平均の値を取得する
maBuffer_neutralに期間AのMAをコピーしますがmaBuffer_neutralのインデックス0に一番新しいMAの値が入るようにします。サンプルコードのようにArraySetAsSeries()に任意の配列とtrueを渡すと、CopyBuffer()を使ったときにインデックス0から新しい値が入るようになります。 CopyBuffer()を使って指標ハンドルからMAの値を取得します。
期間Aの移動平均線が水平かチェックする
これは上述した水平チェックの式を書いただけです。 ArrayMaximum()は配列要素を比較して最大値の要素のインデックスを返します。ArrayMinimum()は最小値の要素のインデックスを返します。
水平なら垂直線を引く
チャートに線などのオブジェクトを配置するにはObjectCreate()を使います。 期間Aがあまりに短かったり、閾値が大きすぎると垂直線が多すぎてプログラムが固まるので注意してください。
Pocket

Sponsored Links

コメントを残す

メールアドレスが公開されることはありません。