// Downloaded From https://www.WiseStockTrader.com
// code from http://www.amibroker.com/kb/2007/03/24/how-to-plot-a-trailing-stop-in-the-price-chart/
// I added the short side and some options. Just drag and drop onto a price chart

_SECTION_BEGIN("Long Short % Stop");
//---long var
Stoplong = 1-Param("stop % Long", 7, 0.1, 20, 0.1) / 100;
Plong = ParamField("Price Field Long");
Longcol = ParamColor("Color Long Stop", colorCycle);
Buy = 1; //Change for your long signal eg Short=Cross(ma(c,10),ma(c,20));


Sell = 0;
traillongARRAY = Null;
trailstoplong = 0;

//----short var


StopLevel = 1-Param("Stop Short %", 7, 0.1, 20, 0.1) / 100;
P = ParamField("Price Field Short");
Shortcol = ParamColor("Color Short Stop", colorCycle);
Short = 1; // Change for your short signal eg Short=Cross(ma(c,20),ma(c,10));
Cover = 0;
trailARRAY = Null;
trailstop = 0;

//---calculate
for (i = 2; i < BarCount; i++)
{
  //---long
  if (trailstoplong == 0 AND Buy[i])
  {
    trailstoplong = Plong[i] *Stoplong;
  }
  else
    Buy[i] = 0;
  // remove excess buy signals

  if (trailstoplong > 0 AND Plong[i] < trailstoplong)
  {
    Sell[i] = 1;
    SellPrice[i] = trailstoplong;
    trailstoplong = 0;
  }

  if (trailstoplong > 0)
  {
    trailstoplong = Max(Plong[i] *Stoplong, trailstoplong);
    traillongARRAY[i] = trailstoplong;
  }


  //---short


  if (trailstop == 0 AND Short[i])
  {

    trailstop = P[i] / StopLevel; // set intinal % stop then trailing stop takes over

  }
  else
    Short[i] = 0;
  // remove excess short signals

  if (trailstop > 0 AND P[i] > trailstop)
  {
    Cover[i] = 1;
    CoverPrice[i] = trailstop;
    trailstop = 0;
  }

  if (trailstop > 0)
  {
    trailstop = Min(P[i] / stoplevel, trailstop);
    trailARRAY[i] = trailstop;
  }

}

// ----display results

Plot(traillongARRAY, "Stop Long", Longcol);
Plot(trailARRAY, "Stop Short", shortcol);

//PlotShapes(Short*shapeUpArrow,ParamColor( "Arrow Short Color", colorCycle),0,Low);
//PlotShapes(Cover*shapeDownArrow,ParamColor( "Arrow Cover Color", colorCycle),0,High);
//PlotShapes(Buy*shapeUpArrow,ParamColor( "Arrow Buy Color", colorCycle),0,Low);
//PlotShapes(Sell*shapeDownArrow,ParamColor( "Arrow Sell Color", colorCycle),0,High);
//Plot( Close,"Price",colorBlack,styleBar);


_SECTION_END();