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
https://www.mql5.com/en/market/product/47656
All Important Buffers are found in the description dialog.
.
.
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
Files: