Sumber daya yang dimuat... Pemuatan...

Strategi perdagangan adaptif untuk pemesanan pemutusan fraktal multi periode

Penulis:ChaoZhang, Tanggal: 2024-12-27 15:49:16
Tag:OBSDMAATR

img

Gambaran umum

Strategi ini adalah sistem perdagangan adaptif berdasarkan teori fraktal dan analisis blok order. Strategi ini menangkap peluang perdagangan dengan probabilitas tinggi dengan mengidentifikasi level support dan resistance utama dalam struktur pasar, menggabungkan sinyal breakout fraktal dengan konfirmasi blok order. Strategi ini mengintegrasikan beberapa indikator teknis, termasuk indikator fraktal, blok order dinamis, dan sistem konfirmasi price breakout, mencapai posisi titik balik pasar yang tepat dan waktu perdagangan yang akurat.

Prinsip Strategi

Logika inti dari strategi ini dibangun di atas tiga pilar utama: pertama, terus memantau puncak dan terendah pasar melalui modul perhitungan fraktal untuk mengidentifikasi area pembalikan tren potensial; kedua, menetapkan zona pasokan dan permintaan pada tingkat harga kunci melalui analisis blok pesanan; dan akhirnya, memverifikasi validitas price breakout melalui sistem konfirmasi breakout. Ketika harga pecah di atas fraktal dan mengkonfirmasi validitas, sistem membuat blok pesanan zona permintaan di area lilin merah terbaru dan membuka posisi panjang; ketika harga pecah di bawah fraktal dan mengkonfirmasi validitas, sistem membuat pesanan zona pasokan di area lilin hijau terbaru dan membuka posisi pendek. Strategi ini juga mencakup pembaruan warna blok pesanan dinamis untuk menampilkan secara visual hubungan relatif antara posisi harga dan blok pesanan.

Keuntungan Strategi

  1. Kemampuan beradaptasi yang kuat: Strategi dapat menyesuaikan posisi dan ukuran blok order secara dinamis sesuai dengan kondisi pasar.
  2. Mekanisme konfirmasi ganda: Mengkombinasikan pecah fraktal, konfirmasi blok pesanan, dan analisis tindakan harga untuk mengurangi risiko sinyal palsu.
  3. Manajemen risiko yang komprehensif: Membantu pedagang memantau status strategi secara real-time melalui umpan balik visual yang jelas dan daftar status.
  4. Visualisasi yang sangat baik: Menyediakan antarmuka grafis yang intuitif termasuk penanda fraktal, tampilan blok pesanan, dan daftar status.
  5. Parameter Fleksibel: Memungkinkan pengguna untuk menyesuaikan parameter kunci seperti periode fraktal dan jenis breakout sesuai dengan gaya perdagangan pribadi.

Risiko Strategi

  1. Risiko volatilitas pasar: Dapat menghasilkan sinyal pecah palsu di pasar yang sangat volatile, yang membutuhkan mekanisme penyaringan tambahan.
  2. Risiko slippage: Harga eksekusi order dapat menyimpang dari titik masuk yang ideal di pasar dengan likuiditas yang tidak cukup.
  3. Trend Dependency: Kinerja strategi mungkin tidak ideal di pasar yang bervariasi seperti di pasar yang tren.
  4. Sensitivitas parameter: Pengaturan periode fraktal yang berbeda dapat menyebabkan hasil perdagangan yang berbeda secara signifikan.
  5. Konsumsi sumber daya komputasi: Fitur visualisasi yang kompleks dan perhitungan real-time dapat meningkatkan beban sistem.

Arahan Optimasi

  1. Memperkenalkan filter volatilitas: Mengoptimalkan sinyal perdagangan melalui ATR atau indikator volatilitas lainnya.
  2. Menambahkan mekanisme konfirmasi tren: Meningkatkan keandalan sinyal dengan menggabungkan moving average atau indikator tren lainnya.
  3. Mekanisme stop-loss yang sempurna: Merancang strategi stop-loss dinamis berdasarkan struktur blok order.
  4. Optimalkan ukuran blok order: Sesuaikan secara dinamis ukuran blok order berdasarkan volatilitas pasar.
  5. Tambahkan analisis volume: Verifikasi validitas penyusutan dengan memasukkan data volume.

Ringkasan

Ini adalah strategi perdagangan komposit yang mengintegrasikan beberapa dimensi analisis teknis, membangun sistem perdagangan lengkap dengan teori fraktal dan analisis blok pesanan di intinya. Kekuatan strategi terletak pada kemampuan beradaptasi dan beberapa mekanisme konfirmasi, tetapi juga harus memperhatikan dampak lingkungan pasar pada kinerja strategi. Melalui arah optimasi yang disarankan, keandalan dan stabilitas strategi dapat ditingkatkan lebih lanjut.


/*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)

Berkaitan

Lebih banyak