Стратегия торговли трендом на основе индикатора MACD

Автор:Чао Чжан, Дата: 2024-02-02 11:32:48
Тэги:

img

Обзор

Ядро этой стратегии основано на индикаторе, разработанном в статье Trading the Trend, опубликованной Эндрю Абрахамом в журнале TASC в сентябре 1998 года.

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

Стратегия сначала рассчитывает 21-дневную взвешенную скользящую среднюю среднюю среднего истинного диапазона (ATR) в качестве базового диапазона волатильности. Затем она рассчитывает самые высокие и самые низкие цены за последние 21 день. Сравнивая текущую цену закрытия с верхними и нижними границами базового диапазона, она оценивает, выходит ли цена из канала, чтобы определить направление тренда.

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

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

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

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

  1. Использование ценового канала для определения тенденций и точного определения долгосрочного направления
  2. Динамический диапазон базовой волатильности адаптируется к изменениям рынка
  3. Фильтрация MACD обеспечивает дополнительную поддержку принятия решений для избежания пропущенных точек покупки
  4. Конфигурируемые параметры обеспечивают гибкость в регулировании стиля стратегии

Риски

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

  1. Риск нарушения ценового канала
  2. Риск ошибок сигнализации MACD
  3. Недостаточная настройка параметров может вызвать нестабильность стратегии

Эти риски могут быть уменьшены путем оптимизации параметров, строгого размещения позиций и своевременного прекращения потерь.

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

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

  1. Испытать различные комбинации параметров, чтобы найти оптимальный

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

  1. Добавить фильтрацию с другими показателями

Испытание, включающее RSI, KDJ и другие показатели для фильтрации сигналов и повышения рентабельности.

  1. Динамическое регулирование параметров

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

Резюме

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


/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
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/
// © melihtuna

//@version=1
strategy("Trend Trader Strategy with MACD", overlay=true)

// === Trend Trader Strategy ===
Length = input(21),
Multiplier = input(3, minval=1)
MacdControl = input(true, title="Control 'MACD Histogram is positive?' when Buy condition")
avgTR      = wma(atr(1), Length)
highestC   = highest(Length)
lowestC    = lowest(Length)
hiLimit = highestC[1]-(avgTR[1] * Multiplier)
loLimit = lowestC[1]+(avgTR[1] * Multiplier)
ret = iff(close > hiLimit and close > loLimit, hiLimit,
        iff(close < loLimit and close < hiLimit, loLimit, nz(ret[1], 0)))
pos =	iff(close > ret, 1,
	    iff(close < ret, -1, nz(pos[1], 0))) 
barcolor(pos == -1 ? red: pos == 1 ? green : blue )
plot(ret, color= blue , title="Trend Trader Strategy with MACD")

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2020, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true

// === MACD ===
[macdLine, signalLine, histLine] = macd(close, 12, 26, 9)
macdCond= MacdControl ? histLine[0] > 0 ? true : false : true

strategy.entry("BUY", strategy.long, when = window() and pos == 1 and macdCond)
strategy.entry("SELL", strategy.short, when = window() and pos == -1)




Больше