Penangkap Tren Penyaringan Tiga Kali Lipat

EMA HULL ADX ATR STREAK
Tanggal Pembuatan: 2025-10-29 15:37:11 Akhirnya memodifikasi: 2025-10-29 15:37:11
menyalin: 5 Jumlah klik: 155
2
fokus pada
319
Pengikut

Penangkap Tren Penyaringan Tiga Kali Lipat Penangkap Tren Penyaringan Tiga Kali Lipat

40 stop loss dan 20 stop loss, rasio kerugian 2:1 ini sudah jelas.

Data retrospektif menunjukkan bahwa logika inti dari strategi kombinasi EMA + HULL + ADX adalah menggunakan mekanisme penyaringan tiga untuk meningkatkan kualitas masuk. 20 siklus EMA menilai arah besar, 21 siklus Hull mengkonfirmasi kekuatan tren, 14 siklus ADX menyaring situasi getaran. Yang paling penting adalah 40 poin TP dengan 20 poin SL, rasio pengembalian risiko mencapai 2: 1, yang merupakan pengaturan yang relatif radikal tetapi masuk akal dalam strategi kuantitatif.

Namun, jangan tertipu oleh perbandingan keuntungan dan kerugian yang tampak sederhana ini. Dalam perdagangan nyata, stop loss 40 poin mungkin perlu menunggu lebih lama pada beberapa varietas, sementara stop loss 20 poin mungkin sering dipicu dalam lingkungan yang sangat berfluktuasi.

Tingkat ADX 20 adalah titik tolak dan sinyal di bawah angka ini langsung diabaikan

ADX menetapkan 20 sebagai ambang batas kekuatan tren, parameter ini dipilih dengan alasan. Ketika ADX di bawah 20, pasar biasanya berada dalam keadaan horizontal, dan sinyal EMA dan Hull pada saat ini sering kali adalah false breakout. Data historis menunjukkan bahwa kemenangan sinyal di atas ADX 20 lebih tinggi 15-25% dari sinyal yang tidak difilterkan.

Tetapi ada risiko tersembunyi di sini: ADX adalah indikator yang tertinggal, dan ketika ia mengkonfirmasi tren, titik masuk yang optimal mungkin telah dilewatkan. Oleh karena itu, strategi dirancang untuk mengubah ADX yang dapat dipilih, dan di beberapa pasar yang berubah dengan cepat, menutup filter ADX dapat menangkap lebih banyak peluang, dengan harga lebih banyak sinyal palsu.

Desain Anti-Kemanusiaan yang Cerdas, Dilarang Masuk Setelah 3 Garis K Berwarna Sama

Bagian yang paling menarik dari strategi ini adalah mekanisme penyaringan K-line berturut-turut. Ketika ada 3 atau lebih garis positif berturut-turut, tidak boleh melakukan lebih banyak; Ketika ada 3 atau lebih garis negatif berturut-turut, tidak boleh melakukan vakum. Ini benar-benar bertentangan dengan naluri “mengejar dan membunuh jatuh”, tetapi data membuktikan bahwa pemikiran terbalik ini benar.

Berlanjut ke K-line sering berarti terlalu banyak pelepasan momentum dalam jangka pendek, dan pada saat ini masuk menghadapi risiko penyesuaian teknis. Retrospektif menunjukkan bahwa setelah menambahkan kondisi penyaringan ini, penarikan maksimum dari strategi berkurang sekitar 30%, meskipun mungkin kehilangan beberapa tren ekstrem, tetapi pendapatan setelah penyesuaian risiko secara keseluruhan meningkat dengan jelas.

Dua kali ATR remote control membuat Anda jauh dari EMA trap

Filter jarak EMA adalah fitur lain dari strategi ini. Pembukaan posisi dilarang ketika harga berada lebih dari 2 kali ATR dari jarak 20 siklus EMA. Desain ini mencegah perdagangan impulsif ketika harga sangat menyimpang dari garis rata-rata.

2 kali lipat ATR adalah perkalian yang telah dioptimalkan, 1 kali lipat terlalu konservatif akan kehilangan banyak peluang, dan 3 kali lipat terlalu fleksibel tidak akan berfungsi sebagai filter. Dalam aplikasi praktis, parameter ini mungkin perlu disesuaikan dengan varietas yang berbeda: pasangan mata uang asing mungkin sesuai dengan 1.5-2 kali lipat, futures indeks saham mungkin memerlukan 2.5-3 kali lipat, dan cryptocurrency mungkin memerlukan 3-4 kali lipat.

Pengertian arah pada garis tengah Hull lebih sensitif dari MA tradisional, namun lebih mudah untuk dibohongi

Hull Moving Average adalah indikator teknis inti dari strategi ini, yang bereaksi lebih cepat daripada EMA tradisional dan dapat menangkap perubahan tren lebih awal. Pengaturan 21 siklus menemukan titik keseimbangan antara sensitivitas dan stabilitas.

Tetapi reaksi cepat Hull juga merupakan pedang bermata dua. Dalam pasar yang bergoyang, Hull akan menghasilkan lebih banyak perubahan arah, yang menyebabkan lebih banyak sinyal palsu. Itulah mengapa strategi harus bekerja sama dengan penyaringan ADX dan kondisi lainnya, dan kemungkinan kemenangan menggunakan sinyal Hull saja hanya 45-50%.

Strategi ini bekerja dengan baik di pasar tren, tetapi di pasar goyangan akan mengalami kekalahan berulang kali.

Dari skenario yang berlaku, setelan ini bekerja dengan baik dalam situasi tren yang jelas, terutama dalam perdagangan intraday dan gelombang pendek. Filter ADX memastikan perdagangan hanya di pasar yang berarah, dan kondisi penyaringan ganda meningkatkan kualitas sinyal.

Tetapi kelemahan dari strategi ini juga jelas: dalam pasar yang bergoyang horizontal, bahkan dengan filter ADX, masih akan menghasilkan beberapa sinyal false breakout. Stop loss 20 poin mungkin sering dipicu dalam goyang frekuensi tinggi, sedangkan stop loss 40 poin sulit dicapai dalam pasar yang tidak memiliki tren.

Tip Risiko: Pemantauan historis tidak mewakili keuntungan di masa depan, perlu manajemen risiko yang ketat

Strategi ini memiliki risiko kerugian yang jelas, terutama ketika kondisi pasar berubah. Kerugian berturut-turut dapat mencapai 5-8 kali, dan penarikan maksimum dapat melebihi 15-20% dari akun. Kinerja sangat bervariasi dalam lingkungan pasar yang berbeda dan perlu menyesuaikan parameter atau menunda penggunaan sesuai dengan situasi aktual.

Disarankan untuk mengendalikan risiko satu kali dalam 1-2% dari akun dan menetapkan batas maksimum penarikan pada tingkat strategi. Jika Anda mengalami kerugian lebih dari 3 kali berturut-turut, Anda harus menghentikan perdagangan dan mengevaluasi kembali kondisi pasar.

Kode 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)")