Торговая стратегия Bollinger Band Momentum Breakout

Автор:Чао Чжан, Дата: 2024-02-05 10:53:46
Тэги:

img

Обзор

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

Логика стратегии

  1. Используйте индикатор полосы Боллинджера, чтобы определить, выходит ли цена выше верхней полосы.
  2. Использование показателей объема торговли для определения того, является ли текущий объем значительно выше среднего за прошедший период.
  3. Введите длинную позицию, когда объем торгов высокий, а цена выходит выше верхней полосы Боллинджера.
  4. Используйте показатели скользящей средней для определения краткосрочной и среднесрочной тенденции, чтобы сократить потери во времени.

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

Преимущества

  1. Сочетание фильтра объема, он покупает только на настоящий сильный импульс, уменьшая риск.

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

  3. Внедрение количественной стратегии, объединяющей несколько показателей для принятия решений.

  4. Ясные кодовые структуры, легкие для чтения и обслуживания.

Риски

  1. Боллингерские полосы могут потерпеть неудачу при экстремальных колебаниях цен, отсутствии сигналов или создании ложных сигналов.

  2. Сигналы покупки могут быть нерентабельными без достаточного объема торговли.

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

  4. Неправильная настройка параметров также влияет на прибыльность стратегии.

Руководство по оптимизации

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

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

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

  4. Тестируйте больше продуктов и временных рамок, корректируйте параметры, такие как полосы Боллинджера, окно объема, чтобы улучшить надежность стратегии.

Заключение

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


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 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/
// © KAIST291

//@version=4
initial_capital=1000
strategy("prototype", overlay=true)
length1=input(1)
length3=input(3)
length7=input(7)
length9=input(9)
length14=input(14)
length20=input(20)
length60=input(60)
length120=input(120)
ma1= sma(close,length1)
ma3= sma(close,length3)
ma7= sma(close,length7)
ma9= sma(close,length9)
ma14=sma(close,length14)
ma20=sma(close,length20)
ma60=sma(close,length60)
ma120=sma(close,length120)
rsi=rsi(close,14)
// BUYING VOLUME AND SELLING VOLUME //
BV = iff( (high==low), 0, volume*(close-low)/(high-low))
SV = iff( (high==low), 0, volume*(high-close)/(high-low))
vol = iff(volume > 0, volume, 1)
dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100)
weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100)
//-----------------------------------------------------------
Davgvol = sma(volume, dailyLength)
Wavgvol = sma(volume, weeklyLength)
//-----------------------------------------------------------
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
mult2= input(1.5, minval=0.001, maxval=50, title="exp")
mult3= input(1.0, minval=0.001, maxval=50, title="exp1")
mult4= input(2.5, minval=0.001, maxval=50, title="exp2")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
dev2= mult2 * stdev(src, length)
Supper= basis + dev2
Slower= basis - dev2
dev3= mult3 * stdev(src, length)
upper1= basis + dev3
lower1= basis - dev3
dev4= mult4 * stdev(src, length)
upper2=basis + dev4
lower2=basis - dev4
offset = input(0, "Offset", type = input.integer, 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))
//----------------------------------------------------
exit=(close-strategy.position_avg_price / strategy.position_avg_price*100)
bull=( BV>SV and BV>Davgvol)
bull2=(BV>SV and BV>Davgvol)
bux =(close>Supper and close>Slower and volume<Davgvol)
bear=(SV>BV and SV>Davgvol)
con=(BV>Wavgvol and rsi>80)
imInATrade = strategy.position_size != 0
highestPriceAfterEntry = valuewhen(imInATrade, high, 0)
// STRATEGY LONG //
if (bull and close>upper1 and close>Supper and high>upper and rsi<80)
    strategy.entry("Long",strategy.long)

if (strategy.position_avg_price*1.02<close)
    strategy.close("Long")
else if (low<ma9 and strategy.position_avg_price<close)
    strategy.close("Long")
else if (ma20>close and strategy.position_avg_price<close )
    strategy.close("Long")
else if (rsi>80 and strategy.position_avg_price<close)
    strategy.close("Long")
else if (strategy.openprofit < strategy.position_avg_price*0.9-close)
    strategy.close("Long")
else if (high<upper and strategy.position_avg_price<close)
    strategy.close("Long")
//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////
strategy.entry("Short",strategy.short,when=low<ma20 and low<lower1 and close<Slower and crossunder(ma60,ma120))

if (close<strategy.position_avg_price*0.98)
    strategy.close("Short")

else if (rsi<20)
    strategy.close("Short")



Больше