Количественная стратегия торговли, основанная на диапазонах Боллинджера и MACD

Автор:Чао Чжан, Дата: 2024-02-23 14:30
Тэги:

img

Обзор

Эта стратегия является количественной торговой стратегией, основанной на индикаторах Bollinger Bands и MACD. Она сочетает в себе Bollinger Bands breakout trading и MACD trend tracking для улучшения качества торговых сигналов.

Принцип стратегии

Стратегия в основном использует диапазоны Боллинджера и индикаторы MACD для определения торговых сигналов.

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

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

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

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

  1. Объединение диапазонов Боллинджера и индикаторов MACD делает торговые сигналы более надежными.

  2. Отслеживание тренда полос Боллинджера и перекрестки скользящих средних MACD могут привести к более сильным сигналам входа на трендовые рынки.

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

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

Риски стратегии

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

  2. Три последовательных золотых креста MACD на низких уровнях могут быть подвергнуты риску понижения.

  3. Стратегия использует несколько индикаторов, что делает оптимизацию параметров и тестирование стратегии довольно сложными.

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

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

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

  2. Оптимизировать параметры быстрой и медленной линии MACD для повышения чувствительности индикатора.

  3. Добавить другие индикаторы для фильтрации, такие как KDJ, RSI и т. д., чтобы улучшить качество сигнала.

  4. Установите динамические остановки для автоматического выхода из торгов и контроля рисков единой торговли.

Заключение

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


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Nabz-BBMACD-2022-V1.1", shorttitle="BBM-Nabz", overlay=true)


// My 1st Pine Scrpt Indicator
// Work on best on 1Hr Chart
// Open for Help/Donations.


var float lastentry=1
int result = 0
float x = 0
drawshape = false

/////////////EMA
shortest = ta.ema(close, 20)
short = ta.ema(close, 50)
longer = ta.ema(close, 100)
longest = ta.ema(close, 200)

plot(shortest, color = color.red)
plot(short, color = color.orange)
plot(longer, color = color.aqua)
plot(longest, color = color.blue)

///////////// RSI
RSIlength = input(6,title="RSI Period Length") 
RSIoverSold = 50
RSIoverBought = 50
price = close
vrsi = ta.rsi(price, RSIlength)


///////////// Bollinger Bands
BBlength = input.int(200, minval=1,title="Bollinger Period Length")
BBmult = 2 // input(2.0, minval=0.001, maxval=50,title="Bollinger Bands Standard Deviation")
BBbasis = ta.sma(price, BBlength)
BBdev = BBmult * ta.stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
buyEntry = ta.crossover(source, BBlower)
sellEntry = ta.crossunder(source, BBupper)



////////////// MACD
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ta.ema(close, fastLength) - ta.ema(close, slowlength)
aMACD = ta.ema(MACD, MACDLength)
delta = MACD - aMACD


///////////// Colors
switch1=input(true, title="Enable Bar Color?")
switch2=input(true, title="Enable Background Color?")
TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? color.red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? color.green : na


///////////Strategy

bool tcu = not (ta.crossunder(price[0],shortest[0]))


if (((price[1]<BBlower[1]) and (ta.crossover(price,BBlower))))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 1st IF")
    
if (((ta.crossover(delta, 0.0) and (ta.crossover(price,BBlower)))))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 2nd IF")    
    
if (((ta.crossover(delta, 0.0)) and (low[0]>shortest[0])) and (price[1]<low))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 3rd IF")   //else

if (((ta.crossover(delta, 0.01)) and (high[1]<BBupper)) and (tcu))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 4th IF")

       
if ((ta.crossunder(low[0],shortest[0]) and close<shortest))
    strategy.close(id="RSI_BB_L", comment="Close by 1st IF")
    
    
    
if (price<lastentry)
    drawshape := true
    
if (price<strategy.opentrades.entry_price(0)/1.01175734321249)
    strategy.close(id="RSI_BB_L", comment="Close by 2nd IF")



plot(strategy.opentrades.entry_price(0), color=color.yellow)


Больше