程序库: 控制_交易_会话 - 页 2 12 新评论 Stanislav Korotky 2025.11.07 16:35 #11 Forester #: 这只是按时间进行的比较。 代替 顺便说一句,你可以任意设定。 会话时间从经纪商处获取,也可以手动设置。 我指的是内部代码,而不是调用和传入参数。 datetime Sec = TimeSec(time); //当天当前秒数 ... if(( Sec >= this.TradeTimeFrom[i][DayOfWeek] ) && ( Sec < this.TradeTimeTo[i][DayOfWeek] )) 这里 Sec 的取值范围限定在一天内,但没有 from-to 的边界。例如,如果查询的是凌晨3点,而交易时段是晚上9点到早上8点,那么本应返回 true,但该条件不会触发,结果将返回 false。 Aleksei Kuznetsov 2025.11.07 17:04 #12 Stanislav Korotky #:我指的是内部代码,而不是调用和传入的参数。 这里将Sec转换为24小时制,但没有from-to的范围限制。例如,如果查询的时间是凌晨3点,而该交易时段的交易时间为晚上9点至早上8点,那么本应返回true,但条件未满足,因此会返回false。 可以通过设置两个交易时段来解决这个问题: 21-24 和 0-8 这是个理论问题,还是交易中心实际上存在类似的from-to范围? Stanislav Korotky 2025.11.07 17:25 #13 Forester #:可以通过两个时段来设置: 21-24 和 0-8 这是个理论问题,还是数据中心确实有类似的“from-to”范围? 所谓“通过两个交易时段设置”是什么意思?——毕竟这些数据是来自MT5的设置,并非由我们手动设置的。而在MT5中,一个交易时段就对应一条记录。在某些交易中心(由于地理位置远离市场),可能会出现这种情况。 在这种情况下,SymbolInfoSessionTrade会返回包含额外一天时间的“to”时间(至少以前是这样——我目前尚未核实),也就是说“from < to”的条件始终成立。 Aleksei Kuznetsov 2025.11.07 17:44 #14 Stanislav Korotky #: “设置两个会话”是什么意思? 在 sunput 中可以为每一天单独设置会话。程序将根据这些设置运行。 调用#define LoadSessionFromInputs // 从输入中读取会话 Stanislav Korotky#: 在这种情况下,SymbolInfoSessionTrade 返回的“to”时间会考虑额外的一天(至少以前是这样——我现在还没验证),也就是说“from < to”的 条件始终成立。 也就是说 20:00 - 32:00 吗? 如果交易中心能提供一个可供测试的实际示例,就可以根据该示例进行调整并验证。 目前有一个简单的解决方案——自行将会话在午夜时分拆分为两个部分。还可以指定具体是哪一天——例如周六8:00之前属于周五的剩余时间,或者周日20:00之后属于周一的开始时间。 Stanislav Korotky 2025.11.07 21:20 #15 Forester #:也就是说 20:00 - 32:00 吗? 是的。目前还没有发现配备此类服务器的现成数据中心。得去新西兰找找看。 Aleksei Kuznetsov 2025.11.08 08:27 #16 Stanislav Korotky #: 是的。目前还没有现成的数据中心配备这样的服务器。得在新西兰找找看。 我用自定义符号编辑器这样设置的: Aleksei Kuznetsov 2025.11.17 15:21 #17 Forester #:我在自定义符号编辑器中这样设置: 编写了会话规则,使会话在次日按截图所示的时段(即20:00-08:00)进行切换。 修改了该函数: for (int i = 0; i < this.TradeSessions[DayOfWeek]; i++){//遍历本周该天的会话 if(( Sec >= this.TradeTimeFrom[i][DayOfWeek] )){ //会话开始 - 查找结束 if(Sec < this.TradeTimeTo[i][DayOfWeek]){//还没到尽头,记住 this.NextTradeStop = (datetime)(day * 86400) + this.TradeTimeTo[i][DayOfWeek]; //当前会话的结束时间,在此之前无需检查下一个会话 = (当天开始时间 + 会话时间) //Print("new Stop ",this.NextTradeStop); return true; }else if (this.TradeTimeTo[i][DayOfWeek] < this.TradeTimeFrom[i][DayOfWeek]){// 结束 < 开始,例如 20:00-04:00 — 跨入次日 + 时间增加 1 天 this.NextTradeStop = (datetime)((day+1) * 86400) + this.TradeTimeTo[i][DayOfWeek]; //当前会话的结束时间,在此之前无需检查下一个会话 = (当天开始时间 + 会话时间) //Print("new Stop ",this.NextTradeStop); return true; } } } 新增的代码 会检查结束时间是否早于会话开始时间,然后直接在结束时间上 加1天。 已通过以下会话 进行验证: 第1天 交易时段:1:23:55-00:05 第2天 交易时段:1:00:15-00:17 首个交易时段延续至次日: 2020.06.29 23:55:03 2020.06.29 23:55:03 2020.06.29 23:55:09 2020.06.29 23:55:09 2020.06.29 23:56:39 2020.06.29 23:56:39 2020.06.29 23:57:01 2020.06.29 23:57:01 2020.06.29 23:59:59 2020.06.29 23:59:59 2020.06.30 00:00:00 2020.06.30 00:00:00 2020.06.30 00:00:08 2020.06.30 00:00:08 2020.06.30 00:01:52 2020.06.30 00:01:52 2020.06.30 00:02:02 2020.06.30 00:02:02 2020.06.30 00:02:30 2020.06.30 00:02:30 2020.06.30 00:03:25 2020.06.30 00:03:25 2020.06.30 00:03:31 2020.06.30 00:03:31 第二场会议,按惯例在一天内举行: 2020.06.30 00:15:29 2020.06.30 00:15:29 2020.06.30 00:16:01 2020.06.30 00:16:01 2020.06.30 00:16:09 2020.06.30 00:16:09 一周后将举行第一场会议: 2020.07.06 23:55:01 2020.07.06 23:55:01 2020.07.06 23:55:09 2020.07.06 23:55:09 12 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这只是按时间进行的比较。
代替 顺便说一句,你可以任意设定。
会话时间从经纪商处获取,也可以手动设置。
我指的是内部代码,而不是调用和传入参数。
这里 Sec 的取值范围限定在一天内,但没有 from-to 的边界。例如,如果查询的是凌晨3点,而交易时段是晚上9点到早上8点,那么本应返回 true,但该条件不会触发,结果将返回 false。
我指的是内部代码,而不是调用和传入的参数。
这里将Sec转换为24小时制,但没有from-to的范围限制。例如,如果查询的时间是凌晨3点,而该交易时段的交易时间为晚上9点至早上8点,那么本应返回true,但条件未满足,因此会返回false。
可以通过设置两个交易时段来解决这个问题:
21-24 和 0-8
这是个理论问题,还是交易中心实际上存在类似的from-to范围?
可以通过两个时段来设置:
21-24 和 0-8
这是个理论问题,还是数据中心确实有类似的“from-to”范围?
“设置两个会话”是什么意思?
在 sunput 中可以为每一天单独设置会话。程序将根据这些设置运行。
调用
#define LoadSessionFromInputs // 从输入中读取会话
在这种情况下,SymbolInfoSessionTrade 返回的“to”时间会考虑额外的一天(至少以前是这样——我现在还没验证),也就是说“from < to”的 条件始终成立。
也就是说 20:00 - 32:00 吗?
如果交易中心能提供一个可供测试的实际示例,就可以根据该示例进行调整并验证。
目前有一个简单的解决方案——自行将会话在午夜时分拆分为两个部分。还可以指定具体是哪一天——例如周六8:00之前属于周五的剩余时间,或者周日20:00之后属于周一的开始时间。
也就是说 20:00 - 32:00 吗?
是的。目前还没有现成的数据中心配备这样的服务器。得在新西兰找找看。
我用自定义符号编辑器这样设置的:
我在自定义符号编辑器中这样设置:
修改了该函数:
新增的代码 会检查结束时间是否早于会话开始时间,然后直接在结束时间上 加1天。
已通过以下会话 进行验证:
第1天 交易时段:1:23:55-00:05
第2天 交易时段:1:00:15-00:17
首个交易时段延续至次日:
2020.06.29 23:55:03 2020.06.29 23:55:03
2020.06.29 23:55:09 2020.06.29 23:55:09
2020.06.29 23:56:39 2020.06.29 23:56:39
2020.06.29 23:57:01 2020.06.29 23:57:01
2020.06.29 23:59:59 2020.06.29 23:59:59
2020.06.30 00:00:00 2020.06.30 00:00:00
2020.06.30 00:00:08 2020.06.30 00:00:08
2020.06.30 00:01:52 2020.06.30 00:01:52
2020.06.30 00:02:02 2020.06.30 00:02:02
2020.06.30 00:02:30 2020.06.30 00:02:30
2020.06.30 00:03:25 2020.06.30 00:03:25
2020.06.30 00:03:31 2020.06.30 00:03:31
第二场会议,按惯例在一天内举行:
2020.06.30 00:15:29 2020.06.30 00:15:29
2020.06.30 00:16:01 2020.06.30 00:16:01
2020.06.30 00:16:09 2020.06.30 00:16:09
一周后将举行第一场会议:
2020.07.06 23:55:01 2020.07.06 23:55:01
2020.07.06 23:55:09 2020.07.06 23:55:09