You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

TradingView Pine Script多信号重复进场及固定时间全平仓技术需求问询

TradingView Pine Script多信号重复进场及固定时间全平仓技术需求问询

嗨,我来帮你搞定这两个Pine Script策略问题,咱们一步步拆解:

一、突破单次进场限制,实现信号触发即开仓

你遇到的核心问题是Pine Script的默认规则限制了重复开仓:一是策略默认的pyramiding(金字塔加仓)参数为0,不允许同一方向多持仓;二是固定的订单ID会让系统认为是同一笔交易,不会重复执行。要解决这个问题,需要做两处调整:

  1. 开启金字塔加仓权限
    在策略初始化的strategy()函数里,加上pyramiding=100(数字可以根据你需要的最大持仓数调整,设大些就不会限制重复开仓),比如:

    strategy("你的策略名称", overlay=true, pyramiding=100)
    
  2. 给每笔进场订单设置唯一ID
    原来的strategy.entry("BuyA", ...)用了固定ID,系统会判定为同一笔交易而限制重复开仓。改成结合K线索引的动态ID,让每笔订单的标识都不一样:

    strategy.entry("BuyA " + str.tostring(bar_index), strategy.long, when = BuyA)
    

    这样只要BuyA条件满足,不管当前有没有持仓,都会触发新的进场指令。

二、实现收盘前2分钟(15:29)全平仓

要在指定时间平掉所有持仓,只需要做时间判断+全平仓指令即可:

  1. 编写时间判断条件
    注意时区要和你的图表时区保持一致(默认是交易所时区),代码如下:

    // 定义15:29的平仓触发条件
    closeAllCondition = hour == 15 and minute == 29
    
  2. 触发全平仓操作
    在策略中加入全平仓指令,满足条件时执行:

    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

火山引擎 最新活动