RSI 지표를 기반으로 한 크로스 타임프레임 전략


생성 날짜: 2023-12-29 14:12:54 마지막으로 수정됨: 2023-12-29 14:12:54
복사: 0 클릭수: 647
avatar of ChaoZhang ChaoZhang
1
집중하다
1623
수행원

RSI 지표를 기반으로 한 크로스 타임프레임 전략

개요

이 전략은 RSI 지표에 기반한 크로스 타임 프레임 BTC 하락 전략이다. 이 전략은 K 라인마다의 거래량 가중 평균 가격 ((VWAP) 을 계산하여 VWAP 곡선을 얻으며 그 곡선에 RSI 지표를 적용한다. RSI 지표가 오버 바이 구역에서 아래로 건너가는 사각지대를 표시하면 BTC 하락한다.

전략 원칙

  1. 각 K 선의 거래량 중화 평균값 ((VWAP) 을 계산하여 VWAP 곡선을 얻는다.
  2. VWAP 곡선에 RSI 지표를 적용하여 20 일, 85 초과, 30 초과
  3. RSI 지표가 상반부 (<85) 에서 상반부 (<30) 를 넘어가면 포지션이 공백됩니다.
  4. 28 K 라인을 보유한 후, RSI 지표가 다시 오버 소매 라인을 통과하면 ((30)), 평소 포지션

우위 분석

  1. VWAP를 사용하면 단순한 종결 가격보다는 실제 거래 가격을 반영할 수 있습니다.
  2. RSI 지표를 적용하여 과매매 현상을 인식하고, 상위와 하위 추격을 피하십시오.
  3. 시간적 프레임에 따라 작동하여 함정에 빠지지 않도록하십시오.
  4. 28 K선 손실, 위험 조절

위험과 해결책

  1. 급격한 물가 상승으로 인한 갑작스러운 사건으로 인해 손실이 막히지 않았습니다.
    • 시간적 프레임워크를 활용하여 피지배의 위험을 줄이십시오.
  2. 잘못된 매개 변수 설정으로 기회를 놓칠 수 있습니다.
    • RSI 변수와 오버 바이 오버 셀 라인을 테스트하고 최적화합니다.
  3. K라인은 슈퍼마켓에 들어갈 수 없습니다.
    • 다른 지표의 추세 판단과 결합하여 변수를 유연하게 조정합니다.

최적화 방향

  1. 더 많은 변수 조합을 테스트하여 최적의 변수를 찾습니다.
  2. MACD, KD와 같은 다른 지표와 결합하여 과매도 영역에 진입했는지 판단합니다.
  3. 다양한 품종에 따라 테스트 매개 변수 설정
  4. 변동율에 따라 중지량을 설정하는 최적화된 중지 메커니즘

요약하다

이 전략은 VWAP와 RSI의 결합을 통해 BTC의 과매매 상태를 식별하고, 시간 프레임 방식으로 작동하여 위험을 효과적으로 제어할 수 있습니다. 전략 아이디어는 명확하고 이해하기 쉽고, 더 많은 테스트를 통해 최적화되어 실제 거래에 적용할 가치가 있습니다.

전략 소스 코드
/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=4

strategy("Soran Strategy 2 - SHORT SIGNALS", pyramiding=1, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=50, overlay=false)


// ----------------- Inputs ----------------- //

reso = input(title="Resolution", type=input.resolution, defval="")
length = input(20, title="RSI Length", type=input.integer)
ovrsld = input(30, "RSI Oversold level", type=input.float)
ovrbgt = input(85, "RSI Overbought level", type=input.float)
lateleave = input(28, "Number of candles", type=input.integer)
// lateleave : numbers of bars in overbought/oversold zones where the position is closed. The position is closed when this number is reached or when the zone is left (the first condition).

// best parameters BTCUSDTPERP M15 : 20 / 30 / 85 / 28


stratbull = input(title="Enter longs ?", type = input.bool, defval=true)
stratbear = input(title="Enter shorts ?", type = input.bool, defval=true)

stratyear = input(2020, title = "Strategy Start Year")
stratmonth = input(1, title = "Strategy Start Month")
stratday = input(1, title = "Strategy Start Day")
stratstart = timestamp(stratyear,stratmonth,stratday,0,0)


// --------------- Laguerre ----------------- //

laguerre = input(title="Use Laguerre on RSI ?", type=input.bool, defval=false)
gamma = input(0.06, title="Laguerre Gamma")

laguerre_cal(s,g) =>
    l0 = 0.0
    l1 = 0.0
    l2 = 0.0
    l3 = 0.0
    l0 := (1 - g)*s+g*nz(l0[1])
    l1 := -g*l0+nz(l0[1])+g*nz(l1[1])
    l2 := -g*l1+nz(l1[1])+g*nz(l2[1])
    l3 := -g*l2+nz(l2[1])+g*nz(l3[1])
    (l0 + 2*l1 + 2*l2 + l3)/6


// ---------------- Rsi VWAP ---------------- //

rsiV = security(syminfo.tickerid, reso, rsi(vwap(close), length))

rsiVWAP = laguerre ? laguerre_cal(rsiV,gamma) : rsiV


// ------------------ Plots ----------------- //

prsi = plot(rsiVWAP, color = rsiVWAP>ovrbgt ? color.red : rsiVWAP<ovrsld ? color.green : color.white, title="RSI on VWAP", linewidth=1, style=plot.style_line)
hline = plot(ovrbgt, color = color.gray, style=plot.style_line)
lline = plot(ovrsld, color = color.gray, style=plot.style_line)
fill(prsi,hline, color = rsiVWAP > ovrbgt ? color.red : na, transp = 30)
fill(prsi,lline, color = rsiVWAP < ovrsld ? color.green : na, transp = 30)


// ---------------- Positions: only shows the Short and close shoret positions --------------- //

timebull = stratbull and time > stratstart
timebear = stratbear and time > stratstart


strategy.entry("Short", false, when = timebear and crossunder(rsiVWAP, ovrbgt), comment="")
strategy.close("Short", when = timebear and crossunder(rsiVWAP, ovrsld)[lateleave] or crossover(rsiVWAP, ovrsld), comment="")