Pine Script连续X根绿K线开仓策略代码问题求解
逻辑错误点
greenCandle[G]的作用是取G个周期前的K线状态,仅能判断「往前数第G根K线是绿K」,叠加close[0]>open[0]的判断,只校验了间隔G根的两个位置的K线为绿,中间G-1根K线的涨跌状态完全没有被校验,因此会出现"历史上第11根是绿K、当前是绿K就触发"的错误,不符合连续K线的判定要求。
修正方案
连续G根绿K的核心判定逻辑是:统计最近G根已收盘K线中绿K的总数,当总数等于G时,即证明这G根K线全部为绿K,满足连续条件。
完整修正代码如下:
// 单根已确认绿K判定:K线已走完收盘 且 收盘价大于开盘价 greenCandle = barstate.isconfirmed and (close > open) // 策略参数:连续绿K触发阈值 G = input.int(11, title="连续绿K开仓阈值", minval=1) // 统计最近G根K线内的已确认绿K总数 greenCount = math.sum(greenCandle ? 1 : 0, G) // 开仓触发条件:最近G根全部为绿K longTrigger = greenCount == G // 多头开仓逻辑 // 若需要在第G根绿K收盘确认后立刻开仓,when参数直接用longTrigger // 若需要在连续G根绿K走完后的下一根K线开盘价开仓,when参数改为longTrigger[1] strategy.entry("buy", strategy.long, 1, when = longTrigger)
补充说明
- 因为
greenCandle变量已经绑定barstate.isconfirmed状态判断,信号只会在K线收盘确认后触发,不会出现K线盘中波动时提前误触发的问题 math.sum函数统计范围是包含当前K线在内的最近G根K线,偏移量可根据自身对进出场时机的需求灵活调整
内容的提问来源于stack exchange,提问作者hello11
相关产品推荐
相关产品推荐

