Chiến lược này kết hợp các chỉ số động lực với các chỉ số tương đối mạnh (RSI), hỗ trợ theo dõi các cơ chế dừng lỗ, nhằm mục đích nắm bắt xu hướng xu hướng, đồng thời kiểm soát rủi ro. Khi giá có động lực mạnh, mua nhiều hơn; khi giá có động lực yếu, bán bằng không. Chiến lược đồng thời thiết lập các điều kiện dừng lỗ, sử dụng theo dõi dừng lỗ để theo dõi mức lợi nhuận cao nhất, có thể khóa lợi nhuận và giảm tổn thất.
Sử dụng chỉ số động lực ADX để xác định xu hướng giá
ADX lớn hơn 20 cho thấy xu hướng
Đánh dấu báo động khi + DI đi qua - DI
Đường DI dưới + đường DI là tín hiệu giảm giá
Chỉ số RSI đánh giá quá mua quá bán
RSI cao hơn 70 là vùng mua quá mức, tín hiệu giảm giá
RSI thấp hơn 30 là vùng bán tháo, xem tín hiệu giảm giá
Khi ADX đánh giá xu hướng tồn tại và chỉ số RSI phát ra tín hiệu xác nhận, hãy thực hiện thao tác đa không gian tương ứng.
Chiến lược sử dụng cơ chế dừng tổn thất theo dõi có thể điều chỉnh động, bao gồm hai tham số:
Tỷ lệ kích hoạt: kích hoạt theo dừng lỗ khi giá đạt tỷ lệ đặt sau khi mở vị trí
Tỷ lệ theo dõi: Tỷ lệ theo dõi từ mức thu nhập cao nhất gần đây
Khi giá đạt đến điều kiện kích hoạt, đường dừng theo dõi sẽ theo dõi mức lợi nhuận cao nhất. Khi giá giảm, đường dừng sẽ di chuyển bên dưới. Nếu mức giảm vượt quá tỷ lệ theo dõi được thiết lập, đường dừng sẽ được kích hoạt và đóng tất cả các vị trí.
Chỉ số động lực đánh giá xu hướng, tránh công ty vội vã
Chỉ số RSI đảm bảo không bỏ lỡ cơ hội đảo ngược
Có thể điều chỉnh theo lệnh dừng lỗ, khóa lợi nhuận và giảm tổn thất
Kế hoạch chiến lược rõ ràng, ngắn gọn và dễ hiểu
Có thể áp dụng rộng rãi cho các thị trường và thời gian khác nhau
ADX phán đoán đột phá giả tạo ra tín hiệu sai
RSI tạo ra nhiều tín hiệu giả
Thiết lập tham số điều chỉnh không đúng
Không thể ngăn chặn việc nhảy vọt lớn
Thử nghiệm tối ưu hóa nhập học với các tham số ADX và RSI khác nhau
Đánh dấu các điểm kích hoạt dừng khác nhau và theo dõi độ lớn để tìm tham số tối ưu
Xem xét thêm các chỉ số khác để lọc và cải thiện chất lượng tín hiệu
Kiểm tra các thị trường khác nhau để xác định các thiết lập tham số chung
Chiến lược này tích hợp phân tích động lực, chỉ số RSI và cơ chế dừng theo dõi, có thể xác định hiệu quả hướng xu hướng, xác định điểm đảo ngược và kiểm soát rủi ro giao dịch. Chiến lược được thiết kế rõ ràng, thực hiện đơn giản, có thể được sử dụng rộng rãi trong giao dịch xu hướng thị trường như cổ phiếu, ngoại hối và tiền kỹ thuật số.
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-03 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Trailing Stop with RSI", overlay=true)
length = input.int(12, "Momentum Length")
price = close
momentum(seria, length) =>
mom = seria - seria[length]
mom
mom0 = momentum(price, length)
mom1 = momentum(mom0, 1)
rsiLength = input.int(14, "RSI Length")
rsiOverbought = input(70, "RSI Overbought Level")
rsiOversold = input(30, "RSI Oversold Level")
rsiValue = ta.rsi(close, rsiLength)
tsact = input.float(0.0, "Trailing Stop Activation (%)", group="strategy", tooltip="Activates the Trailing Stop once this PnL is reached.") / 100
tsact := tsact ? tsact : na
ts = input.float(0.0, "Position Trailing Stop (%)", group="strategy", tooltip="Trails your position with a stop loss at this distance from the highest PnL") / 100
ts := ts ? ts : na
in_long = strategy.position_size > 0
in_short = strategy.position_size < 0
var ts_ = array.new_float()
ts_size = array.size(ts_)
ts_get = ts_size > 0 ? array.get(ts_, ts_size - 1) : 0
if in_long
if tsact and high > strategy.position_avg_price + strategy.position_avg_price * tsact
if ts_size > 0 and ts_get < high
array.push(ts_, high)
if ts_size < 1
array.push(ts_, high)
if not tsact
if ts_size > 0 and ts_get < high
array.push(ts_, high)
if ts_size < 1
array.push(ts_, high)
if in_short
if tsact and low < strategy.position_avg_price - strategy.position_avg_price * tsact
if ts_size > 0 and ts_get > low
array.push(ts_, low)
if ts_size < 1
array.push(ts_, low)
if not tsact
if ts_size > 0 and ts_get > low
array.push(ts_, low)
if ts_size < 1
array.push(ts_, low)
trail = in_long and ts_size > 0 ? low < ts_get - ts_get * ts : in_short and ts_size > 0 ? high > ts_get + ts_get * ts : na
if (mom0 > 0 and mom1 > 0)
strategy.entry("MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE")
else
strategy.cancel("MomLE")
if (mom0 < 0 and mom1 < 0)
strategy.entry("MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE")
else
strategy.cancel("MomSE")
tsClose = in_long ? ts_get - ts_get * ts : in_short ? ts_get + ts_get * ts : na
if trail
strategy.close_all()
if not strategy.opentrades
array.clear(ts_)
rsiOverboughtCondition = rsiValue >= rsiOverbought
rsiOversoldCondition = rsiValue <= rsiOversold
if rsiOverboughtCondition
strategy.close("SHORT", "SX")
strategy.entry("LONG", strategy.long)
if rsiOversoldCondition
strategy.close("LONG", "LX")
strategy.entry("SHORT", strategy.short)
plotchar(ts_get, "GET", "")
plot(strategy.position_avg_price > 0 ? strategy.position_avg_price : na, "Average", color.rgb(251, 139, 64), 2, plot.style_cross)
plot(tsClose > 0 ? tsClose : na, "Trailing", color.rgb(251, 64, 64), 2, plot.style_cross)
plot(strategy.position_avg_price - strategy.position_avg_price * tsact > 0 ? strategy.position_avg_price - strategy.position_avg_price * tsact : na, "TS Activation", color.fuchsia, 2, plot.style_cross)