//+------------------------------------------------------------------+
//| Solar wind clean XXX(based on Solar wind clean  (FisherTransform)|
//| revised by Mladen    Copyright © 2005, MetaQuotes Software Corp. |
//| ForexTSD mladen nittany  mod fxbs  ki http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property  copyright "Copyright © 2005,  MetaQuotes Software Corp."
#property  link      "http://www.metaquotes.net/ www.ForexTSD.com"
//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
//----
#property  indicator_color1  Lime
#property  indicator_color2  Red
//----
extern int period   =21;
extern int smoozing =5;
extern bool Move = false;
//----
double         ExtBuffer0[];
double         ExtBuffer1[];
double         ExtBuffer2[];
double         Value[];
double         ExtBuffer3[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(5);
   SetIndexBuffer(0,ExtBuffer1);
   SetIndexBuffer(1,ExtBuffer2);
   SetIndexBuffer(2,ExtBuffer0);
   SetIndexBuffer(3,Value);
   SetIndexBuffer(4,ExtBuffer3);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
//---  mod to show currency pair and Period by nittany1 forex-tsd
   //     IndicatorShortName("SOLAR WIND Clean("+Symbol()+","+period+")");
   IndicatorShortName("SOLARWIND CleanX ("+period+")("+smoozing+")");
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int   limit;
   int   counted_bars=IndicatorCounted();
//----   
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//----
   for(int i=limit; i>=0; i--)
     {
      double MaxH =High[iHighest(NULL,0,MODE_HIGH,period,i)];
      double MinL =Low [iLowest( NULL,0,MODE_LOW, period,i)];
      double price=(High[i]+Low[i])/2;
      if (MaxH!=MinL)
         Value[i]=0.33*2*((price-MinL)/(MaxH-MinL)-0.5);
      else  Value[i]=0.00;
      Value[i]=MathMin(MathMax(Value[i],-0.999),0.999);
      ExtBuffer0[i]=0.5*MathLog((1+Value[i])/(1-Value[i]));
     }
   for( i=limit; i>=0; i--)
     {
      ExtBuffer3[i]=iMAOnArray(ExtBuffer0,0,smoozing,0,MODE_EMA,i);
      if(ExtBuffer3[i]<0)
        {
         if(ExtBuffer3[i+1]>0) {
            if(!Move) {
               ExtBuffer2[i]=ExtBuffer3[i];
               ExtBuffer2[i+1]=ExtBuffer3[i+1]; 
               ExtBuffer1[i]=EMPTY_VALUE;
            }
            else {
               ExtBuffer1[i]=ExtBuffer3[i];
               ExtBuffer1[i+1]=ExtBuffer3[i+1]; 
               ExtBuffer2[i]=ExtBuffer3[i];
            }
         }
         
         else {
            ExtBuffer2[i]=ExtBuffer3[i];
//            ExtBuffer1[i]=0.0;
            ExtBuffer1[i]=EMPTY_VALUE;
         }
        }
      else
        {
         if(ExtBuffer3[i+1]<0) {
            if(!Move) {
               ExtBuffer1[i]=ExtBuffer3[i];
               ExtBuffer1[i+1]=ExtBuffer3[i+1]; 
               ExtBuffer2[i]=EMPTY_VALUE;
            }
            else {
               ExtBuffer2[i]=ExtBuffer3[i];
               ExtBuffer2[i+1]=ExtBuffer3[i+1]; 
               ExtBuffer1[i]=ExtBuffer3[i];
            }
         }
         else {
            ExtBuffer1[i]=ExtBuffer3[i];
//            ExtBuffer2[i]=0.0;
            ExtBuffer2[i]=EMPTY_VALUE;
         }
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+