You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pine Script中实现连续3天破布林带下轨后上穿买入策略?

如何在Pine Script中实现连续3天收盘价低于布林带下轨后上穿的买入策略?

问题描述

我需要实现一项基础交易策略:当收盘价连续3天处于1倍标准差的布林带下轨下方,随后向上穿越该下轨时执行买入操作。目前已编写了部分Pine Script代码,但无法正确实现该条件,请问需要使用什么函数来完成?

需求补充:当收盘价连续3天处于下轨下方,次日收盘价上穿下轨时执行买入。

现有代码

//@version=5
strategy(shorttitle="BB", title="BBands Buy/Sell", overlay=true)

// Bollinger Bands - First Band
length = input.int(20, minval=1)
src = input(close, title="Source")
mult = input.float(1.0, minval=0.001, maxval=50, title="StdDev 1")

basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev

offset = input.int(0, "Offset", minval = -500, maxval = 500)

plot(basis, "Basis", color=#ff6f0000, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))

// Bollinger Bands - Second Band
mult2 = input.float(2.0, minval=0.001, maxval=50, title="StdDev 2") // Adjust the value for the second band

dev2 = mult2 * ta.stdev(src, length)
upper2 = basis + dev2
lower2 = basis - dev2

// Plotting the Second Band
p3 = plot(upper2, "Upper 2", color=color.orange, offset = offset)
p4 = plot(lower2, "Lower 2", color=color.orange, offset = offset)
fill(p3, p4, title = "Background 2", color=color.rgb(255, 165, 0, 70))

// Trades
longCondition = ta.crossover(close, lower) // Entry when close crosses above the lower band

if (longCondition)
    strategy.entry("long", strategy.long)

if (strategy.opentrades > 0)
    strategy.exit("exitlong", "long", profit = 2000, loss = 2000) // Exit long position at 2% profit

解决方案

你需要结合连续历史K线条件判断和ta.crossover()函数来实现需求。核心逻辑是先验证前3个交易日的收盘价均处于布林带下轨下方,再判断当前交易日收盘价是否向上穿越下轨。

修改后的关键代码部分:

// 定义连续3天收盘价低于下轨的条件
threeDaysBelow = close[1] < lower[1] and close[2] < lower[2] and close[3] < lower[3]

// 买入条件:当前收盘价上穿下轨,且此前连续3天处于下轨下方
longCondition = ta.crossover(close, lower) and threeDaysBelow

完整修改后的代码:

//@version=5
strategy(shorttitle="BB", title="BBands Buy/Sell", overlay=true)

// Bollinger Bands - First Band
length = input.int(20, minval=1)
src = input(close, title="Source")
mult = input.float(1.0, minval=0.001, maxval=50, title="StdDev 1")

basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev

offset = input.int(0, "Offset", minval = -500, maxval = 500)

plot(basis, "Basis", color=#ff6f0000, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))

// Bollinger Bands - Second Band
mult2 = input.float(2.0, minval=0.001, maxval=50, title="StdDev 2") // Adjust the value for the second band

dev2 = mult2 * ta.stdev(src, length)
upper2 = basis + dev2
lower2 = basis - dev2

// Plotting the Second Band
p3 = plot(upper2, "Upper 2", color=color.orange, offset = offset)
p4 = plot(lower2, "Lower 2", color=color.orange, offset = offset)
fill(p3, p4, title = "Background 2", color=color.rgb(255, 165, 0, 70))

// Trades
// 定义连续3天收盘价低于下轨的条件
threeDaysBelow = close[1] < lower[1] and close[2] < lower[2] and close[3] < lower[3]
// 买入条件:当前收盘价上穿下轨,且此前连续3天处于下轨下方
longCondition = ta.crossover(close, lower) and threeDaysBelow

if (longCondition)
    strategy.entry("long", strategy.long)

if (strategy.opentrades > 0)
    strategy.exit("exitlong", "long", profit = 2000, loss = 2000) // Exit long position at 2% profit

代码说明:

  • close[n]和lower[n]分别用于访问第n个历史K线的收盘价和对应布林带下轨值。
  • threeDaysBelow条件验证了当前K线的前1、前2、前3根K线收盘价均低于对应下轨,满足连续3天处于下轨下方的要求。
  • ta.crossover(close, lower)判断当前K线收盘价是否向上穿越下轨,结合threeDaysBelow即可触发你需要的买入信号。

内容的提问来源于stack exchange,提问作者Richard I

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 22:38:10