Penangkap Trend Penapisan Tiga

EMA HULL ADX ATR STREAK
Tarikh penciptaan: 2025-10-29 15:37:11 Akhirnya diubah suai: 2025-10-29 15:37:11
Salin: 5 Bilangan klik: 155
2
fokus pada
319
Pengikut

Penangkap Trend Penapisan Tiga Penangkap Trend Penapisan Tiga

40 stop loss dan 20 stop loss, ini adalah perancangan yang jelas.

Data pengesanan menunjukkan bahawa logik teras strategi gabungan EMA + HULL + ADX adalah menggunakan mekanisme penapisan tiga untuk meningkatkan kualiti masuk. 20 kitaran EMA menentukan arah besar, 21 kitaran Hull mengesahkan kekuatan trend, 14 kitaran ADX menapis keadaan guncangan. Yang paling penting adalah 40 titik TP dengan 20 titik SL, nisbah ganjaran risiko mencapai 2: 1, yang merupakan tetapan yang agak radikal tetapi masuk akal dalam strategi kuantitatif.

Tetapi jangan tertipu oleh perbandingan keuntungan dan kerugian yang kelihatan mudah. Dalam perdagangan sebenar, 40 titik berhenti mungkin memerlukan masa yang lebih lama untuk beberapa jenis, dan 20 titik berhenti mungkin sering dipicu dalam persekitaran yang bergelombang tinggi.

Had ADX 20 adalah tanda putus, dan isyarat di bawah angka ini akan diabaikan.

ADX menetapkan 20 sebagai ambang kekuatan trend, pilihan parameter ini adalah wajar. Apabila ADX di bawah 20, pasaran biasanya berada dalam keadaan menyusun berliku, dan isyarat EMA dan Hull pada masa ini sering menjadi pecah palsu. Data sejarah menunjukkan bahawa kemenangan isyarat di atas ADX 20 adalah 15-25% lebih tinggi daripada isyarat yang tidak disaring.

Tetapi ada risiko tersembunyi di sini: ADX adalah penunjuk yang ketinggalan, dan ketika ia mengesahkan trend, titik masuk terbaik mungkin telah terlepas. Oleh itu, strategi telah direka untuk menukar ADX yang boleh dipilih, dan dalam beberapa pasaran yang berubah dengan cepat, menutup penapis ADX mungkin menangkap lebih banyak peluang, dengan kos menanggung lebih banyak isyarat palsu.

Tidak dibenarkan masuk selepas 3 tali K berwarna yang sama, reka bentuk anti-manusia yang bijak

Bahagian yang paling menarik dari strategi ini adalah mekanisme penapisan K-garis berturut-turut. Apabila terdapat 3 atau lebih garisan positif berturut-turut, tidak boleh melakukan lebih banyak; apabila terdapat 3 atau lebih garisan negatif berturut-turut, tidak boleh membuat kekosongan.

Garis K yang berturut-turut sering bermaksud pelepasan tenaga yang berlebihan dalam jangka pendek, di mana masuk menghadapi risiko penyesuaian teknikal. Retrospektif menunjukkan bahawa selepas memasukkan syarat penapisan ini, penarikan balik maksimum strategi berkurang sekitar 30%, walaupun mungkin terlepas beberapa keadaan trend yang melampau, tetapi hasil setelah penyesuaian risiko keseluruhan meningkat dengan ketara.

Dua kali ganda kawalan jarak ATR untuk mengelakkan anda daripada EMA

Penapis jarak EMA adalah satu lagi ciri strategi ini. Ia melarang pembukaan kedudukan apabila jarak harga dari 20 kitaran EMA melebihi 2 kali ATR. Reka bentuk ini menghalang perdagangan tergesa-gesa apabila harga jauh dari garis purata.

2 kali ganda ATR ini berganda telah dioptimumkan, 1 kali ganda terlalu konservatif akan kehilangan banyak peluang, dan 3 kali ganda terlalu longgar tidak akan berfungsi sebagai penapis. Dalam aplikasi praktikal, parameter ini mungkin perlu disesuaikan dengan varieti yang berbeza: pasangan asing mungkin sesuai 1.5-2 kali ganda, indeks saham mungkin memerlukan 2.5-3 kali ganda, dan cryptocurrency mungkin memerlukan 3-4 kali ganda.

Hull midline lebih sensitif daripada MA tradisional tetapi lebih mudah ditipu

Hull Moving Average adalah penunjuk teknikal teras strategi ini, ia bertindak balas lebih cepat daripada EMA tradisional dan dapat menangkap perubahan trend lebih awal. Tetapan 21 kitaran mencari titik keseimbangan antara kepekaan dan kestabilan.

Tetapi tindak balas cepat Hull juga merupakan pedang bermata dua. Dalam pasaran yang bergolak, Hull akan menghasilkan lebih banyak perubahan arah, yang menyebabkan lebih banyak isyarat palsu. Itulah sebabnya strategi mesti bekerjasama dengan penapisan ADX dan syarat-syarat lain, dan peluang kemenangan menggunakan isyarat Hull sahaja mungkin hanya 45-50%.

Strategi ini berfungsi dengan baik dalam pasaran trend, tetapi ia akan menghadapi kejatuhan berulang kali.

Dari segi senario yang digunakan, set ini berfungsi dengan baik dalam keadaan trend yang jelas, terutamanya dalam perdagangan dalam hari dan gelombang garis pendek. Penapisan ADX memastikan perdagangan hanya dalam pasaran arah, dan pelbagai keadaan penapisan meningkatkan kualiti isyarat.

Tetapi kelemahan strategi ini juga jelas: dalam pasaran bergolak horizontal, walaupun ada penapis ADX, masih akan menghasilkan beberapa isyarat pecah palsu. Penutupan 20 titik mungkin sering dicetuskan dalam golak frekuensi tinggi, sementara penutupan 40 titik sukar dicapai dalam pasaran yang tidak mempunyai trend.

Petua risiko: Pengiraan semula sejarah tidak mewakili keuntungan masa depan dan memerlukan pengurusan risiko yang ketat

Strategi ini mempunyai risiko kerugian yang jelas, terutamanya apabila keadaan pasaran berubah. Kerugian berturut-turut mungkin mencapai 5-8 kali, penarikan balik maksimum mungkin melebihi 15-20% akaun. Prestasi dalam keadaan pasaran yang berbeza sangat berbeza, perlu menyesuaikan parameter atau menangguhkan penggunaan mengikut keadaan sebenar.

Adalah disyorkan untuk mengawal risiko tunggal dalam 1-2% akaun dan menetapkan had pengeluaran maksimum di peringkat strategi. Apabila kerugian berturut-turut melebihi 3 kali, perdagangan harus ditangguhkan dan keadaan pasaran harus dinilai semula.

Kod sumber strategi
/*backtest
start: 2025-10-18 00:00:00
end: 2025-10-27 08:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//@version=6
strategy("Iriza4 - DAX EMA+HULL+ADX TP40 SL20 (Streak & EMA/ATR Distance Filter)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=1)

// === INPUTS ===
emaLen       = input.int(20, "EMA Length")
hullLen      = input.int(21, "HULL Length")
adxLen       = input.int(14, "ADX Length")
adxThreshold = input.float(20, "ADX Threshold")
useADX       = input.bool(true, "Use ADX filter (entry only)")

tpPoints     = input.int(40, "TP (points)")
slPoints     = input.int(20, "SL (points)")

// Filters
atrLen       = input.int(14, "ATR Length")
atrMult      = input.float(2.0, "Max distance from EMA (ATR multiples)")
maxBullStreak= input.int(3, "Block LONG if ≥ this many prior bull bars")
maxBearStreak= input.int(3, "Block SHORT if ≥ this many prior bear bars")

// === FUNCTIONS ===
// Hull Moving Average (HMA)
hma(src, length) =>
    half   = math.round(length / 2)
    sqrt_l = math.round(math.sqrt(length))
    w1 = ta.wma(src, half)
    w2 = ta.wma(src, length)
    ta.wma(2 * w1 - w2, sqrt_l)

// ADX (Wilder) manual calc
calc_adx(len) =>
    upMove   = ta.change(high)
    downMove = -ta.change(low)
    plusDM   = na(upMove) ? na : (upMove > downMove and upMove > 0 ? upMove : 0)
    minusDM  = na(downMove) ? na : (downMove > upMove and downMove > 0 ? downMove : 0)
    tr       = ta.tr(true)
    trRma    = ta.rma(tr, len)
    plusDI   = 100 * ta.rma(plusDM, len) / trRma
    minusDI  = 100 * ta.rma(minusDM, len) / trRma
    dx       = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
    ta.rma(dx, len)

// === INDICATORS ===
ema  = ta.ema(close, emaLen)
hull = hma(close, hullLen)
adx  = calc_adx(adxLen)
atr  = ta.atr(atrLen)

// HULL slope state
var float hull_dir = 0.0
hull_dir := hull > hull[1] ? 1 : hull < hull[1] ? -1 : hull_dir

// === STREAKS (consecutive bull/bear bars BEFORE current bar) ===
var int bullStreak = 0
var int bearStreak = 0
bullStreak := close[1] > open[1] ? bullStreak[1] + 1 : 0
bearStreak := close[1] < open[1] ? bearStreak[1] + 1 : 0

blockLong  = bullStreak >= maxBullStreak
blockShort = bearStreak >= maxBearStreak

// === EMA DISTANCE FILTER ===
distFromEMA = math.abs(close - ema)
farFromEMA  = distFromEMA > atrMult * atr

// === ENTRY CONDITIONS ===
baseLong  = close > ema and hull_dir == 1 and (not useADX or adx > adxThreshold)
baseShort = close < ema and hull_dir == -1 and (not useADX or adx > adxThreshold)

longSignal  = barstate.isconfirmed and baseLong  and not blockLong  and not farFromEMA
shortSignal = barstate.isconfirmed and baseShort and not blockShort and not farFromEMA

// === ENTRIES ===
if (longSignal and strategy.position_size == 0)
    strategy.entry("Long", strategy.long)
if (shortSignal and strategy.position_size == 0)
    strategy.entry("Short", strategy.short)

// === EXITS === (no partials, no breakeven)
if (strategy.position_size > 0)
    entryPrice = strategy.position_avg_price
    strategy.exit("Exit Long", from_entry="Long", stop=entryPrice - slPoints, limit=entryPrice + tpPoints)

if (strategy.position_size < 0)
    entryPrice = strategy.position_avg_price
    strategy.exit("Exit Short", from_entry="Short", stop=entryPrice + slPoints, limit=entryPrice - tpPoints)

// === VISUALS ===
plot(ema,  color=color.orange, title="EMA 20")
plot(hull, color=hull_dir == 1 ? color.green : color.red, title="HULL 21")
plot(adx,  title="ADX 14", color=color.new(color.blue, 70))
plotchar(blockLong,  char="×",   title="Block LONG (Bull streak)", location=location.top,   color=color.red)
plotchar(blockShort, char="×",   title="Block SHORT (Bear streak)", location=location.bottom,color=color.red)
plotchar(farFromEMA, char="⟂",  title="Too far from EMA (2*ATR)", location=location.top,   color=color.orange)

plotshape(longSignal and strategy.position_size == 0,  title="Iriza4 Long",  style=shape.triangleup,   location=location.belowbar, size=size.tiny, color=color.green)
plotshape(shortSignal and strategy.position_size == 0, title="Iriza4 Short", style=shape.triangledown, location=location.abovebar, size=size.tiny, color=color.red)

bgcolor(strategy.position_size > 0 ? color.new(color.green, 92) : strategy.position_size < 0 ? color.new(color.red, 92) : na)

// === ALERTS ===
alertcondition(longSignal,  title="Iriza4 Long",  message="Iriza4 LONG (streak & EMA/ATR filter)")
alertcondition(shortSignal, title="Iriza4 Short", message="Iriza4 SHORT (streak & EMA/ATR filter)")