다중 RSI 지표 거래 전략


생성 날짜: 2023-11-28 15:03:53 마지막으로 수정됨: 2023-11-28 15:03:53
복사: 1 클릭수: 668
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

다중 RSI 지표 거래 전략

개요

다중 RSI 지표 거래 전략은 여러 RSI 지표를 조합하여 거래 기회를 식별하여 트렌드 추적을 구현합니다. 전략은 1-5 RSI 지표를 유연하게 사용하여 지표 값에 따라 입문 및 출퇴근 시간을 판단합니다.

전략 원칙

이 전략은 입력 변수를 선택하여 1-5 RSI 지표를 사용하며, 각 RSI 지표는 개별적으로 변수 기간 수와 제한 값을 구성할 수 있습니다. 임의의 RSI 지표 값이 해당 제한 값보다 낮을 때 구매 신호가 발생하면 신호 강도는 신호를 유발하는 RSI 지표 기간 수에 의해 결정되며, 기간이 높을수록 신호가 더 강합니다. RSI 지표가 제한 값을 넘어서면 평점 신호가 발생합니다.

우위 분석

이 전략의 가장 큰 장점은 여러 주기 RSI 지표를 동시에 평가하여 장단한 여러 차원에서 트렌드 및 역전 기회를 판단하여 거래 의사 결정의 정확성을 높일 수 있다는 것입니다. 또한, 전략은 각 RSI 지표의 매개 변수를 자유롭게 구성하여 다른 시장에 맞게 조정할 수 있으며, 전략의 적응력을 크게 확장 할 수 있습니다. 색상 필터링을 통해 가짜 돌파구를 효과적으로 필터링 할 수 있습니다. 또한 거래 시간 및 포지션 제어 모듈을 추가하여 위험을 효과적으로 제어 할 수 있습니다.

위험 분석

이 전략의 주요 위험은 여러 RSI 지표의 조합을 판단할 때 신호 충돌이 발생할 수 있는 상황이다. 예를 들어, 단기 RSI는 구매 신호를 발생시키지만, 장기 RSI는 여전히 과매매 상태이다. 이때 정확히 어떤 신호를 기준으로 거래자의 자신의 경험을 결합해야 하는지에 대한 결정이 필요하다. 또한, RSI 지표는 흔들림 상황에 착각하기 쉬우며, 이것은 보조 지표 또는 큰 자본의 계정으로 검증해야 한다.

최적화 방향

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