Strategi perdagangan adaptif blok breakout fraktal multi-periode

OB SD MA ATR
Tanggal Pembuatan: 2024-12-27 15:49:16 Akhirnya memodifikasi: 2024-12-27 15:49:16
menyalin: 8 Jumlah klik: 479
1
fokus pada
1617
Pengikut

Strategi perdagangan adaptif blok breakout fraktal multi-periode

Ringkasan

Strategi ini adalah sistem perdagangan adaptif berdasarkan teori fraktal dan analisis blok pesanan. Ia menangkap peluang perdagangan probabilitas tinggi dengan mengidentifikasi level dukungan dan resistensi utama dalam struktur pasar, dikombinasikan dengan sinyal penembusan fraktal dan konfirmasi blok pesanan. Strategi ini memadukan sejumlah indikator teknis, termasuk indikator fraktal, blok pesanan dinamis, dan sistem konfirmasi terobosan harga, untuk mencapai posisi titik balik pasar yang tepat dan pemahaman akurat terhadap peluang perdagangan.

Prinsip Strategi

Logika inti dari strategi ini dibangun atas tiga pilar utama: pertama, pemantauan berkelanjutan terhadap titik tertinggi dan terendah pasar melalui modul perhitungan fraktal untuk mengidentifikasi area pembalikan tren potensial; kedua, melalui analisis blok pesanan, membangun area penawaran dan permintaan pada level harga utama ; dan terakhir, melalui sistem konfirmasi Breakout untuk memverifikasi validitas terobosan harga. Ketika harga menembus fraktal atas dan dipastikan valid, sistem akan membuat blok order area permintaan di area candle merah terdekat dan membuka order panjang; ketika harga menembus fraktal bawah dan dipastikan valid, sistem akan membuat blok order area permintaan di area candle merah terdekat dan membuka order panjang. , sistem akan membuat area pasokan di area lilin hijau terdekat Blok pesanan dan membuka pesanan pendek. Strategi ini juga menyertakan fungsi pembaruan dinamis untuk warna blok pesanan, yang digunakan untuk secara intuitif menampilkan hubungan posisi relatif antara harga dan blok pesanan.

Keunggulan Strategis

  1. Kemampuan beradaptasi yang kuat: Strategi dapat secara dinamis menyesuaikan posisi dan ukuran blok pesanan sesuai dengan kondisi pasar dan beradaptasi dengan lingkungan pasar yang berbeda.
  2. Mekanisme konfirmasi ganda: Menggabungkan terobosan fraktal, konfirmasi blok pesanan, dan analisis aksi harga untuk mengurangi risiko sinyal palsu.
  3. Peningkatan manajemen risiko: Bantu pedagang memantau status operasi strategi secara real-time melalui umpan balik visual yang jelas dan daftar periksa status.
  4. Visualisasi yang sangat baik: Menyediakan antarmuka grafis yang intuitif termasuk penanda fraktal, tampilan blok pesanan, dan daftar periksa status.
  5. Parameter yang fleksibel dan dapat disesuaikan: Memungkinkan pengguna untuk menyesuaikan parameter utama seperti periode fraktal, jenis terobosan, dll. sesuai dengan gaya perdagangan pribadi mereka.

Risiko Strategis

  1. Risiko volatilitas pasar: Sinyal breakout palsu dapat dihasilkan di pasar yang sangat fluktuatif, sehingga memerlukan mekanisme penyaringan tambahan.
  2. Risiko tergelincir: Dalam lingkungan pasar dengan likuiditas yang tidak mencukupi, harga eksekusi order dapat menyimpang dari titik masuk yang ideal.
  3. Ketergantungan Tren: Suatu strategi mungkin tidak berkinerja sebaik di pasar yang bergerak menyamping seperti halnya di pasar yang sedang tren.
  4. Sensitivitas parameter: Pengaturan periode fraktal yang berbeda dapat menyebabkan hasil perdagangan yang jauh berbeda.
  5. Konsumsi sumber daya komputasi: Fungsi visualisasi yang kompleks dan kalkulasi waktu nyata dapat meningkatkan beban sistem.

Arah optimasi

  1. Memperkenalkan filter volatilitas: Optimalkan sinyal perdagangan melalui ATR atau indikator volatilitas lainnya.
  2. Tambahkan mekanisme konfirmasi tren: Gabungkan dengan rata-rata pergerakan atau indikator tren lainnya untuk meningkatkan keandalan sinyal.
  3. Tingkatkan mekanisme stop-loss: rancang strategi stop-loss dinamis berdasarkan struktur blok order.
  4. Optimalkan ukuran blok pesanan: Sesuaikan ukuran blok pesanan secara dinamis berdasarkan volatilitas pasar.
  5. Tambahkan analisis volume: Gabungkan data volume untuk memverifikasi efektivitas terobosan.

Meringkaskan

Ini adalah strategi perdagangan kompleks yang memadukan berbagai dimensi analisis teknis. Strategi ini membangun sistem perdagangan lengkap dengan teori fraktal dan analisis blok pesanan sebagai intinya. Keunggulan strategi ini terletak pada kemampuannya beradaptasi dan beragamnya mekanisme konfirmasi, tetapi pada saat yang sama, kita juga perlu memperhatikan dampak lingkungan pasar terhadap kinerja strategi. Melalui arah pengoptimalan yang direkomendasikan, keandalan dan stabilitas strategi diharapkan dapat lebih ditingkatkan.

Kode Sumber Strategi
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Supply and Demand - Order Block Strategy", format=format.price, precision=0, overlay=true)

// Input options for customization
changeColor = input(false, title="Change Box Colors?")
breakType = input.string("Wick+Body", title="Fractal Break Type:", options=["Wick+Body", "Body"])
n = input.int(title="Periods", defval=2, minval=1, tooltip="Number of periods for fractal lookback")

if n <= 0
    runtime.error("Periods input must be greater than zero.")

transGreenClr = input.color(color.new(color.green, 80), title="Bg:", inline="a_1")
greenClr = input.color(color.new(color.green, 0), title="Border:", inline="a_1")

transRedClr = input.color(color.new(color.red, 80), title="Bg:", inline="b_1")
redClr = input.color(color.new(color.red, 0), title="Border:", inline="b_1")

// --- Fractal Calculation ---
upFractal = high[n] == ta.highest(high, 2 * n + 1)
downFractal = low[n] == ta.lowest(low, 2 * n + 1)
// --- End Fractal Calculation ---

var float topValue = na
var float bottomValue = na
var int lastRedIndex = na
var float lastRedLow = na
var float lastRedHigh = na
var int lastGreenIndex = na
var float lastGreenLow = na
var float lastGreenHigh = na
var line topLine = na
var line bottomLine = na
var box demandBox = na
var box supplyBox = na
var topBreakBlock = false
var bottomBreakBlock = false
var isLongBreak = false
var isShortBreak = false
topBreakCheckSource = breakType == "Wick+Body" ? high : close
bottomBreakCheckSource = breakType == "Wick+Body" ? low : close

// Last Red Check
if close < open
    lastRedIndex := bar_index
    lastRedLow := low
    lastRedHigh := high

// Last Green Check
if close > open
    lastGreenIndex := bar_index
    lastGreenLow := low
    lastGreenHigh := high

// Top break
if ta.crossover(topBreakCheckSource, topValue) and not topBreakBlock
    topBreakBlock := true
    isLongBreak := true
    // line.set_x2(topLine, bar_index)
    // demandBox := box.new(lastRedIndex - 1, lastRedHigh, lastRedIndex + 1, lastRedLow, bgcolor=transGreenClr, border_color=greenClr)
    if strategy.position_size <= 0
        strategy.entry("Long", strategy.long)

// Bottom break
if ta.crossunder(bottomBreakCheckSource, bottomValue) and not bottomBreakBlock
    bottomBreakBlock := true
    isShortBreak := true
    // line.set_x2(bottomLine, bar_index)
    // supplyBox := box.new(lastGreenIndex - 1, lastGreenHigh, lastGreenIndex + 1, lastGreenLow, bgcolor=transRedClr, border_color=redClr)
    if strategy.position_size >= 0
        strategy.entry("Short", strategy.short)

// New up fractal
if upFractal
    topBreakBlock := false
    isLongBreak := false
    topValue := high[n]
    // topLine := line.new(bar_index[n], topValue, bar_index, topValue, color=color.teal, style=line.style_dotted, width=2)
    // if not isLongBreak[1]
    //     line.delete(topLine[1])

// New down fractal
if downFractal
    bottomBreakBlock := false
    isShortBreak := false
    bottomValue := low[n]
    // bottomLine := line.new(bar_index[n], bottomValue, bar_index, bottomValue, color=color.maroon, style=line.style_dotted, width=2)
    // if not isShortBreak[1]
    //     line.delete(bottomLine[1])

// Box state update
// activeBoxes = box.all
// if array.size(activeBoxes) > 0 and changeColor
//     for i = 0 to array.size(activeBoxes) - 1
//         boxId = array.get(activeBoxes, i)
//         bVal = box.get_bottom(boxId)
//         tVal = box.get_top(boxId)
//         if close < bVal
//             box.set_bgcolor(boxId, transRedClr)
//             box.set_border_color(boxId, redClr)
//         if close > tVal
//             box.set_bgcolor(boxId, transGreenClr)
//             box.set_border_color(boxId, greenClr)

//PLOTS
plotshape(downFractal ,style=shape.triangleup, location=location.belowbar, offset=-n, color=color.new(color.gray,80), size = size.tiny)
plotshape(upFractal, style=shape.triangledown,   location=location.abovebar, offset=-n, color=color.new(color.gray,80), size = size.tiny)

// --- Checklist Table ---
// var table checklistTable = table.new(position.bottom_right, 2, 8, bgcolor=color.new(color.gray, 80), border_width=1)

// if barstate.islast
//     table.cell(checklistTable, 0, 0, "Condition", text_color=color.white, text_size=size.small, bgcolor=color.teal)
//     table.cell(checklistTable, 1, 0, "Status", text_color=color.white, text_size=size.small, bgcolor=color.teal)

//     table.cell(checklistTable, 0, 1, "Up Fractal", text_size=size.small)
//     table.cell(checklistTable, 1, 1, upFractal ? "✅" : "❌", text_color=upFractal ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 2, "Down Fractal", text_size=size.small)
//     table.cell(checklistTable, 1, 2, downFractal ? "✅" : "❌", text_color=downFractal ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 3, "Top Break", text_size=size.small)
//     table.cell(checklistTable, 1, 3, isLongBreak ? "✅" : "❌", text_color=isLongBreak ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 4, "Bottom Break", text_size=size.small)
//     table.cell(checklistTable, 1, 4, isShortBreak ? "✅" : "❌", text_color=isShortBreak ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 5, "Last Red Candle", text_size=size.small)
//     table.cell(checklistTable, 1, 5, close < open ? "✅" : "❌", text_color=close < open ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 6, "Last Green Candle", text_size=size.small)
//     table.cell(checklistTable, 1, 6, close > open ? "✅" : "❌", text_color=close > open ? color.green : color.red, text_size=size.small)

//     table.cell(checklistTable, 0, 7, "Box Color Change Active", text_size=size.small)
//     table.cell(checklistTable, 1, 7, changeColor ? "✅" : "❌", text_color=changeColor ? color.green : color.red, text_size=size.small)