EMA 및 MAMA 지표 기반 거래 전략


생성 날짜: 2023-10-31 14:20:56 마지막으로 수정됨: 2023-10-31 14:20:56
복사: 0 클릭수: 817
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

EMA 및 MAMA 지표 기반 거래 전략

개요

이 전략은 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) 를 계산하여 각각 단기 및 장기 동향을 반영합니다.

그리고 John Ehlers의 공식에 따라 MAMA와 FAMA를 계산합니다:

  1. 가격의 힐버트 변환을 계산하고 신호의 단계 정보를 추출
  2. 단계 정보에 따라 계산된 신호의 순간주기 p
  3. p값에 따른 α중량
  4. MAMA와 FAMA를 α중량으로 계산

마지막으로, 전략은 EMA와 MAMA/FAMA의 교차 상황에 따라 거래 신호를 생성합니다:

  • EMA 골드포크는 더 많은 일을 합니다.
  • EMA는 4월 1일
  • MAMA가 FAMA를 입으면 더 많은 일을 할 수 있습니다.
  • MAMA 밑에서 FAMA를 입는 동안 공백을 둡니다.

우위 분석

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

EMA의 장점:

  • 가격 데이터를 효율적으로 매끄럽게 하고, 소음을 줄일 수 있습니다.
  • 시장의 추세를 따라갈 수 있고, 다소 뒤떨어지기도 합니다.
  • 단기 및 장기 동향에 대한 민감성을 조정할 수 있는 유연한 매개 변수

MAMA의 장점:

  • 사용자 정의 변수, 인위적으로 지정된 주기가 필요하지 않습니다.
  • 신속한 대응으로 트렌드 전환을 미리 파악할 수 있습니다.
  • 지원 및 저항 영역을 정확하게 식별합니다.

이 둘을 함께 사용하는 장점:

  • 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)