Эта стратегия рассчитывает разницу между быстрой EMA и медленной EMA, чтобы сформировать осциллятор MACD, и рассчитывает EMA самой MACD, чтобы сформировать линию сигнала, тем самым создавая двойную систему фильтрации.
Основным показателем этой стратегии является осциллятор MACD, который рассчитывается путем вычитания медленной EMA (обычно 26-дневной EMA) от быстрой EMA (обычно 12-дневной EMA). Быстрая EMA более чувствительна и может улавливать краткосрочные колебания цен. Медленная EMA реагирует на изменения цен медленнее. Вычитание двух формирует осциллятор, который представляет разницу между краткосрочными и среднесрочными ценовыми циклами.
Входные параметры этой стратегии устанавливаются на длину быстрой линии, длину медленной линии, источник цены и период сглаживания линии сигнала соответственно. Они могут быть настроены в соответствии с различными рынками, чтобы найти оптимальные комбинации параметров. Блок цвета фона показывает временные рамки обратного теста. Стратегия открывает позиции только в течение этого временного периода.
Индикатор MACD является классическим и простым в понимании, эффективно отслеживая краткосрочные и среднесрочные возможности реверсии.
Двойная конструкция EMA системы MACD имеет лучшую плавность, чем системы однократного MA.
Относительно более регулируемые параметры позволяют оптимизировать на разных рынках.
Сочетание с индикаторами объема помогает определить сигналы высокого качества.
MACD может производить больше ложных сигналов на колеблющихся рынках.
Он не может определять тенденции и может приводить к потерям при пересечении тенденций.
Ограниченный срок обратного тестирования может игнорировать экстремальные рыночные условия.
Для настройки параметров требуется больше данных о рынке, чтобы избежать перенастройки конкретных периодов рынка.
Риски могут контролироваться путем включения индикаторов тренда и механизмов остановки потерь.
Проверьте различные источники цен, такие как закрытие, медиана, цены на сброс и т. Д.
Поиск оптимальных наборов параметров на основе более исторических данных.
Интегрировать другие показатели для оценки качества сигнала, например, сигналы объема.
Включить анализ тенденций и циклов, чтобы избежать значительных конфликтов тенденций.
Эта стратегия использует двойную систему фильтрации EMA, чтобы уловить краткосрочные и среднесрочные возможности реверсии. Она относится к классической и практической стратегии рыночного планирования. Риски можно контролировать с помощью оптимизации параметров, фильтрации сигналов и средств остановки потерь.
/*backtest start: 2022-12-19 00:00:00 end: 2023-12-25 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="MACD Histogram Backtest", shorttitle="MACD") // 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 grow = (hist[1] < hist) fall = (hist[1] > hist) and hist >= 0 stop = (hist[1] > hist) 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) //Strategy Testing // Component Code Start // Example usage: // if testPeriod() // strategy.entry("LE", strategy.long) testStartYear = input(2017, "Backtest Start Year") testStartMonth = input(01, "Backtest Start Month") testStartDay = input(2, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2019, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(30, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) // A switch to control background coloring of the test period testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true) testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na bgcolor(testPeriodBackgroundColor, transp=97) testPeriod() => true // Component Code Stop //Entry and Close settings if testPeriod() strategy.entry("grow", true, 10, when = grow, limit = close) strategy.close("grow", when = fall) strategy.close("grow", when = stop) //if testPeriod() // strategy.entry("fall", false, 1000, when = fall, limit = close) // strategy.close("fall", when = grow)