ExpertCLOR_2MA&StATR_v01

Author: ������ ������ as Vuki
ExpertCLOR_2MA&StATR_v01
Price Data Components
Series array that contains close prices for each bar
Orders Execution
Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself
Indicators Used
Moving average indicator
0 Views
0 Downloads
0 Favorites
ExpertCLOR_2MA&StATR_v01
//+----------------------------------------------------------------------------+
//|                                              ExpertCLOR_2MA&StATR_v01.mq4  |
//|                                                     Ñåðãåé Çàèêèí as Vuki  |
//|                                                           f_kombi@mail.ru  |
//+----------------------------------------------------------------------------+
//|  Ñîâåòíèê êîòîðûé:                                                         |
//|   1. Çàêðûâàåò îðäåð ïî ïåðåñå÷åíèþ 2-õ ÌÀ (5 è 7 ïî óìîë÷àíèþ);           |
//|   2. Àâòîìàòè÷åñêè äâèãàåò ñòîï ïî èíäèêàòîðó StopATR_auto;                |
//|   3. Ïåðåâîäèò îòêðûòóþ ïîçèöèþ â áåçóáûòîê ïðè äîñòèæåíèè çàäàííîãî óðîâíÿ|
//|                                                                            | 
//|   ÂÍÈÌÀÍÈÅ!!! Ñîâåòíèê òîëüêî ÇÀÊÐÛÂÀÅÒ îòêðûòûå îðäåðà!!!                 |
//+----------------------------------------------------------------------------+
// Âõîäíûå ïàðàìåòðû:
// MA_CloseOnOff - âêëþ÷åíèå (1) èëè âûêëþ÷åíèå (0) ðåæèìà çàêðûòèÿ îðäåðà ïî ïåðåñå÷åíèþ ÌÀ  
// StATR_CloseOnOff - âêëþ÷åíèå (1) èëè âûêëþ÷åíèå (0) óñòàíîâêè è èçìåíåíèÿ ñòîïà ïî èíäèêàòîðó StopATR_auto
// MA_Fast_Pe - ïåðèîä áûñòðîé ÌÀ
// MA_Fast_Ty - òèï áûñòðîé ÌÀ (0-SMA, 1-EMA, 2-SMMA(ñãëàæåííàÿ), 3-LWMA(âçâåøåííàÿ))
// MA_Fast_Pr - öåíà áûñòðîé ÌÀ (0-Close, 1-Open, 2-High, 3-Low, 4-HL/2, 5-HLC/3, 6-HLCC/4)
// MA_Slow_Pe - ïåðèîä ìåäëåííîé ÌÀ
// MA_Slow_Ty - òèï ìåäëåííîé ÌÀ (0-SMA, 1-EMA, 2-SMMA(ñãëàæåííàÿ), 3-LWMA(âçâåøåííàÿ))
// MA_Slow_Pr - öåíà ìåäëåííîé ÌÀ (0-Close, 1-Open, 2-High, 3-Low, 4-HL/2, 5-HLC/3, 6-HLCC/4)
// TimeFrame  - ðàáî÷èé òàéìôðåéì (1-Ì1, 5-Ì5, 15-Ì15á 60-Í1, 240-Í4)
// BezUb - óðîâåíü ïðîôèòà â ïóíêòàõ, ïðè êîòîðîì îðäåð ïåðåâîäèòñÿ â áåçóáûòîê
// CountBarsForShift - ïàðàìåòð èí-ðà StopATR_auto - ðàññòîÿíèå â áàðàõ äëÿ âûâîäà óðîâíÿ ñòîïà íà ýêðàí  
// CountBarsForAverage - ïàðàìåòð èí-ðà StopATR_auto - êîëè÷åñòâî áàðîâ óñðåäíåíèÿ äëÿ ðàññ÷åòà ñòîïà
// Target - ïàðàìåòð èí-ðà StopATR_auto - êýôôèöèåíò óâåëè÷åíèÿ çíà÷åíèÿ ñðåäíåãî áàðà äëÿ ðàññ÷åòà ñòîïà
//-----
//  Èíäèêàòîð StopATR_auto ÎÁßÇÀÒÅËÜÍÎ äîëæåí áûòü â ïàïêå Indicators âàøåãî ÌÒ4
//  Èíäèêàòîð StopATR_auto íà ãðàôèê ìîæíî íå âåøàòü, åãî ñîâåòíèê ñàì ïîâåñèò
//-----
#property copyright "Ñåðãåé Çàèêèí as Vuki"
#property link      "f_kombi@mail.ru"
//-----
  extern int      MA_CloseOnOff      =1;
  extern int      StATR_CloseOnOff   =1;
  extern int      MA_Fast_Pe         =5;
  extern int      MA_Fast_Ty         =MODE_EMA;
  extern int      MA_Fast_Pr         =PRICE_CLOSE;
  extern int      MA_Slow_Pe         =7;
  extern int      MA_Slow_Ty         =MODE_EMA;
  extern int      MA_Slow_Pr         =PRICE_OPEN;
  extern int      TimeFrame          =PERIOD_M5;
  extern int      BezUb              =15;
  extern int      CountBarsForShift  =7;
  extern int      CountBarsForAverage=12;
  extern double   Target             =2.0;
//----
  int Opened=0;
  int OpenedBuy=0;
  int   OpenedSell=0;
  int OpenedBuyTicket=0;
  int   OpenedSellTicket=0;
  int CloseBuy=0;
  int CloseSell=0;
  int Closed=0;
  double StopL;
//expert initialization function
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  int init() 
  {
   return(0);
  }
//expert deinitialization function
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  int deinit() 
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  int start() 
  {
   int cnt;
   bool errbool=true;
   int errint=0;
//----
   CloseBuy=0; CloseSell=0;
   // ïðîâåðêà, åñòü ëè îòêðûòûå ðûíî÷íûå èëè îòëîæåííûå îðäåðà
   OpenedBuy=0;
   OpenedSell=0;
     for(cnt=0; cnt < OrdersTotal(); cnt++) 
     {
      errbool=OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(errbool!=true) Comment("Îøèáêà âûáîðà îðäåðà ïî ïîçèöèè!","\n","\n");
      if(OrderType()==OP_BUY && OrderSymbol()==Symbol())       {OpenedBuy=1; OpenedBuyTicket=OrderTicket();}
      if(OrderType()==OP_SELL && OrderSymbol()==Symbol())      {OpenedSell=1; OpenedSellTicket=OrderTicket();}
     }
   //åñëè åñòü ðûíî÷íûé áàé, òî èçìåíÿåì ñòîïëîññ â áó è ïî ñòîïàòð
     if(OpenedBuy==1) 
     {
      StopL=iCustom(NULL,TimeFrame,"StopATR_auto",Blue,Brown,false,CountBarsForShift,CountBarsForAverage,Target,2,0);
      StopL=NormalizeDouble(StopL,Digits);
      errbool=OrderSelect(OpenedBuyTicket, SELECT_BY_TICKET, MODE_TRADES);
      if(errbool!=true) Comment("Îøèáêà âûáîðà îðäåðà ïî ïîçèöèè!","\n","\n");
      // Ïåðåâîä â áåçóáûòîê îðäåðà Áàé      
        if(BezUb!=0 && (Bid - OrderOpenPrice())>=(BezUb*Point) && OrderStopLoss() < OrderOpenPrice()) 
        {
         errbool=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+Point,OrderTakeProfit(),0,White);
         errint=GetLastError();
         if(errbool!=true&&errint>1) Comment(errint," Îøèáêà ìîäèôèêàöèè òåêóùåãî îðäåðà Áàé ïî áåçóáûòêó!","\n","\n");
         else Comment("Ñðàáîòàë ïåðåâîä òåêóùåãî îðäåðà Áàé â áåçóáûòîê!\n");
         return(0);
        }
      // Ìîäèôèêàöèÿ ñòîïà ïî ÑòîïÀÒÐ îðäåðà Áàé
        if(OrderStopLoss() < StopL && StATR_CloseOnOff==1) 
        {
         errbool=OrderModify(OrderTicket(),OrderOpenPrice(),StopL,OrderTakeProfit(),0,White);
         errint=GetLastError();
         if(errbool!=true&&errint>1) Comment(errint," Îøèáêà ìîäèôèêàöèè òåêóùåãî îðäåðà Áàé ïî ÑòîïÀÒÐ!","\n","\n");
         return(0);
        }
     }
   //åñëè åñòü ðûíî÷íûé ñåëë, òî èçìåíÿåì ñòîïëîññ â áó è ïî ñòîïàòð
     if(OpenedSell==1) 
     {
      StopL=iCustom(NULL,TimeFrame,"StopATR_auto",Blue,Brown,false,CountBarsForShift,CountBarsForAverage,Target,1,0);
      StopL=NormalizeDouble(StopL,Digits);
      errbool=OrderSelect(OpenedSellTicket, SELECT_BY_TICKET, MODE_TRADES);
      if(errbool!=true) Comment("Îøèáêà âûáîðà îðäåðà ïî ïîçèöèè!","\n","\n");
      // Ïåðåâîä â áåçóáûòîê îðäåðà Ñåëë      
        if(BezUb!=0 && (OrderOpenPrice() - Ask)>=(BezUb*Point) && OrderStopLoss() > OrderOpenPrice()) 
        {
         errbool=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-Point,OrderTakeProfit(),0,White);
         errint=GetLastError();
         if(errbool!=true&&errint>1) Comment(errint," Îøèáêà ìîäèôèêàöèè òåêóùåãî îðäåðà Ñåëë ïî áåçóáûòêó!","\n","\n");
         else Comment("Ñðàáîòàë ïåðåâîä òåêóùåãî îðäåðà Ñåëë â áåçóáûòîê!\n");
         return(0);
        }
      // Ìîäèôèêàöèÿ ñòîïà ïî ÑòîïÀÒÐ îðäåðà Ñåëë
        if(StATR_CloseOnOff==1) 
        {
         //        Comment("çäåñü ðàáîòàåò! StopL = ",StopL,"\n");
           if(OrderStopLoss()==0 || OrderStopLoss() > StopL) {
            errbool=OrderModify(OrderTicket(),OrderOpenPrice(),StopL,OrderTakeProfit(),0,White);
            errint=GetLastError();
            if(errbool!=true&&errint>1) Comment(errint," Îøèáêà ìîäèôèêàöèè òåêóùåãî îðäåðà Ñåëë ïî ÑòîïÀÒÐ!","\n","\n");
            return(0);
           }
        }
     }
   if(MA_CloseOnOff==1) FunctionSignalClose();
   // Åñëè åñòü ñèãíàë íà çàêðûòèå, çàêðûâàåì
     if((OpenedBuy==1&&OpenedSell==0&&CloseBuy==1&&CloseSell==0)||(OpenedBuy==0&&OpenedSell==1&&CloseBuy==0&&CloseSell==1)) 
     {
        if(OpenedBuy==1) 
        {
         errbool=OrderSelect(OpenedBuyTicket, SELECT_BY_TICKET, MODE_TRADES);
         if(errbool!=true) Comment("Îøèáêà âûáîðà îðäåðà ïî ïîçèöèè!","\n","\n");
        }
        if(OpenedSell==1) 
        {
         errbool=OrderSelect(OpenedSellTicket, SELECT_BY_TICKET, MODE_TRADES);
         if(errbool!=true) Comment("Îøèáêà âûáîðà îðäåðà ïî ïîçèöèè!","\n","\n");
        }
      Closed=FunctionCloseTrade(OrderTicket(),OrderType(),OrderLots());
      if(Closed==1) OpenedBuy=0;
      if(Closed==2) OpenedSell=0;
      return(0);
     }
   return(0);
  }
// Ôóíêöèÿ ðàññ÷åòà ñèãíàëîâ Çàêðûòü Áàé, Çàêðûòü Ñåëë
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  void FunctionSignalClose() 
  {
   double maFast1,maSlow1,maFast2,maSlow2;
   maFast1=iMA(NULL,TimeFrame,MA_Fast_Pe,0,MA_Fast_Ty,MA_Fast_Pr,1);
   maSlow1=iMA(NULL,TimeFrame,MA_Slow_Pe,0,MA_Slow_Ty,MA_Slow_Pr,1);
   maFast2=iMA(NULL,TimeFrame,MA_Fast_Pe,0,MA_Fast_Ty,MA_Fast_Pr,2);
   maSlow2=iMA(NULL,TimeFrame,MA_Slow_Pe,0,MA_Slow_Ty,MA_Slow_Pr,2);
     if(OpenedBuy==1) 
     {
      if(maFast1<=maSlow1 && maFast2 > maSlow2) {CloseBuy=1; CloseSell=0;}
     }
     if(OpenedSell==1) 
     {
      if(maFast1>=maSlow1 && maFast2 < maSlow2) {CloseSell=1; CloseBuy=0;}
     }
   return;
  }
// Ôóíêöèÿ çàêðûòèÿ ïîçèöèé Áàé èëè Ñåëë. Âîçâðàùàåò 1 åñëè çàêðûë Áàé, 2 åñëè çàêðûë Ñåëë, 0 åñëè îøèáêà
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  int FunctionCloseTrade(int Tic, int Type, double Lot) 
  {
   int Ret;
   double PrCl;
   color ArCo;
   bool errbool;
//----
     if(Type==OP_BUY) 
     {
      PrCl=Bid;
      ArCo=Aqua;
      Ret=1;
     }
     if(Type==OP_SELL) 
     {
      PrCl=Ask;
      ArCo=Aqua;
      Ret=2;
     }
   errbool=OrderClose(Tic,Lot,PrCl,10,ArCo);
     if(errbool!=true) 
     {
      Comment("Îøèáêà ",GetLastError()," çàêðûòèÿ ðûíî÷íîãî îðäåðà!","\n","\n");
      return(0);
     }
   return(Ret);
  }
//+------------------------------------------------------------------+

Comments