Verify how the self generated EA code I made works

 

I just made a self generated EA code for testing. Even after reading the documentation, I am confused how it works, especially on where the value "significance" is based.

Anyway, I just want to ask if this code opens order only if all of the conditions are met, or it opens order even only one condition is met? I tried testing it but I can't seem to view exactly so I want to verify by code.

If it does open order even one condition is met, how do I make it open an order only if all conditions are met.


//+------------------------------------------------------------------+
//|                                                    MacdStoch.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalMACD.mqh>
#include <Expert\Signal\SignalStoch.mqh>
#include <Expert\Signal\SignalSAR.mqh>
#include <Expert\Signal\SignalITF.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingFixedPips.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedLot.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string             Expert_Title                  ="MacdStoch"; // Document name
ulong                    Expert_MagicNumber            =28662;       //
bool                     Expert_EveryTick              =false;       //
//--- inputs for main signal
input int                Signal_ThresholdOpen          =10;          // Signal threshold value to open [0...100]
input int                Signal_ThresholdClose         =10;          // Signal threshold value to close [0...100]
input double             Signal_PriceLevel             =0.0;         // Price level to execute a deal
input double             Signal_StopLevel              =50.0;        // Stop Loss level (in points)
input double             Signal_TakeLevel              =50.0;        // Take Profit level (in points)
input int                Signal_Expiration             =4;           // Expiration of pending orders (in bars)
input int                Signal_MACD_PeriodFast        =12;          // MACD(12,26,9,PRICE_CLOSE) M1 Period of fast EMA
input int                Signal_MACD_PeriodSlow        =26;          // MACD(12,26,9,PRICE_CLOSE) M1 Period of slow EMA
input int                Signal_MACD_PeriodSignal      =9;           // MACD(12,26,9,PRICE_CLOSE) M1 Period of averaging of difference
input ENUM_APPLIED_PRICE Signal_MACD_Applied           =PRICE_CLOSE; // MACD(12,26,9,PRICE_CLOSE) M1 Prices series
input double             Signal_MACD_Weight            =1.0;         // MACD(12,26,9,PRICE_CLOSE) M1 Weight [0...1.0]
input int                Signal_Stoch_PeriodK          =5;           // Stochastic(5,3,3,...) M1 K-period
input int                Signal_Stoch_PeriodD          =3;           // Stochastic(5,3,3,...) M1 D-period
input int                Signal_Stoch_PeriodSlow       =3;           // Stochastic(5,3,3,...) M1 Period of slowing
input ENUM_STO_PRICE     Signal_Stoch_Applied          =STO_LOWHIGH; // Stochastic(5,3,3,...) M1 Prices to apply to
input double             Signal_Stoch_Weight           =1.0;         // Stochastic(5,3,3,...) M1 Weight [0...1.0]
input double             Signal_SAR_Step               =0.02;        // Parabolic SAR(0.02,0.2) M5 Speed increment
input double             Signal_SAR_Maximum            =0.2;         // Parabolic SAR(0.02,0.2) M5 Maximum rate
input double             Signal_SAR_Weight             =1.0;         // Parabolic SAR(0.02,0.2) M5 Weight [0...1.0]
input int                Signal_ITF_GoodHourOfDay      =-1;          // IntradayTimeFilter(-1,...) Good hour
input int                Signal_ITF_BadHoursOfDay      =16776191;    // IntradayTimeFilter(-1,...) Bad hours (bit-map)
input int                Signal_ITF_GoodDayOfWeek      =-1;          // IntradayTimeFilter(-1,...) Good day of week
input int                Signal_ITF_BadDaysOfWeek      =99;          // IntradayTimeFilter(-1,...) Bad days of week (bit-map)
input double             Signal_ITF_Weight             =1.0;         // IntradayTimeFilter(-1,...) Weight [0...1.0]
//--- inputs for trailing
input int                Trailing_FixedPips_StopLevel  =50;          // Stop Loss trailing level (in points)
input int                Trailing_FixedPips_ProfitLevel=50;          // Take Profit trailing level (in points)
//--- inputs for money
input double             Money_FixLot_Percent          =10.0;        // Percent
input double             Money_FixLot_Lots             =0.01;        // Fixed volume
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Initializing expert
   if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Creating signal
   CExpertSignal *signal=new CExpertSignal;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(Signal_ThresholdOpen);
   signal.ThresholdClose(Signal_ThresholdClose);
   signal.PriceLevel(Signal_PriceLevel);
   signal.StopLevel(Signal_StopLevel);
   signal.TakeLevel(Signal_TakeLevel);
   signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalMACD
   CSignalMACD *filter0=new CSignalMACD;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.Period(PERIOD_M1);
   filter0.PeriodFast(Signal_MACD_PeriodFast);
   filter0.PeriodSlow(Signal_MACD_PeriodSlow);
   filter0.PeriodSignal(Signal_MACD_PeriodSignal);
   filter0.Applied(Signal_MACD_Applied);
   filter0.Weight(Signal_MACD_Weight);
//--- Creating filter CSignalStoch
   CSignalStoch *filter1=new CSignalStoch;
   if(filter1==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter1");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
   signal.AddFilter(filter1);
//--- Set filter parameters
   filter1.Period(PERIOD_M1);
   filter1.PeriodK(Signal_Stoch_PeriodK);
   filter1.PeriodD(Signal_Stoch_PeriodD);
   filter1.PeriodSlow(Signal_Stoch_PeriodSlow);
   filter1.Applied(Signal_Stoch_Applied);
   filter1.Weight(Signal_Stoch_Weight);
//--- Creating filter CSignalSAR
   CSignalSAR *filter2=new CSignalSAR;
   if(filter2==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter2");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
   signal.AddFilter(filter2);
//--- Set filter parameters
   filter2.Period(PERIOD_M5);
   filter2.Step(Signal_SAR_Step);
   filter2.Maximum(Signal_SAR_Maximum);
   filter2.Weight(Signal_SAR_Weight);
//--- Creating filter CSignalITF
   CSignalITF *filter3=new CSignalITF;
   if(filter3==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter3");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
   signal.AddFilter(filter3);
//--- Set filter parameters
   filter3.GoodHourOfDay(Signal_ITF_GoodHourOfDay);
   filter3.BadHoursOfDay(Signal_ITF_BadHoursOfDay);
   filter3.GoodDayOfWeek(Signal_ITF_GoodDayOfWeek);
   filter3.BadDaysOfWeek(Signal_ITF_BadDaysOfWeek);
   filter3.Weight(Signal_ITF_Weight);
//--- Creation of trailing object
   CTrailingFixedPips *trailing=new CTrailingFixedPips;
   if(trailing==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Add trailing to expert (will be deleted automatically))
   if(!ExtExpert.InitTrailing(trailing))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Set trailing parameters
   trailing.StopLevel(Trailing_FixedPips_StopLevel);
   trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel);
//--- Creation of money object
   CMoneyFixedLot *money=new CMoneyFixedLot;
   if(money==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating money");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Add money to expert (will be deleted automatically))
   if(!ExtExpert.InitMoney(money))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing money");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Set money parameters
   money.Percent(Money_FixLot_Percent);
   money.Lots(Money_FixLot_Lots);
//--- Check all trading objects parameters
   if(!ExtExpert.ValidationSettings())
     {
      //--- failed
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Tuning of all necessary indicators
   if(!ExtExpert.InitIndicators())
     {
      //--- failed
      printf(__FUNCTION__+": error initializing indicators");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- ok
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ExtExpert.Deinit();
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
   ExtExpert.OnTick();
  }
//+------------------------------------------------------------------+
//| "Trade" event handler function                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
   ExtExpert.OnTrade();
  }
//+------------------------------------------------------------------+
//| "Timer" event handler function                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   ExtExpert.OnTimer();
  }
//+------------------------------------------------------------------+
 

Update on this, I've found this helpful article:

https://www.mql5.com/en/articles/488


To keep it short, it seems the threshold must be 100

Exploring Trading Strategy Classes of the Standard Library - Customizing Strategies
Exploring Trading Strategy Classes of the Standard Library - Customizing Strategies
  • www.mql5.com
In this article we are going to show how to explore the Standard Library of Trading Strategy Classes and how to add Custom Strategies and Filters/Signals using the Patterns-and-Models logic of the MQL5 Wizard. In the end you will be able easily add your own strategies using MetaTrader 5 standard indicators, and MQL5 Wizard will create a clean and powerful code and fully functional Expert Advisor.
 

Actually this is a better post for future people who would like to find out how to find the SIGNIFICANCES

https://www.mql5.com/en/forum/317321

Intra time filter and threshold
Intra time filter and threshold
  • 2019.07.06
  • pbzf
  • www.mql5.com
hello, I am working on a EA by using mql5 wizard generator. I did not really understand how the signal mechanism module and intra time filter works...
Reason: