Author: Sergey
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 indicatorFractals
Miscellaneous
It opens Message Boxes to the user
0 Views
0 Downloads
0 Favorites
fantom
//+------------------------------------------------------------------+
//|                                                       fantom.mq4 |
//|                                                           Sergey |
//|                                                mserega@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Sergey"
#property link      "mserega@yandex.ru"
//+------------------------------------------------------------------+
//ñòàâèòü íà GBP/USD H1, íà÷àëüíûé êàïèòàë 1000 $

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

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

extern int      Otkat =  2;  //æäåì íåáîëüøîé îòêàò îò Open[0] äëÿ îòêðûòèÿ îðäåðà

extern int     PerPiv = 12;  //ïåðèîä äëÿ ðàñ÷åòà òî÷êè ðàçâîðîòà (ïèâîòà)
extern int     ChasPv =  4;  //÷àñ äëÿ ðàñ÷åòà òî÷êè ðàçâîðîòà    (ïèâîòà)

extern int      SiPer = 54;  //ïåðèîä èíäèêàòîðà Silver trend
extern int     SiProc = 32;  //ïðîöåíò îòêëîíåíèÿ îò âåðõà è íèçà
extern int      SiDal =  2;  //ìàêñèìàëüíûé íîìåð áàðà (ïðè îòêðûòèè), íà êîòîðîì ñòðåëêà SilverTrend

extern int     YzVeer = 82;  //ìàêñèìàëüíî äîïóñòèìîå ðàññòîÿíèå ìåæäó ÌÀ äëÿ âååðà

extern int     TenPrc = 23;  //ìàêñèìàëüíî äîïóñòèìûé ïðîöåíò òåíåé äëÿ áàðà 1 (ïðè ïðîáîå)

extern int     BigTen = 74;  //ìèíèìàëüíûé  ïðîöåíò äëèííîé  òåíè ìîëîòà
extern int     LitTen = 10;  //ìàêñèìàëüíûé ïðîöåíò êîðîòêîé òåíè ìîëîòà
extern int     MolRaz = 44;  //ìèíèìàëüíûé  ðàçìåð  ìîëîòà â ïóíêòàõ

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

extern int      HrBeg =  2;  //÷àñ íà÷àëà òîðãîâëè     (ïî òåðìèíàëó)
extern int      HrEnd = 17;  //÷àñ îêîí÷àíèÿ òîðãîâëè  (ïî òåðìèíàëó)

extern int     KolSec =  4;  //êîëè÷åñòâî ñåêóíä, ìåæäó èçìåðåíèÿìè ñêîðîñòè öåíû
extern int     Punkts = 28;  //êîëè÷åñòâî ïóíêòîâ, êîòîðûå öåíà ïðîõîäèò çà ýòî âðåìÿ

//ñêîëüçÿùèå ñðåäíèå  íà áàðå1
double ma[4];

//ïîñëåäíèå òðè ôðàêòàëà âåðøèíêè
double fv[3];

//ïîñëåäíèå òðè ôðàêòàëà íèçèíêè
double fn[3];

//âåðõíÿÿ è íèæíÿÿ ÌÀ, óðîâåíü ôðàêòàëà, ëîêàëüíûå ìèíèìóì è ìàêñèìóì
double ver_ma, niz_ma, fr_lev, lok_min, lok_max;

//ëîòû îòêðûòûõ ïîçèöèé, äíåâíîé ïèâîò, òÿæåëàÿ ÌÀ
double lb, ls, piv, big_ma;

//öåíû äëÿ ðàçëè÷íûõ òèêîâ
double prc_min, prc_max, prc_cur; 

//íîìåð ÌÀ â ìàññèâå, ñ÷åò÷èê öèêëà, íîìåð ôðàêòàëà â ìàññèâå, ïðîöåíò òåíåé
int vma, nma, b, fr_num, prc_tn;

//òðåíä ïî ÌÀ, âååð ÌÀ, ïðîáîé ôðàêòàëà, ìîëîò, áàð íà êîòîðîì ìîëîò
int ma_trend, veer, prob_fr,  molot, mltbr;

//ïåðåìåííûå silver trend, òåêóùèé ÷àñ (ïî òåðìèíàëó)
int si_trend, si_bar, chas;

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

//âðåìÿ îòêðûòèÿ áàðà 1 íà òåêóùåì è ïðåäûäóùåì òèêå, âðåìÿ ðàçëè÷íûõ òèêîâ
datetime vrem_new, vrem_old, tim_min, tim_max, tim_cur;

//òèï ïîñëåäíåãî ñèãíàëà ê îòêðûòèþ, ñòðîêà ñ íàçâàíèåì òðåíäà
string sigstr, trstr;

//ïîäõîäÿùåå ëè âðåìÿ äëÿ ñäåëîê
bool vrem;

//================================================================
//ïðè âêëþ÷åíèè ñîâåòíèêà óñòàíàâëèâàåì íà÷àëüíûå çíà÷åíèÿ
int init() 
{
   if(Period() != PERIOD_H1) 
   {
      MessageBox("Íóæíî âûáðàòü ãðàôèê H1  ");
   }
   
   prc_cur = Bid;
   prc_min = prc_cur;
   prc_max = prc_cur;
   
   tim_cur = TimeCurrent();
   tim_min = tim_cur;
   tim_max = tim_cur;
   
   return(0);
}
//================================================================
int deinit() 
{
   ObjectDelete("pvt");
   ObjectDelete("slv_up");
   ObjectDelete("slv_dn");
   
   return(0);
}
//================================================================
//+--------------------------------------------------------------+
int start()
{   
   //ñìîòðèì âðåìÿ îòêðûòèÿ áàðà 1 íà òåêóùåì òèêå
   vrem_new=Time[1];
   
   //ðàñ÷åòû âûïîëíÿåì òîëüêî ïðè ïîÿâëåíèè íîâîãî áàðà
   if(vrem_new!=vrem_old)
   {   
      //îáíóëÿåì ñèãíàëû
      zakr_buy=0; zakr_sel=0; otkr_buy=0; otkr_sel=0;
      
      //ñ÷èòûâàåì ñêîëüçÿùèå ñðåäíèå íà áàðå 1
      ma[0] = iMA(NULL,0,55,0,MODE_EMA,PRICE_CLOSE,1);
      ma[1] = iMA(NULL,0,89,0,MODE_EMA,PRICE_CLOSE,1);
      ma[2] = iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,1);
      ma[3] = iMA(NULL,0,233,0,MODE_EMA,PRICE_CLOSE,1);
      big_ma= iMA(NULL,0,377,0,MODE_EMA,PRICE_CLOSE,1);
      
      //ðàñ÷åò âåðõíåé ÌÀ
      vma = ArrayMaximum(ma);
      ver_ma = ma[vma];
      
      //ðàñ÷åò íèæíåé ÌÀ
      nma = ArrayMinimum(ma);
      niz_ma = ma[nma];
      
      //îïðåäåëåíèå òðåíäà ïî ÌÀ
      ma_trend = 0;
      
      veer = 0;
      
      //áû÷èé òðåíä
      if( (ma[3]<ma[2]) && (ma[2]<ma[1]) && (ma[2]<ma[0]) )
      {
         ma_trend = 1;
         
         if( (ma[1] < ma[0]) && ((ma[3] + YzVeer*Point) > ma[0]) )
         {
            veer = 1;
         }
      }
      
      //ìåäâåæèé òðåíä
      if( (ma[3]>ma[2]) && (ma[2]>ma[1]) && (ma[2]>ma[0]) )
      {
         ma_trend =-1;
         
         if( (ma[1] > ma[0]) && ((ma[3] - YzVeer*Point) < ma[0]) )
         {
            veer =-1;
         }         
      }
                 
      
      //îïðåäåëåíèå óðîâíåé ïîñëåäíèõ òðåõ ôðàêòàëîâ âåðøèí è ëîêàëüíîãî ìàêñèìóìà
      //ëîêàëüíûé ìàêñèìóì - ìàêñèìóì íà ó÷àñòêå îò áàðà 1 äî áëèæàéøåãî ôðàêòàëà - âåðøèíêè
      fr_num = 0;
      
      lok_max = High[1];
      
      for(b = 1; b < Bars; b++)
      {
         if ( (fr_num < 1) && (High[b] > lok_max) )
         {
            lok_max = High[b];
         }         
         
         fr_lev = iFractals(NULL,0,MODE_UPPER,b);
         
         if( (fr_lev > 0) && (b > 2) )
         {
            fv[fr_num] = fr_lev;
            
            fr_num = fr_num+1;
         }
         
         if(fr_num > 2)
         {
            break;
         }  
      }
      
      //îïðåäåëåíèå óðîâíåé ïîñëåäíèõ òðåõ ôðàêòàëîâ íèçèí è ëîêàëüíîãî ìèíèìóìà
      //ëîêàëüíûé ìèíèìóì - ìèíèìóì íà ó÷àñòêå îò áàðà 1 äî áëèæàéøåãî ôðàêòàëà - íèçèíêè
      fr_num = 0;
      
      lok_min = Low[1];
      
      for(b = 1; b < Bars; b++)
      {
         if ( (fr_num < 1) && (Low[b] < lok_min) )
         {
            lok_min = Low[b];
         }
         
         fr_lev = iFractals(NULL,0,MODE_LOWER,b);
         
         if( (fr_lev > 0) && (b > 2) )
         {
            fn[fr_num] = fr_lev;
            
            fr_num = fr_num+1;
         }
         
         if(fr_num > 2)
         {
            break;
         }  
      }
      
      //ñêîëüêî ôðàêòàëîâ ïðîáèòî áàðîì 1
      prob_fr = 0;
      
      if( (Open[1] < fv[0]) && (Close[1] > fv[0]) ) 
      {
         prob_fr++;
         
         if( (Open[1] < fv[1]) && (Close[1] > fv[1]) ) {prob_fr++;}
         if( (Open[1] < fv[2]) && (Close[1] > fv[2]) ) {prob_fr++;}
      }
      
      
      if( (Open[1] > fn[0]) && (Close[1] < fn[0]) ) 
      {
         prob_fr--;
         
         if( (Open[1] > fn[1]) && (Close[1] < fn[1]) ) {prob_fr--;}
         if( (Open[1] > fn[2]) && (Close[1] < fn[2]) ) {prob_fr--;}
      }            
      
      //îïðåäåëåíèå íàïðàâëåíèÿ ïîñëåäíåé ñòðåëêè Silver trend è áàðà íà êîòîðîì îíà áûëà (íà H1)
      opr_strel(si_trend, si_bar);
      
      trstr = "";
      
      if(si_trend > 0) {trstr = "BULL";}
      
      if(si_trend < 0) {trstr = "BEAR";}
    
      
      //ðàñ÷åò è ïðîðèñîâêà ïèâîòà (òî÷êè ðàçâîðîòà)
      piv=opr_piv();           
      
      //ïðîâåðêà ïîäõîäÿùåãî âðåìåíè (true, false)
      vrem=proverka_vremeni();
      
      //ñêîëüêî ïðîöåíòîâ ñîñòàâëÿþò òåíè äëÿ áàðà 1
      prc_tn = proc_teney();
      
      //áëèæàéøèé áàð, ãäå åñòü ìîëîò
      mltbr = 0;
      
      for(b = 1; b < 20; b++)
      {
         if(opr_molot(b) != 0)
         {
            mltbr = b;
            
            break;
         }
      }
      
      //ïðîâåðêà, åñòü ìîëîò èëè íåò íà çàäàííîì áàðå
      if(mltbr > 0)
      {
         molot = opr_molot(mltbr);
      }
      
      //ìîëîò ïî òðåíäó
      //-------------------------------------------------------
      if(mltbr <= MolBar)
      {
         if( (molot > 0) && (Low[mltbr] <= lok_min) ) 
         {
            if( (ma_trend > 0) && (si_trend > 0) )
            {
               zakr_sel = 2;
               
               otkr_buy = 2;
            
               sigstr = "ÌÎËÎÒ ÏÎ ÒÐÅÍÄÓ";
            }                   
         }
         //-------------------------------------------------------
         if( (molot < 0) && (High[mltbr] >= lok_max) )
         {
            if( (ma_trend < 0) && (si_trend < 0) )
            {
               zakr_buy = 2;
               
               otkr_sel = 2;
            
               sigstr = "ÌÎËÎÒ ÏÎ ÒÐÅÍÄÓ";
            }                   
         }
      }      
      //-------------------------------------------------------      
          
      //ÎÑÍÎÂÍÎÉ ÑÈÃÍÀË Ê ÎÒÊÐÛÒÈÞ ( ñòðåëêà íà èíäèêàòîðå SilverTrend íà áàðå 1 èëè 2)
      //-------------------------------------------------------
      if(vrem == true)
      {
          if( (si_trend == 1) && (Close[1] > piv) )
          {
              zakr_sel = 2;
               
              if(si_bar <= SiDal)
              {
                 otkr_buy = 2;
                 
                 sigstr = "ÑÒÐÅËÊÀ ÍÀ ÈÍÄÈÊÀÒÎÐÅ SILVER TREND";               
              }
          }
          //-------------------------------------------------------
          if( (si_trend == -1) && (Close[1] < piv) )
          {
              zakr_buy = 2;
               
              if(si_bar <= SiDal)
              {
                 otkr_sel = 2;
                 
                 sigstr = "ÑÒÐÅËÊÀ ÍÀ ÈÍÄÈÊÀÒÎÐÅ SILVER TREND";               
              }
          }
      }
      //-------------------------------------------------------
      
      //îäíà äëèííàÿ ñâå÷à ñ êîðîêòèìè òåíÿìè ïðîáèâàåò âñå 4 ÌÀ
      //-------------------------------------------------------
      if( (Open[1] < niz_ma) && (Close[1] > ver_ma) && (vrem == true) )
      {
         if( (prob_fr > 0) || (ma_trend > 0) || (Close[1] > piv) || (big_ma < niz_ma))
         {
            zakr_sel = 2;
               
            if(prc_tn < TenPrc)
            {
               otkr_buy = 2;
               
               sigstr = "ÏÐÎÁÎÉ 4Õ ÌÀ";              
            }
         }
      }
      //-------------------------------------------------------
      if( (Open[1] > ver_ma) && (Close[1] < niz_ma) && (vrem == true) )
      {
         if( (prob_fr < 0) || (ma_trend < 0) || (Close[1] < piv) || (big_ma > ver_ma))
         {
            zakr_buy = 2;
               
            if(prc_tn < TenPrc)
            {
               otkr_sel = 2;
               
               sigstr = "ÏÐÎÁÎÉ 4Õ ÌÀ";              
            }
         }
      }
      //-------------------------------------------------------
      
      //ïðîáîé äâóõ ÌÀ è ôðàêòàëà îäíîé ñâå÷åé ïî òðåíäó ïîñëå îòêàòà (íå îòëàæåíî)
      //-------------------------------------------------------
      if( (ma_trend > 0) && (fn[1] > lok_min) && (vrem == true) )
      {
         if( (Open[1]<ma[2]) && (Open[1]<ma[1]) && (Close[1]>ma[2]) && (Close[1]>ma[1]) )
         {
            if(prob_fr > 0)
            {
               zakr_sel = 2;
               
               if( (prc_tn < TenPrc) && (Close[1] > piv) )
               {
                  otkr_buy = 2;
                  
                  sigstr = "ÏÐÎÁÎÉ ÄÂÓÕ ÌÀ È ÔÐÀÊÒÀËÀ ÏÎ ÒÐÅÍÄÓ";               
               }                          
            }
         }
      }
      //-------------------------------------------------------
      if( (ma_trend < 0) && (fv[1] < lok_max) && (vrem == true) )
      {
         if( (Open[1]>ma[2]) && (Open[1]>ma[1]) && (Close[1]<ma[2]) && (Close[1]<ma[1]) )
         {
            if(prob_fr < 0)
            {
               zakr_buy = 2;
               
               if( (prc_tn < TenPrc) && (Close[1] < piv) )
               {
                  otkr_sel = 2;
                  
                  sigstr = "ÏÐÎÁÎÉ ÄÂÓÕ ÌÀ È ÔÐÀÊÒÀËÀ ÏÎ ÒÐÅÍÄÓ";              
               }                          
            }
         }
      }      
      //-------------------------------------------------------
      
      //ïðîáîé äâóõ ôðàêòàëîâ ïðè óçêîì âååðå ÌÀ
      //-------------------------------------------------------
      if( (veer > 0) && (prob_fr > 1) && (vrem == true) )
      {
         zakr_sel = 2;
               
         if(prc_tn < TenPrc)
         {
            otkr_buy = 2;
            
            sigstr = "ÏÐÎÁÎÉ ÄÂÓÕ ÔÐÀÊÒÀËÎÂ ÏÐÈ ÓÇÊÎÌ ÂÅÅÐÅ";               
         }      
      }
      //-------------------------------------------------------
      if( (veer < 0) && (prob_fr <-1) && (vrem == true) )
      {
         zakr_buy = 2;
            
         if(prc_tn < TenPrc)
         {
            otkr_sel = 2;
            
            sigstr = "ÏÐÎÁÎÉ ÄÂÓÕ ÔÐÀÊÒÀËÎÂ ÏÐÈ ÓÇÊÎÌ ÂÅÅÐÅ";               
         }      
      }      
      //------------------------------------------------------      
      
      //òåêóùèé ÷àñ (ïî òåðìèíàëó)
      chas = TimeHour(Time[0]);
      
      //â ýòè ÷àñû ñäåëêè íå îòêðûâàåì
      if( (chas == 14) || (chas == 6) )
      {
         otkr_buy = 0;
         otkr_sel = 0;
      }      
      
      //òåïåðü ýòî íå íîâûé áàð
      vrem_old = vrem_new;                                                                  
   }
   
   //ÇÀÊÐÛÒÈÅ ÏÎÇÈÖÈÈ, ÅÑËÈ ÖÅÍÀ ÄÅËÀÅÒ ÐÅÇÊÈÉ ÐÛÂÎÊ ÏÐÎÒÈÂ ÍÅÅ
   //-------------------------------------------------------------
   
   //ñ÷èòûâàåì âðåìÿ è öåíó äëÿ òåêóùåãî òèêà
   tim_cur = TimeCurrent();
   prc_cur = Bid;
   
   //çàïîìèíàåì òèê ñ ìèíèìàëüíîé öåíîé
   if(prc_cur <= prc_min)
   {
      prc_min = prc_cur;
      tim_min = tim_cur;   
   }
   
   //çàïîìèíàåì òèê ñ ìàêñèìàëüíîé öåíîé
   if(prc_cur >= prc_max)
   {
      prc_max = prc_cur;
      tim_max = tim_cur;
   }
   
   
   //ìèíèìóì áûë íåäàâíî
   if( (tim_cur - tim_min) < KolSec)
   {
      //öåíà çàìåòíî äâèíóëàñü ââåðõ - çàêðûâàåì ñåë
      if( prc_cur >(prc_min + Punkts*Point) ) 
      {
         zakr_sel = 2;
      }
   }
   else
   {
      //ñáðîñ ìèíèìóìà
      prc_min = prc_cur;
      tim_min = tim_cur;    
   }
   
   
   //ìàêñèìóì áûë íåäàâíî
   if( (tim_cur - tim_max) < KolSec)
   {
      //öåíà çàìåòíî äâèíóëàñü âíèç - çàêðûâàåì áàé
      if( prc_cur < (prc_max - Punkts*Point) ) 
      {
         zakr_buy = 2;
      }
   }
   else
   {
      //ñáðîñ ìàêñèìóìà
      prc_max = prc_cur;
      tim_max = tim_cur;   
   }
   //-------------------------------------------------------------   
        
   //çàêðûâàåì è ìîäèôèöèðóåì èìåþùèåñÿ îðäåðà
   perebor_orderov();
   
   //ïîäñ÷èòûâàåì îòêðûòûå ïîçèöèè
   podschet_orderov(lb,ls);
   
   //åñëè öåíà ñäåëàëà ñèëüíûé õîä, íå îòêðûâàåì ñäåëêè ïðîòèâ ýòîãî äâèæåíèÿ
   if( (Bid>ver_ma) && (Bid>fv[2]) && (Bid>fv[1]) && (molot != -1) ) 
   {
      otkr_sel = 0;
   }
   
   if( (Bid<niz_ma) && (Bid<fn[2]) && (Bid<fn[1]) && (molot !=  1) )
   {
      otkr_buy = 0;
   }   
   
   //ïðîâåðÿåì, ÷òî ó íàñ ïîëó÷èëîñü
   Comment("\nSI_TREND = ",trstr,"     SI_BAR = ",si_bar,
   "\n\nZAKR_BUY = ",zakr_buy,
   "\n\nZAKR_SEL = ",zakr_sel,
   "\n\nPRC_TN = ",prc_tn,
   "\n\nMOLOT = ",mltbr,  
   "\n\nPIVOT  = ",piv);   
      
   //ñòàâèì íîâûé îðäåð åñëè íóæíî
   ystanovka_ordera();
  
   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())
         {
            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;
}
//================================================================
//îïðåäåëåíèå çàêðûòèÿ áàðà ââåðõó èëè âíèçó äèàïàçîíà Silver Trend
int silv_cl(int b)
{
   int i;
   double pik, dno, lev_up, lev_dn, otkl, cur;
   
   //íàõîäèì âåðõ è íèç äèàïàçîíà
   pik = High[b];
   
   dno = Low[b];
   
   for(i=b; i<(b+SiPer); i++)
   {
      cur = High[i];
      
      if(cur > pik) 
      {
         pik = cur;
      }
      
      
      cur = Low[i];
      
      if(cur < dno)
      {
         dno = cur;
      } 
   }

   //îòêëîíåíèå âíóòðü äèàïàçîíà íà çàäàííûé ïðîöåíò
   otkl=( (pik-dno)*SiProc )/100;
   
   //êðèòè÷åñêèå óðîâíè
   lev_up=NormalizeDouble((pik-otkl),Digits);
   lev_dn=NormalizeDouble((dno+otkl),Digits);
   
   //ïðîðèñîâêà òåêóùèõ êðèòè÷åñêèõ óðîâíåé
   if(b == 1)
   {
      ObjectDelete("slv_up");
      ObjectCreate("slv_up",OBJ_HLINE,0,Time[1],lev_up);
      ObjectSet("slv_up",OBJPROP_STYLE,STYLE_DASH);
      ObjectSet("slv_up",OBJPROP_COLOR,Aqua);
          
      ObjectDelete("slv_dn");
      ObjectCreate("slv_dn",OBJ_HLINE,0,Time[1],lev_dn);
      ObjectSet("slv_dn",OBJPROP_STYLE,STYLE_DASH);
      ObjectSet("slv_dn",OBJPROP_COLOR,Aqua);   
   }   
   
   //öåíà ðàñòåò è çàêðûëàñü âûøå óðîâíÿ
   if( (Close[b] > Open[b]) && (Close[b] > lev_up) ) 
   {
      return( 1);
   }
   
   //öåíà ïàäàåò è çàêðûëàñü íèæå óðîâíÿ
   if( (Close[b] < Open[b]) && (Close[b] < lev_dn) )
   {
      return(-1);
   }
   
   return(0);
}
//================================================================
//îïðåäåëåíèå íàïðàâëåíèÿ ñòðåëêè è áàðà íà êîòîðîì îíà áûëà
void opr_strel(int &s_trend, int &s_bar)
{
   int i, bv, bn, cur_zakr;
   
   //îáíóëÿåì îòâåòû
   s_trend=0; s_bar=0; bv=0; bn=0;
   
   //èùåì äâå òî÷êè ñëåâà îò áàðà 1 (òàì, ãäå öåíà çàêðûëàñü ââåðõó è âíèçó äèàïàçîíà)
   for(i=1; i<Bars; i++)
   {
      cur_zakr=silv_cl(i);
      
      if( (cur_zakr > 0) && (i > bv) )
      {
         bv=i;
      }
      
      if( (cur_zakr < 0) && (i > bn) )
      {
         bn=i;
      }      

      //íàéäåíû îáå òî÷êè - ñòîï
      if( (bv > 0) && (bn > 0) )
      {
         break;
      }      
   }
   
   //òðåíä ñíà÷àëà áûë âíèç, à ïîòîì ðàçâåðíóëñÿ ââåðõ
   if(bn > bv) 
   {
      s_trend = 1;
      s_bar = bv;
   }
   
   //òðåíä ñíà÷àëà áûë ââåðõ, à ïîòîì ðàçâåðíóëñÿ âíèç
   if(bv > bn) 
   {
      s_trend = -1;
      s_bar = bn;
   }   
   
   return;   
}
//================================================================
//ðàñ÷åò ïèâîòà (òî÷êè ðàçâîðîòà) äåëàåòñÿ â îïðåäåëåííûé ÷àñ
double opr_piv()
{
   int br, sth;
   double h, l, c, otv;
   
   //íàõîäèì áàð, íà êîòîðîì áûë ñòàðòîâûé ÷àñ
   for(br = 1; br<30; br++)
   {
      if( ChasPv == TimeHour(Time[br]) )
      {
         sth = br;
         break;   
      }
   }
   
   //ðàñ÷åò ïèâîòà (ìàêñèìóì + ìèíèìóì + çàêðûòèå ïîäåëèòü íà 3)
   c=Close[sth];
   h=High[iHighest(NULL,0,MODE_HIGH,PerPiv,sth)];
   l=Low[iLowest(NULL,0,MODE_LOW,PerPiv,sth)];
   
   otv=(h+l+c)/3;
   otv=NormalizeDouble(otv,Digits);
   
   //ïðîðèñîâêà ïèâîòà
   ObjectDelete("pvt");
   ObjectCreate("pvt",OBJ_HLINE,0,Time[1],otv);
   ObjectSet("pvt",OBJPROP_STYLE,STYLE_DASH);
   ObjectSet("pvt",OBJPROP_COLOR,Magenta);
            
   return(otv);
}
//================================================================
//ðàññ÷åò äëèíû òåíåé â ïðîöåíòàõ äëÿ áàðà 1
int proc_teney()
{
   double telo, obsh, teni, ptn;
   
   obsh = (High[1] - Low[1])/Point;
   
   telo = MathMax(Open[1], Close[1]) - MathMin(Open[1], Close[1]);
   
   telo = telo/Point;
   
   teni = obsh - telo;
   
   //â ïðîöåíòàõ (ïðîâåðêà ÷òîáû íå áûëî äåëåíèÿ íà 0)
   if(obsh > 0)
   {
      ptn = (teni*100)/obsh;
   
      ptn = NormalizeDouble(ptn,0);
   }
   else
   {
      return(100);
   }
   
   return(ptn);
}
//================================================================
//ïðîâåðêà, åñòü ëè ìîëîò íà áàðå 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);
}
//================================================================
//ïîäõîäÿùåå âðåìÿ äëÿ ñäåëêè èëè íåò
bool proverka_vremeni()
{
   int h=TimeHour(TimeCurrent());
   
   if( (h >= HrBeg) && (h <= HrEnd) ) 
   {
      return (true);
   }
   
   return(false);
}
//================================================================
//Êîäû îøèáîê, âîçâðàùàåìûå òîðãîâûì ñåðâåðîì
void print_error(int error)
{
   string error_string;
  
   switch(error)
   {
      case 0:   error_string="Òîðãîâàÿ îïåðàöèÿ ïðîøëà óñïåøíî.";                                                                                                                        break;
      case 1:   error_string="OrderModify ïûòàåòñÿ èçìåíèòü óæå óñòàíîâëåííûå çíà÷åíèÿ òàêèìè æå çíà÷åíèÿìè. Íóæíî èçìåíèòü îäíî èëè íåñêîëüêî çíà÷åíèé è ïîâòîðèòü ïîïûòêó.";           break;
      case 2:   error_string="Îáùàÿ îøèáêà. Ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé äî âûÿñíåíèÿ îáñòîÿòåëüñòâ. Âîçìîæíî ïåðåçàãðóçèòü îïåðàöèîííóþ ñèñòåìó è êëèåíòñêèé òåðìèíàë.";    break;
      case 3:   error_string="Â òîðãîâóþ ôóíêöèþ ïåðåäàíû íåïðàâèëüíûå ïàðàìåòðû.Íàïðèìåð, íåïðàâèëüíûé ñèìâîë, íåîïîçíàííàÿ òîðãîâàÿ îïåðàöèÿ. Íåîáõîäèìî èçìåíèòü ëîãèêó ïðîãðàììû";   break;
      case 4:   error_string="Òîðãîâûé ñåðâåð çàíÿò. Ìîæíî ïîâòîðèòü ïîïûòêó ÷åðåç äîñòàòî÷íî áîëüøîé ïðîìåæóòîê âðåìåíè (îò íåñêîëüêèõ ìèíóò).";                                        break;
      case 5:   error_string="Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà. Íåîáõîäèìî óñòàíîâèòü ïîñëåäíþþ âåðñèþ êëèåíòñêîãî òåðìèíàëà.";                                                       break;
      case 6:   error_string="Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì. Íåîáõîäèìî óáåäèòüñÿ, ÷òî ñâÿçü íå íàðóøåíà (íàïðèìåð, ïðè ïîìîùè ôóíêöèè IsConnected)  è ïîâòîðèòü ïîïûòêó";               break;
      case 8:   error_string="Ñëèøêîì ÷àñòûå çàïðîñû. Íåîáõîäèìî óìåíüøèòü ÷àñòîòó çàïðîñîâ, èçìåíèòü ëîãèêó ïðîãðàììû.";                                                                break;
      case 64:  error_string="Ñ÷åò çàáëîêèðîâàí. Íåîáõîäèìî ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé.";                                                                                  break;
      case 65:  error_string="Íåïðàâèëüíûé íîìåð ñ÷åòà. Íåîáõîäèìî ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé.";                                                                           break;
      case 128: error_string="Èñòåê ñðîê îæèäàíèÿ ñîâåðøåíèÿ ñäåëêè. Íåîáõîäèìî óáåäèòüñÿ, ÷òî òîðãîâàÿ îïåðàöèÿ äåéñòâèòåëüíî íå ïðîøëà";                                               break;
      case 129: error_string="Íåïðàâèëüíàÿ öåíà bid èëè ask, âîçìîæíî, íåíîðìàëèçîâàííàÿ öåíà. Íåîáõîäèìî îáíîâèòü äàííûå ôóíêöèåé RefreshRates è ïîâòîðèòü ïîïûòêó.";                   break;
      case 130: error_string="Ñëèøêîì áëèçêèå ñòîïû èëè íåïðàâèëüíî ðàññ÷èòàííûå èëè íåíîðìàëèçîâàííûå öåíû â ñòîïàõ ";                                                                  break;
      case 131: error_string="Íåïðàâèëüíûé îáúåì, îøèáêà â ãðàíóëÿöèè îáúåìà. Íåîáõîäèìî ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé è èçìåíèòü ëîãèêó ïðîãðàììû.";                         break;
      case 132: error_string="Ðûíîê çàêðûò. Ìîæíî ïîâòîðèòü ïîïûòêó ÷åðåç äîñòàòî÷íî áîëüøîé ïðîìåæóòîê âðåìåíè (îò íåñêîëüêèõ ìèíóò).";                                                 break;
      case 133: error_string="Òîðãîâëÿ çàïðåùåíà. Íåîáõîäèìî ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé.";                                                                                 break;
      case 134: error_string="Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè. Ïîâòîðÿòü ñäåëêó ñ òåìè æå ïàðàìåòðàìè íåëüçÿ.";                                                               break;
      case 135: error_string="Öåíà èçìåíèëàñü. Ìîæíî áåç çàäåðæêè îáíîâèòü äàííûå ïðè ïîìîùè ôóíêöèè RefreshRates è ïîâòîðèòü ïîïûòêó";                                                  break;
      case 136: error_string="Íåò öåí. Áðîêåð ïî êàêîé-òî ïðè÷èíå (íàïðèìåð, â íà÷àëå ñåññèè öåí íåò, íåïîäòâåðæäåííûå öåíû, áûñòðûé ðûíîê) íå äàë öåí èëè îòêàçàë.";                    break;
      case 138: error_string="Çàïðîøåííàÿ öåíà óñòàðåëà, ëèáî ïåðåïóòàíû bid è ask. Ìîæíî áåç çàäåðæêè îáíîâèòü äàííûå ïðè ïîìîùè ôóíêöèè RefreshRates è ïîâòîðèòü ïîïûòêó!";            break;
      case 139: error_string="Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ. Íåîáõîäèìî ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé è èçìåíèòü ëîãèêó ïðîãðàììû";                                 break;
      case 140: error_string="Ðàçðåøåíà òîëüêî ïîêóïêà. Ïîâòîðÿòü îïåðàöèþ SELL íåëüçÿ.";                                                                                                break;
      case 141: error_string="Ñëèøêîì ìíîãî çàïðîñîâ. Íåîáõîäèìî óìåíüøèòü ÷àñòîòó çàïðîñîâ, èçìåíèòü ëîãèêó ïðîãðàììû.";                                                                break;
      case 145: error_string="Ìîäèôèêàöèÿ çàïðåùåíà, òàê êàê îðäåð ñëèøêîì áëèçîê ê ðûíêó è çàáëîêèðîâàí èç-çà âîçìîæíîãî ñêîðîãî èñïîëíåíèÿ";                                           break;
      case 146: error_string="Ïîäñèñòåìà òîðãîâëè çàíÿòà. Ïîâòîðèòü ïîïûòêó òîëüêî ïîñëå òîãî, êàê ôóíêöèÿ IsTradeContextBusy âåðíåò FALSE.";                                            break;
      case 147: error_string="Èñïîëüçîâàíèå äàòû èñòå÷åíèÿ îðäåðà çàïðåùåíî áðîêåðîì. Îïåðàöèþ ìîæíî ïîâòîðèòü òîëüêî â òîì ñëó÷àå, åñëè îáíóëèòü ïàðàìåòð expiration";                  break;
      case 148: error_string="Êîëè÷åñòâî îòêðûòûõ è îòëîæåííûõ îðäåðîâ äîñòèãëî ïðåäåëà, óñòàíîâëåííîãî áðîêåðîì";                                                                       break;
      case 149: error_string="Ïîïûòêà îòêðûòü ïðîòèâîïîëîæíóþ ïîçèöèþ ê óæå ñóùåñòâóþùåé â ñëó÷àå, åñëè õåäæèðîâàíèå çàïðåùåíî. ";                                                       break;
      case 150: error_string="Ïîïûòêà çàêðûòü ïîçèöèþ ïî èíñòðóìåíòó â ïðîòèâîðå÷èè ñ ïðàâèëîì FIFO. Ñíà÷àëà íåîáõîäèìî çàêðûòü áîëåå ðàííèå ñóùåñòâóþùèå ïîçèöèè ";                     break;
   }
  
   Print("ÎØÈÁÊÀ ÒÎÐÃÎÂÎÉ ÎÏÅÐÀÖÈÈ : "+error_string);
}
//================================================================
//äåéñòâèÿ ñ îðäåðîì OP_BUY
void obr_open_buy()
{            
   bool close, modify;
   
   //çàêðûòèå âî èçáåæàíèå ïîòåðü
   if(zakr_buy==2)
   {
      close = OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
      
      if(close == false)
      { 
         print_error(GetLastError());
      }
      
      return;
   }     
   
   //ïåðåâîä ñòîï-ëîññà â áåçóáûòîê
   if(StopBy>7)
   {
      if( (OrderStopLoss()==0) || (OrderStopLoss()<OrderOpenPrice()) )
      {
         if( (Bid-StopBy*Point) > (OrderOpenPrice()+ProfBy*Point) )
         {
            modify = OrderModify(OrderTicket(),OrderOpenPrice(),(Bid-StopBy*Point),OrderTakeProfit(),0,Aqua);
            
            if(modify == false)
            {
               print_error(GetLastError());
            }
             
            return;
         }
      }
   }   
    
   return;
}
//================================================================
//äåéñòâèÿ ñ îðäåðîì OP_SELL
void obr_open_sell()
{         
    bool close, modify;
   
    //çàêðûòèå âî èçáåæàíèå ïîòåðü
    if(zakr_sel==2)
    {
        close = OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
      
        if(close == false)
        {
            print_error(GetLastError());
        }
       
        return;
    }    
   
    //ïåðåâîä â ñòîï-ëîññà áåçóáûòîê
    if(StopBy>7)
    {
       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_error(GetLastError());
             }
              
             return;
          }
       }
    }   
                    
    return;
}
//================================================================
//Çàêðûòèå è ìîäèôèêàöèÿ îðäåðîâ íàøåé âàëþòû
void perebor_orderov()
{
   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())
         {
            type=OrderType();
            
            if(type==OP_BUY)        
            {
               obr_open_buy();
               continue;
            }
            
            
            if(type==OP_SELL)        
            {
               obr_open_sell();
               continue;
            }             
         }
      }
   }
      
   return;
}
//================================================================
//óñòàíîâêà íîâîãî îðäåðà
void ystanovka_ordera()
{
   double sl, tp;
   
   int ticket;
   
   sl = 0; tp = 0; ticket = 0;
   
   if( (zakr_buy==0) && (otkr_buy>0) && (lb<0.01) )
   {
      //æäåì, êîãäà öåíà íåìíîãî îïóñòèòñÿ
      if( Bid < (Open[0]-Otkat*Point) )
      {
         if(StopLos>9) 
         {
            sl = Bid - StopLos*Point;
         }
         
         if(TeikPro>9) 
         {
            tp = Ask + TeikPro*Point;
         }
                     
         ticket = OrderSend(Symbol(),OP_BUY,0.01,Ask,3,sl,tp,sigstr,0,0,Blue);
            
         if(ticket < 0)
         {
            print_error(GetLastError());
         }
      }
   }
   
   //-------------------------------------------------------------
   
   if( (zakr_sel==0) && (otkr_sel>0) && (ls<0.01) )
   { 
      //æäåì, êîãäà öåíà íåìíîãî ïîäíèìåòñÿ
      if( Bid > (Open[0]+Otkat*Point) )
      {
         if(StopLos>9)
         {
            sl = Ask + StopLos*Point;
         }
         
         if(TeikPro>9) 
         {
            tp = Bid - TeikPro*Point;
         }            
               
         ticket = OrderSend(Symbol(),OP_SELL,0.01,Bid,3,sl,tp,sigstr,0,0,Magenta);
            
         if(ticket < 0)
         {
            print_error(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 ---