Индикатор импульса MACD

Автор:Чао Чжан, Дата: 2023-09-24 13:21:54
Тэги:

Обзор

Эта стратегия сочетает в себе индикатор импульса MACD с индикатором RSI перекупленности/перепроданности. Когда MACD пересекается вверх или вниз, он проверяет, завершает ли RSI также соответствующее переворотное движение вниз/вверх в течение периода обратного обзора, чтобы генерировать более надежные торговые сигналы.

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

  1. Расчет MACD DIFF, DEA и гистограмма. перекресток DIFF выше DEA дает рост перекрестка сигнал, и перекресток ниже дает смерть перекресток сигнал.

  2. Вычислить RSI, чтобы определить перепроданные отскоки и перекупленные продажи.

  3. Когда происходит бычий кроссовер MACD, если RSI отскочил от перепроданности в окне обратного обзора, генерируется длинный сигнал.

  4. Стойка потери устанавливается после входа в режим контроля риска.

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

  1. MACD чувствительно определяет изменения тренда.

  2. Требование сигналов MACD и RSI фильтрует ложные сигналы.

  3. Окно обратного просмотра улучшает надежность сигнала.

  4. Стоп-лосс помогает управлять рисками.

Риски

  1. Отставание MACD и RSI может привести к пропущенным оптимальным входам.

  2. Более низкая вероятность получения сигнала с двумя индикаторами означает меньше сделок.

  3. Не учитывая более широкое направление тренда, рискуешь попасть в ловушку.

  4. Плохая настройка стоп-потери может быть слишком широкой или слишком плотной.

Возможные решения:

  1. Настройка параметров MACD и RSI для уменьшения задержки.

  2. Расширить диапазон порога индикатора, чтобы обеспечить больше сигналов.

  3. Добавьте фильтр тренда, чтобы избежать записей, противоречащих тренду.

  4. Испытать различные параметры остановки потерь для оптимальных уровней.

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

  1. Проверьте SMA и другие скользящие средние.

  2. Добавьте последующие остановки для гибких остановок.

  3. Включите силу тренда, чтобы оценить качество входа.

  4. Используйте машинное обучение для прогнозирования движения индикаторов.

  5. Объедините больше факторов, чтобы оптимизировать время входа.

Резюме

Эта стратегия отфильтровывает надежные сигналы реверсии с использованием скоординированных MACD и RSI. Логика ясна и параметры гибкие для улучшений, таких как выбор индикатора, фильтры тренда, методы остановки потерь и т. Д., Чтобы получить больше сделок при сохранении стабильности, но необходимо избегать рисков чрезмерной оптимизации.


/*backtest
start: 2023-08-24 00:00:00
end: 2023-09-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//based on Range Strat - MACD/RSI 
// strategy("MACD/RSI - edited", 
//      overlay=true,
//      default_qty_type=strategy.percent_of_equity,
//      default_qty_value=10, precision=2, initial_capital=100000,
//      pyramiding=2,
//      commission_value=0.05)

//Backtest date range
StartDate = input(timestamp("13 Jun 2022"), title="Start Date")
EndDate = input(timestamp("13 Jun 2024"), title="Start Date")
inDateRange = true

// RSI Input Settings
rsisrc = input(title="RSI Source", defval=close, group="RSI Settings")
length = input(title="Length", defval=14, group="RSI Settings" )
overSold = input(title="Over Sold Threshold", defval=30, group="RSI Settings" )
overBought = input(title="Over Bought Threshold", defval=70, group="RSI Settings" )
rsi_lookback = input(title="RSI cross lookback period", defval=7, group="RSI Settings")

// Calculating RSI
vrsi = ta.rsi(rsisrc, length)
co = ta.crossover(vrsi, overSold)
cu = ta.crossunder(vrsi, overBought)

// Function looking for a happened condition during lookback period
f_somethingHappened(_cond, _lookback) =>
    bool _crossed = false
    for i = 1 to _lookback
        if _cond[i]
            _crossed := true
    _crossed


coCheck = f_somethingHappened(co, rsi_lookback)
cuCheck = f_somethingHappened(cu, rsi_lookback)

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


// Calculating MACD
fast_ma = sma_source == "SMA" ? ta.sma(macdsrc, fast_length) : ta.ema(macdsrc, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(macdsrc, slow_length) : ta.ema(macdsrc, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
delta = macd - signal

MACDcrossover = ta.crossover(delta, 0)
MACDcrossunder = ta.crossunder(delta, 0)

// Stop Loss Input Settings
longLossPerc = input(title="Long Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01
shortLossPerc = input(title="Short Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01

// Calculating Stop Loss
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)



// Strategy Entry
if (not na(vrsi))
	if (inDateRange and MACDcrossover and coCheck)
		strategy.entry("LONG", strategy.long, comment="LONG")
	if (inDateRange and MACDcrossunder and cuCheck)
		strategy.entry("SHORT", strategy.short, comment="SHORT")

// Submit exit orders based on calculated stop loss price
if (strategy.position_size > 0)
    strategy.exit(id="LONG STOP", stop=longStopPrice)
if (strategy.position_size < 0)
    strategy.exit(id="SHORT STOP", stop=shortStopPrice)

Больше