TradeState - 根据时间的 EA 交易模式切换器 - MetaTrader 5 库
您是否曾经根据时间限制 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
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
