Композитная количественная торговая стратегия на основе MACD


Дата создания: 2023-12-13 16:44:46 Последнее изменение: 2023-12-13 16:44:46
Копировать: 0 Количество просмотров: 921
1
Подписаться
1621
Подписчики

Композитная количественная торговая стратегия на основе MACD

Обзор

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

Стратегический принцип

Основным показателем стратегии является MACD. MACD представляет собой индексную скользящую среднюю, являющуюся индикатором трендового отслеживания. Она состоит из быстрого скользящего среднего ((EMA) и медленного скользящего среднего ((EMA).

Также в стратегии введены индикаторы KDJ. Индикаторы KDJ включают в себя значения K, D и J. Из них значения K - это случайные значения, значения D - это скользящие средние значения K, а значения J - значения определенности. Индикаторы KDJ отражают состояние перепродажи на рынке.

Стратегические преимущества

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

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

Стратегические риски и решения

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

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

  • Неправильно выбранное время отслеживания может завысить или занизить эффективность стратегии.

Направление оптимизации

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

  1. Увеличение механизма остановки убытков. Принудительная остановка убытков в случае, когда цена наступает на линию остановки убытков.

  2. Добавление дополнительных фильтров. В сочетании с другими индикаторами, такими как RSI, BRI, можно повысить точность сигналов.

  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