이중 이동 평균 RSI 지표 조합 역전 전략

저자:차오장, 날짜: 2023-11-10 18:01:09
태그:

img

전반적인 설명

이 전략은 이중 이동 평균, 상대 강도 지수 (RSI) 및 파라볼리 SAR (PSAR) 를 결합하여 가격 반전 지점을 식별하고 이에 따라 구매 및 판매 결정을 내립니다. 반전 거래 전략에 속합니다.

원칙

이 전략은 주로 다음과 같은 기술적 지표를 사용하여 가격 반전 지점을 결정합니다.

  1. 이중 이동 평균: 빠른 이동 평균 (MA 빠른 라인) 과 느린 이동 평균 (MA 느린 라인) 을 계산합니다. 빠른 라인이 느린 라인 위에 넘을 때, 황소 시장을 표시하고 길게 간다. 빠른 라인이 느린 라인 아래에 넘을 때, 곰 시장을 표시하고 짧게 간다.

  2. RSI 지표: RSI는 기간 동안 평균 종료 이익과 평균 종료 손실을 계산하여 과잉 구매 및 과잉 판매 조건을 판단합니다. RSI 70 이상은 과잉 구매 구역을 나타내고 30 이하는 과잉 판매 구역을 나타냅니다.

  3. PSAR 지표: 파라볼릭 SAR는 트렌드 방향을 나타냅니다. 가격 아래의 SAR 포인트는 황소 시장을 나타내고 가격 위는 곰 시장을 나타냅니다.

  4. ADX 지표: ADX는 방향 움직임을 계산하여 트렌드의 강도를 측정합니다. ADX 20 이상은 트렌딩 시장을 신호하고 20 이하는 통합을 신호합니다.

구매 및 판매 신호의 논리는 다음과 같습니다.

구매 신호: 빠른 MA는 느린 MA보다 높고, RSI는 30 이하 (가장 팔린), SAR 포인트는 가격보다 높고, ADX는 20 이상입니다.

판매 신호: 빠른 MA는 느린 MA보다 낮고, RSI는 70 이상 (가량 구매), SAR 포인트는 가격보다 낮고, ADX는 20 이상입니다.

구매 또는 판매 신호가 발생했을 때, 각각 10%의 자본으로 위치를 취합니다. 역전 신호가 실패하면 적절한 시점에 위치를 닫습니다.

장점

  • 이중 MAs는 주요 트렌드 방향을 결정하며, RSI와 SAR는 잘못된 신호를 필터링하여 전환점을 정확하게 식별 할 수 있습니다.

  • 여러 개의 지표를 결합하면 하나의 지표에서 잘못된 신호가 나오지 않습니다.

  • 스톱 로스는 과도한 위험을 피합니다.

  • 단순하고 명확한 논리는 그것을 쉽게 구현합니다.

  • 상승세와 하락세 모두에 효과가 있습니다.

위험 과 해결책

  • 이중 MAs는 잘못된 브레이크오웃을 가질 수 있습니다. 더 긴 MA 기간을 고려하거나 실제 브레이크오웃을 확인하기 위해 볼링거 밴드를 추가하십시오.

  • RSI가 제대로 설정되지 않으면 잘못된 신호를 생성 할 수 있습니다. RSI 매개 변수를 정렬하고 RSI 신호를 확인하기 위해 다른 지표를 추가하십시오.

  • ADX가 20보다 낮을 때 거래를 중단하거나 ADX 기간을 단축합니다.

  • SetStringry Stop Loss는 불필요한 손실을 일으킬 수 있습니다. 시장 변동성에 따라 합리적인 Stop Loss를 설정하십시오.

  • 높은 거래 빈도. 낮은 거래 빈도에 MA 기간을 조정합니다.

개선

  • 최적의 조합을 찾기 위해 다른 MA 기간을 테스트합니다.

  • 다른 RSI 매개 변수를 테스트하여 과잉 구매/ 과잉 판매 판단을 더 잘 할 수 있습니다.

  • 논리를 더 풍부하게 하기 위해 볼링거 밴드, KDJ 같은 다른 지표를 추가합니다.

  • 다른 제품과 시장을 기반으로 동적 스톱 로스를 설정합니다.

  • 트렌드를 더 잘 따라가기 위해 위치 크기를 추가합니다.

  • 다른 ADX 매개 변수를 테스트하여 트렌드 강도를 결정하는 가장 좋은 값을 찾습니다.

  • 자동 정지 손실 기능을 추가합니다.

결론

이 전략은 듀얼 MAs를 사용하여 주요 트렌드 방향을 식별하고 추가 신호 필터링을 위해 RSI, SAR를 사용합니다. 매개 변수 최적화 후 반전 지점을 효과적으로 결정하고 반전 주위의 트렌드를 잡을 수 있습니다. 실제로는 적절한 스톱 로스 및 지속적인 매개 변수 최적화로 위험 관리가 중요합니다. 전반적으로 전략은 명확한 논리와 쉬운 조작으로 지표를 결합하여 신뢰할 수있는 반전 거래 전략입니다.


/*backtest
start: 2023-10-10 00:00:00
end: 2023-11-09 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//Based on Senpai BO 3
strategy(title="Senpai_Strat_3", shorttitle="Senpai_Strat_3", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
src = close

//psar
start = input(0.02)
increment = input(0.02)
maximum = input(0.2)
psar = sar(start, increment, maximum)


//ADX Init
adxlen = input(30, title="ADX Smoothing")	
dilen = input(30, title="DI Length")	
dirmov(len) =>	
	up = change(high)
	down = -change(low)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, 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)
	[adx, plus, minus]
	
[sig, up, down] = adx(dilen, adxlen)	


// BB Init
source = close
length = input(50, minval=1)
mult = input(0.5, title="Mult Factor", minval=0.001, maxval=50)
alertLevel=input(0.1)
impulseLevel=input(0.75)
showRange = input(false, type=bool)


//RSI CODE
up1 = rma(max(change(src), 0), 14)
down1 = rma(-min(change(src), 0), 14)
rsi = down1 == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up1 / down1))


//BB CODE
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev
bbr = source>upper?(((source-upper)/(upper-lower))/10): source<lower?(((source-lower)/(upper-lower))/10) : 0.05
bbi = bbr - nz(bbr[1]) 

//////////////////// Algo

//if (rsi>50 and n1>n2)
   //strategy.exit("Close", "Short")
  // strategy.entry("Long", strategy.long)
//if (rsi<50 and n2>n1)
   //strategy.exit("Close", "Long")
//   strategy.entry("Short", strategy.short)

//col = ma30 > ma50 > ma200 and rsi <=53?lime: ma50 < ma200  and rsi >= 60?red : silver
//short1 =  sig<18.5 and high>=upper and rsi>=70 and psar<close = 100%
//long1 = sig<18.5 and low<=lower and rsi<=30 and psar>close = 100%
short1 =  sig<18.5 and high>=upper and rsi>=70 and psar<close
long1 = sig<18.5 and low<=lower and rsi<=30 and psar>close

//Entry

long = long1[1] == 0 and long1 == 1
short = short1[1] == 0 and short1 == 1
longclose = long[3] == 1
shortclose = short[3] == 1
strategy.entry("short", strategy.short,qty = 10, when=short)
strategy.entry("long", strategy.long,qty=10, when=long)
strategy.close("long",when=longclose)
strategy.close("short",when=shortclose)



/////////////////////
///PLOT

plot(long,"long",color=green,linewidth=1)
plot(short,"short",color=red,linewidth=1)
plot(longclose,"close",color=blue,linewidth=1)
plot(shortclose,"close",color=orange,linewidth=1)


//plot(short,"short",color=red,linewidth=1)
//

//strategy.exit(id="long",qty = 100000,when=longclose)
//strategy.exit(id="short",qty = 100000,when=shortclose)

//strategy.exit(id="Stop", profit = 20, loss = 100)

더 많은