Navigation:Home > Content >

lukas1_стрелки_линии_Alert_v28.mq4

Time: 2018-03-11 | Download file:lukas1_стрелки_линии_Alert_v28.mq4

//+------------------------------------------------------------------+
//|                                 lukas1 arrows & curves.mq4 v.28 
//|   Copyright © 2007, Лукашук Виктор Геннадьевич aka lukas1
//|                                 13.05.2009 добавил  "Alert".
//+------------------------------------------------------------------+
//   Индикатор рисует сигналы открытия и закрытия в том случае,
//   когда цена закрытия бара пробила уровень, нарисованный линиями.

//1. Для линий введена задержка, приводящая к смещению вправо ("relay")
//2. Появились крестики, обозначающие закрытие сделки
//3. Повторные ордера в том же направлении отмечены так же крестиками

#property copyright "Copyright © 2007, MetaQuotes Software Corp.+lukas1"
#property link      "[email protected]"
//----
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 DeepSkyBlue
#property indicator_color2 Red
#property indicator_color3 Orange
#property indicator_color4 Orange
#property indicator_color5 MediumSeaGreen
#property indicator_color6 MediumSeaGreen

#property indicator_color7 DeepSkyBlue
#property indicator_color8 Red
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width7 2
#property indicator_width8 2
//---- input parameters
extern int SSP     = 20;   //период линейного разворота индикатора
extern int Channel = 0;    //уменьшение диапазона канала. Д.б. в диапазоне 0-50
extern int Ch_Stop = 30;   //уменьшение стопового канала (суммируется с основным)
extern int relay   = 10;   //смещение линий вглубь истории на 4 бара 
extern int CBars   = 2000; //расчетный период 
extern bool alerts  = true;//возможность выключить сигнал "Alert"
int    i;
static int alert_buy,alert_sell;
double high, low, smin, smax, smin2, smax2;
double val1[];      // буфер для бай
double val2[];      // буфер для селл
double BufferH[];
double BufferL[];
double BufferHS[];
double BufferLS[];
double valX1[],valX2[];      // буфер для X
bool   uptrend, old, uptrend2, old2;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   SetIndexStyle(0, DRAW_ARROW,0,1);
   SetIndexArrow(0, 233);        // стрелка для бай
   SetIndexBuffer(0, val1);      // индекс буфера для бай
   SetIndexLabel(0, "BUY");
   SetIndexDrawBegin(0, Bars-CBars-2*SSP);

   SetIndexStyle(1, DRAW_ARROW,0,1);
   SetIndexArrow(1, 234);        // стрелка для селл
   SetIndexBuffer(1, val2);      // индекс буфера для селл
   SetIndexLabel(1, "SELL");
   SetIndexDrawBegin(1, Bars-CBars-2*SSP);

   SetIndexStyle(2, DRAW_LINE,0,1);
   SetIndexBuffer(2, BufferH);
   SetIndexLabel(2, "BUY from here");
   SetIndexDrawBegin(2, Bars-CBars-2*SSP);

   SetIndexStyle(3, DRAW_LINE,0,1);
   SetIndexBuffer(3, BufferL);
   SetIndexLabel(3, "SELL from here");
   SetIndexDrawBegin(3, Bars-CBars-2*SSP);

   SetIndexStyle(4, DRAW_LINE,0,1);
   SetIndexBuffer(4, BufferHS);
   SetIndexLabel(4, "BuyStop");
   SetIndexDrawBegin(4, Bars-CBars-2*SSP);

   SetIndexStyle(5, DRAW_LINE,0,1);
   SetIndexBuffer(5, BufferLS);
   SetIndexLabel(5, "SellStop");
   SetIndexDrawBegin(5, Bars-CBars-2*SSP);

   SetIndexStyle(6, DRAW_ARROW,0,2);
   SetIndexArrow(6, 251);        // крестик синий
   SetIndexBuffer(6, valX1);      // индекс буфера для крестика
   SetIndexDrawBegin(6, Bars-CBars-2*SSP);

   SetIndexStyle(7, DRAW_ARROW,0,2);
   SetIndexArrow(7, 251);        // крестик красный
   SetIndexBuffer(7, valX2);      // индекс буфера для крестика
   SetIndexDrawBegin(7, Bars-CBars-2*SSP);

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Calculation of Channel lines
//+------------------------------------------------------------------+
int start()
  {   
   int counted_bars = IndicatorCounted();
//---- последний посчитанный бар будет пересчитан
   if(counted_bars > 0) counted_bars--;
//----
   if(Bars <= SSP + 1)        return(0);
//----
   uptrend       =false;
   old           =false;
   uptrend2       =false;
   old2           =false;

//----
   for(i = CBars - SSP; i >= 0; i--) // уменьш значение shift на 1 за проход;
     { 
       high = High[Highest(Symbol(),0,MODE_HIGH,SSP,i+relay)]; 
       low  = Low[Lowest(Symbol(),0,MODE_LOW,SSP,i+relay)]; 
       smax = high - (high - low)*Channel / 100; // smax ниже high с учетом коэфф.Channel
       smin = low  + (high - low)*Channel / 100;  // smin выше low с учетом коэфф.Channel
       smax2= high - (high - low)*(Channel+Ch_Stop) / 100; // smax ниже high с учетом коэфф.Chan+Ch_Stop
       smin2= low  + (high - low)*(Channel+Ch_Stop) / 100;  // smin выше low с учетом коэфф.Channel
	    val1[i] = 0;  
       val2[i] = 0;
       valX1[i] = 0;
       valX2[i] = 0;
//-----------------------
       if(Close[i] < smin && Close[i] < smax && uptrend2 == true && i!=0 )	// выключено мерцание стрелок (i!=0)
         {
          uptrend = false;
         }
	    if(Close[i] > smax && Close[i] > smin && uptrend2 == false && i!=0 )	// выключено мерцание стрелок (i!=0)	
	      {
	       uptrend = true;       
         }       
	    if((Close[i] > smax2 || Close[i] > smin2) && uptrend == false && i!=0 )	// выключено мерцание стрелок (i!=0)	
	         {
	          uptrend2 = false;       
            }       
       if((Close[i] < smin2 || Close[i] < smax2) && uptrend == true && i!=0 )	// выключено мерцание стрелок (i!=0)
            {
             uptrend2 = true;  
            }
//---- повторный сигнал не переключает режимы "uptrend"
//---- но используется сигнал по крестикам
       if(Close[i] < smin && Close[i] < smax && uptrend2 == false && i!=0 )	// выключено мерцание стрелок (i!=0)
         {
           val2[i] = low; // если условия выполнены то рисуем val2
           uptrend2 = true;
         }
//---- повторный сигнал не переключает режимы "uptrend"
//---- но используется сигнал по крестикам
	    if(Close[i] > smax && Close[i] > smin && uptrend2 == true && i!=0 )	// выключено мерцание стрелок (i!=0)	
         {
           val1[i] = high; // если условия выполнены то рисуем val1
           uptrend2 = false;
         }
//----
       if(uptrend != old && uptrend == false)
         {
           val2[i] = low; // если условия выполнены то рисуем val1
         }

       if(uptrend != old && uptrend == true) 
         {
           val1[i] = high; // если условия выполнены то рисуем val2
         }
//----
       if(uptrend2 != old2 && uptrend2 == true)
         {
           valX1[i] = smax2; // если условия выполнены то рисуем valX1
         }
       if(uptrend2 != old2 && uptrend2 == false) 
         {
           valX2[i] = smin2; // если условия выполнены то рисуем valX2
         }
//-----------------------
       old=uptrend;
       old2=uptrend2;
//-----------------------
       BufferH[i]=smax;
       BufferL[i]=smin;
       BufferHS[i]=smax2;
       BufferLS[i]=smin2;
     }
   if(alerts && val2[2]>0) alert_buy=0;
   if(alerts && val1[2]>0) alert_sell=0;
   //индикатор звонит на первых двух тиках (т.е. 2 раза) для каждой стрелки.
   if(alerts && val2[1]>0 && alert_buy==0) {Alert("Sell on "+Symbol());alert_buy=1;}
   if(alerts && val1[1]>0 && alert_sell==0){Alert("Buy on "+Symbol());alert_sell=1;}

   return(0);
  }
//+------------------------------------------------------------------+

Recommend