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

Trading View Pine Script策略回测“No Data”错误排查及优化求助

Pine Script策略回测"No Data"问题排查与优化建议

问题根源

回测显示"No Data"的核心原因是入场条件过于严苛,从未触发任何交易,次要原因是追踪止损逻辑存在缺陷,导致信号触发概率极低。具体问题点:

  • RSI超卖阈值设为25过于严格,多数资产极少达到该水平
  • 入场同时要求价格在MA13上方、MA13在MA34上方(强上升趋势),与RSI超卖(弱势信号)的矛盾性导致几乎无符合条件的K线
  • 自定义ATR追踪止损逻辑复杂且存在逻辑漏洞,计算出的止损线异常

修复后的可运行代码

//@version=5
strategy("MACD-ATR-Trailing-Stop with UT Bot Alerts", overlay=true, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=1000)

// Indicator: MACD
fast_length = input.int(title="Fast Length", defval=12)
slow_length = input.int(title="Slow Length", defval=26)
signal_length = input.int(title="Signal Length", defval=9)

fast_ma = ta.ema(close, fast_length)
slow_ma = ta.ema(close, slow_length)
macd = fast_ma - slow_ma
signal = ta.ema(macd, signal_length)
histogram = macd - signal

// 绘制MACD指标
plot(macd, color=color.blue, title="MACD")
plot(signal, color=color.red, title="Signal")
plot(histogram, color=histogram>0 ? color.green : color.red, style=plot.style_columns, title="Histogram")

// Indicator: ATR Trailing Stop
a = input.float(title='ATR倍数(调整灵敏度)', defval=1.5, minval=0.01, maxval=100, step=0.01)
c = input.int(title='ATR周期', defval=14, minval=1, step=1)
h = input.bool(title='使用Heikin Ashi蜡烛信号', defval=false)

// 使用内置Heikin Ashi函数,避免自定义错误
ha = ta.heikinashi()
src = h ? ha.close : close

xATR = ta.atr(c)
nLoss = a * xATR

// 简化追踪止损逻辑:多单止损为最近20周期最低价减去ATR倍数,空单为最近20周期最高价加上ATR倍数
long_stop = ta.lowest(src, 20) - nLoss
short_stop = ta.highest(src, 20) + nLoss

// Indicator: RSI
rsi_length = input.int(title="RSI周期", defval=14)
overbought = input.int(title="超买阈值", defval=70)
oversold = input.int(title="超卖阈值", defval=30) // 降低阈值提高触发概率

rsi = ta.rsi(src, rsi_length)
// 绘制RSI指标
plot(rsi, color=color.purple, title="RSI")
hline(overbought, "Overbought", color=color.red)
hline(oversold, "Oversold", color=color.green)

// Moving Averages
ma13 = ta.ema(src, 13)
ma34 = ta.ema(src, 34)
// 绘制均线
plot(ma13, color=color.orange, title="MA13")
plot(ma34, color=color.teal, title="MA34")

// 定义止损止盈比例
stop_loss_pct = input.float(title="止损比例(%)", defval=2.0, minval=0.1, maxval=10.0, step=0.1)
take_profit_pct = input.float(title="止盈比例(%)", defval=6.0, minval=0.1, maxval=20.0, step=0.1)

// 入场条件:RSI低于超卖线,且价格上穿MA13,MA13在MA34上方(弱上升趋势+超卖反弹)
long_condition = ta.crossover(src, ma13) and rsi < oversold and ma13 > ma34
if long_condition
    strategy.entry("Long", strategy.long)

// 离场条件:追踪止损或止盈
strategy.exit("Exit Long", "Long", 
              stop=close - (close * stop_loss_pct / 100), 
              limit=close + (close * take_profit_pct / 100),
              trail_offset=nLoss, trail_price=long_stop)

// 空单逻辑(补充完善策略)
short_condition = ta.crossunder(src, ma13) and rsi > overbought and ma13 < ma34
if short_condition
    strategy.entry("Short", strategy.short)

strategy.exit("Exit Short", "Short", 
              stop=close + (close * stop_loss_pct / 100), 
              limit=close - (close * take_profit_pct / 100),
              trail_offset=nLoss, trail_price=short_stop)

关键优化点说明

  • 放宽入场条件:将RSI超卖阈值从25调整为30,同时将入场信号改为价格上穿MA13,平衡信号可靠性与触发频率
  • 简化追踪止损:使用标准的ATR倍数计算逻辑,替换原复杂且易出错的嵌套条件判断
  • 使用内置函数:用Pine Script原生Heikin Ashi函数替代自定义实现,避免计算错误
  • 补充空单逻辑:完善双向交易能力,提升策略完整性
  • 可视化指标:添加MACD、RSI、均线的绘图,方便直观验证信号
  • 参数可配置:将止损止盈设为百分比输入,便于灵活调整

后续优化建议

  • 参数优化:通过TradingView策略测试器对ATR倍数、RSI阈值、均线周期等参数进行批量优化,找到适配目标资产的最优组合
  • 过滤假信号:可添加MACD金叉/死叉作为额外过滤条件,减少无效交易
  • 动态止损:根据持仓时间或盈利情况调整止损幅度,锁定更多利润
  • 仓位管理:添加固定仓位或动态仓位逻辑,控制单笔交易风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:34:54