TradingView前一日OHLC绘制延迟及lookahead参数启用必要性问询
TradingView security函数数据延迟问题解决方案
问题根因
你遇到的1天延迟是security()函数默认的非前瞻合并逻辑和你代码的参数写法共同导致的:security()默认lookahead = barmerge.lookahead_off时,只会返回已经完全闭合的时间级别的K线数据,你原代码中把偏移offset_写在security入参的val_[offset_]位置,相当于请求日线级别"偏移对应周期前的已闭合K线数值",当日开盘价需要等当日日线完全收盘才会被返回,自然出现1天延迟。
lookahead_on启用必要性判断
- 若指标仅用于静态图表绘制、历史行情复盘:可以启用
lookahead_on,能够直接拿到你需要的实时数据,不会影响使用体验。 - 若指标需要用于策略回测、实盘交易信号触发:绝对禁止启用
lookahead_on,该参数会引入未来数据,导致回测结果严重失真,完全不具备参考性。
无需启用lookahead_on的修正方案
调整getSeriesData函数的偏移写法,将偏移参数从security内部移到外部,即可在默认非前瞻模式下拿到正确的实时数据,没有延迟:
//@version=4 study("SeriesData","SRD",overlay=true) linew = input(title="Line Width",type = input.integer, defval=2,minval=1,maxval=5) getSeriesData(val_,tf_,offset_)=> // 偏移移到security函数外部,取返回值的偏移,不引入未来数据 VAL = security(syminfo.tickerid, tf_, val_)[offset_] d_op = getSeriesData(open,'D',0) //current day open pd_hi = getSeriesData(high,'D',1) // Previous Day High pd_lo = getSeriesData(low,'D',1) // Previous Day Low pd_cl = getSeriesData(close,'D',1) //Previous Day Close plot(d_op,color=color.silver,style=plot.style_circles,linewidth=linew, display = display.all) plot(pd_hi,color=color.red,style=plot.style_circles,linewidth=linew, display = display.all) plot(pd_lo,color=color.lime,style=plot.style_circles,linewidth=linew, display = display.all)
修正后原理:security优先返回当前时间级别下已经确定的日线数值,当日开盘价在当日第一根K线生成时就已经固定,不需要等日线闭合即可正常返回,不会出现延迟,也没有未来函数风险。
内容的提问来源于stack exchange,提问作者MVP_Script
相关产品推荐
相关产品推荐

