// Downloaded From https://www.WiseStockTrader.com
_SECTION_BEGIN("Reveerse Force Index");
SetPositionSize(1000,spsShares);

Period1=Optimize("Period1",17,1,20,1);
Period2=Optimize("Period2",5,2,20,1);
L1=Optimize("L1",-310000,-500000,50000,10000);
L2=Optimize("L2",-410000,-500000,50000,10000);

FI =((Close - Ref(Close, -1)) * V);
FastAvgFI=LinearReg(FI,Period1);
SlowAvgFI=LinearReg(FI,Period2);
FI_Col = IIf( (FI <Ref(FI,-1)), colorRed, colorBrightGreen);
FastAvgFI_Col = IIf(FastAvgFI < 0, colorRed, colorBlue);
SlowAvgFI_Col = IIf(SlowAvgFI < 0, colorRed, colorBlue);

Plot(FI, "Force Index", FI_Col, styleHidden|styleThick);
Plot(FastAvgFI, "FastAvgFI", FastAvgFI_Col, styleLine|styleThick);
Plot(SlowAvgFI, "SlowAvgFI", SlowAvgFI_Col, styleLine|styleThick);
Plot(0,"", colorViolet, styleLine | styleThick );


Buy1=((Cross(0,FastAvgFI))OR (Cross(0,SlowAvgFI)AND FastAvgFI<SlowAvgFI)); //(Cross(SlowAvgFI,L1))AND (FastAvgFI>L2) ;
Sell1= (Cross(SlowAvgFI,L1))AND (FastAvgFI>L2); //((Cross(0,FastAvgFI))OR (Cross(0,SlowAvgFI)AND FastAvgFI<SlowAvgFI));
Buy= Buy1;
Sell= Sell1;
Cover= 0;
Short= 0;
//Long=Flip(Buy,Sell);
//Shrt=Flip(Sell,Buy );

SL=Param("trailing stop %", 0.4, 0.1, 10, 0.1);
StopLevel1 = 1 - SL/100;
StopLevel2 = 1 + SL/100;
trailARRAY =trailARRAYs= Null;
trailstop =tstop= 0;

trailARRAY =trailARRAYs= Null;
trailstop =tstop= 0;
for( i = 1; i < BarCount; i++ )
{

   if( trailstop == 0 AND Buy[ i ] ) 
   { 
      trailstop = High[ i ] * stoplevel1;
   }
   else Buy[ i ] = 0; // remove excess buy signals

   if( trailstop > 0 AND (Low[ i ] < trailstop OR Sell1[i]) )
   {
      Sell[ i ] = 1;
      SellPrice[ i ] = trailstop;
      trailstop = 0;
   }

   if( trailstop > 0 )
   {   
      trailstop = Max( High[ i ] * stoplevel1, trailstop );
      trailARRAY[ i ] = trailstop;
   }
	if( tstop == 0 AND Short[ i ]) 
   { 
      tstop = Low[ i ]*stoplevel2;
   }
   else Short[ i ] = 0; // remove excess buy signals

   if( tstop > 0 AND (High[i]>tstop OR Buy1[i]) )
   {
      Cover[ i ] = 1;
      CoverPrice[ i ] = tstop;
      tstop= 0;
   }

   if( tstop> 0 )
   {   
      tstop= Min( Low[ i ]*stoplevel2, tstop);
      trailARRAYs[ i ] = tstop;
   }
}

PlotShapes( IIf( Sell, shapeDownArrow, shapeNone ), colorRed, 0, High, Offset = -25 );
PlotShapes( IIf( Buy, shapeUpArrow , shapeNone ), colorBrightGreen, 0, Low, Offset = -25 );

Title = Name() +
EncodeColor(colorRed) + " Close " +
EncodeColor(colorRed) + " = " + WriteVal(Close) + ", " +
EncodeColor(colorRed) + "Force Index = " +
EncodeColor(colorRed) + WriteVal(FI);
_SECTION_END();