Interceptor

Author: Sergey
Price Data Components
Series array that contains open prices of each barSeries array that contains close prices for each bar
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reached
Indicators Used
Moving average indicatorStochastic oscillator
Miscellaneous
It opens Message Boxes to the user
0 Views
0 Downloads
0 Favorites
Interceptor
//+-----------------------------------------------------------------------+
//|                                                       Interceptor.mq4 |
//|                                                                Sergey |
//|                                                     mserega@yandex.ru |
//+-----------------------------------------------------------------------+
#property copyright "Sergey"
#property link      "mserega@yandex.ru"
//+-----------------------------------------------------------------------+

//ñîâåòíèê äëÿ ãðàôèêà Ì5 GBP/USD

//ïåðèîä òåñòèðîâàíèÿ 01.01.2000 - 10.07.2012 (12 ëåò)

//ñäåëîê  321, ïðèáûëü 2157, ïðîñàäêà 145, ïðèáûëüíîñòü 4.1 (çàêðûòèå ïî òåéê ïðîôèòó)

extern double   LotPoz =   0.01;  //ëîò ïðè îáû÷íîì îòêðûòèè ïîçèöèè (åñëè íåò ñîâïàäåíèÿ ñèãíàëîâ)

extern double  KoefYzk =   0.35;  //êîýôôèöèýíò óçêîñòè ôëåòà íà Ì5 (êîëè÷åñòâî ïóíêòîâ íà 1 áàð)


extern int     StopLos =   50;  //íà÷àëüíûé ñòîï ëîññ  (åñëè ìåíüøå 10, òî ñòîï ëîññ íå ñòàâèòñÿ)

extern int     TeikPro =    0;  //òåéê ïðîôèò (åñëè ìåíüøå 10, òî òåéê ïðîôèò íå ñòàâèòñÿ)

extern int      ProfBy =    0;  //ìèíèìàëüíàÿ ïðèáûëü â ïóíêòàõ ïîñëå ïåðåâîäà â áåçóáûòîê

extern int      StopBy =   45;  //ñòîï-ëîññ ïîñëå ïåðåâîäà â áåçóáûòîê (ïåðåâîäèì â á/ó, åñëè ïàðàìåòð áîëüøå 9)


extern int        YzM5 =   25;  //ìàêñèìàëüíî äîïóñòèìîå ðàññòîÿíèå ìåæäó ÌÀ äëÿ âååðà íà ãðàôèêå  Ì5 (òîëüêî â ñèãíàë 1)

extern int       YzM15 =   20;  //ìàêñèìàëüíî äîïóñòèìîå ðàññòîÿíèå ìåæäó ÌÀ äëÿ âååðà íà ãðàôèêå Ì15 (òîëüêî â ñèãíàë 4)

extern int        YzH1 =   60;  //ìàêñèìàëüíî äîïóñòèìîå ðàññòîÿíèå ìåæäó ÌÀ äëÿ âååðà íà ãðàôèêå Ì15 (òîëüêî â ñèãíàë 6)


extern int     StohPer =   24;  //ïåðèîä ñòîõàñòèêà (äëÿ Ì5)

extern int     StochUp =   85;  //âåðõíèé óðîâåíü ñòîõàñòèêà (äëÿ Ì5)

extern int     StochDn =   15;  //íèæíèé óðîâåíü ñòîõàñòèêà (äëÿ Ì5)


extern int    SthBigPr =   24;  //ïåðèîä ñòîõàñòèêà (äëÿ Ì15)

extern int    SthBigUp =   85;  //âåðõíèé óðîâåíü ñòîõàñòèêà (äëÿ Ì15)

extern int    SthBigDn =   15;  //íèæíèé óðîâåíü ñòîõàñòèêà (äëÿ Ì15)


extern int     RazmTel =   15;  //ìèíèìàëüíûé ðàçìåð òåëà ñâå÷è (òîëüêî â ñèãíàë 1)

extern int     MalFlet =   10;  //ìàëåíüêèé ôëåò (ìèíèìàëüíàÿ äëèíà ôëåòà â áàðàõ)

extern int     VisFlet =   15;  //âûñîêèé ôëåò (ìàêñèìàëüíàÿ âûñîòà ôëåòà â ïóíêòàõ)


extern int     RastDiv =   75;  //ìèíèìàëüíîå ðàññòîÿíèå â áàðàõ ìåæäó ïèêàìè èíäèêàòîðà äëÿ äèâåðãåíöèè íà Ì5


extern int      BigTen =   80;  //ìèíèìàëüíûé  ïðîöåíò äëèííîé  òåíè ìîëîòà

extern int      LitTen =   10;  //ìàêñèìàëüíûé ïðîöåíò êîðîòêîé òåíè ìîëîòà

extern int      MolRaz =   11;  //ìèíèìàëüíûé  ðàçìåð  ìîëîòà â ïóíêòàõ (íà ãðàôèêå Ì5)

extern int      MolBar =    8;  //êàê äàâíî áûë ìîëîò (ìàêñèìàëüíûé íîìåð åãî áàðà)

extern int      MolPer =   15;  //íà ñêîëüêèõ áàðàõ ìîëîò ÿâëÿåòñÿ ìàêñèìóìîì (òîëüêî â ñèãíàë 6)


extern int       YzIst =    3;  //óçêèé èñòî÷íèê (ìàêñèìàëüíàÿ øèðèíà âååðà íà Ì5 â ñàìîé óçêîé òî÷êå)

extern int       DalYz =    5;  //ñêîëüêî áàðîâ íàçàä âååð ñõîäèëñÿ â "óçêèé èñòî÷íèê" (ïðàêòè÷åñêè â òî÷êó)

extern int       KolBr =   10;  //äèàïàçîí ìàêñèìóìà èëè ìèíèìóìà, êîòîðûé ïðîáèâàåòñÿ ("óçêèé èñòî÷íèê")

extern int       Magic = 1214;  //ïîìåòêà ñâîèõ îðäåðîâ òàêèì íîìåðîì


extern int    StepTral =   50;  //ìèíèìàëüíûé ñäâèã òðàëèíã-ñòîïà

extern int    DistTral =  300;  //ðàññòîÿíèå îò òðàëèíã-ñòîïà äî öåíû (åñëè ìåíüøå 10, òî òðàë íå ðàáîòàåò)

//ëîòû îòêðûòûõ ïîçèöèé
double lot_buy, lot_sel;

//âååðû ñêîëüçÿùèõ ñðåäíèõ, êîýôôèöèýíò ëîòà (åñëè ñîâïàëè íåñêîëüêî ñèãíàëîâ ñðàçó, òî îòêðûâàåì äâîéíîé ëîò)
int veer_m5, veer_15, veer_h1, lt_koef;

//ïåðåñå÷åíèå ñòîõàñòèêà è ñèãíàëüíîé ëèíèè íà ãðàôèêå Ì5, íà ãðàôèêå Ì15, áàð äëÿ öèêëà
int stoch_crosM5, stoh_per15;

//ïðîáîé ñêîëüçÿùèõ ñðåäíèõ M5 è M15, ïðîáîé ôëåòà íà Ì5, ãîðí (óëó÷øåííàÿ âåðñèÿ âååðà ÌÀ)
int prob_m5, prob_15, prb_flt, hrn_bull, hrn_bear, prb_yz;

//äèâåðãåíöèÿ íà ñòîõàñòèêå Ì5, áàð ãäå åñòü ìîëîò, çíà÷åíèå ìîëîòà
int div_buy, div_sel, mltbr, molot;

//ñèãíàëû óïðàâëåíèÿ îðäåðàìè
int zakr_buy, zakr_sel, otkr_buy, otkr_sel;

//âðåìÿ îòêðûòèÿ áàðà 1 íà òåêóùåì è ïðåäûäóùåì òèêå
datetime vrem_new, vrem_old;

//êîììåíòàðèé ê îðäåðó (ïðè÷èíà îòêðûòèÿ)
string prichina;

//=========================================================================
int init()
{  
   Comment("\nÇÀÏÓÑÊ ÑÎÂÅÒÍÈÊÀ");
   
   if(Period() != PERIOD_M5)
   { 
      MessageBox("Íóæíî âûáðàòü ïåðèîä M5"); 
   }
   
   if(Symbol() != "GBPUSD")
   {
      MessageBox("Íóæíî âûáðàòü âàëþòó GBP/USD");
   }
   
   vrem_old=Time[2];
   
   return(0);
}
//=========================================================================
int deinit()
{  
   return(0);
}
//=========================================================================
//+-----------------------------------------------------------------------+
int start()
{
   //ðàññòîÿíèÿ ìåæäó êðàéíèìè ñêîëüçÿùèìè ñðåäíèìè
   int dist_m5, dist_15, dist_h1; 
   
   
   //âðåìÿ îòêðûòèÿ áàðà 1 íà òåêóùåì òèêå
   vrem_new=Time[1];
   
   //åñëè ýòî íîâûé áàð
   if(vrem_new!=vrem_old)
   {      
      //îáíóëÿåì ñèãíàëû óïðàâëåíèÿ îðäåðàìè, âûïîëíÿåì àíàëèç è ðàñ÷åòû
      zakr_buy=0; zakr_sel=0; otkr_buy=0; otkr_sel=0; prichina="ÑÈÃÍÀËÎÂ ÍÅ ÁÛËÎ"; lt_koef=0;
   
      analyz_m5(veer_m5, dist_m5, prob_m5);
      
      analyz_15(veer_15, dist_15, prob_15);
      
      analyz_H1(veer_h1, dist_h1);
   
      stoch_crosM5 = analyz_stoch();
      
      prb_flt = proboy_fleta();
      
      
      hrn_bull = ophorn_bull(1);
      
      hrn_bear = ophorn_bear(1);
      
      prb_yz = prob_yzk(1);
      
      
      div_buy = diver_bull(4);
      
      div_sel = diver_bear(4);
      
      //ïåðåñå÷åíèå ñòîõàñòèêà è ñèãíàëüíîé ëèíèè â êðàéíåé çîíå íà Ì15
      stoh_per15 = cros_big_stoh(1);
      
      //íàõîäèì áëèæàéøèé áàð, ãäå åñòü ìîëîò è íàïðàâëåíèå ìîëîòà
      //åñëè ó íàñ åñòü äâà ìîëîòà, çàñ÷èòûâàåòñÿ òîëüêî áëèæàéøèé
      molot = 0; mltbr=0;
      
      for(mltbr=1; mltbr<20; mltbr++)
      {
         molot = opr_molot(mltbr);
         
         if(molot != 0) {break;}   
      }
      
         
   
      //ñèãíàë 1 : óçêèé âååð íà Ì5, áîëüøàÿ ñâå÷à, ïåðåñå÷åíèå ñòîõàñòèêà â êðàéíåé çîíå
      //----------------------------------------------------------------------
      if(dist_m5<YzM5) 
      {
         if((veer_m5>0)&&(veer_15>0)&&(veer_h1>0)&&(stoch_crosM5>0))
         {
            if((Open[1]+RazmTel*Point)<Close[1])
            {
               otkr_buy = 1;
               
               lt_koef++;
      
               prichina = "veer and stoch";
            }
         }
         //-------------------------------------------------------------------
         if((veer_m5<0)&&(veer_15<0)&&(veer_h1<0)&&(stoch_crosM5<0))
         {
            if((Open[1]-RazmTel*Point)>Close[1])
            {
               otkr_sel = 1;
               
               lt_koef++;
      
               prichina = "veer and stoch";
            }
         }
      }   
      //----------------------------------------------------------------------
      
      
      //ñèãíàë 2 : ïðîáîé âååðà ñðåäíèõ íà Ì5, ó ñâå÷è íåò çàäíåé òåíè
      //----------------------------------------------------------------------
      if(prob_m5>0) 
      {
         if((veer_m5>0)&&(veer_15>0)&&(veer_h1>0)&&(Open[1]==Low[1]))
         {
            otkr_buy = 1;
            
            lt_koef++;
      
            prichina = "proboy m5";
         }
      }
      //----------------------------------------------------------------------
      if(prob_m5<0)
      {  
         if((veer_m5<0)&&(veer_15<0)&&(veer_h1<0)&&(Open[1]==High[1]))
         {
            otkr_sel = 1;
            
            lt_koef++;
      
            prichina = "proboy m5";
         }
      }   
      //----------------------------------------------------------------------
      
      
      //ñèãíàë 3 : ïðîáîé óçêîãî ôëåòà ïî òðåíäó íà ãðàôèêå Ì5
      //----------------------------------------------------------------------
      if(prb_flt>0) 
      {
         if((veer_m5>0)&&(veer_15>0)&&(veer_h1>0))
         {
            otkr_buy = 1;
            
            lt_koef++;
      
            prichina = "proboy fleta";
         }
      }
      //----------------------------------------------------------------------
      if(prb_flt<0)
      {  
         if((veer_m5<0)&&(veer_15<0)&&(veer_h1<0))
         {
            otkr_sel = 1;
            
            lt_koef++;
      
            prichina = "proboy fleta";
         }
      }   
      //----------------------------------------------------------------------
      
      
      //ñèãíàë 4 : ïðîáîé ñêîëüçÿùèõ ñðåäíèõ íà Ì5 è íà Ì15, óçîñòü ÌÀ íà Ì15
      //----------------------------------------------------------------------
      if(prob_15>0) 
      {
         if((prob_m5>0)&&(veer_15>0)&&(veer_h1>0)&&(dist_15<YzM15))
         {
            otkr_buy = 1;
            
            lt_koef++;
      
            prichina = "proboy 3x";
         }
      }
      //----------------------------------------------------------------------
      if(prob_15<0)
      {  
         if((prob_m5<0)&&(veer_15<0)&&(veer_h1<0)&&(dist_15<YzM15))
         {
            otkr_sel = 1;
            
            lt_koef++;
      
            prichina = "proboy 3x";
         }
      }   
      //----------------------------------------------------------------------
      
      
      
      //ñèãíàë 5 : äèâåðãåíöèÿ ñòîõàñòèêà íà Ì5
      //----------------------------------------------------------------------
      if(div_buy>0) 
      {
         if((veer_m5>0)&&(veer_15>0)&&(veer_h1>0))
         {
            otkr_buy = 1;
            
            lt_koef++;
      
            prichina = "diver stoch";
         }
      }
      //----------------------------------------------------------------------
      if(div_sel>0)
      {  
         if((veer_m5<0)&&(veer_15<0)&&(veer_h1<0))
         {
            otkr_sel = 1;
            
            lt_koef++;
      
            prichina = "diver stoch";
         }
      }   
      //----------------------------------------------------------------------
      
      
      //ñèãíàë 6 : ìîëîò íà Ì5 ïî òðåíäó
      //----------------------------------------------------------------------
      if( (mltbr <= MolBar) && (dist_h1<YzH1) ) 
      {
         if( (molot>0) && (mltbr == iLowest(NULL,0,MODE_LOW,MolPer,1)) && (Open[1]<Close[1]) )
         {
            if((veer_m5>0)&&(veer_15>0)&&(veer_h1>0))
            {
               otkr_buy = 1;
            
               lt_koef++;
      
               prichina = "molot";
            }            
         }
      //----------------------------------------------------------------------
         if( (molot<0) && (mltbr == iHighest(NULL,0,MODE_HIGH,MolPer,1)) && (Open[1]>Close[1]) )
         {
            if((veer_m5<0)&&(veer_15<0)&&(veer_h1<0))
            {
               otkr_sel = 1;
            
               lt_koef++;
      
               prichina = "molot";
            }         
         }
      }   
      //----------------------------------------------------------------------
      
      
      //ñèãíàë 7 : ïåðåñå÷åíèå ñòîõàñòèêà íà Ì15 â êðàéíåé çîíå ïî òðåíäó
      //----------------------------------------------------------------------
      if(stoh_per15>0) 
      {
         if((veer_m5>0)&&(veer_15>0)&&(veer_h1>0))
         {
            otkr_buy = 1;
            
            lt_koef++;
      
            prichina = "stoh15";
         }            
      }
      //----------------------------------------------------------------------
      if(stoh_per15<0)
      {
         if((veer_m5<0)&&(veer_15<0)&&(veer_h1<0))
         {
            otkr_sel = 1;
            
            lt_koef++;
      
            prichina = "stoh15";
         }         
      } 
      //----------------------------------------------------------------------
      
      
      //ñèãíàë 8 : ãîðí (î÷åíü óçêèé âååð íà Ì5), öåíà ïðîáèâàåò äèàïàçîí
      //----------------------------------------------------------------------
      if(prb_yz>0) 
      {
         if((hrn_bull>0)&&(veer_15>0)&&(veer_h1>0)&&(hrn_bull<DalYz))
         {
            otkr_buy = 1;
            
            lt_koef++;
      
            prichina = "horn_bull";
         }            
      }
      //----------------------------------------------------------------------
      if(prb_yz<0) 
      {
         if((hrn_bear>0)&&(veer_15<0)&&(veer_h1<0)&&(hrn_bear<DalYz))
         {
            otkr_sel = 1;
            
            lt_koef++;
      
            prichina = "horn_bear";
         }            
      } 
      //----------------------------------------------------------------------
                                            
      
      
      //åñëè îòêðûâàåì ïîçèöèþ, òî çàêðûâàåì ïðîòèâîïîëîæíóþ
      
      if(otkr_buy==1)  {zakr_sel = 2;}  
      
      if(otkr_sel==1)  {zakr_buy = 2;}
      
      
      
      //åñëè çàêðûâàåì ïîçèöèþ, òî îòìåíÿåì ñèãíàë ê îòêðûòèþ
      
      if(zakr_buy==2)  {otkr_buy=0;}
      
      if(zakr_sel==2)  {otkr_sel=0;}
      
       
      //âûâîä íà ýêðàí ðåçóëüòàòîâ ðàñ÷åòîâ
      Comment("\nVEER_M5 = ",veer_m5,"   DIST_M5 = ",dist_m5,
      "\n\nVEER_15 = ",veer_15,"   DIST_15 = ",dist_15,
      "\n\nVEER_h1 = ",veer_h1,"   dist_h1 = ",dist_h1,
      "\n\nPRB_FLT = ",prb_flt,
      "\n\nSTOCH_CROSM5 = ",stoch_crosM5);
                 
   
      //ðàñ÷åòû âûïîëíåíû, òåïåðü ýòî íå íîâûé áàð
      vrem_old = vrem_new;
   }
   
   //çàêðûâàåì è ìîäèôèöèðóåì èìåþùèåñÿ îðäåðà
   perebor_orderov(zakr_buy, zakr_sel);  
   
   //ïîäñ÷èòûâàåì ëîòû îòêðûòûõ ïîçèöèé
   podschet_orderov(lot_buy ,lot_sel);
   
   //óñòàíîâêà áàÿ
   if((otkr_buy==1)&&(lot_buy<0.01))
   {
      ystanovit_buy(prichina, lt_koef);
   }
   
   //óñòàíîâêà ñåëà
   if((otkr_sel==1)&&(lot_sel<0.01))
   {
      ystanovit_sel(prichina, lt_koef);
   }
   
   return(0);
}
//+-----------------------------------------------------------------------+
//=========================================================================
//àíàëèç ñêîëüçÿùèõ ñðåäíèõ íà ãðàôèêå Ì5 (íà òåêóùåì ãðàôèêå)
void analyz_m5(int &veer, int &dist, int &prob)
{
   double ma[5];
   
   int v, n;
   
   double vma, nma, rast;
   
   veer = 0;  prob=0;
   
   //ñ÷èòûâàåì ñêîëüçÿùèå ñðåäíèå íà áàðå 1
   ma[0] = iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,1);
   ma[1] = iMA(NULL,0,55,0,MODE_EMA,PRICE_CLOSE,1);
   ma[2] = iMA(NULL,0,89,0,MODE_EMA,PRICE_CLOSE,1);
   ma[3] = iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,1);
   ma[4] = iMA(NULL,0,233,0,MODE_EMA,PRICE_CLOSE,1);
   
   //âåðõíÿÿ ñêîëüçÿùàÿ ñðåäíÿÿ
   v = ArrayMaximum(ma);
   vma = ma[v];
      
   //íèæíÿÿ ñêîëüçÿùàÿ ñðåäíÿÿ
   n = ArrayMinimum(ma);
   nma = ma[n];
   
   //ðàññòîÿíèå ìåæäó âåðõíåé è íèæíåé ÌÀ â ïóíêòàõ
   rast = (vma-nma)/Point;
   dist = NormalizeDouble(rast, 0);
   
   //îêðóãëèì òðè ëåãêèå ÌÀ äî 4 çíàêîâ ïîñëå çàïÿòîé
   ma[0] = NormalizeDouble(ma[0], Digits);
   ma[1] = NormalizeDouble(ma[1], Digits);
   ma[2] = NormalizeDouble(ma[2], Digits);
                  
   //âååð ââåðõ
   if( (ma[4]<ma[3]) && (ma[3]<ma[2]) && (ma[2]<=ma[1]) && (ma[1]<=ma[0]) ) {veer = 1;}
   
   //âååð âíèç
   if( (ma[4]>ma[3]) && (ma[3]>ma[2]) && (ma[2]>=ma[1]) && (ma[1]>=ma[0]) ) {veer =-1;}
   
   
   //ïðîáîé ââåðõ
   if((Open[1]<nma)&&(Close[1]>vma)) {prob = 1;}
   
   //ïðîáîé âíèç
   if((Open[1]>vma)&&(Close[1]<nma)) {prob =-1;}   
   
   return;  
}
//=========================================================================
//àíàëèç ñêîëüçÿùèõ ñðåäíèõ íà ãðàôèêå Ì15
void analyz_15(int &veer, int &dist, int &prob)
{
   double ma[5];
   
   int v, n;
   
   double vma, nma, rast, op_15, cl_15;
   
   veer = 0; prob=0;
   
   //ñ÷èòûâàåì ñêîëüçÿùèå ñðåäíèå íà áàðå 1
   ma[0] = iMA(NULL,PERIOD_M15,34,0,MODE_EMA,PRICE_CLOSE,1);
   ma[1] = iMA(NULL,PERIOD_M15,55,0,MODE_EMA,PRICE_CLOSE,1);
   ma[2] = iMA(NULL,PERIOD_M15,89,0,MODE_EMA,PRICE_CLOSE,1);
   ma[3] = iMA(NULL,PERIOD_M15,144,0,MODE_EMA,PRICE_CLOSE,1);
   ma[4] = iMA(NULL,PERIOD_M15,233,0,MODE_EMA,PRICE_CLOSE,1);
   
   //âåðõíÿÿ ñêîëüçÿùàÿ ñðåäíÿÿ
   v = ArrayMaximum(ma);
   vma = ma[v];
      
   //íèæíÿÿ ñêîëüçÿùàÿ ñðåäíÿÿ
   n = ArrayMinimum(ma);
   nma = ma[n];
   
   //ðàññòîÿíèå ìåæäó âåðõíåé è íèæíåé ÌÀ â ïóíêòàõ
   rast = (vma-nma)/Point;
   dist = NormalizeDouble(rast, 0);
   
   //îêðóãëèì äâå ëåãêèå ÌÀ äî 4 çíàêîâ ïîñëå çàïÿòîé
   ma[0] = NormalizeDouble(ma[0], Digits);
   ma[1] = NormalizeDouble(ma[1], Digits);
                  
   //âååð ââåðõ
   if( (ma[4]<ma[3]) && (ma[3]<ma[2]) && (ma[2]<ma[1]) && (ma[1]<=ma[0]) ) {veer = 1;}
   
   //âååð âíèç
   if( (ma[4]>ma[3]) && (ma[3]>ma[2]) && (ma[2]>ma[1]) && (ma[1]>=ma[0]) ) {veer =-1;}
   
   
   //îïðåäåëåíèå ïðîáîÿ òðåõ áûñòðûõ ñêîëüçÿùèõ ñðåäíèõ íà ãðàôèêå Ì15
   op_15 = iOpen(NULL,PERIOD_M15,1);
   
   cl_15 = iClose(NULL,PERIOD_M15,1);
   
   if((op_15>0)&&(cl_15>0))
   {
      if((op_15<ma[0])&&(op_15<ma[1])&&(op_15<ma[2]))
      {
         if((cl_15>ma[0])&&(cl_15>ma[1])&&(cl_15>ma[2])) {prob = 1;}
      }
   
      if((op_15>ma[0])&&(op_15>ma[1])&&(op_15>ma[2]))
      {
         if((cl_15<ma[0])&&(cl_15<ma[1])&&(cl_15<ma[2])) {prob =-1;}
      }
   }   
   
   return;  
}
//=========================================================================
//àíàëèç ñêîëüçÿùèõ ñðåäíèõ íà ãðàôèêå H1
void analyz_H1(int &veer, int &dist)
{
   double ma[5];
   
   int v, n;
   
   double vma, nma, rast;
   
   veer = 0;
   
   //ñ÷èòûâàåì ñêîëüçÿùèå ñðåäíèå íà áàðå 1
   ma[0] = iMA(NULL,PERIOD_H1,34,0,MODE_EMA,PRICE_CLOSE,1);
   ma[1] = iMA(NULL,PERIOD_H1,55,0,MODE_EMA,PRICE_CLOSE,1);
   ma[2] = iMA(NULL,PERIOD_H1,89,0,MODE_EMA,PRICE_CLOSE,1);
   ma[3] = iMA(NULL,PERIOD_H1,144,0,MODE_EMA,PRICE_CLOSE,1);
   ma[4] = iMA(NULL,PERIOD_H1,233,0,MODE_EMA,PRICE_CLOSE,1);
   
   //âåðõíÿÿ ñêîëüçÿùàÿ ñðåäíÿÿ
   v = ArrayMaximum(ma);
   vma = ma[v];
      
   //íèæíÿÿ ñêîëüçÿùàÿ ñðåäíÿÿ
   n = ArrayMinimum(ma);
   nma = ma[n];
   
   //ðàññòîÿíèå ìåæäó âåðõíåé è íèæíåé ÌÀ â ïóíêòàõ
   rast = (vma-nma)/Point;
   dist = NormalizeDouble(rast, 0);
                  
   //âååð ââåðõ
   if( (ma[4]<ma[3]) && (ma[3]<ma[2]) && (ma[2]<ma[1]) && (ma[1]<ma[0]) ) {veer = 1;}
   
   //âååð âíèç
   if( (ma[4]>ma[3]) && (ma[3]>ma[2]) && (ma[2]>ma[1]) && (ma[1]>ma[0]) ) {veer =-1;}
   
   return;  
}
//=========================================================================
//åñëè ïðàâèëüíûé âååð ðàñøèðÿåòñÿ èç î÷åíü óçêîãî èñòî÷íèêà, òî ýòî "ãîðí"
int ophorn_bull(int b)
{
   double ma5, ma4, ma3, ma2, ma1;
   
   double rast_i, rast_b;
   
   int i;
   
   //ñ÷èòûâàåì ñêîëüçÿùèå ñðåäíèå íà áàðå b
   ma1 = iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,b);
   ma2 = iMA(NULL,0,55,0,MODE_EMA,PRICE_CLOSE,b);
   ma3 = iMA(NULL,0,89,0,MODE_EMA,PRICE_CLOSE,b);
   ma4 = iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,b);
   ma5 = iMA(NULL,0,233,0,MODE_EMA,PRICE_CLOSE,b);
   
   //åñëè ýòî ïðàâèëüíûé âååð ââåðõ
   if( (ma5<ma4) && (ma4<ma3) && (ma3<ma2) && (ma2<ma1) )
   {
      rast_b = ma1 - ma5;
      
      //íà÷èíàåì ïðîñìîòð ïó÷êà ñêîëüçÿùèõ ñðåäíèõ íàçàä îò òî÷êè b
      for(i=(b+1); i<(b+300); i++)
      {
         //ñ÷èòûâàåì çíà÷åíèÿ ÌÀ
         ma1 = iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,i);
         ma2 = iMA(NULL,0,55,0,MODE_EMA,PRICE_CLOSE,i);
         ma3 = iMA(NULL,0,89,0,MODE_EMA,PRICE_CLOSE,i);
         ma4 = iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,i);
         ma5 = iMA(NULL,0,233,0,MODE_EMA,PRICE_CLOSE,i);
         
         ma1 = NormalizeDouble(ma1,Digits);
         ma2 = NormalizeDouble(ma2,Digits);
         ma3 = NormalizeDouble(ma3,Digits);
         ma4 = NormalizeDouble(ma4,Digits);
         ma5 = NormalizeDouble(ma5,Digits);
         
         //åñëè ïî÷òè ïðàâèëüíûé âååð ñîõðàíÿåòñÿ
         if( ((ma5<=ma3)&&(ma4<=ma3)&&(ma3<=ma2)&&(ma2<=ma1)) || ((ma5<=ma4)&&(ma4<=ma3)&&(ma3<=ma2)&&(ma3<=ma1)) )
         {
            rast_i = MathMax(ma2,ma1) - MathMin(ma5,ma4);
            
            //åñëè âååð ñòàíîâèòñÿ øèðå, ÷åì â òî÷êå bx îí íàì íå ïîäõîäèò
            if(rast_i > (rast_b+2*Point)) {return(0);}
            
            //èùåì áàð, ãäå âååð ñõîäèòñÿ â óçêèé èñòî÷íèê è âîçâðàùàåì åãî   
            if( (rast_i < (YzIst*Point)) && (rast_i < rast_b) ) {return(i);}
         }
         else {return(0);} 
      }     
   }
   
   return(0);   
}
//=========================================================================
//åñëè ïðàâèëüíûé âååð ðàñøèðÿåòñÿ èç î÷åíü óçêîãî èñòî÷íèêà, òî ýòî "ãîðí"
int ophorn_bear(int b)
{
   double ma5, ma4, ma3, ma2, ma1;
   
   double rast_i, rast_b;
   
   int i;
   
   //ñ÷èòûâàåì ñêîëüçÿùèå ñðåäíèå íà áàðå b
   ma1 = iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,b);
   ma2 = iMA(NULL,0,55,0,MODE_EMA,PRICE_CLOSE,b);
   ma3 = iMA(NULL,0,89,0,MODE_EMA,PRICE_CLOSE,b);
   ma4 = iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,b);
   ma5 = iMA(NULL,0,233,0,MODE_EMA,PRICE_CLOSE,b);
   
   //åñëè ýòî ïðàâèëüíûé âååð âíèç
   if( (ma5>ma4) && (ma4>ma3) && (ma3>ma2) && (ma2>ma1) )
   {
      rast_b = ma5 - ma1;
      
      //íà÷èíàåì ïðîñìîòð ïó÷êà ñêîëüçÿùèõ ñðåäíèõ íàçàä îò òî÷êè b
      for(i=(b+1); i<(b+300); i++)
      {
         //ñ÷èòûâàåì çíà÷åíèÿ ÌÀ
         ma1 = iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,i);
         ma2 = iMA(NULL,0,55,0,MODE_EMA,PRICE_CLOSE,i);
         ma3 = iMA(NULL,0,89,0,MODE_EMA,PRICE_CLOSE,i);
         ma4 = iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,i);
         ma5 = iMA(NULL,0,233,0,MODE_EMA,PRICE_CLOSE,i);
         
         ma1 = NormalizeDouble(ma1,Digits);
         ma2 = NormalizeDouble(ma2,Digits);
         ma3 = NormalizeDouble(ma3,Digits);
         ma4 = NormalizeDouble(ma4,Digits);
         ma5 = NormalizeDouble(ma5,Digits);
         
         //åñëè ïî÷òè ïðàâèëüíûé âååð ñîõðàíÿåòñÿ
         if( ((ma5>=ma3)&&(ma4>=ma3)&&(ma3>=ma2)&&(ma2>=ma1)) || ((ma5>=ma4)&&(ma4>=ma3)&&(ma3>=ma2)&&(ma3>=ma1)) )
         {
            rast_i = MathMax(ma5,ma4) - MathMin(ma2,ma1);
            
            //åñëè âååð ñòàíîâèòñÿ øèðå, ÷åì â òî÷êå b îí íàì íå ïîäõîäèò
            if(rast_i > (rast_b+2*Point)) {return(0);}
            
            //èùåì áàð, ãäå âååð ñõîäèòñÿ â óçêèé èñòî÷íèê è âîçâðàùàåì åãî   
            if( (rast_i < (YzIst*Point)) && (rast_i < rast_b) ) {return(i);}
         }
         else {return(0);} 
      }     
   }
   
   return(0);   
}
//=========================================================================
//îïðåäåëåíèå ïðîáîÿ äèàïàçîíà äëÿ ñèãíàëà óçîñòè íà áàðå b
int prob_yzk(int b)
{
   double lev_up, lev_dn;
   
   lev_up = High[iHighest(NULL,0,MODE_HIGH,KolBr,(b+1))];
   
   lev_dn = Low[iLowest(NULL,0,MODE_LOW,KolBr,(b+1))];
   
   if( (Open[1]<lev_up) && (Close[1]>lev_up) ) {return(1);}
   
   if( (Open[1]>lev_dn) && (Close[1]<lev_dn) ) {return(-1);}
   
   return(0);
}
//=========================================================================
//åñòü ëè äèâåðãåíöèÿ ñèãíàë ê ïîêóïêå íà áàðå b (ïðàâûé ìèíèìóì èíäèêàòîðà)
int diver_bull(int b)
{
   int i;
   
   double st1, st2, st3, st4, st5, st6, st7, stoh_min, yama1, lw2, lw1;
   
   if(b<4) {return(0);}
   
   st1 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (b-3));
   st2 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (b-2));
   st3 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (b-1));
   st4 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, b);
   st5 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (b+1));
   st6 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (b+2));
   st7 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (b+3));
   
   //åñëè òî÷êà b ýòî ÿìà íà èíäèêàòîðå ñòîõàñòèê
   if((st7>st4)&&(st6>st4)&&(st5>st4))
   {
      if((st4<st3)&&(st3<st2)&&(st2<st1))
      {
         //îáúÿâëÿåì åå ìèíèìóìîì
         yama1 = st4;
         
         stoh_min = st4;
         
         //ìèíèìàëüíàÿ öåíà â ýòîé îáëàñòè
         lw1 = Low[iLowest(NULL,0,MODE_LOW,7,(b-3))];
         
         for(i=(b+4); i<300; i++)
         {
            //öåíà íå äîëæíà îïóñêàòüñÿ íèæå ïåðâîãî ìèíèìóìà
            if(Low[i]<lw1) {return(0);}
            
            st1 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (i-3));
            st2 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (i-2));
            st3 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (i-1));
            st4 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, i);
            st5 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (i+1));
            st6 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (i+2));
            st7 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (i+3));
            
            if((st7>st4)&&(st6>st4)&&(st5>st4))
            {
               if((st4<st3)&&(st4<st2)&&(st4<st1))
               {
                  if( (st4<stoh_min) && (i>(b+RastDiv)) ) 
                  {
                     lw2 = Low[iLowest(NULL,0,MODE_LOW,7,(i-3))];
                     
                     if(lw2>lw1) {return(i);}
                  }
                  
                  //ïðàâûé ìèíèìóì äîëæåí áûòü íèæå âñåõ, êðîìå ëåâîãî
                  if(st4<yama1) {return(0);}
               }
            }
            
            if(st4<stoh_min) {stoh_min = st4;}               
         }
      }
   }
   
   return(0);
}
//=========================================================================
//åñòü ëè äèâåðãåíöèÿ ñèãíàë ê ïðîäàæå íà áàðå b (ïðàâûé ìàêñèìóì èíäèêàòîðà)
int diver_bear(int b)
{
   int i;
   
   double st1, st2, st3, st4, st5, st6, st7, stoh_max, xolm1, hi2, hi1;
   
   if(b<4) {return(0);}
   
   st1 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (b-3));
   st2 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (b-2));
   st3 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (b-1));
   st4 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, b);
   st5 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (b+1));
   st6 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (b+2));
   st7 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (b+3));
   
   //åñëè òî÷êà b ýòî õîëì íà èíäèêàòîðå ñòîõàñòèê
   if((st7<st4)&&(st6<st4)&&(st5<st4))
   {
      if((st4>st3)&&(st3>st2)&&(st2>st1))
      {
         //îáúÿâëÿåì åå ìàêñèìóìîì
         xolm1 = st4;
         
         stoh_max = st4;
         
         //ìàêñèìàëüíàÿ öåíà â ýòîé îáëàñòè
         hi1 = High[iHighest(NULL,0,MODE_HIGH,7,(b-3))];
         
         for(i=(b+4); i<300; i++)
         {
            //öåíà íå äîëæíà ïîäíèìàòüñÿ âûøå ïåðâîãî ìàêñèìóìà
            if(High[i]>hi1) {return(0);}
            
            st1 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (i-3));
            st2 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (i-2));
            st3 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (i-1));
            st4 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, i);
            st5 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (i+1));
            st6 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (i+2));
            st7 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, (i+3));
            
            if((st7<st4)&&(st6<st4)&&(st5<st4))
            {
               if((st4>st3)&&(st4>st2)&&(st4>st1))
               {
                  if( (st4>stoh_max) && (i>(b+RastDiv)) ) 
                  {
                     hi2 = High[iHighest(NULL,0,MODE_HIGH,7,(i-3))]; 
                     
                     if(hi2<hi1) {return(i);}
                  }
                  
                  //ïðàâûé ìàêñèìóì äîëæåí áûòü âûøå âñåõ, êðîìå ëåâîãî
                  if(st4>xolm1) {return(0);}
               }
            }
            
            if(st4>stoh_max) {stoh_max = st4;}               
         }
      }
   }
   
   return(0);
}
//=========================================================================
//àíàëèç ñòîõàñòèêà íà ãðàôèêå Ì5 (íà òåêóùåì ãðàôèêå)
int analyz_stoch()
{
   double st2, st1;
   
   double si2, si1;
   
   //ñòîõàñòèê íà áàðàõ 3, 2, 1
   st2 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, 2);
   st1 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_MAIN, 1);
   
   //ñèãíàëüíàÿ ëèíèÿ íà áàðàõ 3, 2, 1
   si2 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_SIGNAL, 2);
   si1 = iStochastic(NULL, 0, StohPer, 4, 3, MODE_SMA, 0, MODE_SIGNAL, 1);
   
   //ïåðåñå÷åíèå ñíèçó ââåðõ
   if((st2<si2)&&(st2<StochDn)&&(st1>si1)) {return(1);} 
   
   //ïåðåñå÷åíèå ñâåðõó âíèç
   if((st2>si2)&&(st2>StochUp)&&(st1<si1)) {return(-1);}  
   
   return(0);  
}
//=========================================================================
//àíàëèç ñòîõàñòèêà íà ãðàôèêå Ì15 (ïîèñê ïåðåñå÷åíèÿ ñ ñèãíàëüíîé ëèíèåé + ïîäòâåðæäåíèå äâèæåíèåì öåíû)
//ïðîâåðÿåòñÿ ôàêò íàëè÷èÿ ïåðåñå÷åíèÿ íà áàðå b Ì15 â êðàéíåé çîíå
int cros_big_stoh(int b)
{
   double st3, st2, st1;
   
   double si2, si1;
   
   double op1, cl1;
   
   //ñòîõàñòèê íà áàðàõ 3, 2, 1 (áàð 1 ýòî áàð b)
   st3 = iStochastic(NULL, PERIOD_M15, SthBigPr, 4, 3, MODE_SMA, 0, MODE_MAIN, (b+2));
   st2 = iStochastic(NULL, PERIOD_M15, SthBigPr, 4, 3, MODE_SMA, 0, MODE_MAIN, (b+1));
   st1 = iStochastic(NULL, PERIOD_M15, SthBigPr, 4, 3, MODE_SMA, 0, MODE_MAIN, b);
   
   //ñèãíàëüíàÿ ëèíèÿ íà áàðàõ 2, 1
   si2 = iStochastic(NULL, PERIOD_M15, SthBigPr, 4, 3, MODE_SMA, 0, MODE_SIGNAL, (b+1));
   si1 = iStochastic(NULL, PERIOD_M15, SthBigPr, 4, 3, MODE_SMA, 0, MODE_SIGNAL, b);
   
   //îòêðûòèå è çàêðûòèå áàðà 1 íà Ì15
   op1 = iOpen(NULL,PERIOD_M15,1);
   
   cl1 = iClose(NULL,PERIOD_M15,1);
   
   if( (op1 == 0) || (cl1 == 0) ) {return(0);}
   
   //ñèãíàë ê ïîêóïêå
   if((st2<si2)&&(st1>si1)&&(op1<cl1))
   {
      if( (st3<SthBigDn) || (st2<SthBigDn) ) {return(1);}
   }
   
   //ñèãíàë ê ïðîäàæå
   if((st2>si2)&&(st1<si1)&&(op1>cl1))
   {
      if( (st3>SthBigUp) || (st2>SthBigUp) ) {return(-1);}
   }   
   
   return(0);  
}
//=========================================================================
//ïîèñê ôëåòà íà çàäàííîì áàðå (âîçâðàùàåò êîëè÷åñòâî áàðîâ, âåðõ, íèç ôëåòà)
void poisk_fleta(int b, int &flt_kl, double &flt_up, double &flt_dn)
{
   double ver_fl, niz_fl, nash_razm;
   
   int i, kol;
   
   flt_kl=0; flt_up=0; flt_dn=0;
   
   kol=1;
   
   ver_fl=High[b];
      
   niz_fl=Low[b];
   
   //èùåì äëèííûé è óçêèé ó÷àñòîê
   for(i=(b+1); i<(b+500); i++)
   {
      if(High[i]>ver_fl) {ver_fl=High[i];}
      
      if(Low[i]<niz_fl)  {niz_fl=Low[i];}
      
      //åñëè ïðåâûñèëè ìàêñèìàëüíóþ âûñîòó âûõîäèì
      if((ver_fl-niz_fl)>(VisFlet*Point)) {return;}
      
      kol++;
      
      if(kol>MalFlet)
      {
         //íàø ðàçìàõ ôëåòà (äëÿ äàííîãî êîëè÷åñòâà áàðîâ)
         nash_razm=NormalizeDouble(((kol*KoefYzk)*Point),Digits);
         
         if((ver_fl-niz_fl)<nash_razm) 
         {
            flt_kl = kol;
            
            flt_up = ver_fl;
            
            flt_dn = niz_fl;
            
            return;
         }       
      }
   }
   
   return;
}
//=========================================================================
//åñòü ëè ïðîáîé ôëåòà íà ãðàôèêå Ì5 (íà òåêóùåì ãðàôèêå)
int proboy_fleta()
{
   //âåðõíÿÿ è íèæíÿÿ ãðàíèöà ôëåòà
   double v_gr, n_gr;
   
   //êîëè÷åñòâî áàðîâ âî ôëåòå
   int fk;
   
   //èùåì ôëåò íà áàðå 2 (ïðîáîé áàðîì 1)
   poisk_fleta(2,fk,v_gr,n_gr);
   
   if(fk>0)
   {
      if((Open[1]<v_gr)&&(Close[1]>v_gr)) {return( 1);}
      
      if((Open[1]>n_gr)&&(Close[1]<n_gr)) {return(-1);}
   }
   
   //èùåì ôëåò íà áàðå 3, ïðîáîé äâóìÿ áàðàìè (2 è 1)
   poisk_fleta(3,fk,v_gr,n_gr);
   
   if(fk>0)
   {
      if((Open[1]<v_gr)&&(Close[2]>v_gr)&&(Open[1]<Close[1])&&(Open[2]<Close[2])) {return( 1);}
      
      if((Open[1]>n_gr)&&(Close[2]<n_gr)&&(Open[1]>Close[1])&&(Open[2]>Close[2])) {return(-1);}
   }   
   
   return(0); 
}
//=========================================================================
//ïðîâåðêà, åñòü ëè ìîëîò íà áàðå br
int opr_molot(int br)
{
   double razm_br, ver_ten, niz_ten;
   
   razm_br = High[br] - Low[br];
   
   ver_ten = High[br] - MathMax(Open[br], Close[br]);
   
   niz_ten = MathMin(Open[br], Close[br]) - Low[br];
   
   if( razm_br > (MolRaz*Point) )
   {
      if( (100*niz_ten) > (BigTen*razm_br) )
      {
         if( (100*ver_ten) < (LitTen*razm_br) )
         {
            return(1);
         }
      }
   
      if( (100*ver_ten) > (BigTen*razm_br)  )
      {
         if( (100*niz_ten) < (LitTen*razm_br)  )
         {
            return(-1);
         }
      }
   }   
   
   return(0);
}
//=========================================================================
//ïîäñ÷åò ëîòîâ áàåâ è ñåëîâ íàøèõ îðäåðîâ (ïåðåâåäåííûå â á/ó íå ñ÷èòàåì)
void podschet_orderov(double &ob,double &os)
{
   int i=0, kol=0;
   
   //â íà÷àëå îáíóëÿåì îòâåòû
   ob=0; os=0;
   
   kol=OrdersTotal();
   
   if(kol<1) {return;}

   for(i=0; i<kol; i++) 
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if( (OrderSymbol() == Symbol()) && (OrderMagicNumber() == Magic) )
         {
            if(OrderType()==OP_BUY )
            {
               if( (OrderStopLoss()==0) || (OrderStopLoss() < OrderOpenPrice()) )
               {
                  ob=ob+OrderLots();
               }
            }
              

            if(OrderType()==OP_SELL)
            {
               if( (OrderStopLoss()==0) || (OrderStopLoss() > OrderOpenPrice()) )
               {
                  os=os+OrderLots();
               }
            }
         }                       
      }
   }      
   
   return;
}
//=========================================================================
//äåéñòâèÿ ñ îðäåðîì OP_BUY
void obr_open_buy(int cl_b)
{            
   bool close, modify;
   
   //çàêðûòèå âî èçáåæàíèå ïîòåðü
   if(cl_b==2)
   {
      close = OrderClose(OrderTicket(),OrderLots(),Bid,3,Purple);
      
      if(close == false)
      { 
         Print("Íå óäàëîñü çàêðûòü îðäåð OP_BUY êîä îøèáêè  ",GetLastError());
      }
      
      return;
   }     
   
   //ïåðåâîä ñòîï-ëîññà â áåçóáûòîê
   if(StopBy>9)
   {
      if( (OrderStopLoss()==0) || (OrderStopLoss()<OrderOpenPrice()) )
      {
         if( (Bid-StopBy*Point) > (OrderOpenPrice()+ProfBy*Point) )
         {
            modify = OrderModify(OrderTicket(),OrderOpenPrice(),(Bid-StopBy*Point),OrderTakeProfit(),0,Magenta);
            
            if(modify == false)
            {
               Print("Íå óäàëîñü ïåðåâåñòè â áåçóáûòîê îðäåð OP_BUY êîä îøèáêè  ",GetLastError());
            }
             
            return;
         }
      }
   }
   
   //ïåðåäâèæåíèå òðàëèíã-ñòîïà
   if(DistTral > 9)
   {
      if( (Bid - DistTral*Point) > OrderOpenPrice() )
      {
         if( (Bid - DistTral*Point) > (OrderStopLoss() + StepTral*Point) )
         {
            modify = OrderModify(OrderTicket(),OrderOpenPrice(),(Bid - DistTral*Point),OrderTakeProfit(),0,Red);
            
            if(modify == false)
            {
               Print("Íå óäàëîñü ìîäèôèöèðîâàòü òðàëèíã ñòîï äëÿ îðäåðà OP_BUY êîä îøèáêè  ",GetLastError());
            }
             
            return;            
         }
      }
   } 
    
   return;
}
//=========================================================================
//äåéñòâèÿ ñ îðäåðîì OP_SELL
void obr_open_sell(int cl_s)
{         
    bool close, modify;
   
    //çàêðûòèå âî èçáåæàíèå ïîòåðü
    if(cl_s==2)
    {
        close = OrderClose(OrderTicket(),OrderLots(),Ask,3,Purple);
      
        if(close == false)
        {
            Print("Íå óäàëîñü çàêðûòü îðäåð OP_SELL êîä îøèáêè  ",GetLastError());
        }
       
        return;
    }    
   
    //ïåðåâîä â ñòîï-ëîññà áåçóáûòîê
    if(StopBy>9)
    {
       if( (OrderStopLoss()==0) || (OrderStopLoss()>OrderOpenPrice()) )
       {
          if( (Ask+StopBy*Point) < (OrderOpenPrice()-ProfBy*Point) )
          {
             modify = OrderModify(OrderTicket(),OrderOpenPrice(),(Ask+StopBy*Point),OrderTakeProfit(),0,Aqua);
             
             if(modify == false)
             {
                 Print("Íå óäàëîñü ïåðåâåñòè â áåçóáûòîê îðäåð OP_SELL êîä îøèáêè  ",GetLastError());
             }
              
             return;
          }
       }
    }
    
   //ïåðåäâèæåíèå òðàëèíã-ñòîïà
   if(DistTral > 9)
   {
      if( (Ask + DistTral*Point) < OrderOpenPrice() )
      {
         if( (Ask + DistTral*Point) < (OrderStopLoss() - StepTral*Point) )
         {
            modify = OrderModify(OrderTicket(),OrderOpenPrice(),(Ask + DistTral*Point),OrderTakeProfit(),0,Red);
            
            if(modify == false)
            {
               Print("Íå óäàëîñü ìîäèôèöèðîâàòü òðàëèíã ñòîï äëÿ îðäåðà OP_SELL êîä îøèáêè  ",GetLastError());
            }
             
            return;            
         }
      }
   }       
                    
    return;
}
//=========================================================================
//Çàêðûòèå è ìîäèôèêàöèÿ îðäåðîâ íàøåé âàëþòû
void perebor_orderov(int zak_b, int zak_s)
{
   int type=0,kol=0,i=0;
   
   kol=OrdersTotal();
   
   if(kol<1) {return;}
   
   for(i=0; i<kol; i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if( (OrderSymbol() == Symbol()) && (OrderMagicNumber() == Magic) )
         {
            type=OrderType();
            
            if(type==OP_BUY)        
            {
               obr_open_buy(zak_b);
               continue;
            }
            
            
            if(type==OP_SELL)        
            {
               obr_open_sell(zak_s);
               continue;
            }             
         }
      }
   }
      
   return;
}
//=========================================================================
//óñòàíîâêà îðäåðà OP_BUY
void ystanovit_buy(string prich, int kf)
{
   double sl, tp, lt;
   
   int tiket;
   
   sl = 0;
   
   if(StopLos > 9)
   {
      sl = Bid-StopLos*Point;
   }
   
   tp = 0;
         
   if(TeikPro > 9)
   {
      tp = Ask+TeikPro*Point;
   }
   
   lt = LotPoz;
   
   if(kf > 1)
   {
      //åñëè ñîâïàëî íåñêîëüêî ñèãíàëîâ - îòêðûâàåì äâîéíîé ëîò
      lt = lt*2;
   }
   
   tiket = OrderSend(Symbol(),OP_BUY,lt,Ask,3,sl,tp,prich,Magic,0,Blue);
   
   if(tiket < 0)
   {
      Print("Íå óäàëîñü îòêðûòü îðäåð OP_BUY êîä îøèáêè  ",GetLastError());
   }
   
   return;
}
//=========================================================================
//óñòàíîâêà îðäåðà OP_SELL
void ystanovit_sel(string prich, int kf)
{
   double sl, tp, lt;
   
   int tiket;
   
   sl = 0;
   
   if(StopLos > 9) 
   {
      sl = Ask+StopLos*Point;
   }
   
   tp = 0;     
         
   if(TeikPro > 9) 
   {
      tp=Bid-TeikPro*Point;
   }
   
   lt = LotPoz;
   
   if(kf > 1) 
   {
      //åñëè ñîâïàëî íåñêîëüêî ñèãíàëîâ - îòêðûâàåì äâîéíîé ëîò
      lt = lt*2;
   }
   
   tiket = OrderSend(Symbol(),OP_SELL,lt,Bid,3,sl,tp,prich,Magic,0,Red);
   
   if(tiket < 0)
   {
      Print("Íå óäàëîñü îòêðûòü îðäåð OP_SELL êîä îøèáêè  ",GetLastError());
   }   
   
   return;
}
//=========================================================================
//THE END :)

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---