TradingView回测无结果,Pine Script编写的威廉鳄鱼+EMA+VWAP交易策略求优化
代码核心错误排查
- 参数和指标值混淆:你在开仓判断中误用了
teethLength、lipsLength这类长度参数(默认值为8、5的固定数值),而非威廉鳄鱼的实际线值teeth、lips,导致条件几乎不可能成立,无开仓信号。 - 开仓逻辑矛盾:你同时要求
longcondition2 = crossunder(priceSMA, vwap)(价格下穿VWAP)和longcondition3 = crossover(priceSMA,vwap)(价格上穿VWAP),两个条件不可能在同一根K线同时触发,自然没有回测结果。 - 规则不匹配:现有条件完全没有匹配你描述的「收盘价位于威廉鳄鱼唇线和齿线之间」的规则,额外加的
strategy.entry的when参数又加了一层错误判断,进一步阻断了开仓可能。 - 无效变量:
priceSMA = sma(close,1)等价于直接取close,属于冗余变量,直接用close即可。
修复后的核心逻辑参考
// 修正后的多头条件,匹配你描述的规则 // 1. 价格高于600周期EMA longcondition1 = close > out // 2. 价格近3根K线内回落触及过VWAP longcondition2 = ta.low <= vwap and ta.high >= vwap in 3 // 3. 收盘价位于唇线和齿线之间 longcondition3 = (close > lips and close < teeth) or (close < lips and close > teeth) if (longcondition1 and longcondition2 and longcondition3) stopLoss = lowest(low, 30) takeProfit = (close - stopLoss) * 2 + close strategy.entry("long", strategy.long, 100) strategy.exit("exit", "long", stop=stopLoss, limit=takeProfit) // 空头条件按你需求参考上述逻辑对应修改即可
优化方向
- 处理威廉鳄鱼的偏移属性:你当前设置了鳄鱼线的偏移参数(唇线偏移3、齿线偏移5、 jaw偏移8),如果不做对应处理直接判断当前K线的鳄鱼值,会隐含未来函数风险,建议要么判断对应偏移周期前的K线价格,要么去掉偏移参数后再做开仓判断。
- 适配VWAP适用周期:VWAP是日内指标,仅在1小时及以下的日内周期有效,日线及以上周期回测时VWAP会失效,需确认回测周期匹配。
- 优化止损止盈逻辑:不要固定用30周期高低点计算盈亏比,可引入ATR指标适配不同品种的波动率,避免止损过窄/止盈过宽的问题。
- 增加回测真实度:可在
strategy声明中加入slippage、commission_type、commission_value参数,把滑点、手续费计入回测,结果更贴合实盘。 - 增加持仓限制:可通过
strategy.risk.allow_entry_in、strategy.opentrades限制最大持仓数,避免同一方向重复开仓。
内容的提问来源于stack exchange,提问作者Chris Farah
相关产品推荐
相关产品推荐

