如何用布尔变量指定特定月日,排除外汇策略测试中的特定日期?
外汇策略测试:排除指定日期的问题解决
问题重现
测试外汇货币对交易策略时,为规避消息面引发的行情异动,需要排除每年的2月5日。目前已能处理小时、分钟级别的时间排除,但用以下表达式无法实现目标(已确认策略逻辑中包含not(TimeToAvoid)的判断):
TimeToAvoid = month == 2 and dayofmonth == 5
常见排查点与修复方案
- 月份取值范围检查:这是最容易踩的坑!不同交易脚本框架的月份计数规则不一样:
- 若用的是Pine Script v5等框架,
month取值为1-12,原表达式逻辑没问题,但要确保策略的时间周期(比如M1、H1)能覆盖2月5日的每一根K线; - 部分框架(比如旧版Pine或其他语言)中月份从0开始计数,2月对应的是
month == 1,此时需把表达式改成:TimeToAvoid = month == 1 and dayofmonth == 5
- 若用的是Pine Script v5等框架,
- 时间精度与作用域验证:如果策略用的是日级(D1)以上周期,要确认K线的时间戳是否对应2月5日当天;同时检查
TimeToAvoid变量是否在全局作用域定义,避免局部逻辑导致判断失效。 - 添加验证逻辑:可以加个可视化标记,确认表达式是否正确识别目标日期:
运行后如果2月5日的K线出现红色标记,说明时间判断没问题,再去检查if TimeToAvoid label.new(bar_index, high, str.tostring(time, "yyyy-MM-dd"), color=color.red, textcolor=color.white)not(TimeToAvoid)是否正确嵌套在下单逻辑的前置条件里。
内容的提问来源于stack exchange,提问作者Vendrel
相关产品推荐
相关产品推荐

