2018年7月11日水曜日

[MT4]TradersATR

ちょっとTradingViewのPineスクリプトで作りたかったのだけど、Pineは配列の扱いが難しい・・・。ひとつ前の足の値が取れたり取れなかったりでちょっとわかりやすいMT4で組んでみました


Close+-ATRのラインを引いて抵抗線、支持線と考えるやつです。
それぞれのラインは、ラインがクロスするまでリセットされず一方方向に動きます。

ATRをつかったパラボリックみたいな感じですね。ちなみに下のラインを上のラインがうわまったら買いシグナル、逆で売りシグナルだそうです。

ちょっとだけ改造しました。
http://mt4program.blogspot.com/2018/07/mt4tradersatr-rate2.html

//------------------------------------------------------------------
// Traders ATR 
#property copyright "Copyright 2018,Daisuke "
#property link      "http://mt4program.blogspot.com/"
#property version   "1.00"
#property strict
#property indicator_chart_window

//buffers
#property indicator_buffers 2

#property indicator_plots   2

#property indicator_label1  "SHORT"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrIndianRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

#property indicator_label2  "LONG"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrAqua
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

input int AtrPeriod = 20; // ATR Period
input double Rate = 2.0;  // Rate

//buffer variables
double atrH[];
double atrL[];

//------------------------------------------------------------------
//initialize
int OnInit()
{
   // short name setting
   string shortName = "TATR (" + IntegerToString(AtrPeriod) + ")";
   IndicatorShortName(shortName);

   int count = 0;
   SetIndexBuffer(count++, atrH);
   SetIndexBuffer(count++, atrL);

   return(INIT_SUCCEEDED);
}

//------------------------------------------------------------------
//calculate event
int OnCalculate(
   const int rates_total,        
 const int prev_calculated,   
 const datetime &time[],      
 const double &open[],        
 const double &high[],        
 const double &low[],        
 const double &close[],       
 const long &tick_volume[],   
 const long &volume[],          
 const int &spread[])
{
   for( int i = rates_total - prev_calculated - 1 ; i >= 0; i-- )
   {
      double atr = iATR(NULL, PERIOD_CURRENT, AtrPeriod, i);
      double h = close[i] + Rate * atr;
      double l = close[i] - Rate * atr;
      
      if( rates_total - 2 <= i )
      {
         atrH[i] = h;
         atrL[i] = l;
      }
      else
      {
         if(   atrH[i + 1] != EMPTY_VALUE &&
               atrL[i + 1] != EMPTY_VALUE && 
               atrH[i + 1] < atrL[i + 1] )
         {
            atrH[i] = close[i + 1] > atrH[i + 1] ? EMPTY_VALUE : MathMin(h, atrH[i + 1]);
            atrL[i] = close[i + 1] < atrL[i + 1] ? EMPTY_VALUE : MathMax(l, atrL[i + 1]);
         }
         else
         {
            atrH[i] = atrH[i + 1] == EMPTY_VALUE ? h : MathMin(h, atrH[i + 1]);
            atrL[i] = atrL[i + 1] == EMPTY_VALUE ? l : MathMax(l, atrL[i + 1]);
         }
      }
   }

   return(rates_total - 1);
}



「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。