느린 마감 이동 평균 거래 전략


생성 날짜: 2023-12-22 13:18:34 마지막으로 수정됨: 2023-12-22 13:18:34
복사: 0 클릭수: 687
avatar of ChaoZhang ChaoZhang
1
집중하다
1623
수행원

느린 마감 이동 평균 거래 전략

개요

이 전략은 느린 하이켄 아시와 지수 이동 평균을 사용하여 트렌드를 식별하고, 트렌드 상황에서 양방향 거래를 수행합니다. 가격이 100 일간 EMA를 초과 할 때 장을하고, 100 일간 EMA를 초과 할 때 공백을하고, 특정 조건에서 공백을합니다.

전략 원칙

이 전략은 다음과 같은 조합을 사용합니다.

  1. 느린 속도 Heiken Ashi: 특수한 유형의 K 선 도표, 이전 K 선의 평균값을 사용하여 그려지며, 시장 소음을 필터링하여 트렌드를 식별할 수 있다. 여기서는 카마 필터를 적응하여 구현한다.

  2. 지수 이동 평균: 가격에 대한 지수 평준화 후의 평균, 여기에는 5일에서 100일 이상의 주기들을 포함하는 EMA。

거래 논리는 다음과 같습니다.

  1. 가격이 100일 EMA를 넘으면 더 많이 하고, 가격이 100일 EMA를 넘으면 더 적게 한다.

  2. 평정 위치 조건: Heiken Ashi의 개시 가격이 그것의 닫기 가격을 가로질렀을 때 ((潜在反转信号), 대응하는 다중 헤드 포지션은 역으로 가로질러 평정되고, 빈 헤드 포지션은 동일하다.

우위 분석

이 전략은 트렌드 판단과 역전 신호를 결합하여, 트렌드 상황에서 더 큰 가격 변동을 포착할 수 있으며, 역전 신호를 통해 손실 확산을 방지할 수 있다.

  1. EMA를 사용하여 전 세계 동향을 판단하여 지역적인 흔들림에 의해 오해받지 않도록하십시오.

  2. 하이켄 아시의 교차 신호는 역전 기회를 조기에 감지할 수 있다.

  3. 자기 적응 카마 필터는 가짜 신호의 가능성을 낮춘다.

위험 분석

  1. 크게 EMA를 다면 손실이 확대될 수 있다. 지분 기간을 적절히 단축하거나 스톱로스를 설정할 수 있다.

  2. 반전 신호가 지연될 수 있으며, 위험을 통제하기 위해 포지션 규모를 줄이는 것을 고려할 수 있다.

  3. EMA 파라미터를 잘못 설정하는 것은 전략의 성과에 영향을 미치며, 다양한 품종과 시장 환경에 따라 조정되어야 한다.

최적화 방향

  1. 여러 지표 판단을 결합하여, EMA와 Heiken Ashi가 모두 잘못된 신호를 보내는 확률을 피할 수 있다. 예를 들어 MACD, 브린 밴드 등을 더한다.

  2. 시장의 변동률에 따라 실시간으로 EMA 파라미터를 최적화할 수 있으며, 높은 변동이 있을 때 스톱로스를 강화하고 낮은 변동이 있을 때 슬라이드 포인트를 완화한다.

  3. 기계 학습 알고리즘을 기반으로 각 매개 변수 설정 및 필터링 규칙을 자동으로 최적화하여 전략을 더욱 안정화합니다.

요약하다

이 전략은 전체적으로 비교적 간단하고 실용적이며, 동향과 반향을 결합하면서, 변수 최적화와 위험 통제가 자리 잡은 상태에서는 여전히 좋은 수익의 여지가 있다. 이후에는 최적화 방향에서 시작하여 전략을 시장 환경 변화에 더 잘 적응시킬 수 있다.

전략 소스 코드
/*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)