Chiến lược đảo ngược xu hướng dựa trên Renko Average True Range


Ngày tạo: 2024-02-01 14:30:24 sửa đổi lần cuối: 2024-02-01 14:30:24
sao chép: 0 Số nhấp chuột: 1467
1
tập trung vào
1617
Người theo dõi

Chiến lược đảo ngược xu hướng dựa trên Renko Average True Range

Tổng quan

Chiến lược đảo ngược xu hướng dựa trên bước sóng trung bình thực tế của Renko (Renko ATR Trend Reversal Strategy) là một chiến lược giao dịch độc đáo nhằm sử dụng biểu đồ Renko kết hợp với chỉ số ATR để xác định điểm đảo ngược xu hướng của thị trường tài chính. Chiến lược này loại bỏ các vấn đề về việc vẽ đồ thị của Renko, có thể nắm bắt chính xác các điểm biến đổi và cung cấp tín hiệu rõ ràng cho các quyết định giao dịch.

Nguyên tắc chiến lược

Tạo khối Renko

Chiến lược này đầu tiên tính toán giá trị ATR trong một chu kỳ nhất định và lấy ATR này làm chuẩn để thiết lập kích thước khối của biểu đồ Renko. Một khối Renko mới được vẽ khi giá thay đổi vượt quá một ATR. Bằng cách này, biểu đồ Renko có thể tự động thích ứng với mức độ biến động của thị trường, thiết lập kích thước khối lớn hơn khi biến động cao và kích thước khối nhỏ hơn khi biến động thấp.

Mua và bán tín hiệu tạo

Khi Renko mở giá dưới giá đóng cửa, tạo ra tín hiệu mua; khi Renko mở giá trên giá đóng cửa, tạo ra tín hiệu bán. Những tín hiệu này đánh dấu điểm đảo ngược xu hướng tiềm ẩn.

Cài đặt dừng và dừng

Chiến lược này sẽ thiết lập giá dừng lỗ và giá dừng cho mỗi giao dịch dựa trên tỷ lệ phần trăm dừng lỗ và tỷ lệ phần trăm dừng lỗ mà người dùng đã xác định, sử dụng giá mở cửa của Renko làm giá trị cơ bản, kiểm soát rủi ro và lợi nhuận cho mỗi giao dịch.

Phân tích lợi thế

Loại bỏ Backmapping

Chiến lược này đã loại bỏ các vấn đề về lập bản đồ chậm trễ bằng cách tính toán thủ công giá mở và giá đóng của Renko, làm cho tín hiệu được tạo ra chính xác và kịp thời hơn.

Tự động thích ứng với biến động thị trường

Thiết lập kích thước khối Renko dựa trên chỉ số ATR cho phép chiến lược tự động thích ứng với biến động giá trong các điều kiện thị trường khác nhau.

Dynamic Stop Loss Stop được thiết lập

Chiến lược này thiết lập các cơ chế dừng và dừng động cho mỗi giao dịch, có thể kiểm soát rủi ro theo mức độ biến động của thị trường.

Khung đồ đơn giản

Bản thân biểu đồ Renko có thể loại bỏ tiếng ồn của thị trường và cung cấp hiệu ứng trực quan rõ ràng và ngắn gọn khi nhận ra xu hướng đảo ngược.

Phân tích rủi ro

Rủi ro tối ưu hóa tham số

Người dùng cần tối ưu hóa các tham số như chu kỳ ATR, tỷ lệ phần trăm dừng và tỷ lệ phần trăm dừng để phù hợp với môi trường thị trường khác nhau. Nếu các tham số được thiết lập không đúng cách, sẽ dẫn đến hiệu quả chiến lược kém.

Rủi ro của sự kiện bất ngờ

Các sự kiện kinh tế quan trọng hoặc chính sách có thể dẫn đến tăng giá nhanh, do đó, mức dừng lỗ hoặc dừng chân bị phá vỡ, gây ra thiệt hại lớn hơn.

Rủi ro thất bại

Trong một số trường hợp, tín hiệu giao dịch được xác định có thể thất bại, không thể thúc đẩy giá đi theo hướng đảo ngược, do đó dẫn đến tổn thất.

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

Kết hợp nhiều thời gian

Có thể đánh giá xu hướng lớn trên chu kỳ thời gian cao hơn, tránh giao dịch ngược. Cũng có thể lọc các tín hiệu giả ở chu kỳ thời gian thấp hơn.

Kết hợp với các chỉ số khác

Sử dụng kết hợp với chỉ số động lượng, chỉ số dao động, v.v., có thể cải thiện chất lượng tín hiệu, tránh tín hiệu sai.

Động thái điều chỉnh tỷ lệ dừng

Tỷ lệ dừng có thể được điều chỉnh động theo mức độ biến động của thị trường và khoảng cách giữa giá mới nhất và điểm nhập cảnh.

Tóm tắt

Chiến lược đảo ngược xu hướng dựa trên sóng trung bình thực tế của Renko đã sử dụng thành công biểu đồ Renko kết hợp với chỉ số ATR để tự động xác định các điểm biến đổi trong thị trường tài chính. Chiến lược này có những lợi thế như loại bỏ đồ họa chậm trễ, tự động thích ứng với biến động thị trường và dừng lỗ động. Đồng thời, người dùng cũng cần thiết đặt và tối ưu hóa các tham số cảnh báo về rủi ro, và rủi ro thất bại trong sự kiện bất ngờ và đảo ngược.

Mã nguồn chiến lược
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='[tradinghook] - Renko Trend Reversal Strategy', shorttitle='[tradinghook] - Renko TRS', overlay=true ,initial_capital = 100, commission_value = 0.05, default_qty_value = 5)

// INPUTS
renkoATRLength = input.int(10, minval=1, title='ATR Length')
stopLossPct = input.float(3, title='Stop Loss Percentage', step=0.1)
takeProfitPct = input.float(20, title='Take Profit Percentage', step=0.1)
startDate = input(timestamp("01 July 2023 00:00"), title="Start Date")
endDate = input(timestamp("31 Dec 2025 23:59"), title="End Date")
enableShorts = input.bool(true, title="Enable Shorts")

var float stopLossPrice = na
var float takeProfitPrice = na

atr = ta.atr(renkoATRLength)

// thanks to https://www.tradingview.com/script/2vKhpfVH-Renko-XZ/ for manually calculating renkoClose and renkoOpen in order to remove repaint
getRenkoClose() =>
    p1 = 0.0
    p1 := close > nz(p1[1]) + atr ? nz(p1[1]) + atr : close < nz(p1[1]) - atr ? nz(p1[1]) - atr : nz(p1[1])
    p1

Renko3() =>
    p3 = 0.0
    p3 := open > nz(p3[1]) + atr ? nz(p3[1]) + atr : open < nz(p3[1]) - atr ? nz(p3[1]) - atr : nz(p3[1])
    p3

getRenkoOpen() =>
    open_v = 0.0
    Br_2 = Renko3()
    open_v := Renko3() != Renko3()[1] ? Br_2[1] : nz(open_v[1])
    open_v

renkoOpen = getRenkoOpen()
renkoClose = getRenkoClose()

// COLORS
colorGreen = #089981
colorRed = #F23645
bgTransparency = 95
bgColorRed = color.new(colorRed, bgTransparency)
bgColorGreen = color.new(colorGreen, bgTransparency)
lineColor = renkoClose < renkoOpen ?  colorRed : colorGreen 
bgColor = renkoClose < renkoOpen ?  bgColorRed : bgColorGreen 

// PLOTS
plot(renkoOpen, title="Renko Open", style=plot.style_line, linewidth=2, color=lineColor)
bgcolor(bgColor)

// SIGNALS
isWithinTimeRange = true
buySignal = ta.crossunder(renkoOpen, renkoClose) and isWithinTimeRange
sellSignal = ta.crossover(renkoOpen, renkoClose) and isWithinTimeRange and enableShorts

if (buySignal)
    stopLossPrice := renkoOpen * (1 - stopLossPct / 100)
    takeProfitPrice := renkoOpen * (1 + takeProfitPct / 100)
    strategy.entry("Long", strategy.long)
    strategy.exit("ExitLong", "Long", stop = stopLossPrice, limit = takeProfitPrice, comment="SL: " + str.tostring(stopLossPrice) + ", TP: " + str.tostring(takeProfitPrice))
if (sellSignal)
    stopLossPrice := renkoOpen * (1 + stopLossPct / 100)
    takeProfitPrice := renkoOpen * (1 - takeProfitPct / 100)
    strategy.entry("Short", strategy.short)
    strategy.exit("ExitShort", "Short", stop = stopLossPrice, limit = takeProfitPrice, comment="SL: " + str.tostring(stopLossPrice) + ", TP: " + str.tostring(takeProfitPrice))