Pine Script编译错误修复求助:找不到crossover函数及策略代码问题
Pine Script 编译错误与策略逻辑修复方案
一、编译错误修复
第11行的crossover函数未找到,原因是Pine Script v5中所有技术分析函数都归属ta命名空间,必须写成ta.crossover才能正确调用。
二、策略逻辑问题修复
原代码存在多处逻辑漏洞,逐一修正如下:
- 交叉信号区分缺失:仅检测了EMA上穿SMA的金叉信号,未定义EMA下穿SMA的死叉信号,需分别设置多空触发条件
- 开仓参数无效:
strategy.entry的方向参数错误,空头应使用strategy.short;且开仓时strategy.position_avg_price无有效值,止损需基于当前价格设置 - 止盈止损配置错误:
strategy.exit未正确关联开仓ID,且参数使用不符合v5规范,需明确用stop和limit定义止损止盈价位
三、修复后的完整代码
//@version=5 strategy("EMA-SMA 交叉策略", overlay=true, default_qty_type=strategy.cash, default_qty_value=10000, commission_type=strategy.commission.percent, commission_value=0.1) // 设置均线变量 ema8 = ta.ema(close, 8) sma47 = ta.sma(close, 47) // 分别定义金叉(多单信号)和死叉(空单信号) longCross = ta.crossover(ema8, sma47) shortCross = ta.crossunder(ema8, sma47) // 开多单:金叉触发,止损为当前价-1,止盈为当前价+3 if (longCross) strategy.entry("Long", strategy.long) strategy.exit("Long Exit", "Long", stop=close - 1, limit=close + 3) // 开空单:死叉触发,止损为当前价+1,止盈为当前价-3 if (shortCross) strategy.entry("Short", strategy.short) strategy.exit("Short Exit", "Short", stop=close + 1, limit=close - 3) // 绘制均线便于观察信号 plot(ema8, color=color.blue, title="8-period EMA") plot(sma47, color=color.red, title="47-period SMA")
代码说明
- 新增策略基础配置(资金、佣金等),符合回测标准化要求
- 用
ta.crossunder补充死叉信号,明确多空开仓触发条件 - 基于当前收盘价计算止损止盈,确保参数有效可执行
- 为
strategy.exit指定对应开仓ID,避免信号关联错误 - 添加均线可视化,方便直观验证交叉信号
内容的提问来源于stack exchange,提问作者Michael Rurup Andersen
相关产品推荐
相关产品推荐

