Động lượng ADX và RSI kết hợp với chiến lược dừng theo sau có thể điều chỉnh


Ngày tạo: 2023-10-09 15:36:07 sửa đổi lần cuối: 2023-10-09 15:36:07
sao chép: 1 Số nhấp chuột: 711
1
tập trung vào
1617
Người theo dõi

Tổng quan

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.

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

Dòng động lực và chỉ số RSI đánh giá sự tham gia

  • 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.

Có thể điều chỉnh theo cơ chế dừng thiệt hại

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í.

Phân tích lợi thế

  • 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

Rủi ro và giải pháp

  • ADX phán đoán đột phá giả tạo ra tín hiệu sai

    • Điều chỉnh tham số ADX để đảm bảo thực sự có xu hướng phá vỡ
  • RSI tạo ra nhiều tín hiệu giả

    • Điều chỉnh các tham số mua quá mức để ngăn chặn giao dịch thường xuyên
  • Thiết lập tham số điều chỉnh không đúng

    • Tối ưu hóa tham số, tìm mức dừng lỗ tối ưu
  • Không thể ngăn chặn việc nhảy vọt lớn

    • Cân nhắc kết hợp với giá giới hạn để tránh mất mát

Tối ưu hóa tư duy

  • 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

Tóm tắt

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ố.

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