3 Bar Reversal

Author: Copyright � 2007, fxid10t@yahoo.com
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
0 Views
0 Downloads
0 Favorites

Profitability Reports

GBP/USD Oct 2024 - Jan 2025
139.00 %
Total Trades 47
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff 8.25
Gross Profit 1378.30
Gross Loss -990.60
Total Net Profit 387.70
-100%
-50%
0%
50%
100%
NZD/USD Oct 2024 - Jan 2025
63.00 %
Total Trades 50
Won Trades 20
Lost trades 30
Win Rate 0.40 %
Expected payoff -6.20
Gross Profit 524.60
Gross Loss -834.70
Total Net Profit -310.10
-100%
-50%
0%
50%
100%
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

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---