Chỉ số chuyển động theo hướng Chiến lược giao dịch hai hướng

Tác giả:ChaoZhang, Ngày: 2023-12-19 14:13:52
Tags:

img

Tổng quan

Chiến lược này tính toán chỉ số chuyển động theo hướng (DI) của hàng hóa và kết hợp nó với các tham số giới hạn để thực hiện giao dịch hai hướng. Nó đi dài khi DI + lớn hơn DI - bằng một tham số giới hạn và đi ngắn khi DI - lớn hơn DI + bằng một tham số giới hạn.

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

Chỉ số cốt lõi của chiến lược này là chỉ số chuyển động theo hướng (DI).

DI+ = (DM+ / True Range) × 100 DI- = (DM- / True Range) × 100

Trong đó DM + đại diện cho Di chuyển hướng tích cực, DM- đại diện cho Di chuyển hướng âm. Phạm vi thực sự đại diện cho sự biến động gần đây bằng cách tính toán giá trị tối đa của giá cao nhất, giá thấp nhất và giá đóng của ngày trước trong ba ngày.

Theo định nghĩa của DI, khi DI + > DI-, điều đó có nghĩa là động lực thị trường hiện tại mạnh hơn, thuộc về thị trường tăng; khi DI- > DI+, điều đó có nghĩa là động lực gấu mạnh hơn động lực tăng, thuộc về thị trường giảm.

Chiến lược này sử dụng tính năng này và thiết lập một tham số giới hạn. Khi DI + lớn hơn DI - bằng một tham số giới hạn, nó xác định rằng thị trường hiện tại là thị trường tăng và đi dài. Khi DI - lớn hơn DI + bằng một tham số giới hạn, nó xác định rằng thị trường hiện tại là thị trường gấu và đi ngắn.

Ví dụ: nếu tham số giới hạn được đặt là 3, các quy tắc giao dịch cụ thể là:

  1. Khi DI + - DI- > 3, đi dài
  2. Khi DI- - DI+ > 3, đi ngắn

Vì thường có sự khác biệt dao động nhỏ giữa DI + và DI-, việc thiết lập một tham số giới hạn có thể lọc một số giao dịch mà không có định hướng đáng kể và giảm giao dịch không cần thiết.

Phân tích lợi thế

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

  1. DI đáng tin cậy trong việc đánh giá hướng thị trường

    DI trực tiếp đánh giá xu hướng thị trường bằng cách tính toán sức mạnh của bò và gấu.

  2. Các thông số giới hạn có thể lọc hiệu quả tín hiệu

    Các thông số giới hạn lọc các biến động nhỏ mà không có định hướng đáng kể, chỉ chọn các phần có định hướng đáng kể để giao dịch, tránh bị mắc kẹt.

  3. Đạt được giao dịch hai hướng tự động

    Các vị trí dài và ngắn có thể tự động chuyển đổi dựa trên chỉ số DI mà không cần đánh giá bằng tay, làm giảm khó khăn giao dịch.

  4. Khung thời gian giao dịch có thể tùy chỉnh

    Hỗ trợ thiết lập chỉ giao dịch trong phạm vi ngày tùy chỉnh và đóng tất cả các vị trí tự động sau đó, linh hoạt và thuận tiện.

  5. Chỉ có thể chọn dài hoặc ngắn

    Thông qua các công tắc dài và ngắn, chỉ có thể chọn tín hiệu một chiều để thực hiện các chiến lược dài hoặc ngắn phù hợp với các môi trường thị trường khác nhau.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro với chiến lược này:

  1. Khả năng DI đưa ra tín hiệu sai

    DI có thể cung cấp tín hiệu sai ngắn hạn khi biến động thị trường mạnh mẽ xảy ra, dẫn đến giao dịch thất bại.

  2. Cài đặt tham số giới hạn không chính xác

    Các thiết lập tham số giới hạn cao hoặc thấp không đúng có thể dẫn đến quá ít hoặc quá nhiều tín hiệu giao dịch. Các tham số cần phải được điều chỉnh theo thị trường.

  3. Không thể xác định điểm cuối xu hướng

    DI chỉ có thể xác định hướng xu hướng hiện tại và không thể đánh giá liệu xu hướng đã kết thúc hay đảo ngược.

Các giải pháp cho các rủi ro bao gồm:

  1. Kết hợp trung bình động và các chỉ số khác để lọc tín hiệu DI

  2. Điều chỉnh các thông số giới hạn dựa trên kết quả backtest

  3. Kết hợp khối lượng, MACD v.v. để xác định xem sự đảo ngược xu hướng

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

Chiến lược có thể được tối ưu hóa thêm theo các cách sau:

  1. Kết hợp các chỉ số đánh giá xu hướng khác như Market Profile

    Kết hợp các chỉ số như Market Profile, cũng đánh giá trực quan sức mạnh ngắn dài với DI có thể cải thiện độ chính xác đánh giá.

  2. Thêm các chiến lược dừng lợi nhuận và dừng lỗ

    Thiết lập dừng lợi nhuận, thời gian hoặc tỷ lệ dừng lỗ có thể khóa lợi nhuận và giảm lỗ.

  3. Điều chỉnh các thông số cho các sản phẩm cụ thể

    Điều chỉnh các thông số giới hạn và thời gian giao dịch theo các đặc điểm sản phẩm khác nhau có thể cải thiện hiệu suất chiến lược.

  4. Tối ưu hóa năng động sử dụng máy học

    Áp dụng các thuật toán học tăng cường để tối ưu hóa động các thiết lập tham số dựa trên tín hiệu trực tiếp.

Tóm lại

Tóm lại, chiến lược này tương đối đơn giản và thực tế. Nó sử dụng tính toán DIs để xác định hướng thị trường; lọc tín hiệu thông qua các tham số giới hạn; hỗ trợ giao dịch hai hướng hoặc chỉ dài / ngắn; cho phép thiết lập khung thời gian giao dịch. Những lợi thế chính là độ tin cậy cao và lọc tín hiệu hiệu quả. Nó cũng có các vấn đề như tín hiệu sai và cài đặt tham số. Chúng ta có thể cải thiện nó bằng cách kết hợp các chỉ số khác, thiết lập stop-loss / lợi nhuận, điều chỉnh các tham số vv hoặc tối ưu hóa nó một cách năng động với máy học. Nhìn chung nó phù hợp như một chỉ số hướng để kết hợp với các chiến lược khác để có kết quả tốt.


/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Noro's DI Strategy", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
len = input(title="Length", defval=14)
limit = input(3, title = "limit, %")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//DI
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedTrueRange = 0.0
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementMinus = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100

//Trend
trend = 0
trend := DIPlus > DIMinus + limit ? 1 : DIPlus < DIMinus - limit ? -1 : trend[1]

//Background
col = trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Lines
plot(DIPlus, color=lime, title="DI+", linewidth = 3)
plot(DIMinus, color=red, title="DI-", linewidth = 3)

//Trading
size = strategy.position_size
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if trend == 1
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if trend == -1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Thêm nữa