这是一个交易日过滤器,允许用户打开或关闭一周中的特定日期。 此外,它允许用户打开或关闭非农就业数据的当天和前一天,以防万一您不想在这个动荡的日子进行交易。
此外,用户可以关闭圣诞节假期和/或新年假期。 在这篇 MQL4 将交易时间限制为天的文章中了解如何对您的 Expert Advisor 进行编程以仅在特定时段进行交易并避免波动。
周日至周五
Bool:表明您是否要在每个特定日期进行交易。 默认为真,每天交易。
NFP_星期五
Bool:是否要在本月的第一个星期五的星期五,即非农就业数据上进行交易。 默认为当天交易。
NFP_ThursdayBefore
Bool:您是否想在波动较大的非农就业数据周五之前的周四进行交易。 默认为当天交易。
圣诞假期
Bool:您是否想在 12 月自定义定义的期间内,在圣诞节假期的低流动性期间进行交易。
圣诞节_DayBeginBreak
双:这是十二月的一天,你将开始过滤掉,作为圣诞假期的开始。 默认值为 15,但可以是任何一天。
新年假期
Bool:是否要在一月初的自定义时间段进行交易,元旦假期的流动性较低。
NewYears_DayEndBreak
双:这是你在一月份停止过滤的那一天,新年假期结束。 默认值为 3,但可以是任何一天。
MT4 代码片段
extern string _7 = “— 交易日 —”;
外部布尔星期日=真;
外部布尔星期一=真;
外部布尔星期二=真;
外部布尔星期三=真;
外部布尔星期四=真;
外部布尔星期五=真;
外部布尔 NFP_Friday = true;
外部布尔 NFP_ThursdayBefore = true;
外部布尔 ChristmasHolidays = true;
外部双 XMAS_DayBeginBreak = 15;
外部布尔 NewYearsHolidays = true;
extern double NewYears_DayEndBreak = 3;
bool DaytoTrade(){
bool daytotrade = false;
if(DayOfWeek() == 0 && Sunday) daytotrade = true;
if(DayOfWeek() == 1 && Monday) daytotrade = true;
if(DayOfWeek() == 2 && 星期二) daytotrade = true;
if(DayOfWeek() == 3 && Wednesday) daytotrade = true;
if(DayOfWeek() == 4 && 星期四) daytotrade = true;
if(DayOfWeek() == 5 && Friday) daytotrade = true;
if(DayOfWeek() == 5 && Day() < 8 && !NFP_Friday ) daytotrade = false;
如果(DayOfWeek() == 4 && Day() < 8 && !NFP_ThursdayBefore) daytotrade = false;
if(Month() == 12 && Day() > XMAS_DayBeginBreak && !ChristmasHolidays ) daytotrade = false;
if(Month() == 1 && Day() < NewYears_DayEndBreak && !NewYearsHolidays) daytotrade = false;
返回(daytotrade);}
解释
我们将我们的日期过滤器函数命名为 DaytoTrade()。
我们声明一个 daytotrade(小写)bool 变量,并将其初始化为 false。
接下来,我们在一周中的每一天都有一条线,指示一周中的哪一天是否应该交易。 DayofWeek() 函数返回最后已知服务器时间的星期几:
0 = 星期日
1 = 星期一
2 = 星期二
3 = 星期三
4 = 星期四
5 = 星期五
6 = 星期六
每一行的逻辑如下。 如果 DayofWeek() 是 (==) Sunday (0),并且 Sunday 外部 bool 为 true (&& Sunday),则 daytotrade bool 为 true。 如果 Sunday external bool 已手动设置为 false,daytotrade 将恢复为 false。 所有的日子都一样。
接下来,我们过滤非农就业日,即每个月的第一个星期五。
最后,我们过滤圣诞节和新年假期。
MT4代码使用
如果 (OrdersTotalMagicOpen()==0 && OpenBuy==true
&& DaytoTrade() ) {
//下订单
}
您需要做的就是将 DaytoTrade() 函数作为下订单的条件。 然后在下订单之前,它会检查您是否声明了任何不交易的日子(这些日子将被指示为假),以及假期不交易(假期期间将被指示为假)。
我们通常将 DaytoTrade() 函数与此处讨论的 TradeTime() 结合使用。