다기동 이동평균 전략

저자:차오장, 날짜: 2023-10-27 16:07:16
태그:

img

이 전략은 여러 시간 프레임에 걸쳐 다른 유형의 이동 평균을 동적으로 선택하여 거래 신호를 생성합니다.

전략 논리

이 전략은 SMA, EMA, TEMA, WMA 및 HMA 이동 평균에서 선택할 수 있으며, 기간 길이를 사용자 정의 할 수 있습니다. 다양한 유형의 이동 평균은 선택에 따라 동적으로 그래프화됩니다. 폐쇄 가격이 이동 평균보다 높을 때 길게 이동하고 종료 가격이 아래로 떨어지면 짧게 이동합니다.

구체적으로 전략은 먼저 입력 매개 변수에 기초하여 백테스트 기간을 정의합니다. 다음에는 다섯 가지 유형의 이동 평균을 계산합니다.

  • SMA 단순 이동 평균
  • EMA 기하급수적 이동 평균
  • TEMA 삼배 지수적 이동 평균
  • WMA 가중화 이동 평균
  • HMA Hull 이동 평균

해당 이동 평균은 선택에 따라 그래프로 표시됩니다. 닫기 가격이 이동 평균보다 높을 때 길게 가고, 그 아래에있을 때 짧게됩니다.

다양한 유형의 이동 평균을 결합함으로써 전략은 가격 데이터를 부드럽게하고 더 신뢰할 수있는 거래 신호를 생성하기 위해 시장 소음을 필터 할 수 있습니다. 사용자 정의 가능한 기간 길이는 시간 프레임에 걸쳐 다른 트렌드를 거래 할 수 있습니다.

장점

  • 더 높은 신뢰성을 위해 여러 이동 평균을 결합
  • 사용자 정의 가능한 기간은 다른 거래 시간 프레임에 적합합니다.
  • 평균의 동적 전환은 유연한 최적화를 허용
  • 단순하고 직관적인 트렌드 다음 초보자를 위해 적합

위험성

  • 이동 평균의 지연은 트렌드 전환점을 놓칠 수 있습니다.
  • 고정된 매개 변수와 과잉 조정, 라이브 거래에서 낮은 성과
  • 공격적인 장기/단기 신호가 자본 사용 효율성에 영향을 미칩니다.

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

  • 항목을 더 정확하게 결정하기 위해 다른 지표를 추가합니다
  • 다른 시장 체제에 대한 실제 거래 매개 변수 최적화
  • 계좌 크기와 리스크 관리에 기초한 포지션 크기의 최적화

더 나은 기회

이 전략은 몇 가지 측면에서 개선될 수 있습니다.

  1. 더 안정적인 신호를 위해 다른 필터를 추가

    예를 들어, 부피 확인 없이 잘못된 파장을 피하기 위한 부피 지표.

  2. 입력 및 출력 논리를 최적화

    가격 채널을 설정하고 불필요한 손실을 줄이기 위해 손실을 멈추십시오.

  3. 동적 이동 평균 기간

    강한 트렌드에서 더 긴 기간과 통합 중에 더 짧은 기간을 사용하십시오.

  4. 돈 관리 개선

    마감과 수익을 취하는 것을 기준으로 포지션 크기를 조정합니다.

결론

이 전략은 비교적 안정적인 트렌드 추후 효과를 창출하기 위해 다양한 이동 평균을 시간 프레임에 걸쳐 결합합니다. 입출구, 매개 변수 및 돈 관리에 대한 최적화에 대한 충분한 공간이 있으므로 더 나은 실제 성능을 위해 개선 할 수 있습니다.


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

//@version=3
strategy("MA_strategy ", shorttitle="MA_strategy", overlay=true, initial_capital=100000)

qty = input(100000000, "Buy quantity")

testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testStartMin = input(0, "Backtest Start Minute")

testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,testStartMin)

testStopYear = input(2099, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false


ma1 = input( "SMA",title="Select MA", options=["SMA", "EMA","TEMA", "WMA","HMA"])


len1 = input(7, minval=1, title="Period")

s=sma(close,len1)

e=ema(close,len1)


xEMA1 = ema(close, len1)
xEMA2 = ema(xEMA1, len1)
xEMA3 = ema(xEMA2, len1)
t = 3 * xEMA1 - 3 * xEMA2 + xEMA3


f_hma(_src, _length)=>
    _return = wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))

h = f_hma(close, len1)

w = wma(close, len1)

ma = ma1 == "SMA"?s:ma1=="EMA"?e:ma1=="WMA"?w:ma1=="HMA"?h:ma1=="TEMA"?t:na

buy= close>ma
sell= close<ma

alertcondition(buy, title='buy', message='buy')
alertcondition(sell, title='sell', message='sell')

ordersize=floor(strategy.equity/close)

if testPeriod()
    strategy.entry("long",strategy.long,ordersize,when=buy)
    strategy.close("long", when = sell )


    
  









더 많은