RSI 롱 앤 숏 밸런스 트레이딩 전략


생성 날짜: 2023-10-30 15:49:35 마지막으로 수정됨: 2023-10-30 15:49:35
복사: 0 클릭수: 670
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

RSI 롱 앤 숏 밸런스 트레이딩 전략

개요

이 전략은 RSI 지표의 조합을 사용하여 현재 시장이 과매매 또는 과매매 상태에 있다고 판단하고 가격과 이동 평균선과의 관계를 결합하여 구매 및 판매 신호를 발송합니다. 목표는 하락세를 구매하고 상승세를 판매하여 정리에서 이익을 얻는 것입니다.

전략 원칙

  1. 5분, 15분, 1시간의 RSI 값을 계산합니다. 5분, 15분, 1시간의 RSI가 동시에 25보다 낮을 때 과매매 현상으로 판단하여 구매 신호를 발생시킵니다. 5분, 15분, 1시간의 RSI가 동시에 75보다 높을 때 과매매 현상으로 판단하여 판매 신호를 발생시킵니다.

  2. 가격이 21일 이동 평균선을 돌파하는 것도 거래 신호로 쓰이며, 가격이 이동 평균선보다 낮으면 구매 신호를 발생시키고, 가격이 이동 평균선보다 높으면 판매 신호를 발생시킨다.

  3. 포지션 상황에 따라, 첫 거래 수와 포지션 규칙을 설정합니다. 첫 포지션을 2 손으로 설정하고, 이후 포지션을 2 손에 도달 할 때까지 포지션을 매번 1 손으로 설정합니다.

  4. 손실이 3%에 도달했을 때 멈춥니다. 이익이 1%에 도달했을 때 멈춥니다.

전략적 이점

  1. 다중 시간 프레임 RSI 지표 조합을 사용하여 과매매를 판단하여 신호의 신뢰성을 향상시킵니다.

  2. 이동평균선과 결합하여 거래 기회를 확장하는 거래 신호를 생성합니다.

  3. 포지션 제어 및 수익 손실 비율 중지 중지 규칙을 설정하고 위험을 제어하십시오.

  4. 양적 인수입을 통해 수익을 확대하십시오.

전략적 위험

  1. RSI 지표에는 회귀 위험이 있습니다. 즉, RSI가 오버 바이 오버 셀 위기에 도달 한 후, 가격이 잠시 동안 반전되지 않고 계속 작동 할 수 있습니다. 이 시점에 RSI 신호를 맹목적으로 따라 거래하면 손실이 발생할 수 있습니다.

  2. 이동평균선에서 생성된 거래 신호는 오해될 수 있다. 가격이 급격하게 변동할 때 이동평균선은 가격 변화를 제때 추적할 수 없다.

  3. 포지션 규모와 수익/손실 비율을 잘못 설정하면 부적절한 위험 관리로 이어질 수 있다.

  4. 합리적 조건으로 매장 조건이 설정되어야 합니다. 매장 조건이 너무 개방되면 손실이 확대될 수 있습니다.

최적화 방향

  1. RSI 파라미터를 조정하여 다른 RSI 주기 파라미터 조합을 테스트하여 더 신뢰할 수 있는 오버 바이 오버 셀 신호를 찾습니다.

  2. 다른 변수 이동 평균선을 보조 거래 신호로 테스트한다. 다른 기술 지표도 테스트할 수 있다.

  3. 포지션 제어 및 손해 차단 규칙을 최적화하고, 더 과학적인 위험 제어 장치를 설정한다.

  4. 가축 조건의 최적화, 가축으로 손실이 커지는 것을 방지한다. 또한 대안 가축 방법을 고려할 수 있으며, 지수 가축으로 바뀔 수 있다.

요약하다

이 전략은 RSI의 다중 시간 프레임 포트폴리지를 사용하여 트렌드 잠재력을 판단하여 높은 승률을 얻습니다. 동시에 이동 평균을 보조하여 거래 신호를 생성하여 거래 기회를 확장합니다. 포지션 제어, 손해 중지, 양적 부가와 같은 규칙을 사용하여 위험 제어합니다.

전략 소스 코드
/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("5M_RSI_Strategy", overlay=true, pyramiding = 1)
len =14 
Initial_Trade_Size = 2
up = rma(max(change(close), 0), len)
down = rma(-min(change(close), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
RSI_1h = request.security(syminfo.tickerid, "60", rsi)
RSI_3h = request.security(syminfo.tickerid, "180", rsi)
RSI_15m = request.security(syminfo.tickerid, "15", rsi)
RSI_5m = request.security(syminfo.tickerid, "5", rsi)
RSI_1m = request.security(syminfo.tickerid, "1", rsi)
ema21_5 = ema(request.security(syminfo.tickerid, "5", close), 21)
ema21_15 = ema(request.security(syminfo.tickerid, "15", close), 21)
//(RSI_3h<=25) and  (RSI_1h<=25) and (RSI_15m<=25) and
Positive = ((RSI_5m<=25) and (RSI_15m<=25) and (RSI_1h<=25))?true:false
//alertcondition(Positive, title='POS', message='POS')        
//plotshape(Positive, style=shape.triangleup,location=location.belowbar, color=green,size =size.tiny)
Negative = (( RSI_5m>=75) and ( RSI_15m>=75) and ( RSI_1h>=75))?true:false
//alertcondition(Negative, title='NEG', message='NEG')
//plotshape(Negative, style=shape.triangledown,location=location.abovebar, color=red,size=size.tiny)          Positive and   Negative and 

lastordersize = abs(strategy.position_size)>=Initial_Trade_Size?abs(strategy.position_size):Initial_Trade_Size
//lastordersize =1
// and ((ema21_15-low)/ema21_15) > 0.077
//Adding to position rules
if (abs(strategy.position_size) >= Initial_Trade_Size and (abs(close - strategy.position_avg_price)/abs(strategy.position_avg_price)>0.03))
    if(strategy.position_avg_price > close and strategy.position_size > 0)
        strategy.entry("Add", strategy.long , qty = lastordersize , when = true)
    if(strategy.position_avg_price < close and strategy.position_size < 0)
        strategy.entry("Add", strategy.short, qty = lastordersize , when = true)
if (strategy.position_size == 0)
    if (Positive or ((ema21_5-low)/ema21_5) > 0.07)
        strategy.entry("1St Entry", strategy.long , qty = lastordersize , when = true)
    // and ((high-ema21_15)/ema21_15) > 0.077
    if (Negative or ((high-ema21_5)/ema21_5) > 0.07)
        strategy.entry("1St Entry", strategy.short, qty = lastordersize , when = true)
//lastordersize := lastordersize * 2
//or (strategy.openprofit / abs(strategy.position_size * close))>=0.01
if(cross(ema21_5, high) or cross(ema21_5, low))
    strategy.close_all()