#property copyright "Copyright © 2005, Yura Prokofiev" #property link "Yura.prokofiev@gmail.com" #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Blue #property indicator_color2 Lime #property indicator_color3 Red #property indicator_level1 -0.25 #property indicator_level2 0.25 extern int period=10; extern int bars_count=1000; extern bool AlertOn = true; extern bool Send_Mail = true; double ExtBuffer0[]; double ExtBuffer1[]; double ExtBuffer2[]; bool flagUp = false; bool flagDown = false; int init() { SetIndexStyle(0,DRAW_NONE); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexStyle(2,DRAW_HISTOGRAM); //IndicatorDigits(Digits+1); SetIndexBuffer(0,ExtBuffer0); SetIndexBuffer(1,ExtBuffer1); SetIndexBuffer(2,ExtBuffer2); IndicatorShortName("Fisher"); SetIndexLabel(1,NULL); SetIndexLabel(2,NULL); return(0); } int start() { //int period=10; int limit; int counted_bars=IndicatorCounted(); double prev,current,old; double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0; double price; double MinL=0; double MaxH=0; string msg; if(counted_bars>0) counted_bars--; if(bars_count > Bars || bars_count==0) { limit=Bars - period; }else{ limit=bars_count-period; } for(int i=limit; i>=0; i--) { MaxH = High[Highest(NULL,0,MODE_HIGH,period,i)]; MinL = Low[Lowest(NULL,0,MODE_LOW,period,i)]; price = (High[i]+Low[i])/2; Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1; Value=MathMin(MathMax(Value,-0.999),0.999); ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1; Value1=Value; Fish1=ExtBuffer0[i]; } bool up=true; for(i=limit-2; i>=0; i--) { current=ExtBuffer0[i]; prev=ExtBuffer0[i+1]; if (((current<0)&&(prev>0))||(current<0)) up= false; if (((current>0)&&(prev<0))||(current>0)) up= true; if(!up) { ExtBuffer2[i]=current; ExtBuffer1[i]=0.0; if (i == 0) { if (ExtBuffer1[i+1] > 0 && !flagDown) { flagDown=true; flagUp=false; msg = "Trend Down change on " + Symbol() + " " + Period() + "min "; if (AlertOn) Alert(msg); if (Send_Mail) SendMail(msg, ""); } } } else { ExtBuffer1[i]=current; ExtBuffer2[i]=0.0; if (i == 0 ) { if (ExtBuffer2[i+1] < 0 && !flagUp) { flagDown=false; flagUp=true; msg = "Trend Up change on " + Symbol() + " " + Period() + "min "; if (AlertOn) Alert(msg); if (Send_Mail) SendMail(msg, ""); } } } } return(0); }