-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSignalITF.mqh
91 lines (90 loc) · 4.45 KB
/
SignalITF.mqh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//+------------------------------------------------------------------+
//| SignalITF.mqh |
//| Copyright 2009-2013, MetaQuotes Software Corp. |
//| http://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);
}
//+------------------------------------------------------------------+