stop_level0





//+------------------------------------------------------------------+
//|                                                  stop_level0.mq4 |
//|                                                         (c)kukan |
//|                                              http://www.kukan.ru |
//+------------------------------------------------------------------+
#property copyright "(c)kukan"
#property link      "http://www.kukan.ru"

//27 ìàðòà 2006 ã.
//íà èäåþ ñîçäàíèÿ ýòîãî èíäèêàòîðà íàòîëêíóë íå÷àéíî ïîëó÷èâøèéñÿ èíäèêàòîð
//many_line_2, êîòîðûé ïîêàçûâàåò òðàåêòîðèþ 50-òè ïðîöåíòíîé êîððåêöèè.
//äàííûé èíäèêàòîð ñîâìåùàåò â ñåáå 4 îäèíàêîâûõ èíäèêàòîðà ñ ðàçíûìè íàñòðîéêàìè
//
//ïðèíöèï ðàáîòû ñëåäóþùèé.... åñëè öåíà ïåðåñåêàåò 50-ïðîöåíòíóþ êîððåêöèþ,
//òî ëèíèÿ ïåðåñêàêèâàåò íà 50-ïðîöåíòíóþ êîððåêöèþ îò òîãî äâèæåíèÿ êîòîðîå ïåðåñåêëî.
//åñëè öåíà óøëà äàëüøå ÷åì íà "max_reset"
//
//äîïèñóþ 29 ìàðòà äîìà..... áîëåþ ÷óòü ïðîñòóäèôèëèñîì :)
//
//çàêàí÷èâàþ ïåðâûé âàðèàíò, ïîïðèñìàòðèâàþñü ê íåìó.... íàñòðîéêàìè ïîèãðàþñü....
//ïîñìîòðþ ÷òî ìîæíî óëó÷øèòü....
//

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 DarkOrange        //
#property indicator_color2 Goldenrod        //
#property indicator_color3 DarkGoldenrod        //
#property indicator_color4 Sienna        //

//---- input parameters
#define  qty_line    4     //êîëè÷åñòâî ëèíèé èíäèêîòîðà

extern   int         mix_ampli_0=25;   //ìèíèìàëüíàÿ àìïëèòóäà äëÿ îïðåäåëåíèÿ ýêñòðåìóìà
extern   int         max_ampli_0=60;   //ìàêñèìàëüíàÿ àìïëèòóäà -><-
extern   bool        line_0_yes=true;  //ðèñîâàòü èëè íåò

extern   int         mix_ampli_1=40;
extern   int         max_ampli_1=100;
extern   bool        line_1_yes=true;

extern   int         mix_ampli_2=50;
extern   int         max_ampli_2=140;
extern   bool        line_2_yes=true;

extern   int         mix_ampli_3=60;
extern   int         max_ampli_3=180;
extern   bool        line_3_yes=true;
//
extern   bool        spread_yes=true;     //ó÷èòûâàòü ñïðåä
extern   bool        fl_ofset=true;       //ñìåùåíèå íà ïèïñ ââåðõ êàæäîé ëèíèè äëÿ óäîáñòâà âèçóàëèçàöèè
extern   bool        corr_or_lsp=false;   //ëèíèÿ ðèñóåò êîððåêöèþ èëè óðîâåíü ñòîïà
extern   bool        fl_price_level=true; //ðèñîâàòü îáüåêòû öåíû óðîâíåé
//
extern   int   limit_bars=30000;    //îãðàíè÷åíèå íà êîëëè÷åñòâî ñ÷èòàåìûõ áàðîâ
                                    //àêòóàëüíî äëÿ òåõ ó êîãî â òåðìèíàëàõ î÷åíü áîëüøàÿ èñòîðèÿ

int      ampli[qty_line];                             //àìïëèòóäû ôèêñàöèè ýêñòðåìóìà
int      ext_hl[qty_line];                            //òåêóùèé ýêñòðåìóì 0-ëîó 1-õàé
bool     corr_50_valid[qty_line];                     //ñîâïàäåíèå öåíû ëèíèè ñ ðåàëüíîé êîððåêöèåé
double   price_max[qty_line],price_min[qty_line];     //öåíû ìåæäó êîòîðûìè èäåò êîððåêöèÿ
double   corr_50[qty_line];                           //50% êîðååêöèÿ
double   level_stop[qty_line];                        //óðîâåíü ñòîïà

int   i,ia=0;

int   spread;     //çíà÷åíè ñïðåäà â ïóíêòàõ

//èíäèêàòîðíûå áóôåðà
double     ind_buffer1[];
double     ind_buffer2[];
double     ind_buffer3[];
double     ind_buffer4[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   SetIndexBuffer(0,ind_buffer1);
   SetIndexBuffer(1,ind_buffer2);
   SetIndexBuffer(2,ind_buffer3);
   SetIndexBuffer(3,ind_buffer4);
   //
   ArrayInitialize(ind_buffer1,EMPTY_VALUE);
   ArrayInitialize(ind_buffer2,EMPTY_VALUE);
   ArrayInitialize(ind_buffer3,EMPTY_VALUE);
   ArrayInitialize(ind_buffer4,EMPTY_VALUE);
   //
spread=0;
if (spread_yes)   spread=MarketInfo("EURUSD",MODE_SPREAD);
if (Bars-1>limit_bars)  i=limit_bars;
      else  i=Bars-1;
ArrayInitialize(price_max,High[i]+spread*Point);
ArrayInitialize(price_min,Low[i]);
ArrayInitialize(corr_50_valid,false);
   //
   //èíèöèàëèçàöèÿ ïàðàìåòðà ôèêñàöèè ýêñòðåìóìà
   ampli[0]=mix_ampli_0;
   ampli[1]=mix_ampli_1;
   ampli[2]=mix_ampli_2;
   ampli[3]=mix_ampli_3;
   //
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
  return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   i=Bars-counted_bars-1;
//
if (i>1 && false)
   {//ïðîïóùåíî êàêîåòî êîëè÷åñòâî áàðîâ (áîëüøå îäíîãî) íóæíî ïåðåñ÷èòàòü
   //âåñü èíäèêàòîð, ÷òîá ýòîò ôðàãìåíò ðàáîòàë íóæíî óáðàòü false â if
   init();
   }
if (i>limit_bars)   i=limit_bars;    //åñëè áàðîâ áîëüøå limit_bars, òî áóäåì ñ÷èòàòü limit_bars, à òî òÿæåëî
#define  ofset_vg 0
while(i>=0)
   {
   if (corr_or_lsp)
      {
   //........................................................
   if (!calc_extr(0,i,max_ampli_0,mix_ampli_0) && line_0_yes)
      {
      ind_buffer1[i]=corr_50[0]+(ofset_vg+0)*Point*fl_ofset;
      }
   if (!calc_extr(1,i,max_ampli_1,mix_ampli_1) && line_1_yes)
      {
      ind_buffer2[i]=corr_50[1]+(ofset_vg+1)*Point*fl_ofset;
      }
   if (!calc_extr(2,i,max_ampli_2,mix_ampli_2) && line_2_yes)
      {
      ind_buffer3[i]=corr_50[2]+(ofset_vg+2)*Point*fl_ofset;
      }
   if (!calc_extr(3,i,max_ampli_3,mix_ampli_3) && line_3_yes)
      {
      ind_buffer4[i]=corr_50[3]+(ofset_vg+3)*Point*fl_ofset;
      }
   //........................................................
      }
      else
      {
   //........................................................
   if (!calc_extr(0,i,max_ampli_0,mix_ampli_0) && line_0_yes)
      {
      ind_buffer1[i]=level_stop[0]+(ofset_vg+0)*Point*fl_ofset;
      }
   if (!calc_extr(1,i,max_ampli_1,mix_ampli_1) && line_1_yes)
      {
      ind_buffer2[i]=level_stop[1]+(ofset_vg+1)*Point*fl_ofset;
      }
   if (!calc_extr(2,i,max_ampli_2,mix_ampli_2) && line_2_yes)
      {
      ind_buffer3[i]=level_stop[2]+(ofset_vg+2)*Point*fl_ofset;
      }
   if (!calc_extr(3,i,max_ampli_3,mix_ampli_3) && line_3_yes)
      {
      ind_buffer4[i]=level_stop[3]+(ofset_vg+3)*Point*fl_ofset;
      }
   //........................................................
      }
   //
   i--;
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//ãëàâíàÿ ïðîöåäó îáñëóæèâàíèÿ ïåðåïèñîâàíèé ýêñòðåìóìîâ
//âõîäíîé ïàðàìåòð íîìåð ðàñ÷åòà,íîìåð áàðà, ìàêñèìàëüíûé àìïëèòóäà è ìèíèìàëüíàÿ 
//ïðîöåäóðà âîçâðàùàåò ïåðåâîðîò ëèíèè
bool  calc_extr(int  number, int n_bars,int  max_aml,int  min_aml)
   {
   //_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+
   //ðàñ÷åò ïåðåâîðîòà ëèíèè.... â áàðå êîòîðîì ïåðåïèñàí ýêñòðåìóì íå ìîæåò áûòü ïåðåâîðîòà
   //ñîîòâåòâåííî íóæíî âûáèðàòü ïðàâèëüíî òàéì ôðåéì äëÿ ýòîãî èíäèêàòîðà
      if (ext_hl[number]==1)  
         {//âûøå ëèíèè--ñìîòðèì ðîæäåíèå ýêñòðåìóìà
         if (Low[n_bars]<=price_max[number]-ampli[number]*Point)
            {//ðîæäåí ýêñòðåìóì -  ïåðåâîðîò corr_50_valid
            price_min[number]=Low[n_bars];
            ext_hl[number]=0;
            //..........................................
            calc_ampli(number,max_aml,min_aml);
            //..........................................
            return(true);//ïðîèçîøåë ïåðåâîðîò
            }
         }//îò âûøå ëèíèè
         else
         {//íèæå ëèíèè
         if (High[n_bars]+spread*Point>=price_min[number]+ampli[number]*Point)
            {//ðîæäåí ýêñòðåìóì -  ïåðåâîðîò corr_50_valid
            price_max[number]=High[n_bars]+spread*Point;
            ext_hl[number]=1;
            //..........................................
            calc_ampli(number,max_aml,min_aml);
            //..........................................
            return(true);//ïðîèçîøåë ïåðåâîðîò
            }
         }//îò íèæå ëèíèè
   //íå áûëî ïåðåâîðîòà
   if (High[n_bars]+spread*Point>price_max[number])
      {
      //ýêñòðåìóì ïåðåïèñàí
      price_max[number]=High[n_bars]+spread*Point;
      ext_hl[number]=1;
      //..........................................
      calc_ampli(number,max_aml,min_aml);
      //..........................................
      }
   if (Low[n_bars]<price_min[number])
      {
      //ýêñòðåìóì ïåðåïèñàí
      price_min[number]=Low[n_bars];
      ext_hl[number]=0;
      //..........................................
      calc_ampli(number,max_aml,min_aml);
      //..........................................
      }
   return(false);//íå áûëî ïåðåâîðîòà      
   }
//+------------------------------------------------------------------+
void  calc_ampli(int  number,int  max_aml,int  min_aml)
   {
      corr_50[number]=(price_max[number]-price_min[number])*0.5+price_min[number];
      ampli[number]=MathAbs((price_max[number]-corr_50[number])/Point);
      //..........................................
      corr_50_valid[number]=true;
      if (ampli[number]<min_aml) 
         {
         ampli[number]=min_aml;     //ñëèøêîì ìåëêèå äâèæåíèÿ äëÿ ðåàêöèè
         corr_50_valid[number]=false;
         }
      if (ampli[number]>max_aml)  
         {
         ampli[number]=max_aml;     //ïåðåñòàëè óøèðÿòüñÿ-îáû÷íûé òðàë-- "ñëèøêîì ìíîãî ïðèáûëè :))"
         corr_50_valid[number]=false;
         }
      //..........................................
      if (ext_hl[number]==1)  level_stop[number]=price_max[number]-ampli[number]*Point;
         else                 level_stop[number]=price_min[number]+ampli[number]*Point;
   }
//+------------------------------------------------------------------+







Sample





Analysis



Market Information Used:

Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar


Indicator Curves created:



Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: