Author: Ron Thompson
Profit factor:
0.73

This script is designed to automate trades in the foreign exchange (forex) market based on the relationship between two moving averages (MAs). Moving averages are a common tool used to identify trends in price data.

Here's the basic idea: The script watches two exponential moving averages (EMAs) of price data. One EMA tracks the average opening price over a period, and the other tracks the average closing price.

The script's core strategy is to buy when the EMA of the closing price crosses above the EMA of the opening price, indicating a potential upward trend. Conversely, it sells when the EMA of the closing price crosses below the EMA of the opening price, suggesting a possible downward trend.

Here's a breakdown of how the script works:

  1. Setup: The script starts by defining some settings like the trade size (Lots), TakeProfit, and StopLoss. These values dictate how much of your capital to risk on a trade.
  2. Checking Conditions: Before placing any trades, the script ensures that there is enough money in your account to make the trade and that enough price data is available.
  3. Calculating MAs: The script calculates the two EMAs: one of the open price and one of the close price. It compares the current values of the EMAs with their previous values.
  4. Identifying Crosses: The key to the strategy is identifying when the two EMAs cross each other. This is determined when the relationship between the EMAs changes from one bar to the next. The script sets a flag (rising or falling) when a crossing occurs.
  5. Closing Existing Orders: If a crossover is detected, the script first closes any existing open trades for that particular currency pair. This is done to reverse positions and enter trades in the new direction of the cross.
  6. Opening New Orders: After closing any existing trades, the script places a new order in the direction of the crossing. If the close EMA crossed above the open EMA, it places a buy order. If the close EMA crossed below the open EMA, it places a sell order.
  7. Stop Loss and Take Profit: When placing an order, the script also sets stop-loss and take-profit levels. Stop-loss orders automatically close a trade if the price moves against your position by a specified amount, limiting potential losses. Take-profit orders automatically close a trade when the price reaches a certain profit level.
  8. Looping: The script runs repeatedly, constantly monitoring the EMAs and looking for new crossing.
Price Data Components
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It automatically opens orders when conditions are reached
Indicators Used
Moving average indicator
12 Views
0 Downloads
0 Favorites
sameMA
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------+
//| 2MA Expert
//+------------------------------------------+

// This one is a dog. Tried on several timeframes and no-go

/*

Put a 5 period Exponential MA of the Open, 
and a 5EMA of the Close on a chart, on any 
timeframe. The above results were given from 
the 1hr chart.

Buy when the MA of the Close crosses above 
the MA of the Open, and vice versa for reversing 
the position to Short. This is theoretically 
an "always in the market" system.

The system takes advantage of the fact that 
when the market is in an uptrend, the closes 
will be above the Opens in a given timeframe. 

And vice versa.

Now, the system catches trends VERY WELL, 
both beginning and ending, as you can see below. 
The problem, and the reason I'm writing this post, 
is that it gets whipsawed (as any trendfollowing system) 
on sideways markets.

*/

#property copyright "Ron Thompson"
#property link      "http://www.lightpatch.com/forex"

// User Input
extern double        Lots = 1.0 ;
extern int     TakeProfit = 0   ;
extern int       StopLoss = 0   ;

// Global scope
double barmove0 = 0;
double barmove1 = 0;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//|------------------------------------------------------------------|

int init()
  {
   return(0);
  }


//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }


//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

int start()
  {

   bool      found=false;
   bool     rising=false;
   bool    falling=false;
   bool      cross=false;

   double slA=0, slB=0, tpA=0, tpB=0;
   double p=Point();
   
   double emaF, emaM, emaS;
   double PemaF, PemaM, PemaS;
   
   int      cnt=0;

   // Error checking
   if(AccountFreeMargin()<(1000*Lots))        {Print("-----NO MONEY"); return(0);}
   if(Bars<100)                               {Print("-----NO BARS "); return(0);}
   if(barmove0==Open[0] && barmove1==Open[1]) {                        return(0);}

   // bars moved, update current position
   barmove0=Open[0];
   barmove1=Open[1];

   // since the bar just moved
   // calculate TP and SL for (B)id and (A)sk
   tpA=Ask+(p*TakeProfit);
   slA=Ask-(p*StopLoss);
   tpB=Bid-(p*TakeProfit);
   slB=Bid+(p*StopLoss);
   if (TakeProfit<=0) {tpA=0; tpB=0;}           
   if (StopLoss<=0)   {slA=0; slB=0;}           
   

   // Hourly chart
   // 3 WMA's 5/10/15
   // ADX (14)
   //emaF= iMA(Symbol(),PERIOD_H4,  2,0,PRICE_OPEN,MODE_EMA,0);
   emaM= iMA(Symbol(),0,25,0,PRICE_OPEN,MODE_EMA,1);
   emaS= iMA(Symbol(),0,25,0,PRICE_CLOSE,MODE_EMA,1);
   PemaM= iMA(Symbol(),0,25,0,PRICE_OPEN,MODE_EMA,2);
   PemaS= iMA(Symbol(),0,25,0,PRICE_CLOSE,MODE_EMA,2);
   
   if (PemaM<emaS && emaM>emaS) { falling=true; cross=true; Print("p=",PemaM," c=",emaM," s=",emaS);}
   if (PemaM>emaS && emaM<emaS) { rising=true;  cross=true; Print("p=",PemaM," c=",emaM," s=",emaS);}

   // close then open orders based on cross
   if (cross)
     {
      // Close ALL the open orders 
      for(cnt=OrdersTotal();cnt>=0;cnt--)
        {
         OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
         if(OrderSymbol()==Symbol())
           {
            if (OrderType()==0) {OrderClose(OrderTicket(),Lots,Bid,3,White);}
            if (OrderType()==1) {OrderClose(OrderTicket(),Lots,Ask,3,Red);}
           }
        }
      // Open new order based on direction of cross
      if (rising)  OrderSend(Symbol(),OP_BUY,Lots,Ask,3,slA,tpA,"ZZZ100",11123,0,White);
      if (falling) OrderSend(Symbol(),OP_SELL,Lots,Bid,3,slB,tpB,"ZZZ100",11321,0,Red);

      return(0);
     }
     
   return(0);
  }


Profitability Reports

USD/JPY Jul 2025 - Sep 2025
1.07
Total Trades 94
Won Trades 35
Lost trades 59
Win Rate 37.23 %
Expected payoff 10.40
Gross Profit 14788.18
Gross Loss -13810.37
Total Net Profit 977.81
-100%
-50%
0%
50%
100%
USD/CHF Jul 2025 - Sep 2025
1.33
Total Trades 111
Won Trades 54
Lost trades 57
Win Rate 48.65 %
Expected payoff 29.72
Gross Profit 13360.18
Gross Loss -10060.76
Total Net Profit 3299.42
-100%
-50%
0%
50%
100%
USD/CAD Jul 2025 - Sep 2025
1.03
Total Trades 134
Won Trades 56
Lost trades 78
Win Rate 41.79 %
Expected payoff 1.94
Gross Profit 7966.68
Gross Loss -7707.02
Total Net Profit 259.66
-100%
-50%
0%
50%
100%
NZD/USD Jul 2025 - Sep 2025
0.63
Total Trades 109
Won Trades 40
Lost trades 69
Win Rate 36.70 %
Expected payoff -33.20
Gross Profit 6153.00
Gross Loss -9772.00
Total Net Profit -3619.00
-100%
-50%
0%
50%
100%
GBP/USD Jul 2025 - Sep 2025
0.75
Total Trades 154
Won Trades 69
Lost trades 85
Win Rate 44.81 %
Expected payoff -29.36
Gross Profit 13599.00
Gross Loss -18121.00
Total Net Profit -4522.00
-100%
-50%
0%
50%
100%
GBP/CAD Jul 2025 - Sep 2025
0.54
Total Trades 138
Won Trades 47
Lost trades 91
Win Rate 34.06 %
Expected payoff -49.14
Gross Profit 7866.67
Gross Loss -14648.27
Total Net Profit -6781.60
-100%
-50%
0%
50%
100%
GBP/AUD Jul 2025 - Sep 2025
0.62
Total Trades 130
Won Trades 50
Lost trades 80
Win Rate 38.46 %
Expected payoff -49.15
Gross Profit 10362.89
Gross Loss -16752.89
Total Net Profit -6390.00
-100%
-50%
0%
50%
100%
EUR/USD Jul 2025 - Sep 2025
0.00
Total Trades 5
Won Trades 3
Lost trades 2
Win Rate 60.00 %
Expected payoff -210830.00
Gross Profit 345.00
Gross Loss -1054495.00
Total Net Profit -1054150.00
-100%
-50%
0%
50%
100%
AUD/USD Jul 2025 - Sep 2025
0.23
Total Trades 84
Won Trades 17
Lost trades 67
Win Rate 20.24 %
Expected payoff -116.68
Gross Profit 2951.00
Gross Loss -12752.00
Total Net Profit -9801.00
-100%
-50%
0%
50%
100%
USD/JPY Jan 2025 - Jul 2025
1.05
Total Trades 268
Won Trades 126
Lost trades 142
Win Rate 47.01 %
Expected payoff 6.63
Gross Profit 36446.04
Gross Loss -34670.40
Total Net Profit 1775.64
-100%
-50%
0%
50%
100%

Comments