Strategi Trading Breakout dan Reversal Multi-Indikator: Sistem Entri Ganda Dikombinasikan dengan Optimasi Rentang Harga Pembukaan

EMA SMA RSI ATR VWAP ORB
Tanggal Pembuatan: 2025-04-01 16:00:37 Akhirnya memodifikasi: 2025-04-01 16:00:37
menyalin: 0 Jumlah klik: 382
2
fokus pada
319
Pengikut

Strategi Trading Breakout dan Reversal Multi-Indikator: Sistem Entri Ganda Dikombinasikan dengan Optimasi Rentang Harga Pembukaan Strategi Trading Breakout dan Reversal Multi-Indikator: Sistem Entri Ganda Dikombinasikan dengan Optimasi Rentang Harga Pembukaan

Ringkasan

Strategi perdagangan multi-indikator breakout dan reversal adalah metode perdagangan kuantitatif yang menggabungkan analisis teknis indikator dan perilaku harga untuk menangkap dua jenis peluang perdagangan utama di pasar: harga reversal dan tren breakout. Strategi ini dengan cerdik mengintegrasikan berbagai indikator teknis seperti moving average, RSI yang relatif kuat, rasio real range, ATR, dan harga rata-rata yang tertimbang volume transaksi, VWAP, sambil memperkenalkan mekanisme penembusan interval terbuka (ORB) untuk meningkatkan keandalan sinyal masuk.

Prinsip Strategi

Prinsip inti dari strategi ini adalah untuk mengidentifikasi tiga kategori peluang perdagangan yang berpotensi menguntungkan melalui penyaringan dan konfirmasi dari beberapa indikator:

  1. Sinyal perdagangan terbalik

    • Reversal Multi-Head: Ditimbulkan ketika harga naik melewati 50 periode Simple Moving Average ((SMA50), RSI berada di bawah overbought threshold ((default 30), dan harga berada di bawah VWAP, sementara tren keseluruhan ke atas ((harga di atas SMA200)).
    • Reversal head: Ditimbulkan ketika harga melewati SMA50 di bawah, RSI lebih tinggi dari overbought (default 70), dan harga lebih tinggi dari VWAP, sementara tren keseluruhan ke bawah (harga di bawah SMA200).
  2. Tanda-tanda tren

    • Penembusan multihead: Ketika 9 periode indeks bergerak rata-rata ((EMA9) melewati 20 periode indeks bergerak rata-rata ((EMA20), harga lebih tinggi dari VWAP, dan keseluruhan tren naik dipicu.
    • Terobosan overhead: Ketika EMA9 di bawah melewati EMA20, harga lebih rendah dari VWAP, dan tren keseluruhan ke bawah.
  3. Sinyal ORB yang diresmikan

    • Multi-head ORB: Ditimbulkan ketika harga menembus jumlah kolom tertentu (default 15 kolom) yang terbentuk sebelum pembukaan dan volume transaksi melebihi perkalian standar volume transaksi rata-rata selama periode pembukaan (default 1.5x).
    • Blank ORB: Dipicu ketika harga jatuh dari harga terendah yang terbentuk sebelum bukaan dan volume transaksi memenuhi kondisi devaluasi.

Strategi ini menggunakan indikator ATR untuk menghitung posisi stop loss dinamis, dengan memutar kembali periode tertentu dengan harga minimum / tertinggi (default 7) dan menambahkan kelipatan nilai ATR yang dikurangi (default 0.5). Setelah masuk, strategi ini menetapkan dua tujuan stop loss:

  • Target pertama (TP1): 0,5 kali risiko (default) dengan posisi 25%
  • Target kedua (TP2): 1.1 kali risiko (default), 75% dari posisi yang tersisa di posisi kosong

Ketika tujuan stop loss pertama tercapai, strategi secara otomatis akan menyesuaikan stop loss ke harga masuk (equilibrium point), secara efektif melindungi keuntungan yang telah diperoleh.

Keunggulan Strategis

  1. Diversifikasi sinyal masukDengan mengintegrasikan tiga sinyal masuk yang berbeda, yaitu reversal, breakout, dan breakout di area terbuka, strategi ini dapat beradaptasi dengan berbagai lingkungan pasar, secara efektif meningkatkan peluang perdagangan, sambil mempertahankan kualitas sinyal yang tinggi.

  2. Manajemen Risiko yang BaikStrategi ini menggunakan mekanisme stop-loss bertahap, yang memungkinkan sebagian dari keuntungan tetap terjaga dengan potensi keuntungan yang lebih besar. Ketika tujuan stop-loss pertama tercapai, stop-loss akan secara otomatis disesuaikan dengan titik keseimbangan keuntungan dan kerugian, sehingga “biarkan keuntungan berjalan” dan melindungi modal.

  3. Perhitungan Stop Loss Dinamis: Menggunakan indikator ATR untuk menghitung posisi stop loss, memungkinkan tingkat stop loss untuk disesuaikan dengan dinamika volatilitas pasar, lebih akurat mencerminkan kondisi pasar saat ini, menghindari pengaturan stop loss yang terlalu ketat atau terlalu longgar.

  4. Konfirmasi volume transaksiSecara khusus, mekanisme konfirmasi volume transaksi diperkenalkan dalam sinyal ORB, yang mengharuskan volume transaksi pada saat terobosan harus melebihi beberapa kali lipat dari volume transaksi rata-rata pada interval terbuka, untuk memfilter secara efektif terobosan berkualitas rendah.

  5. Filter tren: Mengetahui arah tren jangka panjang melalui rata-rata bergerak sederhana 200 periode ((SMA200), memastikan arah perdagangan konsisten dengan tren utama, meningkatkan tingkat keberhasilan perdagangan.

  6. Integrasi manajemen danaStrategi: mekanisme pengelolaan dana internal, membatasi proporsi dana yang digunakan untuk setiap transaksi (default 50% dari modal), memastikan diversifikasi dana, mengurangi risiko pada setiap transaksi.

Risiko Strategis

  1. Indikator keterlambatanStrategi ini bergantung pada indikator yang tertinggal seperti moving averages, yang dapat menyebabkan penundaan waktu masuk, kehilangan titik masuk yang baik, atau menyebabkan kerugian yang tidak perlu dalam pasar yang berubah dengan cepat.

Solusi: Pertimbangkan untuk menambahkan indikator prospektif seperti identifikasi pola perilaku harga, atau mempersingkat parameter untuk rata-rata bergerak periode yang lebih panjang, meningkatkan sensitivitas terhadap perubahan pasar.

  1. Parameter SensitivitasBanyaknya parameter yang dapat disesuaikan (seperti panjang EMA, nilai RSI, faktor ATR, dan lain-lain) membuat optimasi strategi menjadi rumit dan dapat menyebabkan over-fitting data historis dan tidak berkinerja baik di pasar masa depan.

Solusi: Menggunakan metode optimasi parameter yang tepat, seperti Forward Validation, Monte Carlo Simulation, untuk menghindari optimasi berlebihan; atau menggunakan parameter tetap, dengan fokus pada desain aturan yang lebih kuat.

  1. Konflik multi sinyalDalam beberapa situasi pasar, sinyal masuk yang berbeda dapat menghasilkan rekomendasi perdagangan yang saling bertentangan, yang menyebabkan kinerja strategi tidak stabil.

Solusinya: membangun sistem prioritas sinyal yang lebih ketat, atau memperkenalkan mekanisme konfirmasi tambahan untuk memastikan bahwa transaksi dilakukan hanya dalam kasus probabilitas tinggi.

  1. Mencegah risiko terjun payungDalam pasar dengan volatilitas tinggi atau kurang likuiditas, harga mungkin melompat di atas posisi stop loss, menyebabkan kerugian yang lebih besar dari yang diharapkan.

Solusi: Pertimbangkan untuk menggunakan strategi hedging opsi, atau meningkatkan jarak stop loss, atau bahkan mengurangi ukuran posisi sementara, dalam kondisi pasar yang sangat fluktuatif.

  1. Pengungkapan risiko sistemikStrategi: menjalankan beberapa transaksi terkait pada saat yang sama, mungkin menghadapi risiko sistemik pada saat pasar bergejolak, menyebabkan kerugian pada beberapa transaksi sekaligus.

Solusi: menerapkan pengendalian risiko secara global, membatasi ukuran posisi secara keseluruhan, atau menyebarkan perdagangan di antara berbagai kelas aset, mengurangi risiko relevansi.

Arah optimasi strategi

  1. Memperkenalkan model pembelajaran mesinAplikasi algoritma pembelajaran mesin untuk pengoptimalan bobot indikator atau klasifikasi lingkungan pasar, dapat secara otomatis menyesuaikan pentingnya masing-masing indikator dalam kondisi pasar yang berbeda, meningkatkan fleksibilitas strategi.

Alasan untuk optimalisasi: Kombinasi indikator berat tetap tradisional sulit untuk disesuaikan dengan fase pasar yang berbeda, sementara pembelajaran mesin dapat secara otomatis mempelajari pola kombinasi indikator optimal dari data historis.

  1. Mengintegrasikan indikator sentimen pasar: Menambahkan indeks volatilitas ((VIX) atau indikator sentimen pasar frekuensi tinggi, membantu strategi untuk lebih mengidentifikasi lingkungan pasar, menyesuaikan kondisi masuk dan parameter risiko.

Alasan optimasi: Sentimen pasar memiliki pengaruh yang signifikan terhadap pergerakan harga dalam jangka pendek. Integrasi indikator semacam ini dapat menangkap titik-titik perubahan pasar lebih awal dan mengoptimalkan waktu masuk dan keluar.

  1. Dinamiskan proporsi stop stopTarget Stop otomatis disesuaikan berdasarkan volatilitas historis atau level resistensi dukungan, sehingga strategi dapat memperoleh keuntungan yang wajar dalam lingkungan yang berbeda.

Alasan optimasi: Tingkat pengembalian risiko tetap mungkin tidak cukup fleksibel dalam berbagai lingkungan pasar, dan penyesuaian dinamis memungkinkan untuk menetapkan tujuan yang lebih jauh di pasar yang berfluktuasi tinggi, dan tujuan yang lebih konservatif di pasar yang berfluktuasi rendah.

  1. Masukkan filter waktuBergabung dengan mekanisme penyaringan berdasarkan waktu pasar, menghindari perdagangan pada saat-saat yang rendah fluktuasi atau tidak menguntungkan, seperti menit-menit pertama setelah pasar terbuka atau waktu tengah hari dengan likuiditas rendah.

Alasan optimasi: Aktivitas pasar menunjukkan perbedaan yang signifikan pada waktu yang berbeda dalam sehari, dan penyaringan waktu dapat membantu strategi fokus pada waktu perdagangan yang paling menguntungkan.

  1. Mengoptimalkan perhitungan skala posisi: Mengubah dari rasio modal tetap ke perhitungan skala posisi berdasarkan volatilitas, secara otomatis mengurangi posisi pada periode fluktuasi tinggi, dan meningkatkan posisi secara tepat pada periode fluktuasi rendah.

Alasan untuk optimasi: Risiko terkait langsung dengan volatilitas pasar, manajemen posisi dinamis dapat mempertahankan tingkat risiko yang lebih konsisten dan meningkatkan laba setelah penyesuaian risiko jangka panjang.

Meringkaskan

Strategi perdagangan multi-indicator breakout dan reversal adalah sistem perdagangan kuantitatif komprehensif yang menggabungkan berbagai metode analisis teknis, dengan mengintegrasikan sinyal breakout reversal, trend breakout, dan open range, yang dikombinasikan dengan mekanisme manajemen risiko dan manajemen dana yang baik, yang bertujuan untuk menangkap peluang perdagangan dalam berbagai lingkungan pasar. Keunggulan inti dari strategi ini adalah diversifikasi sinyal, kontrol risiko yang baik, dan kemampuan penyesuaian parameter yang kuat, terutama cocok untuk perdagangan jangka pendek.

Kode Sumber Strategi
/*backtest
start: 2025-01-01 00:00:00
end: 2025-03-31 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Reversal & Breakout Strategy with ORB", overlay=true, pyramiding=2, initial_capital=50000)

// --- Inputs ---
ema9Length = input.int(9, "9 EMA Length", minval=1)
ema20Length = input.int(20, "20 EMA Length", minval=1)
sma50Length = input.int(50, "50 SMA Length", minval=1)
sma200Length = input.int(200, "200 SMA Length", minval=1)
rsiLength = input.int(14, "RSI Length", minval=1)
rsiOverbought = input.int(70, "RSI Overbought", minval=0, maxval=100)
rsiOversold = input.int(30, "RSI Oversold", minval=0, maxval=100)
atrLength = input.int(14, "ATR Length", minval=1)
stopMulti = input.float(0.5, "Stop Loss ATR Multiplier", minval=0.1, step=0.1)
stopLookback = input.int(7, "Stop Loss Lookback", minval=1)
rr1 = input.float(0.5, "Risk:Reward Target 1", minval=0.1, step=0.1)
rr2 = input.float(1.1, "Risk:Reward Target 2", minval=0.1, step=0.1)
target1Percent = input.float(25, "Profit % Target 1", minval=0, maxval=100)
orbBars = input.int(15, "Opening Range Bars", minval=1, tooltip="Number of bars to define the opening range (e.g., 15 bars = 30 min on 2-min chart)")
volThreshold = input.float(1.5, "Volume Threshold Multiplier", minval=1.0, step=0.1, tooltip="Volume must be this multiple of the opening range average")

// --- Indicators ---
// Moving Averages
ema9 = ta.ema(close, ema9Length)
ema20 = ta.ema(close, ema20Length)
sma50 = ta.sma(close, sma50Length)
sma200 = ta.sma(close, sma200Length)

// VWAP
vwapValue = ta.vwap(close)

// RSI
rsi = ta.rsi(close, rsiLength)

// ATR
atr = ta.atr(atrLength)

// --- Opening Range Breakout ---
var float openingRangeHigh = na
var float openingRangeLow = na
var float openingRangeAvgVol = na
if bar_index < orbBars
    openingRangeHigh := na
    openingRangeLow := na
    openingRangeAvgVol := na
else if bar_index == orbBars
    openingRangeHigh := ta.highest(high, orbBars)
    openingRangeLow := ta.lowest(low, orbBars)
    openingRangeAvgVol := ta.sma(volume, orbBars)

orbLong = not na(openingRangeHigh) and ta.crossover(close, openingRangeHigh) and volume > openingRangeAvgVol * volThreshold
orbShort = not na(openingRangeLow) and ta.crossunder(close, openingRangeLow) and volume > openingRangeAvgVol * volThreshold

// --- Trend Detection ---
trendUp = close > sma200
trendDown = close < sma200

// --- Reversal Conditions ---
reversalLong = ta.crossover(close, sma50) and rsi < rsiOversold and close < vwapValue and trendUp
reversalShort = ta.crossunder(close, sma50) and rsi > rsiOverbought and close > vwapValue and trendDown

// --- Range Breakout Conditions ---
breakoutLong = ta.crossover(ema9, ema20) and close > vwapValue and trendUp
breakoutShort = ta.crossunder(ema9, ema20) and close < vwapValue and trendDown

// Combine conditions
longCondition = (reversalLong or breakoutLong or orbLong)
shortCondition = (reversalShort or breakoutShort or orbShort)

// --- Calculate Position Size ---
equityPerPosition = 25000.0  // $50,000 / 2 positions
positionSizeLong = math.floor(equityPerPosition / close)
positionSizeShort = math.floor(equityPerPosition / close)

// --- Stop Loss Calculation ---
longStop = ta.lowest(low, stopLookback) - (atr * stopMulti)
shortStop = ta.highest(high, stopLookback) + (atr * stopMulti)

// --- Variables to Store Trade Levels ---
var float tradeStop = na
var float tradeTarget1 = na
var float tradeTarget2 = na
var float initialPositionSize = na
var bool breakEvenSet = false  // Track if stop has been moved to break-even
var float stopLevel = na       // Dedicated variable for stop loss in exits
var float target1Level = na    // Dedicated variable for first take profit
var float target2Level = na    // Dedicated variable for second take profit
var float qtyTotal = na        // Track total quantity

// --- Reset Levels Before New Trade ---
var bool newTrade = false
if longCondition or shortCondition
    newTrade := true
else
    newTrade := false

if strategy.position_size == 0 and newTrade
    tradeStop := na
    tradeTarget1 := na
    tradeTarget2 := na
    stopLevel := na
    target1Level := na
    target2Level := na
    initialPositionSize := na
    qtyTotal := na
    breakEvenSet := false

// --- Strategy Entries ---
if longCondition and strategy.position_size == 0
    strategy.entry("Long", strategy.long, qty=positionSizeLong * 2)
    tradeStop := longStop
    stopLevel := longStop
    stopDistance = close - tradeStop
    tradeTarget1 := close + (stopDistance * rr1)
    tradeTarget2 := close + (stopDistance * rr2)
    target1Level := tradeTarget1
    target2Level := tradeTarget2
    initialPositionSize := positionSizeLong * 2
    qtyTotal := positionSizeLong * 2
    breakEvenSet := false  // Reset break-even flag

if shortCondition and strategy.position_size == 0
    strategy.entry("Short", strategy.short, qty=positionSizeShort * 2)
    tradeStop := shortStop
    stopLevel := shortStop
    stopDistance = tradeStop - close
    tradeTarget1 := close - (stopDistance * rr1)
    tradeTarget2 := close - (stopDistance * rr2)
    target1Level := tradeTarget1
    target2Level := tradeTarget2
    initialPositionSize := positionSizeShort * 2
    qtyTotal := positionSizeShort * 2
    breakEvenSet := false  // Reset break-even flag

// --- Trade Exits ---
if strategy.position_size > 0
    qty_tp1 = qtyTotal * (target1Percent / 100)
    qty_tp2 = qtyTotal * ((100 - target1Percent) / 100)
    strategy.exit("Long Exit 1", "Long", qty=qty_tp1, stop=stopLevel, limit=target1Level)
    strategy.exit("Long Exit 2", "Long", qty=qty_tp2, stop=stopLevel, limit=target2Level)

if strategy.position_size < 0
    qty_tp1 = qtyTotal * (target1Percent / 100)
    qty_tp2 = qtyTotal * ((100 - target1Percent) / 100)
    strategy.exit("Short Exit 1", "Short", qty=qty_tp1, stop=stopLevel, limit=target1Level)
    strategy.exit("Short Exit 2", "Short", qty=qty_tp2, stop=stopLevel, limit=target2Level)

// --- Move Stop to Break-even ---
if strategy.position_size != 0 and not na(initialPositionSize) and not breakEvenSet
    if math.abs(strategy.position_size) < math.abs(initialPositionSize)
        tradeStop := strategy.position_avg_price
        stopLevel := strategy.position_avg_price
        tradeTarget1 := na  // Clear first target for plotting
        breakEvenSet := true  // Mark break-even as set

// --- Manual Close Fallback ---
if strategy.position_size > 0
    if close >= target2Level or close <= stopLevel
        strategy.close("Long", qty=qtyTotal, comment="Manual Close")

if strategy.position_size < 0
    if close <= target2Level or close >= stopLevel
        strategy.close("Short", qty=qtyTotal, comment="Manual Close")

// --- Reset Levels When No Position ---
if strategy.position_size == 0 and not newTrade
    tradeStop := na
    tradeTarget1 := na
    tradeTarget2 := na
    stopLevel := na
    target1Level := na
    target2Level := na
    initialPositionSize := na
    qtyTotal := na
    breakEvenSet := false

// --- Plotting ---
plot(tradeStop, title="Stop Loss", color=color.red, linewidth=1, style=plot.style_linebr)
plot(tradeTarget1, title="Take Profit 1", color=color.green, linewidth=1, style=plot.style_linebr)
plot(tradeTarget2, title="Take Profit 2", color=color.blue, linewidth=1, style=plot.style_linebr)