멀티 타임프레임 이동 평균 거래 전략

저자:차오장, 날짜: 2023-09-21 20:45:38
태그:

전반적인 설명

이 전략은 거래 신호를 생성하기 위해 서로 다른 시간 프레임 사이의 이동 평균 크로스오버를 사용합니다. 더 큰 트렌드를 감지하기 위해 현재 차트에서 더 긴 시간 프레임 MAs를 관찰 할 수 있습니다. 이것은 시간 프레임 트렌드를 따르는 전략과 관련이 있습니다.

전략 논리

이 전략은 별도의 시간 프레임에 계산된 두 개의 이동 평균을 사용합니다.

예를 들어 15분 차트에서는 20MA와 50MA를 사용합니다.

  • 20MA는 현재 15min 바에 계산됩니다.
  • 50MA는 일간 바로 계산됩니다.

15분 20MA가 일일 50MA를 넘으면 길게 됩니다. 15분 20MA가 일일 50MA를 넘으면 짧게 됩니다.

이것은 현재 기간에 더 긴 시간 프레임 트렌드를 관찰하는 효과를 달성합니다. 사용자 정의 MA 길이도 허용됩니다.

교차 지점은 명확한 무역 신호를 표시 할 수 있습니다.

장점

  • 시간 프레임에 걸쳐 분석, 더 큰 트렌드를 발견
  • 더 높은 TF 라인은 더 안정적이며 잘못된 신호를 피합니다.
  • 더 민감한 하부 TF 라인, 빠른 포착 트렌드 변경
  • 맞춤형 MA 기간 조합
  • 차트에 표시된 신호를 명확하게 표시합니다.

위험성

  • 여러 시간 프레임으로 복잡성이 증가
  • 낮은 TF 거짓 신호는 여전히 가능합니다.
  • 전체적으로 MA 시스템에서 뒤쳐져 가장 좋은 항목을 놓칠 수 있습니다.
  • 순수 MA 시스템으로 제한적 필터링
  • 각기 다른 제품에 필요한 기간 조정

위험은 다음과 같이 감소 할 수 있습니다.

  • 강력한 트렌드 방향성을 위해 TF MA를 더 오래 유지합니다.
  • 추가 신호 필터링을 위한 다른 지표 추가
  • 최선 조합을 위한 MA 기간 최적화
  • 촛불 패턴을 추가하는 것과 같은 입문 규칙을 느슨하게

개선 방향

이 전략은 다음과 같이 개선될 수 있습니다.

  1. 최적화를 위해 더 많은 MA 기간 조합을 테스트

  2. 크로스오버가 발생했을 때 2차 확인을 추가합니다

    예를 들어 MACD 모멘텀을 확인합니다.

  3. 조기 출퇴를 피하기 위해 정류를 최적화

    출구를 결정하기 위해 Post123 증거로 간주

  4. 짧은 TF와 긴 TF를 위한 다른 필터

    짧은 TF는 더 엄격하고 긴 TF는 더 느슨합니다.

  5. 다른 세션에 대해 다른 매개 변수 집합을 고려

    시장 조건은 세션에 따라 다릅니다.

요약

이 전략은 트렌드 방향을 결정하고 더 큰 트렌드를 발견하기 위해 여러 시간 프레임의 MAs 사이의 교차를 관찰합니다. 이것은 단기적인 소음을 필터링하고 더 큰 가격 움직임에 초점을 맞추고 있습니다. 그러나 시간 프레임 조정 및 지연 신호와 같은 도전이 있습니다. 강력한 매개 변수에 대한 엄격한 백테스팅 및 최적화를 통해 개선이 가능하며 확인을 위해 필터를 추가하고 시장 피드백에 따라 지속적인 개선을위한 라이브 검증을 수행 할 수 있습니다. 지속적인 학습과 최적화는 적응성의 핵심입니다.


/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 7d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

//Run script on a long interval gives better result for e.g. 1 Day
//Plots The Majority of Moving Averages
//Defaults to Current Chart Time Frame --- But Can Be Changed to Higher Or Lower Time Frames
//2nd MA Capability with Show Crosses Feature
//study(title="CM_Ultimate_MA_MTF", shorttitle="CM_Ultimate_MA_MTF", overlay=true)
strategy("Stratergy CM_Ultimate_MA_MTF", shorttitle = "Stratergy CM_Ultimate_MA_MTF", overlay = true) 
//,default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//inputs
src = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
resCustom = input(title="Use Different Timeframe? Uncheck Box Above",  defval="D")
len = input(20, title="Moving Average Length - LookBack Period")
atype = input(1,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA")
cc = input(true,title="Change Color Based On Direction?")
smoothe = input(2, minval=1, maxval=10, title="Color Smoothing - 1 = No Smoothing")
doma2 = input(false, title="Optional 2nd Moving Average")
len2 = input(50, title="Moving Average Length - Optional 2nd MA")
atype2 = input(1,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA")
cc2 = input(true,title="Change Color Based On Direction 2nd MA?")
warn = input(false, title="***You Can Turn On The Show Dots Parameter Below Without Plotting 2nd MA to See Crosses***")
warn2 = input(false, title="***If Using Cross Feature W/O Plotting 2ndMA - Make Sure 2ndMA Parameters are Set Correctly***")
sd = input(false, title="Show Dots on Cross of Both MA's")


res = useCurrentRes ? timeframe.period : resCustom
//hull ma definition
hullma = wma(2*wma(src, len/2)-wma(src, len), round(sqrt(len)))
//TEMA definition
ema1 = ema(src, len)
ema2 = ema(ema1, len)
ema3 = ema(ema2, len)
tema = 3 * (ema1 - ema2) + ema3

avg = atype == 1 ? sma(src,len) : atype == 2 ? ema(src,len) : atype == 3 ? wma(src,len) : atype == 4 ? hullma : atype == 5 ? vwma(src, len) : atype == 6 ? rma(src,len) : tema
//2nd Ma - hull ma definition
hullma2 = wma(2*wma(src, len2/2)-wma(src, len2), round(sqrt(len2)))
//2nd MA TEMA definition
sema1 = ema(src, len2)
sema2 = ema(sema1, len2)
sema3 = ema(sema2, len2)
stema = 3 * (sema1 - sema2) + sema3

avg2 = atype2 == 1 ? sma(src,len2) : atype2 == 2 ? ema(src,len2) : atype2 == 3 ? wma(src,len2) : atype2 == 4 ? hullma2 : atype2 == 5 ? vwma(src, len2) : atype2 == 6 ? rma(src,len2) : tema

out = avg 
out_two = avg2

out1 = security(syminfo.tickerid, res, out)
out2 = security(syminfo.tickerid, res, out_two)

ma_up = out1 >= out1[smoothe]
ma_down = out1 < out1[smoothe]

col = cc ? ma_up ? lime : ma_down ? red : aqua : aqua
col2 = cc2 ? ma_up ? lime : ma_down ? red : aqua : aqua

circleYPosition = out2
chk=col==red?1:0

if (not na(chk))
    if (chk[1]==1 and chk==0)
        strategy.entry("RsiLE", strategy.long, comment="RsiLE")
    else
        strategy.exit("RsiLE")

    if (chk[1]==0 and chk==1)
        strategy.entry("RsiSE", strategy.short, comment="RsiLE")
    else
        strategy.exit("RsiSE")
        
plot(out1, title="Multi-Timeframe Moving Avg", style=line, linewidth=4, color = col)
plot(doma2 and out2 ? out2 : na, title="2nd Multi-TimeFrame Moving Average", style=circles, linewidth=4, color=col2)
plot(sd and cross(out1, out2) ? circleYPosition : na,style=cross, linewidth=5, color=yellow)



더 많은