Pine Script策略图表中买卖信号标签不显示求助
标签不显示的核心原因及修复方案
1. 策略触发条件逻辑完全矛盾(根本原因)
你的isConfluent函数定义了一个不可能满足的条件:
isConfluent(rsi_val, sobrevenda, sobrecompra) => rsi_val < sobrevenda and rsi_val > sobrecompra
默认参数下sobrevenda_level=30、sobrecompra_level=70,RSI值范围是0-100,没有任何数值能同时小于30且大于70,导致这个函数永远返回false。后续的开仓条件not isLong and isConfluent(...)永远无法成立,标签自然不会被创建。
修复方向
根据策略逻辑推测,你应该是想通过RSI的超卖/超买区过滤信号:
- 做多时,判断RSI处于超卖区:
rsi_val < sobrevenda_level - 做空时,判断RSI处于超买区:
rsi_val > sobrecompra_level
可以直接删除这个矛盾的函数,在开仓条件里直接判断。
2. 其他次要问题
- 平仓逻辑中
isLong未重新赋值:原代码最后一行isLong没有设置为false,会导致状态变量混乱,需改为isLong := false - 初始状态变量赋值:
var bool isLong = na首次判断not isLong时,na会被视为false,建议改为var bool isLong = false、var bool isShort = false避免潜在逻辑问题
完整修复后的代码
//@version=5 strategy("Cross Medias Moveis © Teste", overlay=true) // Definir inputs para os períodos das médias móveis ma1_length = input(12, title="MA 1 Length") ma2_length = input(50, title="MA 2 Length") // Função para calcular a média móvel simples (SMA) sma(source, length) => sum = 0.0 for i = 0 to length - 1 sum := sum + source[i] sum / length // Variáveis para armazenar as médias móveis ma1 = sma(close, ma1_length) ma2 = sma(close, ma2_length) // Adicionar média móvel 1 ao gráfico plot(ma1, color=color.rgb(54, 255, 114), linewidth=2, title="MA 1") // Adicionar média móvel 2 ao gráfico plot(ma2, color=color.rgb(255, 0, 13), linewidth=2, title="MA 2") // Variáveis para armazenar o estado da estratégia var bool isLong = false var bool isShort = false // Constantes para níveis de Sobrevenda e Sobrecompra sobrevenda_level = input(30, title="Sobrevenda") sobrecompra_level = input(70, title="Sobrecompra") // Calcular o RSI rsi_val = ta.rsi(close, 14) // Lógica da estratégia if (ma1 > ma2) if not isLong and rsi_val < sobrevenda_level strategy.entry("Long", strategy.long) isLong := true isShort := false // Exibir texto "Long" no gráfico em tamanho grande label.new(bar_index, low, text="Long", color=color.green, size=size.large, yloc=yloc.price, style=label.style_circle) else if (ma1 < ma2) if not isShort and rsi_val > sobrecompra_level strategy.entry("Short", strategy.short) isLong := false isShort := true // Exibir texto "Short" no gráfico em tamanho grande label.new(bar_index, high, text="Short", color=color.red, size=size.large, yloc=yloc.price, style=label.style_circle) // Saída da estratégia if (strategy.position_size > 0) if isLong and (ma1 < ma2) strategy.close("Long") isLong := false
内容的提问来源于stack exchange,提问作者Jj981
相关产品推荐
相关产品推荐

