급속하고 느린 이동 평균의 크로스오버 전략

저자:차오장, 날짜: 2024-02-27 16:06:30
태그:

img

전반적인 설명

빠르고 느린 이동 평균 크로스오버 전략은 간단한 이동 평균 기반 전략이다. 두 개의 이동 평균, 한 가지 빠르고 느린 것을 사용합니다. 빠른 이동 평균이 아래에서 느린 이동 평균을 넘을 때, 가격이 상승할 수 있음을 나타냅니다. 빠른 이동 평균이 위에서 느린 이동 평균을 넘을 때, 가격이 떨어질 수 있음을 나타냅니다. 이것은 미래의 가격 행동을 예측하는 지표로 사용될 수 있습니다.

원칙

이 전략은 두 개의 이동 평균을 사용하며, 하나는 빠르며 하나는 느리다. 구체적으로, 기본 길이는 빠른 이동 평균에 대해 25 기간, 느린 평균에 대해 62 기간이다. 이 전략은 SMA, EMA, WMA, RMA 및 VWMA를 포함한 다양한 유형의 이동 평균을 선택할 수 있습니다.

빠른 이동 평균이 아래에서 느린 이동 평균을 넘을 때, 단기 가격이 장기 가격을 돌파하기 시작했다는 신호를 보내는데, 이는 전형적인 황금 십자 신호이며, 가격이 상승 추세로 진입할 수 있음을 나타냅니다. 이 시점에서 전략은 길게 진행됩니다. 빠른 이동 평균이 위에서 느린 이동 평균을 넘을 때, 단기 가격이 장기 가격을 분해하기 시작했다는 신호를 보내며, 이는 죽음의 십자 신호이며, 가격이 하락 추세로 진입 할 수 있음을 나타냅니다. 전략은 이 시점에서 위치를 종료합니다.

가격 추세와 방향을 결정하기 위해 빠르고 느린 이동 평균의 크로스오버를 사용하여 대응하는 긴 또는 긴 포지션을 취하면 이익을 얻을 수 있습니다.

이점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 이 아이디어는 간단하고 이해하기 쉽고 실행하기 쉽습니다.
  2. 유연한 매개 변수 설정, 사용자 정의 가능한 기간 및 이동 평균의 유형
  3. 이동 평균 크로스오버를 사용하여 가격 동향을 정확하게 결정하는 신뢰할 수 있는 지표
  4. 자동화 실현, 수동 판단 없이 심리적 요인의 영향을 줄이는
  5. 여러 제품에 적용, 폭이 지수, 외환, 암호화폐 등에 사용할 수 있습니다
  6. 최적화하기 쉽고, 더 나은 구성을 찾기 위해 매개 변수를 조정할 수 있습니다
  7. 강한 확장성, 다른 지표 또는 전략과 결합 할 수 있습니다.

요약하자면, 빠른 및 느린 이동 평균 크로스오버가 핵심 거래 신호로 전략은 미래의 가격 추세를 판단하는 강력한 능력을 가지고 있습니다. 그 추세를 따라 장점을 바탕으로 적당한 이익을 얻을 수 있으며 라이브 거래 응용 프로그램에 유용합니다.

위험 분석

이 전략은 또한 몇 가지 잠재적인 위험을 가지고 있습니다.

  1. 크로스오버 신호는 잘못된 신호를 줄 수 있으며, 가격은 장기적인 트렌드 반전보다는 단기적인 수정을 가지고 있습니다.
  2. 짧은 길이와 긴 이동 평균 길이의 부적절한 선택은 너무 자주 거래하거나 좋은 기회를 놓칠 수 있습니다.
  3. 크로스오버 신호는 치열한 가격 변동 중에 중요하지 않을 수 있습니다.
  4. 높은 거래 비용은 크로스오버 신호가 너무 빈번한 거래를 유발할 경우 수익을 저하시킬 수 있습니다.
  5. 강한 확장성 또한 과도한 최적화의 위험을 소개

이러한 위험을 통제하고 완화하기 위해 다음과 같은 방법을 채택 할 수 있습니다.

  1. 신호를 필터링하고 잘못된 신호를 피하기 위해 다른 지표를 사용하십시오. 예를 들어 가격-용량 오차 지표
  2. 최적의 조합을 찾고 잘못된 거래를 줄이기 위해 이동 평균 매개 변수를 조정합니다.
  3. 급격한 시장 변동 시 전략을 일시적으로 중단합니다.
  4. 불필요한 손실을 줄이기 위해 적절한 스톱 손실 범위를 느슨하게 설정합니다.
  5. 여러 제품에 대한 견고성 테스트를 수행하여 위험을 평가하고 과도한 최적화를 방지합니다.

최적화 방향

전략의 최적화를 위한 주요 방향은 다음과 같습니다.

  1. 빠른 이동 평균과 느린 이동 평균에 대한 기간 선택: 기본 매개 변수는 최적이 아닐 수 있습니다. 최상의 구성을 찾기 위해 다른 기간을 테스트 할 수 있습니다.

  2. 이동 평균 유형 선택: 여러 가지 유형이 제공되며 특정 제품에 가장 적합한 것을 테스트 할 수 있습니다.

  3. 다른 지표 또는 전략과 결합: 성과를 개선하기 위해 변동성 지표, 부피 가격 지표 또는 추세를 따르는 전략과 결합을 시도할 수 있습니다.

  4. 매개 변수 적응 최적화: 이동 평균의 기간이 안정성을 향상시키기 위해 시장 변동성과 유동성에 따라 자동으로 조정되도록 허용합니다.

  5. 인공지능 모델 지원: 기계 학습 알고리즘을 사용하여 대량의 데이터를 분석하고 최적의 거래 규칙을 자동으로 검색합니다.

이러한 최적화 방법을 통해 전략의 수익성과 안정성을 더 향상시킬 수 있습니다.

요약

요약하자면, 빠르고 느린 이동 평균 크로스오버 전략은 트렌드를 따르는 매우 실용적인 전략이다. 그것은 다른 시간 프레임에 걸쳐 가격 변화 패턴을 캡처하고, 유력한 미래 가격 추세와 방향을 결정하기 위해 느린 이동 평균의 빠른 이동 평균의 크로스오버를 사용합니다. 전략 아이디어는 간단하고 명확하고 이해하기 쉽고 구현하기 쉽습니다. 유연한 사용자 정의 매개 변수를 제공하며 또한 높은 신뢰성, 자동화 정도, 광범위한 적용 가능성 및 강력한 확장성을 가지고 있습니다. 물론 잘못된 신호의 위험이 존재하며 최대 효과를 달성하기 위해 다른 지표와 결합해야합니다. 지속적인 테스트와 최적화로 전략은 실시간 거래에서 괜찮은 안정적인 이익을 얻을 가능성이 있습니다.


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

//@version=5
//Author @divonn1994

initial_balance = 100
strategy(title='Fast v Slow Moving Averages Strategy', shorttitle = 'Fast v Slow', overlay=true, pyramiding=0, default_qty_value=100, default_qty_type=strategy.percent_of_equity, precision=7, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent, initial_capital=initial_balance)

//Input for number of bars for moving average, Switch to choose moving average type, Display Options and Time Frame of trading----------------------------------------------------------------

fastBars = input.int(25, "Fast moving average length", minval=1)
slowBars = input.int(62, "Slow moving average length", minval=1)
strategy = input.string("EMA", "MA type", options = ["EMA", "VWMA", "SMA", "RMA", "WMA"])

redOn = input.string("On", "Red Background Color On/Off", options = ["On", "Off"], group='Display')
greenOn = input.string("On", "Green Background Color On/Off", options = ["On", "Off"], group='Display')
maOn = input.string("On", "Moving Average Plot On/Off", options = ["On", "Off"], group='Display')

startMonth = input.int(title='Start Month 1-12 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=12, group='Beginning of Strategy')
startDate = input.int(title='Start Date 1-31 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=31, group='Beginning of Strategy')
startYear = input.int(title='Start Year 2000-2100 (set any start time to 0 for furthest date)', defval=2011, minval=2000, maxval=2100, group='Beginning of Strategy')

endMonth = input.int(title='End Month 1-12 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=12, group='End of Strategy')
endDate = input.int(title='End Date 1-31 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=31, group='End of Strategy')
endYear = input.int(title='End Year 2000-2100 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=2100, group='End of Strategy')

//Strategy Calculations-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

inDateRange = true

maMomentum = switch strategy
    "EMA" => (ta.ema(close, fastBars) >= ta.ema(close, slowBars)) ? 1 : -1
    "SMA" => (ta.sma(close, fastBars) >= ta.sma(close, slowBars)) ? 1 : -1
    "RMA" => (ta.rma(close, fastBars) >= ta.rma(close, slowBars)) ? 1 : -1
    "WMA" => (ta.wma(close, fastBars) >= ta.wma(close, slowBars)) ? 1 : -1
    "VWMA" => (ta.vwma(close, fastBars) >= ta.vwma(close, slowBars)) ? 1 : -1
    =>
        runtime.error("No matching MA type found.")
        float(na)

fastMA = switch strategy
    "EMA" => ta.ema(close, fastBars)
    "SMA" => ta.sma(close, fastBars)
    "RMA" => ta.rma(close, fastBars)
    "WMA" => ta.wma(close, fastBars)
    "VWMA" => ta.vwma(close, fastBars)
    =>
        runtime.error("No matching MA type found.")
        float(na)
        
slowMA = switch strategy
    "EMA" => ta.ema(close, slowBars)
    "SMA" => ta.sma(close, slowBars)
    "RMA" => ta.rma(close, slowBars)
    "WMA" => ta.wma(close, slowBars)
    "VWMA" => ta.vwma(close, slowBars)
    =>
        runtime.error("No matching MA type found.")
        float(na)

//Enter or Exit Positions--------------------------------------------------------------------------------------------------------------------------------------------------------------------

if ta.crossover(maMomentum, 0)
    if inDateRange
        strategy.entry('long', strategy.long, comment='long')
if ta.crossunder(maMomentum, 0)
    if inDateRange
        strategy.close('long')

//Plot Strategy Behavior---------------------------------------------------------------------------------------------------------------------------------------------------------------------

plot(series = maOn == "On" ? fastMA : na, title = "Fast Moving Average", color = color.new(color.white,0), linewidth=2, offset=1)
plot(series = maOn == "On" ? slowMA : na, title = "Slow Moving Average", color = color.new(color.purple,0), linewidth=3, offset=1)
bgcolor(color = inDateRange and (greenOn == "On") and maMomentum > 0 ? color.new(color.green,75) : inDateRange and (redOn == "On") and maMomentum <= 0 ? color.new(color.red,75) : na, offset=1)

더 많은