SMC eur usd(28AUG05)

Profit factor:
0.89

This script is designed to automatically trade the EUR/USD currency pair in the MetaTrader platform. It uses several technical indicators to decide when to open and close trades.

Here's a breakdown of its logic:

  1. Initialization: When the script starts, it sets some initial values. Most notably, it doesn't do much in its init() function.

  2. Main Trading Loop: The start() function is the heart of the script. It runs repeatedly, checking for new trading opportunities and managing existing trades.

    • Check for New Bar: First, it ensures that a new price bar has formed on the chart before proceeding. This prevents the script from executing the same logic multiple times on the same price bar.

    • Indicator Setup: It calculates the values of several technical indicators, including:

      • ATR: Average True Range, which measures market volatility.
      • SMA: Simple Moving Average, which is a basic way to smooth out price data.
      • EMA: Exponential Moving Averages, which give more weight to recent prices. Two EMAs with different periods (5 and 8) are calculated.
      • MACD: Moving Average Convergence Divergence, which identifies momentum by comparing two moving averages.
      • RSI: Relative Strength Index, which measures the magnitude of recent price changes to evaluate overbought or oversold conditions.
    • Order Closure (Exit Logic): It checks if there are any open trades. If so, it looks at the relationship between the 5 and 8 period EMAs.

      • For Buy Orders: If the 8-period EMA is greater than the 5-period EMA, it closes the buy order.

      • For Sell Orders: If the 5-period EMA is greater than the 8-period EMA, it closes the sell order.

    • New Order Logic (Entry Logic): This section determines when to open new trades.

      • Check for Existing Trades: It makes sure there are no existing trades for the EUR/USD pair before opening a new one. This aims to have only one open trade at a time.

      • Check Free Margin: It verifies that the trading account has enough free margin to open a new trade.

      • Buy Order Conditions: To open a buy order, all of the following conditions must be met:

        • The 5-period EMA is greater than the 8-period EMA.

        • The RSI is greater than 50.

        • The MACD line is greater than the signal line.

      • Sell Order Conditions: To open a sell order, all of the following conditions must be met:

        • The 5-period EMA is greater than the 8-period EMA.

        • The RSI is less than 50.

        • The MACD line is less than the signal line.

  3. Order Execution: If the conditions for opening a buy or sell order are met, the script sends an order to the MetaTrader platform. It includes the lot size and a comment to identify the order. It checks if it was opened correctly and prints a message if not.

In summary, this script is a momentum-based trading system that uses moving averages, RSI, and MACD to identify potential buy and sell signals for the EUR/USD currency pair. It manages only one trade at a time and includes basic risk management by checking for sufficient free margin. It also exits positions when there is a possible trend change based on moving average crossovers.

Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It automatically opens orders when conditions are reached
Indicators Used
Indicator of the average true rangeMoving average indicatorMACD HistogramRelative strength index
2 Views
0 Downloads
0 Favorites
SMC eur usd(28AUG05)
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                      SMC Autotrader Momentum.mq4 |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//+ Eur / USD
 extern double TakeProfit = 20;
 extern double Lots = 1.0;
 extern double InitialStop = 80;
 extern double TrailingStop = 40;
 datetime BarTime;

//#####################################################################
int init()
{
//---- 
//----
   return(0);
  }
//#####################################################################

int start()
  {
   int cnt,total,ticket,MinDist,tmp;
   double Spread;
   double ATR;
   double StopMA;
   double SetupHigh, SetupLow;
   
 
//############################################################################
  if(Bars<100){
     Print("bars less than 100");
     return(0);  
  }
  //exit if not new bar
 if(BarTime == Time[0]) {return(0);}
//new bar, update bartime
 BarTime = Time[0]; 
//#########################################################################################
//~~~~~~~~~~~~~~~~Miscellaneous setup stuff~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ATR =iATR(NULL,0,10,0); // BE CAREFUL OF EFFECTING THE AUTO TRAIL STOPS
 StopMA=iMA(NULL,0,24,0,MODE_SMA,PRICE_CLOSE,0);
 MinDist=MarketInfo(Symbol(),MODE_STOPLEVEL);
 Spread=(Ask-Bid);
//#########################################################################################
 double MA1P1,MA1P2,MA2P1,MA2P2;
 MA1P1= iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,1);
 MA1P2= iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,2);
 MA2P1= iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,1);
 MA2P2= iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,2);

 int MACDMA1,MACDMA2,MACDMA3;
 MACDMA1=12;
 MACDMA2=26;
 MACDMA3=9;
 double MACDP1,MACDP2,MACDSP1,MACDSP2;
 MACDP1  = iMACD(NULL,0,MACDMA1,MACDMA2,MACDMA3,PRICE_CLOSE,MODE_MAIN,1);
 MACDP2  = iMACD(NULL,0,MACDMA1,MACDMA2,MACDMA3,PRICE_CLOSE,MODE_MAIN,2);
 MACDSP1 = iMACD(NULL,0,MACDMA1,MACDMA2,MACDMA3,PRICE_CLOSE,MODE_SIGNAL,1);
 MACDSP2 = iMACD(NULL,0,MACDMA1,MACDMA2,MACDMA3,PRICE_CLOSE,MODE_SIGNAL,2);

 double RSIvalP1,RSIvalP2;
 RSIvalP1 = iRSI(NULL,0,12,PRICE_CLOSE,1);
 RSIvalP2 = iRSI(NULL,0,12,PRICE_CLOSE,2);

//########################################################################################
//##################     ORDER CLOSURE  ###################################################
// If Orders are in force then check for closure against Technicals LONG & SHORT
//CLOSE LONG Entries
  total=OrdersTotal();
  if(total>0)
   { 
   for(cnt=0;cnt<total;cnt++)
   {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if(OrderType()==OP_BUY && OrderSymbol()==Symbol())
     {
     if(MA2P1 > MA1P1 && MA2P2 > MA1P2)
      {                                 
       OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close LONG position
     }}

//CLOSE SHORT ENTRIES: 
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); 
    if(OrderType()==OP_SELL && OrderSymbol()==Symbol()) // check for symbol
     {
     if(MA1P1 > MA2P1 && MA1P2 > MA2P2)
      {   
       OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close SHORT position
     }}
    }  // for loop return
    }   // close 1st if 
//##############################################################################
//~~~~~~~~~~~ END OF ORDER Closure routines & Stoploss changes  ~~~~~~~~~~~~~~~~~~~~~~~~~~~
//##########################################################################################
//~~~~~~~~~~~~START of NEW ORDERS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//#########################  NEW POSITIONS ?  ######################################
//Possibly add in timer to stop multiple entries within Period
// Check Margin available
// ONLY ONE ORDER per SYMBOL
// Loop around orders to check symbol doesn't appear more than once
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 total=OrdersTotal();
  if(total>0)
   { 
    for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
       if(OrderSymbol()==Symbol()) return(0);
   }
   }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   if(AccountFreeMargin()<(1000*Lots))
   {Print("We have no money. Free Margin = ", AccountFreeMargin());
    return(0);}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//#########################################################################################
//ENTRY RULES: LONG 
 if(MA1P1 > MA2P1 && MA1P2 > MA2P2 
    &&
    RSIvalP1 > 50
    &&
    MACDP1 > MACDSP1
    )
  {
   ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"MaxMin Long",16384,0,Orange); //Bid-(Point*(MinDist+2))
   if(ticket>0)
    {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
     }
     else Print("Error opening BUY order : ",GetLastError()); 
     return(0); 
   } 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//ENTRY RULES: SHORT                                     //################################
 if(MA1P1 > MA2P1 && MA1P2 > MA2P2 
    &&
    RSIvalP1 < 50
    &&
    MACDP1 < MACDSP1
    )
  {
   ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"MaxMin Short",16384,0,Red);
   if(ticket>0)
    {
     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
      }
      else Print("Error opening SELL order : ",GetLastError()); 
      return(0); 
   }

//####################################################################################
//############               End of PROGRAM                  #########################   
   return(0);
}

Profitability Reports

GBP/AUD Jan 2025 - Jul 2025
1.24
Total Trades 93
Won Trades 36
Lost trades 57
Win Rate 38.71 %
Expected payoff 40.09
Gross Profit 19583.46
Gross Loss -15855.34
Total Net Profit 3728.12
-100%
-50%
0%
50%
100%
EUR/USD Jan 2025 - Jul 2025
1.55
Total Trades 104
Won Trades 40
Lost trades 64
Win Rate 38.46 %
Expected payoff 86.12
Gross Profit 25343.00
Gross Loss -16387.00
Total Net Profit 8956.00
-100%
-50%
0%
50%
100%
AUD/USD Jan 2025 - Jul 2025
1.10
Total Trades 102
Won Trades 37
Lost trades 65
Win Rate 36.27 %
Expected payoff 10.65
Gross Profit 12217.00
Gross Loss -11131.00
Total Net Profit 1086.00
-100%
-50%
0%
50%
100%
USD/CAD Oct 2024 - Jan 2025
1.62
Total Trades 48
Won Trades 19
Lost trades 29
Win Rate 39.58 %
Expected payoff 44.65
Gross Profit 5609.28
Gross Loss -3466.27
Total Net Profit 2143.01
-100%
-50%
0%
50%
100%
NZD/USD Oct 2024 - Jan 2025
0.11
Total Trades 55
Won Trades 8
Lost trades 47
Win Rate 14.55 %
Expected payoff -121.27
Gross Profit 803.00
Gross Loss -7473.00
Total Net Profit -6670.00
-100%
-50%
0%
50%
100%
GBP/USD Oct 2024 - Jan 2025
0.46
Total Trades 55
Won Trades 14
Lost trades 41
Win Rate 25.45 %
Expected payoff -99.20
Gross Profit 4600.00
Gross Loss -10056.00
Total Net Profit -5456.00
-100%
-50%
0%
50%
100%
AUD/USD Oct 2024 - Jan 2025
0.16
Total Trades 51
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff -113.43
Gross Profit 1111.00
Gross Loss -6896.00
Total Net Profit -5785.00
-100%
-50%
0%
50%
100%

Comments