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

Автор:Чао Чжан, Дата: 2023-12-13 16:44:46
Тэги:

img

Обзор

Это сложная количественная стратегия торговли, основанная на индикаторе MACD. Она сочетает в себе несколько индикаторов, таких как MACD и KDJ, чтобы генерировать торговые сигналы через комбинацию индикаторов.

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

Основной индикатор этой стратегии - MACD. MACD означает Moving Average Convergence Divergence, который является индикатором, следующим за трендом. Он состоит из быстрой скользящей средней (EMA) и медленной скользящей средней (EMA). Параметры по умолчанию составляют 12 для быстрой линии и 26 для медленной линии. Стратегия рассчитывает разницу между двумя линиями EMA, называемой DIF. Затем на DIF рассчитывается 9-дневная EMA, чтобы получить индикатор DEA. Когда DIF пересекает DEA, генерируется сигнал покупки. При пересечении ниже, генерируется сигнал продажи.

Стратегия также включает в себя индикатор KDJ. Индикатор KDJ включает в себя значение K, значение D и значение J. Среди них значение K относится к случайному значению, значение D - скользящей средней стоимости K, а значение J относится к детерминированному значению. Индикатор KDJ отражает уровни перекупленности и перепроданности на рынке. Когда значение J больше 100, оно представляет перекупленные условия. Когда меньше 10, оно представляет перепроданные условия. Стратегия объединяет индикатор KDJ, чтобы избежать генерирования неправильных сигналов в переломных точках рынка.

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

Стратегия сочетает в себе несколько индикаторов, таких как MACD и KDJ, которые могут эффективно фильтровать рыночный шум и определять направления тренда.

Кроме того, стратегия включает в себя выбор временного интервала, что обеспечивает большую гибкость в оценке эффективности стратегии.

Риски и решения

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

  • Неправильные настройки параметров KDJ также повлияют на результаты. Мы можем проверить несколько групп параметров и выбрать более стабильную комбинацию параметров.

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

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

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

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

  2. Включить больше индикаторов фильтров, объединяя такие индикаторы, как RSI и полосы Боллинджера для улучшения точности сигнала.

  3. Оптимизировать параметры индикатора. Изменить комбинацию параметров EMA и KDJ, чтобы найти оптимальные настройки.

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

Заключение

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


/*backtest
start: 2022-12-06 00:00:00
end: 2023-12-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="New Renaissance", shorttitle="New Renaissance", overlay=true,initial_capital=10000)

source = close

fastlength=input(12, minval=1)
slowlength=input(26,minval=1)
signallength=input(9,minval=1)

// === Defining the MACD oscillator
fastMA=ema(source,fastlength)
slowMA=ema(source,slowlength)
MACD=fastMA-slowMA
signal=sma(MACD,signallength)
delta=MACD-signal

// === Buy and Sell Signals ===
buy=crossover(MACD, signal)
sell=crossunder(MACD, signal)

// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2018, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 12,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 31,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2020, title = "Thru Year",       type = input.integer, minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy)    // enter long when "within window of time" AND crossover
strategy.close("L", when = window() and sell)                   // exit long when "within window of time" AND crossunder      

Больше