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

Pine Script实现权益曲线下穿SMA时暂停交易并跟踪模拟权益的咨询

Pine Script权益曲线过滤与动态仓位调整实现方案

核心功能实现思路

实现的核心逻辑是分离满额运行的模拟权益计算和实际交易逻辑,不能直接用Pine Script自带的strategy.equity作为判断依据,否则暂停交易后自带权益数据会停止更新,无法跟踪满额运行的走势:

  • 先声明独立的模拟权益变量,初始值等于策略初始资金:var float sim_equity = strategy.initial_capital
  • 不管实际是否下单,只要原策略触发开平仓信号,就按照100%仓位的规则更新模拟权益,同步扣除手续费、滑点等成本,保证数据和满额运行的结果完全一致
  • 计算模拟权益的10周期SMA:sim_equity_sma = ta.sma(sim_equity, 10)
  • 定义交易开关变量:trade_enabled = sim_equity > sim_equity_sma,当开关为false时跳过所有下单、警报逻辑,但模拟权益的更新逻辑保持正常运行,即可持续跟踪后续上穿的触发节点

现有代码优化建议

你当前的实现有两个明显缺陷:一是直接用strategy.equity计算仓位,当你调低仓位或暂停交易时,自带的权益数据就不是满额运行的结果,后续的均线计算都会出现偏差;二是用strategy.netprofit差值计算单次交易利润,容易受加仓减仓、手续费核算逻辑的影响出现误差,也没法直接获取订单涨跌幅。

订单涨跌幅获取示例

// 存储开仓价格
var float entry_price = na
// 存储单次交易涨跌幅
float trade_return = na

// 开仓时记录开仓均价
if (strategy.position_size != 0 and strategy.position_size[1] == 0)
    entry_price := strategy.position_avg_price

// 平仓时计算本次交易涨跌幅
if (strategy.position_size == 0 and strategy.position_size[1] != 0)
    // 正数为盈利,负数为亏损,可直接用于后续仓位调整逻辑
    trade_return := (close / entry_price) - 1

结合权益曲线过滤的动态仓位实现示例

// 初始化满额运行模拟权益
var float sim_equity = strategy.initial_capital
// 计算模拟权益10周期SMA
sim_equity_sma = ta.sma(sim_equity, 10)
// 交易允许开关
trade_enabled = sim_equity > sim_equity_sma

// 原策略开仓信号示例,替换为你自己的信号逻辑即可
if (long_condition)
    // 不管实际是否开仓,先更新模拟权益(对齐100%仓位的收益)
    sim_equity := sim_equity * (close / close[1]) * (1 - strategy.commission_value)
    // 仅开关开启时执行实际下单
    if (trade_enabled)
        // 动态仓位规则可自定义,示例为权益高于均线满仓,低于均线半仓
        order_size = sim_equity > sim_equity_sma ? sim_equity / close : 0.5 * sim_equity / close
        strategy.entry("long", strategy.long, qty=order_size)

// 平仓信号逻辑
if (close_condition or (not trade_enabled and strategy.position_size > 0))
    // 同步更新模拟权益
    sim_equity := sim_equity * (close / close[1]) * (1 - strategy.commission_value)
    strategy.close("long")

注意事项

  • 模拟权益的更新规则要和你原本100%仓位运行的策略完全对齐,包括杠杆、手续费、滑点、持仓周期的设置,避免出现数据偏差
  • 警报逻辑仅在trade_enabled为true时触发即可,下穿期间直接跳过警报代码段
  • 如果是多品种策略,需要给每个品种单独设置模拟权益变量,核算完单个品种的盈亏后再汇总得到总模拟权益

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:45:04