다중 RSI 지표 거래 전략

저자:차오장, 날짜: 2023-11-28 15:03:53
태그:

img

전반적인 설명

멀티 RSI 지표 거래 전략은 트렌드를 추적하기 위해 여러 RSI 지표를 결합하여 거래 기회를 식별합니다. 전략은 1-5 RSI 지표를 유연하게 활용하고 지표 값에 따라 입출시기를 결정합니다.

전략 논리

이 전략은 입력 매개 변수를 통해 1-5개의 RSI 지표를 선택할 수 있다. 각 RSI 지표는 기간 및 한계 값으로 독립적으로 구성될 수 있다. 어떤 RSI가 한계 값 아래로 떨어지면 구매 신호가 트리거된다. 신호 강도는 트리거된 RSI 지표의 기간에 의해 결정되며, 더 높은 기간은 더 강한 신호를 의미한다. RSI가 한계를 넘어 다시 상승하면 클로즈 포지션 신호가 트리거된다. 이 전략은 컬러 필터를 사용하고 거래 시간을 제한할 수 있는 유연성을 제공한다.

이점 분석

이 전략의 가장 큰 장점은 정확성을 향상시키기 위해 다양한 RSI를 사용하여 여러 시간 프레임을 평가하는 능력이며, 트렌드 및 반전 기회를 길고 짧은 차원에서 판단하여 정확성을 향상시킵니다. 또한 각 RSI 지표의 유연한 구성은 다양한 시장에서 적응력을 크게 확장시킵니다. 가짜 브레이크오웃은 색상 필터를 사용하여 효율적으로 필터링 할 수 있습니다. 거래 시간 및 포지션 사이징과 같은 위험 관리 모듈은 효과적인 위험 관리를 제공합니다.

위험 분석

주요 위험은 여러 RSI 판단을 결합할 때 상충되는 신호입니다. 예를 들어, 짧은 RSI는 구매를 생성하고 더 긴 RSI는 여전히 과판됩니다. 어떤 신호가 우선 순위를 차지하는지 결정하려면 경험에 의존해야합니다. 또한, RSI는 다른 지표 또는 큰 계정을 사용하여 검증을 필요로하는 윙사 (wipssaws) 에 유연합니다.

최적화 방향

이 전략은 이동 평균 또는 볼린거 대역과 같은 트렌드 보조 지표를 추가하여 RSI 신호를 검증하고 정확도를 향상시킬 수 있습니다. 또한 특정 기계 학습 알고리즘도 탐색 할 수 있으며, 멀티-팩터 점수를 사용하여 신호 신뢰성을 자동으로 결정할 수 있습니다. 위험 통제를 위해 부동 손실 또는 최대 드라운 다운 스톱 라인을 중지 손실 목적으로 구현 할 수 있습니다.

요약

요약하자면, 멀티 RSI 지표 거래 전략은 매우 혁신적입니다. 지표 조합과 매개 변수에서의 유연성은 진화하는 시장에 적응 할 수있게합니다. 기계 학습 알고리즘과 모듈형 설계로 인해 더 많은 위험 관리 조치를 통합하여 추가 개선이 가능합니다.


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

//Noro
//2018
//@version=2

strategy(title = "Noro's Symphony Strategy v1.1", shorttitle = "Symphony str 1.1", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 20)

//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 = "Lot, %")
usersi1 = input(true, defval = true, title = "Use RSI 1")
rsiperiod1 = input(4, defval = 4, minval = 2, maxval = 100, title = "RSI 1 Period")
rsilimit1 = input(20, defval = 20, minval = 2, maxval = 50, title = "RSI 1 Limit")
usersi2 = input(true, defval = true, title = "Use RSI 2")
rsiperiod2 = input(7, defval = 7, minval = 2, maxval = 100, title = "RSI 2 Period")
rsilimit2 = input(25, defval = 25, minval = 2, maxval = 50, title = "RSI 2 Limit")
usersi3 = input(true, defval = true, title = "Use RSI 3")
rsiperiod3 = input(14, defval = 14, minval = 2, maxval = 100, title = "RSI 3 Period")
rsilimit3 = input(30, defval = 30, minval = 2, maxval = 50, title = "RSI 3 Limit")
usersi4 = input(false, defval = false, title = "Use RSI 4")
rsiperiod4 = input(21, defval = 21, minval = 2, maxval = 100, title = "RSI 4 Period")
rsilimit4 = input(35, defval = 35, minval = 2, maxval = 50, title = "RSI 4 Limit")
usersi5 = input(false, defval = false, title = "Use RSI 5")
rsiperiod5 = input(28, defval = 28, minval = 2, maxval = 100, title = "RSI 5 Period")
rsilimit5 = input(40, defval = 40, minval = 2, maxval = 50, title = "RSI 5 Limit")
cf = input(false, defval = false, title = "Use color filter")
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
rsi1 = rsi(close, rsiperiod1)
rsi2 = rsi(close, rsiperiod2)
rsi3 = rsi(close, rsiperiod3)
rsi4 = rsi(close, rsiperiod4)
rsi5 = rsi(close, rsiperiod5)

//Signals
up1 = rsi1 < rsilimit1 and usersi1  
up2 = rsi2 < rsilimit2 and usersi2
up3 = rsi3 < rsilimit3 and usersi3
up4 = rsi4 < rsilimit4 and usersi4
up5 = rsi5 < rsilimit5 and usersi5

str = up5 ? 5 : up4 ? 4 : up3 ? 3 : up2 ? 2 : up1 ? 1 : str[1]
up = up1 or up2 or up3 or up4 or up5
exit = (rsi1 > rsilimit1 and str == 1) or (rsi2 > rsilimit2 and str == 2) or (rsi3 > rsilimit3 and str == 3) or (rsi4 > rsilimit4 and str == 4) or (rsi5 > rsilimit5 and str == 5)
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]

//Background
col = up ? lime : na
bgcolor(col, transp = 0)

//Trading
if up and (close < open or cf == false)
    strategy.entry("Long", strategy.long, 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()

더 많은