[インジケータ作成]前日の高値・安値を任意の時間足チャートに表示する

スポンサーリンク
EAネタを検討するため、まずは、任意の時間足(1時間足や5分足など)チャートに、前日の最高値、最安値を描画するインジケータを作ってみました。

トレンドが明確にでていない場合など、前日の高値・安値をなかなか超えられないことが起こりやすいため、その習性をどうにか生かして利益を積むことができないかを検討するため、前日の高値・安値をチャート上に表示して検討したいと思います。


まあ、これの高値・安値を超えた場合を考えたEAがこちら([EA検証1] 水平ラインブレイク:MT4でEAを作成し働いてもらう)なのですが、逆に高値・安値を超えられない場合に、利益をこつこつ積むことができないかを考えようという試みになります。


下記のようなソースコードになります。

1.前日の高値・安値を表示する

●ソースコード


/* このインディケータは任意の時間足(1時間足や5分足など)チャートに、前日の最高値、最安値を描画するインディケータです。 */


#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Blue
#property indicator_color2 clrMagenta
#property indicator_color3 clrMagenta

//指標バッファ
double BufMid[];
double BufHigh[];
double BufLow[];


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

int init()
{
 
   SetIndexBuffer(0,BufMid);
   SetIndexBuffer(1,BufHigh);
   SetIndexBuffer(2,BufLow);
   SetIndexLabel(0,"Mid");
   SetIndexLabel(1,"High");
   SetIndexLabel(2,"Low");

   return(0);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

int start()
{
   
   int limit = Bars-IndicatorCounted();
 
   for(int shift=limit-1; shift>=0; shift--){
      //表示中のチャートの時間足のシフト数(バー)を日足のシフト位置に変換し、前日のシフト位置を算出する
      //一度日時に変換し、日時から日足のシフト位置を出す
      int day_shift = iBarShift(NULL, PERIOD_D1, iTime(NULL, 0, shift)) + 1;
      
      // 前日の高値、安値、中間値をチャートに設定する
      BufHigh[shift] = iHigh( 0, PERIOD_D1, day_shift );
      BufLow[shift] = iLow( 0, PERIOD_D1, day_shift );
      BufMid[shift] = (BufHigh[shift] + BufLow[shift])/2;
   }
   
   return(0);
}
//+----------------------------


●表示させたチャート

<1時間足>


<15分足>





2.前数日間の高値・安値を表示する

少し拡張して、前日だけじゃなく、数日間(パラメータで指定)の高値・安値を表示するようにしてみました。

●ソースコード


/* このインディケータは任意の時間足(1時間足や5分足など)チャートに、前数日間の最高値、最安値を描画するインディケータです。 */


#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Blue
#property indicator_color2 clrMagenta
#property indicator_color3 clrMagenta

//指標バッファ
double BufMid[];
double BufHigh[];
double BufLow[];

extern int BandPeriod  = 20;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

int init()
{
 
   SetIndexBuffer(0,BufMid);
   SetIndexBuffer(1,BufHigh);
   SetIndexBuffer(2,BufLow);
   SetIndexLabel(0,"Mid("+BandPeriod+")");
   SetIndexLabel(1,"High("+BandPeriod+")");
   SetIndexLabel(2,"Low("+BandPeriod+")");

   return(0);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

int start()
{
   
   int limit = Bars-IndicatorCounted();
 
   for(int shift=limit-1; shift>=0; shift--){
           
      //表示中のチャートの時間足のシフト数(バー)を日足のシフト位置に変換し、前日のシフト位置を算出する
      //一度日時に変換し、日時から日足のシフト位置を出す
      int day_shift = iBarShift(NULL, PERIOD_D1, iTime(NULL, 0, shift)) + 1;
      
      //前数日間(BandPeriodで指定の期間)で、最高値・最安値であったシフト位置を算出
      int highest_shift = iHighest(NULL, PERIOD_D1, MODE_HIGH, BandPeriod, day_shift);
      int lowest_shift = iLowest(NULL, PERIOD_D1, MODE_LOW, BandPeriod, day_shift);
      
      //算出したシフト位置の高値・安値・中間値をチャートに設定する
      BufHigh[shift] = iHigh( 0, PERIOD_D1, highest_shift );
      BufLow[shift] = iLow( 0, PERIOD_D1, lowest_shift );
      BufMid[shift] = (BufHigh[shift] + BufLow[shift])/2;
   }

   
   return(0);
}
//+----------------------------


●表示させたチャート

<1時間足>

<15分足>



MT4対応しているFX取引会社(「自作のMT4用自動売買プログラム(EA)で取引できるFX口座」参照)だと、こんな風に自分で考えた(欲しいと思った)インディケータを自分で作って表示することができるので、いいですね!!


もう少し拡張して、”GoGoJungle“さんで出品させて頂きました。
もし良かったら利用頂けたらと思います。


関連記事

スポンサーリンク
海外FXキャッシュバック口座開設ならTariTali(タリタリ)

コメント

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