Chiến lược giao dịch hàng ngày giao dịch đường chéo hai DI

Tác giả:ChaoZhang, Ngày: 2023-11-13 11:32:08
Tags:

img

Tổng quan

Chiến lược này tạo ra các tín hiệu giao dịch dựa trên sự chéo chéo của chỉ số hướng dương (DI +) và chỉ số hướng âm (DI-) được tính từ phạm vi trung bình thực sự (ATR).

Chiến lược logic

  1. Tính toán ATR(14): Tính toán phạm vi trung bình thực sự trong 14 ngày qua bằng cách sử dụng giá cao, thấp và gần.

  2. Tính toán DI+ và DI-:

    • DI+ = 100 * RMA(MAX(UP,0),N) / ATNR

    • DI- = 100 * RMA(MAX(DOWN,0),N) / ATNR

    Trong đó UP là chênh lệch giữa mức cao hiện tại và mức đóng cửa trước đó, DOWN là chênh lệch giữa mức thấp hiện tại và mức đóng cửa trước đó, N là khoảng thời gian tham số, mặc định là 14, và ATNR là ATR được tính từ bước 1.

  3. Xác định nhập và xuất:

    • Khi DI + vượt qua DI-, một tín hiệu mua được tạo ra.

    • Khi DI + vượt dưới DI-, một tín hiệu bán được tạo ra.

  4. Thiết lập dừng lỗ và lấy lợi nhuận:

    • Stop loss dài là giá nhập khẩu trừ ATR nhân số nhân stop loss

    • Lợi nhuận mua dài là giá nhập cảnh cộng với ATR nhân với nhân lợi nhuận lấy

    • Giá stop loss ngắn là giá đầu vào cộng với ATR nhân với nhân stop loss

    • Lợi nhuận ngắn là giá nhập khẩu trừ ATR nhân nhân nhân lợi nhuận

Phân tích lợi thế

  1. Sử dụng DI + / DI - chéo để xác định sự đảo ngược xu hướng cung cấp tín hiệu kịp thời cho hướng xu hướng mới.

  2. ATR là chỉ số dừng lỗ / lấy lợi nhuận động có thể thiết lập mức hợp lý dựa trên biến động thị trường.

  3. Chiến lược có ít thông số và dễ hiểu và thực hiện.

  4. Kết quả thử nghiệm cho thấy chiến lược này có yếu tố lợi nhuận tích cực và vượt trội hơn mua & giữ.

Rủi ro và giải pháp

  1. Rủi ro tín hiệu sai từ sự giao thoa DI

    • Bộ lọc tín hiệu với đường trung bình động vv để tránh đột phá sai.
  2. Stop loss/take profit quá gần

    • Điều chỉnh ATR nhân để phù hợp với biến động.
  3. Không hiệu quả trên thị trường giới hạn phạm vi

    • Kết hợp với các chỉ số khác để lọc tín hiệu trong hợp nhất.
  4. Nguy cơ rút vốn

    • Thu hút được chấp nhận nhưng không thể tránh khỏi cho các chiến lược có hệ thống điều chỉnh kích thước vị trí để kiểm soát rút.

Các đề xuất tối ưu hóa

  1. Thêm các bộ lọc như trung bình động để tránh tín hiệu sai trong các giai đoạn giới hạn phạm vi.

  2. Thực hiện kích thước vị trí như phân số cố định hoặc Martingale để kiểm soát rút tiền và tăng lợi nhuận.

  3. Tối ưu hóa các tham số ATR để phù hợp với sự biến động của các công cụ giao dịch khác nhau.

  4. Tối ưu hóa tham số trên thời gian DI, thời gian ATR, nhân ATR v.v. để tìm sự kết hợp tối ưu.

  5. Thêm logic trong đêm và buổi họp sớm để chạy chiến lược 24/7.

Kết luận

Đây là một chiến lược đơn giản và thực tế tạo ra các tín hiệu từ DI crossover và thiết lập stop loss / take profit năng động với ATR. Với một số tham số ít, nó dễ dàng kiểm tra và tối ưu hóa. Nhưng DI crossover ít hiệu quả hơn trong quá trình hợp nhất. Tiếp theo, kết hợp các bộ lọc bổ sung là khu vực cải tiến chính. Nhìn chung chiến lược này cho thấy hiệu suất ổn định phù hợp với giao dịch trong ngày ngắn hạn.


/*backtest
start: 2022-11-06 00:00:00
end: 2023-11-12 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/
// © TheHulkTrading
//@version=4
strategy("DI Crossing Daily Straregy HulkTrading", overlay=true)
// ATR Multiplier. Recommended values between 1..4
atr_multiplier = input(1, minval=1, title="ATR Multiplier") 
//Length of DI. Recommended default value = 14
length = input(14, minval=1, title="Length di")
up = change(high)
down = -change(low)
range = rma(tr, 14)

//DI+ and DI- Calculations
di_plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, length) / range)
di_minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, length) / range)

//Long and short conditions
longCond = crossover(di_plus,di_minus)
shortCond = crossunder(di_plus,di_minus) 


//Stop levels and take profits
stop_level_long = strategy.position_avg_price - atr_multiplier*atr(14)
take_level_long = strategy.position_avg_price + 2*atr_multiplier*atr(14)
stop_level_short = strategy.position_avg_price + atr_multiplier*atr(14)
take_level_short = strategy.position_avg_price - 2*atr_multiplier*atr(14)


//Entries and exits 
strategy.entry("Long", strategy.long, when=longCond)
strategy.exit("Close Long","Long", stop=stop_level_long, limit = take_level_long)
strategy.entry("Short", strategy.short, when=shortCond)
strategy.exit("Close Short","Short", stop=stop_level_short, limit = take_level_short)



Thêm nữa