3 Bar Reversal

Author: Copyright � 2007, fxid10t@yahoo.com
Profit factor:
0.85
Price Data Components
Series array that contains close prices for each barSeries array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reached
12 Views
0 Downloads
0 Favorites
3 Bar Reversal
//+------------------------------------------------------------------+
//| 3 Bar Reversal.mq4
//| Copyright © 2007, fxid10t@yahoo.com
//| "Gordon Gibson" <gibsonmail@shaw.ca> 
//+------------------------------------------------------------------+

#property copyright "Copyright © 2007, fxid10t@yahoo.com"
#property link      "Gordon Gibson <gibsonmail@shaw.ca> "
#include <stdlib.mqh>

extern double Lots=0.1;

string pairs[] = { "EURUSDm","USDJPYm","GBPUSDm","USDCHFm","EURCHFm","AUDUSDm","USDCADm",
                   "NZDUSDm","EURGBPm","EURJPYm","GBPJPYm","CHFJPYm","GBPCHFm","EURAUDm",
                   "EURCADm","AUDCADm","AUDJPYm","NZDJPYm","AUDNZDm" };
int periods[] = { 1,5,15,30,60,240,1440,10080,43200 };

string TradeSymbol, CommentHeader, CommentsPairs[];
int      TradePeriod,MagicNumber;
int      Pair = -1;
int      PPeriod = -1;
double   bid,ask,point,spread,ticket,bSL,sSL,btp,stp;
int b1,s1;

//initialize
int init(){
   if ( IsTesting() ) { if ( ArrayResize(pairs,1) != 0 )  pairs[0] = Symbol();   } 
   if ( IsTesting() ) { if ( ArrayResize(periods,1) != 0 )  periods[0] = Period(); }
return(0);  }
//deinitialize
int deinit()   {return(0);}

int start() {
b1=0;s1=0;
//Select Pair from Array
Pair = (Pair+1) % ArraySize(pairs);
TradeSymbol = pairs[Pair];
//Identify ibfx mini trade symbol
if(iClose(TradeSymbol,1440,0)==0) { TradeSymbol=StringSubstr(TradeSymbol,0,6);  }

//TradeSymbol MagicNumber Assignment
if (TradeSymbol=="AUDCADm" || TradeSymbol=="AUDCAD") {MagicNumber=200001;}
if (TradeSymbol=="AUDJPYm" || TradeSymbol=="AUDJPY") {MagicNumber=200002;}
if (TradeSymbol=="AUDNZDm" || TradeSymbol=="AUDNZD") {MagicNumber=200003;}
if (TradeSymbol=="AUDUSDm" || TradeSymbol=="AUDUSD") {MagicNumber=200004;}
if (TradeSymbol=="CHFJPYm" || TradeSymbol=="CHFJPY") {MagicNumber=200005;}
if (TradeSymbol=="EURAUDm" || TradeSymbol=="EURAUD") {MagicNumber=200006;}
if (TradeSymbol=="EURCADm" || TradeSymbol=="EURCAD") {MagicNumber=200007;}
if (TradeSymbol=="EURCHFm" || TradeSymbol=="EURCHF") {MagicNumber=200008;}
if (TradeSymbol=="EURGBPm" || TradeSymbol=="EURGBP") {MagicNumber=200009;}
if (TradeSymbol=="EURJPYm" || TradeSymbol=="EURJPY") {MagicNumber=200010;}
if (TradeSymbol=="EURUSDm" || TradeSymbol=="EURUSD") {MagicNumber=200011;}
if (TradeSymbol=="GBPCHFm" || TradeSymbol=="GBPCHF") {MagicNumber=200012;}   
if (TradeSymbol=="GBPJPYm" || TradeSymbol=="GBPJPY") {MagicNumber=200013;}
if (TradeSymbol=="GBPUSDm" || TradeSymbol=="GBPUSD") {MagicNumber=200014;}
if (TradeSymbol=="NZDJPYm" || TradeSymbol=="NZDJPY") {MagicNumber=200015;}
if (TradeSymbol=="NZDUSDm" || TradeSymbol=="NZDUSD") {MagicNumber=200016;}
if (TradeSymbol=="USDCHFm" || TradeSymbol=="USDCHF") {MagicNumber=200017;}
if (TradeSymbol=="USDJPYm" || TradeSymbol=="USDJPY") {MagicNumber=200018;}
if (TradeSymbol=="USDCADm" || TradeSymbol=="USDCAD") {MagicNumber=200019;}
if (MagicNumber==0) {MagicNumber = 200999;}  

//Assign Symbol Bid/Ask, Point & Spread values
bid=MarketInfo(TradeSymbol,MODE_BID);
ask=MarketInfo(TradeSymbol,MODE_ASK);
point=MarketInfo(TradeSymbol,MODE_POINT);
spread=MarketInfo(TradeSymbol,MODE_SPREAD); 
if(IsTesting()) { if(spread > 13*point) {spread=13*point;}}

//Pair Chart Period Setup check loop
/*for(int p=0;p<9;p++) {
      PPeriod = (PPeriod+1) % ArraySize(periods);
      TradePeriod = periods[PPeriod]; */
      TradePeriod = Period();
//Orders counter
int cnt,total=OrdersTotal();
if(TotalTradesThisSymbol(TradeSymbol)==0) {  b1=0;s1=0;   }
if(TotalTradesThisSymbol(TradeSymbol)>0)  {
   for(cnt=0;cnt<total;cnt++) {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==TradeSymbol) {
      if(OrderComment()==StringConcatenate(TradeSymbol," ",TradePeriod," 3BR Long") )  {b1=OrderTicket(); }
      if(OrderComment()==StringConcatenate(TradeSymbol," ",TradePeriod," 3BR Short") )  {s1=OrderTicket(); }
      }  }  }

//Buy Setup   
   if(   iHigh(TradeSymbol,TradePeriod,5)<iHigh(TradeSymbol,TradePeriod,4) &&
         iHigh(TradeSymbol,TradePeriod,4)<iHigh(TradeSymbol,TradePeriod,3) &&//3 is swing high
         iHigh(TradeSymbol,TradePeriod,3)>iHigh(TradeSymbol,TradePeriod,2) &&
         iHigh(TradeSymbol,TradePeriod,2)>iHigh(TradeSymbol,TradePeriod,1) )  {
//modify open buystop order
      if(OrderSelect(b1,SELECT_BY_TICKET)==true && OrderType()==OP_BUYSTOP)   {
         if(iHigh(TradeSymbol,TradePeriod,3)+spread < OrderOpenPrice()) {
         OrderModify(b1,iHigh(TradeSymbol,TradePeriod,3)+spread,//swing high
                     OrderStopLoss(),OrderTakeProfit(),OrderExpiration(),Orchid);   }  }
//sell order modify initial/trailing stoploss
      if(OrderSelect(s1,SELECT_BY_TICKET)==true && OrderType()==OP_SELL)   {
         if( (iHigh(TradeSymbol,TradePeriod,3)+spread+(1*point) < OrderStopLoss() &&
              iHigh(TradeSymbol,TradePeriod,3)+spread+(1*point) < OrderOpenPrice() ) ||
            OrderStopLoss()==0)  {
         OrderModify(s1,OrderOpenPrice(),iHigh(TradeSymbol,TradePeriod,3)+spread+(1*point),//swing high
                     OrderTakeProfit(),OrderExpiration(),LightSalmon);  }  }  
//Buy Execution
      if(b1==0)   {
         ticket=OrderSend(TradeSymbol,
                          OP_BUYSTOP,
                          Lots,
                          iHigh(TradeSymbol,TradePeriod,3)+spread,//swing high
                          0,//slippage
                          0,//stoploss set when stop order is executed
                          0,//no tp defined
                          StringConcatenate(TradeSymbol," ",TradePeriod," 3BR Long"),
                          MagicNumber,
                          0,//time expire,
                          Aqua);
                          if(ticket>0)   {
                              if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))  {Print(ticket);}
                              else Print("Error Opening BuyStop Order: ",GetLastError());
                          return(0);   }}
}
//Sell Setup
   if(   iLow(TradeSymbol,TradePeriod,5)>iLow(TradeSymbol,TradePeriod,4) &&
         iLow(TradeSymbol,TradePeriod,4)>iLow(TradeSymbol,TradePeriod,3) &&//3 is swing low
         iLow(TradeSymbol,TradePeriod,3)<iLow(TradeSymbol,TradePeriod,2) &&
         iLow(TradeSymbol,TradePeriod,2)<iLow(TradeSymbol,TradePeriod,1) )  {
//modify open sellstop order
      if(OrderSelect(s1,SELECT_BY_TICKET)==true && OrderType()==OP_SELLSTOP)  {
         if(iLow(TradeSymbol,TradePeriod,3)-spread > OrderOpenPrice())  {
         OrderModify(s1,iLow(TradeSymbol,TradePeriod,3)-spread,//swing low
                     OrderStopLoss(),OrderTakeProfit(),OrderExpiration(),HotPink);  }  }
//buy order modify initial/trailing stoploss
      if(OrderSelect(b1,SELECT_BY_TICKET)==true && OrderType()==OP_BUY)  {
         if( (iLow(TradeSymbol,TradePeriod,3)-spread-(1*point) > OrderStopLoss() &&
              iLow(TradeSymbol,TradePeriod,3)-spread-(1*point) > OrderOpenPrice() ) ||
         OrderStopLoss()==0)   {
         OrderModify(b1,OrderOpenPrice(),iLow(TradeSymbol,TradePeriod,3)-spread-(1*point),//swing low
                     OrderTakeProfit(),OrderExpiration(),Orchid); }  }  
//Sell Execution
      if(s1==0)   {
         ticket=OrderSend(TradeSymbol,
                          OP_SELLSTOP,
                          Lots,
                          iLow(TradeSymbol,TradePeriod,3)-spread,//3 is swing low
                          0,//slippage
                          0,//stoploss set when stop order is executed
                          0,//no tp defined
                          StringConcatenate(TradeSymbol," ",TradePeriod," 3BR Short"),
                          MagicNumber,
                          0,//time expire,
                          HotPink);
                          if(ticket>0)   {
                              if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))   {Print(ticket);}
                              else Print("Error Opening SellStop Order: ",GetLastError());
                          return(0);   }}
}
//   }//end period loop
return(0);}//end start()
//+------------------------------------------------------------------+
int TotalTradesThisSymbol(string TradeSymbol) {
   int i, TradesThisSymbol=0;
   for(i=0;i<OrdersTotal();i++)  {
      OrderSelect(i,SELECT_BY_POS);
      if(OrderSymbol()==TradeSymbol &&
         OrderComment()==StringConcatenate(TradeSymbol," ",TradePeriod," 3BR Long") ||
         OrderComment()==StringConcatenate(TradeSymbol," ",TradePeriod," 3BR Short"))   
         {  TradesThisSymbol++;  }   }
return(TradesThisSymbol);  }//end TotalTradesThisSymbol

Profitability Reports

GBP/CAD Jul 2025 - Sep 2025
0.95
Total Trades 52
Won Trades 21
Lost trades 31
Win Rate 40.38 %
Expected payoff -0.97
Gross Profit 922.28
Gross Loss -972.74
Total Net Profit -50.46
-100%
-50%
0%
50%
100%
GBP/AUD Jul 2025 - Sep 2025
1.20
Total Trades 45
Won Trades 18
Lost trades 27
Win Rate 40.00 %
Expected payoff 3.68
Gross Profit 1013.28
Gross Loss -847.57
Total Net Profit 165.71
-100%
-50%
0%
50%
100%
AUD/USD Jul 2025 - Sep 2025
1.00
Total Trades 41
Won Trades 20
Lost trades 21
Win Rate 48.78 %
Expected payoff 0.00
Gross Profit 544.50
Gross Loss -544.60
Total Net Profit -0.10
-100%
-50%
0%
50%
100%
USD/JPY Jan 2025 - Jul 2025
0.87
Total Trades 105
Won Trades 42
Lost trades 63
Win Rate 40.00 %
Expected payoff -3.81
Gross Profit 2644.86
Gross Loss -3045.14
Total Net Profit -400.28
-100%
-50%
0%
50%
100%
USD/CHF Jan 2025 - Jul 2025
0.63
Total Trades 114
Won Trades 43
Lost trades 71
Win Rate 37.72 %
Expected payoff -10.53
Gross Profit 2011.41
Gross Loss -3211.71
Total Net Profit -1200.30
-100%
-50%
0%
50%
100%
USD/CAD Jan 2025 - Jul 2025
0.96
Total Trades 104
Won Trades 49
Lost trades 55
Win Rate 47.12 %
Expected payoff -0.80
Gross Profit 1767.73
Gross Loss -1850.62
Total Net Profit -82.89
-100%
-50%
0%
50%
100%
NZD/USD Jan 2025 - Jul 2025
1.17
Total Trades 99
Won Trades 45
Lost trades 54
Win Rate 45.45 %
Expected payoff 2.63
Gross Profit 1792.40
Gross Loss -1532.00
Total Net Profit 260.40
-100%
-50%
0%
50%
100%
GBP/USD Jan 2025 - Jul 2025
0.91
Total Trades 111
Won Trades 41
Lost trades 70
Win Rate 36.94 %
Expected payoff -2.64
Gross Profit 3094.60
Gross Loss -3387.60
Total Net Profit -293.00
-100%
-50%
0%
50%
100%
GBP/CAD Jan 2025 - Jul 2025
0.58
Total Trades 129
Won Trades 41
Lost trades 88
Win Rate 31.78 %
Expected payoff -12.51
Gross Profit 2191.02
Gross Loss -3805.39
Total Net Profit -1614.37
-100%
-50%
0%
50%
100%
GBP/AUD Jan 2025 - Jul 2025
1.26
Total Trades 106
Won Trades 43
Lost trades 63
Win Rate 40.57 %
Expected payoff 6.29
Gross Profit 3242.41
Gross Loss -2575.72
Total Net Profit 666.69
-100%
-50%
0%
50%
100%

Comments