RSI 이동 평균 크로스오버 전략

저자:차오장, 날짜: 2023-11-07 15:35:58
태그:

img

전반적인 설명

RSI 이동 평균 크로스오버 전략 (RSI Moving Average Crossover Strategy) 은 주로 암호화폐 거래에 사용되는 전략이다. RSI 지표에 이동 평균을 적용하고 RSI와 이동 평균 사이의 크로스오버를 기반으로 거래한다. 또한 그 지표가 만들어졌다.

전략 논리

전략은 먼저 RSI 지표를 계산합니다. RSI 지표는 특정 기간 동안 상승 및 하락 움직임에 따라 가격의 힘을 반영합니다. RSI 70 이상은 과소매로 간주되며 30 이하는 과소매로 간주됩니다.

그 다음 전략은 이동 평균을 RSI 지표에 적용합니다. 이동 평균은 무작위 변동을 필터링하고 트렌드 방향을 결정할 수 있습니다. 여기서 10 기간 RSI 이동 평균이 설정됩니다.

RSI가 이동평균을 넘으면 구매 신호로 간주됩니다. RSI가 이동평균을 넘으면 판매 신호로 간주됩니다. 거래는이 두 신호에 따라 수행됩니다.

코드에서, RSI 지표와 연장 기간은 먼저 계산됩니다. 그 다음 RSI의 10 기간 이동 평균 ma는 계산됩니다. ma가 rsi를 넘으면 구매합니다. ma가 rsi를 넘으면 판매합니다.

또한, 코드는 rsi와 ma의 선 차트, 그리고 rsi-ma의 열 차트를 그래프화한다. rsi=70과 rsi=30의 분할 선도 그래프화된다. 해당 신호 화살표는 구매 또는 판매시 차트에 표시된다.

이점 분석

  • RSI는 과반 구매 및 과반 판매 조건을 판단 할 수 있습니다. 이동 평균은 무작위 변동을 필터링 할 수 있습니다. 둘의 조합은 트렌드 역전 지점을 식별 할 수 있습니다.

  • RSI 이동 평균 크로스오버는 일부 잘못된 신호를 필터링할 수 있는 비교적 성숙한 거래 전략 아이디어입니다.

  • 전략 코드는 간단하고 명확하고 이해하기 쉽습니다. 플롯 기능은 거래 신호를 명확하게 관찰하기 위해 완료됩니다.

  • 이 전략은 상대적으로 명백한 트렌드를 가진 암호화폐에 잘 작동합니다.

위험 분석

  • 부적절한 RSI 및 이동 평균 기간 매개 변수는 너무 많은 잘못된 신호를 생성 할 수 있습니다.

  • 단지 지표의 교차에 의존하는 것은 완전히 함정에 빠지는 것을 피할 수 없습니다. 트렌드 분석이 결합되어야합니다.

  • 거래 비용은 수익에 어느 정도 영향을 줄 수 있습니다. 포지션 크기는 최적화되어야합니다.

  • 암호화폐 시장의 높은 변동성 때문에 손실 위험을 막기 위해 주의해야 합니다.

위험을 해결하기 위해 매개 변수를 조정하여 지표를 최적화 할 수 있으며, 포지션 크기를 줄일 수 있으며, 스톱 로스를 설정할 수 있으며, 트렌드 분석을 사용하여 신호를 필터링 할 수 있습니다.

최적화 방향

  • 다른 기간 매개 변수에서 RSI와 이동 평균의 최적 조합을 연구하십시오.

  • 트렌드가 강할 때 포지션 크기를 늘리고, 트렌드가 불분명할 때 줄여야 합니다.

  • 동적 스톱 손실을 설정하여 트렌드를 추적합니다.

  • 새로운 거래 신호를 형성하기 위해 다른 지표와 RSI를 결합하는 것을 탐구하십시오.

  • 이 전략에 기반한 기계 학습 모델을 탐구하여 승률을 향상시킵니다.

요약

RSI 이동 평균 크로스오버 전략은 추세와 필터링 지표의 장점을 결합하여 비교적 성숙하고 신뢰할 수 있습니다. 전략 논리는 간단하고 명확하며 코드 구현 또한 상당히 완전합니다. 전반적으로 상당히 좋은 암호화폐 거래 전략입니다. 그러나 모든 전략은 최적화가 필요합니다. 더 나은 전략 성능을 달성하기 위해 추세 분석과 결합하여 지속적인 테스트와 조정이 필요합니다.


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

//@version=4
strategy("RSI w MA Strategy", shorttitle="RSI w MA Strategy", overlay=false, initial_capital=10000, currency='USD',process_orders_on_close=true)

//TIME FRAME AND BACKGROUND CONTROL/////////////////////////////////////////////
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(01, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)
testStopYear = input(2022, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(1, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and time >= testPeriodStart and time <= testPeriodStop ? 
   color.teal : na
//bgcolor(testPeriodBackgroundColor, transp=50)
testPeriod() => true
////////////////////////////////////////////////////////////////////////////////

src = close, len = input(27, minval=1, title="Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
window = input(10, "RSI MA Window")
ma = sma(rsi,window)
plot(rsi, color=color.orange)
colorr= ma > rsi ? color.red : color.green
plot(ma,color=colorr)
band1 = hline(70)
band0 = hline(30)
fill(band1, band0, color=color.purple, transp=90)
diff = rsi - ma

plot(diff,style= plot.style_columns,transp=50,color = colorr)

plotshape(crossunder(rsi,ma)?rsi:na,title="top",style=shape.triangledown,location=location.absolute,size=size.tiny,color=color.red,transp=0)
plotshape(crossover(rsi,ma)?rsi:na,title="bottom",style=shape.triangleup,location=location.absolute,size=size.tiny,color=color.lime,transp=0)

buySignal = crossover(rsi,ma)
sellSignal = crossunder(rsi,ma)

//TRADE CONTROL/////////////////////////////////////////////////////////////////
if testPeriod()
    if buySignal
        strategy.close("Short", qty_percent = 100, comment = "Close Short")
        strategy.entry("Long", strategy.long, qty=.1)

    if sellSignal
        strategy.close("Long", qty_percent = 100, comment = "Close Long")
        strategy.entry("Short", strategy.short, qty=.1)

////////////////////////////////////////////////////////////////////////////////













더 많은