Стратегия разворота канала колебаний полос Боллинджера


Дата создания: 2023-10-31 14:30:45 Последнее изменение: 2023-10-31 14:30:45
Копировать: 0 Количество просмотров: 664
1
Подписаться
1617
Подписчики

Стратегия разворота канала колебаний полос Боллинджера

Обзор

Это стратегия реверсивных шокирующих трендов, основанная на канале пояса Бурин. Она использует верхний и нижний каналы пояса Бурин в качестве трендового решения и ищет возможности для обратного входа, когда цена приближается к границе канала.

Стратегический принцип

В качестве основного технического показателя в стратегии используется индикатор Брин-пояса. Брин-пояса состоит из n-дневных скользящих средних и их верхнего и нижнего диапазонов колебаний, где Брин-пояса на трассе = n-дневная скользящая средняя + m × n-дневная стандартная разница, а Брин-пояса на трассе = n-дневная скользящая средняя - m × n-дневная стандартная разница, где n и m являются параметрами.

Когда цена приближается к верхней полосе, означает, что она в настоящее время находится в восходящем тренде, но может достичь вершины. Когда цена приближается к нижней полосе, означает, что она в настоящее время находится в нисходящем тренде, но может достичь нижней полосы. В это время, если эффективно прорваться через буринскую полосу на нижнюю полосу, она может начать реверсию.

Конкретные правила торговли в рамках данной стратегии следующие:

  1. При закрытии больше, чем при повышении по Брин-банду, делается до-вход; при закрытии меньше, чем при повышении по Брин-банду, делается до-вход.

  2. Стоп-потеря сигнализируется с помощью n-дневной скользящей средней. Стоп-потеря начинается, когда цены закрытия множественных сделок превышают n-дневную среднюю; стоп-потеря начинается, когда цены закрытия свободных сделок превышают n-дневную среднюю.

  3. Применяется фиксированный объем сделок с фиксированным количеством транзакций.

  4. Применение метода управления капиталом с фиксированной ставкой, установление фиксированной прибыльно-убыточной ставки и величины корректировки ордеров. При достижении фиксированной прибыльно-убыточной ставки увеличение позиции по фиксированной величине, уменьшение позиции при убытке.

Анализ преимуществ

Эта стратегия имеет следующие преимущества:

  1. Используйте BRI для определения направления тренда, используйте стратегию обратной торговли, вступайте в то время, когда цена может измениться, избегайте большинства потрясений и повышайте коэффициент выигрыша.

  2. Движущаяся средняя является более надежным сигналом стоп-стоп-лоса, который может блокировать большую часть прибыли.

  3. Стратегия фиксированного объема сделок проста и не требует сложных вычислений.

  4. Стратегия управления капиталом с фиксированным коэффициентом позволяет увеличить прибыль и одновременно контролировать риск путем корректировки позиций.

Анализ рисков

Однако эта стратегия также несет в себе определенные риски:

  1. Существует вероятность того, что ошибочные сигналы при расчете по Брин-полосе могут привести к потере в одиночной сделке.

  2. Отставание от скользящей средней может привести к недостаточному сдерживанию.

  3. Установленный объем торгов не позволяет корректировать позиции в зависимости от рыночных условий, существует проблема слишком больших и слишком маленьких позиций.

  4. Фиксированный процентный метод расширяет позиции и может привести к увеличению убытков.

Противодействие: оптимизация параметров пояса Бурин, повышение точности сигналов; в сочетании с другими показателями, чтобы оценить тенденции; надлежащее сокращение размеров фиксированных позиций; снижение величины корректировки позиций по управлению фиксированными коэффициентами.

Направление оптимизации

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Оптимизация параметров пояса бурин, например, коррекция n- и m-значений, повышение точности определения путей пояса бурин.

  2. Добавление других показателей, таких как MACD, KD и т. д., чтобы избежать ошибочного сигнала с Брин.

  3. Фиксированный объем торгов будет изменяться в динамичный объем торгов, гибко корректируя позиции в зависимости от рыночных условий.

  4. Снижение величины корректировки позиций по фиксированному соотношению управления капиталом, оптимизация кривой капитала.

  5. Добавление стратегий прекращения убытков, таких как перемещение убытков, промежуточный прорыв убытков и т. Д., Для дальнейшего контроля риска.

  6. Оптимизация параметров, автоматическая оптимизация комбинации параметров, поиск оптимальных параметров для оптимизации стратегии.

Подвести итог

В целом, эта стратегия является более типичной стратегией обратного пути, использующей обратную линию для определения точки обратного пути, в сочетании с установкой движущихся средних, остановкой и убытком, фиксированным объемом торгов и фиксированной ставкой управления рисками. В отличие от традиционной стратегии, эта стратегия, как обратная стратегия, теоретически может избежать некоторых потрясений и повысить вероятность получения прибыли. Однако, поскольку такие показатели, как ленты и движущиеся средние линии, сами по себе имеют недостатки, в практической эксплуатации требуется дальнейшая оптимизация, чтобы параметризировать стратегию и уменьшить торговый риск.

Исходный код стратегии
/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gsanson66


//This strategy uses the well-known Bollinger Bands Indicator
//@version=5
strategy("BOLLINGER BANDS BACKTESTING", shorttitle="BB BACKTESTING", overlay=true, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=950, commission_type=strategy.commission.percent, commission_value=0.18)


//----------------------------------------FUNCTIONS---------------------------------------//

//@function Displays text passed to `txt` when called.
debugLabel(txt, color) =>
    label.new(bar_index, high, text = txt, color=color, style = label.style_label_lower_right, textcolor = color.black, size = size.small)

//@function which looks if the close date of the current bar falls inside the date range
inBacktestPeriod(start, end) => (time >= start) and (time <= end)


//---------------------------------------USER INPUTS--------------------------------------//

//Technical parameters
bbLength = input.int(defval=20, minval=1, title="BB Length", group="Technical Parameters")
mult = input.float(defval=2, minval=0.1, title="Standard Deviation Multipler", group="Technical Parameters")
smaLength = input.int(defval=20, minval=1, title="SMA Exit Signal Length", group="Technical Parameters")
//Money Management
fixedRatio = input.int(defval=400, minval=1, title="Fixed Ratio Value ($)", group="Money Management")
increasingOrderAmount = input.int(defval=200, minval=1, title="Increasing Order Amount ($)", group="Money Management")
//Backtesting period
startDate = input(title="Start Date", defval=timestamp("1 Jan 2020 00:00:00"), group="Backtesting Period")
endDate = input(title="End Date", defval=timestamp("1 July 2024 00:00:00"), group="Backtesting Period")


//----------------------------------VARIABLES INITIALISATION-----------------------------//
strategy.initial_capital = 50000
//Exit SMA
smaExit = ta.sma(close, smaLength)
//BB Calculation
basis = ta.sma(close, bbLength)
dev = mult * ta.stdev(close, bbLength)
upperBB = basis + dev
lowerBB = basis - dev
//Money management
equity = strategy.equity - strategy.openprofit
var float capital_ref = strategy.initial_capital
var float cashOrder = strategy.initial_capital * 0.95
//Backtesting period
bool inRange = na


//------------------------------CHECKING SOME CONDITIONS ON EACH SCRIPT EXECUTION-------------------------------//

//Checking if the date belong to the range
inRange := true

//Checking performances of the strategy
if equity > capital_ref + fixedRatio
    spread = (equity - capital_ref)/fixedRatio
    nb_level = int(spread)
    increasingOrder = nb_level * increasingOrderAmount
    cashOrder := cashOrder + increasingOrder
    capital_ref := capital_ref + nb_level*fixedRatio
if equity < capital_ref - fixedRatio
    spread = (capital_ref - equity)/fixedRatio
    nb_level = int(spread)
    decreasingOrder = nb_level * increasingOrderAmount
    cashOrder := cashOrder - decreasingOrder
    capital_ref := capital_ref - nb_level*fixedRatio

//Checking if we close all trades in case where we exit the backtesting period
if strategy.position_size!=0 and not inRange
    strategy.close_all()
    debugLabel("END OF BACKTESTING PERIOD : we close the trade", color=color.rgb(116, 116, 116))


//-----------------------------------EXIT SIGNAL------------------------------//

if strategy.position_size > 0 and close < smaExit
    strategy.close("Long")
if strategy.position_size < 0 and close > smaExit
    strategy.close("Short")


//----------------------------------LONG/SHORT CONDITION---------------------------//

//Long Condition
if close > upperBB and inRange
    qty = cashOrder/close
    strategy.entry("Long", strategy.long, qty)
//Short Condition
if close < lowerBB and inRange
    qty = cashOrder/close
    strategy.entry("Short", strategy.short, qty)


//---------------------------------PLOTTING ELEMENT----------------------------------//

plot(smaExit, color=color.orange)
upperBBPlot = plot(upperBB, color=color.blue)
lowerBBPlot = plot(lowerBB, color=color.blue)
fill(upperBBPlot, lowerBBPlot, title = "Background", color=strategy.position_size>0 ? color.rgb(0, 255, 0, 90) : strategy.position_size<0 ? color.rgb(255, 0, 0, 90) : color.rgb(33, 150, 243, 95))