
Стратегия представляет собой систему обратной торговли, основанную на отклонении от динамики MACD-полюсов. Она улавливает рыночные обратные сигналы, анализируя взаимосвязь между изменениями K-линейной формы и изменениями динамики MACD-полюсов.
Торговая логика стратегии делится на два направления: дискортирование и плюссирование: Условия погашения: при появлении более крупной солнечной линии ((цены закрытия выше цены открытия), и ее сущность больше, чем предыдущая линия K, в то время как MACD-постная диаграмма в течение 3 последовательных циклов демонстрирует тенденцию к снижению, показывающую, что верхние колебания ослабевают, система посылает сигнал погашения. При условии, что существует большая черная линия (закрытие цены ниже, чем открытие цены), и ее сущность больше, чем предыдущая K-линия, а MACD столбиковой график в течение 3 последовательных циклов показывает восходящую тенденцию, показывает, что падение может ослабевать, система выпускает многосигналы. Управление позицией использует механизм устранения позиции по сигналу оппонента, то есть при появлении торгового сигнала в противоположном направлении, устраняется текущая позиция. Стратегия не устанавливает стоп-лосс и стоп-стоп, полностью полагается на сигнал для управления позицией.
Стратегия, использующая комбинацию K-линейной формы и MACD-полюса для захвата рыночных поворотных возможностей, отличается простотой управления и четкостью сигналов. Несмотря на наличие определенных рисков, благодаря разумным оптимизационным и управляющим рисками мерам можно значительно повысить стабильность и прибыльность стратегии. Стратегия особенно подходит для рыночной среды с явной тенденцией и может быть важной частью торговой системы.
/*backtest
start: 2024-11-10 00:00:00
end: 2025-02-19 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("MACD Momentum Reversal Strategy", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// === MACD Calculation ===
fastLength = input.int(12, "MACD Fast Length")
slowLength = input.int(26, "MACD Slow Length")
signalLength = input.int(9, "MACD Signal Length")
[macdLine, signalLine, histLine] = ta.macd(close, fastLength, slowLength, signalLength)
// === Candle Properties ===
bodySize = math.abs(close - open)
prevBodySize = math.abs(close[1] - open[1])
candleBigger = bodySize > prevBodySize
bullishCandle = close > open
bearishCandle = close < open
// === MACD Momentum Conditions ===
// For bullish candles: if the MACD histogram (normally positive) is decreasing over the last 3 bars,
// then the bullish momentum is fading – a potential short signal.
macdLossBullish = (histLine[2] > histLine[1]) and (histLine[1] > histLine[0])
// For bearish candles: if the MACD histogram (normally negative) is increasing (moving closer to zero)
// over the last 3 bars, then the bearish momentum is fading – a potential long signal.
macdLossBearish = (histLine[2] < histLine[1]) and (histLine[1] < histLine[0])
// === Entry Conditions ===
// Short entry: Occurs when the current candle is bullish and larger than the previous candle,
// while the MACD histogram shows fading bullish momentum.
enterShort = bullishCandle and candleBigger and macdLossBullish
// Long entry: Occurs when the current candle is bearish and larger than the previous candle,
// while the MACD histogram shows fading bearish momentum.
enterLong = bearishCandle and candleBigger and macdLossBearish
// === Plot the MACD Histogram for Reference ===
plot(histLine, title="MACD Histogram", color=color.blue, style=plot.style_histogram)
// === Strategy Execution ===
// Enter positions based on conditions. There is no stop loss or take profit defined;
// positions remain open until an opposite signal occurs.
if (enterShort)
strategy.entry("Short", strategy.short)
if (enterLong)
strategy.entry("Long", strategy.long)
// Exit conditions: close an existing position when the opposite signal appears.
if (strategy.position_size > 0 and enterShort)
strategy.close("Long")
if (strategy.position_size < 0 and enterLong)
strategy.close("Short")