TradingView Pine Script多信号重复进场及固定时间全平仓技术需求问询
TradingView Pine Script多信号重复进场及固定时间全平仓技术需求问询
嗨,我来帮你搞定这两个Pine Script策略问题,咱们一步步拆解:
一、突破单次进场限制,实现信号触发即开仓
你遇到的核心问题是Pine Script的默认规则限制了重复开仓:一是策略默认的pyramiding(金字塔加仓)参数为0,不允许同一方向多持仓;二是固定的订单ID会让系统认为是同一笔交易,不会重复执行。要解决这个问题,需要做两处调整:
开启金字塔加仓权限
在策略初始化的strategy()函数里,加上pyramiding=100(数字可以根据你需要的最大持仓数调整,设大些就不会限制重复开仓),比如:strategy("你的策略名称", overlay=true, pyramiding=100)给每笔进场订单设置唯一ID
原来的strategy.entry("BuyA", ...)用了固定ID,系统会判定为同一笔交易而限制重复开仓。改成结合K线索引的动态ID,让每笔订单的标识都不一样:strategy.entry("BuyA " + str.tostring(bar_index), strategy.long, when = BuyA)这样只要
BuyA条件满足,不管当前有没有持仓,都会触发新的进场指令。
二、实现收盘前2分钟(15:29)全平仓
要在指定时间平掉所有持仓,只需要做时间判断+全平仓指令即可:
编写时间判断条件
注意时区要和你的图表时区保持一致(默认是交易所时区),代码如下:// 定义15:29的平仓触发条件 closeAllCondition = hour == 15 and minute == 29触发全平仓操作
在策略中加入全平仓指令,满足条件时执行:strategy.close_all(when=closeAllCondition, comment="收盘前全平仓")
整合修改后的完整代码示例
把你的原有逻辑和上面的调整结合起来,最终代码大概是这样:
//@version=5 strategy("重复进场+固定时间全平仓策略", overlay=true, pyramiding=100) // 假设你已定义outC3、outC1、outC2、BreakOUT_1、BreakOUT_2、GreenLast4这些变量 BuyA = (high > outC3) and (((outC1 > outC2) and BreakOUT_1) or ((outC1 > outC2) and BreakOUT_2)) and not GreenLast4 ExitBuyA = BuyA[17] // 动态ID实现重复进场 strategy.entry("BuyA " + str.tostring(bar_index), strategy.long, when = BuyA) // 对应平仓时要匹配进场的唯一ID,这里用bar_index-17对应17根K线之前的进场单 strategy.close("BuyA " + str.tostring(bar_index - 17), when= ExitBuyA) // 15:29全平仓 closeAllCondition = hour == 15 and minute == 29 strategy.close_all(when=closeAllCondition, comment="15:29全平仓")
小提示:如果不需要单独平某一笔进场单,也可以用strategy.exit()来绑定进场和平仓条件,这样逻辑会更清晰哦。
备注:内容来源于stack exchange,提问作者user26895708




