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

Pine Script双止盈策略percent_of_equity初始仓位判断方法

Pine Script百分比仓位模式两级止盈修复方案

待填空位置的正确处理方式

你之前用固定持仓值判断全量仓位的写法,仅适配固定合约数开仓模式。当使用strategy.percent_of_equity百分比权益开仓时,每次开仓的合约数会随账户净值、标的价格动态变化,不存在固定的全量持仓数值,不能直接写常量判断。
正确的实现方式是新增变量,在每次开多单完成后记录当次的全量持仓规模,作为判断依据:

  1. 首先定义全局变量存储初始多头持仓量:var float initial_long_size = na
  2. 开仓后持仓规模更新时,将全量持仓值存入该变量,空仓时重置变量
  3. 原标记位置填入initial_long_size即可,即判断条件为strategy.position_size == initial_long_size

原有逻辑合理性评估

  • 核心止盈思路合理:1倍ATR固定止盈平50%仓位锁定部分利润,剩余仓位用移动止损跟踪趋势行情,是趋势类策略非常通用的仓位管理设计,本身没有逻辑冲突。
  • 原有实现存在3个需要注意的问题:
    • 固定值判断全量仓位的写法兼容性差,仅能在固定合约数开仓模式下运行,动态仓位模式下会出现止盈单不触发、重复平仓的问题。
    • 移动止损触发逻辑需要匹配你的策略设计:当前代码写的是价格触及第一级止盈位long_tp后才启动移动止损,如果你的策略设计是开仓后就需要启动移动止损,这段判断逻辑需要调整。
    • 当前代码仅实现了多头方向的开仓、止盈、止损逻辑,如果需要双向交易,要补全对应的空头逻辑。

修正后的参考代码

strategy('Trail', overlay=true, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=2)

// 定义变量记录初始多头全量持仓
var float initial_long_size = na
// --------------- 以下参数替换为你原有策略的计算逻辑即可 ---------------
atr = ta.atr(14)
long_tp = strategy.position_avg_price + atr * 1
long_sl_init = strategy.position_avg_price - atr * 1.5
TrailingStop = 0 // 替换为你自己的移动止损计算值
Buy = ta.crossover(ta.sma(close,5), ta.sma(close,20)) // 替换为你原有开多信号
long_sl = long_sl_init
// -------------------------------------------------------------------

// 空仓时重置初始持仓记录
if strategy.position_size == 0
    initial_long_size := na

// 开多逻辑
if strategy.position_size == 0
    strategy.entry('buy', strategy.long, when=Buy)

// 开仓完成后记录全量持仓规模
if strategy.position_size > 0 and na(initial_long_size)
    initial_long_size := strategy.position_size

// 第一级止盈触发后更新为移动止损
if strategy.position_size > 0 and high > long_tp
    long_sl := TrailingStop

// 全量持仓时挂第一级止盈:平50%,触发价1倍ATR,同时带初始止损
if strategy.position_size == initial_long_size
    strategy.exit('buyExit1', from_entry='buy', stop=long_sl_init, qty_percent=50, limit=long_tp)

// 剩余50%仓位挂移动止损平仓
if strategy.position_size > 0 and strategy.position_size < initial_long_size
    strategy.exit('buyExit2', from_entry='buy', qty_percent=100, stop=long_sl)

注意:代码中标记的ATR周期、止损倍数、开仓信号、移动止损计算逻辑需要替换成你自己策略的原有参数,以上代码仅做结构演示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:39:26