DMI và chiến lược kết hợp trung bình động

Tác giả:ChaoZhang, Ngày: 2023-09-19 21:51:14
Tags:

Tổng quan

Chiến lược này kết hợp chiến lược 123 đảo ngược, chiến lược DMI và chiến lược trung bình động để tạo thành một chiến lược kết hợp hiệu quả. Nó có thể thực hiện các hoạt động đảo ngược tại các điểm đảo ngược xu hướng và theo dõi xu hướng khi xu hướng tiếp tục. Trong khi đó, nó sử dụng trung bình động để lọc và xác định hướng xu hướng thị trường để cải thiện tỷ lệ chiến lược chiến thắng.

Chiến lược logic

  1. 123 chiến lược đảo ngược: đi dài khi giá đóng cao hơn giá đóng trước trong 2 ngày liên tiếp và đường K chậm 9 ngày dưới 50; đi ngắn khi giá đóng thấp hơn giá đóng trước trong 2 ngày liên tiếp và đường K nhanh 9 ngày trên 50.

  2. Chiến lược DMI: đi dài khi +DI vượt trên -DI; đi ngắn khi -DI vượt dưới +DI.

  3. Chiến lược trung bình động: đi dài khi giá đóng vượt trên MA; đi ngắn khi giá đóng vượt dưới MA.

  4. Mở các vị trí khi ba chiến lược cung cấp tín hiệu nhất quán, nếu không đóng các vị trí.

Chiến lược này kết hợp các chiến lược xu hướng và các chiến lược đảo ngược, có thể nắm bắt các cơ hội đảo ngược và các cơ hội theo xu hướng.

Phân tích lợi thế

  1. Kết hợp nhiều chiến lược cải thiện tỷ lệ chiến thắng. 123 đảo ngược để bắt điểm chuyển đổi, DMI để bắt xu hướng và bộ lọc MA để lọc tín hiệu.

  2. Kết hợp các chiến lược đảo ngược và xu hướng cho phép bắt được sự đảo ngược và xu hướng một cách linh hoạt.

  3. Bộ lọc MA làm giảm tín hiệu sai từ biến động ngắn hạn.

  4. Kết hợp nhiều chiến lược xác minh tín hiệu và tránh thất bại của một chiến lược duy nhất.

  5. Nhiều tham số cho phép tối ưu hóa để kết hợp tham số tốt nhất và ổn định cao hơn.

Phân tích rủi ro

  1. Chiến lược đảo ngược có xu hướng bị mắc kẹt trong các xu hướng giới hạn phạm vi. Kết hợp với các chiến lược xu hướng giúp tránh.

  2. DMI có thể bỏ lỡ cơ hội xu hướng sớm. Có thể rút ngắn các thông số DMI để cải thiện độ nhạy.

  3. MA có hiệu ứng trì hoãn và có thể trì hoãn việc tạo tín hiệu.

  4. Mặc dù kết hợp các chiến lược cải thiện tỷ lệ chiến thắng, nó cũng làm tăng sự phức tạp.

  5. Chiến lược này nhạy cảm với chi phí giao dịch. nên giảm dừng lỗ để tránh giao dịch quá mức.

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

  1. Tối ưu hóa các thông số của mỗi chiến lược để tìm ra sự kết hợp tốt nhất.

  2. Thêm các chỉ số khác như MACD, RSI để lọc tín hiệu và cải thiện sự ổn định.

  3. Thêm các chiến lược dừng lỗ như dừng lỗ để kiểm soát rủi ro.

  4. Tối ưu hóa kích thước vị trí như kích thước cố định / động để cải thiện lợi nhuận.

  5. Điều chỉnh các thông số cho các sản phẩm cụ thể để cải thiện khả năng thích nghi.

  6. Thêm các mô hình học máy để hỗ trợ các quyết định và cải thiện hiệu suất.

Kết luận

Chiến lược này tạo thành một hệ thống kết hợp linh hoạt bằng cách kết hợp hiệu quả các chiến lược đảo ngược, xu hướng và bộ lọc MA. Nó có thể nắm bắt cả cơ hội đảo ngược và theo xu hướng, và cải thiện độ tin cậy tín hiệu thông qua nhiều chiến lược. Vẫn còn chỗ cho những cải tiến hơn nữa về các thông số, dừng lỗ, kích thước vị trí v.v. Với ứng dụng kỹ năng, chiến lược thực tế và có thể mở rộng này có thể tạo ra lợi nhuận đáng kể trong giao dịch trực tiếp.


/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-18 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 15/10/2019
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// The related article is copyrighted material from Stocks & Commodities Aug 2009 
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

fFilter(xSeriesSum, xSeriesV, Filter) =>
    iff(xSeriesV > Filter, xSeriesSum, 0)

DMIMA(Length_MA, Length_DMI) =>
    pos = 0.0
    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)))
    pos

strategy(title="Combo Backtest 123 Reversal & DMI & Moving Average", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
Length_MA = input(30, minval=1)
Length_DMI = input(14, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posDMIMA = DMIMA(Length_MA,Length_DMI)
pos = iff(posReversal123 == 1 and posDMIMA == 1 , 1,
	   iff(posReversal123 == -1 and posDMIMA == -1, -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)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Thêm nữa