Author: Roger
Profit factor:
0.00
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself
0 Views
0 Downloads
0 Favorites
Followme
//+------------------------------------------------------------------+
//|                                                     Followme.mq4 |
//|                                                            Roger |
//|                                      http://www.rogersignals.com |
//+------------------------------------------------------------------+
#property copyright "Roger"
#property link      "http://www.rogersignals.com"

//Ñîâåòíèê äëÿ ðó÷íîãî òåñòèðîâàíèÿ ñòðàòåãèé. Çàïóñòèòå òåñòåð, âûáåðèòå íóæíûé
//òàéìôðåéì, ïàðó âàëþò, êà÷åñòâî òåñòèðîâàíèÿ, äàòû íà÷àëà è êîíöà è ðåæèì
//Âèçóàëèçàöèÿ. Ñðàçó ïîñëå ñòàðòà íàæìèòå Ïàóçó. Â îòêðûâøåìñÿ ãðàôèêå óâèäèòå
//äâå ëèíèè, ãîëóáóþ - äëÿ îðäåðîâ íà ïîêóïêó, æåëòóþ - äëÿ îðäåðîâ íà ïðîäàæó.
//Ïîêà Âû íå òðîãàåòå ýòè ëèíèè, íè÷åãî íå ïðîèçîéäåò.
//Âû ìîæåòå áðîñèòü íà ãðàôèê ëþáûå èíäèêàòîðû. Ìàíèïóëèðóÿ êíîïêîé Ïóñê/Ïàóçà,
//Âû ìîæåòå îñòàíàâëèâàòü õîä ïðîöåññà â ëþáîé ìîìåíò.
//Åñëè Âàì íåîáõîäèìî îòêðûòü îðäåð íà ïîêóïêó, âûäåëèòå ãîëóáóþ ëèíèþ è ïîòÿíèòå
//åå íà ìåñòî ïðåäïîëàãàåìîãî îòêðûòèÿ. Óáåðèòå Ïàóçó, ñðàçó æå îòêðîåòñÿ îðäåð.
//Åñëè ðàññòîÿíèå ìåæäó Áèäîì è ëèíèåé áûëî ìåíüøå äîïóñòèìîãî óðîâíÿ ñòîïà, îòêðîåòñÿ
//ïîêóïêà. Åñëè ëèíèÿ áûëà âûøå - îòêðîåòñÿ ñòîïîâûé îðäåð, íèæå - ëèìèòíûé.
//×òîáû çàêðûòü îðäåð, äîñòàòî÷íî ïîòÿíóòü ëþáóþ ëèíèþ, íî îòêðîåòñÿ äðóãîé îðäåð.
//Åñëè ïàðàìåòð NoStops ïîñòàâèòü â false, ïîÿâÿòñÿ ëèíèè ñòîïîâ è òåéêîâ, ò.å.
//Âû ñðàçó ñìîæåòå óñòàíîâèòü íåîáõîäèìûå ñòîïû è òåéêè â íîâîì îðäåðå.
//Åñëè Âàì êàêàÿ-íèáóäü ëèíèÿ íå íóæíà, âûäåëèòå åå è óäàëèòå, íî ïîìíèòå, ïðè
//óäàëåíèè óäàëÿòñÿ âñå âûäåëåííûå ëèíèè, ò.å., åñëè Âû çàáûëè, ÷òî ÷òî-òî åùå 
//âûäåëèëè, òî îíî âñå ðàâíî óäàëèòñÿ.
//---- input parameters
extern double    Lots=0.1;
extern bool      NoStops=true; 
double prbuy,prbuyt,prbuys,prsell,prsellt,prsells;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
drawline();//ðèñóåì ëèíèè
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
 ObjectDelete("BUY");  //ïîä÷èùàåì õâîñòû
 ObjectDelete("SELL");  
 ObjectDelete("BUYT");  
 ObjectDelete("SELLT");  
 ObjectDelete("BUYS");  
 ObjectDelete("SELLS");  
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   double nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells,stl,tpr;
   int stlev=MarketInfo(Symbol(),MODE_STOPLEVEL);//óðîâåíü ñòîïëåâåë
   int ticket;
   if(ObjectFind("BUY")==-1&&ObjectFind("SELL")==-1)drawline();//åñëè ëèíèè ñòåðëèñü îò íàëîæåíèÿ øàáëîíà
   nprbuy=NormalizeDouble(ObjectGet("BUY",OBJPROP_PRICE1),Digits);
   if(ObjectFind("BUYT")!=-1)nprbuyt=NormalizeDouble(ObjectGet("BUYT",OBJPROP_PRICE1),Digits);
   if(ObjectFind("BUYS")!=-1)nprbuys=NormalizeDouble(ObjectGet("BUYS",OBJPROP_PRICE1),Digits);
   nprsell=NormalizeDouble(ObjectGet("SELL",OBJPROP_PRICE1),Digits);
   if(ObjectFind("SELLT")!=-1)nprsellt=NormalizeDouble(ObjectGet("SELLT",OBJPROP_PRICE1),Digits);
   if(ObjectFind("SELLS")!=-1)nprsells=NormalizeDouble(ObjectGet("SELLS",OBJPROP_PRICE1),Digits);
   if(nprbuy==prbuy&&nprbuyt==prbuyt&&nprbuys==prbuys&&nprsell==prsell&&nprsellt==prsellt&&nprsells==prsells)return(0);//åñëè âñå êàê áûëî, óõîäèì
   if(nprbuy!=prbuy||nprsell!=prsell)//åñëè äâèãàëè ëèíèè êóïëè èëè ïðîäàæè
      {
      if(OrdersTotal()>0)closeord();//ñíà÷àëà óäàëèì âñå îòêðûòûå îðäåðà
      if(nprbuy!=prbuy)//äëÿ îðäåðîâ ïîêóïêè
         {
         if(nprbuyt-nprbuy<=stlev*Point||nprbuyt==0)tpr=0;
         else tpr=nprbuyt;
         if(nprbuy-nprbuys<=stlev*Point||nprbuys==0)stl=0;
         else stl=nprbuys;
         if(MathAbs(Bid-nprbuy)<=stlev*Point)
            {
            ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,stl,tpr);
            if(ticket==-1)  Print("ErrorBuy - ",GetLastError()); 
            else 
               {
               Print("PriceBuy - ",Ask," Stop - ",stl," Take - ",tpr);
               equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
               }
            }
         else if(Bid>nprbuy)
            {
            ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,nprbuy,3,stl,tpr);
            if(ticket==-1)  Print("ErrorBuyLimit - ",GetLastError()); 
            else 
               {
               Print("PriceBuyLimit - ",nprbuy," Stop - ",stl," Take - ",tpr);
               equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
               }
            }
         else 
            {
            ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,nprbuy,3,stl,tpr);
            if(ticket==-1)  Print("ErrorBuySell - ",GetLastError()); 
            else 
               {
               Print("PriceBuyStop - ",nprbuy," Stop - ",stl," Take - ",tpr);
               equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
               }
            }
         }
      else//äëÿ îðäåðîâ ïðîäàæè
         {
         if(nprsell-nprsellt<=stlev*Point||nprsellt==0)tpr=0;
         else tpr=nprsellt;
         if(nprsells-nprsell<=stlev*Point||nprsells==0)stl=0;
         else stl=nprsells;
         if(MathAbs(Bid-nprsell)<=stlev*Point)
            {
            ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,stl,tpr);
            if(ticket==-1)  Print("ErrorSell - ",GetLastError()); 
            else 
               {
               Print("PriceSell - ",Bid," Stop - ",stl," Take - ",tpr);
               equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
               }
            }
         else if(Bid<nprsell)
            {
            ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lots,nprsell,3,stl,tpr);
            if(ticket==-1)  Print("ErrorSellLimit - ",GetLastError()); 
            else 
               {
               Print("PriceSellLimit - ",nprsell," Stop - ",stl," Take - ",tpr);
               equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
               }
            }
         else 
            {
            ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,nprsell,3,stl,tpr);
            if(ticket==-1)  Print("ErrorSellStop - ",GetLastError()); 
            else 
               {
               Print("PriceSellStop - ",nprsell," Stop - ",stl," Take - ",tpr);
               equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
               }
            }
         }
      }
   else//åñëè òîëüêî õîòåëè èçìåíèòü ñòîï è/èëè òåéê
      {
      if(OrdersTotal()==0)return(0);
      OrderSelect(0, SELECT_BY_POS);
      stl=OrderStopLoss();
      tpr=OrderTakeProfit();
      if((OrderType()==0)&&(nprbuyt!=prbuyt||nprbuys!=prbuys))
         {
         if(nprbuyt!=prbuyt)
            {
            if(nprbuyt-Bid<=stlev*Point||nprbuyt==0)tpr=0;
            else tpr=nprbuyt;               
            }
         if(nprbuys!=prbuys)
            {
            if(Bid-nprbuys<=stlev*Point||nprbuys==0)stl=0;
            else stl=nprbuys;               
            }
         if(!OrderModify(OrderTicket(),OrderOpenPrice(),stl,tpr,0,CLR_NONE))Print("ErrorModifyBuy - ",GetLastError()," Stop - ",OrderStopLoss()," new Stop - ",stl," Take - ",OrderTakeProfit()," new Take - ",tpr);  
         else 
            {
            Print("ModifyBuy, Price - ",OrderOpenPrice()," Stop - ",OrderStopLoss()," Take - ",OrderTakeProfit());
            equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
            }
         }
      if((OrderType()==2||OrderType()==4)&&(nprbuyt!=prbuyt||nprbuys!=prbuys))
         {
         if(nprbuyt!=prbuyt)
            {
            if(nprbuyt-prbuy<=stlev*Point||nprbuyt==0)tpr=0;
            else tpr=nprbuyt;               
            }
         if(nprbuys!=prbuys)
            {
            if(prbuy-nprbuys<=stlev*Point||nprbuys==0)stl=0;
            else stl=nprbuys;               
            }
         if(!OrderModify(OrderTicket(),OrderOpenPrice(),stl,tpr,0,CLR_NONE))Print("ErrorModifyBuy - ",GetLastError()," Stop - ",OrderStopLoss()," new Stop - ",stl," Take - ",OrderTakeProfit()," new Take - ",tpr);  
         else 
            {
            Print("ModifyBuy, Price - ",OrderOpenPrice()," Stop - ",OrderStopLoss()," Take - ",OrderTakeProfit());
            equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
            }
         }
      if((OrderType()==1)&&(nprsellt!=prsellt||nprsells!=prsells))
         {
         if(nprsellt!=prsellt)
            {
            if(Ask-nprsellt<=stlev*Point||nprsellt==0)tpr=0;
            else tpr=nprsellt;               
            }
         if(nprsells!=prsells)
            {
            if(nprsells-Ask<=stlev*Point||nprsells==0)stl=0;
            else stl=nprsells;               
            }
         if(!OrderModify(OrderTicket(),OrderOpenPrice(),stl,tpr,0,CLR_NONE))Print("ErrorModifySell - ",GetLastError()," Stop - ",OrderStopLoss()," new Stop - ",stl," Take - ",OrderTakeProfit()," new Take - ",tpr);  
         else
            {
            Print("ModifySell, Price - ",OrderOpenPrice()," Stop - ",OrderStopLoss()," Take - ",OrderTakeProfit());
            equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
            }
         }
      if((OrderType()==3||OrderType()==5)&&(nprsellt!=prsellt||nprsells!=prsells))
         {
         if(nprsellt!=prsellt)
            {
            if(prsell-nprsellt<=stlev*Point||nprsellt==0)tpr=0;
            else tpr=nprsellt;               
            }
         if(nprsells!=prsells)
            {
      Print("Hello");
            if(nprsells-prsell<=stlev*Point||nprsells==0)stl=0;
            else stl=nprsells;               
            }
         if(!OrderModify(OrderTicket(),OrderOpenPrice(),stl,tpr,0,CLR_NONE))Print("ErrorModifySell - ",GetLastError()," Stop - ",OrderStopLoss()," new Stop - ",stl," Take - ",OrderTakeProfit()," new Take - ",tpr);  
         else
            {
            Print("ModifySell, Price - ",OrderOpenPrice()," Stop - ",OrderStopLoss()," Take - ",OrderTakeProfit());
            equal(nprbuy,nprbuyt,nprbuys,nprsell,nprsellt,nprsells);
            }
         }
      }
//----
   return(0);
  }
//+------------------------------------------------------------------+
void closeord()//çàêðûòèå îðäåðîâ
     {
      OrderSelect(0, SELECT_BY_POS);
      if(OrderType()==OP_BUY)   // long position is opened
        {
        OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
        }
      else if (OrderType()==OP_SELL)// go to short position
        {
         OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
        }
      else OrderDelete(OrderTicket() ); 
      return;
     } 
void equal(double nprbuy,double nprbuyt,double nprbuys,double nprsell,double nprsellt,double nprsells)
   {
   prbuy=nprbuy;
   prbuyt=nprbuyt;
   prbuys=nprbuys;
   prsell=nprsell;
   prsellt=nprsellt;
   prsells=nprsells;
   return;
   }     
void drawline()//ðèñîâàíèå ëèíèé
   {
   ObjectCreate("BUY",OBJ_HLINE,0,0,Bid+2*Period()*Point);  //âûñòàâëÿåì íîâûå 
   ObjectSet("BUY",OBJPROP_COLOR,Aqua);
   ObjectCreate("SELL",OBJ_HLINE,0,0,Bid-2*Period()*Point);   
   ObjectSet("SELL",OBJPROP_COLOR,Yellow);
   prbuy=NormalizeDouble(ObjectGet("BUY",OBJPROP_PRICE1),Digits);
   prsell=NormalizeDouble(ObjectGet("SELL",OBJPROP_PRICE1),Digits);
   if(!NoStops)//ðèñîâàíèå ñòîïîâ è òåéêîâ
      {
      prbuyt=Bid+3*Period()*Point;
      prbuys=Bid+Period()*Point;
      prsellt=Bid-3*Period()*Point;
      prsells=Bid-Period()*Point;
      ObjectCreate("BUYT",OBJ_HLINE,0,0,prbuyt);   
      ObjectSet("BUYT",OBJPROP_COLOR,DarkTurquoise);
      ObjectCreate("BUYS",OBJ_HLINE,0,0,prbuys); 
      ObjectSet("BUYS",OBJPROP_COLOR,MediumOrchid);
      ObjectCreate("SELLT",OBJ_HLINE,0,0,prsellt);   
      ObjectSet("SELLT",OBJPROP_COLOR,Gold);
      ObjectCreate("SELLS",OBJ_HLINE,0,0,prsells);   
      ObjectSet("SELLS",OBJPROP_COLOR,DeepPink);
      }
   return;
   }

Comments