MQL5星期过滤器-可设定星期几不交易

QuantPoint4周前MQL5开发21

MQL5中的星期过滤器是用于自动化交易策略的时间管理工具,通过设定交易时段限制来避免特定交易时段的价格波动干扰。该工具允许用户指定交易策略仅在特定星期几执行交易。


此过滤器分成三个部分:

  1. 在头部添加过滤器设置代码:

   input group "====星期过滤设定=========="
   input bool AllowedMonday = true; //是否允许星期一交易
   input bool AllowedTuesday = true;   //是否允许星期二交易
   input bool AllowedWednesday = true; //是否允许星期三交易
   input bool AllowedThursday = true; //是否允许星期四交易
   input bool AllowedFriday = true; //是否允许星期五交易
   input bool AllowedSaturday = false; //是否允许星期六交易
   input bool AllowedSunday = false; //是否允许星期天交易

    

    2.定义星期过滤函数

bool IsTradingAllowedByDay() {
   MqlDateTime today;
   TimeCurrent(today);
   string day = EnumToString((ENUM_DAY_OF_WEEK)today.day_of_week);
   if(AllowedMonday==true && day=="MONDAY" ) return true;
   if(AllowedTuesday==true && day=="TUESDAY" ) return true;
   if(AllowedWednesday==true && day=="WEDNESDAY" ) return true;
   if(AllowedThursday==true && day=="THURSDAY" ) return true;
   if(AllowedFriday==true && day=="FRIDAY" ) return true;
   if(AllowedSaturday==true && day=="SATURDAY" ) return true;
   if(AllowedSunday==true && day=="SUNDAY" ) return true;

   return false;
}

    

    3.在onTick中调用

if(!IsTradingAllowedByDay()) {
      Print("不允许交易");
      return;
}


下面是完整代码(为了测试,将时间周期设置为每天):

#property version   "1.00"

input group "====星期过滤设定=========="
   input bool AllowedMonday = true; //是否允许星期一交易
   input bool AllowedTuesday = true;   //是否允许星期二交易
   input bool AllowedWednesday = true; //是否允许星期三交易
   input bool AllowedThursday = true; //是否允许星期四交易
   input bool AllowedFriday = true; //是否允许星期五交易
   input bool AllowedSaturday = false; //是否允许星期六交易
   input bool AllowedSunday = false; //是否允许星期天交易

string TradingEnabledComm = ""; //提示语


int OnInit() {
   return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason) {

}


void OnTick() {
   static datetime prevDayTime = 0;
   datetime currentDayTime = iTime(_Symbol, PERIOD_D1, 0);
   if(currentDayTime==prevDayTime) {
      return;
   }
   prevDayTime = currentDayTime;
   
   if(!IsTradingAllowedByDay()) {
      Print(TradingEnabledComm);
      return;
   }
   TradingEnabledComm = "";
   
   //这里进行交易
   Print("正常交易");
}

bool IsTradingAllowedByDay() {
   MqlDateTime today;
   TimeCurrent(today);
   string day = EnumToString((ENUM_DAY_OF_WEEK)today.day_of_week);
   if(AllowedMonday==true && day=="MONDAY" ) return true;
   if(AllowedTuesday==true && day=="TUESDAY" ) return true;
   if(AllowedWednesday==true && day=="WEDNESDAY" ) return true;
   if(AllowedThursday==true && day=="THURSDAY" ) return true;
   if(AllowedFriday==true && day=="FRIDAY" ) return true;
   if(AllowedSaturday==true && day=="SATURDAY" ) return true;
   if(AllowedSunday==true && day=="SUNDAY" ) return true;
   
   if(TradingEnabledComm=="") {
      TradingEnabledComm = day+"禁止交易";
   }
   return false;
}


测试配置如下:

image.png


测试截图:

image.png


标签: MQL5过滤器

相关文章

MQL5时间过滤器的编码与实现

MQL5时间过滤器可以定制允许交易的时间,屏蔽掉那些波动特别小的时间段。对于大多数EA来说,时间过滤器都可以很好的提升盈亏比,扩大盈利。下面是其具体实现过程。第一步:在EA顶部加入时间的设定:inpu...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。