MACD Золотой крест Смертный крест Тенденция

Автор:Чао ЧжанДата: 22-12-2023 11:45:54
Тэги:

img

Обзор

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

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

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

В то же время стратегия также вводит индикатор ATR для расчета стоп-лосса и получения уровня прибыли для построения торговой системы.

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

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

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

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

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

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

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

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

Эта стратегия также сопряжена с некоторыми рисками:

  1. Индикатор MACD может легко генерировать ложные сигналы и вызывать ненужные потери.

  2. Показатель ATR моделирует только колебания недавнего периода и не может точно остановить потерю в экстремальных рыночных условиях.

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

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

Советы по оптимизации

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

  1. Попробуйте другие скользящие средние, такие как TMA, Hull MA и т. Д., Чтобы отфильтровать сигналы 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)  

Больше