Комбинированная стратегия торговли Bollinger Band, Moving Average и MACD

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

img

Обзор стратегии

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

Название и обоснование стратегии

Стратегия называется Triangle Anchoring Trend Tracking Strategy. Название подчеркивает ее использование трех технических индикаторов для определения направления тренда и точек входа.

Основная логика торговли:

  1. Сравните Bollinger Mid Band, EMA и нулевую линию MACD, чтобы определить, находится ли рынок в фазе восходящего или нисходящего тренда.

  2. После выявления тренда стратегия проверяет, пересекает ли EMA BB Mid Band и пересекает ли гистограмма MACD линию сигнала для определения входов.

  3. Установка целевой прибыли и стоп-лосса.

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

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

Во-первых, BB Mid Band ясно отражает текущее основное направление тренда.

Во-вторых, сам BB обладает сильными характеристиками оболочки. Площадь вокруг средней полосы также указывает на определенные уровни поддержки/сопротивления. Следовательно, перекрестки EMA имеют значение сигнала.

Кроме того, MACD измеряет рост и спад бычьего/медвежьего импульса.

Наконец, заранее установленная цель прибыли и стоп-лосс контролируют риск/прибыль отдельных сделок, обеспечивая общую стабильность.

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

Несмотря на использование множества аналитических инструментов, основными рисками являются:

  1. Неправильные параметры BB не отражают основную тенденцию.

  2. Система EMA сигнализирует длинный, но MACD не становится явно положительным, медвежие силы могут расшириться.

  3. Целевой диапазон прибыли/остановки потерь слишком широк, убытки от одной сделки расширяются.

Основными решениями являются:

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

  2. Ввести больше технических индикаторов для оценки динамики быка/медведя.

  3. Оценить исторические сделки и оптимизировать целевую прибыль/стоп-лосс.

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

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

  1. Внедрить больше индикаторов, таких как KDJ, ATR и т. д., чтобы помочь судить о тренде и улучшить точность.

  2. Используйте более сложные остановки, такие как остановка отслеживания, остановка отрыва и т. Д.

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

  4. Тест и настройка стратегии на основе результатов обратных тестов в разные периоды времени и рынки.

  5. Включить машинное обучение для автоматической оптимизации параметров и обновления динамической стратегии.

Заключение

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


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined Strategy", overlay=true, shorttitle="Comb Strat", default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Precio de beneficio y Stop Loss
takeProfitTicks = 87636
stopLossTicks = 53350

// Bollinger Bands + EMA
length_bb = input(150, title="BB Length")
src_bb = input(close, title="BB Source")
mult = input(2.0, title="BB StdDev")
basis = ta.sma(src_bb, length_bb)
dev = mult * ta.stdev(src_bb, length_bb)
upper = basis + dev
lower = basis - dev

len_ema = input(34, title="EMA Length")
src_ema = input(close, title="EMA Source")
out_ema = ta.ema(src_ema, len_ema)

typeMA = input("SMA", title="Method")
smoothingLength = input(5, title="Length")

var float smoothingLine = na
if (typeMA == "SMA")
    smoothingLine := ta.sma(out_ema, smoothingLength)
else if (typeMA == "EMA")
    smoothingLine := ta.ema(out_ema, smoothingLength)

// MACD
fast_length = input(title="Fast Length", defval=9)
slow_length = input(title="Slow Length", defval=17)
src_macd = input(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing", minval=1, maxval=50, defval=9)
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])

fast_ma = sma_source == "SMA" ? ta.sma(src_macd, fast_length) : ta.ema(src_macd, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src_macd, slow_length) : ta.ema(src_macd, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal

// Condiciones de compra y venta
longCondition = (out_ema > basis) and (macd > signal) and (signal > 0)
shortCondition = (out_ema < basis) and (macd < signal) and (signal < 0)

// Variables de estado
var bool longExecuted = na
var bool shortExecuted = na

// Estrategia
if (longCondition and not longExecuted)
    strategy.entry("Long", strategy.long)
    longExecuted := true
    shortExecuted := na
if (shortCondition and not shortExecuted)
    strategy.entry("Short", strategy.short)
    shortExecuted := true
    longExecuted := na

// Take Profit y Stop Loss para Compras y Ventas Cortas
strategy.exit("Take Profit/Close Long", from_entry="Long", profit=takeProfitTicks, loss=stopLossTicks)
strategy.exit("Take Profit/Close Short", from_entry="Short", profit=takeProfitTicks, loss=stopLossTicks)

// Cierre de posiciones cuando la dirección cambia
if ((out_ema < basis) and (macd < signal))
    strategy.close("Long")
    longExecuted := na
if ((out_ema > basis) and (macd > signal))
    strategy.close("Short")
    shortExecuted := na

// Plots
plot(basis, "BB Basis", color=#FF6D00)
plot(upper, "BB Upper", color=color.new(#2962FF, 0.5))
plot(lower, "BB Lower", color=color.new(#2962FF, 0.5))

plot(smoothingLine, title="Smoothing Line", color=#f37f20, linewidth=2)

hline(0, "Zero Line", color=color.new(#787B86, 50))
plot(hist, title="Histogram", style=plot.style_columns, color=(hist >= 0 ? (hist[1] < hist ? color.green : color.red) : (hist[1] < hist ? color.red : color.green)))
plot(macd, title="MACD", color=color.blue)
plot(signal, title="Signal", color=color.orange)


Больше