You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何策略触发交易次数远少于指标信号?附Pine Script代码求助

问题分析与修复方案

核心问题1:持仓判断逻辑错误

你的平仓条件if strategy.position_avg_price > 0完全错误——Pine Script中,空单的strategy.position_avg_price是负值(空单的平均价格以负数形式记录),所以这个条件永远不会成立,导致开仓后永远不会平仓。一旦持有空单,策略默认不允许同一方向重复开仓,后续的shortSignal即使触发也无法开新仓,最终回测只有寥寥几次交易。

核心问题2:变量命名笔误

代码中定义了ema5 = ta.ema(close,100),但后续调用的是ema100,这属于未定义变量,会导致previousdetachedabove条件失效(实际运行时ema100会被视为na,比较结果始终为false)。虽然你提到图表上有大量信号,可能实际运行时修正了这个笔误,但代码里的这个错误必须修正。

修复后的完整代码

strategy('AMI short', overlay = true)

// 修正变量命名笔误:ema5改为ema100
ema100 = ta.ema(close,100)
rsi = ta.rsi(close, 14)
plot(ema100, linewidth = 2, color = color.yellow)

currentcrossbelow = close < low[1]
previousdetachedabove = low[1] > ema100[1]

shortSignal = currentcrossbelow and previousdetachedabove and high < high[1]
bgcolor(shortSignal ? color.new(color.red, 40) : na)

SL = 0.05
TP = 0.10

// 修正平仓条件:判断是否持有空单(position_size < 0)
if shortSignal
    strategy.entry('Short', strategy.short, 1)
if strategy.position_size < 0
    shortStop = strategy.position_avg_price * (1 + SL)
    shortProfit = strategy.position_avg_price * (1 - TP)
    strategy.exit('closeShort', stop = shortStop, limit = shortProfit)

额外优化建议

  • 可以将strategy.exit直接绑定到strategy.entry,简化代码:
    if shortSignal
        strategy.entry('Short', strategy.short, 1)
        strategy.exit('closeShort', 'Short', stop = strategy.position_avg_price*(1+SL), limit = strategy.position_avg_price*(1-TP))
    
  • 如果需要允许同一方向多次开仓,可以在策略开头添加:
    strategy.risk.allow_entry_in = strategy.short
    

内容的提问来源于stack exchange,提问作者user20537640

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:20:30