이 전략은 RSI 지표가 놓친 오버 바이 오버 세 신호를 추적하여 반전 거래를 실현합니다. RSI 지표가 오버 바이 영역에서 돌아오는 경우 추적하는 신호를 생성하고 오버 세 영역에서 반발하는 경우 추적하는 신호를 생성하여 반전 기회를 잡습니다.
RSI 지표는 오버 바이 오버 소드를 판단하는 데 사용됩니다. RSI 상위에서 설정된 오버 바이 라인을 넘으면 오버 바이 신호이며, 아래에서 오버 세일 라인을 넘으면 오버 세일 신호입니다.
overbought = rsi > uplimit
oversold = rsi < dnlimit
이전 K선 RSI 지표가 과매매 상태라면, 현재 K선 RSI 지표가 과매매 상태에서 탈퇴하여 추적 다중 신호를 생성합니다.up1; 이전 K선 RSI 지표가 oversold 상태라면, 현재 K선 RSI 지표가 oversold 상태에서 빠져나와 추적 하위 신호를 생성합니다.dn1。
up1 = bar == -1 and strategy.position_size == 0 and overbought[1] and overbought == false
dn1 = bar == 1 and strategy.position_size == 0 and oversold[1] and oversold == false
포지션 보유 방향이 K선 엔티티 방향과 일치하고, 엔티티가 10주기 평균값의 반을 돌파했을 때, 탈퇴 신호가 발생한다.
exit = (((strategy.position_size > 0 and bar == 1) or
(strategy.position_size < 0 and bar == -1)) and
body > abody / 2)
RSI 지표가 놓친 반전 신호를 추적하여 과매도 과매도 시점을 잡는 데 필요한 어려움을 피하십시오.
RSI의 역전 속성을 활용하여 역전 기회를 잡습니다.
K선 엔티티의 방향과 크기를 결합하여 탈퇴 판단을 하고, 반발 후 추적을 계속하는 것을 피한다.
RSI 지표가 잘못된 신호를 보내는 위험
신호를 추적할 때, 가격이 이미 어느 정도 조정되었을 수도 있고, 손실 위험이 높을 수도 있습니다.
일부 반발이 수익을 내지 못하면 탈퇴 신호를 발산할 위험이 있습니다.
최적화 매개 변수 설정, 예를 들어 오버 바이 오버 세일 라인, 회전 사이클 등, 다른 시장에 맞게 조정한다.
포지션 관리 방법을 조정합니다. 예를 들어 신호를 추적 할 때 포지션을 낮추십시오.
접속 시점을 최적화하고, 추적 신호를 기반으로, 다른 조건 제한을 추가한다.
이동식 결제와 같은 탈퇴 방법을 최적화하여 수익률을 높여줍니다.
손실을 줄이기 위한 최적화된 방법, 이동적 손실, 형 손실 등의 도입
이 전략은 RSI 지표에 기반한 오버 바이 오버 셀 신호를 통해 반전 거래를 추적한다. 이 전략은 반전 신호를 추적하는 장점이 있지만, 특정 가짜 신호 위험과 손실 위험도 존재한다. 지속적인 최적화를 통해 전략의 안정성과 수익률을 더욱 높일 수 있다.
/*backtest
start: 2023-09-20 00:00:00
end: 2023-09-27 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's Anti RSI Strategy v1.0", shorttitle = "Anti RSI str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
rsiperiod1 = input(14, defval = 14, minval = 2, maxval = 50, title = "RSI Period")
rsilimit1 = input(25, defval = 25, minval = 1, maxval = 100, title = "RSI limit")
showarr = input(false, defval = false, title = "Show Arrows")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//RSI
uprsi1 = rma(max(change(close), 0), rsiperiod1)
dnrsi1 = rma(-min(change(close), 0), rsiperiod1)
rsi = dnrsi1 == 0 ? 100 : uprsi1 == 0 ? 0 : 100 - (100 / (1 + uprsi1 / dnrsi1))
uplimit = 100 - rsilimit1
dnlimit = rsilimit1
//Body
body = abs(close - open)
abody = sma(body, 10)
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
overbought = rsi > uplimit
oversold = rsi < dnlimit
up1 = bar == -1 and strategy.position_size == 0 and overbought[1] and overbought == false
dn1 = bar == 1 and strategy.position_size == 0 and oversold[1] and oversold == false
up2 = bar == -1 and strategy.position_size > 0 and overbought == false
dn2 = bar == 1 and strategy.position_size < 0 and oversold == false
norma = overbought == false and oversold == false
exit = (((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body > abody / 2)
//Arrows
col = exit ? black : up1 or dn1 or up2 or dn2 ? blue : na
needup = up1 or up2
needdn = dn1 or dn2
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)
//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]
if up1 or up2
if strategy.position_size < 0
strategy.close_all()
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if dn1 or dn2
if strategy.position_size > 0
strategy.close_all()
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
strategy.close_all()