리소스 로딩... 로딩...

제로-래그 MACD DEMA 브레이크업 전략

저자:차오장, 날짜: 2023-09-11 14:43:52
태그:

이 전략은 TOFF의 MACD DEMA 지표에 기반한 거래 신호를 구축합니다. MACD DEMA 지표는 DEMA 빠른 라인과 DEMA 느린 라인의 차이를 계산하여 제로 레이그 처리를 통해 일반 MACD의 레이거 이슈를 효과적으로 제거합니다.

거래 규칙은: 제로 레이그 MACD가 0 라인을 넘을 때 긴 거리로 이동하고, MACD가 0 라인을 넘을 때 짧은 거리로 이동합니다. MACD 0 라인 크로스오버는 시장 정서를 결정하는 데 사용됩니다.

이 제로-래그 MACD 전략의 장점은 트렌드 변화를 보다 민감하게 파악할 수 있다는 것입니다. EMA 대신 DEMA를 사용하는 것은 또한 잘못된 브레이크오웃을 필터링합니다. 그러나 MACD 자체는 복잡한 가격 행동에 대한 판단 능력이 제한되어 있으며, 잘못된 신호의 위험이 있습니다. 안정성을 향상시키기 위해 트렌드 필터가 필요합니다.

요약하자면, 제로 레이그 MACD DEMA 브레이크아웃 전략은 강력한 트렌드 움직임에 매우 잘 작동하며 기회를 빠르게 잡습니다. 그러나 범위 제한 기간에는 성능이 떨어지며 신중한 사용이 필요합니다. 지속적인 최적화와 엄격한 위험 통제로만 이 전략이 장기적으로 성공적으로 적용 될 수 있습니다.


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

//@version=4
// strategy(title="Patron04 MACD DEMA Strategy",default_qty_type = strategy.percent_of_equity,default_qty_value = 3500, overlay=true)

testStartYear = input(2000, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

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

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

sma = input(12,title='DEMA Courte')
lma = input(26,title='DEMA Longue')
tsp = input(9,title='Signal')
dolignes = input(true,title="Lignes")

MMEslowa = ema(close,lma)
MMEslowb = ema(MMEslowa,lma)
DEMAslow = ((2 * MMEslowa) - MMEslowb )

MMEfasta = ema(close,sma)
MMEfastb = ema(MMEfasta,sma)
DEMAfast = ((2 * MMEfasta) - MMEfastb)

LigneMACDZeroLag = (DEMAfast - DEMAslow)

MMEsignala = ema(LigneMACDZeroLag, tsp)
MMEsignalb = ema(MMEsignala, tsp)
Lignesignal = ((2 * MMEsignala) - MMEsignalb )

MACDZeroLag = (LigneMACDZeroLag - Lignesignal)

long = LigneMACDZeroLag > 0
short = LigneMACDZeroLag < 0

if testPeriod()

    strategy.entry("Long", strategy.long,when=long)
    strategy.entry("Short", strategy.short,when=short)







더 많은