<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 6806字,需瀏覽 14分鐘

           ·

          2021-08-21 10:27


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


          安裝
          我們需要安裝numpy、pandasmatplotlib、scipy等Python數(shù)據(jù)科學(xué)工具包。
          #關(guān)注公眾號:寬客邦,回復(fù)“源碼”獲取下載本文完整源碼
          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年上市到現(xiàn)在2021年的數(shù)據(jù)進行分析,數(shù)據(jù)來自雅虎。這里使用pd.to_datetime將數(shù)據(jù)集時間轉(zhuǎn)化為時間序列,便于股票的分析。
          BILI = data.DataReader('BILI''yahoo',start='29/3/2018',)
          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月之間有一個快速的增長,隨后股價有所回落。
          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月間某一天交易總額創(chuàng)歷史新高。
          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()
          輸出結(jié)果如下:
          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ù)得到移動平均值。
          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()


          股票的收益率
          下面我們計算每支股票的日收益率,并用直方圖進行展示。這里了三種方法來計算日收益率,第一種是直接使用計算公式計算;第二種是導(dǎo)入專用于金融領(lǐng)域的第三方庫ffn.to_returns函數(shù)計算;第三種是利用pandas自帶的函數(shù)pct_change(1)進行計算。掃描本文最下方二維碼獲取全部完整源碼和Jupyter Notebook 文件打包下載。
          #關(guān)注公眾號:寬客邦,回復(fù)“源碼”獲取完整源碼,直接使用計算公式計算
          BILI['Return']=(BILI['Close']-BILI['Close'].shift(1))/BILI['Close'].shift(1)
          BILI=BILI.dropna()

          #導(dǎo)入專用于金融領(lǐng)域的第三方庫ffn.to_returns函數(shù)計算
          import ffn
          BILI['Return']=ffn.to_returns(BILI['Close'])

          #利用pandas自帶的函數(shù)pct_change(1)進行計算
          BILI['Return']=BILI['Close'].pct_change()
          BILI=BILI.dropna()

          #關(guān)注公眾號:寬客邦,回復(fù)“源碼”獲取下載本文完整源碼
          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()


          股票的復(fù)合年均增長率和收益的年度波動率
          計算股票的復(fù)合年均增長率和收益的年度波動率。
          #關(guān)注公眾號:寬客邦,回復(fù)“源碼”獲取完整源碼,計算復(fù)合年均增長率
          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%

          用蒙特卡洛模擬預(yù)測股票走勢
          我們來預(yù)測未來一個交易年度(252 天)內(nèi)潛在價格序列演變的單一模擬,基于遵循正態(tài)分布的每日收益隨機的抽取。由第一個圖表中顯示的單線系列表示。第二個圖表繪制了一年期間這些隨機每日收益的直方圖。掃描本文最下方二維碼獲取全部完整源碼和Jupyter Notebook 文件打包下載。
          S = BILI['Adj Close'][-1#起始股票價格(即最后一天的實際股票價格)
          T = 252 #交易天數(shù)
          mu = 0.7172 #復(fù)合年均增長率
          vol = 0.6514 #年度波動率

          #關(guān)注公眾號:寬客邦,回復(fù)“源碼”獲取完整源碼,使用隨機正態(tài)分布創(chuàng)建每日收益列表
          daily_returns=np.random.normal((mu/T),vol/math.sqrt(T))+1

          #關(guān)注公眾號:寬客邦,回復(fù)“源碼”獲取下載本文完整源碼
          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-1100
          plt.show()


          1000次模擬預(yù)測未來嗶哩嗶哩股價走勢。
          import numpy as np
          import math
          import matplotlib.pyplot as plt
          from scipy.stats import norm

          #關(guān)注公眾號:寬客邦,回復(fù)“源碼”獲取下載本文完整源碼
          S = BILI['Adj Close'][-1#起始股票價格(即最后一天的實際股票價格)
          T = 252 #交易天數(shù)
          mu = 0.7172 #復(fù)合年均增長率
          vol = 0.6514 #年度波動率

          #選擇要模擬的運行次數(shù) - 我選擇1000
          for i in range(1000):
              #使用隨機正態(tài)分布創(chuàng)建每日收益列表
              daily_returns=np.random.normal(mu/T,vol/math.sqrt(T))+1
              
              #設(shè)置起始價格并創(chuàng)建由上述隨機每日收益生成的價格列表
              price_list = [S]
              
              for x in daily_returns:
                  price_list.append(price_list[-1]*x)

              #繪制來自每個單獨運行的數(shù)據(jù),我們將在最后繪制
              plt.plot(price_list)

          #顯示上面創(chuàng)建的多個價格系列的圖
          plt.show()


          10000次模擬預(yù)測未來嗶哩嗶哩股價走勢。
          import numpy as np
          import math
          import matplotlib.pyplot as plt
          from scipy.stats import norm

          #關(guān)注公眾號:寬客邦,回復(fù)“源碼”獲取下載本文完整源碼
          result = []

          #定義變量
          S = BILI['Adj Close'][-1#起始股票價格(即最后一天的實際股票價格)
          T = 252 #交易天數(shù)
          mu = 0.7172 #復(fù)合年均增長率
          vol = 0.6514 #年度波動率

          #選擇要模擬的運行次數(shù) - 選擇10000
          for i in range(10000):
              #使用隨機正態(tài)分布創(chuàng)建每日收益列表
              daily_returns=np.random.normal(mu/T,vol/math.sqrt(T))+1
              
              #設(shè)置起始價格并創(chuàng)建由上述隨機每日收益生成的價格列表
              price_list = [S]
              
              for x in daily_returns:
                  price_list.append(price_list[-1]*x)

              #繪制來自每個單獨運行的數(shù)據(jù),我們將在最后繪制
              plt.plot(price_list)
              
              #將每次模擬運行的結(jié)束值附加到我們在開始時創(chuàng)建的空列表中
              result.append(price_list[-1])

          #顯示上面創(chuàng)建的多個價格系列的圖
          plt.show()


          為我們的多重模擬創(chuàng)建股票收盤價的直方圖。
          plt.hist(result,bins=50)
          plt.show()


          numpy mean函數(shù)計算平均值的分布,以獲得我們的“預(yù)期值”。
          print(round(np.mean(result)))
          139.18
          用 numpy 的“percentile”函數(shù)來計算 5% 和 95% 的分位數(shù)
          print("5% quantile =",np.percentile(result,5))
          print("95% quantile =",np.percentile(result,95))

          5% quantile = 38.33550814175252

          95% quantile = 326.44060907630484

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

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

          長按掃碼獲取完整源碼

          瀏覽 25
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲qingse中文 | 一区二区三区在线播放 | 日本黄色片在线播放 | 穿着皮靴被c到高潮的网站 | 先锋影院亚洲无码 |