MACDSimpleReshetov





//+------------------------------------------------------------------+
//|                                           MACDSimpleReshetov.mq4 |
//|                               Copyright © 2006, Yury V. Reshetov |
//|                                         http://reshetov.xnet.uz/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Yury V. Reshetov ICQ: 282715499"
#property link      "http://reshetov.xnet.uz/"
//---- Âõîäíûå è ïð. ïàðàìåòðû
//Lots - îáúåì îòêðûòûõ ïîçèöèé
extern double Lots = 2;
// Ñìåùåíèå (ïðèðàùåíèå) ïåðèîäà áûñòðîé ñêîëüçÿùåé ñðåäíåé
// ê ïåðèîäó ñèãíàëüíîé ëèíèè
extern int  DF = 1;
// Ñìåùåíèå (ïðèðàùåíèå) ïåðèîäà ìåäëåííîé ñêîëüçÿùåé ñðåäíåé
// ê ïåðèîäó áûñòðîé ñêîëüçÿùåé ñðåäíåé
extern int  DS = 2;
// Ïåðèîä ñèãíàëüíîé ëèíèè
extern int  SignalPeriod = 10;
// prevtime - ïðåäûäóùåå âðåìÿ (ïðåäûäóùåãî áàðà)
static int prevtime = 0;
//+------------------------------------------------------------------+
//| Ôóíêöèÿ èíèöèàëèçàöèè                                            |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Äåèíèöèàëèçèðóþùàÿ ôóíêöèÿ                                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Ôóíêöèÿ start                                                    |
//+------------------------------------------------------------------+
int start()
  {
   // Òèêåò ïîçèöèè
   int ticket = 0;
   // Ïðîâåðèì, ñôîðìèðîâàëñÿ ëè íîâûé áàð? 
   // Åñëè íå ñôîðìèðîâàëñÿ, òî âûõîäèì.
   // Ýòî ïîçâîëèò èçáåæàòü ëîæíûõ ñðàáàòûâàíèé âî ôëýòå è ðåíäæå
   if(Time[0] == prevtime) 
       return(0);
   // Çàïîìíèì òåêóùåå âðåìÿ
   prevtime = Time[0];
   // Çíà÷åíèå îñíîâíîé ëèíèè MACD
   double main = iMACD(Symbol(), 0, SignalPeriod + DF, SignalPeriod + DS + DF, 
                       SignalPeriod, PRICE_CLOSE, MODE_MAIN, 0);
   // Çíà÷åíèå ñèãíàëüíîé ëèíèè MACD
   double signal = iMACD(Symbol(), 0, SignalPeriod + DF, SignalPeriod + DS + DF, 
                         SignalPeriod, PRICE_CLOSE, MODE_SIGNAL, 0); 
   // îòêðûòûå ïîçèöèè
   int total = OrdersTotal();
   for(int cnt = 0; cnt < total; cnt++) 
     {
       // Íó-êà ãëÿíåì
       OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
       int tick = OrderTicket();
       double openprice = OrderOpenPrice();
       double closeprice = Bid;
       double comission = OrderCommission();
       double swap = OrderSwap();
       double profit = OrderProfit();
       // Ñëó÷àéíî, ýòî íå íàø èíñòðóìåíò?
       if(OrderSymbol() == Symbol()) 
         { // Àãà! Îí ñàìûé
           // Çäåñü ìû ïîêóïàëè, à ñèãíàë íà ïðîäàæó
           if(OrderType() == OP_BUY && main < 0) 
             {
              // Òàê äåëî íå ïîéäåò, âûõîäèì èç ðûíêà
              if(OrderClose(OrderTicket(), OrderLots(), closeprice, 3, Blue)) 
                {
                 // Îòïðàâèì âåñòî÷êó èíâåñòîðó
                 SendMail("Close buy position " + Symbol(), "Order #" + 
                    tick + ", close at price " + closeprice + " with profit $" + 
                    profit + ".\nOpen price " + openprice + "\nComission " + 
                    comission + "\nSwap " + swap + ".\n___\nBalance $" + 
                    AccountBalance() + "\nEquity $" + AccountEquity() + "\nTotalProfit $" + 
                    AccountProfit() + "\nFreeMargin $" + AccountFreeMargin());
                }
              return(0);
             }  
           // Çäåñü ìû ïðîäàâàëè, à ñèãíàë íà ïîêóïêó
           if(OrderType() == OP_SELL && main > 0) 
             {
              closeprice = Ask;
              // Âåðíèòå íàøè äåíåæêè èëè òî, ÷òî îò íèõ îñòàëîñü
              if(OrderClose(OrderTicket(), OrderLots(), closeprice, 3, Red)) 
                {
                 // Îòïðàâèì âåñòî÷êó èíâåñòîðó
                 SendMail("Close Sell position " + Symbol(), "Order #" + 
                 tick + ", close at price " + closeprice + " with profit $" + 
                 profit + ".\nOpen price " + openprice + "\nComission " + 
                 comission + "\nSwap " + swap + ".\n___\nBalance $" + 
                 AccountBalance() + "\nEquity $" + AccountEquity() + "\nTotalProfit $" + 
                 AccountProfit() + "\nFreeMargin $" + AccountFreeMargin());
                }
              return(0);
             }
           // Îòêðûòàÿ ïîçèöèÿ íà ýòîì èíñòðóìåíòå óæå åñòü, âòîðóþ îòêðûâàòü íå áóäåì, 
           // à ëó÷øå çàâåðøèì ðàáîòó ýêñïåðòà
           return(0);
         }
     }
   // Åñëè îáå ëèíèè ïî îäíó ñòîðîíó ôðîíòà, òî âõîäèì â ðûíîê
   if((main * signal) > 0) 
     {
       // Åñëè ñèãíàë íà ïîêóïêó
       if(main > 0) 
         {
           // Çíà÷èò êóïèì
           if(main > signal)
               ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, "MACDSimple", 
                                  888, 0, Blue);
           return(0); 
         } 
       else 
         {
           // Çäåñü ìû ïðîäàåì
           if (main < signal)
              ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, "MACDSimple", 
                                 888, 0, Red);
           return(0); 
         }
     }
   return(0);
  }
//+------------------------------------------------------------------+





Sample





Analysis



Market Information Used:

Series array that contains open time of each bar


Indicator Curves created:


Indicators Used:

MACD Histogram


Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders

It Closes Orders by itself

Other Features:

It sends emails