이 문서에서는 RSI 지표를 사용하여 거래 신호를 형성하는 양적 전략에 대해 자세히 설명합니다. 이 전략은 RSI 지표를 처리하여 다공간 거래의 입출력 조건을 설정합니다.
1 전략
이 전략의 주요 거래 논리는 다음과 같습니다.
RSI ((14) 지표를 계산하고, EMA ((28) 를 사용하여 부드럽게 처리하여 처리된 진동 지표를 얻습니다.
처리된 RSI 지표에 부린 반도를 계산하여 오르락 내리락을 얻습니다. 오버 바이 오버 소드 범위를 설정합니다.
처리 후 RSI 지표 아래로 진입 라인을 통과하면 구매 신호가 발생하고, 위로 진입 라인을 통과하면 판매 신호가 발생한다.
지표가 오버 바이 오버 소드 영역에 들어갔을 때 평소 신호가 발생한다.
이 방법으로, RSI 지표의 특성을 사용하여 반전 기회를 잡을 수 있습니다. 그리고 지표 처리를 통해 신호 품질과 참조 값을 향상시킬 수 있습니다.
2 전략적 장점
이 전략의 가장 큰 장점은 지표 처리가 매개 변수 공간을 증가시켜 거래 빈도를 엄격하게 제어하고 과도한 거래를 방지한다는 것입니다.
또 다른 장점은 입시 조건이 간단하고 직관적이며 지표의 명확한 수치를 통해 거래 시기를 판단하는 것입니다.
마지막으로, 오버 바이 오버 세일 레인지의 설정은 단 하나 거래의 위험을 조절하는 데 도움이 됩니다.
그러나 이 전략에는 다음과 같은 위험도 있습니다.
첫째, RSI 지표는 역전 거래에 집중하여 트렌드에서 잘못된 신호를 발생시킬 수 있습니다.
두 번째, 변수 설정이 잘못되면 시장 구조 변화에 적응하지 못하는 과도한 최적화가 발생할 수 있습니다.
마지막으로, 낮은 승률은 약간의 손실 압박을 수반합니다.
네 가지 내용
이 글은 주로 RSI 지표를 이용한 양적 거래 전략에 대해 소개한다. 이는 파라미터를 조정하여 거래 빈도를 제어하고, 명확한 입출장 규칙을 통해 작동한다. 파라미터를 최적화하면서 반전 거래의 위험을 통제하는 것도 필요하다.
/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
//-----------------------------------------------------------------
//This simple strategy base on RSI, EMA, Bollinger Bands to get Buy and Sell Signal with detail as below:
//-----------------------------------------------------------------
//1.Define Oscillator Line
//+ Oscillator Line is smoothed by ema(28) of RSI(14) on H1 Timeframe
//2.Define Overbought and Oversold
//+ Apply Bollinger Bands BB(80,3) on Oscillator Line and calculate %b
//+ Overbought Zone marked above level 0.8
//+ Oversold Zone marked below level 0.2
//3.Buy Signal
//+ Entry Long Positon when %b crossover Point of Entry Long
//+ Deafault Point of Entry Long is 0.2
//+ Buy signal marked by Green dot
//4.Sell Signal
//+ Entry Short Position when %b crossunder Point of Entry Short
//+ Deafault Point of Entry Short is 0.8
//+ Sell signal marked by Red dot
//5.Exit Signal
//+ Exit Position (both Long and Short) when %b go into Overbought Zone or Oversold Zone
//+ Exit signal marked by Yellow dot
//-----------------------------------------------------------------
strategy(title="RSI %b Signal [H1 Backtesting]", overlay=false)
//RSI
rsi_gr="=== RSI ==="
rsi_len = input(14, title = "RSI",inline="set",group=rsi_gr)
smoothed_len = input(28, title = "EMA",inline="set",group=rsi_gr)
rsi=ta.ema(ta.rsi(close,rsi_len),smoothed_len)
//rsi's BOLLINGER BANDS
pb_gr="=== %b ==="
length = input(80, title = "Length",inline="set1",group=pb_gr)
rsimult = input(3.0, title = "Multiplier",inline="set1",group=pb_gr)
ovb = input(0.8, title = "Overbought",inline="set2",group=pb_gr)
ovs = input(0.2, title = "Oversold",inline="set2",group=pb_gr)
et_short = input(0.8, title = "Entry Short",inline="set3",group=pb_gr)
et_long = input(0.2, title = "Entry Long",inline="set3",group=pb_gr)
[rsibasis, rsiupper, rsilower] = ta.bb(rsi, length, rsimult)
//rsi's %B
rsipB = ((rsi - rsilower) / (rsiupper - rsilower))
plot(rsipB, title="rsi's %B", color=rsipB>math.min(ovb,et_short)?color.red:rsipB<math.max(ovs,et_long)?color.green:color.aqua, linewidth=1)
h1=hline(1,color=color.new(color.red,100))
h4=hline(ovb,color=color.new(color.red,100))
h0=hline(0,color=color.new(color.green,100))
h3=hline(ovs,color=color.new(color.green,100))
h5=hline(0.5,color=color.new(color.silver,0),linestyle=hline.style_dotted)
fill(h1,h4, title="Resistance", color=color.new(color.red,90))
fill(h0,h3, title="Support", color=color.new(color.green,90))
//Signal
rsi_buy=
rsipB[1]<et_long
and
rsipB>et_long
rsi_sell=
rsipB[1]>et_short
and
rsipB<et_short
rsi_exit=
(rsipB[1]>ovs and rsipB<ovs)
or
(rsipB[1]<ovb and rsipB>ovb)
plotshape(rsi_buy?rsipB:na,title="Buy",style=shape.circle,color=color.new(color.green,0),location=location.absolute)
plotshape(rsi_sell?rsipB:na,title="Sell",style=shape.circle,color=color.new(color.red,0),location=location.absolute)
plotshape(rsi_exit?rsipB:na,title="Exit",style=shape.circle,color=color.new(color.yellow,0),location=location.absolute)
//Alert
strategy.entry("Long",strategy.long,when=rsi_buy)
strategy.close("Long",when=rsi_exit)
strategy.entry("Short",strategy.short,when=rsi_sell)
strategy.close("Short",when=rsi_exit)
//EOF