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

TradingView Pine Script回测:40周SMA策略收益率及止损实现问题

问题解决方案

以下是修正后的可运行完整代码,同时解决你提到的两个核心问题:

//@version=4
strategy("40周均线交叉策略", initial_capital=100000, default_qty_type=strategy.cash, commission_type=strategy.commission.percent, commission_value=0.1)

// 强制取40周均线,不受当前图表周期影响
sma40 = security(syminfo.tickerid, "W", sma(close, 40))

// 买卖信号:价格上穿40周均线买入,下穿卖出
long = crossover(close, sma40)
sell = crossunder(close, sma40)

// 回测时间范围
start= timestamp(1995,6,1,0,0)
end= timestamp(2020,6,1,0,0)
time_in_range = time >= start and time <= end

if time_in_range
    // 用全部账户权益开仓,实现合约无关的百分比收益
    strategy.entry("Long", strategy.long, qty=strategy.equity, when=long)

// 绑定仓位同时设置止损,和原卖出逻辑并行触发
strategy.exit("Exit_Long", "Long", stop = strategy.position_avg_price * 0.95, when = time_in_range)
strategy.close("Long", when = sell and time_in_range)

注:原代码存在变量调用错误,你定义了sma40但交易逻辑中使用了未声明的sma200,上述代码已修复该问题,同时使用crossover/crossunder函数过滤重复信号,添加security函数强制读取周线级别的40周期均线,避免当前图表周期不是周线时逻辑出错。

1. 不受合约规模影响的收益率实现

  • 策略初始化时添加default_qty_type = strategy.cash参数,指定下单数量按现金价值计算
  • 开仓时qty参数传入strategy.equity,即用当前全部账户权益满仓开仓
  • 该配置下最终回测展示的收益率为百分比净收益,和固定下单手数、合约面值无关,仅和策略涨跌幅度挂钩

2. 5%止损逻辑实现

  • 调用strategy.exit()函数绑定入场订单ID为Long的仓位
  • 止损参数stop设置为strategy.position_avg_price * 0.95,即当价格下跌到比入场均价低5%时自动平仓
  • 止损条件和原有的下穿均线卖出条件并行触发,满足任意一个就会平仓

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:06:03