역 RSI 기반 놓친 신호 추적 거래 전략


생성 날짜: 2023-09-28 10:54:24 마지막으로 수정됨: 2023-09-28 10:54:24
복사: 1 클릭수: 693
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

개요

이 전략은 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)

전략적 이점

  1. RSI 지표가 놓친 반전 신호를 추적하여 과매도 과매도 시점을 잡는 데 필요한 어려움을 피하십시오.

  2. RSI의 역전 속성을 활용하여 역전 기회를 잡습니다.

  3. K선 엔티티의 방향과 크기를 결합하여 탈퇴 판단을 하고, 반발 후 추적을 계속하는 것을 피한다.

위험과 해결책

  1. RSI 지표가 잘못된 신호를 보내는 위험

    • 해결 방법: 다른 지표와 함께 확인하고, 오해의 소지가 없도록 하십시오.
  2. 신호를 추적할 때, 가격이 이미 어느 정도 조정되었을 수도 있고, 손실 위험이 높을 수도 있습니다.

    • 해결책: 입점 포지션을 줄이거나, 입점 시점을 최적화하십시오.
  3. 일부 반발이 수익을 내지 못하면 탈퇴 신호를 발산할 위험이 있습니다.

    • 해결 방법: 탈퇴 판단 논리를 최적화하여 지분을 보유하여 수익을 올릴 수 있는 기회를 개선한다.

더 나은 생각

  1. 최적화 매개 변수 설정, 예를 들어 오버 바이 오버 세일 라인, 회전 사이클 등, 다른 시장에 맞게 조정한다.

  2. 포지션 관리 방법을 조정합니다. 예를 들어 신호를 추적 할 때 포지션을 낮추십시오.

  3. 접속 시점을 최적화하고, 추적 신호를 기반으로, 다른 조건 제한을 추가한다.

  4. 이동식 결제와 같은 탈퇴 방법을 최적화하여 수익률을 높여줍니다.

  5. 손실을 줄이기 위한 최적화된 방법, 이동적 손실, 형 손실 등의 도입

요약하다

이 전략은 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()