2
623
Hi forex trader,
In this blog I want to show you how to use Moving Average Cloud (MAC) buffers to build a simple expert advisor.
You can know more about MAC from here:
https://www.mql5.com/en/market/product/15576
https://www.mql5.com/en/market/product/15576
All Important Buffers are found in the description dialog.
.
.
.
Here is an example about how to use those buffers to code an expert advisor depending on MQL4 iCustom() function.
//+------------------------------------------------------------------+ //| MAC_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 [ 4 ] = Arrows." 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 = "Moving Average Cloud MAC v2.1"; // Indicator Path & Name : extern int Fast_MA = 10; // Fast Moving Average extern int Slow_MA = 100; // Slow Moving Average extern ENUM_MA_METHOD MA_Method = MODE_SMA; // Moving Average Method: //---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(MACCustom() == 1) { OpenBUYOrder(MagicNumber);}} //---Sell Order if(MyRealOrdersTotal(MagicNumber) == 0){ if(MACCustom() == -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 MACCustom() { //+------------------------------------------------------------------+ //| Indicator Options | //+------------------------------------------------------------------+ // Colors List Options enum CL { aDoNothing, // 1. Do Nothing dHideAll, }; //+------------------------------------------------------------------+ //| iCustom Function | //+------------------------------------------------------------------+ double mac = iCustom(Symbol(), // Symbol Period(), // Time-Frame indAdress, // Indicator Path and name " ", // (1) INDICATOR PARAMETERS Fast_MA, // Fast Moving Average Slow_MA, // Slow Moving Average MA_Method, // Moving Average Method: " ", // (2) ALERTS & ARROWS dHideAll, // Show Arrows & Vertical Lines: 1, // Arrow Size: false, // Alert message: false, // Send Email: false, // Send Mobile Notification: " ", // (3) INDICATOR STYLE aDoNothing, // Chart Colors List: clrBlue, // Bullish Cloud Color clrRed, // Bearish Cloud Color clrMidnightBlue, // Upper Cloud Edge Color clrMaroon, // Lower Cloud Edge Color 4, // Buffer [ 4 ] = MAC Arrows 0); // Shift return(mac); }
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 MAC 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:
MAC_EA_Example.mq4
13 kb