日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

yyds!用机器学习预测 bilibili 股价走势

發布時間:2024/1/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 yyds!用机器学习预测 bilibili 股价走势 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文主要講解用Python分析嗶哩嗶哩股價,通過對股票數據進行基礎分析,結合運用matplotlib繪圖庫進行可視化,并用機器學習方法 — 蒙特卡洛模擬預測未來一年股價走勢。

安裝

我們需要安裝numpy、pandas、matplotlib、scipy等Python數據科學工具包。

#關注公眾號:寬客邦,回復“源碼”獲取下載本文完整源碼 import?numpy?as?np import?pandas?as?pd from?math?import?sqrt import?matplotlib.pyplot?as?plt from?scipy.stats?import?norm from?pandas_datareader?import?data

選取嗶哩嗶哩(股票代碼:BILI)2018年上市到現在2021年的數據進行分析,數據來自雅虎。這里使用pd.to_datetime將數據集時間轉化為時間序列,便于股票的分析。

BILI?=?data.DataReader('BILI',?'yahoo',start='29/3/2018',) BILI.index=pd.to_datetime(BILI.index)

首先用head()方法看一下數據集的結構,數據集包含了股票的開盤價、收盤價、每日最低價與最高價、交易量等信息。掃描本文最下方二維碼獲取全部完整源碼和Jupyter Notebook 文件打包下載。

開盤價走勢

我們可以通過 matplotlib 進行數據可視化,plt.legend用于設置圖像的圖例,loc是圖例位置,upper right代表圖例在右上角。從圖中可以看出嗶哩嗶哩股票在2020年12月到2021年2月之間有一個快速的增長,隨后股價有所回落。

plt.figure(figsize=(16,6)) BILI['Open'].plot() plt.legend(['BILI'],loc='upper?right')

股票成交量

我們再來看一下股票的成交量。

plt.figure(figsize=(16,6)) BILI['Volume'].plot() plt.legend(['BILI'],loc='upper?right') plt.xlim(BILI.index[0],BILI.index[-1])

股票交易總額

我們再分析以下股票的交易總額。從圖中可以很明顯看出2021年1月到5月間某一天交易總額創歷史新高。

BILI['Total?Traded']=BILI['Open']*BILI['Volume']plt.figure(figsize=(16,6)) BILI['Total?Traded'].plot()plt.legend(['BILI'],loc='upper?right') plt.xlim(BILI.index[0],BILI.index[-1])

下面我們來通過argmax()獲取最大交易總額的日期。

BILI['Total?Traded'].argmax()

輸出結果如下:

Timestamp('2021-02-25 00:00:00')

我們搜索新聞可以發現,2021年2月25日嗶哩嗶哩(NASDAQ: BILI)公布了截至2020年12月31日的第四季度和全年未經審計的財務報告。財報發布后,B站在美股的盤后股價一度漲超5%。

收盤價及其移動平均線

下面繪制BILI這支股票的收盤價及其移動平均線,我們可以用DataFrame的rolling()函數得到移動平均值。

BILI['Close'].plot(figsize=(16,6),xlim=(BILI.index[0],BILI.index[-1])) BILI['Close'].rolling(50).mean().plot(label='BILI?MA50') BILI['Close'].rolling(200).mean().plot(label='BILI?MA200') plt.legend()

股票的收益率

下面我們計算每支股票的日收益率,并用直方圖進行展示。這里了三種方法來計算日收益率,第一種是直接使用計算公式計算;第二種是導入專用于金融領域的第三方庫ffn.to_returns函數計算;第三種是利用pandas自帶的函數pct_change(1)進行計算。掃描本文最下方二維碼獲取全部完整源碼和Jupyter Notebook 文件打包下載。

#關注公眾號:寬客邦,回復“源碼”獲取完整源碼,直接使用計算公式計算 BILI['Return']=(BILI['Close']-BILI['Close'].shift(1))/BILI['Close'].shift(1) BILI=BILI.dropna()#導入專用于金融領域的第三方庫ffn.to_returns函數計算 import?ffn BILI['Return']=ffn.to_returns(BILI['Close'])#利用pandas自帶的函數pct_change(1)進行計算 BILI['Return']=BILI['Close'].pct_change() BILI=BILI.dropna()#關注公眾號:寬客邦,回復“源碼”獲取下載本文完整源碼 plt.hist(BILI['Return'],bins=50)

也可以用箱圖觀察收益率

box_df?=?pd.concat([BILI['Return']],axis=1) box_df.columns?=?['BILI?Returns'] box_df.plot(kind='box',figsize=(8,11),colormap='jet')

繪制股票的累計收益率

BILI['Cumulative?Return']=(1+BILI['Return']).cumprod()BILI['Cumulative?Return'].plot(label='BILI',figsize=(16,8),title='Cumulative?Return') plt.legend()

股票的復合年均增長率和收益的年度波動率

計算股票的復合年均增長率和收益的年度波動率。

#關注公眾號:寬客邦,回復“源碼”獲取完整源碼,計算復合年均增長率 days?=?(BILI.index[-1]?-?BILI.index[0]).days cagr?=?((((BILI['Adj?Close'][-1])?/?BILI['Adj?Close'][1]))?**?(365.0/days))?-?1 print?('CAGR?=',str(round(cagr)*100)+"%") mu?=?cagr#計算收益的年度波動率 BILI['Returns']?=?BILI['Adj?Close'].pct_change() vol?=?BILI['Returns']*sqrt(252) print?("Annual?Volatility?=",str(round(vol,4)*100)+"%")

CAGR = 71.72%Annual Volatility = 65.14%

用蒙特卡洛模擬預測股票走勢

我們來預測未來一個交易年度(252 天)內潛在價格序列演變的單一模擬,基于遵循正態分布的每日收益隨機的抽取。由第一個圖表中顯示的單線系列表示。第二個圖表繪制了一年期間這些隨機每日收益的直方圖。掃描本文最下方二維碼獲取全部完整源碼和Jupyter Notebook 文件打包下載。

S?=?BILI['Adj?Close'][-1]?#起始股票價格(即最后一天的實際股票價格) T?=?252?#交易天數 mu?=?0.7172?#復合年均增長率 vol?=?0.6514?#年度波動率#關注公眾號:寬客邦,回復“源碼”獲取完整源碼,使用隨機正態分布創建每日收益列表 daily_returns=np.random.normal((mu/T),vol/math.sqrt(T))+1#關注公眾號:寬客邦,回復“源碼”獲取下載本文完整源碼 price_list?=?[S]for?x?in?daily_returns:price_list.append(price_list[-1]*x)#生成價格序列的折線圖plt.plot(price_list) plt.show()

生成每日收益的直方圖

plt.hist(daily_returns-1,?100)? plt.show()

1000次模擬預測未來嗶哩嗶哩股價走勢。

import?numpy?as?np import?math import?matplotlib.pyplot?as?plt from?scipy.stats?import?norm#關注公眾號:寬客邦,回復“源碼”獲取下載本文完整源碼 S?=?BILI['Adj?Close'][-1]?#起始股票價格(即最后一天的實際股票價格) T?=?252?#交易天數 mu?=?0.7172?#復合年均增長率 vol?=?0.6514?#年度波動率#選擇要模擬的運行次數?-?我選擇1000 for?i?in?range(1000):#使用隨機正態分布創建每日收益列表daily_returns=np.random.normal(mu/T,vol/math.sqrt(T))+1#設置起始價格并創建由上述隨機每日收益生成的價格列表price_list?=?[S]for?x?in?daily_returns:price_list.append(price_list[-1]*x)#繪制來自每個單獨運行的數據,我們將在最后繪制plt.plot(price_list)#顯示上面創建的多個價格系列的圖 plt.show()

10000次模擬預測未來嗶哩嗶哩股價走勢。

import?numpy?as?np import?math import?matplotlib.pyplot?as?plt from?scipy.stats?import?norm#關注公眾號:寬客邦,回復“源碼”獲取下載本文完整源碼 result?=?[]#定義變量 S?=?BILI['Adj?Close'][-1]?#起始股票價格(即最后一天的實際股票價格) T?=?252?#交易天數 mu?=?0.7172?#復合年均增長率 vol?=?0.6514?#年度波動率#選擇要模擬的運行次數?-?選擇10000 for?i?in?range(10000):#使用隨機正態分布創建每日收益列表daily_returns=np.random.normal(mu/T,vol/math.sqrt(T))+1#設置起始價格并創建由上述隨機每日收益生成的價格列表price_list?=?[S]for?x?in?daily_returns:price_list.append(price_list[-1]*x)#繪制來自每個單獨運行的數據,我們將在最后繪制plt.plot(price_list)#將每次模擬運行的結束值附加到我們在開始時創建的空列表中result.append(price_list[-1])#顯示上面創建的多個價格系列的圖 plt.show()

為我們的多重模擬創建股票收盤價的直方圖。

plt.hist(result,bins=50) plt.show()

用numpy mean函數計算平均值的分布,以獲得我們的“預期值”。

print(round(np.mean(result)))

139.18

用 numpy 的“percentile”函數來計算 5% 和 95% 的分位數

print("5%?quantile?=",np.percentile(result,5)) print("95%?quantile?=",np.percentile(result,95))

5% quantile = 38.33550814175252

95% quantile = 326.44060907630484

在直方圖上快速繪制我們剛剛計算的兩個分位數,以給我們一個直觀的表示。

plt.hist(result,bins=100) plt.axvline(np.percentile(result,5),?color='r',?linestyle='dashed') plt.axvline(np.percentile(result,95),?color='r',?linestyle='dashed') plt.show()

從上面的結果我們得知:嗶哩嗶哩(BILI)的股價有5%的可能性最終會低于38.33美元,有5%的可能性會高于326.44美元。那么你是否愿意冒5%的風險獲得股價低于38.33美元的損失,來追逐股價高于326.44美元的回報收益呢?掃描本文最下方二維碼獲取全部完整源碼和Jupyter Notebook 文件打包下載。

長按掃碼獲取完整源碼

總結

以上是生活随笔為你收集整理的yyds!用机器学习预测 bilibili 股价走势的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。