如何在TradingView策略回测中设置指定生效的交易时段?
TradingView Pine脚本过滤印度汇市交易时段实现方案
核心逻辑
通过两步实现仅采用IST 9:00~16:30时段K线执行回测:
- 脚本强制绑定印度标准时间时区,避免时区偏移导致时段判断错误
- 新增交易时段校验变量,所有策略计算、开平仓逻辑仅在符合时段要求的K线上执行
具体实现步骤
- 第一步:在策略声明代码中指定时区为印度标准时间对应的时区标识符
Asia/Kolkata,示例如下:
// 替换成你原本的策略参数,新增timezone参数即可 strategy("USDINR自定义策略", overlay=true, timezone="Asia/Kolkata", initial_capital=100000, default_qty_type=strategy.cash, default_qty_value=10000)
- 第二步:定义交易时段判断变量,确认当前K线是否属于有效交易时段:
// 获取IST时区下当前K线的小时、分钟数值 curr_hour = hour(time, "Asia/Kolkata") curr_minute = minute(time, "Asia/Kolkata") // 验证是否在9:00-16:30的交易时段内 in_trade_session = curr_hour > 9 or (curr_hour == 9 and curr_minute >= 0) in_trade_session := in_trade_session and (curr_hour < 16 or (curr_hour == 16 and curr_minute <= 30))
- 第三步:给所有策略相关逻辑加上有效时段校验
所有开仓、平仓、指标计算逻辑都需要增加in_trade_session的前置条件,示例:
// 示例:原本的做多条件+时段校验后才触发开仓 long_cond = ta.crossover(ta.sma(close, 5), ta.sma(close, 20)) and in_trade_session if (long_cond) strategy.entry("多单入场", strategy.long) // 示例:仅在交易时段内触发平仓 close_long_cond = ta.crossunder(ta.sma(close, 5), ta.sma(close, 20)) and in_trade_session if (close_long_cond) strategy.close("多单入场")
- 可选优化:如果需要完全屏蔽非交易时段的行情对指标计算的影响,可以用
ta.valuewhen函数仅提取交易时段的价格计算指标,示例:
// 仅用交易时段的收盘价计算20周期均线 trade_close = ta.valuewhen(in_trade_session, close, 0) sma_20 = ta.sma(trade_close, 20)
注意事项
- 所有涉及时间的判断都统一使用
Asia/Kolkata时区,不要直接调用无参数的hour()/minute(),避免图表时区切换导致判断逻辑失效 - 非交易时段的行情波动不会触发任何策略动作,回测结果完全匹配印度汇市实际交易规则
内容的提问来源于stack exchange,提问作者Piyush Katariya
相关产品推荐
相关产品推荐

