自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

yyds!用機器學(xué)習(xí)預(yù)測 bilibili 股價走勢

人工智能 機器學(xué)習(xí)
本文主要講解用Python分析嗶哩嗶哩股價,通過對股票數(shù)據(jù)進行基礎(chǔ)分析,結(jié)合運用matplotlib繪圖庫進行可視化,并用機器學(xué)習(xí)方法 — 蒙特卡洛模擬預(yù)測未來一年股價走勢。

[[418764]]

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

 

安裝

我們需要安裝numpy、pandas、matplotlib、scipy等Python數(shù)據(jù)科學(xué)工具包。

  1. #關(guān)注公眾號:寬客邦,回復(fù)“源碼”獲取下載本文完整源碼 
  2. import numpy as np 
  3. import pandas as pd 
  4. from math import sqrt 
  5. import matplotlib.pyplot as plt 
  6. from scipy.stats import norm 
  7. from pandas_datareader import data 

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

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

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

 

 

開盤價走勢

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

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

 

 

股票成交量

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

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

 

 

股票交易總額

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

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

 

 

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

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

輸出結(jié)果如下:

  1. Timestamp('2021-02-25 00:00:00'

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

收盤價及其移動平均線

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

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

 

 

股票的收益率

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

  1. #關(guān)注公眾號:寬客邦,回復(fù)“源碼”獲取完整源碼,直接使用計算公式計算 
  2. BILI['Return']=(BILI['Close']-BILI['Close'].shift(1))/BILI['Close'].shift(1) 
  3. BILI=BILI.dropna() 
  4.  
  5. #導(dǎo)入專用于金融領(lǐng)域的第三方庫ffn.to_returns函數(shù)計算 
  6. import ffn 
  7. BILI['Return']=ffn.to_returns(BILI['Close']) 
  8.  
  9. #利用pandas自帶的函數(shù)pct_change(1)進行計算 
  10. BILI['Return']=BILI['Close'].pct_change() 
  11. BILI=BILI.dropna() 
  12.  
  13. #關(guān)注公眾號:寬客邦,回復(fù)“源碼”獲取下載本文完整源碼 
  14. plt.hist(BILI['Return'],bins=50) 

 

 

也可以用箱圖觀察收益率

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

 

 

繪制股票的累計收益率

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

 

 

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

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

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

CAGR = 71.72%Annual Volatility = 65.14%

用蒙特卡洛模擬預(yù)測股票走勢

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

  1. S = BILI['Adj Close'][-1] #起始股票價格(即最后一天的實際股票價格) 
  2. T = 252 #交易天數(shù) 
  3. mu = 0.7172 #復(fù)合年均增長率 
  4. vol = 0.6514 #年度波動率 
  5.  
  6. #關(guān)注公眾號:寬客邦,回復(fù)“源碼”獲取完整源碼,使用隨機正態(tài)分布創(chuàng)建每日收益列表 
  7. daily_returns=np.random.normal((mu/T),vol/math.sqrt(T))+1 
  8.  
  9. #關(guān)注公眾號:寬客邦,回復(fù)“源碼”獲取下載本文完整源碼 
  10. price_list = [S] 
  11.  
  12. for x in daily_returns: 
  13.     price_list.append(price_list[-1]*x) 
  14.  
  15. #生成價格序列的折線圖 
  16.  
  17. plt.plot(price_list) 
  18. plt.show() 

 

 

生成每日收益的直方圖

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

 

 

1000次模擬預(yù)測未來嗶哩嗶哩股價走勢。

  1. import numpy as np 
  2. import math 
  3. import matplotlib.pyplot as plt 
  4. from scipy.stats import norm 
  5.  
  6. #關(guān)注公眾號:寬客邦,回復(fù)“源碼”獲取下載本文完整源碼 
  7. S = BILI['Adj Close'][-1] #起始股票價格(即最后一天的實際股票價格) 
  8. T = 252 #交易天數(shù) 
  9. mu = 0.7172 #復(fù)合年均增長率 
  10. vol = 0.6514 #年度波動率 
  11.  
  12. #選擇要模擬的運行次數(shù) - 我選擇1000 
  13. for i in range(1000): 
  14.     #使用隨機正態(tài)分布創(chuàng)建每日收益列表 
  15.     daily_returns=np.random.normal(mu/T,vol/math.sqrt(T))+1 
  16.      
  17.     #設(shè)置起始價格并創(chuàng)建由上述隨機每日收益生成的價格列表 
  18.     price_list = [S] 
  19.      
  20.     for x in daily_returns: 
  21.         price_list.append(price_list[-1]*x) 
  22.  
  23.     #繪制來自每個單獨運行的數(shù)據(jù),我們將在最后繪制 
  24.     plt.plot(price_list) 
  25.  
  26. #顯示上面創(chuàng)建的多個價格系列的圖 
  27. plt.show() 

 

 

10000次模擬預(yù)測未來嗶哩嗶哩股價走勢。

  1. import numpy as np 
  2. import math 
  3. import matplotlib.pyplot as plt 
  4. from scipy.stats import norm 
  5.  
  6. #關(guān)注公眾號:寬客邦,回復(fù)“源碼”獲取下載本文完整源碼 
  7. result = [] 
  8.  
  9. #定義變量 
  10. S = BILI['Adj Close'][-1] #起始股票價格(即最后一天的實際股票價格) 
  11. T = 252 #交易天數(shù) 
  12. mu = 0.7172 #復(fù)合年均增長率 
  13. vol = 0.6514 #年度波動率 
  14.  
  15. #選擇要模擬的運行次數(shù) - 選擇10000 
  16. for i in range(10000): 
  17.     #使用隨機正態(tài)分布創(chuàng)建每日收益列表 
  18.     daily_returns=np.random.normal(mu/T,vol/math.sqrt(T))+1 
  19.      
  20.     #設(shè)置起始價格并創(chuàng)建由上述隨機每日收益生成的價格列表 
  21.     price_list = [S] 
  22.      
  23.     for x in daily_returns: 
  24.         price_list.append(price_list[-1]*x) 
  25.  
  26.     #繪制來自每個單獨運行的數(shù)據(jù),我們將在最后繪制 
  27.     plt.plot(price_list) 
  28.      
  29.     #將每次模擬運行的結(jié)束值附加到我們在開始時創(chuàng)建的空列表中 
  30.     result.append(price_list[-1]) 
  31.  
  32. #顯示上面創(chuàng)建的多個價格系列的圖 
  33. plt.show() 

 

 

為我們的多重模擬創(chuàng)建股票收盤價的直方圖。

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

 

 

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

 

  1. print(round(np.mean(result)))  
  2. 139.18
  3. 用 numpy 的“percentile”函數(shù)來計算 5% 和 95% 的分位數(shù) 
  4. print("5% quantile =",np.percentile(result,5))print("95% quantile =",np.percentile(result,95)) 
  5.  
  6. 5% quantile = 38.33550814175252  
  7. 95% quantile = 326.44060907630484 

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

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

 

從上面的結(jié)果我們得知:嗶哩嗶哩(BILI)的股價有5%的可能性最終會低于38.33美元,有5%的可能性會高于326.44美元。那么你是否愿意冒5%的風(fēng)險獲得股價低于38.33美元的損失,來追逐股價高于326.44美元的回報收益呢?

責(zé)任編輯:未麗燕 來源: 寬客邦
相關(guān)推薦

2021-08-23 11:15:20

Python機器學(xué)習(xí)bilibili

2021-11-12 15:41:42

LSTM神經(jīng)網(wǎng)絡(luò)人工智能

2020-07-14 08:34:07

AI機器學(xué)習(xí)預(yù)測股價

2022-01-18 09:21:17

Python機器學(xué)習(xí)黃金價格

2019-11-28 09:23:17

Python機器學(xué)習(xí)數(shù)據(jù)庫

2021-03-30 23:10:47

數(shù)據(jù)科學(xué)機器學(xué)習(xí)二分類

2016-04-08 15:04:37

人工智能阿里小Ai

2022-06-09 09:14:31

機器學(xué)習(xí)PythonJava

2017-05-03 19:08:10

機器學(xué)習(xí)

2020-01-31 16:08:00

?機器學(xué)習(xí)數(shù)據(jù)技術(shù)

2017-07-25 12:09:10

機器學(xué)習(xí)預(yù)測性維護模型

2018-08-30 14:58:12

機器學(xué)習(xí)磁盤故障

2023-06-29 14:38:46

2017-11-24 10:43:43

Madlib機器學(xué)習(xí)

2018-02-25 19:02:45

Python機器學(xué)習(xí)算法

2019-09-12 08:38:15

機器學(xué)習(xí)電影數(shù)據(jù)庫

2020-08-28 07:00:00

機器學(xué)習(xí)預(yù)測股市人工智能

2021-07-29 13:06:29

Python機器學(xué)習(xí)編程語言

2019-10-14 16:57:19

機器學(xué)習(xí)預(yù)測分析 區(qū)別

2017-09-06 16:40:51

機器學(xué)習(xí)Airbnb預(yù)測房價
點贊
收藏

51CTO技術(shù)棧公眾號