English
中文
日本語
ID
Vietnam
한국어
Filipino
 
   学院导航

如何在MQL4 将交易时间限制为1分钟交易或者1小时交易图表

MQL4 Limit Trading Time to Days

这是一个交易日过滤器,允许用户打开或关闭一周中的特定日期。 此外,它允许用户打开或关闭非农就业数据的当天和前一天,以防万一您不想在这个动荡的日子进行交易。


此外,用户可以关闭圣诞节假期和/或新年假期。 在这篇 MQL4 将交易时间限制为天的文章中了解如何对您的 Expert Advisor 进行编程以仅在特定时段进行交易并避免波动。

MQL4 将交易时间限制为天数参数


周日至周五

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() 结合使用。