Strategi Breakout Rata-rata Pergerakan Ganda Berdasarkan Volatilitas ATR dan Deviasi Tren HMA


Tanggal Pembuatan: 2024-01-17 16:37:23 Akhirnya memodifikasi: 2024-01-17 16:37:23
menyalin: 2 Jumlah klik: 529
1
fokus pada
1617
Pengikut

Strategi Breakout Rata-rata Pergerakan Ganda Berdasarkan Volatilitas ATR dan Deviasi Tren HMA

Ringkasan

Strategi ini adalah strategi perdagangan kuantitatif yang menggabungkan sinyal penembusan dua garis rata dengan penyaringan volatilitas ATR dan bias tren HMA. Strategi ini menggunakan sinyal perdagangan yang dibangun secara rata dari dua periode yang berbeda, menggabungkan indikator volatilitas ATR untuk memfilter sebagian dari sinyal yang tidak valid, menggunakan HMA untuk menilai arah tren, dan menghindari operasi berlawanan.

Prinsip Strategi

Strategi ini menggunakan garis rata-rata dengan panjang 37 siklus sebagai garis rata-rata acuan, menghasilkan sinyal beli ketika harga menerobos ke atas dari garis rata-rata di bawahnya, menghasilkan sinyal jual ketika harga menerobos ke bawah. Untuk memfilter sinyal misinformasi, strategi ini menetapkan bahwa setelah harga menerobos garis rata-rata acuan, terus bergerak ke arah yang sama lebih dari 2 kali ATR, hanya akan mengkonfirmasi instruksi pembuatan sinyal yang efektif.

Pada mode win, strategi mendukung pilihan untuk menggunakan satu stop atau dua atau tiga stop dengan harga yang berbeda. Untuk mode stop, strategi langsung di atas dan di bawah garis orbit sebagai stop yang panjang dan pendek.

Analisis Keunggulan Strategi

Strategi ini menambahkan filter ATR yang berfluktuasi pada saat sinyal dihasilkan, yang dapat menyaring sebagian besar sinyal yang tidak efektif, yang sangat sesuai dengan strategi K-line visual, sehingga dapat memperoleh tingkat kemenangan yang lebih tinggi. Pada saat yang sama, meningkatkan HMA menilai bias tren, menghindari posisi berlawanan, dan secara signifikan mengurangi kerugian yang tidak perlu.

Analisis Risiko dan Solusi

Risiko terbesar dari strategi ini adalah bahwa penyaringan ATR fluktuatif dapat mematikan sebagian sinyal yang efektif, sehingga strategi tidak dapat membangun posisi pada waktu yang tepat. Selain itu, HMA menilai tren besar tidak jelas, kadang-kadang harga hanya penyesuaian jangka pendek dan bukan pembalikan tren besar, yang dapat menyebabkan kerugian yang tidak perlu. Untuk mengurangi risiko di atas, parameter penyaringan ATR fluktuatif dapat dikurangi secara tepat, memperluas jangkauan fluktuasi, sehingga lebih banyak sinyal bentuk K dapat dihasilkan melalui instruksi verifikasi.

Arah optimasi strategi

Strategi ini dapat dioptimalkan dari beberapa arah:

  1. Uji lebih banyak jenis kombinasi parameter untuk menemukan kombinasi optimal. Parameter yang dapat disesuaikan seperti panjang garis rata-rata acuan, siklus ATR, dan koefisien penyaringan fluktuatif.

  2. Menambahkan lebih banyak indikator filter atau indikator osilator untuk menilai kondisi pasar, dan lebih meningkatkan kebugaran strategi.

  3. Pengaturan parameter untuk mengoptimalkan cara mendapatkan keuntungan. Pengaturan titik tolak untuk tes lebih lanjut terhadap jumlah dan tingkat harga yang berbeda.

  4. Dengan menggunakan model pembelajaran mesin untuk menghasilkan sinyal perdagangan yang lebih efisien.

Meringkaskan

Strategi ini mengintegrasikan sinyal inti penembusan dua rasio, sinyal inefisiensi penyaringan ATR yang tidak stabil, dan menggunakan HMA untuk menilai defisit tren besar untuk menghindari posisi berlawanan, merupakan strategi perdagangan kuantitatif yang sangat praktis. Ada ruang untuk mengoptimalkan parameter strategi, dan efeknya masih bisa ditingkatkan, layak untuk penelitian dan pengoptimalan lebih lanjut.

Kode Sumber Strategi
/*backtest
start: 2023-01-10 00:00:00
end: 2024-01-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © sevencampbell

//@version=5
strategy(title="Baseline Cross Qualifier Volatility Strategy with HMA Trend Bias", overlay=true)

// --- User Inputs ---

// Baseline Inputs
baselineLength = input.int(title="Baseline Length", defval=20)
baseline = ta.sma(close, baselineLength)

// PBCQ Inputs
pbcqEnabled = input.bool(title="Post Baseline Cross Qualifier Enabled", defval=true)
pbcqBarsAgo = input.int(title="Post Baseline Cross Qualifier Bars Ago", defval=3)

// Volatility Inputs
atrLength = input.int(title="ATR Length", defval=14)
multiplier = input.float(title="Volatility Multiplier", defval=2.0)
rangeMultiplier = input.float(title="Volatility Range Multiplier", defval=1.0)
qualifierMultiplier = input.float(title="Volatility Qualifier Multiplier", defval=0.5)

// Take Profit Inputs
takeProfitType = input.string(title="Take Profit Type", options=["1 Take Profit", "2 Take Profits", "3 Take Profits"], defval="1 Take Profit")

// HMA Inputs
hmaLength = input.int(title="HMA Length", defval=50)

// --- Calculations ---

// ATR
atr = ta.atr(atrLength)

// Range Calculation
rangeHigh = baseline + rangeMultiplier * atr
rangeLow = baseline - rangeMultiplier * atr
rangeColor = rangeLow <= close and close <= rangeHigh ? color.yellow : na
bgcolor(rangeColor, transp=90)

// Qualifier Calculation
qualifier = qualifierMultiplier * atr

// Dot Calculation
isLong = close > baseline and (close - baseline) >= qualifier and close > ta.hma(close, hmaLength)
isShort = close < baseline and (baseline - close) >= qualifier and close < ta.hma(close, hmaLength)
colorDot = isLong ? color.green : isShort ? color.red : na
plot(isLong or isShort ? baseline : na, color=colorDot, style=plot.style_circles, linewidth=3)

// --- Strategy Logic ---

// PBCQ
pbcqValid = not pbcqEnabled or low[pbcqBarsAgo] > baseline

// Entry Logic
longCondition = isLong and pbcqValid
shortCondition = isShort and pbcqValid
if (longCondition)
    strategy.entry("Long", strategy.long)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// Exit Logic
if (takeProfitType == "1 Take Profit")
    strategy.exit("TP/SL", "Long", limit=rangeHigh, stop=rangeLow)
    strategy.exit("TP/SL", "Short", limit=rangeLow, stop=rangeHigh)
else if (takeProfitType == "2 Take Profits")
    strategy.exit("TP1", "Long", qty=strategy.position_size * 0.5, limit=rangeHigh / 2)
    strategy.exit("TP2", "Long", qty=strategy.position_size * 0.5, limit=rangeHigh)
    strategy.exit("TP1", "Short", qty=strategy.position_size * 0.5, limit=rangeLow / 2)
    strategy.exit("TP2", "Short", qty=strategy.position_size * 0.5, limit=rangeLow)
else if (takeProfitType == "3 Take Profits")
    strategy.exit("TP1", "Long", qty=strategy.position_size * 0.5, limit=rangeHigh / 2)
    strategy.exit("TP2", "Long", qty=strategy.position_size * 0.25, limit=rangeHigh * 0.75)
    strategy.exit("TP3", "Long", qty=strategy.position_size * 0.25, limit=rangeHigh * 1.5)