Expert Advisor is not trade with signals

 

Hi there,

I am new to MT5 and learning write some simple expert advisor by silghtly modify stock signals.

below is my test EA source code. what i am expecting is when MACD main line above zero level && STOCH main line > STOCH signal line. it should generate a buy signal.

MACD singal pattern value is 30, STOCH signal pattern value is 90. both weight at 1.0 (from what i am understanding, combined signal strength should be 60 if both signals are giving idenfical direction, for example buy)

However, whenever i change Signal_ThresholdOpen to any value >15. it simply does not open any trade. looks like it only calculates MACD singal value and ignors all STOCH input

Can anyone point out where i were doing wrong?

*MACD and STOCH singal are working as expected if i generate EA with 1 singal only

Below is EA source code

//+------------------------------------------------------------------+
//|                                             EA   ttest0.0030.mq5 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, Daniel Lee"
#property link      ""
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalMACD-dz.mqh>
#include <Expert\Signal\SignalStoch_dz.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedLot.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string             Expert_Title            ="ttest0.0030"; // Document name
ulong                    Expert_MagicNumber      =9582;          //
bool                     Expert_EveryTick        =false;         //
//--- inputs for main signal
input int                Signal_ThresholdOpen    =
60;            // Signal threshold value to open [0...100]
input int                Signal_ThresholdClose   =20;            // 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) Period of fast EMA
input int                Signal_MACD_PeriodSlow  =26;            // MACD(12,26,9,PRICE_CLOSE) Period of slow EMA
input int                Signal_MACD_PeriodSignal=9;             // MACD(12,26,9,PRICE_CLOSE) Period of averaging of difference
input ENUM_APPLIED_PRICE Signal_MACD_Applied     =PRICE_CLOSE;   // MACD(12,26,9,PRICE_CLOSE) Prices series
input double             Signal_MACD_Weight      =1.0;           // MACD(12,26,9,PRICE_CLOSE) Weight [0...1.0]
input int                Signal_Stoch_PeriodK    =11;            // Stochastic(11,5,8,...) K-period
input int                Signal_Stoch_PeriodD    =5;             // Stochastic(11,5,8,...) D-period
input int                Signal_Stoch_PeriodSlow =8;             // Stochastic(11,5,8,...) Period of slowing
input ENUM_STO_PRICE     Signal_Stoch_Applied    =STO_LOWHIGH;   // Stochastic(11,5,8,...) Prices to apply to
input double             Signal_Stoch_Weight     =1.0;           // Stochastic(11,5,8,...) Weight [0...1.0]
//--- inputs for money
input double             Money_FixLot_Percent    =2.0;           // Percent
input double             Money_FixLot_Lots       =0.1;           // 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_DZ1
   CSignalMACD_DZ1 *filter0=new CSignalMACD_DZ1;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   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_DZ1
   CSignalStoch_DZ1 *filter1=new CSignalStoch_DZ1;
   if(filter1==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter1");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
   signal.AddFilter(filter1);
//--- Set filter parameters
   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);
//--- Creation of trailing object
   CTrailingNone *trailing=new CTrailingNone;
   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
//--- 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()
  {
  if(PositionsTotal()==0)
   ExtExpert.OnTick();
  }
//+------------------------------------------------------------------+
//| "Trade" event handler function                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
   ExtExpert.OnTrade();
  }
//+------------------------------------------------------------------+
//| "Timer" event handler function                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   ExtExpert.OnTimer();
  }
//+------------------------------------------------------------------+





 

if i understand you right, you have an indicator that give yous signals.

The Indicator have buffer Values. You have to imliment the handle of the indicator with iCustom, iMACD in the OnInit, 

dort forget to SetArrayAsSeries

and then you can do the CopyBuffer Function in OnTick.

now you can read the Buffer Values in your OnTick function

 

identified issue, it is not related to indicator buffer as this EA generated by MT5 wizard so all those has been taken care of in back end

in the end was pattern valune in Singal code incorrectly entered caused issue

Still thanks a lot to reply me here, much appreciated!

Reason: