Улучшенная стратегия тенденций конвергенции скользящих средних

Автор:Чао Чжан, Дата: 14 сентября 2023 года 16:46:53
Тэги:

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

Эта стратегия использует улучшенный индикатор MACD. Он рассчитывает быструю EMA, медленную EMA, их разницу и EMA этой разницы, чтобы генерировать сигналы.

Логика такова:

  1. Вычислить быстрый период EMA, например, 12-дневный

  2. Расчет медленного периода EMA, например, 26-дневного

  3. Вычесть быструю из медленной EMA, чтобы получить MACD

  4. Примите EMA MACD как линию сигнала, например 9-дневную.

  5. EMA MACD минус сигнал дает усиленный сигнал

  6. Продолжайте, когда усиленный сигнал пересекает нулевую линию.

  7. Закрыть длинный, когда усиленный сигнал пересекает ниже нулевой линии

Стратегия опирается на способность MACD следовать тренду и оптимизирует его для качественных средне- и долгосрочных сигналов тренда.

Преимущества

  • Улучшенный MACD уменьшает шум и улучшает сигналы

  • Комбинация быстрого/медленного измерения направления и силы EMA

  • Более медленные параметры сосредоточены на среднесрочных и долгосрочных тенденциях

Риски

  • Необходимо тщательно оптимизировать периоды EMA

  • ДЛОГО не в состоянии использовать только короткие возможности

  • Меньше частое появление сигнала

Резюме

Эта стратегия использует усовершенствованный MACD для улучшения идентификации средне- и долгосрочных тенденций. Но оптимизация и контроль рисков являются ключевыми. Сочетание с другими факторами может улучшить производительность.


/*backtest
start: 2022-09-07 00:00:00
end: 2023-09-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//study("MACDAS")
// strategy("macdas",shorttitle="macdas",overlay=true,default_qty_value=10000,initial_capital=10000,currency=currency.USD)

// Date range filter
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(4, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

inTimeRange = true


fastperiod = input(12,title="fastperiod",minval=1,maxval=500)
slowperiod = input(26,title="slowperiod",minval=1,maxval=500)
signalperiod = input(9,title="signalperiod",minval=1,maxval=500)
fastMA = ema(close, fastperiod)
slowMA = ema(close, slowperiod)
macd = fastMA - slowMA
signal = ema(macd, signalperiod)
macdAS = macd - signal
signalAS = ema(macdAS, signalperiod)
plot(macdAS, color=blue, linewidth=2)
plot(signalAS, color=red, linewidth=2)
plot(0, color=black)

strategy.entry("LONG", strategy.long, when =inTimeRange and crossover(macdAS,signalAS))
strategy.close("LONG", when= inTimeRange and crossunder(macdAS,signalAS))

plotshape(crossover(macdAS, signalAS) , style = shape.arrowup, text="Long",color=green,size=size.huge)
plotshape(crossover(signalAS,macdAS) , style = shape.arrowdown, text="End Long",color=red,size=size.huge)



Больше