Chiến lược chuyển đổi động lực với Stop Loss theo dõi năng động

Tác giả:ChaoZhang, Ngày: 2024-02-29 13:55:16
Tags:

img

Tổng quan

Chiến lược này kết hợp các chỉ số trung bình động và chỉ số chuyển động theo hướng (DMI) để tạo ra các tín hiệu mua và bán dựa trên các dấu hiệu chéo hai chỉ số.

Chiến lược logic

  1. Xây dựng các chỉ số trung bình động bằng cách sử dụng EMA ngắn 9 ngày và EMA dài 21 ngày. Một tín hiệu mua được tạo ra khi EMA ngắn vượt qua trên EMA dài. Một tín hiệu bán được tạo ra khi EMA ngắn vượt qua dưới EMA dài.
  2. Xây dựng các chỉ số DMI bằng cách sử dụng ADX, +DI và -DI. Một tín hiệu mua được kích hoạt khi +DI vượt qua -DI. Một tín hiệu bán được kích hoạt khi -DI vượt qua +DI.
  3. Kết hợp các tín hiệu của EMA và DMI, yêu cầu cả hai chỉ số phải đáp ứng các điều kiện trước khi phát hành các tín hiệu mua hoặc bán thực tế.
  4. Sử dụng một stop loss theo dõi động để theo dõi giá cao nhất / giá thấp nhất cho stop loss.

Phân tích lợi thế

  1. Các kết hợp chỉ số kép lọc các tín hiệu giả và cải thiện độ chính xác tín hiệu. Các chỉ số ngắn hạn nắm bắt sự thay đổi xu hướng trong khi các chỉ số dài hạn xác định hướng đi tổng thể.
  2. Các chỉ số động lực có thể nắm bắt sự thay đổi xu hướng sớm với một số đặc điểm hàng đầu.
  3. Động lực kéo theo dừng lỗ khóa trong lợi nhuận càng nhiều càng tốt trong khi kiểm soát rủi ro.

Phân tích rủi ro

  1. Với sự kết hợp hai chỉ báo, tần số tín hiệu được giảm, có thể bỏ lỡ một số cơ hội.
  2. Điều chỉnh tham số kém của các chỉ số có thể dẫn đến giao dịch quá mức hoặc tín hiệu chất lượng thấp.
  3. Đặt dừng lỗ quá rộng làm tăng rủi ro mất mát trong khi đặt quá chặt làm tăng rủi ro ngắt kết nối xu hướng.

Hướng dẫn tối ưu hóa

  1. Kiểm tra các combo EMA với các chiều dài ngắn và dài khác nhau để tìm ra tối ưu.
  2. Tối ưu hóa các tham số ADX để cải thiện chất lượng tín hiệu DMI.
  3. Điều chỉnh các thông số dừng lỗ để khóa lợi nhuận trong khi quản lý rủi ro.
  4. Xem xét thêm bộ lọc để tăng thêm chất lượng tín hiệu.

Kết luận

Chiến lược này kết hợp các điểm mạnh của các đường trung bình động và các chỉ số động lực để xác nhận hai tín hiệu, bổ sung lẫn nhau để tăng lợi nhuận. Trong khi đó, việc dừng lỗ theo dõi năng động có hiệu quả kiểm soát rủi ro. Tối ưu hóa tham số và tinh chỉnh chiến lược hơn nữa có thể cải thiện cả lợi nhuận và ổn định.


/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined EMA and DMI Strategy with Enhanced Table", overlay=true)

// Input parameters for EMA
shortTermEMA = input.int(9, title="Short-Term EMA Period")
longTermEMA = input.int(21, title="Long-Term EMA Period")
riskPercentageEMA = input.float(1, title="Risk Percentage EMA", minval=0.1, maxval=5, step=0.1)

// Calculate EMAs
emaShort = ta.ema(close, shortTermEMA)
emaLong = ta.ema(close, longTermEMA)

// EMA Crossover Strategy
longConditionEMA = emaShort > emaLong and emaShort[1] <= emaLong[1]
shortConditionEMA = emaShort < emaLong and emaShort[1] >= emaLong[1]

// Input parameters for DMI
adxlen = input(17, title="ADX Smoothing")
dilen = input(17, title="DI Length")

// DMI Logic
dirmov(len) =>
    up = ta.change(high)
    down = -ta.change(low)
    truerange = ta.tr
    plus = fixnan(100 * ta.rma(up > down and up > 0 ? up : 0, len) / truerange)
    minus = fixnan(100 * ta.rma(down > up and down > 0 ? down : 0, len) / truerange)
    [plus, minus]

adx(dilen, adxlen) => 
    [plus, minus] = dirmov(dilen)
    sum = plus + minus
    adxValue = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
    [adxValue, plus, minus]

[adxValue, up, down] = adx(dilen, adxlen)

// DMI Conditions
buyConditionDMI = up > down or (up and adxValue > down)
sellConditionDMI = down > up or (down and adxValue > up)

// Combined Conditions for Entry
longEntryCondition = longConditionEMA and buyConditionDMI
shortEntryCondition = shortConditionEMA and sellConditionDMI

// Combined Conditions for Exit
longExitCondition = shortConditionEMA
shortExitCondition = longConditionEMA

// Enter long trade based on combined conditions
if (longEntryCondition)
    strategy.entry("Long", strategy.long)

// Enter short trade based on combined conditions
if (shortEntryCondition)
    strategy.entry("Short", strategy.short)

// Exit trades
if (longExitCondition)
    strategy.close("Long")

if (shortExitCondition)
    strategy.close("Short")

// Plot EMAs
plot(emaShort, color=color.blue, title="Short-Term EMA")
plot(emaLong, color=color.red, title="Long-Term EMA")

// Create and fill the enhanced table
var tbl = table.new(position.top_right, 4, 1)
if (barstate.islast)
    table.cell(tbl, 0, 0, "ADX: " + str.tostring(adxValue), bgcolor=color.new(color.red, 90), width=15, height=4)
    table.cell(tbl, 1, 0, "+DI: " + str.tostring(up), bgcolor=color.new(color.blue, 90), width=15, height=4)
    table.cell(tbl, 2, 0, "-DI: " + str.tostring(down), bgcolor=color.new(color.orange, 90), width=15, height=4)

   

Thêm nữa