MT4 - MQLのオブジェクトでMAのMTF版ランプサインを作る

sitemap
世界最強のFXキャッシュバックサイト
MAのゴールデンクロスとデッドクロスのマルチタイムフレーム版ランプサインを作る
公開日:2018/10/22
少し、間が空いてしまいましたが、オブジェクトを使ったインジゲーターを作ってました。

いろいろ試してみていますが、オブジェクトは1回作れるようになると、基本的には思いつく限りのものは自分で簡単に作れてしまいますね。

ということで、引き続き、オブジェクトについての記事になります。

ここ数日で、いくつかインジゲーターを作りましたが、

今回は、マルチタイムフレームを使ったインジゲーターの作り方について、簡単に紹介したいと思います。

作成したインジゲーターは、

「MA(移動平均線)の矢印ランプサイン【MTF版】」

です。

どんなインジゲーターかというと、

チャート上に、5分足、15分足、30分足、1時間足、4時間足のMAがゴールデンクロス中か、デッドクロス中かを矢印のランプサインで表示するインジゲーターです。

前回までは、RSIを使った単純なインジゲーターの作り方をいくつか紹介してきましたが、今回はMAを使ってちょこっと工夫したものを作ってみました。

完成例はこんな感じになりました。

MAクロスサイン

下向き矢印(赤色):デッドクロス中
上向き矢印(薄い青色):ゴールデンクロス中
右向き矢印(灰色):2本の移動平均線の値が同じ

今回は、少しだけ色味をつけてみましたが、シンプルなプロトタイプ版として作成しました。

以下から作成過程を説明していきます。
ソースコードの説明
まずは、ベースとなる四角形と文字列をOnInit()の中で作ります。

この部分は、何度も記事で書いているので省略します。

参考記事:「オブジェクトで四角形を描いて装飾をする」。

また、今までは四角形とか文字列を1つ1つコードを書いて作っていましたが、同じ処理は、for文とかを使うとコードが短くなってスッキリします。

for文を使ったコードの書き方は、また今度、別の記事で紹介していきたいと思います。

今回は、start()内でサインの条件などを紹介しながら説明していきます。

5分足のサインを表示させる方法を例に説明します。

   ①double f_ma = iMA(NULL,5,F_MA_Period,0,0,0,0);
   ②double s_ma = iMA(NULL,5,S_MA_Period,0,0,0,0);
    
   ③ObjectCreate("5m_sign",OBJ_LABEL,0,0,0,0,0);
   ④ObjectSet("5m_sign",OBJPROP_CORNER,CORNER_LEFT_LOWER);
   ⑤ObjectSet("5m_sign",OBJPROP_XDISTANCE,230);
   ⑥ObjectSet("5m_sign",OBJPROP_YDISTANCE,255);

   ⑦if(f_ma < s_ma)
   {

   ⑧ObjectSetText("5m_sign",CharToStr(222),30,"Wingdings",Red);
   
   ⑨}else if(f_ma > s_ma)
   {
   
   ⑩ObjectSetText("5m_sign",CharToStr(221),30,"Wingdings",DeepSkyBlue);
   
   ⑪}else{
   
   ⑫ObjectSetText("5m_sign",CharToStr(220),30,"Wingdings",Gray);
   
   }

こんな感じのコードになります。

以下から細かく説明していきます。

■MAの値を取得

移動平均線の値を取得する方法は、以前にも紹介しましたが、簡単に説明します。
常に最新の値を取得して、さらに整数として表示したいので以下のようにコードを書いていきます。

   ①double f_ma = iMA(NULL,5,F_MA_Period,0,0,0,0);
   ②double s_ma = iMA(NULL,5,S_MA_Period,0,0,0,0);

参考ページ:インジゲーター「CROSS MA01」
参考記事:Blog「現在の足からインジゲーターを表示させていく方法」

今回は、2本の移動平均線(短期移動平均線と長期移動平均線)のクロスでゴールデンクロスとデッドクロスの判定をしていくので、2つの変数にそれぞれの値を代入していきます。

参考記事:Blog「移動平均線を利用した手法について」

①double f_ma = iMA(NULL,5,F_MA_Period,0,0,0,0);
double型の変数「f_ma」に短期移動平均線の値を代入します。移動平均線の値はiMAを使って取得します。
ここでは、現在のチャートの通貨ペア、5分足、期間(パラメーターで変更可能)、シフト数「0」、算出方法「SMA」、適正価格「終値」、現在の値という設定にします。

②double s_ma = iMA(NULL,5,S_MA_Period,0,0,0,0);
double型の変数「s_ma」に長期移動平均線の値を代入します。上記と同じように必要な設定をします。

■オブジェクトの処理

表示させる矢印ランプのオブジェクトの設定をします。

   ③ObjectCreate("5m_sign",OBJ_LABEL,0,0,0,0,0);
   ④ObjectSet("5m_sign",OBJPROP_CORNER,CORNER_LEFT_LOWER);
   ⑤ObjectSet("5m_sign",OBJPROP_XDISTANCE,230);
   ⑥ObjectSet("5m_sign",OBJPROP_YDISTANCE,255);

③~⑥
オブジェクトの名前、種類、表示位置などを指定します。今回は説明を省略します。

■ゴールデンクロスとデッドクロスの判定処理

デッドクロスの判定は以下のようになります。

   ⑦if(f_ma < s_ma)
   {

   ⑧ObjectSetText("5m_sign",CharToStr(222),30,"Wingdings",Red);
   
   }

⑦if(f_ma < s_ma)
f_ma(短期移動平均線)がs_ma(長期移動平均線)より小さければ(下)、デッドクロスという条件文。

⑧ObjectSetText("5m_sign",CharToStr(222),30,"Wingdings",Red);
デッドクロス中の下向き矢印ランプサインの設定をします。
ここでは、Wingdingsコード「222(下向き矢印)」、サイズ「30」、色「Red(赤)」と設定をします。

ゴールデンクロスの判定は以下のようになります。

   ⑨else if(f_ma > s_ma)
   {
   
   ⑩ObjectSetText("5m_sign",CharToStr(221),30,"Wingdings",DeepSkyBlue);
   
   }

⑨else if(f_ma > s_ma)
f_ma(短期移動平均線)がs_ma(長期移動平均線)より大きければ(上)、ゴールデンクロスという条件文。

⑩ObjectSetText("5m_sign",CharToStr(221),30,"Wingdings",DeepSkyBlue);
ゴールデンクロス中の上向き矢印ランプサインの設定をします。
ここでは、Wingdingsコード「221(上向き矢印)」、サイズ「30」、色「DeepSkyBlue(薄い青)」と設定をします。

最後に、あまり見られないケースになりますが、2本の移動平均線の値が同じときの処理について。

   ⑪else{
   
   ⑫ObjectSetText("5m_sign",CharToStr(220),30,"Wingdings",Gray);
   
   }

⑪else{
ゴールデンクロス中・デッドクロス中ではないときの条件文。

⑫ObjectSetText("5m_sign",CharToStr(220),30,"Wingdings",Gray);
右向き矢印ランプサインの設定をします。
ここでは、Wingdingsコード「220(右向き矢印)」、サイズ「30」、色「Gray(灰色)」と設定をします。

残りの時間足も上記と同じように必要な設定をしていきます。

今回は、残りの説明は省略します。

参考記事:「MQLのオブジェクトで円(丸)を描く」。

それでは、コンパイルして実行してみます。
実行結果
5分足:デッドクロス中
15分足:2本の移動平均線の値が同じ
30分足、1時間足、4時間足:ゴールデンクロス中
40以下

今回はMTFで各時間足の移動平均線の値を取得するようにしているので、どの時間足に変更しても、指定した足のゴールデンクロスとデッドクロスの判定がされています。
まとめ
いかがだったでしょうか?

今回は、移動平均線のゴールデンクロスとデッドクロスをオブジェクトを使って視覚的にわかりやすいように作ってみましたが、マルチタイムフレーム化することで、わざわざチャートを切り替えなくても今の状況を知ることができるようになりました。

このように、オブジェクトを使えば、トレードの手間を減らして、自分が知りたい情報を1つのチャートで判断することができるようにもなります。

まだまだ、作りたいものはたくさんあるので、また何か作ったら紹介していきたいと思います。

それでは、また。
今回使用したMQL一覧
関連ページ
big_candlestick_judgment
スポンサードリンク
Twitter