Эта стратегия представляет собой двойную прорывную торговую стратегию, основанную на полосах Боллинджера. Она использует верхние и нижние рельсы полос Боллинджера в качестве сигналов покупки и продажи и устанавливает точку остановки потери для контроля рисков.
Стратегия использует верхние и нижние рельсы полос Болинджера. Полосы Болинджера состоят из скользящей средней и двух соответствующих ей каналов стандартного отклонения. Сигнал продажи генерируется, когда цена касается или проходит через верхнюю рельсу полос Болинджера; Сигнал покупки генерируется, когда цена касается или проходит через нижнюю рельсу полос Болинджера. Кроме того, стратегия также устанавливает точку остановки потери. Когда цена ниже определенного процента от скользящей средней, будет идентифицирована остановка потери.
В частности, стратегия рассчитывает скользящую среднюю и в два раза стандартное отклонение указанного цикла (например, 20 дней), чтобы составить график полос Боллинджера. Верхняя рельса - скользящая средняя плюс в два раза стандартное отклонение, а нижняя рельса - скользящая средняя минус в два раза стандартное отклонение. Когда цена закрытия больше или равна верхней рельсе, выпускается сигнал продажи; когда цена закрытия меньше или равна нижней рельсе, выпускается сигнал покупки. Кроме того, если цена ниже определенного процента (например, 1%) от скользящей средней, выпускается сигнал остановки потери.
Эта стратегия использует характеристики полос Боллинджера для выпуска торговых сигналов при возникновении ненормальных колебаний цен, тем самым захватывая возможности для перемены цен.
По сравнению с простыми двуходовыми стратегиями прорыва, эта стратегия добавляет механизм стоп-лосса. Это может эффективно контролировать убытки, вызванные отдельными неправильными сигналами. Настройка точки стоп-лосса также относительно разумна, близка к скользящей средней, избегая чрезмерного стоп-лосса, вызывающего слишком большие убытки.
Самый большой риск этой стратегии заключается в том, что сами полосы Боллинджера не могут гарантировать действительность торговых сигналов. Когда на рынке возникают особые ситуации, цены могут резко и ненормально колебаться, в этом случае торговые сигналы, выпущенные полосами Боллинджера, могут быть неправильными. Это, вероятно, вызовет значительные потери.
Кроме того, установка точек остановки может быть слишком агрессивной или консервативной, что повлияет на конечный доход.
Стратегия может быть оптимизирована в следующих аспектах:
Испытать различные комбинации параметров, например, различные значения скользящей средней цикла, множитель стандартного отклонения, процент стоп-потери и т.д., чтобы найти оптимальные параметры;
Увеличить другие показатели для оценки и формирования нескольких условий фильтрации, чтобы избежать ошибочных сигналов;
Оптимизировать стратегии стоп-лосса, например, использовать движущиеся стоп-лосы, стоп-лосы по партии вместо простого стоп-лоса;
Подтвердите торговые сигналы, объединив полосы Боллинджера разных временных циклов, чтобы избежать ловушки.
В целом эта стратегия представляет собой практическое сочетание отслеживания тренда и стратегий двойного прорыва. Она может использовать возможности для обратных изменений при увеличении колебаний цен и устанавливать стоп-потери для контроля рисков. С помощью оптимизации параметров, повышения фильтрации сигналов, оптимизированных стратегий стоп-потери и т. Д. Стабильность и рентабельность стратегии могут быть еще больше повышены.
/*backtest start: 2024-01-28 00:00:00 end: 2024-02-04 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bollinger Bands Strategy by Royce Mars", overlay=true) length = input.int(20, minval=1) maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"]) src = input(close, title="Source") mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev") stopLossPercent = input.float(1.0, title="Stop Loss Percent", minval=0.1, maxval=10, step=0.1) 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 // Buy and Sell Conditions buyCondition = close <= lower sellCondition = close >= upper // Stop Loss Condition stopLossCondition = close < basis * (1 - stopLossPercent / 100) // Strategy Execution strategy.entry("Buy", strategy.long, when=buyCondition) strategy.close("Buy", when=sellCondition or stopLossCondition) strategy.entry("Sell", strategy.short, when=sellCondition) strategy.close("Sell", when=buyCondition) // Plotting on the Chart plotshape(buyCondition, title="Buy Signal", color=color.green, style=shape.labelup, location=location.belowbar) plotshape(sellCondition or stopLossCondition, title="Sell Signal", color=color.red, style=shape.labeldown, location=location.abovebar) // Plotting the Bollinger Bands plot(basis, "Basis", color=color.orange) p1 = plot(upper, "Upper Band", color=color.blue) p2 = plot(lower, "Lower Band", color=color.blue) fill(p1, p2, title="Background", color=color.rgb(33, 150, 243, 95))