インディケータで売買シグナルを作る その1

indicator

お疲れ様です。

本日は、6月の最終日ですね

6月最後の記事は、タイトル通りの内容になっています。

今までインディケータの総まとめというか基本的な売買シグナルのプログラムの組み方を解説したいと思います。

ローソク足が移動平均線をクロスしたらサインを出す

さていよいよ最後にしようかと思います。今まで色々なインディケータを作ってきましたが、
MT5を使う以上は売買シグナルを出せるようになりたいものです。
シグナルの出し方を説明します。一番簡単な例で、ローソク足が移動へ金銭を下から上に
抜いたら買いシグナル、逆に上から下に抜いたら売りシグナルを出すようにします。
他のテクニカル指標を使っても同じ考えできますので、まずは簡単なものでマスターして
くださいね。

上記の図のような状態、1本前の足の終値は移動平均線の下にあり、今の足の終値が上に
あれば上抜いたと言えそうです(左の矢印)。逆に1本前の足の終値が移動平均線の上に
あり、今の足の終値がしたにあれば下抜いたといえるでしょう。(右の矢印)。
これで判断して、下記の図のような矢印で売買シグナルを出すインディケータを作って
みます。Signalsという名前にします。

property部分  

  #property indicator_type1 DRAW_COLOR_ARROW
  #property indicator_type2 DRAW_COLOR_ARROW

DRAW_COLOR_ARROWということで矢印を書きます。その多色インディケータということですね。
Wingdingsフォントの文字を表すことができます。

define ARROW_UP 236

define ARROW_DOWN 238

文字のコード番号を定義します。236が右斜上の矢印、238が右斜下の矢印です。

int ExtArrowShift=-3;

矢印をどれだけ上下にずらすかを設定します。詳しくはOnInitで説明します。

OnInit関数

PlotIndexSetInteger(0,PLOT_ARROW,ARROW_UP);
PlotIndexSetInteger(1,PLOT_ARROW,ARROW_DOWN);

ARROWで何を描くかをここで設定します。Wingdingsフォントの236と238ですね。

PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,ExtArrowShift);
PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-ExtArrowShift);

ローソク足に対してどれだけ上下にずらすかという設定です。

PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);

もし該当する値がないと起動するのかの設定です。これで何も表示しないと
いうことになります。

OnCalculate関数

CopyBuffer(hMA,0,0,to_copy,MABuffer);
CopyClose(NULL,0,0,2,CalBuffer);

移動平均線を描画するので、MABufferは全体をコピーします。しかし、
終値は今と1本前だけわかればいいので、2つの値だけをコピーします。

if((CalBuffer[0]>MABuffer[0])&&(CalBuffer[1]<MABuffer[1]))

[0]は、今の状態で[1]は1本前の状態です。1本前は移動平均線の方が上で、
今はローソク足のほうが上ということなので、ローソク足が移動平均線を上
抜いたということになります。そのときに買いシグナルを出します。BuyBuffer
に高値の数値が入り買いシグナルのときの赤色が描画します。
次のelse ifはその逆の売りシグナルです。

OnDeinit関数

移動平均線のハンドルを開放します。

コンパイルしてエラーがないことを確認してチャートに適用してみましょう。
今回は、すぐに矢印は出てこないと思います。サインがでるまで気長に待つのも1つですが、
急ぐ方は次回、紹介しますね。

続く

最後に全体のコードです。

ブログランキング・にほんブログ村へ

コメント

タイトルとURLをコピーしました