Chiến lược này được thiết kế một hệ thống giao dịch có chức năng theo dõi xu hướng dựa trên độ dao động trung bình thực sự (ATR) và chỉ số tương đối mạnh (RSI). Hệ thống này có thể tự động nhận biết hướng xu hướng và có chức năng dừng lỗ và dừng.
Xác định ATR và RSI. ATR phản ánh mức biến động giá trung bình trong một khoảng thời gian gần đây. RSI phản ánh sức mạnh của hai bên.
Khi ATR lớn hơn trung bình di chuyển của nó, nó được coi là trong giai đoạn biến động cao, phù hợp để giao dịch.
Khi RSI cao hơn đường mua quá mức, bạn sẽ mua nhiều hơn; khi RSI thấp hơn vùng bán quá mức, bạn sẽ mua ít hơn.
Sau khi thực hiện nhiều, hãy nhân tỷ lệ cố định với điểm cao để theo dõi điểm dừng. Sau khi thực hiện ngắn hạn, hãy nhân tỷ lệ cố định với điểm thấp để theo dõi điểm dừng.
Tỷ lệ lợi nhuận giảm.
Theo dõi dừng lỗ có thể tối đa hóa lệnh dừng lỗ và giảm tổn thất.
RSI có thể đánh giá hiệu quả sức mạnh của forex và tránh mở nhiều lần các vị trí trong tình trạng biến động.
ATR là một chỉ số biến động, có thể lọc ra các biến động và chỉ giao dịch theo xu hướng.
Tỷ lệ lợi nhuận có thể bị khóa một phần lợi nhuận.
ATR và RSI đều là các chỉ số chậm trễ, có thể gây ra sự lệch thời điểm vào. Các tham số có thể được tối ưu hóa thích hợp để hệ thống nhạy cảm hơn.
Lợi nhuận cố định so với lỗ hổng dừng có thể được tối ưu hóa quá mức, nên được thiết lập cẩn thận kết hợp với kết quả phản hồi.
Trong các biến động chu kỳ lớn, ATR có thể lớn hơn trung bình di chuyển trong thời gian dài, dẫn đến giao dịch quá mức. Các điều kiện lọc khác có thể được thêm vào.
Tối ưu hóa các tham số của ATR và RSI để hệ thống nhạy cảm hơn.
Thêm các chỉ số như MA để đánh giá xu hướng, tránh bị mắc kẹt trong tình trạng chấn động.
Thử sử dụng tỷ lệ dừng lỗ động, thay vì thiết lập cố định.
Xem xét thêm các biện pháp kiểm soát khối lượng giao dịch.
Chiến lược này tích hợp các lợi thế của hai chỉ số ATR và RSI, thiết kế một hệ thống giao dịch theo dõi xu hướng đơn giản và thực tế. Bằng cách tối ưu hóa tham số và tăng điều kiện lọc, có thể tăng thêm sự ổn định của hệ thống. Nhìn chung, chiến lược này có giá trị ứng dụng thực tế mạnh mẽ.
/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// © liwei666
//@version=5
// # ========================================================================= #
// # | Strategy |
// # ========================================================================= #
strategy(
title = "ATR_RSI_Strategy v2[liwei666]",
shorttitle = "ATR_RSI_Strategy",
overlay = true,
max_lines_count = 500,
max_labels_count = 500,
max_boxes_count = 500,
max_bars_back = 5000,
initial_capital = 10000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=50, commission_type=strategy.commission.percent, pyramiding=1,
commission_value=0.05
)
// # ========================================================================= #
// # | Strategy |
// # ========================================================================= #
atr_length = input.int(26, "atr_length", minval = 6, maxval = 100, step=1)
atr_ma_length = input.int(45, "atr_ma_length", minval = 6, maxval = 100, step=1)
rsi_length = input.int(15, "rsi_length", minval = 6, maxval = 100, step=1)
rsi_entry = input.int(10, "rsi_entry", minval = 6, maxval = 100, step=1)
atr_ma_norm_min = input.float(0.3, "atr_ma_norm_min", minval = 0.1, maxval = 0.5, step=0.1)
atr_ma_norm_max = input.float(0.7, "atr_ma_norm_max", minval = 0.5, maxval = 1, step=0.1)
trailing_percent= input.float(1.5, "trailing_percent", minval = 0.1, maxval = 2, step=0.1)
var rsi_buy = 50 + rsi_entry
var rsi_sell = 50 - rsi_entry
sma_norm_h_45() =>
source = high
n = 45
sma = ta.sma(source, n)
sma_norm = (sma - ta.lowest(sma, n)) / (ta.highest(sma,n) - ta.lowest(sma, n))
sma_norm
atr_value = ta.atr(atr_length)
atr_ma = ta.sma(atr_value, atr_ma_length)
rsi_value = ta.rsi(close, length = rsi_length)
atr_ma_norm = atr_ma / close * 100
sma_norm = sma_norm_h_45()
var intra_trade_high = 0.0
var intra_trade_low = 0.0
if strategy.position_size == 0
intra_trade_high := high
intra_trade_low := low
if atr_ma_norm >= atr_ma_norm_min and atr_ma_norm <= atr_ma_norm_max
if atr_value > atr_ma
if rsi_value > rsi_buy
strategy.entry("B1", strategy.long, limit = close + 5 )
else if rsi_value < rsi_sell
strategy.entry("S1", strategy.short, limit = close - 5 )
else if strategy.position_size > 0
intra_trade_high := math.max(intra_trade_high, high)
intra_trade_low := low
long_tp = intra_trade_high * (1 - trailing_percent / 100)
strategy.exit("Exit B1", from_entry="B1", stop = long_tp, limit = strategy.position_avg_price * 1.03)
else if strategy.position_size < 0
intra_trade_high := high
intra_trade_low := math.min(intra_trade_low, low)
short_tp = intra_trade_low * (1 + trailing_percent / 100)
strategy.exit("Exit S1", from_entry="S1", stop = short_tp, limit = strategy.position_avg_price * 0.94)