Pine Script双止盈策略percent_of_equity初始仓位判断方法
Pine Script百分比仓位模式两级止盈修复方案
待填空位置的正确处理方式
你之前用固定持仓值判断全量仓位的写法,仅适配固定合约数开仓模式。当使用strategy.percent_of_equity百分比权益开仓时,每次开仓的合约数会随账户净值、标的价格动态变化,不存在固定的全量持仓数值,不能直接写常量判断。
正确的实现方式是新增变量,在每次开多单完成后记录当次的全量持仓规模,作为判断依据:
- 首先定义全局变量存储初始多头持仓量:
var float initial_long_size = na - 开仓后持仓规模更新时,将全量持仓值存入该变量,空仓时重置变量
- 原标记位置填入
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
相关产品推荐
相关产品推荐

