| //+------------------------------------------------------------------+
|
| //| ExpertMACD.mq5 |
|
| //| Copyright 2000-2025, MetaQuotes Ltd. |
|
| //| https://www.mql5.com |
|
| //+------------------------------------------------------------------+
|
| #property copyright "Copyright 2000-2025, MetaQuotes Ltd."
|
| #property link "https://www.mql5.com"
|
| #property version "1.00"
|
| //+------------------------------------------------------------------+
|
| //| Include |
|
| //+------------------------------------------------------------------+
|
| #include <Expert\Expert.mqh>
|
| #include <Expert\Signal\SignalMACD.mqh>
|
| #include <Expert\Trailing\TrailingNone.mqh>
|
| #include <Expert\Money\MoneyNone.mqh>
|
| //+------------------------------------------------------------------+
|
| //| Inputs |
|
| //+------------------------------------------------------------------+
|
| //--- inputs for expert
|
| input string Inp_Expert_Title ="ExpertMACD";
|
| int Expert_MagicNumber =10981;
|
| bool Expert_EveryTick =false;
|
| //--- inputs for signal
|
| input int Inp_Signal_MACD_PeriodFast =12;
|
| input int Inp_Signal_MACD_PeriodSlow =24;
|
| input int Inp_Signal_MACD_PeriodSignal=9;
|
| input int Inp_Signal_MACD_TakeProfit =50;
|
| input int Inp_Signal_MACD_StopLoss =20;
|
| //+------------------------------------------------------------------+
|
| //| Global expert object |
|
| //+------------------------------------------------------------------+
|
| CExpert ExtExpert;
|
| //+------------------------------------------------------------------+
|
| //| Initialization function of the expert |
|
| //+------------------------------------------------------------------+
|
| int OnInit(void)
|
| {
|
| //--- Initializing expert
|
| if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
|
| {
|
| //--- failed
|
| printf(__FUNCTION__+": error initializing expert");
|
| ExtExpert.Deinit();
|
| return(-1);
|
| }
|
| //--- Creation of signal object
|
| CSignalMACD *signal=new CSignalMACD;
|
| if(signal==NULL)
|
| {
|
| //--- failed
|
| printf(__FUNCTION__+": error creating signal");
|
| ExtExpert.Deinit();
|
| return(-2);
|
| }
|
| //--- Add signal to expert (will be deleted automatically))
|
| if(!ExtExpert.InitSignal(signal))
|
| {
|
| //--- failed
|
| printf(__FUNCTION__+": error initializing signal");
|
| ExtExpert.Deinit();
|
| return(-3);
|
| }
|
| //--- Set signal parameters
|
| signal.PeriodFast(Inp_Signal_MACD_PeriodFast);
|
| signal.PeriodSlow(Inp_Signal_MACD_PeriodSlow);
|
| signal.PeriodSignal(Inp_Signal_MACD_PeriodSignal);
|
| signal.TakeLevel(Inp_Signal_MACD_TakeProfit);
|
| signal.StopLevel(Inp_Signal_MACD_StopLoss);
|
| //--- Check signal parameters
|
| if(!signal.ValidationSettings())
|
| {
|
| //--- failed
|
| printf(__FUNCTION__+": error signal parameters");
|
| ExtExpert.Deinit();
|
| return(-4);
|
| }
|
| //--- Creation of trailing object
|
| CTrailingNone *trailing=new CTrailingNone;
|
| if(trailing==NULL)
|
| {
|
| //--- failed
|
| printf(__FUNCTION__+": error creating trailing");
|
| ExtExpert.Deinit();
|
| return(-5);
|
| }
|
| //--- Add trailing to expert (will be deleted automatically))
|
| if(!ExtExpert.InitTrailing(trailing))
|
| {
|
| //--- failed
|
| printf(__FUNCTION__+": error initializing trailing");
|
| ExtExpert.Deinit();
|
| return(-6);
|
| }
|
| //--- Set trailing parameters
|
| //--- Check trailing parameters
|
| if(!trailing.ValidationSettings())
|
| {
|
| //--- failed
|
| printf(__FUNCTION__+": error trailing parameters");
|
| ExtExpert.Deinit();
|
| return(-7);
|
| }
|
| //--- Creation of money object
|
| CMoneyNone *money=new CMoneyNone;
|
| if(money==NULL)
|
| {
|
| //--- failed
|
| printf(__FUNCTION__+": error creating money");
|
| ExtExpert.Deinit();
|
| return(-8);
|
| }
|
| //--- Add money to expert (will be deleted automatically))
|
| if(!ExtExpert.InitMoney(money))
|
| {
|
| //--- failed
|
| printf(__FUNCTION__+": error initializing money");
|
| ExtExpert.Deinit();
|
| return(-9);
|
| }
|
| //--- Set money parameters
|
| //--- Check money parameters
|
| if(!money.ValidationSettings())
|
| {
|
| //--- failed
|
| printf(__FUNCTION__+": error money parameters");
|
| ExtExpert.Deinit();
|
| return(-10);
|
| }
|
| //--- Tuning of all necessary indicators
|
| if(!ExtExpert.InitIndicators())
|
| {
|
| //--- failed
|
| printf(__FUNCTION__+": error initializing indicators");
|
| ExtExpert.Deinit();
|
| return(-11);
|
| }
|
| //--- succeed
|
| return(INIT_SUCCEEDED);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Deinitialization function of the expert |
|
| //+------------------------------------------------------------------+
|
| void OnDeinit(const int reason)
|
| {
|
| ExtExpert.Deinit();
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Function-event handler "tick" |
|
| //+------------------------------------------------------------------+
|
| void OnTick(void)
|
| {
|
| ExtExpert.OnTick();
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Function-event handler "trade" |
|
| //+------------------------------------------------------------------+
|
| void OnTrade(void)
|
| {
|
| ExtExpert.OnTrade();
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Function-event handler "timer" |
|
| //+------------------------------------------------------------------+
|
| void OnTimer(void)
|
| {
|
| ExtExpert.OnTimer();
|
| }
|
| //+------------------------------------------------------------------+
|