指标显示Ø值却绘绿线:含义、检测方法及信号异常问询
TradingView指标中Ø值的含义与检测方法
问题背景
我复制修改了一个TradingView指标,规则是当IF_RSI变量大于0.8时绘制绿线。但K线图中指标值有时显示+1、有时-1、有时Ø,只有-1会让线条变红,另外两个值都显示绿线。我想用这个指标结合其他指标生成交易信号:绿线触发买入,红线触发卖出,所以用了IF_RSI > 0.8作为买入条件。但当变量值为Ø时,线条虽显示绿色,却触发了卖出信号。直接用IF_RSI == Ø检测会报错,示例场景为2022年10月31日11:06的特斯拉3分钟K线图。
附原指标代码:
//@version=5 indicator(title='V7-I-F-MC-InvFisherWMA-13-09-22 ', shorttitle='V7_IF_WMA_VI_RSI') // based on: Inverse Fisher WMA RSI and ROC of Vortex by drnkk copy //Inputs RSI_pm = input(5, title="RSI Main Period") RSI_ps = input(1, title="RSI Smooth Period") //RSI Calculation raw_RSI = 0.1 * (ta.rsi(close, RSI_pm) - 50) wma_RSI = ta.wma(raw_RSI, RSI_ps) * 100 IF_RSI = (math.exp(2 * wma_RSI) - 1) / (math.exp(2 * wma_RSI) + 1) iff_1 = IF_RSI < -0.8 ? color.red : color.gray plot(IF_RSI, color=IF_RSI > 0.8 ? color.lime : iff_1, linewidth=3) hline(0)
Ø的含义
这个Ø是TradingView Pine脚本中**na(Not a Number,无效值)**的可视化显示。出现的原因是指标计算初期,ta.rsi()需要足够的K线周期才能生成有效数值(你的RSI主周期是5,前4根K线没有有效RSI值),导致后续的raw_RSI、wma_RSI都变成na,最终IF_RSI的计算结果也是na,在图表上就显示为Ø。
如何检测Ø值
不能直接用IF_RSI == Ø来判断,Pine脚本提供了专门的函数ta.isna()来检测无效值,用法如下:
is_invalid = ta.isna(IF_RSI)
修正信号逻辑示例
为了避免na值干扰交易信号,你需要在判断买入/卖出条件时先排除无效值:
//@version=5 indicator(title='V7-I-F-MC-InvFisherWMA-13-09-22 ', shorttitle='V7_IF_WMA_VI_RSI') // based on: Inverse Fisher WMA RSI and ROC of Vortex by drnkk copy //Inputs RSI_pm = input(5, title="RSI Main Period") RSI_ps = input(1, title="RSI Smooth Period") //RSI Calculation raw_RSI = 0.1 * (ta.rsi(close, RSI_pm) - 50) wma_RSI = ta.wma(raw_RSI, RSI_ps) * 100 IF_RSI = (math.exp(2 * wma_RSI) - 1) / (math.exp(2 * wma_RSI) + 1) // 检测无效值 is_invalid = ta.isna(IF_RSI) // 修正颜色逻辑,无效值时用灰色 plot_color = is_invalid ? color.gray : (IF_RSI > 0.8 ? color.lime : (IF_RSI < -0.8 ? color.red : color.gray)) plot(IF_RSI, color=plot_color, linewidth=3) // 修正交易信号逻辑 buy_signal = not is_invalid and IF_RSI > 0.8 sell_signal = not is_invalid and IF_RSI < -0.8 // 绘制信号(可选) plotshape(buy_signal, title="Buy", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(sell_signal, title="Sell", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL") hline(0)
内容的提问来源于stack exchange,提问作者Adam B
相关产品推荐
相关产品推荐

