Robot_MACD_12.26.9





//+------------------------------------------------------------------+
//|                                               Robot_MACD_12.26.9 |
//|                                                     Tokman Yuriy |
//|                                            yuriytokman@gmail.com |
//+------------------------------------------------------------------+
             //âíåøíèå ïåðåìåííûå
extern double TakeProfit = 300;
extern double Lots = 0.1;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double MacdCurrent, MacdPrevious, SignalCurrent,SignalPrevious;
   int cnt, ticket, total;

   MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
   MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
   SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);

   total=OrdersTotal();
   if(total<1)//ïðîâåðêà êîëè÷åñòâà îðäåðîâ 
     {
      // ïðîâåðêà ñâîáîäíûõ ñðåäñòâ
      if(AccountFreeMargin()<(1000*Lots))//êîëè÷åñòâî ñâîáîäíûõ ñðåäñòâ
        {
         Print("Íåäîñòàòî÷íî ñðåäñòâ = ", AccountFreeMargin());
         return(0);  
        }
      // îòêðûòèå äëèííîé ïîçèöèè
      if(MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious
         && MacdCurrent<0 && SignalCurrent<0 )
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"-",0,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("îòêðûòà ïîçèöèÿ BUY : ",OrderOpenPrice());
           }
         else Print("Îøèáêà ïðè îòêðûòèè BUY ïîçèöèè : ",GetLastError()); 
         return(0);
        }
      // îòêðûòèå êîðîòêîé ïîçèöèè
      if(MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious
         && MacdCurrent>0 && SignalCurrent>0)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"-",0,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("îòêðûòà ïîçèöèÿ SELL : ",OrderOpenPrice());
           }
         else Print("Îøèáêà ïðè îòêðûòèè SELL ïîçèöèè : ",GetLastError()); 
         return(0); 
        }
      return(0);
     }
   // óñëîâèÿ çàêðûòèÿ îðäåðîâ   
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // íàëè÷èå îòêðûòûõ îðäåðîâ 
         OrderSymbol()==Symbol())  // ñîâïàäàþò ëè ôèíàíñîâûå èíñòðóìåíòû
        {
         if(OrderType()==OP_BUY)   // îòêðûòà äëèííàÿ ïîçèöèÿ
           {
            // óñëîâèå çàêðûòèÿ
            if(MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious)
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
                 return(0);
                }
           }
         else // îòêðûòà êîðîòêàÿ ïîçèöèÿ
           {
            // óñëîâèå çàêðûòèÿ
            if( MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious)
              {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
               return(0);
              }
           }
        }
     }
   return(0);
  }



Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:

MACD Histogram


Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached
It Closes Orders by itself

Other Features: