Simple_Moving_Average

Author: Copyright 2016, Andrey Minaev
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 strategy
Indicators Used
Moving average indicator
0 Views
0 Downloads
0 Favorites
Simple_Moving_Average
//+-----------------------------------------------------------------------------------------------+
//|                                                                     Simple Moving Average.mq4 |
//|                                                                 Copyright 2016, Andrey Minaev |
//|                                                     https://www.mql5.com/ru/users/id.scorpion |
//+-----------------------------------------------------------------------------------------------+
#property copyright "Copyright 2016, Andrey Minaev"
#property link      "https://www.mql5.com/ru/users/id.scorpion"
#property version   "1.00"
#property strict

// Ïàðàìåòðû ñîâåòíèêà
extern string sParametersEA = "";     // Ïàðàìåòðû ñîâåòíèêà
extern double dLots         = 0.01;   // Êîëè÷åñòâî ëîòîâ
extern int    iStopLoss     = 30;     // Óðîâåíü óáûòêà (â ïóíêòàõ)
extern int    iTakeProfit   = 30;     // Óðîâåíü ïðèáûëè (â ïóíêòàõ)
extern int    iSlippage     = 3;      // Ïðîñêàëüçîâàíèå (â ïóíêòàõ)
extern int    iMagic        = 1;      // Èíäåíòèôèêàòîð ñîâåòíèêà
// Ïàðàìåòðû èíäèêàòîðà
extern string sParametersMA = "";     // Ïàðàìåòðû èíäèêàòîðà 
extern int    iPeriodMA     = 14;     // Ïåðèîä óñðåäíåíèÿ
// Ãëîáàëüíûå ïåðåìåííûå
double dMA;
//+-----------------------------------------------------------------------------------------------+
int OnInit()
{
   // Åñëè áðîêåð èñïîëüçóåò 3 èëè 5 çíàêîâ ïîñëå çàïÿòîé, òî óìíîæàåì íà 10 
   if(Digits == 3 || Digits == 5)
   {
      iStopLoss   *= 10;
      iTakeProfit *= 10;
      iSlippage   *= 10;
   }
   
   return(INIT_SUCCEEDED);
}
//+-----------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   
}
//+-----------------------------------------------------------------------------------------------+
void OnTick()
{
   // Ïîëó÷èì çíà÷åíèå èíäèêàòîðà
   dMA = iMA(Symbol(), 0, iPeriodMA, 0, MODE_SMA, PRICE_CLOSE, 0);
   
   // Åñëè íåò îòêðûòûõ îðäåðîâ, òî âõîäèì â óñëîâèå
   if(bCheckOrders() == true)
   {
      // Åñëè ïîÿâèëñÿ ñèãíàë íà ïîêóïêó, òî îòêðîåì îðäåð íà ïîêóïêó
      if(bSignalBuy() == true)
         vOrderOpenBuy();
      
      // Åñëè ïîÿâèëñÿ ñèãíàë íà ïðîäàæó, òî îòêðîåì îðäåð íà ïðîäàæó
      if(bSignalSell() == true)
         vOrderOpenSell();      
   }
}
//+-----------------------------------------------------------------------------------------------+
//|                                                             Ôóíêöèÿ ïðîâåðêè îòêðûòûõ îðåäðîâ |
//+-----------------------------------------------------------------------------------------------+
bool bCheckOrders()
{
   // Ïåðåáåðåì â öèêëå îðäåðà, äëÿ ïðîâåðêè îòêðûòûõ îðäåðîâ äàííûì ñîâåòíèêîì
   for(int i = 0; i <= OrdersTotal(); i++)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == iMagic)
            return(false);
            
   return(true);
}
//+-----------------------------------------------------------------------------------------------+
//|                                                             Ôóíêöèÿ ïîèñêà ñèãíàëà íà ïîêóïêó |
//+-----------------------------------------------------------------------------------------------+
bool bSignalBuy()
{
   if(dMA > Open[1] && dMA < Close[1])
      return(true);
      
   return(false);
}
//+-----------------------------------------------------------------------------------------------+
//|                                                             Ôóíêöèÿ ïîèñêà ñèãíàëà íà ïðîäàæó |
//+-----------------------------------------------------------------------------------------------+
bool bSignalSell()
{
   if(dMA < Open[1] && dMA > Close[1])
      return(true);
      
   return(false);
}
//+-----------------------------------------------------------------------------------------------+
//|                                                            Ôóíêöèÿ îòêðûòèÿ îðäåðà íà ïîêóïêó |
//+-----------------------------------------------------------------------------------------------+
void vOrderOpenBuy()
{
   int iOTi = 0;   // Òèêåò îðäåðà 
   
   iOTi = OrderSend(Symbol(), OP_BUY, dLots, Ask, iSlippage, 0, 0, "", iMagic, 0, clrNONE);
   
   // Ïðîâåðèì îòêðûëñÿ ëè îðäåð
   if(iOTi > 0)
      // Åñäè äà, òî âûñòàâèì óðîâíè óáûòêà è ïðèáûëè
      vOrderModify(iOTi);
   else
      // Åñëè íåò, òî ïîëó÷èì îøèáêó
      vError(GetLastError());
}
//+-----------------------------------------------------------------------------------------------+
//|                                                            Ôóíêöèÿ îòêðûòèÿ îðäåðà íà ïðîäàæó |
//+-----------------------------------------------------------------------------------------------+
void vOrderOpenSell()
{
   int iOTi = 0;   // Òèêåò îðäåðà 
   
   iOTi = OrderSend(Symbol(), OP_SELL, dLots, Bid, iSlippage, 0, 0, "", iMagic, 0, clrNONE);
   
   // Ïðîâåðèì îòêðûëñÿ ëè îðäåð
   if(iOTi > 0)
      // Åñäè äà, òî âûñòàâèì óðîâíè óáûòêà è ïðèáûëè
      vOrderModify(iOTi);
   else
      // Åñëè íåò, òî ïîëó÷èì îøèáêó
      vError(GetLastError());
}
//+-----------------------------------------------------------------------------------------------+
//|                                                                    Ôóíêöèÿ ìîäèôèêàöèè îðäåðà |
//+-----------------------------------------------------------------------------------------------+
void vOrderModify(int iOTi)
{  
   int    iOTy = -1;   // Òèï îðäåðà
   double dOOP = 0;    // Öåíà îòêðûòèÿ îðäåðà
   double dOSL = 0;    // Ñòîï Ëîññ
   int    iMag = 0;    // Èäåíòèôèêàòîð ñîâåòíèêà
   
   double dSL = 0;     // Óðîâåíü óáûòêà
   double dTP = 0;     // Óðîâåíü ïðèáûëè
   
   // Âûáåðåì ïî òèêåòó îòêðûòûé îðäåð, ïîëó÷èì íåêîòîðûå çíà÷åíèÿ
   if(OrderSelect(iOTi, SELECT_BY_TICKET, MODE_TRADES))
   {
      iOTy = OrderType();
      dOOP = OrderOpenPrice();
      dOSL = OrderStopLoss();
      iMag = OrderMagicNumber();
   }
   
   // Åñëè îðäåð îòêðûë äàííûé ñîâåòíèê, òî âõîäèì â óñëîâèå
   if(OrderSymbol() == Symbol() && OrderMagicNumber() == iMag)
   {
      // Åñëè Ñòîï Ëîññ òåêóùåãî îðäåðà ðàâåí íóëþ, òî ìîäèôèöèðóåì îðäåð
      if(dOSL == 0)
      {
         if(iOTy == OP_BUY)
         {
            dSL = NormalizeDouble(dOOP - iStopLoss * Point, Digits);
            dTP = NormalizeDouble(dOOP + iTakeProfit * Point, Digits);
            
            bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE);       
         }
         
         if(iOTy == OP_SELL)
         {
            dSL = NormalizeDouble(dOOP + iStopLoss * Point, Digits);
            dTP = NormalizeDouble(dOOP - iTakeProfit * Point, Digits);
            
            bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE);       
         }         
      }  
   } 
}
//+-----------------------------------------------------------------------------------------------+
//|                                                                      Ôóíêöèÿ îáðàáîòêè îøèáîê |
//+-----------------------------------------------------------------------------------------------+
void vError(int iErr)
{
   switch(iErr)
   {
      case 129:   // Íåïðàâèëüíàÿ öåíà
      case 135:   // Öåíà èçìåíèëàñü
      case 136:   // Íåò öåí
      case 138:   // Íîâûå öåíû
         Sleep(1000);
         RefreshRates();
         break;
      
      case 137:   // Áðîêåð çàíÿò
      case 146:   // Ïîäñèñòåìà òîðãîâëè çàíÿòà        
         Sleep(3000);
         RefreshRates();
         break;
   }
}
//+-----------------------------------------------------------------------------------------------+

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