이 전략은 RSI 지표의 과잉 구매 및 과잉 판매 원칙을 활용하고, 다주기 RSI를 결합하여 신호를 생성하여, 사이클 연산을 실현합니다. 이 전략은 RSI의 사이클 설정에 따라 과잉 구매 및 과잉 판매 신호를 판단하고, 잘못된 신호를 피하기 위해 RSI의 이동 평균을 필터링으로 사용합니다. RSI가 이동 평균을 넘어서면 구매 신호를 생성하고, 아래를 넘어가면 판매 신호를 생성하여 전형적인 이동 평균 크로스오버 운영 모드를 형성합니다.
이 전략은 주로 RSI 지표의 과잉 매수 및 과잉 판매 판단을 통해 거래 신호를 생성합니다. RSI는 상대적 강도 지수를 의미합니다. 그 공식은: RSI = 100 - (100 / (1 + RS)), 여기서 RS는 기간 동안 평균 폐쇄 손실에 대한 평균 폐쇄 이익의 비율입니다. RSI 지표는 0에서 100까지 다양하며 일반적으로 30 이하의 과잉 매매와 70 이상으로 간주됩니다.
이 전략은 높은 매개 변수 sobrecompra와 낮은 매개 변수 sobreventa를 설정합니다. RSI가 sobrecompra보다 높을 때, 그것은 과소매로 판단됩니다. RSI가 sobreventa보다 낮을 때, 그것은 과소매로 판단됩니다. 전략에서 sobrecompra와 sobreventa의 기본 값은 각각 70과 30입니다.
구매 및 판매 신호를 생성하기 위해 전략은 필터링을 위해 RSI 지표의 이동 평균 라인을 사용합니다. RSI가 이동 평균 라인을 넘을 때 구매 신호 Es_compra가 생성됩니다. RSI가 이동 평균 라인을 넘을 때 판매 신호 Es_venta가 생성됩니다. 이동 평균 매개 변수 periodos_media는 14 기간으로 기본 설정됩니다.
구매 및 판매 신호를 생성 한 후 전략은 긴 또는 짧은 거래를위한 포지션을 열고 또한 전략은 과도한 손실을 방지하고 이익을 잠금하기 위해 Stop Loss 및 Take Profit을 비율로 설정합니다.
RSI 인디케이터를 사용하여 과잉 구매 및 과잉 판매 상황을 판단하고, 최고와 판매 최저를 쫓는 것을 피하십시오.
거짓 신호를 피하기 위해 RSI 지표의 이동 평균을 필터링에 적용합니다.
더 안정적인 거래 신호를 생성하기 위해 RSI 지표의 다주기 설정을 결합합니다.
스톱 로스를 설정하고 수익 메커니즘을 취하여 위험을 효과적으로 제어합니다.
전략 논리는 간단하고 명확하고 이해하기 쉽고 수정하기 쉽습니다.
사용자 정의 가능한 매개 변수, 다른 제품과 주기에 적응 할 수 있습니다.
RSI 지표는 지연 효과를 가지고 있으며 가격 반전을위한 가장 좋은 시기를 놓칠 수 있습니다.
이동평균은 트레이딩 신호의 지연을 일으켜 트렌드 반전을 적시에 파악할 수 없습니다.
고정된 과반 구매 및 과반 판매 매개 변수 설정은 충분히 유연하지 않으며, 다른 주기와 제품에 대한 조정이 필요합니다.
부적절한 스톱 로스 및 수익 취득 설정은 손실 또는 손실을 초래할 수 있습니다.
롱 포지션과 쇼트 포지션은 1 롯에 불과하며 스프레드 거래에 자금을 완전히 활용할 수 없습니다.
거래 신호 판단을 위해 MACD, KD와 같은 다른 지표를 결합하십시오.
트렌드를 추적하기 위해 적응 이동 평균을 적용합니다.
역동적인 과잉 구매와 과잉 판매 매개 변수를 설정하고 시장 변동성에 따라 조정합니다.
스톱 로스를 최적화하고 수익을 취하는 알고리즘, 예를 들어 트레일링 스톱 로스.
포지션 관리 메커니즘을 추가하고 자본 규모에 따라 포지션을 동적으로 조정합니다.
범위에 묶인 시장에서 빈번한 거래를 피하기 위해 트렌드 필터링을 추가합니다.
파라미터 최적화를 위해 백테스트하고 최적의 파라미터 조합을 선택합니다.
이 전략은 RSI 지표의 과반 구매 및 과반 판매 원리에 기반하고 있으며, 일반적인 크로스 사이클 거래를 실현하여 거래 신호를 생성하기 위해 필터링을 위해 이동 평균을 사용합니다. 이 전략은 명확한 논리적 구조와 매개 변수 설정을 가지고 있으며, 매개 변수 조정을 통해 다른 제품과 주기에 적응 할 수 있으며, 신뢰할 수 있고 효과적인 크로스 사이클 거래 전략으로 만들어집니다. 그러나 RSI 및 이동 평균과 같은 도구에도 한계가 있습니다. 전략 매개 변수를 더 적응력있게 만들고, 필터링 효과를 더 잘 만들고, 위험을 낮추고 수익을 최대한 높이기 위해 추가 최적화가 필요합니다.
/*backtest start: 2023-09-01 00:00:00 end: 2023-09-30 23:59:59 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © samuelkanneman //@version=4 strategy("RSI KANNEMAN") //////Entrada/////// i_startTime = input(title="Start Date Filter", defval=timestamp("01 Nov 2020 13:30 +0000"), type=input.time, tooltip="Date & time to begin trading from") i_endTime = input(title="End Date Filter", defval=timestamp("1 Nov 2022 19:30 +0000"), type=input.time, tooltip="Date & time to stop trading") sobrecompra= input(70, title="Sobre Compra", type=input.integer ,minval=50, maxval=100 ) sobreventa= input(30, title="Sobre Venta", type=input.integer ,minval=0, maxval=50 ) l1=hline(sobrecompra) l2=hline(sobreventa, color=color.purple) periodos= input(14, title="Periodos", type=input.integer ,minval=1, maxval=50 ) periodos_media= input(14, title="Logintud media movil", type=input.integer ,minval=1, maxval=200 ) var SL =0.0 var TP=0.0 StopLoss = input(2.0, title="SL %", step=0.2) TakeProfit = input(5.0, title="TP %", step=0.2) //////Proceso/////// mi_rsi=rsi(close,periodos) mm_rsi=sma(mi_rsi,periodos_media) Es_compra= crossover(mm_rsi,sobreventa) Es_venta= crossunder(mm_rsi,sobrecompra) comprado= strategy.position_size > 0 vendido = strategy.position_size < 0 //time to test dateFilter = true //timePeriod = time >= timestamp(syminfo.timezone, 2020, 11, 1, 0, 0) // long if (not comprado and Es_compra and dateFilter ) // realizar long cantidad = strategy.equity/hlc3 strategy.entry ("compra", strategy.long , cantidad) SL := close*(1-(StopLoss/100)) TP := close*(1+(TakeProfit/100)) if close >= TP strategy.close ("compra" , comment="Salto TP") if (comprado and Es_venta ) strategy.close ("compra" , comment="Sobre Venta") if close <= SL strategy.close ("compra" , comment="Salto SL") // short if (not vendido and Es_venta and dateFilter ) // realizar short cantidad = strategy.equity/hlc3 strategy.entry ("venta", strategy.short , cantidad) SL := close*(1+(StopLoss/100)) TP := close*(1-(TakeProfit/100)) if close <= TP strategy.close ("venta" , comment="Salto TP") if (vendido and Es_compra ) strategy.close ("venta" , comment="Sobre Compra") if close >= SL strategy.close ("venta" , comment="Salto SL") ///////Salida////// fill(l1,l2) plot(mi_rsi) plot(mm_rsi, color=color.yellow) bgcolor(Es_compra ? color.blue : na , transp=0) bgcolor(Es_venta ? color.red : na , transp=0) // 1d 70 22 5 4 3 15 6 meses //1h 70 20 6 4 5 7 1 mese //15m 70 20 5 4 4 7 1 semana