如何仅在10:00-15:00时段执行交易?Pine Script报错求助
解决Pine Script时间窗口开仓的类型报错问题
问题根源
你用TimeWindow=time(timeframe.period,"1000-1500", "GMT")获取时间窗口,这个time()函数返回的是对应时段起始的时间戳(整数类型),不在窗口内时返回0。而strategy.entry的if条件需要布尔值(true/false),直接把整数变量和其他布尔条件用and连接,就会触发类型不匹配的报错。
两种修复方案
方案一:用专门的时间范围判断函数(推荐)
Pine Script提供了time_in_range()函数,直接返回布尔值,无需手动处理类型转换:// 判断当前是否在10:00-15:00 GMT区间内 isTradingWindow = time_in_range(timeframe.period, "1000-1500", "GMT")方案二:手动将整数转为布尔值
利用不在窗口时time()返回0的特性,通过判断是否非零得到布尔值:TimeWindow = time(timeframe.period, "1000-1500", "GMT") isTradingWindow = TimeWindow != 0
完整示例代码
结合简单的均线交叉策略,仅在指定时间窗口内开仓:
//@version=5 strategy("时间窗口开仓策略", overlay=true) // 定义时间窗口条件 isTradingWindow = time_in_range(timeframe.period, "1000-1500", "GMT") // 均线条件 smaFast = ta.sma(close, 50) smaSlow = ta.sma(close, 200) longCondition = ta.crossover(smaFast, smaSlow) shortCondition = ta.crossunder(smaFast, smaSlow) // 仅在时间窗口内执行开仓 if (longCondition and isTradingWindow) strategy.entry("做多", strategy.long) if (shortCondition and isTradingWindow) strategy.entry("做空", strategy.short)
内容的提问来源于stack exchange,提问作者Sly1980
相关产品推荐
相关产品推荐

