Author: ������ ��������
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategy
Indicators Used
Moving average indicator
1 Views
0 Downloads
0 Favorites
EMA2
//+------------------------------------------------------------------+
//|                                                          EMA.mq4 |
//|                                                 Âèêòîð ×åáîòàð¸â |
//|                                    http://www.chebotariov.co.ua/ |
//+------------------------------------------------------------------+
#property copyright "Âèêòîð ×åáîòàð¸â"
#property link      "http://www.chebotariov.co.ua/"

#define MAGIC 31052006

extern int    ShortEma = 4; // Ïåðèîä êîðîòêîé MA
extern int    ShortEma2 = 11; // Ïåðèîä âòîðîé êîðîòêîé MA
extern int    LongEma = 16; // Ïåðèîä äëèííîé MA
extern int    ShiftEma = 1;
extern int    RiskMax=45;
extern double LotsMax=90.0;
extern int    DecreaseFactor=6;
extern int    TakeProfit=60;
extern int    StopLoss=80;
extern int    TrailingStop=40;

//+------------------------------------------------------------------+
//| Ðàñ÷åò îïòèìàëüíîãî ðàçìåðà ëîòà                                 |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
//----
   double Lots=NormalizeDouble(AccountBalance()*RiskMax/(100000.0*Ask),1);
   if(AccountFreeMargin()<(1000*Ask*Lots))
     {
      Lots=NormalizeDouble(AccountFreeMargin()*RiskMax/(100000.0*Ask),1);
     }
   if(Lots>LotsMax)
     {
      Lots=LotsMax;
      Print("Ïðåâûøåí ìàêñèìàëüíûé ðàçìåð ëîòà. Ðàçìåð ëîòà èçìåíåí íà ",LotsMax);
     }
   
   int orders=HistoryTotal();
   int losses=0;
   
   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
           {
            Print("Îøèáêà â èñòîðèè!");
            break;
           }
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGIC || OrderType()>OP_SELL)continue;
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
         if(losses>1)
           {
            Lots=NormalizeDouble(Lots/(DecreaseFactor*losses),1);
           }
       }
     if(Lots<MarketInfo(Symbol(),MODE_MINLOT))
       {
        Lots=MarketInfo(Symbol(),MODE_MINLOT);
       }
     double raznica = MathMod(Lots,MarketInfo(Symbol(),MODE_LOTSTEP));
     if(raznica>0.0)
       {
        Lots -= raznica;
       }
//----
   return(Lots);
  }

//+------------------------------------------------------------------+

bool symbolOrders()
   {
//----
   int orders = OrdersTotal();
   for(int i=orders-1; i>=0; i--)
      {
      if(!OrderSelect(i, SELECT_BY_POS ))
         {
         Print("OrderSelect( ", i, ", SELECT_BY_POS ) - Error #", GetLastError());
         continue;
         }
         if(OrderSymbol()==Symbol())
            {
            if(OrderMagicNumber()==MAGIC)
               {
               return(true);
            }
         }
      }
//----
   return(false);
}

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   int cnt, ticket;
   int total=OrdersTotal();

   if(Bars<100)
     {
      Print("Êîëè÷åñòâî áàðîâ ìåíüøå 100");
      return(0);  
     }
   if(TakeProfit<10 && TakeProfit>0)
     {
      TakeProfit=10;
      Print("Ðàçìåð TakeProfit áûë ìåíüøå 10, ïîýòîìó èçìåíåí íà 10");
     }

   double SEma0 = iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,0);
   double SEma1 = iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,ShiftEma);
   double SEma02 = iMA(NULL,0,ShortEma2,0,MODE_EMA,PRICE_CLOSE,0);
   double SEma12 = iMA(NULL,0,ShortEma2,0,MODE_EMA,PRICE_CLOSE,ShiftEma);  
   double LEma0 = iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,0);
   double LEma1 = iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,ShiftEma);
   
   if(!symbolOrders())
     {
      if(AccountFreeMargin()<(1000*LotsOptimized()))
        {
         Print("Ó Âàñ íåäîñòàòî÷íî äåíåã. Ñâîáîäíîé ìàðæè = ", AccountFreeMargin());
         return(0);
        }
      if(SEma0>LEma0 && SEma02<SEma0 && SEma12>SEma1)
        {
         if(!IsTradeAllowed())
           {
            Print("AD BUY: Òîðãîâûé ïîòîê çàíÿò.");
            return(0);
           }       
         ticket=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"EMA BUY",MAGIC,0,CLR_NONE);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
              {
               Print("Îòêðûòà ïîçèöèÿ íà ïîêóïêó ïî ñèãíàëó EMA BUY: ",OrderOpenPrice());
              }
            else
              {
               Print("Îøèáêà îòêðûòèÿ ïîçèöèè íà ïîêóïêó ïî ñèãíàëó EMA BUY: ",GetLastError());
               return(0);
              }
           }         
        }
                
      if(SEma0<LEma0 && SEma02>SEma0 && SEma12<SEma1)
        {
         if(!IsTradeAllowed())
           {
            Print("EMA SELL: Òîðãîâûé ïîòîê çàíÿò.");
            return(0);
           }
         ticket=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"EMA SELL",MAGIC,0,CLR_NONE);
         if(ticket>0)
           {
           if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
              {
               Print("Îòêðûòà ïîçèöèÿ íà ïðîäàæó ïî ñèãíàëó EMA SELL: ",OrderOpenPrice());
              }
            else
              {
               Print("Îøèáêà îòêðûòèÿ ïîçèöèè íà ïðîäàæó ïî ñèãíàëó EMA SELL: ",GetLastError());
               return(0);
              }
           }
        }
     }
     
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if(OrderType()==OP_BUY)
           {
            if(SEma0<LEma0 && SEma02>SEma0 && SEma12<SEma1)
              {
               if(!IsTradeAllowed())
                 {
                  Print("Order ñlose: Òîðãîâûé ïîòîê çàíÿò.");
                  return(0);
                 }       
               OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
               return(0);
              }
            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     if(!IsTradeAllowed())
                       {
                        Print("Trailing stop: Òîðãîâûé ïîòîê çàíÿò.");
                        return(0);
                       }       
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,CLR_NONE);
                     return(0);
                    }
                 }
              }
           }
         else
           {
            if(SEma0>LEma0 && SEma02<SEma0 && SEma12>SEma1)
              {
               if(!IsTradeAllowed())
                 {
                  Print("Order ñlose: Òîðãîâûé ïîòîê çàíÿò.");
                  return(0);
                 }                    
               OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
               return(0);
              }
            if(TrailingStop>0)
              {
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     if(!IsTradeAllowed())
                       {
                        Print("Trailing stop: Òîðãîâûé ïîòîê çàíÿò.");
                        return(0);
                       }                   
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,CLR_NONE);
                     return(0);
                    }
                 }
              }
           }
        }      
     }   
//----
   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 ---