이 전략은 트렌드를 식별하고 트렌딩 시장에서 긴 / 짧은 거래를하기 위해 느린 하이켄 아시와 기하급수적인 이동 평균을 결합합니다. 가격은 100 일 EMA 이상의 경우 길게 가고 100 일 EMA 이하의 경우 짧게 이동하여 특정 반전 신호에 따라 포지션을 닫습니다.
이 전략은 다음의 지표를 사용합니다.
느린 하이켄 아시 (Slow Heiken Ashi): 이전 바
기하급수적 이동 평균: 기하급수적 가중치를 적용한 평형 가격 평균. 5일부터 100일까지의 EMA를 포함합니다.
구체적인 거래 논리는 다음과 같습니다.
가격이 100일 EMA를 넘을 때 장거리, 100일 EMA를 넘을 때 단거리
헤이켄 아시
이 전략은 트렌드를 따르는 신호와 역전 신호를 결합하여 트렌드 시장에서 큰 가격 변동을 포착하고 트렌드가 역전되면 과도한 손실을 피합니다.
EMA는 시장의 전반적인 경향 방향을 결정하고, 지역 변동으로부터 방해를 방지합니다.
하이켄 아시 크로스오버는 잠재적인 반전을 조기에 감지합니다.
적응적인 KAMA 필터는 잘못된 신호를 줄여줍니다.
갑자기 큰 EMA 파열은 손실을 증폭시킬 수 있습니다. 더 긴 보유 기간 또는 손실을 중지하는 것을 고려하십시오.
리버스 신호가 늦어질 수 있습니다. 위험을 통제하기 위해 지점 크기를 낮추십시오.
부적절한 EMA 매개 변수는 성능에 부정적인 영향을 미칩니다. 매개 변수는 다른 제품과 시장 환경에 적응해야합니다.
MACD와 볼링거 밴드 같은 추가 지표를 포함하여 동시에 EMA/하이켄 아시 오류를 피합니다.
시장 변동성에 따라 EMA 매개 변수를 동적으로 최적화하고, 이에 따라 정지 / 미끄러짐 허용도를 높입니다.
기계 학습을 활용하여 자동으로 매개 변수를 조정하고 필터 규칙을 조정하고 견고성을 향상시킵니다.
이 전략은 비교적 간단하고 실용적이며, 트렌드와 역전 요소를 모두 결합합니다. 잘 조정된 매개 변수와 위험 통제로 적당한 수익 잠재력을 유지합니다. 더 이상의 개선은 최적화 방향에 기반하여 전략을 더 적응력있게 만들 수 있습니다.
/*backtest start: 2023-12-14 00:00:00 end: 2023-12-19 10:00:00 period: 15m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("NoScoobies Slow Heiken Ashi and Exponential Moving average Strategy 2.2", overlay=true) //SHA p=input(6,title='Period') fastend=input(0.666,step=0.001) slowend=input(0.0645,step=0.0001) kama(close,amaLength)=> diff=abs(close[0]-close[1]) signal=abs(close-close[amaLength]) noise=sum(diff, amaLength) efratio=noise!=0 ? signal/noise : 1 smooth=pow(efratio*(fastend-slowend)+slowend,2) kama=nz(kama[1], close)+smooth*(close-nz(kama[1], close)) kama hakamaper=1 Om=sma(open,p) Hm=sma(high,p) Lm=sma(low,p) Cm=sma(close,p) vClose=(Om+Hm+Lm+Cm)/4 vOpen= kama(vClose[1],hakamaper) vHigh= max(Hm,max(vClose, vOpen)) vLow= min(Lm,min(vClose, vOpen)) asize=vOpen-vClose size=abs(asize) //MMAR exponential = input(true, title="Exponential MA") src = close ma05 = exponential ? ema(src, 05) : sma(src, 05) ma10 = exponential ? ema(src, 10) : sma(src, 10) ma15 = exponential ? ema(src, 15) : sma(src, 15) ma20 = exponential ? ema(src, 20) : sma(src, 20) ma25 = exponential ? ema(src, 25) : sma(src, 25) ma30 = exponential ? ema(src, 30) : sma(src, 30) ma35 = exponential ? ema(src, 35) : sma(src, 35) ma40 = exponential ? ema(src, 40) : sma(src, 40) ma45 = exponential ? ema(src, 45) : sma(src, 45) ma50 = exponential ? ema(src, 50) : sma(src, 50) ma55 = exponential ? ema(src, 55) : sma(src, 55) ma60 = exponential ? ema(src, 60) : sma(src, 60) ma65 = exponential ? ema(src, 65) : sma(src, 65) ma70 = exponential ? ema(src, 70) : sma(src, 70) ma75 = exponential ? ema(src, 75) : sma(src, 75) ma80 = exponential ? ema(src, 80) : sma(src, 80) ma85 = exponential ? ema(src, 85) : sma(src, 85) ma90 = exponential ? ema(src, 90) : sma(src, 90) ma95 = exponential ? ema(src, 95) : sma(src, 95) ma100 = exponential ? ema(src, 100) : sma(src, 100) longcondition=src>ma100 shortcondition=src<ma100 long=longcondition and size<size[1] and (vOpen<vClose or vOpen>vClose) short=shortcondition and size<size[1] and (vOpen>vClose or vOpen<vClose) close_long=longcondition and crossunder(open, vClose) close_short=shortcondition and crossover(open, vClose) _close=close_long[2] or close_short[2] if long strategy.entry("LONG", strategy.long) strategy.close("LONG", when = _close) if short strategy.entry("SHORT", strategy.short) strategy.close("SHORT", when = _close)