Hi forex trader,

In this blog I want to show you how to use Dual Bermaui Deviation Percent (DBD%) buffers to build a simple MT4 EA.

Next screen shots show important buffers:


Dual Bermaui Deviation Percent

.


Dual Bermaui Deviation Percent

.

The only buffer we need here is buffer eight, as it is used to generate trend signals.  Here is the code:






#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com/en/users/bermaui314"
#property version   "1.00"
#property strict
#property description "DBD% Important Output Buffers:"
#property description "=============================="
#property description "Buffer [ 8 ] = DBD% Signal."

sinput string  Trading_Setup;                     
extern int     MagicNumber          = 1234567890; 
extern int     TakeProfit           = 500;        
extern int     StopLoss             = 250;        
extern double  FirstLots            = 0.01;       
sinput  string Indicator_Settings;                
sinput string  indAdress            = "Market\Dual Bermaui Deviation Percent"; 
extern int     Fast_Candles         = 20;         
extern int     Slow_Candles         = 80;         
extern double  Upper_Level          = 40;         


int    Ticket1;
int    t1,t2;
datetime timeprev = 0;




int OnInit()
  {



   return(INIT_SUCCEEDED);
  }



void OnDeinit(const int reason)
  {

   
  }



void OnTick()
  {

if(timeprev == Time[0]) { return; }
   timeprev =  Time[0];


if(MyRealOrdersTotal(MagicNumber) == 0){
if(DBDPCustom(1) ==  1 && DBDPCustom(2) == 0) { OpenBUYOrder(MagicNumber);}}


if(MyRealOrdersTotal(MagicNumber) == 0){
if(DBDPCustom(1) == -1 && DBDPCustom(2) == 0) { OpenSELLOrder(MagicNumber);}}
   
  }






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);
  }




void OpenBUYOrder(int Magic)
   {
double en,sl,tp;
int    slippage = 30;
 
en = Ask;                  
sl = Ask - (StopLoss * Point);   
tp = Ask + (TakeProfit * Point); 
 
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);}

   }




void OpenSELLOrder(int Magic)
   {
double en,sl,tp;
int    slippage = 30;
 
en = Bid;                  
sl = Bid + (StopLoss * Point);   
tp = Bid - (TakeProfit * Point); 
 
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);}

   }



double DBDPCustom(int shift)
     {




enum AW
{
aShowArrow,    
bShowArrowsVL, 
cShowVL,       
dHideAll       
};


enum SS
{
aCustom,    
bDataWindow 
};


enum CL
   {
aAlex,      
bLotus,     
cNile,      
dCairo,     
eDoNothing, 
   };





double DBDP = iCustom(Symbol(),       
                      Period(),       
                      indAdress,      
                      " ",            
                      Fast_Candles,   
                      Slow_Candles,   
                      Upper_Level,    
                      " ",            
                      false,          
                      false,          
                      false,          
                      " ",            
                      aShowArrow,     
                      1,              
                      " ",            
                      aCustom,        
                      " ",            
                      10,             
                      false,          
                      100,            
                      "A",            
                      "D",            
                      aAlex,          
                      8,              
                      shift);
     
return(DBDP);
     }
     


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.

I hope DBD% to be a good trading tool for you. If you have any question send me a message and I will answer as soon as I am online.

Best regards
Muhammad
Al Bermaui, CMT


www.bermaui.com



Source link

Register at Binance