Author: Expert Advisor Builder
Profit factor:
14.13

Trading Strategy Logic Overview

This document provides a non-technical explanation of the automated trading logic contained within the provided MQL script. The script is designed to function as an Expert Advisor (EA), which automatically monitors market data and executes trades based on specific price actions and predefined risk management rules.

1. Core Market Analysis

The script determines market conditions by calculating a "reference price" based on recent historical data. Specifically:

  • Data Source: It looks at the highest and lowest prices over the last 8 candles (bars) on the chart.
  • Average Calculation: It calculates the average of these highs and lows to create a central equilibrium point (a median value).
  • Price Comparison: The script then compares the current price and the previous candle's closing price against this calculated equilibrium.

2. Entry Signals (When to Trade)

The robot looks for specific "crossovers" or shifts in momentum relative to the average price:

  • Buy Signal: Triggered when the current price is above the average, but the previous candle's price was below it. This suggests an upward movement beginning to break through a resistance level.
  • Sell Signal: Triggered when the current price is below the average, but the previous candle's price was above it. This suggests a downward movement breaking through a support level.

3. Trade Execution and Management

Once a signal is identified, the script handles the logistics of the trade:

Order Placement

  • Margin Check: Before opening a trade, the script checks if the account has enough available funds to cover the required margin.
  • Automatic Entry: If conditions are met and funds are sufficient, it automatically opens a Buy or Sell position with the specified volume (Lots).

Risk Management

To protect your capital, the script includes several safety features:

  • Stop Loss: Automatically sets a price limit to close a losing trade to prevent further losses.
  • Take Profit: Automatically closes a trade once a specific profit target is reached.
  • Trailing Stop: This is a dynamic protection feature. If the trade moves in your favor, the script "drags" the Stop Loss along behind the price at a set distance. This allows you to lock in profits while giving the trade room to continue moving in your direction.

4. Operational Modes

The script offers two ways to process market data:

  • Bar Mode (Default): The robot checks for signals only when a new candle is formed on the chart.
  • Tick Mode: The robot checks for signals every single time the price moves (every "tick"), allowing for faster reaction times but higher processing frequency.

5. Notifications and Tracking

  • Logging: The script prints status updates to the internal log (e.g., confirming a trade was opened or noting if there is insufficient money).
  • Email Alerts: If enabled, the script can send an email notification to your registered account whenever it opens or closes a trade, providing real-time updates on its activity.
Price Data Components
Series array that contains close prices for each bar
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reached
Miscellaneous
It sends emails
16 Views
0 Downloads
0 Favorites
Alex_v1_1
//+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder                  |
//|                http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
//|                                                                  |
//|  In no event will author be liable for any damages whatsoever.   |
//|                      Use at your own risk.                       |
//|                                                                  |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+

#define SIGNAL_NONE 0
#define SIGNAL_BUY   1
#define SIGNAL_SELL  2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4

#property copyright "Expert Advisor Builder"
#property link      "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = False;
extern double Lots = 0.1;
extern int Slippage = 3;
extern bool StopLossMode = True;
extern int StopLoss = 100;
extern bool TakeProfitMode = False;
extern int TakeProfit = 60;
extern bool TrailingStopMode = True;
extern int TrailingStop = 50;

int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init() {
   BarCount = Bars;

   if (EachTickMode) Current = 0; else Current = 1;

   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit() {
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start() {
   int Order = SIGNAL_NONE;
   int Total, Ticket;
   double StopLossLevel, TakeProfitLevel;



   if (EachTickMode && Bars != BarCount) TickCheck = False;
   Total = OrdersTotal();
   Order = SIGNAL_NONE;

   //+------------------------------------------------------------------+
   //| Variable Begin                                                   |
   //+------------------------------------------------------------------+

double Var1 = (High[8] + High[7] + High[6] + High[5] +High[4] + High[3]+High[2]+High[1]) / 8;
double Var2 = (Low[8]+Low[7]+Low[6]+Low[5]+Low[4]+Low[3]+Low[2]+Low[1])/8;
double Var3 = ( Var1  +  Var2 ) * 0.5;

double Buy1_1 = iClose(NULL, 0, Current + 0);
double Buy1_2 =  Var3 ;
double Buy2_1 = iClose(NULL, 0, Current + 1);
double Buy2_2 =  Var3 ;

double Sell1_1 = iClose(NULL, 0, Current + 0);
double Sell1_2 =  Var3 ;
double Sell2_1 = iClose(NULL, 0, Current + 1);
double Sell2_2 =  Var3 ;



   
   //+------------------------------------------------------------------+
   //| Variable End                                                     |
   //+------------------------------------------------------------------+

   //Check position
   bool IsTrade = False;

   for (int i = 0; i < Total; i ++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType() <= OP_SELL &&  OrderSymbol() == Symbol()) {
         IsTrade = True;
         if(OrderType() == OP_BUY) {
            //Close

            //+------------------------------------------------------------------+
            //| Signal Begin(Exit Buy)                                           |
            //+------------------------------------------------------------------+

            

            //+------------------------------------------------------------------+
            //| Signal End(Exit Buy)                                             |
            //+------------------------------------------------------------------+

            if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
               OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
               if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
               if (!EachTickMode) BarCount = Bars;
               IsTrade = False;
               continue;
            }
            //Trailing stop
            if(TrailingStopMode && TrailingStop > 0) {                 
               if(Bid - OrderOpenPrice() > Point * TrailingStop) {
                  if(OrderStopLoss() < Bid - Point * TrailingStop) {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
                     if (!EachTickMode) BarCount = Bars;
                     continue;
                  }
               }
            }
         } else {
            //Close

            //+------------------------------------------------------------------+
            //| Signal Begin(Exit Sell)                                          |
            //+------------------------------------------------------------------+

            

            //+------------------------------------------------------------------+
            //| Signal End(Exit Sell)                                            |
            //+------------------------------------------------------------------+

            if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
               OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
               if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
               if (!EachTickMode) BarCount = Bars;
               IsTrade = False;
               continue;
            }
            //Trailing stop
            if(TrailingStopMode && TrailingStop > 0) {                 
               if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
                  if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
                     if (!EachTickMode) BarCount = Bars;
                     continue;
                  }
               }
            }
         }
      }
   }

   //+------------------------------------------------------------------+
   //| Signal Begin(Entry)                                              |
   //+------------------------------------------------------------------+

   if (Buy1_1 > Buy1_2 && Buy2_1 < Buy2_2) Order = SIGNAL_BUY;

   if (Sell1_1 < Sell1_2 && Sell2_1 > Sell2_2) Order = SIGNAL_SELL;


   //+------------------------------------------------------------------+
   //| Signal End                                                       |
   //+------------------------------------------------------------------+

   //Buy
   if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
      if(!IsTrade) {
         //Check free margin
         if (AccountFreeMargin() < (1000 * Lots)) {
            Print("We have no money. Free Margin = ", AccountFreeMargin());
            return(0);
         }

         if (StopLossMode) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
         if (TakeProfitMode) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

         Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
         if(Ticket > 0) {
            if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
				Print("BUY order opened : ", OrderOpenPrice());
                if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
			} else {
				Print("Error opening BUY order : ", GetLastError());
			}
         }
         if (EachTickMode) TickCheck = True;
         if (!EachTickMode) BarCount = Bars;
         return(0);
      }
   }

   //Sell
   if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
      if(!IsTrade) {
         //Check free margin
         if (AccountFreeMargin() < (1000 * Lots)) {
            Print("We have no money. Free Margin = ", AccountFreeMargin());
            return(0);
         }

         if (StopLossMode) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
         if (TakeProfitMode) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

         Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
         if(Ticket > 0) {
            if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
				Print("SELL order opened : ", OrderOpenPrice());
                if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
			} else {
				Print("Error opening SELL order : ", GetLastError());
			}
         }
         if (EachTickMode) TickCheck = True;
         if (!EachTickMode) BarCount = Bars;
         return(0);
      }
   }

   if (!EachTickMode) BarCount = Bars;

   return(0);
}
//+------------------------------------------------------------------+

Profitability Reports

PERFORMANCE BY SYMBOL

Expected payoff

Average expected payoff across the available backtests for each symbol.

Positive Negative
16 reports
EUR/USD Jul 2025 - Sep 2025
219.08
Total Trades 425
Won Trades 231
Lost trades 194
Win Rate 54.35 %
Expected payoff 991.01
Gross Profit 423111.90
Gross Loss -1931.30
Total Net Profit 421180.60
-100%
-50%
0%
50%
100%
USD/JPY Jul 2025 - Sep 2025
0.83
Total Trades 538
Won Trades 301
Lost trades 237
Win Rate 55.95 %
Expected payoff -0.51
Gross Profit 1335.74
Gross Loss -1607.97
Total Net Profit -272.23
-100%
-50%
0%
50%
100%
AUD/USD Oct 2025 - Feb 2026
0.82
Total Trades 247
Won Trades 142
Lost trades 105
Win Rate 57.49 %
Expected payoff -0.77
Gross Profit 858.90
Gross Loss -1050.00
Total Net Profit -191.10
-100%
-50%
0%
50%
100%
EUR/USD Oct 2025 - Feb 2026
0.67
Total Trades 628
Won Trades 354
Lost trades 274
Win Rate 56.37 %
Expected payoff -1.44
Gross Profit 1835.70
Gross Loss -2740.00
Total Net Profit -904.30
-100%
-50%
0%
50%
100%
NZD/USD Jul 2025 - Sep 2025
0.66
Total Trades 312
Won Trades 172
Lost trades 140
Win Rate 55.13 %
Expected payoff -1.54
Gross Profit 912.30
Gross Loss -1392.70
Total Net Profit -480.40
-100%
-50%
0%
50%
100%
USD/CAD Oct 2024 - Jan 2025
0.64
Total Trades 265
Won Trades 136
Lost trades 129
Win Rate 51.32 %
Expected payoff -1.26
Gross Profit 587.79
Gross Loss -921.09
Total Net Profit -333.30
-100%
-50%
0%
50%
100%
AUD/USD Jul 2025 - Sep 2025
0.61
Total Trades 344
Won Trades 194
Lost trades 150
Win Rate 56.40 %
Expected payoff -1.72
Gross Profit 908.60
Gross Loss -1500.00
Total Net Profit -591.40
-100%
-50%
0%
50%
100%
USD/CHF Jul 2025 - Sep 2025
0.58
Total Trades 343
Won Trades 172
Lost trades 171
Win Rate 50.15 %
Expected payoff -2.59
Gross Profit 1237.57
Gross Loss -2124.53
Total Net Profit -886.96
-100%
-50%
0%
50%
100%
USD/CAD Jul 2025 - Sep 2025
0.51
Total Trades 388
Won Trades 190
Lost trades 198
Win Rate 48.97 %
Expected payoff -1.81
Gross Profit 735.17
Gross Loss -1438.51
Total Net Profit -703.34
-100%
-50%
0%
50%
100%
GBP/USD Jul 2025 - Sep 2025
0.45
Total Trades 467
Won Trades 214
Lost trades 253
Win Rate 45.82 %
Expected payoff -3.00
Gross Profit 1126.30
Gross Loss -2528.40
Total Net Profit -1402.10
-100%
-50%
0%
50%
100%
NZD/USD Oct 2024 - Jan 2025
0.40
Total Trades 271
Won Trades 112
Lost trades 159
Win Rate 41.33 %
Expected payoff -3.49
Gross Profit 643.80
Gross Loss -1590.00
Total Net Profit -946.20
-100%
-50%
0%
50%
100%
GBP/AUD Oct 2025 - Feb 2026
0.38
Total Trades 1015
Won Trades 339
Lost trades 676
Win Rate 33.40 %
Expected payoff -2.88
Gross Profit 1821.77
Gross Loss -4749.22
Total Net Profit -2927.45
-100%
-50%
0%
50%
100%
GBP/AUD Jul 2025 - Sep 2025
0.31
Total Trades 590
Won Trades 208
Lost trades 382
Win Rate 35.25 %
Expected payoff -2.90
Gross Profit 776.84
Gross Loss -2484.91
Total Net Profit -1708.07
-100%
-50%
0%
50%
100%
GBP/CAD Oct 2025 - Feb 2026
0.21
Total Trades 973
Won Trades 222
Lost trades 751
Win Rate 22.82 %
Expected payoff -4.37
Gross Profit 1125.96
Gross Loss -5373.23
Total Net Profit -4247.27
-100%
-50%
0%
50%
100%
USD/CHF Oct 2024 - Jan 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/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%

Comments