玻尔福重复索纳策略

Author: ChaoZhang, Date: 2024-02-20 17:05:47
Tags:

玻尔福重复索纳策略

概述

玻尔福重复索纳策略是一种基于玻尔福带的量化交易策略。该策略利用玻尔福带上下轨之间的价格区间,判断市场波动范围,识别潜在的入场和退场时机。

策略原理

该策略主要依据以下几个指标进行判断:

  1. 玻尔福中线:简单移动平均线SMA,代表市场总体趋势。

  2. 玻尔福上轨:中线+ N倍标准差。上轨代表市场波动的上限。

  3. 玻尔福下轨:中线- N倍标准差。下轨代表市场波动的下限。

当收盘价高于下轨,且开盘价低于下轨时,判断为潜在的底部,可以考虑入场。当收盘价高于上轨,且开盘价低于上轨时,判断为潜在的突破上轨的信号,也可入场。

当收盘价低于上轨,且开盘价高于上轨时,判断为已经进入玻尔带上部,应考虑退场。当收盘价高于开盘价,且上下轨距离超过2倍中线时,判断为波动加大的信号,也应退场。

优势分析

  1. 利用双轨组合判断,提高信号准确性。收盘价与开盘价的组合判断,可以滤除部分假信号。

  2. 基于标准差计算波动范围,自动适应市场变化。不需要手动设置固定价格区间。

  3. 结合中线趋势判断,避免在没有趋势的市场中反复震荡。

  4. 采用中轨突破来判断趋势反转时点。可以及时抓住潜在机会。

风险分析

  1. 中短线操作策略,不适合长线持有。需要密切关注市场情况,及时止损。

  2. 玻尔福带仅在一定时间框架下有效。如果采用不当的参数设置,容易产生假信号。

  3. 在盘整市场中,中线震荡较大,上下轨交替触发可能较频繁。这时应降低仓位规模,或暂时停止操作。

优化方向

  1. 调整参数,适应更长的时间周期。可以通过增大周期长度,使用指数移动平均等方法优化中轨的算法。

  2. 增加波动判断指标,如ATR,进一步避免假突破。可以设置ATRprebuilt值作为过滤条件,只有在波动大于一定幅度时才产生交易信号。

  3. 结合其它指标,实现Barry过滤效果。例如增加成交量的判断规则,只在成交量放大时进行操作。

总结

玻尔福重复索纳策略通过定义价格通道,自动识别市场中的范围极值点作为潜在交易机会。它非常适合捕捉中短期价格反转,可作为趋势跟踪策略的补充。通过合理优化,能有效控制风险,提高盈利概率。


/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("BB Strategy", shorttitle="BB", overlay=true)

length = input.int(55, minval=1)
maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = input.float(1., minval=0.001, maxval=50, title="StdDev")

ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

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

// Entry conditions
enterCondition = (close > lower and open < lower and close > open) or (close > upper and open < upper and close > open)

// Exit conditions
exitCondition = (close < upper and open > upper) or (close > open and (upper - lower) > 2 * basis) or (close < lower)

strategy.entry("Long", strategy.long, when=enterCondition)
strategy.close("Long", when=exitCondition)

// Plotting
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, 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))


更多内容