듀얼 RSI 브레이크아웃 전략은 RSI 지표를 사용하여 가격 반전 지점을 식별하는 알고리즘 거래 전략입니다. 시장이 과소매 또는 과소매인지 결정하기 위해 RSI 지표를 미리 설정된 상위 및 하위 임계 값과 비교하여 거래 신호를 생성합니다.
이 전략은 주로 시장 상태를 판단하기 위해 RSI 지표에 의존합니다. RSI 지표는 특정 기간 동안 종점 가격의 변화를 기반으로 계산되며 주식의 구매 및 판매 동력을 반영합니다. RSI가 미리 설정된 상위 임계 (디폴트 75) 를 넘을 때 주식이 과소매 구역에 진입했음을 나타냅니다. RSI가 미리 설정된 하위 임계 (디폴트 25) 아래로 떨어지면 주식이 과소매 구역에 진입했음을 나타냅니다.
판단 규칙은 다음과 같습니다.
거래 논리는 간단하고 명확하며 합리적인 참조 매개 변수 설정과 큰 구성 공간으로 시장의 더 큰 추세를 포착하기에 적합합니다.
이 전략의 장점은 다음과 같습니다.
일반적으로 합리적인 기준 매개 변수 설정, 간단한 구현 및 RSI를 통해 가격 반전을 효과적으로 결정 할 수있는 능력으로이 전략은 중장기 트렌드 포착에 적합하며 수치 전략으로 이해하기 쉽고 사용하기 쉽습니다.
이 전략은 비교적 간단하고 신뢰할 수 있음에도 불구하고 잠재적인 위험을 무시할 수는 없습니다.
위험 을 조절 하기 위해 다음 과 같은 점 들 에 주의 를 기울여야 합니다.
이 전략에 직면한 주요 위험은 역전 판단과 다양한 시장에서 손실을 고려하면 다음 측면에서 최적화 할 수 있습니다.
요약하자면, 이중 RSI 브레이크아웃 전략은 간단하고 실용적인 양적 전략이다. 그것은 단순한 트렌드를 따라하기 위해 RSI를 통해 가격 반전을 식별한다. 일부 잘못된 판단 위험이 존재하지만, 매개 변수 조정, 신호 필터링과 같은 최적화는 이를 완화하고 중장기 트렌드를 파악하는 데 중요한 역할을 할 수 있다. 그것의 논리는 간단하며, 초보자 양자가 참조하고 배울 수 있도록 적합하다. 추가 최적화로, 이 전략은 비교적 안정적인 양적 수익을 얻는 데 유망하는 것을 보여준다.
/*backtest start: 2023-12-19 00:00:00 end: 2023-12-26 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("RSI Algo", overlay=true) // Calculate start/end date and time condition DST = 1 //day light saving for usa //--- Europe London = iff(DST==0,"0000-0900","0100-1000") //--- America NewYork = iff(DST==0,"0400-1500","0500-1600") //--- Pacific Sydney = iff(DST==0,"1300-2200","1400-2300") //--- Asia Tokyo = iff(DST==0,"1500-2400","1600-0100") //-- Time In Range timeinrange(res, sess) => time(res, sess) != 0 london = timeinrange(timeframe.period, London) newyork = timeinrange(timeframe.period, NewYork) time_cond = true myPeriod = input(defval=14, type=input.integer, title="Period") myThresholdUp = input(defval=75, type=input.float, title="Upper Threshold") myThresholdDn = input(defval=25, type=input.float, title="Lower Threshold") myAlgoFlipToggle = input(defval=false, type=input.bool, title="Imverse Algorthim") myLineToggle = input(defval=true, type=input.bool, title="Show Lines") myLabelToggle = input(defval=true, type=input.bool, title="Show Labels") myRSI=rsi(close, myPeriod) buy = myAlgoFlipToggle ? falling(myRSI,1) and cross(myRSI, myThresholdDn) : rising(myRSI, 1) and cross(myRSI,myThresholdUp) //and time_cond sell = myAlgoFlipToggle ? rising(myRSI, 1) and cross(myRSI,myThresholdUp) : falling(myRSI,1) and cross(myRSI, myThresholdDn) //and time_cond myPosition = 0 myPosition := buy==1 ? 0 : sell==1 or myPosition[1]==1 ? 1 : 0 trendColor = buy ? color.red : sell ? color.green : na plot(myLineToggle ? buy and myPosition[1]==1 ? low - 0.004: sell and myPosition[1]==0 ? high + 0.004 : na : na, color=trendColor, style=plot.style_line, linewidth=4, editable=false) plotshape(myLabelToggle ? buy and myPosition[1]==1 ? low - 0.005 : na : na, style=shape.labelup, location=location.absolute, text="Buy", transp=0, textcolor = color.white, color=color.black, editable=false) plotshape(myLabelToggle ? sell and myPosition[1]==0 ? high + 0.005 : na : na, style=shape.labeldown, location=location.absolute, text="Sell", transp=0, textcolor = color.white, color=color.black, editable=false) strategy.initial_capital = 50000 //Calculate the size of the next trade balance = strategy.netprofit + strategy.initial_capital //current balance floating = strategy.openprofit //floating profit/loss risk = input(2,type=input.float,title="Risk %")/100 //risk % per trade isTwoDigit = input(false,"Is this a 2 digit pair? (JPY, XAU, XPD...") stop = input(250, title="stop loss pips") tp = input(2500, title="take profit pips") if(isTwoDigit) stop := stop/100 temp01 = balance * risk //Risk in USD temp02 = temp01/stop //Risk in lots temp03 = temp02*100000 //Convert to contracts size = 1 strategy.entry("long",1,size,when=buy and myPosition[1]==1 ) strategy.entry("short",0,size,when=sell and myPosition[1]==0) strategy.exit("exit_long","long",loss=stop, profit=tp) //Long exit (stop loss) strategy.exit("exit_short","short",loss=stop, profit=tp) //Short exit (stop loss) //strategy.close_all(when= not time_cond)