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

EMA 및 MAMA 지표에 기반한 거래 전략

저자:차오장, 날짜: 2023-10-31 14:20:56
태그:

img

전반적인 설명

이 전략은 트렌드 방향을 결정하고 트렌드 크로스오버에 따라 거래 신호를 생성하기 위해 EMA (엑스포넌셜 모닝 오브레어) 및 MAMA (MESA 어댑티브 모닝 오브레어) 지표에 기반합니다. EMA는 종종 시장 트렌드 방향을 판단하는 데 사용되며, MAMA는 시장 전환점을 더 정확하게 파악 할 수 있습니다. 둘 다 사용하면 전략의 성능을 향상시킬 수 있습니다.

전략 논리

  1. 빠른 EMA와 느린 EMA를 계산합니다. 각각 시장의 단기 및 장기 트렌드를 반영합니다.

  2. MAMA와 FAMA 직선을 계산해 보세요. 적응적인 이동평균이죠.

  3. 빠른 EMA가 느린 EMA를 넘을 때 구매 신호가 생성됩니다.

  4. 빠른 EMA가 느린 EMA를 넘으면 판매 신호가 생성됩니다.

  5. MAMA가 FAMA를 넘을 때 구매 신호가 생성됩니다.

  6. MAMA가 FAMA 아래로 넘어가면 판매 신호가 생성됩니다.

  7. MAMA와 FAMA의 크로스오버는 EMA 신호를 확인하거나 트렌드 전환을 조기에 감지하는 데 사용될 수 있습니다.

구체적으로, 전략은 먼저 빠른 EMA (fl) 와 느린 EMA (sl) 를 계산하여 각각 단기 및 장기적인 경향을 반영합니다.

다음으로 MAMA와 FAMA를 John Ehlers의 공식에 기초하여 계산합니다:

  1. 가격의 힐베르트 변환을 계산하고 신호의 단계 정보를 추출합니다.

  2. 단계 정보에 기초하여 순간 주파수 p를 계산합니다.

  3. p값에 기초하여 가중 인수 α를 계산합니다.

  4. MAMA와 FAMA를 α를 기준으로 계산합니다.

마지막으로, 거래 신호는 EMA와 MAMA/FAMA 크로스오버를 기반으로 생성됩니다.

  • EMA가 넘어가면 길다
  • EMA 아래로 넘어가면 짧습니다.
  • MAMA가 FAMA를 넘을 때
  • MAMA가 FAMA 아래를 넘을 때 짧습니다.

이점 분석

이 전략은 EMA와 MAMA 지표의 장점을 결합하여 거래 신호의 정확성을 향상시킵니다.

EMA의 장점:

  • 가격 데이터를 효율적으로 원활하게 처리하고 소음을 줄이세요
  • 트렌드를 잘 추적하고 약간의 지연
  • 민감도를 조정할 수 있는 유연한 매개 변수

MAMA의 장점:

  • 조정 가능한 매개 변수, 수동 기간 설정이 필요하지 않습니다.
  • 트렌드를 빨리 파악하는 반응
  • 지원 및 저항을 정확하게 식별합니다.

이 둘을 결합시키는 장점:

  • EMA는 전체 추세를 결정합니다.
  • MAMA는 신호를 확인하고 조기 전환을 감지합니다.
  • 신호의 정확성 및 승률 향상

위험 분석

이 전략의 주요 위험은:

  • EMA와 MAMA는 지연 지표입니다. 진입 신호는 약간의 지연과 미끄러짐이 있을 수 있습니다.
  • 다양한 시장에서 빈번한 크로스오버가
  • 부적절한 매개 변수 설정으로 인해 트렌드가 누락되거나 가짜 신호가 발생합니다.

해결책:

  • 손실을 제어하기 위해 손실을 중지하십시오.
  • 합리적인 기준을 선택하고 너무 민감하지 마십시오.
  • 신호를 확인하기 위해 다른 지표와 결합

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  • 기호 특성에 따라 EMA 기간을 최적화
  • 미세한 조율 MAMA 알파 감수성 더 나은 포착 턴
  • 가짜 신호를 피하기 위해 MACD, RSI와 같은 다른 필터를 추가하십시오.
  • 위험 통제에 스톱 로스를 추가합니다
  • 최적의 매개 변수를 찾기 위한 백테스트
  • 최대 수익을 위해 수익을 자동화

요약

이 전략은 트렌드를 따라가면서 트렌드를 적시에 포착하기 위해 EMA와 MAMA 지표의 강점을 통합합니다. 매개 변수 최적화와 위험 통제로 승률과 수익성을 향상시킬 수 있습니다. 그러나 사용자는 개인 위험 선호도에 따라 신중을 기울여야합니다.


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

//@version=2
strategy("EMAMA strategy", overlay=true)
//This entire strategy is courtesy of LazyBear for programming the original EMAMA system, I simply added a strategy element to everything to round things out. 

src=input(hl2, title="Source")
fl=input(.5, title="Fast Limit")
sl=input(.05, title="Slow Limit")
sp = (4*src + 3*src[1] + 2*src[2] + src[3]) / 10.0
dt = (.0962*sp + .5769*nz(sp[2]) - .5769*nz(sp[4])- .0962*nz(sp[6]))*(.075*nz(p[1]) + .54)
q1 = (.0962*dt + .5769*nz(dt[2]) - .5769*nz(dt[4])- .0962*nz(dt[6]))*(.075*nz(p[1]) + .54)
i1 = nz(dt[3])
jI = (.0962*i1 + .5769*nz(i1[2]) - .5769*nz(i1[4])- .0962*nz(i1[6]))*(.075*nz(p[1]) + .54)
jq = (.0962*q1 + .5769*nz(q1[2]) - .5769*nz(q1[4])- .0962*nz(q1[6]))*(.075*nz(p[1]) + .54)
i2_ = i1 - jq
q2_ = q1 + jI
i2 = .2*i2_ + .8*nz(i2[1])
q2 = .2*q2_ + .8*nz(q2[1])
re_ = i2*nz(i2[1]) + q2*nz(q2[1])
im_ = i2*nz(q2[1]) - q2*nz(i2[1])
re = .2*re_ + .8*nz(re[1])
im = .2*im_ + .8*nz(im[1])
p1 = iff(im!=0 and re!=0, 360/atan(im/re), nz(p[1]))
p2 = iff(p1 > 1.5*nz(p1[1]), 1.5*nz(p1[1]), iff(p1 < 0.67*nz(p1[1]), 0.67*nz(p1[1]), p1))
p3 = iff(p2<6, 6, iff (p2 > 50, 50, p2))
p = .2*p3 + .8*nz(p3[1])
spp = .33*p + .67*nz(spp[1])
phase = atan(q1 / i1)
dphase_ = nz(phase[1]) - phase
dphase = iff(dphase_< 1, 1, dphase_)
alpha_ = fl / dphase
alpha = iff(alpha_ < sl, sl, iff(alpha_ > fl, fl, alpha_))
mama = alpha*src + (1 - alpha)*nz(mama[1])
fama = .5*alpha*mama + (1 - .5*alpha)*nz(fama[1])
pa=input(false, title="Mark crossover points")

plotarrow(pa?(cross(mama, fama)?mama<fama?-1:1:na):na, title="Crossover Markers")

fr=input(false, title="Fill MAMA/FAMA Region")

duml=plot(fr?(mama>fama?mama:fama):na, style=circles, color=gray, linewidth=0, title="DummyL")

mamal=plot(mama, title="MAMA", color=red, linewidth=2)

famal=plot(fama, title="FAMA", color=green, linewidth=2)

fill(duml, mamal, red, transp=70, title="NegativeFill")

fill(duml, famal, green, transp=70, title="PositiveFill")

ebc=input(false, title="Enable Bar colors")

bc=mama>fama?lime:red

barcolor(ebc?bc:na)

longCondition = crossover(mama, fama)
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(mama, fama)
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

더 많은