Chiến lược theo xu hướng dựa trên Renko và chỉ số sức sống tương đối


Ngày tạo: 2024-02-04 15:49:19 sửa đổi lần cuối: 2024-02-04 15:49:19
sao chép: 1 Số nhấp chuột: 686
1
tập trung vào
1617
Người theo dõi

Chiến lược theo xu hướng dựa trên Renko và chỉ số sức sống tương đối

Tổng quan

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.

Nguyên tắc chiến lượ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.

Lợi thế chiến lược

  1. Renko đã cố gắng tách biệt sự biến động bình thường của thị trường, chỉ chú ý đến những biến động giá lớn hơn, để tránh bị đè nén.
  2. Chỉ số RVI đánh giá thời gian thay đổi xu hướng và khóa thêm tín hiệu giao dịch.
  3. Kết hợp hai chỉ số để lọc, có thể nắm bắt hiệu quả các xu hướng thị trường chính, lọc ra một phần của tiếng ồn.

Phân tích rủi ro

  1. Kích thước của Renko ảnh hưởng trực tiếp đến tần suất giao dịch, và sự thiếu hụt của nó sẽ làm tăng tần suất giao dịch và phí xử lý.
  2. Việc đặt tham số chỉ số RVI không đúng cũng có thể dẫn đến tín hiệu bị bỏ lỡ hoặc tăng cường tín hiệu giả.
  3. Các bộ lọc chỉ số đôi sẽ bỏ lỡ một số tín hiệu và không thể nắm bắt được toàn bộ tình hình.

Hướng tối ưu hóa

  1. Động thái tối ưu hóa kích thước Renko để nó thích nghi với sự biến động của thị trường.
  2. Tối ưu hóa các tham số chỉ số RVI để tìm điểm cân bằng tốt nhất.
  3. Cố gắng kết hợp các tham số khác nhau và chu kỳ để đánh giá sự ổn định.

Tóm tắt

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.

Mã nguồn chiến lược
/*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")