Chiến lược theo dõi xu hướng trung bình động

Tác giả:ChaoZhang, Ngày: 2024-02-20 14:36:11
Tags:

img

Tổng quan

Chiến lược này được xây dựng dựa trên chỉ số DMI bằng cách theo dõi sự chéo chéo của +DI và -DI để xác định hướng xu hướng của giá cổ phiếu và sử dụng chỉ số ADX để xác định sức mạnh của xu hướng, để đạt được theo dõi xu hướng. Khi +DI vượt trên -DI, đi dài; khi giá dừng lỗ được kích hoạt hoặc -DI vượt dưới +DI, đóng vị trí.

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

Chiến lược này sử dụng hai thành phần của chỉ số DMI: +DI và -DI. +DI đo đạc động lượng tăng. Sự chéo ngược tăng của +DI trên -DI cho thấy tăng động lượng tăng. -DI đo đạc động lượng giảm. Sự chéo ngược giảm của -DI dưới +DI cho thấy tăng động lượng giảm.

Khi +DI vượt trên -DI, một xu hướng tăng đang xuất hiện và chiến lược đi dài. Sau khi nhập vào vị trí, một stop loss tuyến tính theo dõi một tỷ lệ phần trăm nhất định của giá cao nhất. Khi giá kéo trở lại, giá stop loss sẽ di chuyển xuống tương ứng, khóa một số lợi nhuận trước đó ở một mức độ nào đó.

Khi -DI vượt qua dưới +DI, xu hướng giảm tiếp quản và chiến lược đóng vị trí của nó. Chỉ số ADX có thể được sử dụng để xác định sức mạnh của xu hướng. ADX càng cao, xu hướng càng rõ rệt. Như vậy, chiến lược sử dụng ADX như một chỉ số phụ để vào, chỉ vào một vị trí khi ADX nằm trong một phạm vi nhất định.

Tóm lại, chiến lược này nắm bắt các điểm biến động trong xu hướng giá để thực hiện theo dõi xu hướng trung bình động.

Phân tích lợi thế

Những lợi thế chính của chiến lược này được phản ánh trong ba khía cạnh:

  1. Sử dụng chỉ số DMI để xác định hướng xu hướng giá là chính xác và đáng tin cậy.

  2. Áp dụng chỉ số ADX để xác định sức mạnh của xu hướng tránh giao dịch thường xuyên trong thị trường hỗn loạn, làm cho chiến lược mạnh mẽ hơn.

  3. Cơ chế dừng dừng tuyến tính có thể điều chỉnh động các vị trí dừng lỗ và thoát sớm khi xu hướng đảo ngược, khóa lợi nhuận một phần để kiểm soát rủi ro hiệu quả.

  4. Các quy tắc chiến lược đơn giản và rõ ràng, dễ hiểu và thực hiện, phù hợp với giao dịch thuật toán.

Phân tích rủi ro

Những rủi ro chính của chiến lược này là:

  1. Khả năng chỉ số DMI thất bại trong một số thị trường đặc biệt. DMI không áp dụng cho tất cả các thị trường. Nó có thể tạo ra tín hiệu sai khi xu hướng không rõ ràng.

  2. Nguy cơ giá giảm xuống dưới mức dừng lỗ trước khi đảo ngược xuống hơn nữa.

  3. Rủi ro từ cài đặt tham số ADX không chính xác. Các tham số ADX ảnh hưởng trực tiếp đến kết quả thời gian chiến lược. Hiệu suất sẽ bị ảnh hưởng nếu được đặt quá cao hoặc quá thấp.

  4. Sự dễ dàng của việc được dừng lại trong một xu hướng tăng nhanh chóng do phương pháp dừng lại theo đường thẳng. Các thông số dừng lại có thể được điều chỉnh dựa trên các tình huống cụ thể.

Các rủi ro có thể được giảm thêm thông qua điều chỉnh tham số, dừng lỗ nghiêm ngặt, tối ưu hóa kiến trúc chương trình, v.v.

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

Chiến lược này có thể được tối ưu hóa trong một số khía cạnh:

  1. Sử dụng các chỉ số khác như MACD, KDJ để đánh giá hỗ trợ để cải thiện sự ổn định chiến lược.

  2. Kiểm tra các phương pháp dừng lỗ khác nhau như dừng dừng đường cong, dừng dừng dựa trên thời gian, v.v.

  3. Thêm các cơ chế định kích thước vị trí để dần dần xây dựng các vị trí sau khi xác nhận hướng xu hướng, cải thiện lợi nhuận.

  4. Kết hợp các yếu tố tần số cao, học máy v.v. để tối ưu hóa các thông số DMI và ADX để có trí thông minh cao hơn.

  5. Thêm các mô-đun kiểm soát rủi ro theo chương trình sử dụng ngân sách rủi ro v.v. để quản lý chặt chẽ lượng rút tối đa.

Các phương tiện khác nhau có thể được kết hợp để tăng hiệu quả, ổn định và an toàn chiến lược.

Tóm lại

Chiến lược này được sử dụng để xác định hướng xu hướng giá và chỉ số ADX như một thước đo phụ của sức mạnh xu hướng, với các điểm dừng theo dõi tuyến tính kiểm soát hiệu quả rủi ro. Chiến lược này tương đối ổn định nhưng vẫn đòi hỏi phải thận trọng với một số rủi ro nhất định. Thông qua tối ưu hóa và thử nghiệm liên tục, có thể cải thiện dần độ mạnh mẽ và hiệu quả của chiến lược.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@version=5
//1.0 - 240202 @caddjax

strategy(title = "+DI Crossover", overlay=false)

//DMI + ADX Chart w/ overlay
// © jrregencia

lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50)
len = input.int(6, minval=1, title="DI Length")
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
trur = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / trur)
minus = fixnan(100 * ta.rma(minusDM, len) / trur)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), lensig)
adxmax = input.int(50, title="ADX Max Buying Area", minval=1, maxval=100)
adxmin = input.int(0, title="ADX Min Buying Area", minval=0, maxval=99)



//DI cross alert
DIPcross = ta.crossover(plus, minus) ? plus : na
plotshape(DIPcross, style = shape.cross , color=color.white, location=location.absolute)

plot(adx, color=color.rgb(255, 238, 0, 23), title="ADX", linewidth=2)
p1 = plot(plus, color=color.rgb(16, 137, 0, 31), title="+DI", linewidth=1)
p2 = plot(minus, color=color.rgb(143, 82, 255, 25), title="-DI", linewidth=1)
adxmaxl = hline(adxmax, title="ADX MaxLine", color=color.silver, linestyle=hline.style_solid)
adxminl = hline(adxmin, title="ADX MinLine", color=color.silver, linestyle=hline.style_solid)
fill(p1, p2, title="Cloud Fill", color = plus > minus ? color.teal : color.red, transp=50)
fill(adxmaxl, adxminl, title="ADX Fill", color=color.silver, transp=90)

// Configure trail stop level with input options (optional)
longTrailPerc = input.float(3, title="Trail Long Loss (%)",
     minval=0.0, step=0.1) * 0.01
// Determine trail stop loss prices
longStopPrice = 0.0

// Determine entry condition
enterLong = ta.crossover(plus, minus) ? plus : na

longStopPrice := if strategy.position_size > 0
    stopValue = high[1] * (1 - longTrailPerc)
    math.max(stopValue, longStopPrice[1])
else
    0
// Submit entry orders
if enterLong
    strategy.entry("EL", strategy.long)    
// Submit exit orders for trail stop loss price
if strategy.position_size > 0
    strategy.exit("XL TRL STP", stop=longStopPrice)    

Thêm nữa