이동 평균 크로스오버 전략

저자:차오장, 날짜: 2023-12-08 12:20:42
태그:

img

전반적인 설명

이 전략은 서로 다른 기간의 두 개의 이동 평균을 계산하고 그 교차 지점을 그래프화하여 거래 신호를 생성합니다. 단기 이동 평균이 장기 이동 평균을 넘어서면 길고 단기 이동 평균이 장기 이동 평균을 넘어서면 짧습니다.

전략 논리

이 전략은 이동 평균의 장점을 기반으로합니다. 그들은 가격 순서에서의 무작위성을 제거하고 주요 추세를 추출합니다. 전략은 7 일 및 20 일 라인으로 구성된 이중 이동 평균 시스템을 사용합니다.

단기 이동 평균이 장기 이동 평균을 넘을 때, 그것은 가격이 상승 추세로 진입한다는 신호입니다. 아래를 넘을 때, 그것은 가격이 하락 추세로 진입한다는 신호입니다. 이 논리에 따르면, 우리는 각각 길거나 짧습니다.

특히, 전략은 7 일 간 간단한 이동 평균 (SMA) 과 20 일 간 간단한 이동 평균을 계산합니다. 두 평균이 교차 할 때, 트렌드 역전을 판단하고 거래 신호를 유발합니다. 크로스오버 유형을 구별하기 위해, 우리는 장기선 이상의 단기 라인을 상승 가격 추세로 정의하고, 반대로 하락 추세로 정의합니다. 단기 라인이 장기선 이상의 상승 추세를 넘을 때, 즉 상승 추세가 시작되면 긴 포지션을 입력합니다. 단기 라인이 아래로 넘을 때, 즉 하락 추세가 시작되면 짧은 포지션을 입력합니다.

이점 분석

(1) 전략 논리는 간단하고 이해하기 쉽고 실행하기 쉽습니다.

(2) 트렌드 추적 지표로서의 이동 평균은 가격의 소음을 효과적으로 필터 할 수 있습니다. 이중 이동 평균 시스템은 안정성을 더욱 향상시킵니다.

(3) 다양한 시장 조건과 거래 요구 사항을 충족시키기 위해 유연한 매개 변수 구성.

(4) 일반적으로 사용되는 두 개의 이동 평균 기간을 사용하면 명확한 거래 신호를 쉽게 결정할 수 있습니다.

(5) 직관적인 트렌드, 주요 레벨 식별 등을 위한 강력한 시각화

(6) 매개 변수는 전략 수익을 향상시키기 위해 백테스팅을 통해 최적화 할 수 있습니다.

위험 분석

(1) 이 전략은 시장 변동에 매우 민감합니다. 휘프사우는 다양한 기간에 자주 손실을 초래할 수 있습니다.

(2) 크로스오버는 트렌드 반전 수준을 정확하게 파악하지 못할 수 있으며 잘못된 신호를 유발할 수 있습니다.

(3) 엄격한 규칙은 시장에 영향을 미치는 급격한 사건에 적응할 수 없으며 잠재적으로 엄청난 손실을 초래할 수 있습니다.

(4) 부적절 한 매개 변수 는 또한 부정확 한 신호 와 놓친 거래 로 이어질 수 있다. 신중 한 검사 가 필요 하다.

이러한 위험을 완화하기 위해 매개 변수를 적절히 조정할 수 있습니다. 확인을 위해 다른 지표가 추가 될 수 있습니다. 스톱 손실 전략은 손실을 제어 할 수 있습니다. 매개 변수 또는 전략은 시장 체제에 따라 조정 될 수 있습니다.

개선 방향

(1) 다른 기술적 지표를 통합 전략으로 통합하면 신호 정확도가 높아질 수 있습니다. 예를 들어 이동 평균 크로스오버에 대한 확장을 확인하기 위해 부피를 추가합니다.

(2) 단일 거래 손실을 효과적으로 제어하기 위해 스톱 로스 전략을 추가합니다. 예를 들어 가격이 이동 평균을 어느 정도의 기준으로 위반하면 지점을 종료합니다.

(3) 이동 평균 기간을 테스트하고 최적화합니다. 최상의 매개 변수를 찾기 위해 다른 빠르고 느린 조합을 시도합니다. EMA, WMA와 같은 다른 이동 평균도 테스트 할 수 있습니다.

(4) 다른 제품과 시장 조건에 기초한 매개 변수 조정. 더 휘발성 제품에서 더 짧은 이동 평균과 더 작은 크로스 테어 차이.

결론

이동 평균 크로스오버 전략은 매우 전형적이고 기본적인 트렌드 다음 전략이다. 다른 기간의 두 이동 평균을 계산하고 그 크로스오버를 관찰함으로써 가격 트렌드 변화를 판단한다. 짧은 기간 이동 평균이 더 긴 기간보다 높거나 낮을 때 거래 신호가 생성된다. 이 간단한 논리는 구현하기 쉽고 조정하기 유연하며, 도입량 전략으로 만들어진다. 그러나 시장 변동과 잠재적인 부정확한 신호에 대한 민감성과 같은 결함이 있다. 다른 지표와 결합하여 스톱을 추가하고 매개 변수 최적화를 통해 전략을 양적 거래에 매우 실용적으로 향상시킬 수 있다.


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

//@version=3
strategy("Ma stratégie", overlay=true)

// Multi-timeframe and price input
pricetype = input(close, title="Price Source For The Moving Averages")
useCurrentRes = input(true, title="Use Current Timeframe As Resolution?")
resCustom = input(title="Use Different Timeframe? Then Uncheck The Box Above",  defval="W")
res = useCurrentRes ? timeframe.period : resCustom
price = request.security(syminfo.tickerid, res, pricetype)

// MA period input
shortperiod = input(7, title="Short Period Moving Average")
longperiod = input(20, title="Long Period Moving Average")



short = ema(price, shortperiod) 
long = ema(price, longperiod) 
   
// MA trend direction color
shortcolor = short > short[1] ? lime : short < short[1] ? red : blue
longcolor = long > long[1] ? lime : long < long[1] ? red : blue

// MA output
MA1 = plot(short, title="Short Period Moving Average", style=linebr, linewidth=2, color=shortcolor)
MA2 = plot(long, title="Long Period Moving Average", style=linebr, linewidth=4, color=longcolor)
fill(MA1, MA2, color=silver, transp=50)

// MA trend bar color
TrendingUp() => short > long 
TrendingDown() => short < long 
barcolor(TrendingUp() ? green : TrendingDown() ? red : blue)

// MA cross alert
MAcrossing = cross(short, long) ? short : na
plot(MAcrossing, style = cross, linewidth = 4,color=black)

// MA cross background color alert
Uptrend() => TrendingUp() and TrendingDown()[1]
Downtrend() => TrendingDown() and TrendingUp()[1]
bgcolor(Uptrend() ? green : Downtrend() ? red : na,transp=50)

// Buy and sell alert
Buy = Uptrend() and close > close[1]
Sell = Downtrend() and close < close[1]
plotshape(Buy, color=black, style=shape.arrowup, text="Buy", location=location.bottom)
plotshape(Sell, color=black, style=shape.arrowdown, text="Sell", location=location.top)



if (Buy)
    strategy.entry("My Long Entry Id", strategy.long)


if (Sell)
    strategy.entry("My Short Entry Id", strategy.short)

더 많은