//+------------------------------------------------------------------+ //| Discipline | //| Copyright © 1999-2008, MetaQuotes Software Corp. | //| FX_FISH | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, Kiko Segui" #property link "webtecnic@terra.es" //---- #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Lime #property indicator_color2 Red //---- double buffer1[]; double buffer2[]; //---- extern int period=10; extern int price=0; // 0 or other = (H+L)/2 // 1 = Open // 2 = Close // 3 = High // 4 = Low // 5 = (H+L+C)/3 // 6 = (O+C+H+L)/4 // 7 = (O+C)/2 extern bool Mode_Fast=false; extern bool Signals =true; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2,Lime); SetIndexBuffer(0,buffer1); SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2,Red); SetIndexBuffer(1,buffer2); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int deinit() { int i; double tmp; //---- for(i=0;i 0) counted_bars--; i = Bars - counted_bars; if(counted_bars==0) i-=1+period; while(i>=0) { MaxH=High[Highest(NULL,0,MODE_HIGH,period,i)]; MinL= Low[ Lowest(NULL,0,MODE_LOW, period,i)]; switch(price) { case 0: _price=(High[i]+Low[i])/2; break; case 1: _price= Open[i]; break; case 2: _price= Close[i]; break; case 3: _price= High[i]; break; case 4: _price= Low[i]; break; case 5: _price=(High[i]+Low[i]+Close[i])/3; break; case 6: _price=(Open[i]+High[i]+Low[i]+Close[i])/4; break; case 7: _price=(Open[i]+Close[i])/2; break; default: _price=(High[i]+Low[i])/2; break; } Value=0.33*2*((_price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1; Value=MathMin(MathMax(Value,-0.999),0.999); Fish =0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1; buffer1[i]=0; buffer2[i]=0; //---- if((Fish<0) && (Fish1>0)) { if(Signals) { ObjectCreate("Exit"+DoubleToStr(i,0),OBJ_ARROW,0,Time[i],_price); ObjectSet("Exit"+DoubleToStr(i,0),OBJPROP_ARROWCODE,251); ObjectSet("Exit"+DoubleToStr(i,0),OBJPROP_COLOR,Red); } buy=0; } if((Fish>0) && (Fish1<0)) { if(Signals) { ObjectCreate("Exit"+DoubleToStr(i,0),OBJ_ARROW,0,Time[i],_price); ObjectSet("Exit"+DoubleToStr(i,0),OBJPROP_ARROWCODE,251); ObjectSet("Exit"+DoubleToStr(i,0),OBJPROP_COLOR,Red); } sell=0; } if(Fish>=0) { buffer1[i]=Fish; } else { buffer2[i]=Fish; } tmp=i; if((Fish<-Threshold) && (Fish>Fish1) && (Fish1<=Fish2)) { if (Signals) { ObjectCreate("Sel"+DoubleToStr(i,0),OBJ_ARROW,0,Time[i],High[i]+5*Point); ObjectSet("Sel"+DoubleToStr(i,0),OBJPROP_ARROWCODE,226); ObjectSet("Sel"+DoubleToStr(i,0),OBJPROP_COLOR,Red); } sell=1; } if((Fish>Threshold) && (Fish=Fish2)) { if (Signals) { ObjectCreate("Buy"+DoubleToStr(i,0),OBJ_ARROW,0,Time[i],Low[i]-5*Point); ObjectSet("Buy"+DoubleToStr(i,0),OBJPROP_ARROWCODE,225); ObjectSet("Buy"+DoubleToStr(i,0),OBJPROP_COLOR,Aqua); } buy=1; } Value1=Value; Fish2=Fish1; Fish1=Fish; i--; } return(0); } //+------------------------------------------------------------------+