Chiến lược giao dịch động lượng đột phá xu hướng ADX

ADX DMI MA ATR
Ngày tạo: 2024-11-28 15:44:59 sửa đổi lần cuối: 2024-11-28 15:44:59
sao chép: 0 Số nhấp chuột: 583
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch động lượng đột phá xu hướng ADX

Tổng quan

Đây là một chiến lược giao dịch định lượng dựa trên chỉ số xu hướng trung bình (ADX) và giá phá vỡ. Chiến lược này chủ yếu đánh giá cường độ của xu hướng thị trường bằng cách theo dõi số chỉ số ADX và kết hợp với tín hiệu phá vỡ giá để nắm bắt động lực thị trường. Chiến lược được thiết lập để hoạt động trong một khoảng thời gian giao dịch cụ thể và quản lý rủi ro bằng cách dừng lỗ và giới hạn số lần giao dịch mỗi ngày.

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

Logic cốt lõi của chiến lược bao gồm các yếu tố chính sau:

  1. Giám sát chỉ số ADX: Sử dụng chỉ số ADX để đánh giá cường độ của xu hướng thị trường, khi ADX thấp hơn 17,5 cho thấy thị trường có thể sắp tạo ra một xu hướng mới.
  2. Phân tích giá phá vỡ: Chiến lược sẽ theo dõi giá đóng cửa cao nhất trong 34 chu kỳ qua và kích hoạt tín hiệu giao dịch khi giá hiện tại phá vỡ ngưỡng kháng cự.
  3. Quản lý thời gian giao dịch: Chiến lược chỉ hoạt động trong thời gian giao dịch được chỉ định ((0730-1430) để tránh rủi ro trong thời gian thiếu thanh khoản.
  4. Cơ chế kiểm soát rủi ro:
    • Thiết lập lệnh dừng USD cố định để hạn chế tổn thất trên một giao dịch
    • Giới hạn tối đa 3 giao dịch mỗi lần giao dịch
    • Tự động thanh toán tất cả các vị trí nắm giữ tại thời điểm kết thúc giao dịch

Lợi thế chiến lược

  1. Khả năng nắm bắt xu hướng: Có thể xác định hiệu quả giai đoạn đầu của xu hướng thị trường thông qua chỉ số ADX kết hợp với giá đột phá.
  2. Quản lý rủi ro tốt: bao gồm các biện pháp kiểm soát rủi ro nhiều cấp, như dừng cố định, giới hạn số lần giao dịch và cơ chế đóng cửa tự động.
  3. Mức độ tự động hóa cao: Chiến lược logic rõ ràng, giao dịch hoàn toàn tự động, không cần can thiệp của con người.
  4. Khả năng thích ứng: có thể điều chỉnh các tham số theo các điều kiện thị trường khác nhau, chẳng hạn như số tiền dừng lỗ, chu kỳ hồi phục.

Rủi ro chiến lược

  1. Rủi ro phá vỡ giả: Có thể xảy ra phá vỡ giả trong thị trường biến động dẫn đến tổn thất liên tục.
  2. Tùy thuộc vào tham số: hiệu quả của chiến lược phụ thuộc nhiều vào ADX Threshold và thiết lập chu kỳ lùi.
  3. Hạn chế thời gian: chỉ giao dịch trong một thời gian nhất định có thể bỏ lỡ cơ hội trong các thời gian khác.
  4. Cài đặt dừng lỗ: Đặt lệnh dừng USD có thể không linh hoạt trong môi trường biến động khác nhau.

Hướng tối ưu hóa chiến lược

  1. Hạn chế động: Đề xuất thay đổi Hạn chế USD cố định thành Hạn chế động dựa trên ATR để thích ứng với môi trường thị trường biến động khác nhau.
  2. Bộ lọc môi trường thị trường: tăng bộ lọc biến động, điều chỉnh hoặc tạm dừng giao dịch trong môi trường biến động cao.
  3. Tối ưu hóa nhập cảnh: Có thể xem xét tăng xác nhận giao dịch, tăng độ tin cậy của tín hiệu đột phá.
  4. Điều chỉnh tham số động: cơ chế điều chỉnh thích ứng để thực hiện ADX threshold và chu kỳ hồi quy.

Tóm tắt

Đây là một chiến lược theo dõi xu hướng có cấu trúc, logic rõ ràng. Bằng cách kết hợp các chỉ số ADX với các đợt phá vỡ giá, nắm bắt các cơ hội xu hướng thị trường trong khuôn khổ quản lý rủi ro hiệu quả. Mặc dù có một số không gian để tối ưu hóa, nhưng khung cơ bản của chiến lược là vững chắc, phù hợp với các thành phần cơ bản của hệ thống giao dịch định lượng.

Mã nguồn chiến lược
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HuntGatherTrade
// ========================
// NQ 30 minute, ES 30 minute

//@version=5
strategy("ADX Breakout", overlay=false, initial_capital=25000, default_qty_value=1)

// ===============================
// Input parameters
// ===============================
stopLoss = input(1000.0, title="Stop Loss ($)", group="Exits")
session = input("0730-1430:1234567", group="Trade Session")
highestLB = input(34, title="Highest lookback window", group="Indicator values")

// ===============================
// Trade Session Handling
// ===============================
t = time(timeframe.period, session)

// Reset numTrades at the start of each session
var int numTrades = 0
is_new_session = ta.change(time("D")) != 0
if is_new_session
    numTrades := 0

// ===============================
// Entry Conditions
// ===============================
[plusDI, minusDI, adxValue] = ta.dmi(50, 14)
entryCondition = (close >= ta.highest(close, highestLB)[1]) and (adxValue < 17.5) and (strategy.position_size == 0) and (numTrades < 3) and not na(t)

// ===============================
// 7. Execute Entry
// ===============================
var float stopPricePlot = na

if entryCondition
    entryPrice = close + syminfo.mintick
    strategy.entry("Long Entry", strategy.long, stop=entryPrice)
    //stopPrice = strategy.position_avg_price - (stopLoss / syminfo.pointvalue)
    //strategy.exit("Stop Loss", "Long Entry", stop=stopPrice)
    numTrades += 1

if (strategy.position_size > 0) and (strategy.position_size[1] == 0)
    stopPoints = stopLoss / syminfo.pointvalue
    stopPrice = strategy.position_avg_price - stopPoints
    stopPrice := math.round(stopPrice / syminfo.mintick) * syminfo.mintick
    strategy.exit("Stop Loss", from_entry="Long Entry", stop=stopPrice)


if ta.change(strategy.opentrades) == 1
    float entryPrice = strategy.opentrades.entry_price(0)
    stopPricePlot := entryPrice - (stopLoss / syminfo.pointvalue)

if ta.change(strategy.closedtrades) == 1
    stopPricePlot   := na

plot(stopPricePlot, "Stop-loss level", color.red, 1, plot.style_linebr)

// ===============================
// Exit at End of Session
// ===============================
if na(t) and strategy.position_size != 0
    strategy.close_all(comment="End of Day Exit")