Chiến lược theo dõi xu hướng động lượng đột phá ba đường kết hợp với bộ lọc ADX

ADX ATR TMA TP SL 3LS
Ngày tạo: 2025-02-20 17:46:30 sửa đổi lần cuối: 2025-02-20 17:46:30
sao chép: 0 Số nhấp chuột: 459
2
tập trung vào
319
Người theo dõi

Chiến lược theo dõi xu hướng động lượng đột phá ba đường kết hợp với bộ lọc ADX Chiến lược theo dõi xu hướng động lượng đột phá ba đường kết hợp với bộ lọc ADX

Tổng quan

Chiến lược này là một hệ thống giao dịch theo dõi xu hướng dựa trên hình thức phá vỡ ba đường và lọc xu hướng ADX. Chiến lược xác định cường độ xu hướng bằng cách nhận ra hình thức phá vỡ sau ba đường đồng hướng liên tiếp, kết hợp với chỉ số ADX và sử dụng ATR để thiết lập vị trí dừng lỗ. Phương pháp này đảm bảo độ tin cậy của tín hiệu nhập cảnh và có thể kiểm soát rủi ro hiệu quả.

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. Nhận dạng hình dạng đột phá ba dòng: hình dạng nhiều đầu cần một đột phá lớn hơn sau ba dòng dương liên tiếp; hình dạng đầu trống cần một đột phá lớn hơn sau ba dòng dương liên tiếp.
  2. Xác nhận cường độ xu hướng ADX: Sử dụng chỉ số ADX để xác định cường độ xu hướng hiện tại, chỉ khi giá trị ADX vượt ngưỡng thiết lập (đặc định 25) sẽ tạo ra tín hiệu giao dịch.
  3. ATR động dừng lỗ: Sử dụng ATR giá trị động tính toán dừng và dừng lỗ vị trí, trong đó dừng được thiết lập là 2 lần ATR, dừng lỗ được thiết lập là 1 lần ATR.
  4. Logic thực hiện giao dịch: Khi đáp ứng các điều kiện nhận dạng hình dạng và cường độ xu hướng, hệ thống sẽ tự động thực hiện các hoạt động mở vị trí và đồng thời thiết lập lệnh dừng lỗ tương ứng.

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

  1. Tín hiệu đáng tin cậy cao: kết hợp với hình dạng giá và xác nhận kép các chỉ số xu hướng, tăng đáng kể độ tin cậy của tín hiệu giao dịch.
  2. Kiểm soát rủi ro hợp lý: Sử dụng thiết lập dừng lỗ động của ATR, có thể điều chỉnh các tham số kiểm soát rủi ro tùy theo biến động của thị trường.
  3. Mức độ hệ thống hóa cao: logic chiến lược rõ ràng, tham số có thể điều chỉnh được, dễ dàng giao dịch hệ thống.
  4. Khả năng thích ứng: có thể được áp dụng cho các thị trường khác nhau và thời gian, có khả năng ứng dụng tốt.

Rủi ro chiến lược

  1. Rủi ro phá vỡ giả: Có thể có tín hiệu phá vỡ giả trong thị trường biến động, dẫn đến tổn thất giao dịch.
  2. Rủi ro trượt: Có thể có nguy cơ trượt đáng kể trong thị trường ít lưu động hơn do chiến lược sử dụng giá thị trường đơn vào.
  3. Tính nhạy cảm của tham số: hiệu quả chiến lược nhạy cảm với các tham số như ADX Threshold và chu kỳ ATR, cần phải được tối ưu hóa cho các thị trường khác nhau.
  4. Xu hướng phụ thuộc: Chiến lược có thể không hoạt động tốt trong thị trường biến động và phù hợp hơn với môi trường thị trường có xu hướng rõ ràng.

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

  1. Tăng cường nhận dạng hình dạng: Bạn có thể thêm các điều kiện xác thực hình dạng giá, chẳng hạn như tính đến tỷ lệ thực thể và bóng của đường phích.
  2. Cải thiện xác nhận xu hướng: Các chỉ số xu hướng khác như MACD hoặc chéo trung bình di chuyển có thể được giới thiệu như xác nhận phụ trợ.
  3. Tối ưu hóa Stop Loss: có thể điều chỉnh ATR theo các biến động của các đặc điểm thị trường khác nhau hoặc theo dõi Stop Loss.
  4. Tối ưu hóa thời gian giao dịch: Bạn có thể thêm bộ lọc thời gian giao dịch để tránh giao dịch trong thời gian thị trường biến động.

Tóm tắt

Chiến lược theo dõi xu hướng động lực đột phá ba dòng là một hệ thống giao dịch hoàn chỉnh kết hợp các hình thức giá cổ điển và các chỉ số kỹ thuật. Với bộ lọc xu hướng ADX và kiểm soát rủi ro động ATR, chiến lược này cũng kiểm soát rủi ro tốt hơn trong khi đảm bảo cơ hội giao dịch. Mặc dù có một số hạn chế, chiến lược này có giá trị ứng dụng thực tế tốt hơn thông qua tối ưu hóa tham số và cải tiến chiến lược hợp lý.

Mã nguồn chiến lược
/*backtest
start: 2024-08-11 00:00:00
end: 2025-02-19 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

// Copyright ...
// Based on the TMA Overlay by Arty, converted to a simple strategy example.
// Pine Script v5

//@version=5
strategy(title='3 Line Strike [TTF] - Strategy with ATR and ADX Filter',
     shorttitle='3LS Strategy [TTF]',
     overlay=true,
     initial_capital=100000,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=100,
     pyramiding=0)

// -----------------------------------------------------------------------------
//                               INPUTS
// -----------------------------------------------------------------------------

// ATR and ADX Inputs
atrLength = input.int(title='ATR Length', defval=14, group='ATR & ADX')
adxLength = input.int(title='ADX Length', defval=14, group='ATR & ADX')
adxThreshold = input.float(title='ADX Threshold', defval=25, group='ATR & ADX')

// ### 3 Line Strike
showBear3LS = input.bool(title='Show Bearish 3 Line Strike', defval=true, group='3 Line Strike',
     tooltip="Bearish 3 Line Strike (3LS-Bear) = 3 zelené sviečky, potom veľká červená sviečka (engulfing).")
showBull3LS = input.bool(title='Show Bullish 3 Line Strike', defval=true, group='3 Line Strike',
     tooltip="Bullish 3 Line Strike (3LS-Bull) = 3 červené sviečky, potom veľká zelená sviečka (engulfing).")

// -----------------------------------------------------------------------------
//                          CALCULATIONS
// -----------------------------------------------------------------------------

// Calculate ATR
atr = ta.atr(atrLength)

// Calculate ADX components manually
tr = ta.tr(true)
plusDM = ta.change(high) > ta.change(low) and ta.change(high) > 0 ? ta.change(high) : 0
minusDM = ta.change(low) > ta.change(high) and ta.change(low) > 0 ? ta.change(low) : 0
smoothedPlusDM = ta.rma(plusDM, adxLength)
smoothedMinusDM = ta.rma(minusDM, adxLength)
smoothedTR = ta.rma(tr, adxLength)

plusDI = (smoothedPlusDM / smoothedTR) * 100
minusDI = (smoothedMinusDM / smoothedTR) * 100

dx = math.abs(plusDI - minusDI) / (plusDI + minusDI) * 100
adx = ta.rma(dx, adxLength)

// Helper Functions
getCandleColorIndex(barIndex) =>
    int ret = na
    if (close[barIndex] > open[barIndex])
        ret := 1
    else if (close[barIndex] < open[barIndex])
        ret := -1
    else
        ret := 0
    ret

isEngulfing(checkBearish) =>
    sizePrevCandle = close[1] - open[1]
    sizeCurrentCandle = close - open
    isCurrentLargerThanPrevious = math.abs(sizeCurrentCandle) > math.abs(sizePrevCandle)

    if checkBearish
        isGreenToRed = (getCandleColorIndex(0) < 0) and (getCandleColorIndex(1) > 0)
        isCurrentLargerThanPrevious and isGreenToRed
    else
        isRedToGreen = (getCandleColorIndex(0) > 0) and (getCandleColorIndex(1) < 0)
        isCurrentLargerThanPrevious and isRedToGreen

isBearishEngulfing() => isEngulfing(true)
isBullishEngulfing() => isEngulfing(false)

is3LSBear() =>
    is3LineSetup = (getCandleColorIndex(1) > 0) and (getCandleColorIndex(2) > 0) and (getCandleColorIndex(3) > 0)
    is3LineSetup and isBearishEngulfing()

is3LSBull() =>
    is3LineSetup = (getCandleColorIndex(1) < 0) and (getCandleColorIndex(2) < 0) and (getCandleColorIndex(3) < 0)
    is3LineSetup and isBullishEngulfing()

// Signals
is3LSBearSig = is3LSBear() and adx > adxThreshold
is3LSBullSig = is3LSBull() and adx > adxThreshold

// Take Profit and Stop Loss
longTP = close + 2 * atr
longSL = close - 1 * atr
shortTP = close - 2 * atr
shortSL = close + 1 * atr

// -----------------------------------------------------------------------------
//                          STRATEGY ENTRY PRÍKAZY
// -----------------------------------------------------------------------------
if (showBull3LS and is3LSBullSig)
    strategy.entry("3LS_Bull", strategy.long, comment="3LS Bullish")
    strategy.exit("Exit Bull", from_entry="3LS_Bull", limit=longTP, stop=longSL)

if (showBear3LS and is3LSBearSig)
    strategy.entry("3LS_Bear", strategy.short, comment="3LS Bearish")
    strategy.exit("Exit Bear", from_entry="3LS_Bear", limit=shortTP, stop=shortSL)