이동평균 크로스오버에 기초한 전략을 따르는 경향

저자:차오장, 날짜: 2024-01-31 15:17:31
태그:

img

전반적인 설명

이 전략은 다양한 유형의 이동 평균 (단순 이동 평균 SMA, 기하급수 이동 평균 EMA, 허ల్ 이동 평균 HMA 및 가중 이동 평균 VWMA) 을 계산하여 거래 신호를 생성하고 시장 트렌드를 결정하고 따라가기 위해 그 사이의 교차점을 감지하여 거래 신호를 생성합니다. 단기 MA가 아래에서 장기 MA를 넘어서면 구매 신호를 생성하고 반대 교차가 발생하면 판매 신호를 만듭니다.

전략 논리

이 전략의 핵심 아이디어는 두 개의 이동 평균을 비교하여 시장 트렌드를 판단하는 것입니다. 구체적으로 입력 매개 변수를 통해 서로 다른 유형과 길이의 두 개의 MA를 구성 할 수 있습니다. 첫 번째 MA는 주요 트렌드를 대표하는 더 긴 기간을 가지고 있으며 두 번째 MA는 현재 단기 트렌드를위한 짧은 기간을 가지고 있습니다.

단기 MA가 아래에서 장기 MA를 넘을 때, 단기 MA가 강화되고 시장이 상승 추세로 진입한다는 신호를 제공합니다. 따라서 이 교차 지점에서 구매 신호가 생성됩니다. 반대로 단기 MA가 장기 MA를 넘을 때 단기 MA가 약화되고 시장이 하향 추세를 나타냅니다. 따라서 판매 신호가 생성됩니다.

이러한 MA 크로스오버를 탐지함으로써 이 전략은 거래에 대한 시장 추세를 따르고 있습니다.

장점

  • 주요 트렌드를 결정하기 위해 고전적이고 실용적인 MA 크로스오버 방법을 사용합니다.
  • 다양한 MA 유형의 조합을 지원하며 유연성을 제공합니다
  • 단순하고 명확한 논리, 이해하기 쉽고 자동화
  • 구성 가능한 매개 변수는 다른 시장 조건에 적응합니다.

위험 분석

  • MAs는 지연 효과를 가지고 있으며, 시그널은 이미 가격 동작이 발생했을 때 전환점에 또는 그 근처에 나타날 수 있습니다.
  • 추세 판단은 정확하지 않아 불필요한 손실이 발생할 수 있습니다.
  • 다른 MA 매개 변수 설정에 따라 결과는 크게 달라집니다.

해결책:

  • 더 나은 감수성을 위해 짧은 MA 기간을 사용하십시오.
  • 오류를 방지하기 위해 다른 필터를 추가합니다.
  • 매개 변수 최적화 방법, 예를 들어 무작위 힘, 기계 학습, 유전자 알고리즘
  • 제어 위치 사이즈 및 손실을 중지 올바르게

개선 방향

  • 정확도를 높이기 위해 필터로 다른 지표를 추가
  • 변화하는 시장 조건에 기초한 MA 매개 변수를 자동 조정
  • 자동 매개 변수 최적화를 위해 기계 학습을 활용
  • 스톱 로스 전략을 정비하라

결론

이 전략은 주요 트렌드 검출을 위해 MA 크로스오버를 사용하는 고전적인 아이디어에 기반합니다. 유연한 MA 조합으로 구현이 간단하고 알고리즘 거래 자동화에 적합합니다. 전반적으로 합리적으로 실용적이지만 성능을 더욱 향상시키기 위해 매개 변수 조정, 추가 필터 등과 같은 개선에 대한 여지가 있습니다.


/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy", overlay=true)
src = input(close, title="Source")

price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(25, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"])

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

price1 = if (type1 == "SMA")
    sma(price, ma1)
else
    if (type1 == "EMA")
        ema(price, ma1)
    else
        if (type1 == "VWMA")
            vwma(price, ma1)
        else
            f_hma(price, ma1)
    
price2 = if (type2 == "SMA")
    sma(price, ma2)
else
    if (type2 == "EMA")
        ema(price, ma2)
    else
        if (type2 == "VWMA")
            vwma(price, ma2)
        else
            f_hma(price, ma2)


//plot(series=price, style=line,  title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line,  title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)


longCondition = crossover(price1, price2)
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = crossunder(price1, price2)
if (shortCondition)
    strategy.entry("Short", strategy.short)


더 많은