
Chiến lược này kết hợp hai chỉ số Renko Graph và Relative Vibration Index (RVI) nhằm mục đích nắm bắt hầu hết các xu hướng chính của thị trường. Nó áp dụng cho các loại chính như Bitcoin, Thang và các loại khác.
Chiến lược sử dụng ATR 9 ngày để xây dựng Renko, khi giá đóng cửa vượt quá mức cao của Renko trước đó, xây dựng một mức mới, màu xanh lá cây; khi giá đóng cửa thấp hơn mức thấp của Renko trước đó, xây dựng một mức mới, màu đỏ. kết hợp với chỉ số RVI để xác định hướng xu hướng.
Chỉ số RVI được sử dụng để đánh giá cường độ tương đối của lực đa đầu và lực đầu không. Giá trị RVI dao động trong khoảng 0-1, cao hơn 0,5 đại diện cho lực đa đầu mạnh hơn lực đầu không; thấp hơn 0,5 đại diện cho lực đầu không mạnh hơn lực đa đầu. Khi RVI đi qua đường trung bình di chuyển trơn của nó, đại diện cho lực đầu không yếu đi, lực đa đầu tăng lên, cho tín hiệu nhiều hơn; khi RVI đi qua đường trung bình di chuyển trơn của nó, đại diện cho lực đa đầu yếu đi, lực đầu không tăng lên, cho tín hiệu trống.
Tích hợp hướng Renko và chỉ số RVI để tạo tín hiệu giao dịch nhiều đầu vào vị trí giao dịch nhiều đầu hoặc trống tương ứng.
Chiến lược này kết hợp các ưu điểm của hai loại chỉ số khác nhau, với mục tiêu nắm bắt xu hướng chính của thị trường. Sự ổn định cao hơn có thể đạt được bằng cách tối ưu hóa các tham số Renko và 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")