이 전략은 Ehlers MESA 적응 이동 평균을 기반으로 두 평균의 교차를 추적하는 트렌드 트레이딩 전략을 설계했습니다. 빠른 선에서 느린 선을 통과 할 때 더 많이하고 빠른 선 아래에서 느린 선을 통과 할 때 공백을 만들며 전형적인 쌍 이동 평균 교차 전략에 속합니다.
이 전략의 핵심은 두 개의 적응 이동 평균을 계산하는 것입니다: MAMA 라인 및 FAMA 라인. 그 중, MAMA 라인 계산 공식은 다음과 같습니다:
alpha = fl / dphase
alpha = iff(alpha < sl, sl, iff(alpha > fl, fl, alpha))
mama = alpha*src + (1 - alpha)*nz(mama[1])
그 중 fl는 빠른 제한, sl는 느린 제한, dphase는 차차 △ alpha는 차차에 따라 동적으로 조정하여 적응 평준화 매개 변수를 구현한다.
FAMA 선의 계산 공식은 다음과 같다:
fama = .5*alpha*mama + (1 - .5*alpha)*nz(fama[1])
FAMA 선은 MAMA 선의 낮은 관전파 평탄선이다.
전략은 MAMA 라인과 FAMA 라인 사이즈의 관계를 비교하여 현재 상승 추세인지 하향 추세인지 판단하여 거래 신호를 생성한다.
이 전략에는 다음과 같은 장점이 있습니다.
적응형 이동 평균을 사용하여, 매개 변수는 시장의 변화에 따라 자동으로 조정되며, 고정 매개 변수는 수동으로 설정할 필요가 없습니다.
낮은 통도 필터 FAMA선을 추가하여 가짜 돌파구를 필터링할 수 있다.
이중 이동 평균 디자인을 사용하여 시장의 중간에 긴 선의 추세를 추적 할 수 있습니다.
전략적 논리는 간단하고 명확하며, 이해하기 쉽고 수정하기 쉽습니다.
시각화 지표는 직관적이고 거래 신호를 명확하게 볼 수 있습니다.
이 전략에는 몇 가지 위험도 있습니다.
이중선 교차 전략은 여러 거래 신호를 발생시키는 경향이 있으며, 적절한 간격 제어 및 회수하는 것이 좋습니다.
MAMA와 FAMA 선은 계산이 복잡하며, 파라미터를 잘못 설정하면 곡선의 변형을 초래할 수 있다.
적응 파라미터는 과도한 최적화를 초래할 수 있으며, 다른 기술 지표와 함께 검증해야 한다.
이중선 교차는 시간 지연으로 인해 트렌드 전환점을 놓칠 수 있습니다.
허위 침입으로 인한 손실 위험에 주의해야 합니다.
이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.
패러미터 설정을 최적화하여 최적의 빠른 제한, 느린 제한 패러미터 조합을 찾습니다.
단독 손실을 엄격하게 통제하는 Stop Loss 전략을 강화하십시오.
MACD, RSI 등과 같은 다른 지표의 필터 신호와 결합하여 가짜 돌파구를 피하십시오.
트렌드를 판단하는 지표를 늘리고 역동적인 거래를 피하십시오.
입시 속도를 최적화하고, 쌍선 교차의 간격 요구 사항을 조정하고, 너무 자주 거래되는 것을 줄여줍니다.
트렌드 강도에 따라 다른 방식으로 스톱을 수행하는 최적화 스톱 전략
다양한 품종의 변수 설정 차이를 테스트하여 최적의 변수 조합을 찾습니다.
이 전략 overall은 전형적인 트렌드 추적 전략으로, Ehlers MESA 적응 이동 평균을 사용하여 가시적인 지표를 구성하고, 쌍선 교차 방식으로 거래 신호를 생성한다. 전략은 매개 변수 적응, 파동 가짜 돌파, 가시화 등의 장점이 있으며, 시간 지연 후, 여러 거래 등의 위험도 존재한다. 향후에는 매개 변수 최적화, 손실 중지 전략, 신호 필터링 등의 측면에서 개선할 수 있어 전략이 더 안정적이고 신뢰할 수 있다.
/*backtest
start: 2023-09-20 00:00:00
end: 2023-09-27 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
// @author LazyBear
//
// List of my public indicators: http://bit.ly/1LQaPK8
// List of my app-store indicators: http://blog.tradingview.com/?p=970
//
strategy("Ehlers MESA Adaptive Moving Average [LazyBear with ekoronin fix]", shorttitle="EMAMA_LB (ekoronin fix)", overlay=false, calc_on_every_tick=true, precision=0)
src=input(close, title="Source")
fl=input(.4, title="Fast Limit")
sl=input(.04, title="Slow Limit")
pi = 3.1415926
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]))
p1 = iff(im!=0 and re!=0, 2*pi/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)
phase = 180/pi * 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)
longSpike=mama>fama? 1:0
shortSpike=mama<fama? 1:0
plot(longSpike, title = "Mama Long", style=line, linewidth=1, color=yellow)
plot(shortSpike, title = "Mama Short", style=line, linewidth=1, color=red)
//possig = iff(reverse and pos == 1, -1,
// iff(reverse and pos == -1, 1, pos))
if (longSpike)
strategy.entry("Long", strategy.long)
if (shortSpike)
strategy.entry("Short", strategy.short)