Sumber dimuat naik... memuat...

Strategi Perdagangan Beradaptasi Blok Perintah Pecahan Berbilang Tempoh

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

img

Ringkasan

Strategi ini adalah sistem dagangan adaptif berdasarkan teori fraktal dan analisis blok pesanan. Ia menangkap peluang dagangan kebarangkalian tinggi dengan mengenal pasti tahap sokongan dan rintangan utama dalam struktur pasaran, menggabungkan isyarat pecah fraktal dengan pengesahan blok pesanan. Strategi ini mengintegrasikan pelbagai penunjuk teknikal, termasuk penunjuk fraktal, blok pesanan dinamik, dan sistem pengesahan pecah harga, mencapai kedudukan tepat titik perubahan pasaran dan masa perdagangan yang tepat.

Prinsip Strategi

Logik teras strategi ini dibina di atas tiga tiang utama: pertama, terus memantau paras tertinggi dan terendah pasaran melalui modul pengiraan fraktal untuk mengenal pasti kawasan pembalikan trend yang berpotensi; kedua, menubuhkan zon bekalan dan permintaan pada tahap harga utama melalui analisis blok pesanan; dan akhirnya, mengesahkan kesahihan penembusan harga melalui sistem pengesahan penembusan. Apabila harga pecah di atas fraktal dan mengesahkan kesahihan, sistem membuat blok pesanan zon permintaan di kawasan lilin merah baru-baru ini dan membuka kedudukan panjang; apabila harga pecah di bawah fraktal dan mengesahkan kesahihan, sistem membuat pesanan zon bekalan di kawasan lilin hijau baru-baru ini dan membuka kedudukan pendek.

Kelebihan Strategi

  1. Keupayaan beradaptasi yang kuat: Strategi ini dapat menyesuaikan kedudukan dan saiz blok pesanan secara dinamik mengikut keadaan pasaran.
  2. Mekanisme pengesahan berbilang: Menggabungkan pecah fraktal, pengesahan blok pesanan, dan analisis tindakan harga untuk mengurangkan risiko isyarat palsu.
  3. Pengurusan risiko yang komprehensif: Membantu peniaga memantau status strategi dalam masa nyata melalui maklum balas visual yang jelas dan senarai semak status.
  4. Visualisasi yang sangat baik: Menyediakan antara muka grafik yang intuitif termasuk penanda fraktal, paparan blok pesanan, dan senarai semak status.
  5. Parameter fleksibel: Membolehkan pengguna menyesuaikan parameter utama seperti tempoh fraktal dan jenis pecah mengikut gaya perdagangan peribadi.

Risiko Strategi

  1. Risiko turun naik pasaran: Boleh menghasilkan isyarat pecah palsu di pasaran yang sangat turun naik, yang memerlukan mekanisme penapisan tambahan.
  2. Risiko tergelincir: Harga pelaksanaan pesanan mungkin menyimpang dari titik masuk yang ideal di pasaran dengan kecairan yang tidak mencukupi.
  3. Kebergantungan trend: Prestasi strategi mungkin tidak sesuai di pasaran yang berbeza seperti di pasaran trend.
  4. Sensitiviti parameter: Tetapan tempoh fraktal yang berbeza boleh membawa kepada hasil perdagangan yang berbeza dengan ketara.
  5. Penggunaan sumber pengkomputeran: Ciri visualisasi yang kompleks dan pengiraan masa nyata boleh meningkatkan beban sistem.

Arahan pengoptimuman

  1. Memperkenalkan penapis turun naik: Mengoptimumkan isyarat dagangan melalui ATR atau penunjuk turun naik lain.
  2. Tambah mekanisme pengesahan trend: Tingkatkan kebolehpercayaan isyarat dengan menggabungkan purata bergerak atau penunjuk trend lain.
  3. Mekanisme stop-loss yang sempurna: Reka bentuk strategi stop-loss dinamik berdasarkan struktur blok pesanan.
  4. Mengoptimumkan saiz blok pesanan: Sesuaikan saiz blok pesanan secara dinamik berdasarkan turun naik pasaran.
  5. Tambah analisis jumlah: Semak keabsahan dengan memasukkan data jumlah.

Ringkasan

Ini adalah strategi dagangan komposit yang mengintegrasikan pelbagai dimensi analisis teknikal, membina sistem dagangan lengkap dengan teori fraktal dan analisis blok pesanan di terasnya. kekuatan strategi terletak pada daya adaptasi dan pelbagai mekanisme pengesahan, tetapi perhatian juga harus diberikan kepada kesan persekitaran pasaran terhadap prestasi strategi. Melalui arah pengoptimuman yang dicadangkan, kebolehpercayaan dan kestabilan strategi dapat ditingkatkan lagi.


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