//+------------------------------------------------------------------+
//|                                                SimpleMAKairi.mq4 |
//|                                  Copyright(c) 2010 Masaru Sasaki |
//|                                                                  |
//+------------------------------------------------------------------+
//
// 「免責事項」
//  *このプログラムに基づく行為の結果発生した障害、損失などについて
//    著作者は一切の責任を負いません。
//
// 「説明」
//  *長期移動平均線からの乖離率を表示します。
//   長期移動平均線の標準設定は、200SMA, 中期移動平均線の設定は、75EMA、
//   短期移動平均線の設定は、25EMA、超短期移動平均線の設定は、5EMAと
//   なっております。又、価格は終値です。
//   考え方としては、長期移動平均線から中期移動平均線が離れている乖離率
//   と長期移動平均線から短期移動平均線が離れている乖離率、長期移動平均線
//   から超短期移動平均線が離れている乖離率を求める事により、3本の乖離率
//   が、0に近づいた時、トレンド転換点となるのでは？と思いプログラミング
//   の練習用に作成しました。不備があると思いますので、
//   使用する場合は設定等や他の指標と組み合わせて注意して使用下さい。
//
// 参考書籍：FXメタトレーダー入門  (PanRolling)
//           株価チャートの読み方の基本  (株式会社すばる舎)
//
#property copyright "Copyright(c) 2010 Masaru Sasaki"
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Cyan
#property indicator_color3 Yellow

// 指標バッファ
double BufMAKairi1[];
double BufMAKairi2[];
double BufMAKairi3[];

// 移動平均線期間  変更できます。
extern int LongMA_period = 200;
extern int MidleMA_period = 75;
extern int ShortMA_period = 25;
extern int sShortMA_period = 5;
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   // 指標バッファの割り当て
   SetIndexBuffer(0, BufMAKairi1);
   SetIndexBuffer(1, BufMAKairi2);
   SetIndexBuffer(2, BufMAKairi3);
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int limit = Bars-counted_bars;
   double MA, MA1, MA2, MA3;
   
   if( counted_bars == 0 ) limit = limit - LongMA_period - 1;
   for( int i=limit-1; i>=0; i-- )
   {
      MA = 0.0; MA1 = 0.0; MA2 = 0.0; MA3 = 0.0;
      
      // 長期移動平均の計算
      MA = iMA(NULL, 0, LongMA_period, 0, MODE_SMA, PRICE_CLOSE, i);
      // 中期指数平滑移動平均の計算
      MA1 = iMA(NULL, 0, MidleMA_period, 0, MODE_SMMA, PRICE_CLOSE, i);
      // 短期指数平滑移動平均の計算
      MA2 = iMA(NULL, 0, ShortMA_period, 0, MODE_SMMA, PRICE_CLOSE, i);
      // 超短期指数平滑移動平均の計算
      MA3 = iMA(NULL, 0, sShortMA_period, 0, MODE_SMMA, PRICE_CLOSE, i);
      
      // 長期移動平均から中期移動平均が離れている乖離率の計算
      BufMAKairi1[i] = ((MA1 - MA)/MA) * 100;
      // 長期移動平均から短期移動平均が離れている乖離率の計算
      BufMAKairi2[i] = ((MA2 - MA)/MA) * 100;
      // 長期移動平均から超短期移動平均が離れている乖離率の計算
      BufMAKairi3[i] = ((MA3 - MA)/MA) * 100;
      
   }

   return(0);
  }
//+------------------------------------------------------------------+