Author: Copyright � 2012 by Mike Zhitnev
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 indicator
Miscellaneous
It plays sound alerts
0 Views
0 Downloads
0 Favorites
Delayer2
//+------------------------------------------------------------------+
//|                                                      Delayer.mq4 |
//|                                 Copyright © 2012 by Mike Zhitnev |
//|                                           http://Forex-Robots.ru |
//|        Ñîçäàíèå òîðãîâûõ ðîáîòîâ, èíäèêàòîðîâ, ñêðèïòîâ äëÿ Âàñ! |
//|      Expert advisors, indicators, scripts: admin@forex-robots.ru |
//+------------------------------------------------------------------+

//  Âåðñèÿ äëÿ ðàáîòû ñî âñåìè áðîêåðàìè

#property copyright "Copyright © 2012 by Mike Zhitnev"
#property link      "http://Forex-Robots.ru"
#include <stdlib.mqh>
#include <WinUser32.mqh>

extern int    FastPeriod= 20;       // ïåðèîä áûñòðîé MA
extern int    SlowPeriod= 37;       // Ïåðèîä ìåäëåííîé MA 
extern double Lots =      0.1;      // Îáúåì ëîòà
extern int    TakeProfit =100;      // Ðàçìåð òåéêïðîôèòà                                  
extern int    StopLoss =  20;       // Ðàçìåð ñòîïëîññà
extern int    Slippage =  2;        // Ïðîñêàëüçûâàíèå ïðè îòêðûòèèçàêðûòèè îðäåðà 
extern int    TrallSize = 10;       // Òðàëëèíã. Åñëè 0, òî îòêëþ÷åí.
extern int    Delta =     20;       // Îòñòóï
extern int    Magic     = 13238;    // Ìàãèê îðäåðîâ

bool Signal;
double Price;

datetime LastTime;

//+------------------------------------------------------------------+
//| Âîçâðàùàåò òèêåò ïåðâîãî îðäåðà TYPE, îòêðûòîãî ñîâåòíèêîì       |
//+------------------------------------------------------------------+
int OrderExists(int Type)
  {    
    if (OrdersTotal()==0) return(-1);
    for (int i=0; i<OrdersTotal(); i++)
      if (OrderSelect(i,SELECT_BY_POS) && OrderType()==Type && OrderMagicNumber()==Magic) return(OrderTicket());
    return(-1);  
  }  

//+------------------------------------------------------------------+
//| Çàêðîåì âñå ðûíî÷íûå îðäåðà BUY                                  |
//+------------------------------------------------------------------+
int CloseBuyOrders()
  {
    while (OrderExists(OP_BUY)>0)
    {
      RefreshRates();     
      OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slippage, Blue);
      if (PrintError(215)>0) Sleep(1000);              
    }      
  }

//+------------------------------------------------------------------+
//| Çàêðîåì âñå ðûíî÷íûå îðäåðà SELL                                 |
//+------------------------------------------------------------------+
int CloseSellOrders()
  {
    while (OrderExists(OP_SELL)>0)
    {
      RefreshRates();     
      OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slippage, Red);
      if (PrintError(242)>0) Sleep(1000);              
    }      
  }

//+------------------------------------------------------------------+
//| Òðàëëèì îòêðûòûå ïîçèöèè ñîâåòíèêà ñ øàãîì PIPS,                 |
//+------------------------------------------------------------------+
void Tralling(int Pips)
  {
    int n=OrdersTotal();    
    for(int i=0;i<n;i++)
      if (OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==Magic && OrderSymbol()==Symbol())
      {  
        double SL = OrderStopLoss();  
        RefreshRates();
        if (OrderType()==OP_BUY && Ask>SL+(StopLoss+Pips)*Point) 
          OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(SL+Pips*Point,Digits), OrderTakeProfit(), 0, Yellow);
        if (OrderType()==OP_SELL && Bid<SL-(StopLoss+Pips)*Point) 
          OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(SL-Pips*Point,Digits),OrderTakeProfit(), 0, Yellow);        
      }
  }

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   Signal = -1;
   return(0);
  }

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }

//+------------------------------------------------------------------+
//| Âûñòàâëÿåì îðäåð íà ïîêóïêó                                      |
//+------------------------------------------------------------------+
int BuyMarket() 
  {
     CloseSellOrders();
     CloseBuyOrders();
     RefreshRates();    
     double op = NormalizeDouble(Ask,Digits);       
     Print("Îòêðûâàåì íîâûé ðûíî÷íûé îðäåð íà ïîêóïêó ïî öåíå ASK=" + DoubleToStr(Ask,Digits));                                 
     int Ticket = OrderSend(Symbol(),OP_BUY, Lots, op, Slippage, 0, 0, "Delayer", Magic, 0 ,Blue);        
     if (PrintError(115)>0)
        Print("Îøèáêà îòêðûòèÿ îðäåðà BUY");  
     else       
     {
       OrderSelect(Ticket, SELECT_BY_TICKET);
       op = OrderOpenPrice();
       double tp = NormalizeDouble(op + TakeProfit*Point,Digits);
       if (TakeProfit==0) tp=0;
       double sl = NormalizeDouble(op - StopLoss*Point,Digits);   
       if (StopLoss==0) sl=0;   
       OrderModify(Ticket, OrderOpenPrice(), sl, tp, 0, Yellow);  
       Signal = -1;    
     }  
  }

//+------------------------------------------------------------------+
//| Âûñòàâëÿåì îðäåð íà ïðîäàæó                                      |
//+------------------------------------------------------------------+
int SellMarket() 
  {
     CloseBuyOrders();
     CloseSellOrders();
     RefreshRates();
     double op = NormalizeDouble(Bid,Digits);       
     Print("Îòêðûâàåì íîâûé ðûíî÷íûé îðäåð íà ïðîäàæó ïî öåíå BID=" + DoubleToStr(Bid,Digits));  
     int Ticket = OrderSend(Symbol(), OP_SELL, Lots, op, Slippage, 0, 0, "Delayer", Magic, 0 ,Red);                                    
     if (PrintError(136)>0) 
       Print("Îøèáêà îòêðûòèÿ îðäåðà SELL"); 
     else       
     {
       OrderSelect(Ticket, SELECT_BY_TICKET);
       op = OrderOpenPrice();
       double tp = NormalizeDouble(op - TakeProfit*Point,Digits);
       if (TakeProfit==0) tp=0;
       double sl = NormalizeDouble(op + StopLoss*Point,Digits);                     
       if (StopLoss==0) sl=0;
       OrderModify(Ticket, OrderOpenPrice(), sl, tp, 0, Yellow);
       Signal = -1;           
     }  
  }

//+------------------------------------------------------------------+
//| âûâåäåì îøèáêó â æóðíàë, ãäå Part - íîìåð ñòðîêè â êîäå          |
//+------------------------------------------------------------------+
int PrintError(int Part)
  {
    int error = GetLastError();
    if (error!=0) 
    {
      Print("Part " + Part + "; Error " + error + ": " + ErrorDescription(error));
      PlaySound("alert.wav");
    }  
    return(error);
  }  

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   if (TrallSize>0 && StopLoss!=0) Tralling(TrallSize);
  
   //double Spread = MarketInfo(Symbol(),MODE_SPREAD); 
   
   if (Signal==OP_BUY && Bid>=Price+(Delta)*Point) BuyMarket();  
   if (Signal==OP_SELL && Bid<=Price-(Delta)*Point) SellMarket();     
   
   double CO = MathAbs(Bid-Price)/Point;
   if (Signal!=-1) 
     Comment("Çàôèêñèðîâàííàÿ öåíà Bid ïîñëå ïåðåñå÷åíèÿ ìóâèíãîâ: " + DoubleToStr(Price,Digits) + "\n" +
             "Òåêóùèé îòñòóï: " + DoubleToStr(CO, 0) + ", òðåáóåìûé: " + Delta);
   else
     Comment("Ñîâåòíèê îæèäàåò ïåðåñå÷åíèÿ...");        
   
   // âñå, ÷òî íèæå, áóäåò ðàáîòàòü íà ñôîðìèðîâàâøèõñÿ ñâå÷àõ 
   if (LastTime==Time[0]) return(0);
   LastTime=Time[0];      
         
   double EMA_Fast0 = iMA(NULL, 0, FastPeriod, 0, MODE_EMA, PRICE_CLOSE, 1);
   double EMA_Slow0 = iMA(NULL, 0, SlowPeriod, 0, MODE_EMA, PRICE_CLOSE, 1);

   double EMA_Fast1 = iMA(NULL, 0, FastPeriod, 0, MODE_EMA, PRICE_CLOSE, 2);
   double EMA_Slow1 = iMA(NULL, 0, SlowPeriod, 0, MODE_EMA, PRICE_CLOSE, 2);
   
      
   // âîçíèê ñèãíàë íà ïðîäàæó
   if (EMA_Fast0>EMA_Slow0 && EMA_Fast1<EMA_Slow1)
   {    
       Signal = OP_SELL;       
       Price = Close[1];    
       Print("Çàôèêñèðîâàíî ïåðåñå÷åíèå íà ïîêóïêó, öåíà = " + DoubleToStr(Price, Digits));
       PlaySound("alert.wav");         
   } 
   
   // âîçíèê ñèãíàë íà ïîêóïêó
   if (EMA_Fast0<EMA_Slow0 && EMA_Fast1>EMA_Slow1)
   {     
       Signal = OP_BUY;            
       Price = Close[1];
       Print("Çàôèêñèðîâàíî ïåðåñå÷åíèå íà ïðîäàæó, öåíà = " + DoubleToStr(Price, Digits));
       PlaySound("alert.wav");                
   } 
      
      
   return(0);
  }
//+------------------------------------------------------------------+

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