//+------------------------------------------------------------------+ //| Kairi.mq4 | //| Copyright(C) 2005 S.B.T. All Rights Reserved. | //| http://fumito.s68.xrea.com/sb/sufx/ | //+------------------------------------------------------------------+ #property copyright "Copyright(C) 2005 S.B.T. All Rights Reserved." #property link "http://fumito.s68.xrea.com/sb/sufx/" //---- indicator settings #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 DodgerBlue //---- indicator parameters extern int MA_Period=21; extern int MA_Method=0; extern int Apply=0; //---- indicator buffers double Kairi_buffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name1,short_name2; //---- drawing settings IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1); //---- indicator buffers mapping if(!SetIndexBuffer(0,Kairi_buffer)) Print("cannot set indicator buffers!"); //---- name for DataWindow and indicator subwindow label switch(MA_Method) { case 1 : short_name1="EMA("; break; case 2 : short_name1="SMMA("; break; case 3 : short_name1="LWMA("; break; default : MA_Method=0; short_name1="SMA("; } switch(Apply) { case 1 : short_name2="Apply to Open price"; break; case 2 : short_name2="Apply to High price"; break; case 3 : short_name2="Apply to Low price"; break; case 4 : short_name2="Apply to Median price, (high+low)/2"; break; case 5 : short_name2="Apply to Typical price, (high+low+close)/3"; break; case 6 : short_name2="Apply to Weighted close price, (high+low+close+close)/4"; break; default : Apply=0; short_name2="Apply to Close price"; } IndicatorShortName("Kairi("+short_name1+"("+MA_Period+")) "+short_name2); SetIndexLabel(0,"Kairi"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Moving Averages Convergence/Divergence | //+------------------------------------------------------------------+ int start() { int limit; int counted_bars=IndicatorCounted(); double MA_buffer[]; //---- check for possible errors if(counted_bars<0) return(-1); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; ArrayResize(MA_buffer,limit); //---- macd counted in the 1-st buffer for(int i=0; i