如何在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
相关产品推荐
相关产品推荐

