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);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:


Moving average indicator


Custom Indicators Used:
StopATR_auto

Order Management characteristics:
Checks for the total of open orders

It can change open orders parameters, due to possible stepping strategy
It Closes Orders by itself

Other Features: