欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

TradeState - 根据时间的 EA 交易模式切换器 - MetaTrader 5 库

author emer | 230 人阅读 | 0 人评论 |

您是否曾经根据时间限制 EA 的操作?例如,如何让 EA 在夜间时段不执行任何交易活动?或者,如果您在莫斯科交易所的衍生品部分进行交易,您是否曾经在周末收盘前平仓过所有头寸?更复杂的结构怎么样?例如,如何让 EA 能够在晚上 7 点之前开仓和平仓,并且在晚上 7 点之后不再执行任何新交易?事实上,这样灵活的配置是可能的。 CTradeState 特殊模块将对此提供帮助。

CTradeState 如何运作?该模块返回使用 ENUM_TRADE_STATE 结构定义的六种状态之一:

//+------------------------------------------------------------------+
//|确定 EA 的交易状态                           |
//+------------------------------------------------------------------+
枚举ENUM_TRADE_STATE
{
   交易买入和卖出,              // 允许买卖。   TRADE_BUY_ONLY,                  // 只允许购买。不允许出售。   仅限贸易销售,                // 只允许出售。不允许购买。   交易停止,                      // 不允许交易。立即平仓所有仓位。不接受新的入场信号。   贸易等待,                      // 失去对已建仓位的控制。新信号被忽略。在新闻发布期间很有用。   TRADE_NO_NEW_ENTRY              // 入场信号被忽略。虽然开仓是按照交易逻辑维持的。};

在您的 Expert Advisor 中,您必须执行一组操作,具体取决于 CTradeState 从给定结构中返回的特定修饰符(使用 GetTradeState 方法返回该值)。

在使用交易模式之前,必须对其进行设置,为此必须调用 SetTradeState 方法。 SetTradeState方法原型如下:

//+------------------------------------------------------------------+
//|设置贸易状态 TradeState                       |
//|输入:                                                           |
//| time_begin  - 贸易状态开始的时间     |
//|               发挥作用。                                       |
//| time_end    - 交易状态发挥作用的时间     |
//| day_of_week - 一周中的哪一天,交易设置 |
//|               状态被应用到。对应于修饰符 |
//|               ENUM_DAY_OF_WEEK 或修饰符 ALL_DAYS_OF_WEEK |
//| state       - 贸易状态。                                   |
//|警告,time_begin 和 time_end 中的日期部分将被忽略。   |
//+------------------------------------------------------------------+
空白CTradeState::设置交易状态(日期时间时间_开始,日期时间时间结束,整数day_of_week,ENUM_TRADE_STATE 状态);

例如,要让交易状态模块在 18:45 到 18:49(含)时间返回 TRADE_WAIT 修饰符(停止对已开仓位的控制,不会开立新仓位),需要使用以下参数调用 SetTradeState:

TradeState.SetTradeState(日'18:45',日'18:59'、ALL_DAYS_OF_WEEK、TRADE_WAIT);

不仅可以指定交易模式的开始和结束时间,还可以指定该模式处于活动状态的星期几。如果需要为一周中的每一天指定交易模式,则需要使用 ALL_DAYS_OF_WEEK 修饰符。如果仅需要为一周中的某一天指定交易模式,请指定其中一个值ENUM_DAY_OF_WEEKday_of_week 变量中的系统枚举。

要获取当前交易模式,请使用 GetTradeState 方法。

例如,考虑多种模式的组合,可用于莫斯科交易所衍生品部分的有用交易:

使用示例。这种模式组合是使用以下 SetTradeState 调用序列设置的(示例为脚本):

//+------------------------------------------------------------------+
//|                                               测试交易状态.mq5 |
//|                                 版权所有 2015,瓦西里·索科洛夫。 |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#财产版权 “版权所有 2015,瓦西里·索科洛夫。”
#财产关联      “http://www.mql5.com”
#财产版本  “1.00”
#包括<策略\TradeState.mqh>

CTradeState TradeState(TRADE_BUY_AND_SELL);  // 设置默认模式为买入和卖出
//+------------------------------------------------------------------+
//|脚本程序启动函数                                   |
//+------------------------------------------------------------------+
空白 启动时()
{
   TradeState.SetTradeState(日'15:00',日'23:39',星期五, TRADE_NO_NEW_ENTRY);
   TradeState.SetTradeState(日'10:00',日'10:01'、ALL_DAYS_OF_WEEK、TRADE_WAIT);
   TradeState.SetTradeState(日'14:00',日'14:03'、ALL_DAYS_OF_WEEK、TRADE_WAIT);
   TradeState.SetTradeState(日'18:45',日'18:59'、ALL_DAYS_OF_WEEK、TRADE_WAIT);
   TradeState.SetTradeState(日'23:50',日'23:59'、ALL_DAYS_OF_WEEK、TRADE_STOP);
   TradeState.SetTradeState(日'0:00',  日'9:59',  ALL_DAYS_OF_WEEK, TRADE_WAIT);
   TradeState.SetTradeState(日'23:40',日'23:49',星期五,交易停止);
   TradeState.SetTradeState(日'00:00',日'23:59',周六,TRADE_WAIT);
   TradeState.SetTradeState(日'00:00',日'23:59',星期日,TRADE_WAIT);
   
  打印函数“10:00——”+枚举转字符串(TradeState.GetTradeState(日'10:00')));
  打印函数“14:01——”+枚举转字符串(TradeState.GetTradeState(日'14:01')));
  打印函数“18:50——”+枚举转字符串(TradeState.GetTradeState(日'18:50')));
  打印函数“23:50——”+枚举转字符串(TradeState.GetTradeState(日'23:51')));
  打印函数“星期五,> 15:00 - ”+枚举转字符串(TradeState.GetTradeState(D'2015.11.27 15:00')));
  打印函数“周六 - ”+枚举转字符串(TradeState.GetTradeState(D'2015.11.28')));
  打印函数“星期日 - ”+枚举转字符串(TradeState.GetTradeState(D'2015.11.29')));
  打印函数“默认状态-”+枚举转字符串(TradeState.GetTradeState(日'11:40')));
}//+------------------------------------------------------------------+

作为检查,该脚本实现了与特定交易时间相对应的模式的打印。

重要的是要认识到所提出的模块只是一个辅助工具。停止交易(并关闭所有头寸)的决定必须由专家自己做出。然而,对于任何使用此模块的专家来说,创建不同的时区和交易模式都非常容易。


附件下载

📎 tradestate.mqh (5.15 KB)

Source: MQL5 #14335

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录