Pine Script多仓位场景下各订单独立设置固定止损止盈问题咨询
问题根因
- 最初所有入场订单都使用固定的
HildayBuy作为订单ID,Pine Script中同ID的入场订单会被视为同一组,调用strategy.exit()时会统一修改整组订单的止损止盈参数,这是旧出场条件被覆盖的核心原因。 - 你后续使用时间生成唯一订单ID的思路完全正确,只需要补充细节即可实现需求。
可行实现方案
你修改后的代码基本可用,补充2个优化点即可避免异常情况:
- 若同一根K线可能触发多次入场信号,可叠加全局计数器避免time重复导致ID冲突,示例代码如下:
// 顶部声明全局计数器 var int buyOrderCounter = 0 if (showBuySig) // 每次触发买入信号计数器+1,拼接生成唯一ID buyOrderCounter += 1 IDnumBuy = "Buy_" + tostring(time) + "_" + tostring(buyOrderCounter) BuyStopPrice = close - (close - atrSell) BuyLimitPrice = close + ((close - atrSell)*1.5) // 入场订单使用唯一ID strategy.entry(IDnumBuy, strategy.long, comment="Buy Entry: "+tostring(close)+" TP:"+tostring(BuyLimitPrice)+" SL:"+tostring(BuyStopPrice)+" ID:"+IDnumBuy) // exit的第二个参数绑定对应入场的唯一ID,仅修改该笔入场的出场规则 strategy.exit("Exit_" + IDnumBuy, IDnumBuy, stop = BuyStopPrice, limit = BuyLimitPrice, comment="SL/TP")
- 确认策略的金字塔加仓参数配置正确,在策略设置中把
Pyramiding值设为你需要的最大加仓次数(比如你之前设置的10),同时关闭Close all when entry signal is reversed这类会统一平掉所有持仓的选项。
验证方法
运行策略后打开「交易列表」,查看每笔入场订单对应的止损、止盈数值,确认不同入场订单的出场参数互不相同即可。
内容的提问来源于stack exchange,提问作者Mark Lee
相关产品推荐
相关产品推荐

