Эта стратегия использует золотой крест и смертельный крест индикатора MACD для определения направления тренда и использует индикатор ATR для остановки потерь и получения прибыли для реализации тренда после торговли.
Когда линия MACD пересекает линию Сигнала снизу и становится положительной, генерируется сигнал покупки, который называется сигналом золотого креста, указывающим на восходящую тенденцию в цене акций. Когда линия MACD пересекает линию Сигнала сверху и становится отрицательной, генерируется сигнал продажи, который называется сигналом креста смерти, указывающим на нисходящую тенденцию в цене акций.
В то же время стратегия также вводит индикатор ATR для расчета стоп-лосса и получения уровня прибыли для построения торговой системы.
В частности, стратегия сначала рассчитывает быструю скользящую среднюю, медленную скользящую среднюю, разницу MACD, линию сигнала и другие стандартные индикаторы MACD. Затем, на основе выбранного одного из пяти типов сигналов (сигнал продолжения, сигнал обратного движения, сигнал гистограммы, MACD нулевой крест, линия сигнала нулевой крест), определяются золотые кресты и кресты смерти. Наконец, стоп-лосс и прибыль устанавливаются на основе индикатора ATR для завершения логики входа и выхода.
Стратегия имеет следующие преимущества:
Использование индикатора MACD для определения направления тренда является точным и надежным.
Настройки стоп-лосса и прибыли, основанные на индикаторе ATR, могут эффективно контролировать соотношение риск-прибыль отдельных сделок и снижать вероятность потерь.
Предоставление пяти дополнительных типов сигналов позволяет использовать наиболее подходящий сигнал для разных рынков, повышая адаптивность стратегии.
Существует множество настраиваемых параметров ввода, которые могут быть оптимизированы для лучшей торговой производительности.
Эта стратегия также сопряжена с некоторыми рисками:
Индикатор MACD может легко генерировать ложные сигналы и вызывать ненужные потери.
Показатель ATR моделирует только колебания недавнего периода и не может точно остановить потерю в экстремальных рыночных условиях.
Использование выбранных сигналов может быть нестабильным. Для определения оптимальных параметров требуется широкое обратное тестирование.
Параметры сигналов и параметры управления рисками должны быть оптимизированы вместе, иначе трудно найти глобально оптимальные результаты.
Стратегия также может быть оптимизирована в следующих аспектах:
Попробуйте другие скользящие средние, такие как TMA, Hull MA и т. Д., Чтобы отфильтровать сигналы MACD.
Попробуйте динамические механизмы остановки, которые лучше справляются с колебаниями в экстремальных рыночных условиях.
Исчерпывающая оптимизация традиционных параметров MACD для поиска лучших комбинаций.
Использовать методы машинного обучения для поиска оптимальных кратных ATR для лучшего управления рисками.
Для определения оптимального сигнала, каждый из пяти типов сигналов должен быть проверен отдельно.
Обучайте нейронные сети оценивать качество сигнала и обнаруживать новые сигналы на основе 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)