Chiến lược này xác định hướng của xu hướng bằng cách kết hợp chỉ số xu hướng DMI và đường trung bình di chuyển để phát ra tín hiệu mua và bán. Chiến lược sẽ tạo ra tín hiệu giao dịch khi DMI hiển thị giá được đưa vào trạng thái xu hướng và đường trung bình di chuyển xác nhận hướng của xu hướng.
Chiến lược này dựa trên hai chỉ số:
DMI bao gồm DMI+ và DMI-, được sử dụng để xác định sự hiện diện và hướng của xu hướng. Khi DMI+ cao hơn DMI-, biểu thị xu hướng tăng; Khi DMI- cao hơn DMI+, biểu thị xu hướng giảm.
Đường trung bình di chuyển, thường là trung bình từ 15 đến 50 ngày, được sử dụng để xác định xu hướng của giá. Khi giá cao hơn (như dưới) trung bình di chuyển, biểu thị xu hướng tăng (như giảm).
Chiến lược đầu tiên tính toán DMI +, DMI - và trung bình di chuyển. Trong khi DMI hiển thị trạng thái xu hướng ((DMI + cao hơn DMI - hoặc DMI - cao hơn DMI +), tín hiệu giao dịch được tạo ra nếu trung bình di chuyển cũng xác nhận hướng của xu hướng. Cụ thể:
Chiến lược này cũng thêm vào tùy chọn nhập ngược. Sau khi bật bật, các tín hiệu làm nhiều và làm trống sẽ bị đảo ngược.
Chiến lược này kết hợp các chỉ số xu hướng và các chỉ số xu hướng có thể làm tăng độ tin cậy của tín hiệu, sử dụng lợi thế của hai chỉ số để bổ sung cho nhau.
Điểm mạnh của DMI là có thể nhận ra xu hướng nhanh chóng. Trong khi đó, đường trung bình di chuyển có thể lọc một phần tiếng ồn và xác nhận hướng của xu hướng.
Ngoài ra, chiến lược này được thêm vào tùy chọn đảo ngược, có thể lựa chọn giao dịch thuận lợi hoặc bất lợi theo nhu cầu thực tế. Điều này làm tăng tính linh hoạt của chiến lược.
Chiến lược này có những rủi ro:
Trong khi chuyển hướng, có thể có tín hiệu sai dẫn đến thua lỗ. Điều này cần điều chỉnh tham số hoặc đặt dừng để kiểm soát rủi ro.
Sự hình thành xu hướng cần một thời gian nhất định, trong thời gian đó chiến lược dễ bị nhiễu bởi biến động giá, tạo ra tín hiệu sai. DMI và thời gian tham số của đường trung bình di chuyển có thể được điều chỉnh thích hợp để lọc tiếng ồn này.
Giao dịch đảo ngược có nguy cơ mở rộng thua lỗ ngược. Khi kích hoạt đảo ngược, cần kiểm soát tỷ lệ thua lỗ đơn lẻ hoặc sử dụng dừng di chuyển để khóa một phần lợi nhuận.
Đối với các giống khác nhau và các chu kỳ khác nhau, các tham số cần được tối ưu hóa lại. Việc sao chép trực tiếp các tham số có thể không hiệu quả khi sử dụng trong các giống hoặc chu kỳ khác.
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Kiểm tra các tham số khác nhau về chu kỳ của đường trung bình di chuyển để tìm ra sự kết hợp tham số tốt nhất để chuyển đổi xu hướng liên kết.
Kiểm tra tham số chu kỳ mịn của DMI, Phản hồi tiếng ồn ngắn hạn xuất hiện trong xu hướng lọc.
Đánh giá sự khác biệt giữa hiệu quả của tùy chọn đảo ngược được kích hoạt và giao dịch theo chiều hướng mặc định trong lịch sử, chọn lựa chọn tốt hơn.
Tham gia các chiến lược dừng lỗ, chẳng hạn như dừng di chuyển, dừng thời gian, phá vỡ dừng để kiểm soát tổn thất đơn lẻ.
Đánh giá hiệu quả tối ưu hóa trong các tham số khác nhau về giống và chu kỳ, kết hợp các tham số tối ưu hóa.
Bộ lọc kết hợp với các chỉ số khác, chẳng hạn như chỉ số RSI mạnh và yếu, có thể tránh các điểm cực địa phương phát ra tín hiệu sai.
Chiến lược này kết hợp lợi thế của cả hai chỉ số DMI và Moving Average, đi vào thị trường sớm hơn khi xu hướng hình thành và tránh bị mắc kẹt trong tình huống chấn động. Các tùy chọn giao dịch đảo ngược cũng làm tăng tính linh hoạt của chiến lược.
/*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")