이동평균 전환점 크로스오버 거래 전략

저자:차오장, 날짜: 2024-01-29 11:15:42
태그:

img

전반적인 설명

이동 평균 전환점 크로스오버 거래 전략 (Moving Average Turning Point Crossover Trading Strategy) 은 고전적인 기술 지표 전략이다. 이 전략의 핵심 아이디어는 다른 기간의 이동 평균을 결합하여 구매 및 판매 신호를 생성하고 이동 평균 전환점을 사용하여 거래 출구를 더 최적화하는 것입니다. 이 전략은 다양한 시간 프레임과 제품에 적합하며 안정적인 수익을 얻을 수 있습니다.

전략 원칙

이 전략은 주로 두 개의 이동 평균을 사용합니다. 하나는 빠른 라인으로 짧은 기간을 가지고 있고 다른 하나는 느린 라인으로 긴 기간을 가지고 있습니다. 빠른 라인이 느린 라인을 넘어 올라가면 구매 신호가 생성됩니다. 빠른 라인이 느린 라인을 넘어 내려갈 때 판매 신호가 생성됩니다. 이것은 고전적인 이동 평균 크로스오버 전략의 거래 신호 생성 메커니즘입니다.

또한, 전략은 이동 평균의 전환점을 사용하여 거래를 종료합니다. 빠른 라인이 상승에서 하락으로 전환되면 긴 포지션이 종료됩니다. 빠른 라인이 하락에서 상승으로 전환되면 짧은 포지션이 종료됩니다. 이동 평균 전환점은 단기 시장 반전 지점을 캡처 할 수 있으며 이는 전략이 손실을 줄이거나 이익을 취하는 데 도움이되며 이로 인해 전반적인 수익을 향상시킵니다.

이점 분석

이동 평균 전환점 교차 거래 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 구현하기 쉽습니다. 전략은 두 가지 지표만 사용합니다: 이동 평균 및 ROC 지표. 코드는 복잡하지 않습니다.

  2. 연속 손실에 견딜 수있는 강한 능력. 이동 평균의 고유 한 지연 및 가격 평형 특성은 약간의 소음을 필터링하여 범위 트렌드에 너무 많은 유효하지 않은 거래를 발생시키지 않습니다.

  3. 일방적 손실을 효과적으로 제어 할 수 있습니다. 이동 평균 전환점을 사용하여 당시에 손실을 중지하면 큰 일방적 손실을 줄일 수 있습니다.

  4. 광범위한 적용 가능성 전략 원리는 간단하며 매일 및 시간 바와 같은 다양한 제품 및 거래 시간 프레임에 적용 할 수 있습니다. 큰 매개 변수 최적화 공간.

  5. 안정적인 수익률: 시장 핫스팟을 추구하는 전략과 비교하면 이 전략은 초고 수익률을 추구하는 대신 위험 통제에 더 집중하지만 안정적인 긍정적 수익률을 얻을 수 있습니다.

위험 분석

이동평균 전환점 크로스오버 거래 전략은 또한 다음과 같은 측면에서 몇 가지 위험을 가지고 있습니다.

  1. 이동 평균의 지연. 빠른 시장이 올 때, 이동 평균의 크로스오버 신호는 지연, 아마도 최고의 입구 지점을 놓칠 것입니다.

  2. 긴 빈 홀딩 기간. 이 전략은 적시에 출출하지만 느린 입력 신호가 있습니다. 이것은 과도한 빈 홀딩 기간으로 이어질 수 있습니다. 빈 홀딩 기간 동안 수익 기회가 놓칩니다.

  3. 어려운 매개 변수 최적화. 이동 평균 길이와 ROC 사이클과 같은 매개 변수 선택은 전략의 성능에 큰 영향을 미칠 것입니다. 그러나 매개 변수 최적화는 백테스팅에 많은 역사적 데이터를 필요로하며 최적화에 어려움을 겪습니다.

  4. 높은 변동성 트렌드에서 낮은 성과. 높은 변동성 범위의 트렌드에서 이동 평균은 전략의 성과를 저하시키는 여러 무효 크로스오버를 생성합니다.

최적화 방향

거래 전략은 다음 측면에서 더 이상 최적화 될 수 있습니다:

  1. 트렌드 필터링 지표를 포함. 트렌드 상태를 판단하기 위해 ADX 및 ATR 같은 지표를 추가. 쓸모없는 거래를 피하기 위해 명확한 트렌드가 없을 때 전략을 비활성화하십시오.

  2. 여러 시간 프레임을 결합합니다. 주요 트렌드 방향은 더 높은 시간 프레임에서 주요 트렌드에 대한 거래를 피하기 위해 식별합니다.

  3. 적응적 매개 변수 최적화. 매개 변수 안정성을 향상시키기 위해 실시간 시장 변동성에 따라 이동 평균 길이와 같은 매개 변수를 적응적으로 조정 할 수 있습니다.

  4. 패턴 인식을 도입합니다. 잘못된 신호를 필터링하기 위해 MA 교차점에 촛불 패턴을 식별합니다.

요약

전체적으로, 이동 평균 전환점 크로스오버 거래 전략은 위험과 수익을 균형 잡는다. 그것은 구현의 편의성, 연속 손실에 대한 저항성, 그리고 안정적인 수익과 같은 장점을 가지고 있다. 그것은 또한 MA의 지연 발행과 과도한 빈 보유 기간과 같은 단점을 가지고 있다. 매개 변수 최적화, 트렌드 판단, 패턴 인식 등을 통합함으로써 전략의 성능을 더욱 향상시킬 수 있다.


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

//@version=4
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true)
src = input(close, title="Source")

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

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

price1 = if (type1 == "SMA")
    sma(price, ma1)
else
    ema(price, ma1)
    
price2 = if (type2 == "SMA")
    sma(price, ma2)
else
    ema(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)

lookback1 = input(1, "Lookback 1")
roc1 = roc(price1, lookback1)

ma1up = false
ma1down = false
ma2up = false
ma2down = false

ma1up := nz(ma1up[1])
ma1down := nz(ma1down[1])
ma2up := nz(ma2up[1])
ma2down := nz(ma2down[1])

trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01

if crossover(roc1, trendStrength1)
    ma1up := true
    ma1down := false
    
if crossunder(roc1, -trendStrength1) 
    ma1up := false
    ma1down := true

shortexitCondition = ma1up and ma1down[1]
if (shortexitCondition)
    strategy.close("Short")

longexitCondition = ma1down and ma1up[1]
if (longexitCondition)
    strategy.close("Long")



더 많은