모멘텀 인디케이터 RSI 역전 거래 전략

저자:차오장, 날짜: 2024-01-03 12:09:48
태그:

img

전반적인 설명

이 전략은 먼저 ADX와 SMA를 더 높은 시간 프레임에 계산하여 트렌드 방향과 변화를 식별합니다. 그 다음 RSI는 거래 신호를 생성하기 위해 과소득 및 과소매 조건을 식별하기 위해 더 낮은 시간 프레임에 계산됩니다.

전략 논리

  1. ADX는 높은 시간 프레임에서 트렌드의 힘을 판단합니다. 상승하는 ADX는 강화 트렌드를 나타냅니다.

  2. 높은 시간 프레임에서의 SMA는 트렌드의 방향을 판단합니다. 상승하는 SMA는 상승하는 가격을 나타냅니다. 떨어지는 SMA는 떨어지는 가격을 나타냅니다.

  3. 낮은 시간 프레임에서 RSI는 과잉 구매 및 과잉 판매 조건을 판단합니다. 임계 이상의 RSI는 과잉 구매를 의미하며, 임계 이하의 RSI는 과잉 판매를 의미합니다.

  4. ADX가 상승하고 SMA가 상승하고 RSI가 낮은 시간 프레임에서 과잉 매입되면 상승 추세가 강화되고 있다고 간주됩니다.

  5. ADX가 상승하고 SMA가 하락하고 RSI가 낮은 시간 프레임에서 과잉 판매되면 하락 추세가 강화되고 있다고 간주됩니다.

이점 분석

  1. 트렌드 판단과 반전 거래를 결합하여 주요 트렌드에서 반전 기회를 포착 할 수 있습니다.

  2. 시간 프레임에 걸쳐 지표를 활용하고 신호의 신뢰성을 향상시킵니다.

  3. RSI 전략은 이해하기 쉽고 실행하기 쉽습니다.

위험 분석

  1. 잘못된 RSI 신호가 발생할 수 있어 거래 손실이 발생할 수 있습니다.

  2. 주요 사이클 트렌드 판단은 틀릴 수 있으며, 전략은 시장 상황에 적합하지 않습니다. 트렌드 판단을 위해 더 많은 지표를 고려 할 수 있습니다.

  3. 거래 비용으로 인해 수익성에 영향을 미치는 잠재적으로 높은 거래 빈도. 거래 수를 줄이기 위해 RSI 매개 변수를 조정할 수 있습니다.

최적화 방향

  1. 더 많은 매개 변수 조합을 테스트하여 RSI와 ADX, SMA 매개 변수 사이의 최적의 일치를 찾습니다.

  2. 단일 트레이드 손실을 제어하기 위해 스톱 로스 메커니즘을 추가합니다.

  3. 변동성이 낮을 때 포지션 크기를 줄이기 위해 변동성 지표를 고려하십시오.

  4. 특정 진입 및 출입 가격을 최적화합니다. 예를 들어 이전 바을 깨면 짧은 가격으로 진입하는 것과 같이요.

결론

이 전략은 트렌드 판단과 역전 신호를 결합하여 주요 트렌드 내의 지역 역전을 찾습니다. RSI만을 사용하는 것과 비교하면 더 신뢰할 수 있으며 함락되는 것을 피합니다. 전반적으로 잘못된 신호를 줄이기 위해 투자자에게 적합한 비교적 보수적인 전략입니다. 추가 매개 변수 테스트 및 메커니즘 최적화는 전략 성능을 향상시킬 수 있습니다.


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

//@version=3
strategy("RSI scalping", overlay=true)

CustSession 	= input(defval=true,title= "Custom Resolution / TF ? ",type=bool)
SessionTF0	= input(title="Custom Resolution / TF", defval="180")
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
length = input(7, title= "RSI length")
overSold = input( 28, title= "RSI oversold" )
overBought = input( 68, title= "RSI overbought" )

RSI = rsi(close, 7)

res		=	CustSession ? SessionTF0 : period

o = request.security(syminfo.tickerid, res, open)
c = request.security(syminfo.tickerid, res, close)
l = request.security(syminfo.tickerid, res, low)
h = request.security(syminfo.tickerid, res, high)

 // ADX higher time frame
dirmov(len) =>
	up = change(h)
	down = -change(l)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
    truer = request.security(syminfo.tickerid, res, tr)
	truerange = rma(truer, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)

sig = adx(dilen, adxlen)

// SMA higher time frame
len = input(20, minval=1, title="SMA HTF Length")
smma = 0.0
smma := na(smma[1]) ? sma(c, len) : (smma[1] * (len - 1) + c) / len

ADXrising = (sig > sig[1]) and (sig[1] > sig[2]) and (sig[2]  > sig[3]) and (sig > 15)
SMAdrop= (smma < smma[1]) and (smma[1] < smma[2]) and (smma[2] < smma[3])
SMArising = (smma > smma[1]) and (smma[1] > smma[2]) and (smma[2] > smma[3])
longCondition = crossover(RSI, overBought) and ADXrising and SMArising
shortCondition = crossunder(RSI, overSold) and SMAdrop and ADXrising 

if (longCondition)
    strategy.entry("Long entry", strategy.long)

if (shortCondition)
    strategy.entry("Short Entry", strategy.short)

더 많은