ED, dan prosesnya dihilangkan.
Ijazah pencocokan Pengedaran Normal Normal tidak sebaik pengedaran t, yang juga menunjukkan bahawa pengedaran hasil mempunyai ekor yang lebih tebal daripada pengedaran normal. Seterusnya, masukkan proses pemodelan, regresi model ARMA-GARCH(1,1) dijalankan untuk log_return (peratusan logaritma pengembalian) dan dianggarkan seperti berikut:
Dalam [23]:
am_GARCH = arch_model(training_garch, mean='AR', vol='GARCH',
p=1, q=1, lags=3, dist='ged')
res_GARCH = am_GARCH.fit(disp=False, options={'ftol': 1e-01})
res_GARCH.summary()
Keluar[23]: Iterasi: 1, Func. Hitung: 10, Negatif LLF: -1917.4262154917305
Hasil Model AR - GARCH
Model purata
Model Volatiliti
Pengedaran
Pengira kovarian: mantap Penerangan persamaan turun naik GARCH mengikut pangkalan data ARCH:
Persamaan regresi bersyarat untuk turun naik boleh diperolehi sebagai:
Digabungkan dengan turun naik yang diramalkan yang sepadan, bandingkan dengan turun naik sampel yang direalisasikan untuk melihat kesannya.
Dalam [26]:
def recursive_forecast(pd_dataframe):
window = predict_lag
model = 'GARCH'
index = kline_test[1:].index
end_loc = np.where(index >= kline_test.index[window])[0].min()
forecasts = {}
for i in range(len(kline_test[1:]) - window + 2):
mod = arch_model(pd_dataframe['log_return'][1:], mean='AR', vol=model, dist='ged',p=1, q=1)
res = mod.fit(last_obs=i+end_loc, disp='off', options={'ftol': 1e03})
temp = res.forecast().variance
fcast = temp.iloc[i + end_loc - 1]
forecasts[fcast.name] = fcast
forecasts = pd.DataFrame(forecasts).T
pd_dataframe['recursive_{}'.format(model)] = forecasts['h.1']
evaluate(pd_dataframe, 'realized_volatility_1_hour', 'recursive_{}'.format(model))
recursive_forecast(kline_test)
Keluar[26]: Kesalahan mutlak purata (MAE): 0.0128 Kesalahan Peratusan Absolut Purata (MAPE): 95.6 Kesilapan Akar Rata-rata Kuadrat (RMSE): 0.018
Untuk perbandingan, buat ARCH seperti berikut:
Dalam [27]:
def recursive_forecast(pd_dataframe):
window = predict_lag
model = 'ARCH'
index = kline_test[1:].index
end_loc = np.where(index >= kline_test.index[window])[0].min()
forecasts = {}
for i in range(len(kline_test[1:]) - window + 2):
mod = arch_model(pd_dataframe['log_return'][1:], mean='AR', vol=model, dist='ged', p=1)
res = mod.fit(last_obs=i+end_loc, disp='off', options={'ftol': 1e03})
temp = res.forecast().variance
fcast = temp.iloc[i + end_loc - 1]
forecasts[fcast.name] = fcast
forecasts = pd.DataFrame(forecasts).T
pd_dataframe['recursive_{}'.format(model)] = forecasts['h.1']
evaluate(pd_dataframe, 'realized_volatility_1_hour', 'recursive_{}'.format(model))
recursive_forecast(kline_test)
Keluar[27]: Kesalahan mutlak purata (MAE): 0.0136 Kesalahan Peratusan Absolut Purata (MAPE): 98.1 Kesilapan Akar Rendah Kuadrat (RMSE): 0.02
Langkah seterusnya adalah untuk menjalankan EGARCH pemodelan
Dalam [24]:
am_EGARCH = arch_model(training_egarch, mean='AR', vol='EGARCH',
p=1, lags=3, o=1,q=1, dist='ged')
res_EGARCH = am_EGARCH.fit(disp=False, options={'ftol': 1e-01})
res_EGARCH.summary()
Keluar[24]: Iterasi: 1, Func. Bilangan: 11, Negatif LLF: -1966.610328148909
Hasil Model AR - EGARCH
Model purata
Model Volatiliti
Pengedaran
Pengira kovarian: mantap Persamaan turun naik EGARCH yang disediakan oleh perpustakaan ARCH diterangkan seperti berikut:
pengganti
Persamaan regresi bersyarat volatiliti boleh diperolehi seperti berikut:
Di antara mereka, pekali anggaran istilah simetri γ adalah kurang daripada selang kepercayaan, menunjukkan bahawa terdapat
Digabungkan dengan turun naik yang diramalkan yang disesuaikan, hasilnya dibandingkan dengan turun naik sampel yang direalisasikan seperti berikut:
Dalam [28]:
def recursive_forecast(pd_dataframe):
window = 280
model = 'EGARCH'
index = kline_test[1:].index
end_loc = np.where(index >= kline_test.index[window])[0].min()
forecasts = {}
for i in range(len(kline_test[1:]) - window + 2):
mod = arch_model(pd_dataframe['log_return'][1:], mean='AR', vol=model,
lags=3, p=2, o=0, q=1, dist='ged')
res = mod.fit(last_obs=i+end_loc, disp='off', options={'ftol': 1e03})
temp = res.forecast().variance
fcast = temp.iloc[i + end_loc - 1]
forecasts[fcast.name] = fcast
forecasts = pd.DataFrame(forecasts).T
pd_dataframe['recursive_{}'.format(model)] = forecasts['h.1']
evaluate(pd_dataframe, 'realized_volatility_1_hour', 'recursive_{}'.format(model))
pd_dataframe['recursive_{}'.format(model)]
recursive_forecast(kline_test)
Keluar[28]: Kesalahan mutlak purata (MAE): 0.0201 Kesalahan Peratusan Absolut Purata (MAPE): 122 Kesalahan Peringkat Peringkat (RMSE): 0.0279
Ia dapat dilihat bahawa EGARCH lebih sensitif terhadap turun naik dan lebih sesuai dengan turun naik daripada ARCH dan GARCH.
Data sejam dipilih berdasarkan sampel, dan langkah seterusnya adalah meramalkan satu jam ke hadapan. Kami memilih turun naik yang diramalkan dalam 10 jam pertama dari tiga model, dengan RV sebagai turun naik penanda aras. Nilai ralat perbandingan adalah seperti berikut:
Dalam [29]:
compare_ARCH_X = pd.DataFrame()
compare_ARCH_X['original']=kline_test['realized_volatility_1_hour']
compare_ARCH_X['arch']=kline_test['recursive_ARCH']
compare_ARCH_X['arch_diff']=compare_ARCH_X['original']-np.abs(compare_ARCH_X['arch'])
compare_ARCH_X['garch']=kline_test['recursive_GARCH']
compare_ARCH_X['garch_diff']=compare_ARCH_X['original']-np.abs(compare_ARCH_X['garch'])
compare_ARCH_X['egarch']=kline_test['recursive_EGARCH']
compare_ARCH_X['egarch_diff']=compare_ARCH_X['original']-np.abs(compare_ARCH_X['egarch'])
compare_ARCH_X = compare_ARCH_X[280:]
compare_ARCH_X.head(10)
Keluar[29]:
Dalam [30]:
compare_ARCH_X_diff = pd.DataFrame(index=['ARCH','GARCH','EGARCH'], columns=['head 1 step', 'head 10 steps', 'head 100 steps'])
compare_ARCH_X_diff['head 1 step']['ARCH'] = compare_ARCH_X['arch_diff']['2020-03-13 04:00:00+08:00']
compare_ARCH_X_diff['head 10 steps']['ARCH'] = np.mean(compare_ARCH_X['arch_diff'][:10])
compare_ARCH_X_diff['head 100 steps']['ARCH'] = np.mean(compare_ARCH_X['arch_diff'][:100])
compare_ARCH_X_diff['head 1 step']['GARCH'] = compare_ARCH_X['garch_diff']['2020-03-13 04:00:00+08:00']
compare_ARCH_X_diff['head 10 steps']['GARCH'] = np.mean(compare_ARCH_X['garch_diff'][:10])
compare_ARCH_X_diff['head 100 steps']['GARCH'] = np.mean(compare_ARCH_X['garch_diff'][:100])
compare_ARCH_X_diff['head 1 step']['EGARCH'] = compare_ARCH_X['egarch_diff']['2020-03-13 04:00:00+08:00']
compare_ARCH_X_diff['head 10 steps']['EGARCH'] = np.mean(compare_ARCH_X['egarch_diff'][:10])
compare_ARCH_X_diff['head 100 steps']['EGARCH'] = np.abs(np.mean(compare_ARCH_X['egarch_diff'][:100]))
compare_ARCH_X_diff
Keluar[30]:
Beberapa ujian telah dijalankan, dalam hasil ramalan jam pertama, kebarangkalian kesilapan terkecil EGARCH agak besar, tetapi perbezaan keseluruhan tidak begitu jelas; Terdapat beberapa perbezaan yang jelas dalam kesan ramalan jangka pendek; EGARCH mempunyai keupayaan ramalan yang paling cemerlang dalam ramalan jangka panjang
Dalam [31]:
compare_ARCH_X = pd.DataFrame()
compare_ARCH_X['Model'] = ['ARCH','GARCH','EGARCH']
compare_ARCH_X['RMSE'] = [get_rmse(kline_test['realized_volatility_1_hour'][280:320],kline_test['recursive_ARCH'][280:320]),
get_rmse(kline_test['realized_volatility_1_hour'][280:320],kline_test['recursive_GARCH'][280:320]),
get_rmse(kline_test['realized_volatility_1_hour'][280:320],kline_test['recursive_EGARCH'][280:320])]
compare_ARCH_X['MAPE'] = [get_mape(kline_test['realized_volatility_1_hour'][280:320],kline_test['recursive_ARCH'][280:320]),
get_mape(kline_test['realized_volatility_1_hour'][280:320],kline_test['recursive_GARCH'][280:320]),
get_mape(kline_test['realized_volatility_1_hour'][280:320],kline_test['recursive_EGARCH'][280:320])]
compare_ARCH_X['MASE'] = [get_mape(kline_test['realized_volatility_1_hour'][280:320],kline_test['recursive_ARCH'][280:320]),
get_mape(kline_test['realized_volatility_1_hour'][280:320],kline_test['recursive_GARCH'][280:320]),
get_mape(kline_test['realized_volatility_1_hour'][280:320],kline_test['recursive_EGARCH'][280:320])]
compare_ARCH_X
Keluar[31]:
Dari segi penunjuk, GARCH dan EGARCH mempunyai beberapa peningkatan berbanding dengan ARCH, tetapi perbezaannya tidak begitu jelas. Selepas pemilihan dan pengesahan selang pelbagai sampel, EGARCH akan mempunyai prestasi yang lebih baik, yang terutamanya kerana EGARCH menjelaskan heteroscedasticity sampel dengan baik.
Dari analisis mudah di atas, dapat didapati bahawa kadar pulangan logaritma Bitcoin tidak sesuai dengan pengedaran normal, yang dicirikan oleh ekor lemak tebal, dan turun naik mempunyai pengumpulan dan kesan leverage, sambil menunjukkan heterogeniti bersyarat yang jelas.
Dalam ramalan dan penilaian kadar pulangan logaritma, kemampuan ramalan statik intra sampel ARMA
Selain itu, apabila berurusan dengan fenomena ekor tebal Bitcoin, iaitu pengedaran ekor tebal pulangan, didapati bahawa pengedaran GED (kesalahan umum) lebih baik daripada pengedaran t dan pengedaran normal dengan ketara, yang dapat meningkatkan ketepatan pengukuran risiko ekor. Pada masa yang sama, EGARCH mempunyai lebih banyak kelebihan dalam meramalkan turun naik jangka panjang, yang menjelaskan dengan baik heteroskedastikiti sampel. Gabungan anggaran simetri dalam pencocokan model kurang daripada selang keyakinan, yang menunjukkan bahawa terdapat
Keseluruhan proses pemodelan penuh dengan pelbagai andaian berani, dan tidak ada pengenalan konsistensi bergantung pada kesahihan, jadi kita hanya boleh mengesahkan beberapa fenomena dengan teliti. Sejarah hanya dapat menyokong kebarangkalian meramalkan masa depan dalam statistik, tetapi ketepatan dan nisbah prestasi kos masih mempunyai perjalanan yang panjang dan sukar.
Berbanding dengan pasaran tradisional, ketersediaan data frekuensi tinggi Bitcoin lebih mudah. Pengukuran
Walau bagaimanapun, yang di atas adalah terhad kepada teori. Data frekuensi yang lebih tinggi benar-benar dapat memberikan analisis yang lebih tepat mengenai tingkah laku peniaga. Ia tidak hanya dapat menyediakan ujian yang lebih boleh dipercayai untuk model teori kewangan, tetapi juga memberikan maklumat pengambilan keputusan yang lebih banyak untuk peniaga, bahkan menyokong ramalan aliran maklumat dan aliran modal, dan membantu merancang strategi perdagangan kuantitatif yang lebih tepat.
Akhirnya, jika anda fikir kandungan di atas membantu, anda juga boleh menawarkan sedikit BTC untuk membeli saya secangkir Cola.