| //+------------------------------------------------------------------+
|
| //| ExpertMAMA.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\SignalMA.mqh>
|
| #include <Expert\Trailing\TrailingMA.mqh>
|
| #include <Expert\Money\MoneyNone.mqh>
|
| //+------------------------------------------------------------------+
|
| //| Inputs |
|
| //+------------------------------------------------------------------+
|
| //--- inputs for expert
|
| input string Inp_Expert_Title ="ExpertMAMA";
|
| int Expert_MagicNumber =12003;
|
| bool Expert_EveryTick =false;
|
| //--- inputs for signal
|
| input int Inp_Signal_MA_Period =12;
|
| input int Inp_Signal_MA_Shift =6;
|
| input ENUM_MA_METHOD Inp_Signal_MA_Method =MODE_SMA;
|
| input ENUM_APPLIED_PRICE Inp_Signal_MA_Applied =PRICE_CLOSE;
|
| //--- inputs for trailing
|
| input int Inp_Trailing_MA_Period =12;
|
| input int Inp_Trailing_MA_Shift =0;
|
| input ENUM_MA_METHOD Inp_Trailing_MA_Method =MODE_SMA;
|
| input ENUM_APPLIED_PRICE Inp_Trailing_MA_Applied=PRICE_CLOSE;
|
| //+------------------------------------------------------------------+
|
| //| 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
|
| CSignalMA *signal=new CSignalMA;
|
| 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.PeriodMA(Inp_Signal_MA_Period);
|
| signal.Shift(Inp_Signal_MA_Shift);
|
| signal.Method(Inp_Signal_MA_Method);
|
| signal.Applied(Inp_Signal_MA_Applied);
|
| //--- Check signal parameters
|
| if(!signal.ValidationSettings())
|
| {
|
| //--- failed
|
| printf(__FUNCTION__+": error signal parameters");
|
| ExtExpert.Deinit();
|
| return(-4);
|
| }
|
| //--- Creation of trailing object
|
| CTrailingMA *trailing=new CTrailingMA;
|
| 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
|
| trailing.Period(Inp_Trailing_MA_Period);
|
| trailing.Shift(Inp_Trailing_MA_Shift);
|
| trailing.Method(Inp_Trailing_MA_Method);
|
| trailing.Applied(Inp_Trailing_MA_Applied);
|
| //--- 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();
|
| }
|
| //+------------------------------------------------------------------+
|