Дифференциальная скользящая средняя для осциллятора

Автор:Чао Чжан, Дата: 2023-12-26 14:40:12
Тэги:

img

Обзор

Эта стратегия рассчитывает разницу между быстрой EMA и медленной EMA, чтобы сформировать осциллятор MACD, и рассчитывает EMA самой MACD, чтобы сформировать линию сигнала, тем самым создавая двойную систему фильтрации.

Принцип стратегии

Основным показателем этой стратегии является осциллятор MACD, который рассчитывается путем вычитания медленной EMA (обычно 26-дневной EMA) от быстрой EMA (обычно 12-дневной EMA). Быстрая EMA более чувствительна и может улавливать краткосрочные колебания цен. Медленная EMA реагирует на изменения цен медленнее. Вычитание двух формирует осциллятор, который представляет разницу между краткосрочными и среднесрочными ценовыми циклами.

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

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

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

  2. Двойная конструкция EMA системы MACD имеет лучшую плавность, чем системы однократного MA.

  3. Относительно более регулируемые параметры позволяют оптимизировать на разных рынках.

  4. Сочетание с индикаторами объема помогает определить сигналы высокого качества.

Анализ рисков

  1. MACD может производить больше ложных сигналов на колеблющихся рынках.

  2. Он не может определять тенденции и может приводить к потерям при пересечении тенденций.

  3. Ограниченный срок обратного тестирования может игнорировать экстремальные рыночные условия.

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

Риски могут контролироваться путем включения индикаторов тренда и механизмов остановки потерь.

Руководство по оптимизации

  1. Проверьте различные источники цен, такие как закрытие, медиана, цены на сброс и т. Д.

  2. Поиск оптимальных наборов параметров на основе более исторических данных.

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

  4. Включить анализ тенденций и циклов, чтобы избежать значительных конфликтов тенденций.

Заключение

Эта стратегия использует двойную систему фильтрации 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)    



Больше