Momentum Breakout Backtesting Sokongan Strategi Ketahanan

Penulis:ChaoZhang, Tarikh: 2024-02-22 16:07:14
Tag:

img

Ringkasan

Strategi ini terutamanya menggunakan harga tinggi, rendah dan dekat hari dagangan sebelumnya sebagai tahap sokongan dan rintangan untuk hari semasa. Ia menjadi panjang apabila tahap rintangan dipecahkan dan menjadi pendek apabila tahap sokongan diuji kembali.

Prinsip Strategi

Kod ini pertama-tama mentakrifkan fungsi menghitungSupportResistance untuk mengira tahap sokongan dan rintangan, yang mengekstrak harga tinggi, rendah dan penutupan hari dagangan sebelumnya sebagai tahap sokongan dan rintangan hari ini.

Kemudian dalam logik utama, fungsi ini dipanggil untuk mendapatkan ketiga-tiga tahap harga ini dan merangka mereka.

Dalam logik backtesting, jika harga penutupan lebih rendah daripada harga rendah hari sebelumnya sementara harga semasa lebih tinggi daripada harga rendah yang membentuk pecah, ia pergi panjang.

Melalui model pecah ini, penilaian trend dan penjanaan isyarat perdagangan dilaksanakan.

Kelebihan

  1. Gunakan data hari dagangan sebelumnya untuk membina tahap sokongan dan rintangan hari ini, mengelakkan masalah pengoptimuman parameter

  2. Tahap sokongan dan rintangan berasal dari data perdagangan pasaran sebenar, dengan beberapa nilai rujukan

  3. Model backtesting yang mudah dan mudah difahami dan dilaksanakan

  4. Penampilan visual tahap sokongan dan rintangan membentuk persepsi harga

  5. Pemantauan masa nyata pelarian, menangkap peluang dagangan tepat pada masanya

Risiko

  1. Tahap sokongan dan rintangan berubah dari masa ke masa, sukar untuk menentukan kesahihan

  2. Tidak dapat meramalkan arah trend, risiko pembalikan yang hilang

  3. Mudah terjejas oleh pelarian palsu, risiko kemasukan awal

  4. Tidak dapat menentukan kelangsungan gangguan, kemungkinan kehilangan berhenti awal

  5. Kegagalan sokongan dan rintangan individu lebih mungkin di bawah turun naik pasaran yang besar

Tindakan balas:

  1. Gabungkan lebih banyak faktor untuk menilai keabsahan pelarian

  2. Memperluas julat stop loss yang sesuai untuk menangkap trend

  3. Posisi terbuka dalam kumpulan, mengurangkan kesan turun naik individu

Pengoptimuman

  1. Tambah lebih banyak data sejarah seperti garis 5 hari, 10 hari untuk menentukan tahap

  2. Menggabungkan penunjuk lain seperti jumlah untuk menilai kesahihan pecah

  3. Set stop loss berdasarkan turun naik sebenar

  4. Mengoptimumkan pengurusan modal, mengawal kerugian tunggal

Ringkasan

Secara keseluruhan ini adalah strategi breakout biasa, mudah dan intuitif. Dengan membina sokongan dan rintangan hari ini dengan data hari sebelumnya dan menguji balik breakout tahap-tahap tersebut untuk panjang / pendek. Kelebihan mudah difahami dan secara langsung memvisualisasikan tahap; kelemahan adalah risiko breakout palsu dan ketidakpastian kelestarian. Langkah seterusnya adalah meningkatkan kesahihan breakout, mengawal risiko, mengoptimumkan pengurusan modal dan lain-lain.


/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Support and Resistance with Backtesting", overlay=true)

// Function to calculate support and resistance levels
calculateSupportResistance() =>
    highPrevDay = request.security(syminfo.tickerid, "D", high[1], lookahead=barmerge.lookahead_on)
    lowPrevDay = request.security(syminfo.tickerid, "D", low[1], lookahead=barmerge.lookahead_on)
    closePrevDay = request.security(syminfo.tickerid, "D", close[1], lookahead=barmerge.lookahead_on)
    [highPrevDay, lowPrevDay, closePrevDay]

// Call the function to get support and resistance levels
[supResHigh, supResLow, supResClose] = calculateSupportResistance()

// Plotting support and resistance levels
plot(supResHigh, color=color.red, linewidth=2, title="Previous Day High")
plot(supResLow, color=color.green, linewidth=2, title="Previous Day Low")
plot(supResClose, color=color.blue, linewidth=2, title="Previous Day Close")

// Backtesting logic
backtestCondition = close[1] < supResLow and close > supResLow
strategy.entry("Long", strategy.long, when=backtestCondition)

// Plotting buy/sell arrows for backtesting
plotarrow(backtestCondition ? 1 : na, colorup=color.green, offset=-1, transp=0)


Lebih lanjut