Strategi perdagangan kuantitatif terobosan interval rata-rata pergerakan tertimbang kerangka waktu tinggi

WMA HTF TP/SL Zone Trading Breakout Strategy risk management
Tanggal Pembuatan: 2025-05-26 14:50:17 Akhirnya memodifikasi: 2025-05-26 14:50:17
menyalin: 0 Jumlah klik: 249
2
fokus pada
319
Pengikut

Strategi perdagangan kuantitatif terobosan interval rata-rata pergerakan tertimbang kerangka waktu tinggi Strategi perdagangan kuantitatif terobosan interval rata-rata pergerakan tertimbang kerangka waktu tinggi

Ringkasan

Strategi perdagangan kuantitatif yang berbasis pada breakout dalam kisaran harga yang menggabungkan WMA dan kisaran persentase untuk membangun zona perdagangan. Strategi ini menghasilkan sinyal masuk dengan mengidentifikasi situasi di mana harga akan menerobos ke atas atau ke bawah, dan menerapkan pengaturan profit dan stop-loss batch untuk mengelola risiko. Inti dari strategi ini adalah menggunakan rata-rata bergerak bertimbang pada frame waktu yang lebih tinggi untuk menghapus kebisingan pasar jangka pendek, dan kemudian membangun zona perdagangan pada frame waktu saat ini, yang membuat keputusan perdagangan lebih stabil dan dapat diandalkan.

Prinsip Strategi

Prinsip dasar dari strategi ini adalah menggunakan rata-rata bergerak berbobot pada jangka waktu yang tinggi untuk membangun kisaran aktivitas harga. Langkah-langkah implementasinya adalah sebagai berikut:

  1. Pertama, strategi menghitung rata-rata pergerakan tertimbang dari harga buka, harga tertinggi, harga terendah, dan harga tutup (WMA), dengan siklus berdasarkan parameter siklus minimum yang ditetapkan pengguna (default 60).
  2. Strategi kemudian mengubah nilai-nilai WMA ini dari kerangka waktu yang lebih tinggi (default Moonline) ke kerangka waktu perdagangan saat ini.
  3. Perhitungan rata-rata bergerak tertimbang tinggi atau rendah sebagai harga pusat.
  4. Berdasarkan harga pusat dan persentase yang didefinisikan pengguna (default 0.1 atau 10%), membangun uptrend (resistance point) dan downtrend (support point).
  5. Ketika harga naik ke atas, maka akan terjadi sinyal pluralitas. Ketika harga turun ke bawah, maka akan terjadi sinyal kosong.
  6. Strategi ini menetapkan dua target stop loss (default 10% dan 20%), dengan masing-masing target posisi kosong (default masing-masing 50%).
  7. Pada saat yang sama, Anda dapat mengatur stop loss (default 5%), untuk membatasi potensi kerugian.

Strategi ini menggunakan elemen visual seperti perubahan warna latar belakang, grafik khusus, dan penanda masuk / keluar, yang memungkinkan pedagang untuk secara intuitif mengidentifikasi interval perdagangan dan keadaan pasar saat ini. Selain itu, strategi ini juga menunjukkan perubahan persentase dari posisi yang dipegang saat ini, dan menerapkan faktor kelipatan (default 20) untuk menonjolkan perubahan harga.

Keunggulan Strategis

Jika kita melihat lebih dalam ke dalam kode strategi ini, kita dapat menemukan beberapa keuntungan yang signifikan:

  1. Penyaringan waktu tinggiDengan menggunakan rata-rata bergerak berbobot pada kerangka waktu yang lebih tinggi, strategi dapat secara efektif menyaring kebisingan pasar jangka pendek, menangkap pergerakan harga yang lebih bermakna, dan mengurangi sinyal palsu.

  2. Zona perdagangan dinamisStrategi: Membangun zona perdagangan berdasarkan titik tengah harga dan rasio persentase secara dinamis, dapat beradaptasi dengan kondisi dan volatilitas pasar yang berbeda, menghindari keterbatasan pada titik dukungan / resistensi tetap.

  3. Aturan masuk dan keluarStrategi: memberikan sinyal masuk yang jelas (break up/break down) dan aturan keluar (stop and stop loss) yang berurutan, menghilangkan subjektivitas dalam keputusan perdagangan.

  4. Integrasi Manajemen RisikoSistem perdagangan yang terintegrasi dengan sistem stop loss dan batch stop loss yang membantu melindungi modal dan mengunci keuntungan.

  5. Umpan balik visualStrategi menyediakan banyak elemen visual, termasuk warna latar belakang pada interval perdagangan, label perubahan persentase, dan tanda masuk / keluar, untuk membantu pedagang menilai kondisi pasar dengan cepat.

  6. Pengaturan parameter yang fleksibel: Pengguna dapat menyesuaikan beberapa parameter sesuai dengan preferensi pribadi dan kondisi pasar yang berbeda, termasuk kerangka waktu, periode rata-rata bergerak, persentase rasio, tingkat stop / loss dan elemen visual.

  7. Kerangka Waktu BerkoordinasiStrategi ini menggabungkan kualitas sinyal dari kerangka waktu yang tinggi dengan akurasi eksekusi dari kerangka waktu saat ini, untuk mencapai koordinasi multi-kerangka waktu.

Risiko Strategis

Meskipun ada banyak keuntungan dari strategi ini, ada juga risiko potensial:

  1. Menembus sinyal palsuUntuk mengurangi risiko ini, Anda dapat mempertimbangkan untuk menambahkan mekanisme konfirmasi, seperti meminta harga untuk bertahan untuk beberapa waktu setelah penembusan, atau untuk dikonfirmasi dalam kombinasi dengan indikator lain.

  2. Tidak cocok untuk pasar yang berfluktuasi tinggiDalam pasar yang sangat berfluktuasi, harga mungkin sering melanggar batas-batas zona, menyebabkan terlalu banyak transaksi dan potensi kerugian. Dalam hal ini, rasio zona dapat ditingkatkan atau beralih ke kerangka waktu yang lebih tinggi.

  3. Stop loss / stop loss persentase tetap tidak cukup fleksibelVolatilitas pasar berubah dari waktu ke waktu, dan stop loss / stop loss persentase tetap mungkin tidak selalu optimal. Anda dapat mempertimbangkan untuk menyesuaikan level stop loss / stop loss secara dinamis berdasarkan indikator volatilitas (seperti ATR).

  4. Parameter SensitivitasKinerja strategi mungkin sangat sensitif terhadap pengaturan parameter, seperti siklus WMA, rasio interval, dan persentase stop/stop loss. Pemantauan historis yang memadai dan pengoptimalan parameter diperlukan.

  5. Risiko over-optimisasiTerlalu banyak data historis tertentu dapat menyebabkan kinerja yang buruk di masa depan. Disarankan untuk melakukan retesting di beberapa pasar dan periode waktu, dan menjaga parameter relatif stabil.

  6. Adaptasi terhadap perubahan tren pasar: Strategi ini tidak akan menyesuaikan intervalnya dengan tren pasar baru setelah terobosan, yang dapat menyebabkan sinyal yang salah di pasar yang sedang tren kuat. Anda dapat mempertimbangkan untuk menambahkan filter tren atau interval penyesuaian dinamis.

Arah optimasi strategi

Strategi ini dapat dioptimalkan dalam beberapa arah berdasarkan analisis mendalam terhadap kode:

  1. Menambahkan mekanisme konfirmasi penembusanUntuk mengurangi false breakout, Anda dapat menambahkan kondisi konfirmasi tambahan, seperti meminta harga penutupan setelah penembusan, konfirmasi volume transaksi, atau konfirmasi silang menggunakan indikator teknis lainnya (seperti RSI, MACD).

  2. Pengaturan Stop Loss Dinamis: Mengganti stop loss persentase tetap dengan stop loss dinamis berdasarkan volatilitas pasar, seperti menggunakan ATR (Average True Range) untuk mengatur tingkat stop loss, membuat strategi lebih sesuai dengan kondisi pasar yang berbeda.

  3. Menambahkan filter tren: Menambahkan komponen pengidentifikasi tren, seperti rata-rata bergerak jangka panjang atau indikator ADX, untuk menyesuaikan perilaku perdagangan di pasar tren yang kuat, misalnya hanya melakukan lebih banyak pada tren naik dan hanya melakukan lebih sedikit pada tren turun.

  4. Optimalkan waktu masukStrategi saat ini adalah masuk langsung saat harga baru saja menembus batas zona, dan pertimbangkan untuk menunggu panggilan balik atau konfirmasi bentuk tertentu untuk meningkatkan kualitas waktu masuk.

  5. Menambahkan Modul Manajemen DanaUntuk mempermudah perhitungan ukuran posisi yang lebih kompleks, ukuran posisi disesuaikan secara dinamis berdasarkan ukuran akun, volatilitas pasar, dan risiko perdagangan saat ini, bukan menggunakan posisi tetap.

  6. Tambahkan filter status pasarIdentifikasi kondisi pasar (seperti tren, rangsangan, atau volatilitas tinggi) dan menyesuaikan parameter strategi atau menghentikan perdagangan sesuai dengan kondisi pasar yang berbeda.

  7. Menerapkan parameter adaptif: memungkinkan parameter kunci seperti rasio interval, siklus WMA, dan lain-lain untuk menyesuaikan secara otomatis berdasarkan volatilitas historis atau karakteristik pasar lainnya, meningkatkan fleksibilitas strategi.

  8. Integrasi sinyal multi-frame waktuTidak hanya menggunakan WMA pada frame waktu yang tinggi untuk membangun interval, tetapi juga dapat menganalisis perilaku harga dan indikator pada frame waktu yang berbeda untuk analisis pasar yang lebih komprehensif dan keputusan perdagangan.

Meringkaskan

Sebuah strategi adalah sistem perdagangan yang terstruktur dengan baik, yang dibangun untuk menangkap peluang harga yang terobosan dengan menggabungkan rata-rata bergerak berbobot dan rentang dinamis dari kerangka waktu yang tinggi. Keunggulan strategi adalah kemampuan penyaringan kerangka waktu yang tinggi, aturan perdagangan yang jelas, mekanisme manajemen risiko yang dibangun dan umpan balik visual yang kaya. Namun, ia juga menghadapi tantangan seperti penembusan sinyal palsu, sensitivitas parameter, dan adaptasi pasar.

Strategi ini dapat ditingkatkan lebih lanjut untuk stabilitas dan profitabilitas dengan mengoptimalkan arah implementasi yang disarankan, seperti menambahkan mekanisme konfirmasi terobosan, pengaturan stop loss yang dinamis, penyaringan tren, dan parameter penyesuaian diri. Yang terpenting, pedagang harus memiliki pemahaman yang komprehensif tentang prinsip strategi, dan melakukan pengulangan sejarah yang memadai, menyesuaikan parameter sesuai dengan pasar tertentu dan preferensi risiko pribadi, untuk memanfaatkan potensi strategi ini sepenuhnya.

Strategi berbasis terobosan ini cocok untuk pedagang jangka menengah dan panjang, terutama bagi mereka yang mencari untuk menangkap terobosan harga penting sambil mempertahankan kontrol risiko. Dengan terus-menerus mengoptimalkan dan menyesuaikan, strategi ini dapat menjadi senjata yang kuat dalam toolkit pedagang.

Kode Sumber Strategi
/*backtest
start: 2025-01-01 00:00:00
end: 2025-05-25 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy('ZONE FLOW', overlay=true)

// Input parameters
src = close
src1 = open
src2 = low
src3 = high
Min = input(60, title='Minimum Period')
len = timeframe.isintraday and timeframe.multiplier >= 1 ? Min / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7

c1 = ta.wma(src, len)
o1 = ta.wma(src1, len)
l1 = ta.wma(src2, len)
h1 = ta.wma(src3, len)

HTF = input.timeframe('M', title='Higher Time Frame')
ti = ta.change(time(HTF)) != 0
c = fixnan(ti ? c1 : na)
o = fixnan(ti ? o1 : na)
h = fixnan(ti ? h1 : na)
l = fixnan(ti ? l1 : na)

// Calculating mid-point
m = (h + l) / 2

// Calculating ratio lines
ratio = input.float(0.1, title='% ratio', minval=0.001, maxval=10)
r1 = m * ratio
u = m + r1
d = m - r1

// Take profit settings
takeProfitPercentage1 = input.float(10.0, title='Take Profit 1 (%)', minval=0.1, maxval=100.0) / 100
takeProfitQuantity1 = input.float(50.0, title='Take Profit 1 Quantity (%)', minval=0.1, maxval=100.0) / 100
takeProfitPercentage2 = input.float(20.0, title='Take Profit 2 (%)', minval=0.1, maxval=100.0) / 100
takeProfitQuantity2 = input.float(50.0, title='Take Profit 2 Quantity (%)', minval=0.1, maxval=100.0) / 100

// Stop loss settings
stopLossPercentage = input.float(5.0, title='Stop Loss (%)', minval=0.1, maxval=100.0) / 100

// Number of bars to extend lines
extensionBars = input.int(5, title='Number of Bars to Extend Lines', minval=1)

// Number of bars to offset the percentage label
percentOffsetBars = input.int(25, title='Number of Bars to Offset Percentage Label', minval=1)

// Input for multiplying the percentage change
multiplierFactor = input.int(20, title='Multiplier for Percentage Change', minval=1)

// Input for background colors
bgColor1 = input(color.new(color.blue, 90), title='Background Color 1')
bgColor2 = input(color.new(color.orange, 90), title='Background Color 2')

// Plot high, low, and ratio lines
ppo = plot(u, color=color.new(color.blue, 0), title='Upper Line (Resistance)', style=plot.style_stepline)
ppc = plot(d, color=color.new(color.orange, 0), title='Lower Line (Support)', style=plot.style_stepline)

plot(u, color=color.new(color.blue, 0), title='Upper Line (Resistance)', style=plot.style_circles, linewidth=2)
plot(d, color=color.new(color.orange, 0), title='Lower Line (Support)', style=plot.style_circles, linewidth=2)

// Fill the background between ratio lines with two different colors
fill(ppo, ppc, color=bgColor1)

// Calculate mid-point for background color switching
midPoint = (u + d) / 2
bgColorSwitch = close >= midPoint ? bgColor1 : bgColor2
fill(ppo, ppc, color=bgColorSwitch, transp=90)

// Initialize variables for lines and labels
var line tp1Line = na
var line tp2Line = na
var line stopLossLine = na
var line entryLine = na
var label tp1Label = na
var label tp2Label = na
var label stopLossLabel = na
var label entryLabel = na
var label percentLabel = na

// Variable to store the entry bar index
var int entryBarIndexLong = na
var int entryBarIndexShort = na

// Function to delete old labels and lines
deleteOldLinesAndLabels() =>
    if not na(tp1Line)
        line.delete(tp1Line)
    if not na(tp2Line)
        line.delete(tp2Line)
    if not na(stopLossLine)
        line.delete(stopLossLine)
    if not na(entryLine)
        line.delete(entryLine)
    if not na(tp1Label)
        label.delete(tp1Label)
    if not na(tp2Label)
        label.delete(tp2Label)
    if not na(stopLossLabel)
        label.delete(stopLossLabel)
    if not na(entryLabel)
        label.delete(entryLabel)
    if not na(percentLabel)
        label.delete(percentLabel)

// Strategy logic
longCondition = ta.crossover(close, u)
shortCondition = ta.crossunder(close, d)

if longCondition
    strategy.entry('Long', strategy.long)
    entryBarIndexLong := bar_index
    entryBarIndexLong

if shortCondition
    strategy.entry('Short', strategy.short)
    entryBarIndexShort := bar_index
    entryBarIndexShort

// Calculate take profit and stop loss levels for long positions
if strategy.position_size > 0  // Check if there's an open long position
    takeProfitLevelLong1 = strategy.position_avg_price * (1 + takeProfitPercentage1)
    takeProfitLevelLong2 = strategy.position_avg_price * (1 + takeProfitPercentage2)
    stopLossLevelLong = strategy.position_avg_price * (1 - stopLossPercentage)
    entryPrice = strategy.position_avg_price

    // Delete existing lines and labels if they exist
    deleteOldLinesAndLabels()


    // Exit a portion of the position at each take profit level
    strategy.exit('TP1', 'Long', limit=takeProfitLevelLong1, qty=strategy.position_size * takeProfitQuantity1)
    strategy.exit('TP2', 'Long', limit=takeProfitLevelLong2, qty=strategy.position_size * takeProfitQuantity2)
    strategy.exit('Stop Loss', 'Long', stop=stopLossLevelLong)

    // Display percentage change from entry price
    percentChange = (close - strategy.position_avg_price) / strategy.position_avg_price * 100
    percentMultiplied = percentChange * multiplierFactor
    percentColor = percentChange >= 0 ? color.green : color.red
    // Update label position to follow price line with larger text size
    percentLabel := label.new(x=bar_index + percentOffsetBars, y=close, text=str.tostring(percentMultiplied, format.percent) + '%', color=percentColor, textcolor=color.white, size=size.large, style=label.style_label_down)
    percentLabel

if strategy.position_size < 0  // Check if there's an open short position
    takeProfitLevelShort1 = strategy.position_avg_price * (1 - takeProfitPercentage1)
    takeProfitLevelShort2 = strategy.position_avg_price * (1 - takeProfitPercentage2)
    stopLossLevelShort = strategy.position_avg_price * (1 + stopLossPercentage)
    entryPrice = strategy.position_avg_price

    // Delete existing lines and labels if they exist
    deleteOldLinesAndLabels()


    // Exit a portion of the position at each take profit level
    strategy.exit('TP1', 'Short', limit=takeProfitLevelShort1, qty=strategy.position_size * takeProfitQuantity1)
    strategy.exit('TP2', 'Short', limit=takeProfitLevelShort2, qty=strategy.position_size * takeProfitQuantity2)
    strategy.exit('Stop Loss', 'Short', stop=stopLossLevelShort)

    // Display percentage change from entry price
    percentChange = (strategy.position_avg_price - close) / strategy.position_avg_price * 100
    percentMultiplied = percentChange * multiplierFactor
    percentColor = percentChange >= 0 ? color.green : color.red
    // Update label position to follow price line with larger text size
    percentLabel := label.new(x=bar_index + percentOffsetBars, y=close, text=str.tostring(percentMultiplied, format.percent) + '%', color=percentColor, textcolor=color.white, size=size.large, style=label.style_label_down)
    percentLabel

// Add buy and sell signals with shapes
plotshape(series=longCondition, title='Buy Signal', location=location.belowbar, color=color.new(color.green, 0), style=shape.labelup, text='.')
plotshape(series=shortCondition, title='Sell Signal', location=location.abovebar, color=color.new(color.red, 0), style=shape.labeldown, text='.')

// Remove old labels when they go out of scope
if bar_index % 50 == 0
    deleteOldLinesAndLabels()

// Define colors for candles based on background color
candleColorBull = bgColorSwitch  // Use background color for bullish candles
candleColorBear = bgColorSwitch  // Use background color for bearish candles
borderColorBull = color.black  // Border color for bullish candles
borderColorBear = color.black  // Border color for bearish candles

// Plot candles with custom colors
plotcandle(open, high, low, close, color=close >= open ? candleColorBull : candleColorBear, bordercolor=close >= open ? borderColorBull : borderColorBear, wickcolor=color.gray)