Author: Roger
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

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 ---