동적 RSI 오스실레이션 거래 전략

저자:차오장, 날짜: 2023-11-02 16:04:07
태그:

img

전반적인 설명

이 전략은 동적 지지/저항 수준과 상대적 강도 지표 (RSI) 지표를 결합합니다. 그것은 RSI에 대한 과잉 구매/ 과잉 판매 임계치를 설정하고, RSI가 과잉 구매/ 과잉 판매 영역에 있지 않은 상태에서 가격이 동적 지지/ 저항 수준을 넘을 때 구매/ 판매 신호를 생성합니다.

원칙

1. 역동적 지원/저항

보안 함수를 사용하여 닫기 가격을 동적 지지/저항 수준으로 얻습니다. 거래 신호는 가격이 이러한 동적 수준을 통과 할 때 생성됩니다.

2. RSI 지표

특정 기간 동안의 평균 이익과 평균 손실을 계산하여 RSI 값을 생성하고 RSI가 과잉 구매/ 과잉 판매 영역에 도달하는지 여부를 결정합니다.

3. 거래 신호

가격이 동적 수준을 넘어서면, 만약 RSI가 과잉 구매/ 과잉 판매 영역에 있지 않다면, 구매/ 판매 신호가 생성됩니다. 그렇지 않으면, 브레이크 아웃 신호는 무시됩니다.

4. 출구 신호

가격이 역동적인 수준으로 떨어지거나 RSI가 정상 범위에 돌아왔을 때 포지션을 닫습니다.

이점 분석

  1. 더 높은 승률을 위해 동적 지원/항항항을 사용하여 트렌드 방향을 결정합니다.

  2. RSI는 가짜 유출을 필터링하고 가짜 입력을 피합니다.

  3. 추세와 지표를 결합하면 전략이 다른 시장 조건에 적응 할 수 있습니다.

  4. 간단하고 명확한 규칙은 쉽게 적용할 수 있습니다.

위험 과 해결책

  1. 다중 테스트에서 잘못된 신호가 나올 수 있습니다

  2. 솔로 RSI는 잘못된 판단을 일으킬 수 있습니다. 콤보 필터링을 위해 다른 지표를 추가하십시오.

  3. 범위에 한정된 시장에서 빈번하게 거래하면 더 높은 비용이 발생합니다.

  4. 부적절한 매개 변수 설정으로 인해 신호가 누락되거나 잘못된 신호가 발생합니다. 다른 자산에 기반한 매개 변수를 최적화하십시오.

최적화 방향

  1. 기계 학습을 사용하여 RSI 매개 변수를 자동으로 최적화합니다.

  2. 스톱 로스/이익 취득 전략을 추가하여 수익을 확보하고 손실을 줄이세요.

  3. 안정성을 높이기 위해 콤보 필터링을 위한 더 많은 지표를 포함합니다.

  4. 변동성이 낮을 때 변동성 지표를 더 낮은 포지션 크기에 추가합니다.

  5. 포지션 사이징 알고리즘을 최적화하여 다른 시장 환경에 따라 포지션을 동적으로 조정합니다.

요약

이 전략은 트렌드 판단과 지표 필터링을 결합하여 주요 수준 주변 트렌드 반전을 효과적으로 파악하고 위험을 제어합니다. 매개 변수 조정, 스톱 손실 / 이익 취득, 더 많은 지표 등을 추가적으로 최적화하면 안정성과 적응력을 향상시켜 더 넓은 범위의 시장에서 안정적인 이익을 창출 할 수 있습니다.


/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Levels+RSI Strategy v1.0", shorttitle = "Levels+RSI str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
tf = input('W', title = "timeframe 1")
src = input(ohlc4, "Source")
ap = input(true, defval = true, title = "antipila")
cf = input(true, defval = true, title = "color filter")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 100, title = "RSI Period")
rsilimit = input(30, defval = 30, minval = 1, maxval = 50, title = "RSI Limit")
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")

//Level
level = request.security(syminfo.tickerid, tf, src[1])
plot(level, linewidth = 3, color = silver)

//RSI
uprsi = rma(max(change(close), 0), rsiperiod)
dnrsi = rma(-min(change(close), 0), rsiperiod)
rsi = dnrsi == 0 ? 100 : uprsi == 0 ? 0 : 100 - (100 / (1 + uprsi / dnrsi))

//Level Signals
ls = close > level and ap == false ? true : low > level ? true : false
up1 = strategy.position_size == 0 and ls and (close < open or cf == false)
exit1 = close < level and ap == false ? true : high < level ? true : false 

//RSI Signal

up2 = rsi < rsilimit and (close < open or cf == false)
exit2 = rsi > rsilimit and ls == false

//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]

if up1 or up2 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
    
if  (exit1 and rsi > rsilimit) or exit2
    strategy.close_all()

더 많은