Moving Average

Profit factor:
0.46
Price Data Components
Series array that contains close prices for each bar
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt Closes Orders by itself
Indicators Used
Moving average indicator
8 Views
0 Downloads
0 Favorites
Moving Average
//+------------------------------------------------------------------+
//|                                               Moving Average.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#define MAGICMA  20050610

extern double Lots               = 0.1;
extern double MaximumRisk        = 0.02;
extern double DecreaseFactor     = 3;
extern double MovingPeriod       = 12;
extern double MovingShift        = 6;
//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   int    orders=HistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
//---- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//---- calcuulate number of losses orders without a break
   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
         //----
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
      if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
     }
//---- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma;
   int    res;
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//---- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---- sell conditions
   if(Open[1]>ma && Close[1]<ma)  
     {
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red);
      return;
     }
//---- buy conditions
   if(Open[1]<ma && Close[1]>ma)  
     {
      res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);
      return;
     }
//----
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double ma;
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//---- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //---- check order type 
      if(OrderType()==OP_BUY)
        {
         if(Open[1]>ma && Close[1]<ma) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(Open[1]<ma && Close[1]>ma) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
         break;
        }
     }
//----
  }
//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
  {
//---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//----
  }
//+------------------------------------------------------------------+

Profitability Reports

NZD/USD Jul 2025 - Sep 2025
0.48
Total Trades 151
Won Trades 31
Lost trades 120
Win Rate 20.53 %
Expected payoff -5.07
Gross Profit 716.80
Gross Loss -1483.00
Total Net Profit -766.20
-100%
-50%
0%
50%
100%
GBP/USD Jul 2025 - Sep 2025
0.79
Total Trades 147
Won Trades 36
Lost trades 111
Win Rate 24.49 %
Expected payoff -2.96
Gross Profit 1621.10
Gross Loss -2056.60
Total Net Profit -435.50
-100%
-50%
0%
50%
100%
GBP/CAD Jul 2025 - Sep 2025
0.19
Total Trades 156
Won Trades 15
Lost trades 141
Win Rate 9.62 %
Expected payoff -14.20
Gross Profit 522.99
Gross Loss -2738.91
Total Net Profit -2215.92
-100%
-50%
0%
50%
100%
GBP/AUD Jul 2025 - Sep 2025
0.70
Total Trades 145
Won Trades 36
Lost trades 109
Win Rate 24.83 %
Expected payoff -3.47
Gross Profit 1202.99
Gross Loss -1706.57
Total Net Profit -503.58
-100%
-50%
0%
50%
100%
EUR/USD Jul 2025 - Sep 2025
0.00
Total Trades 14
Won Trades 4
Lost trades 10
Win Rate 28.57 %
Expected payoff -15079.16
Gross Profit 36.30
Gross Loss -211144.50
Total Net Profit -211108.20
-100%
-50%
0%
50%
100%
AUD/USD Jul 2025 - Sep 2025
0.72
Total Trades 147
Won Trades 41
Lost trades 106
Win Rate 27.89 %
Expected payoff -2.56
Gross Profit 950.50
Gross Loss -1326.10
Total Net Profit -375.60
-100%
-50%
0%
50%
100%
USD/CAD Oct 2024 - Jan 2025
0.63
Total Trades 72
Won Trades 19
Lost trades 53
Win Rate 26.39 %
Expected payoff -4.36
Gross Profit 532.50
Gross Loss -846.62
Total Net Profit -314.12
-100%
-50%
0%
50%
100%
NZD/USD Oct 2024 - Jan 2025
0.25
Total Trades 82
Won Trades 14
Lost trades 68
Win Rate 17.07 %
Expected payoff -11.89
Gross Profit 328.60
Gross Loss -1303.30
Total Net Profit -974.70
-100%
-50%
0%
50%
100%
GBP/USD Oct 2024 - Jan 2025
0.36
Total Trades 71
Won Trades 13
Lost trades 58
Win Rate 18.31 %
Expected payoff -19.08
Gross Profit 761.60
Gross Loss -2116.30
Total Net Profit -1354.70
-100%
-50%
0%
50%
100%

Comments