Classic Keltner Channel Expert Advisor Example

Classic Keltner Channel Expert Advisor Example

8 March 2020, 15:21
Muhammad Elbermawi
1
1 844

Hi forex trader,

In this blog I want to show you how to use Classic Keltner Channel (CKC) buffers to build a simple expert advisor. You can know more about CKC from here:

All Important Buffers are found in the description dialog.

Classic Keltner Channel

.

Classic Keltner Channel

.

Here is an example about how to use those buffers to code an expert advisor depending on MQL4 iCustom() function.

//+------------------------------------------------------------------+
//|                                               CKC_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 [ 2 ] = BuySell."

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 MASR_Settings;               // INDICATOR INPUTS
sinput string  indAdress      = "Classic Keltner Channel v2.2"; // Indicator Path & Name : 
extern int     Candles        = 10;         // CKC Candles
extern double  Multiplier     = 1.0;        // CKC Range Multiplier

//---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(CKCCustom() ==  1) { OpenBUYOrder(MagicNumber);}}

//---Sell Order
if(MyRealOrdersTotal(MagicNumber) == 0){
if(CKCCustom() == -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 CKCCustom()
     {
//+------------------------------------------------------------------+
//| Indicator Options                                                |
//+------------------------------------------------------------------+
// Colors List Options 
enum CL
   {
aDoNothing, // 1. Do Nothing
bAlex,      // 2. Alex
cLotus,     // 3. Lotus
dNile,      // 4. Nile
eCairo,     // 5. Cairo
   };

//+------------------------------------------------------------------+
//| iCustom Function                                                 |
//+------------------------------------------------------------------+
double ckc = iCustom(Symbol(),      // Symbol
                    Period(),      // Time-Frame
                    indAdress,     // Indicator Path and name
                    " ",           // (1) INDICATOR PARAMETERS
                    Candles,       // CKC Candles
                    Multiplier,    // CKC Range Multiplier
                    MODE_SMA,      // CKC Moving Average Method:
                    PRICE_TYPICAL, // CKC Applied Price
                    " ",           // (2) ALERTS
                    false,         // Sound Alert:
                    false,         // Send Email:
                    false,         // Send Mobile Notification:
                    " ",           // (3) INDICATOR STYLE
                    aDoNothing,    // Chart Colors List:
                    clrRed,        // CKC Upper Band Color
                    clrBlue,       // CKC Lower Band Color
                    1,             // CKC Width 
                    2,             // Buffer [ 2 ] = BuySell
                    0);
                    
//---Signal Line Binary Value
return(ckc);
     }

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 CKC 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:
Share it with friends: