이 전략은 Renko 차트와 상대적 활력 지수 (RVI) 를 결합하여 대부분의 주요 시장 트렌드를 포착합니다. BTCUSD, HSI 등과 같은 주요 기호에서 잘 작동합니다.
이 전략은 9기 ATR을 기반으로 렌코 벽돌을 구성합니다. 닫는 가격이 이전 벽돌의 최고치를 초과하면 새로운 녹색 벽돌이 구성됩니다. 닫는 가격이 이전 벽돌의 최저 수준 이하로 떨어지면 새로운 빨간 벽돌이 구성됩니다. 트렌드 방향은 RVI 지표에 의해 결정됩니다.
RVI는 구매 및 판매 압력 사이의 상대적 강도를 측정하기 위해 0-1 사이로 변동합니다. 0.5 이상은 더 강한 구매 압력을 나타내고 0.5 이하는 더 강한 판매 압력을 나타냅니다. RVI가 매끄러운 이동 평균 이상으로 넘으면 판매 압력이 완화됨에 따라 구매 신호를 제공합니다. RVI를 넘으면 구매 압력이 완화됨에 따라 판매 신호를 제공합니다.
렌코 벽돌 방향과 RVI 신호를 결합하여 그에 따라 긴 또는 짧은 포지션을 입력합니다.
이 전략은 주요 트렌드를 포착하기 위해 두 가지 다른 유형의 지표를 결합합니다. 렌코와 RVI 매개 변수에 대한 추가 최적화는 안정성을 향상시킬 수 있습니다. 어떤 모델도 완벽하지 않으며 일부 거래를 놓치는 것은 불가피합니다. 사용자는 자신의 위험 선호도를 평가하고 적절한 기호 / 매개 변수 조합을 선택해야합니다.
/*backtest start: 2023-01-28 00:00:00 end: 2024-02-03 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Lancelot RR Strategy", overlay=false) p=9 CO=close-open HL=high-low value1 = (CO + 2*CO[1] + 2*CO[2] + CO[3])/6 value2 = (HL + 2*HL[1] + 2*HL[2] + HL[3])/6 num=sum(value1,p) denom=sum(value2,p) RVI=denom!=0?num/denom:0 RVIsig=(RVI+ 2*RVI[1] + 2*RVI[2] + RVI[3])/6 rvicloselongcondition = crossunder(RVI, RVIsig) rvicloseshortcondition = crossover(RVI, RVIsig) plot(RVI,color=green,style=line,linewidth=1) plot(RVIsig,color=red,style=line,linewidth=1) bgcolor(rvicloseshortcondition ? green : na, transp = 75) bgcolor(rvicloselongcondition ? red : na, transp = 75) ///Renko/// TF = input(title='TimeFrame', defval="D") ATRlength = input(title="ATR length", defval=9, minval=2, maxval=100) SMAlength = input(title="SMA length", defval=5, minval=2, maxval=100) SMACurTFlength = input(title="SMA CurTF length", defval=20, minval=2, maxval=100) HIGH = request.security(syminfo.tickerid, TF, high) LOW = request.security(syminfo.tickerid, TF, low) CLOSE = request.security(syminfo.tickerid, TF, close) ATR = request.security(syminfo.tickerid, TF, atr(ATRlength)) SMA = request.security(syminfo.tickerid, TF, sma(close, SMAlength)) SMACurTF = sma(close, SMACurTFlength) RENKOUP = na RENKODN = na H = na COLOR = na BUY = na SELL = na UP = na DN = na CHANGE = na RENKOUP := na(RENKOUP[1]) ? ((HIGH+LOW)/2)+(ATR/2) : RENKOUP[1] RENKODN := na(RENKOUP[1]) ? ((HIGH+LOW)/2)-(ATR/2) : RENKODN[1] H := na(RENKOUP[1]) or na(RENKODN[1]) ? RENKOUP-RENKODN : RENKOUP[1]-RENKODN[1] COLOR := na(COLOR[1]) ? white : COLOR[1] BUY := na(BUY[1]) ? 0 : BUY[1] SELL := na(SELL[1]) ? 0 : SELL[1] UP := false DN := false CHANGE := false if(not CHANGE and close >= RENKOUP[1]+H*3) CHANGE := true UP := true RENKOUP := RENKOUP[1]+ATR*3 RENKODN := RENKOUP[1]+ATR*2 COLOR := lime SELL := 0 BUY := BUY+3 if(not CHANGE and close >= RENKOUP[1]+H*2) CHANGE := true UP := true RENKOUP := RENKOUP[1]+ATR*2 RENKODN := RENKOUP[1]+ATR COLOR := lime SELL := 0 BUY := BUY+2 if(not CHANGE and close >= RENKOUP[1]+H) CHANGE := true UP := true RENKOUP := RENKOUP[1]+ATR RENKODN := RENKOUP[1] COLOR := lime SELL := 0 BUY := BUY+1 if(not CHANGE and close <= RENKODN[1]-H*3) CHANGE := true DN := true RENKODN := RENKODN[1]-ATR*3 RENKOUP := RENKODN[1]-ATR*2 COLOR := red BUY := 0 SELL := SELL+3 if(not CHANGE and close <= RENKODN[1]-H*2) CHANGE := true DN := true RENKODN := RENKODN[1]-ATR*2 RENKOUP := RENKODN[1]-ATR COLOR := red BUY := 0 SELL := SELL+2 if(not CHANGE and close <= RENKODN[1]-H) CHANGE := true DN := true RENKODN := RENKODN[1]-ATR RENKOUP := RENKODN[1] COLOR := red BUY := 0 SELL := SELL+1 plotshape(UP, style=shape.arrowup, location=location.bottom, size=size.normal) renkolongcondition = UP renkoshortcondition = DN ///Long Entry/// longcondition = UP if (longcondition) strategy.entry("Long", strategy.long) ///Long exit/// closeconditionlong = rvicloselongcondition if (closeconditionlong) strategy.close("Long")