如何重置TradingView策略数据,避免交易信号隔夜结转?
问题解决:每日重置交易策略数据
原代码的核心问题是使用var声明的变量会跨交易日保留数值,无法自动重置。要实现每个交易日从零开始、不继承前一日数据的需求,需要在新交易日触发时重置所有相关变量及趋势状态。
以下是修改后的完整代码:
indicator("IBH-IBL", overlay=true) // 检测新交易日 is_new_day = ta.newday() // 初始化日内变量,新交易日时重置 float dayOpen = na float dayHigh = na float dayLow = na float dayClose = na // 标记开盘5分钟(9:15)的K线 ib_candle = hour == 9 and minute == 15 // 新交易日重置变量,非交易日保留已捕获的开盘数据 if is_new_day dayOpen := ib_candle ? open : na dayHigh := ib_candle ? high : na dayLow := ib_candle ? low : na dayClose := ib_candle ? close : na else dayOpen := na(dayOpen[1]) ? (ib_candle ? open : na) : dayOpen[1] dayHigh := na(dayHigh[1]) ? (ib_candle ? high : na) : dayHigh[1] dayLow := na(dayLow[1]) ? (ib_candle ? low : na) : dayLow[1] dayClose := na(dayClose[1]) ? (ib_candle ? close : na) : dayClose[1] // 绘制开盘5分钟相关线条 plot(dayOpen, color=color.yellow, linewidth=3, title='5min yellow line') plot(dayHigh, color=color.blue, linewidth=2, title='5min IBH') plot(dayLow, color=color.blue, linewidth=2, title='5min IBL') // 入场条件判断 longCondition = close > dayOpen shortCondition = close < dayOpen twoAbovedayOpen = longCondition[1] and longCondition[2] twobelowdayOpen = shortCondition[1] and shortCondition[2] // 趋势状态,新交易日重置为初始值1 Trend = 0 Trend := is_new_day ? 1 : twoAbovedayOpen ? 1 : twobelowdayOpen ? -1 : nz(Trend[1], 1) // 绘制入场箭头 plotarrow(Trend == 1 and Trend[1] == -1 ? Trend : na, title="Up Entry Arrow", colorup=color.lime, maxheight=60, minheight=50, transp=0) plotarrow(Trend == -1 and Trend[1] == 1 ? Trend : na, title="Down Entry Arrow", colordown=color.red, maxheight=60, minheight=50, transp=0)
关键修改说明:
- 移除
var关键字,改用普通变量配合ta.newday()实现每日重置 - 用
ta.newday()准确识别新交易日的起始点 - 新交易日时重置所有开盘5分钟变量和趋势状态
Trend - 非交易日仅在未捕获当日开盘数据时赋值,否则保留已有数据
内容的提问来源于stack exchange,提问作者Tech_Learn
相关产品推荐
相关产品推荐

