Kết hợp DMI và chiến lược giao dịch trung bình động

Tác giả:ChaoZhang, Ngày: 2023-09-28 12:39:44
Tags:

Tổng quan

Chiến lược này kết hợp chỉ số chuyển động theo hướng (DMI) và đường trung bình động để xác định hướng xu hướng và tạo ra tín hiệu giao dịch. Nó sẽ tạo ra tín hiệu mua và bán khi DMI chỉ ra giá đang ở trạng thái xu hướng và đường trung bình động xác nhận hướng xu hướng.

Chiến lược logic

Chiến lược dựa trên hai chỉ số chính:

  1. DMI, bao gồm cả DMI + và DMI-, được sử dụng để xác định sự tồn tại và hướng của một xu hướng. Khi DMI + trên DMI-, một xu hướng tăng hiện diện. Khi DMI- trên DMI+, một xu hướng giảm hiện diện.

  2. Giá trung bình động, thường được thiết lập từ 15 đến 50 ngày, được sử dụng để xác định hướng xu hướng giá.

Chiến lược đầu tiên tính toán DMI+, DMI-, và moving average. Khi DMI hiển thị trạng thái xu hướng (DMI+ trên DMI- hoặc ngược lại) và moving average xác nhận hướng, một tín hiệu giao dịch được tạo ra. Cụ thể:

  • Khi DMI + vượt trên DMI- và giá vượt trên MA, đi dài.

  • Khi DMI- vượt trên DMI + và giá vượt dưới MA, đi ngắn.

Một tùy chọn đầu vào ngược cũng được bao gồm. Khi được bật, các tín hiệu dài và ngắn được đảo ngược.

Phân tích lợi thế

Kết hợp một chỉ số theo xu hướng như DMI và một chỉ số xu hướng như đường trung bình động có thể cải thiện độ tin cậy tín hiệu bằng cách sử dụng điểm mạnh của cả hai.

Lợi thế của DMI là xác định nhanh xu hướng mới nổi. Mức trung bình động giúp lọc tiếng ồn và xác nhận hướng xu hướng.

Tùy chọn ngược cũng thêm sự linh hoạt để giao dịch với hoặc chống lại xu hướng.

Phân tích rủi ro

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

  1. Các tín hiệu sai có thể xảy ra xung quanh chuyển đổi xu hướng, dẫn đến tổn thất.

  2. Sự hình thành xu hướng mất thời gian. Trong khi đó, biến động giá có thể tạo ra tín hiệu sai. Thời gian DMI và MA kéo dài có thể lọc ra tiếng ồn này.

  3. Giao dịch đảo ngược có rủi ro mất mát lớn hơn trong các động thái bất lợi. Với tùy chọn đảo ngược, kích thước lỗ nên được giới hạn và dừng lại để khóa lợi nhuận.

  4. Các tham số cần được tối ưu hóa lại cho các sản phẩm và khung thời gian khác nhau.

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

Các tối ưu hóa có thể cho chiến lược này bao gồm:

  1. Kiểm tra các khoảng thời gian trung bình động khác nhau để tìm ra phù hợp nhất với các chuyển đổi xu hướng.

  2. Kiểm tra các khoảng thời gian làm mịn DMI để lọc các sự đảo ngược ngắn trong xu hướng.

  3. Đánh giá tác động của tùy chọn ngược so với xu hướng mặc định theo các thử nghiệm ngược lại trong lịch sử để chọn cách tiếp cận tốt hơn.

  4. Kết hợp các chiến lược dừng như dừng lại, dừng thời gian hoặc dừng đột phá để hạn chế kích thước lỗ.

  5. Đánh giá hiệu suất tham số trên các sản phẩm và khung thời gian khác nhau và tối ưu hóa các tham số.

  6. Thêm các bộ lọc như RSI để tránh tín hiệu sai ở những điểm cực đoan.

Tóm lại

Chiến lược này kết hợp các điểm mạnh của DMI theo xu hướng và các chỉ số trung bình động để đi vào xu hướng sớm trong khi tránh các xu hướng trong các thị trường hỗn loạn. Tùy chọn ngược cũng thêm tính linh hoạt.


/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 03/03/2017
// The related article is copyrighted material from Stocks & Commodities Aug 2009 
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
////////////////////////////////////////////////////////////
strategy(title="Combining DMI And Moving Average For A EUR/USD Trading System")
Length_MA = input(30, minval=1)
Length_DMI = input(14, minval=1)
reverse = input(false, title="Trade reverse")
xMA = sma(close, Length_MA)
up = change(high)
down = -change(low)
trur = rma(tr, Length_DMI)
xPDI = fixnan(100 * rma(up > down and up > 0 ? up : 0, Length_DMI) / trur)
xNDI = fixnan(100 * rma(down > up and down > 0 ? down : 0, Length_DMI) / trur)
nPDI = xPDI
nNDI = xNDI
nMA = xMA
nPDI_1 = xPDI[1]
nNDI_1 = xNDI[1]
nMA_1 = xMA[1]
bMDILong =iff(nPDI > nNDI and nPDI_1 < nNDI_1, true, 
           iff(nPDI < nNDI and nPDI_1 > nNDI_1, false, false)) 
bMDIShort =  iff(nPDI > nNDI and nPDI_1 < nNDI_1, false, 
              iff(nPDI < nNDI and nPDI_1 > nNDI_1, true, false)) 
bMALong = iff(close > nMA and close[1] < nMA_1, true, 
           iff(close < nMA and close[1] > nMA_1, false, false))
bMAShort = iff(close > nMA and close[1] < nMA_1, false, 
             iff(close < nMA and close[1] > nMA_1, true, false))
pos = iff(bMDILong and bMALong, 1, 
     iff(bMDIShort and bMAShort, -1, nz(pos[1], 0)))
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1 )
    strategy.entry("Long", strategy.long)
if (possig == -1 )
    strategy.entry("Short", strategy.short)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue )
plot(nPDI, color=green, title="DMI Plus")
plot(nNDI, color=red, title="DMI Minus")

Thêm nữa