Стратегия отслеживания тренда MACD Golden Cross и Dead Cross


Дата создания: 2023-12-22 11:45:54 Последнее изменение: 2023-12-22 11:45:54
Копировать: 1 Количество просмотров: 1112
1
Подписаться
1623
Подписчики

Стратегия отслеживания тренда MACD Golden Cross и Dead Cross

Обзор

Стратегия определяет направление тренда с помощью MACD-индикаторов, используя ATR-индикаторы для выполнения стоп-лосс и осуществления торгов с отслеживанием тренда. В названии стратегии используются слова “золотой фортепиановой фортепиановой фортепиановой фортепиановой фортепиановой фортепиановой фортепиановой фортепиановой фортепиановой сигналы”.

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

Когда MACD-линия сверху вверх пересекает Signal-линию и становится положительной, то образуется сигнал покупки, это называется Gold-Fork-сигнал, который показывает, что акции имеют тенденцию к росту. Когда MACD-линия сверху вниз пересекает Signal-линию и становится отрицательной, то образуется сигнал продажи, это называется Dead-Fork-сигнал, который показывает, что акции имеют тенденцию к снижению.

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

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

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

Эта стратегия имеет следующие преимущества:

  1. Использование MACD-индикатора для определения направления тенденции является точным и надежным, и MACD-индикатор выделяется в определении тенденции на протяжении многих лет.

  2. В сочетании с показателями ATR установка стоп-стоп позволяет эффективно контролировать риск-рентабельность отдельных сделок, снижая вероятность потери.

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

  4. Вводя больше параметров, можно получить лучшие результаты торговли путем оптимизации параметров.

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

Однако эта стратегия также несет в себе некоторые риски:

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

  2. Индекс ATR моделирует только колебания за последнее время и не может делать точные остановки на экстремальных ситуациях. Можно ввести динамические остановки, чтобы решить проблему.

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

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

Рекомендации по оптимизации

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

  1. Попробуйте другие движущиеся средние, такие как TMA, hullMA и т. д., фильтруя MACD сигналы.

  2. Попытка использования динамических механизмов остановки убытков, чтобы лучше справляться с колебаниями в экстремальных ситуациях.

  3. Оптимизация традиционных параметров MACD по шагам, чтобы найти лучшие параметры

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

  5. Для определения оптимального сигнала были проведены повторные испытания пяти типов сигналов.

  6. Тренировка нейронной сети для определения эффективности типов сигналов и поиска новых сигналов на основе MACD.

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2023-11-21 00:00:00
end: 2023-12-21 00:00:00
period: 1h
basePeriod: 15m
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/
// © vuagnouxb

//@version=4
strategy("BV's MACD SIGNAL TESTER", overlay=true)

//------------------------------------------------------------------------
//----------            Confirmation Calculation              ------------ INPUT
//------------------------------------------------------------------------

// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

// plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
// plot(macd, title="MACD", color=col_macd, transp=0)
// plot(signal, title="Signal", color=col_signal, transp=0)

// -- Trade entry signals

signalChoice = input(title = "Choose your signal", defval = "Continuation", options = ["Continuation", "Reversal", "Histogram", "MACD Line ZC", "Signal Line ZC"])

continuationSignalLong = signalChoice == "Continuation" ? crossover(macd, signal) and macd > 0 :
   signalChoice == "Reversal" ? crossover(macd, signal) and macd < 0 : 
   signalChoice == "Histogram" ? crossover(hist, 0) : 
   signalChoice == "MACD Line ZC" ? crossover(macd, 0) :
   signalChoice == "Signal Line ZC" ? crossover(signal, 0) :
   false
   
continuationSignalShort = signalChoice == "Continuation" ? crossunder(macd, signal) and macd < 0 :
   signalChoice == "Reversal" ? crossover(signal, macd) and macd > 0 : 
   signalChoice == "Histogram" ? crossunder(hist, 0) : 
   signalChoice == "MACD Line ZC" ? crossunder(macd, 0) :
   signalChoice == "Signal Line ZC" ? crossunder(signal, 0) :
   false

longCondition = continuationSignalLong

shortCondition = continuationSignalShort

//------------------------------------------------------------------------
//----------             ATR MONEY MANAGEMENT                 ------------
//------------------------------------------------------------------------

SLmultiplier = 1.5
TPmultiplier = 1

JPYPair = input(type = input.bool, title = "JPY Pair ?", defval = false)
pipAdjuster = JPYPair ? 1000 : 100000


ATR = atr(14) * pipAdjuster // 1000 for jpy pairs : 100000
SL = ATR * SLmultiplier
TP = ATR * TPmultiplier

//------------------------------------------------------------------------
//----------                  TIME FILTER                     ------------
//------------------------------------------------------------------------

YearOfTesting = input(title = "How many years of testing ?" , type = input.integer, defval = 3)

_time = 2020 - YearOfTesting

timeFilter = (year > _time) 

//------------------------------------------------------------------------
//---------                 ENTRY FUNCTIONS                    ----------- INPUT
//------------------------------------------------------------------------

if (longCondition and timeFilter)  
    strategy.entry("Long", strategy.long)

if (shortCondition and timeFilter) 
    strategy.entry("Short", strategy.short)
    
//------------------------------------------------------------------------
//---------                 EXIT  FUNCTIONS                    -----------
//------------------------------------------------------------------------


strategy.exit("ATR", from_entry = "Long", profit = TP, loss = SL)  

strategy.exit("ATR", from_entry = "Short", profit = TP, loss = SL)