Bermaui Channel Expert Advisor Example

Bermaui Channel Expert Advisor Example

25 March 2020, 20:37
Muhammad Elbermawi
0
417

Hi forex trader,

In this blog I want to show you how to use Bermaui Channel buffers to build a simple expert advisor.

You can know more about Bermaui Channel from here:
https://www.mql5.com/en/market/product/47656

All Important Buffers are found in the description dialog.

Bermaui Channel

.

Bermaui Channel

.
This simple expert advisor will buy when close price crosses the highest low level (buffer #1), and sell when close price crosses the lowest high level (buffer#3)
.
This code is just an example about how to use the indicators buffer in building an expert advisor and It was not written to test the indicator ability to trade on real accounts.
.

//+------------------------------------------------------------------+
//|                                   Bermaui_Channel_EA_Example.mq4 |
//|                        Copyright © 2020, Muhammad Al Bermawy,CMT |
//|                         https://www.mql5.com/en/users/bermaui314 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2020, Muhammad Al Bermawy,CMT"
#property link      "https://www.mql5.com/en/users/bermaui314"
#property version   "1.00"
#property strict
#property description "Important Output Buffers:"
#property description "===================================="
#property description "1)-Buffer [ 0 ] = Hightest Hight."
#property description "2)-Buffer [ 1 ] = Hightest Low."
#property description "3)-Buffer [ 2 ] = Center Line."
#property description "4)-Buffer [ 3 ] = Lowest High."
#property description "5)-Buffer [ 4 ] = Lowest Low."

sinput string  Trading_Setup;                 // TRADING SETUP
extern int     MagicNumber      = 1234567890; // Magic Number
extern int     TakeProfit       = 500;        // Take Profit (points)
extern int     StopLoss         = 250;        // Stop Loss (points)
extern double  FirstLots        = 0.01;       // Lot Size
sinput  string Index_Settings;                // INDICATOR INPUTS
sinput string  indAdress        = "Market\\Bermaui Channel"; // Indicator Path & Name : 
extern int     Candles          = 50;         // Candles [Min=2]
extern int     Shift            = 1;          // Shift

//---Global Variables
int    Ticket1;
int    t1,t2;
datetime timeprev = 0;

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---Check trading at candle open only
if(timeprev == Time[0]) { return; }
   timeprev =  Time[0];

//---Buy Order
if(MyRealOrdersTotal(MagicNumber) == 0){
if(Close[2] < BCCustom(1, 2) && Close[1] >= BCCustom(1, 1)) { OpenBUYOrder(MagicNumber);}}

//---Sell Order
if(MyRealOrdersTotal(MagicNumber) == 0){
if(Close[2] > BCCustom(3, 2) && Close[1] <= BCCustom(3, 1)) { OpenSELLOrder(MagicNumber);}}
   
  }

//+------------------------------------------------------------------+
//| Custom functions.                                                |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| The number of current Market orders only.                        |
//+------------------------------------------------------------------+
int MyRealOrdersTotal(int Magic)
  {
int c     = 0;
int total = OrdersTotal();
    t1    = -1;
    t2    = -1;
 
for(int cnt = 0 ; cnt < total ; cnt++)
  {
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
 {
if(t1 == -1) { t1 = OrderTicket(); }
else
   {
if(t2 == -1) { t2 = OrderTicket(); }
   }
c++;
 }
  }
return(c);
  }

//+------------------------------------------------------------------+
//| Open a Buy Order Function.                                       |
//+------------------------------------------------------------------+
void OpenBUYOrder(int Magic)
   {
double en,sl,tp;
int    slippage = 30;
 
en = Ask;                  //---Enter of order
sl = Ask - (StopLoss * Point);   //---Stop Loss
tp = Ask + (TakeProfit * Point); //---Take Profit
 
if(FirstLots > 0)
 {Ticket1 = OrderSend(Symbol(),OP_BUY, FirstLots, en, slippage, sl, tp, "EA Comment", Magic, 0, clrGreen);}
else
   {Alert("Buying Error "," Err = ",GetLastError()," Price = ",Ask," Lots = ",FirstLots);}

   }

//+------------------------------------------------------------------+
//| Open a Sell Order Function.                                       |
//+------------------------------------------------------------------+
void OpenSELLOrder(int Magic)
   {
double en,sl,tp;
int    slippage = 30;
 
en = Bid;                        //---Enter of order
sl = Bid + (StopLoss * Point);   //---Stop Loss
tp = Bid - (TakeProfit * Point); //---Take Profit
 
if(FirstLots > 0)
 {Ticket1 = OrderSend(Symbol(),OP_SELL, FirstLots, en, slippage, sl, tp, "EA Comment", Magic, 0, clrRed);}
else
   {Alert("Selling Error "," Err = ",GetLastError()," Price = ",Ask," Lots = ",FirstLots);}

   }

//+==================================================================+
//| iCustom Function.                                                |
//+==================================================================+
double BCCustom(int buffer, int shift)
     {
//+------------------------------------------------------------------+
//| Indicator Options                                                |
//+------------------------------------------------------------------+
// Colors List Options 
enum X1
   {
aDoNothing,
cHide,
   };

//+------------------------------------------------------------------+
//| iCustom Function                                                 |
//+------------------------------------------------------------------+
double bc = iCustom(Symbol(),   // Symbol
                    Period(),   // Time-Frame
                    indAdress,  // Indicator Path and name
                    " ",        // 1))) SETTINGS
                    Candles,    // Candles [Min=2]
                    Shift,      // Shift
                    " ",        // 2))) Alert_Settings
                    false,      // Sound Alert:
                    false,      // Send Email:
                    false,      // Send Notification:
                    " ",        // 3))) STYLE
                    aDoNothing, // Color List:
                    cHide,      // Show OB/OS as:
                    false,      // Show Price Label:
                    1,          // Price Label Width
                    clrNONE,    // Overbought Levels Color
                    clrNONE,    // Oversold Levels Color
                    clrNONE,    // Bullish Candles Color
                    clrNONE,    // Bearish Candles Color
                    1,          // Candle Wicks Width
                    4,          // Candle Body Width
                    3,          // Bars Width
                    buffer,     // Buffer
                    shift);     // Shift
                    
return(bc);
     }


.
I hope Bermaui Channel to be a good trading tool for you. If you have any question send me a message, or write a comment and I will answer as soon as I am online.

Best regards
Muhammad Al Bermaui, CMT

Share it with friends: