91 lines
4.4 KiB
MQL5
91 lines
4.4 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| SignalITF.mqh |
|
|
//| Copyright 2000-2025, MetaQuotes Ltd. |
|
|
//| https://www.mql5.com |
|
|
//+------------------------------------------------------------------+
|
|
#include <Expert\ExpertSignal.mqh>
|
|
// wizard description start
|
|
//+------------------------------------------------------------------+
|
|
//| Description of the class |
|
|
//| Title=Signals of intraday time filter |
|
|
//| Type=SignalAdvanced |
|
|
//| Name=IntradayTimeFilter |
|
|
//| ShortName=ITF |
|
|
//| Class=CSignalITF |
|
|
//| Page=signal_time_filter |
|
|
//| Parameter=GoodHourOfDay,int,-1,Good hour |
|
|
//| Parameter=BadHoursOfDay,int,0,Bad hours (bit-map) |
|
|
//| Parameter=GoodDayOfWeek,int,-1,Good day of week |
|
|
//| Parameter=BadDaysOfWeek,int,0,Bad days of week (bit-map) |
|
|
//+------------------------------------------------------------------+
|
|
// wizard description end
|
|
//+------------------------------------------------------------------+
|
|
//| Class CSignalITF. |
|
|
//| Appointment: Class trading signals time filter. |
|
|
//| Derives from class CExpertSignal. |
|
|
//+------------------------------------------------------------------+
|
|
class CSignalITF : public CExpertSignal
|
|
{
|
|
protected:
|
|
//--- input parameters
|
|
int m_good_minute_of_hour;
|
|
long m_bad_minutes_of_hour;
|
|
int m_good_hour_of_day;
|
|
int m_bad_hours_of_day;
|
|
int m_good_day_of_week;
|
|
int m_bad_days_of_week;
|
|
|
|
public:
|
|
CSignalITF(void);
|
|
~CSignalITF(void);
|
|
//--- methods initialize protected data
|
|
void GoodMinuteOfHour(int value) { m_good_minute_of_hour=value; }
|
|
void BadMinutesOfHour(long value) { m_bad_minutes_of_hour=value; }
|
|
void GoodHourOfDay(int value) { m_good_hour_of_day=value; }
|
|
void BadHoursOfDay(int value) { m_bad_hours_of_day=value; }
|
|
void GoodDayOfWeek(int value) { m_good_day_of_week=value; }
|
|
void BadDaysOfWeek(int value) { m_bad_days_of_week=value; }
|
|
//--- methods of checking conditions of entering the market
|
|
virtual double Direction(void);
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
//| Constructor |
|
|
//+------------------------------------------------------------------+
|
|
CSignalITF::CSignalITF(void) : m_good_minute_of_hour(-1),
|
|
m_bad_minutes_of_hour(0),
|
|
m_good_hour_of_day(-1),
|
|
m_bad_hours_of_day(0),
|
|
m_good_day_of_week(-1),
|
|
m_bad_days_of_week(0)
|
|
{
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Destructor |
|
|
//+------------------------------------------------------------------+
|
|
CSignalITF::~CSignalITF(void)
|
|
{
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Check conditions for time filter. |
|
|
//+------------------------------------------------------------------+
|
|
double CSignalITF::Direction(void)
|
|
{
|
|
MqlDateTime s_time;
|
|
//---
|
|
TimeCurrent(s_time);
|
|
//--- check days conditions
|
|
if(!((m_good_day_of_week==-1 || m_good_day_of_week==s_time.day_of_week) &&
|
|
!(m_bad_days_of_week&(1<<s_time.day_of_week))))
|
|
return(EMPTY_VALUE);
|
|
//--- check hours conditions
|
|
if(!((m_good_hour_of_day==-1 || m_good_hour_of_day==s_time.hour) &&
|
|
!(m_bad_hours_of_day&(1<<s_time.hour))))
|
|
return(EMPTY_VALUE);
|
|
//--- check minutes conditions
|
|
if(!((m_good_minute_of_hour==-1 || m_good_minute_of_hour==s_time.min) &&
|
|
!(m_bad_minutes_of_hour&(1<<s_time.min))))
|
|
return(EMPTY_VALUE);
|
|
//--- condition OK
|
|
return(0.0);
|
|
}
|
|
//+------------------------------------------------------------------+
|