delta-stop





//+------------------------------------------------------------------+
//|                                                   delta-stop.mq4 |
//|                Copyright © 2006, Nick Bilak, beluck[AT]gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright c 2006, Nick Bilak"
#property link      "http://www.mql4.info/"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- input parameters
extern int     Mode=0; //0 - auto, 1 - manual
extern double  DeltaPrice=50;
extern int     ATRperiod=500;
extern double  ATRratio=3.522;
double buf[];
double atr[];
double atrs[];

int init()  {
   IndicatorBuffers(3);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,buf);
   SetIndexEmptyValue(1,0);
   SetIndexBuffer(1,atr);
   SetIndexBuffer(2,atrs);
   SetIndexEmptyValue(2,0);
   return(0);
}
int start() {


   int counted_bars=IndicatorCounted();
   int shift,limit,i,k;
   double TrStopLevel,DeltaStop;
   
   if (counted_bars<0) return(-1);
   if (counted_bars>0) counted_bars--;
   limit=Bars-ATRperiod*2-1;
   //if(counted_bars>=ATRperiod) limit=Bars-counted_bars-1;

   if (Mode==0) { 
      for (i=limit+ATRperiod+1;i>=0;i--) {
         atr[i]=iATR(NULL,0,ATRperiod,i);
      }
      for (i=limit;i>=0;i--) {
         atrs[i]=iMAOnArray(atr,0,ATRperiod,0,MODE_SMMA,i);
      }
   }
   else DeltaStop=DeltaPrice;

   for (shift=limit;shift>=0;shift--)   {
      if (Mode==0) DeltaStop=atrs[shift] * ATRratio; else DeltaStop=DeltaPrice*Point;
      if (Close[shift]==buf[shift+1]) buf[shift] = buf[shift+1];
      else if (Close[shift+1]<=buf[shift+1] && Close[shift]<buf[shift+1]) buf[shift]=MathMin(buf[shift+1],Close[shift]+DeltaStop);
      else if (Close[shift+1]>=buf[shift+1] && Close[shift]>buf[shift+1]) buf[shift]=MathMax(buf[shift+1],Close[shift]-DeltaStop);
      else if (Close[shift]>buf[shift+1]) buf[shift]=Close[shift]-DeltaStop;
      else buf[shift]=Close[shift]+DeltaStop;
   }
   return(0);
}






Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:

Implements a curve of type DRAW_LINE


Indicators Used:

Indicator of the average true range
Moving average indicator


Custom Indicators Used:

Order Management characteristics:

Other Features: