Author: ������ ��������
Profit factor:
0.53
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
7 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);
  }
//+------------------------------------------------------------------+

Profitability Reports

GBP/USD Jul 2025 - Sep 2025
0.49
Total Trades 522
Won Trades 247
Lost trades 275
Win Rate 47.32 %
Expected payoff -17.90
Gross Profit 9103.53
Gross Loss -18446.34
Total Net Profit -9342.81
-100%
-50%
0%
50%
100%
GBP/CAD Jul 2025 - Sep 2025
0.00
Total Trades 0
Won Trades 0
Lost trades 0
Win Rate 0.0 %
Expected payoff 0.00
Gross Profit 0.00
Gross Loss 0.00
Total Net Profit 0.00
-100%
-50%
0%
50%
100%
GBP/AUD Jul 2025 - Sep 2025
0.27
Total Trades 742
Won Trades 211
Lost trades 531
Win Rate 28.44 %
Expected payoff -11.96
Gross Profit 3210.60
Gross Loss -12083.11
Total Net Profit -8872.51
-100%
-50%
0%
50%
100%
EUR/USD Jul 2025 - Sep 2025
1.17
Total Trades 1616
Won Trades 456
Lost trades 1160
Win Rate 28.22 %
Expected payoff 99.03
Gross Profit 1122872.47
Gross Loss -962841.35
Total Net Profit 160031.12
-100%
-50%
0%
50%
100%
AUD/USD Jul 2025 - Sep 2025
0.64
Total Trades 352
Won Trades 169
Lost trades 183
Win Rate 48.01 %
Expected payoff -25.99
Gross Profit 16318.29
Gross Loss -25467.09
Total Net Profit -9148.80
-100%
-50%
0%
50%
100%
USD/CAD Oct 2024 - Jan 2025
0.59
Total Trades 271
Won Trades 138
Lost trades 133
Win Rate 50.92 %
Expected payoff -18.55
Gross Profit 7166.54
Gross Loss -12193.84
Total Net Profit -5027.30
-100%
-50%
0%
50%
100%
NZD/USD Oct 2024 - Jan 2025
0.31
Total Trades 236
Won Trades 88
Lost trades 148
Win Rate 37.29 %
Expected payoff -41.53
Gross Profit 4418.11
Gross Loss -14219.34
Total Net Profit -9801.23
-100%
-50%
0%
50%
100%
GBP/USD Oct 2024 - Jan 2025
0.82
Total Trades 615
Won Trades 348
Lost trades 267
Win Rate 56.59 %
Expected payoff -12.08
Gross Profit 33575.64
Gross Loss -41007.18
Total Net Profit -7431.54
-100%
-50%
0%
50%
100%
AUD/USD Oct 2024 - Jan 2025
0.44
Total Trades 308
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff -31.12
Gross Profit 7399.79
Gross Loss -16985.11
Total Net Profit -9585.32
-100%
-50%
0%
50%
100%

Comments