//+------------------------------------------------------------------+ //| Asymmetry.mq4 | //| Fedor Igumnov | //| igumnovfedor@yandex.ru | //+------------------------------------------------------------------+ #property copyright "Fedor Igumnov" #property link "igumnovfedor@yandex.ru" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Red extern int AsPeriod=30; //--- buffers double Asymmetry[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name; //---- indicators IndicatorBuffers(1); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,Asymmetry); short_name="Asym("+AsPeriod+")"; IndicatorShortName(short_name); SetIndexLabel(0,short_name); //---- SetIndexDrawBegin(0,AsPeriod); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); int i,k; double M,D,MD,stdDev=0; double r1; //--- if (Bars=AsPeriod) k=Bars-counted_bars-1; while(k>=0) { for (i=AsPeriod;i>=0;i--) { M+=iRSI(Symbol(),0,AsPeriod,PRICE_CLOSE,k+i); } M=M/(AsPeriod+2); for (i=AsPeriod;i>=0;i--) { D+=(iRSI(Symbol(),0,AsPeriod,PRICE_CLOSE,k+i)-M)*(iRSI(Symbol(),0,AsPeriod,PRICE_CLOSE,k+i)-M); } D=D/(AsPeriod+2); stdDev=MathSqrt(D); for (i=AsPeriod;i>=0;i--) { MD+=(iRSI(Symbol(),0,AsPeriod,PRICE_CLOSE,k+i)-D)*(iRSI(Symbol(),0,AsPeriod,PRICE_CLOSE,k+i)-D); } MD=MD/(AsPeriod+2); Asymmetry[k]=MathAbs(MD/(D*stdDev*10000)); k--; } //---- return(0); } //+------------------------------------------------------------------+