렌코와 상대적 활력 지수 트렌드 전략

저자:차오장, 날짜: 2024-02-04 15:49:19
태그:

img

전반적인 설명

이 전략은 Renko 차트와 상대적 활력 지수 (RVI) 를 결합하여 대부분의 주요 시장 트렌드를 포착합니다. BTCUSD, HSI 등과 같은 주요 기호에서 잘 작동합니다.

전략 논리

이 전략은 9기 ATR을 기반으로 렌코 벽돌을 구성합니다. 닫는 가격이 이전 벽돌의 최고치를 초과하면 새로운 녹색 벽돌이 구성됩니다. 닫는 가격이 이전 벽돌의 최저 수준 이하로 떨어지면 새로운 빨간 벽돌이 구성됩니다. 트렌드 방향은 RVI 지표에 의해 결정됩니다.

RVI는 구매 및 판매 압력 사이의 상대적 강도를 측정하기 위해 0-1 사이로 변동합니다. 0.5 이상은 더 강한 구매 압력을 나타내고 0.5 이하는 더 강한 판매 압력을 나타냅니다. RVI가 매끄러운 이동 평균 이상으로 넘으면 판매 압력이 완화됨에 따라 구매 신호를 제공합니다. RVI를 넘으면 구매 압력이 완화됨에 따라 판매 신호를 제공합니다.

렌코 벽돌 방향과 RVI 신호를 결합하여 그에 따라 긴 또는 짧은 포지션을 입력합니다.

장점

  1. 렌코 벽돌은 정상적인 시장 소음을 필터링하고 중요한 가격 움직임에만 반응하며, 휘프사이를 피합니다.
  2. RVI는 트렌드 반전을 식별하고 거래 신호를 더 확인하는 데 도움이됩니다.
  3. 두 가지 지표를 결합하면 소음을 필터링하고 주요 추세를 파악할 수 있습니다.

위험성

  1. 벽돌 크기는 거래 빈도에 직접 영향을 미칩니다. 너무 큰 벽돌은 기회를 놓칠 수 있지만 너무 작으면 비용을 증가시킵니다.
  2. 부적절한 RVI 매개 변수는 신호가 누락되거나 더 많은 잘못된 신호를 일으킬 수 있습니다.
  3. 이중 필터링은 거래 기회를 놓치게 합니다.

강화

  1. 변동성 변화에 적응할 수 있는 동적 크기의 벽돌
  2. 가장 좋은 균형을 찾기 위해 RVI 매개 변수를 최적화하십시오.
  3. 다른 기호와 시간 프레임에서 안정성을 테스트합니다.

결론

이 전략은 주요 트렌드를 포착하기 위해 두 가지 다른 유형의 지표를 결합합니다. 렌코와 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")

더 많은