Strategi perdagangan breakout tiga garis dinamis berdasarkan ATR dan ADX

ATR ADX SL TP
Tanggal Pembuatan: 2025-02-21 09:23:20 Akhirnya memodifikasi: 2025-02-27 17:20:50
menyalin: 2 Jumlah klik: 405
2
fokus pada
319
Pengikut

Strategi perdagangan breakout tiga garis dinamis berdasarkan ATR dan ADX Strategi perdagangan breakout tiga garis dinamis berdasarkan ATR dan ADX

Ringkasan

Strategi ini adalah sistem perdagangan canggih yang didasarkan pada tiga garis breakout klasik yang memberikan solusi perdagangan yang lengkap dengan mengintegrasikan indikator konfirmasi tren ADX dan mekanisme stop loss stop-loss dinamis ATR. Inti dari strategi ini adalah untuk mengidentifikasi tiga garis breakout yang berturut-turut setelah K-line dan mengkonfirmasi kekuatan tren untuk menghasilkan sinyal perdagangan yang akurat.

Prinsip Strategi

Strategi ini didasarkan pada tiga mekanisme inti: pertama adalah mengidentifikasi tiga bentuk breakout garis klasik, termasuk bentuk bullish ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((

Keunggulan Strategis

  1. Mekanisme pengesahan sinyal yang disempurnakan: meningkatkan keandalan sinyal dengan menggabungkan beberapa indikator teknis (K-line form, ADX, ATR)
  2. Manajemen risiko yang cerdas: pengaturan stop loss berbasis ATR yang dinamis yang dapat secara otomatis menyesuaikan diri dengan volatilitas pasar
  3. Kustomisasi tinggi: menawarkan opsi penyesuaian untuk beberapa parameter penting, termasuk ADX threshold, siklus ATR, dan sebagainya
  4. Peningkatan pelacakan tren: Filter ADX memastikan hanya masuk dalam lingkungan tren yang kuat
  5. Struktur kode yang jelas: Desain modular memudahkan pemeliharaan dan perluasan

Risiko Strategis

  1. Keterlambatan pengenalan bentuk: Konfirmasi bentuk terobosan tiga baris membutuhkan empat baris K untuk diselesaikan, yang dapat menyebabkan keterlambatan waktu masuk
  2. Resiko Penembusan Palsu: Mungkin ada sinyal penembusan palsu di pasar yang bergejolak
  3. Lagging ADX: Sebagai indikator pengesahan tren, ADX sendiri memiliki lagging
  4. Pertimbangan stop loss: pengaturan stop loss berdasarkan ATR mungkin terlalu besar atau terlalu kecil dalam fluktuasi yang kuat
  5. Ketergantungan pada kondisi pasar: Strategi lebih baik di pasar yang jelas sedang tren, dan mungkin kurang efektif di pasar yang bergoyang

Arah optimasi strategi

  1. Peningkatan filter sinyal: mekanisme konfirmasi pengiriman dapat ditambahkan untuk meningkatkan keandalan sinyal
  2. Optimasi parameter dinamis: memperkenalkan mekanisme adaptasi untuk menyesuaikan ADX threshold dan siklus ATR secara dinamis
  3. Optimalisasi waktu masuk: dapat digabungkan dengan struktur harga (support/resistance) untuk mengoptimalkan titik masuk
  4. Pengelolaan Posisi yang Lebih Baik: Menambahkan mekanisme manajemen posisi dinamis berdasarkan volatilitas
  5. Identifikasi lingkungan pasar: menambahkan logika klasifikasi lingkungan pasar, menggunakan pengaturan parameter yang berbeda dalam kondisi pasar yang berbeda

Meringkaskan

Strategi ini menciptakan sistem perdagangan yang memiliki dasar teoritis dan praktis dengan menggabungkan bentuk terobosan tiga baris klasik dengan indikator teknologi modern. Keunggulan utamanya adalah mekanisme konfirmasi sinyal ganda dan manajemen risiko yang cerdas, tetapi perlu diperhatikan kesesuaian dan pengoptimalan parameter dalam lingkungan pasar. Dengan arah pengoptimalan yang disarankan, strategi ini memiliki ruang untuk peningkatan lebih lanjut.

Kode Sumber Strategi
/*backtest
start: 2024-08-05 00:00:00
end: 2024-12-24 00:00:00
period: 5h
basePeriod: 5h
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)