Strategi Waktu Pasar Berdasarkan Volatilitas Historis


Tanggal Pembuatan: 2024-01-15 12:27:47 Akhirnya memodifikasi: 2024-01-15 12:27:47
menyalin: 2 Jumlah klik: 697
1
fokus pada
1617
Pengikut

Strategi Waktu Pasar Berdasarkan Volatilitas Historis

Ringkasan

Strategi ini mengimplementasikan strategi buy and hold yang lebih baik dengan menambahkan filter berdasarkan volatilitas historis. Fungsi filter adalah untuk menutup posisi buy and hold pada periode volatilitas pasar yang tinggi, dan membangun kembali posisi buy and hold pada periode volatilitas yang rendah, sehingga mengurangi penarikan maksimum dari strategi.

Prinsip Strategi

  1. Hitung volatilitas historis SPY dalam 100 hari terakhir
  2. Jika volatilitas saat ini lebih tinggi dari nilai 95 dari volatilitas 100 hari terakhir, filter hari perdagangan dan tutup posisi
  3. Jika volatilitas berada di bawah 95 poin, maka posisi beli akan dibuat.

Analisis Keunggulan

Dibandingkan dengan strategi buy and hold sederhana tanpa filter, strategi ini menunjukkan peningkatan dalam tingkat pengembalian tahunan selama 28 tahun pengamatan balik (7.95% vs 9.92%), sementara pengembalian maksimum turun secara signifikan (50.79% vs 31.57%). Ini menunjukkan bahwa menambahkan filter volatilitas pasar dapat meningkatkan tingkat pengembalian strategi dan mengurangi risiko.

Analisis risiko

Risiko utama dari strategi ini adalah metode penghitungan fluktuasi dan keakuratan pengaturan parameter filter. Jika penghitungan fluktuasi tidak akurat, filter akan gagal; jika pengaturan parameter filter terlalu konservatif atau terlalu radikal, maka akan berdampak buruk pada hasil strategi. Selain itu, Past performance is not indicative of future results, kinerja historis strategi tidak mewakili kinerja masa depan.

Arah optimasi

Anda dapat mempertimbangkan untuk menambahkan indikator filter lainnya sebagai sinyal konfirmasi, seperti rata-rata bergerak jangka panjang, indeks ADX, dll. Pengoptimalan penyesuaian parameter juga sangat penting, seperti pengujian periode lookback yang berbeda, pengaturan parameter seperti filter threshold, dll. Pembelajaran mesin dan teknik analisis time series juga dapat digunakan untuk membangun dan mengoptimalkan model prediksi volatilitas.

Meringkaskan

Strategi ini meningkatkan tingkat pengembalian strategi SPY buy and hold secara signifikan melalui filter sederhana berdasarkan volatilitas historis, dan juga secara signifikan mengurangi penarikan maksimum. Ini membuktikan pentingnya identifikasi kondisi pasar dan penempatan aset.

Kode Sumber Strategi
/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 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/
// 
// @author Sunil Halai
//
// This script has been created to demonstrate the effectiveness of using market regime filters in your trading strategy, and how they can improve your returns and lower your drawdowns
//
// This strategy adds a simple filter (The historical volatility filter, which can be found on my trading profile) to a traditional buy and hold strategy of the index SPY. There are other filters
// that could also be added included a long term moving average / percentile rank filter / ADX filter etc, to improve the returns further.
//
// The filter added closes our long position during periods of volatility that exceed the 95th percentile (or in the top 5% of volatile days)
//
// Have included the back test results since 1993 which is 28 years of data at the time of writing,  Comparing  buy and hold of the SPY (S&P 500), to improved by and hold offered here.
//
// Traditional buy and hold:
//
// Return per year:     7.95   % (ex Dividends)
// Total return :       851.1  %
// Max drawdown:        50.79  %
//
// 'Modified' buy and hold (this script):
//
// Return per year:     9.92    % (ex Dividends)
// Total return:        1412.16 %
// Max drawdown:        31.57   %
//
// Feel free to use some of the market filters in my trading profile to improve and refine your strategies further, or make a copy and play around with the code yourself. This is just 
// a simple example for demo purposes.
//

//@version=4
strategy(title = "Simple way to beat the market [STRATEGY]", shorttitle = "Beat The Market [STRATEGY]", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, currency="USD", default_qty_value=100)


upperExtreme = input(title = "Upper percentile filter (Do not trade above this number)", type = input.integer, defval = 95)
lookbackPeriod = input(title = "Lookback period", type = input.integer, defval = 100)

annual = 365
per = timeframe.isintraday or timeframe.isdaily and timeframe.multiplier == 1 ? 1 : 7
hv = lookbackPeriod * stdev(log(close / close[1]), 10) * sqrt(annual / per)

filtered = hv >= percentile_nearest_rank(hv, 100, upperExtreme)

if(not(filtered))
    strategy.entry("LONG", strategy.long)
else
    strategy.close("LONG")