天天看點

拓端tecdat|基于R語言股票市場收益的統計可視化分析原文連結:http://tecdat.cn/?p=16453 原文出處:拓端資料部落公衆号計算多隻股票的收益統計資料

原文連結:http://tecdat.cn/?p=16453 

原文出處:拓端資料部落公衆号

金融市場上最重要的任務之一就是分析各種投資的曆史收益。要執行此分析,我們需要資産的曆史資料。資料提供者很多,有些是免費的,大多數是付費的。在本文中,我們将使用Yahoo金融網站上的資料。

在這篇文章中,我們将:

  1. 下載下傳收盤價
  2. 計算收益率
  3. 計算收益的均值和标準差

讓我們先加載庫。

library(tidyquant)
library(timetk)
           

我們将獲得Netflix價格的收盤價。

netflix <- tq_get("NFLX",                    
                  from = '2009-01-01',
                  to = "2018-03-01",
                  get = "stock.prices")
           

接下來,我們将繪制Netflix的調整後收盤價。

netflix %>%
  ggplot(aes(x = date, y = adjusted)) +
  geom_line() +
  ggtitle("Netflix since 2009") +
  labs(x = "Date", "Price") +
  scale_x_date(date_breaks = "years", date_labels = "%Y") +
  labs(x = "Date", y = "Adjusted Price") +
  theme_bw()
           
拓端tecdat|基于R語言股票市場收益的統計可視化分析原文連結:http://tecdat.cn/?p=16453 原文出處:拓端資料部落公衆号計算多隻股票的收益統計資料

計算單個股票的每日和每月收益率

一旦我們從Yahoo Finance下載下傳了收盤價,下一步便是計算收益。我們将再次使用tidyquant包進行計算。我們已經在上面下載下傳了Netflix的價格資料,如果您還沒有下載下傳,請參見上面的部分。

# 計算每日收益

netflix_daily_returns <- netflix %>%
  tq_transmute(select = adjusted,          這指定要選擇的列
               mutate_fun = periodReturn,   # 這指定如何處理該列
               period = "daily",      # 此參數計算每日收益
               col_rename = "nflx_returns") # 重命名列

#計算每月收益
netflix_monthly_returns <- netflix %>%
  tq_transmute(select = adjusted,
               mutate_fun = periodReturn,
               period = "monthly",      # 此參數計算每月收益
               col_rename = "nflx_returns")
           

繪制Netflix的每日和每月收益圖表

# 我們将使用折線圖擷取每日收益

 
  ggplot(aes(x = date, y = nflx_returns)) +
  geom_line() +
  theme_classic() +
 
           
拓端tecdat|基于R語言股票市場收益的統計可視化分析原文連結:http://tecdat.cn/?p=16453 原文出處:拓端資料部落公衆号計算多隻股票的收益統計資料

檢視Netflix的每日收益圖表後,我們可以得出結論,收益波動很大,并且股票在任何一天都可以波動+/- 5%。為了了解收益率的分布,我們可以繪制直方圖。

netflix_daily_returns %>%
  ggplot(aes(x = nflx_returns)) +
  geom_histogram(binwidth = 0.015) +
  theme_classic() +
   
           
拓端tecdat|基于R語言股票市場收益的統計可視化分析原文連結:http://tecdat.cn/?p=16453 原文出處:拓端資料部落公衆号計算多隻股票的收益統計資料

接下來,我們可以繪制自2009年以來Netflix的月度收益率。我們使用條形圖來繪制資料。

# 繪制Netflix的月度收益圖表。 使用條形圖


  ggplot(aes(x = date, y = nflx_returns)) +
  geom_bar(stat = "identity") +
  theme_classic() +
           
拓端tecdat|基于R語言股票市場收益的統計可視化分析原文連結:http://tecdat.cn/?p=16453 原文出處:拓端資料部落公衆号計算多隻股票的收益統計資料

計算Netflix股票的累計收益

繪制每日和每月收益對了解投資的每日和每月波動很有用。要計算投資的增長,換句話說,計算投資的總收益,我們需要計算該投資的累積收益。要計算累積收益,我們将使用  cumprod()  函數。

mutate(cr = cumprod(1 + nflx_returns)) %>%      # 使用cumprod函數
 
           
ggplot(aes(x = date, y = cumulative_returns)) +
  geom_line() +
  theme_classic() +
 
           
拓端tecdat|基于R語言股票市場收益的統計可視化分析原文連結:http://tecdat.cn/?p=16453 原文出處:拓端資料部落公衆号計算多隻股票的收益統計資料

該圖表顯示了自2009年以來Netflix的累計收益。有了事後分析的力量, 自2009年以來,可以用1美元的投資賺取85美元。但據我們所知,說起來容易做起來難。在10年左右的時間裡,在Qwickster慘敗期間投資損失了其價值的50%。在這段時期内,很少有投資者能夠堅持投資。

ggplot(aes(x = date, y = cumulative_returns)) +
  geom_line() +
  theme_classic() + 
           
拓端tecdat|基于R語言股票市場收益的統計可視化分析原文連結:http://tecdat.cn/?p=16453 原文出處:拓端資料部落公衆号計算多隻股票的收益統計資料

我們可以直覺地看到,月收益表比日圖表要平滑得多。

多隻股票

下載下傳多隻股票的股票市場資料。

#将我們的股票代碼設定為變量

tickers <- c("FB", "AMZN", "AAPL", "NFLX", "GOOG") 

# 下載下傳股價資料

multpl_stocks <- tq_get(tickers, 
           

繪制多隻股票的股價圖

接下來,我們将繪制多隻股票的價格圖表

multpl_stocks %>%
  ggplot(aes(x = date, y = adjusted,  
           
拓端tecdat|基于R語言股票市場收益的統計可視化分析原文連結:http://tecdat.cn/?p=16453 原文出處:拓端資料部落公衆号計算多隻股票的收益統計資料

這不是我們預期的結果。由于這些股票具有巨大的價格差異(FB低于165,AMZN高于1950),是以它們的規模不同。我們可以通過按各自的y比例繪制股票來克服此問題。

facet_wrap(~symbol, scales = "free_y") +  # facet_wrap用于制作不同的頁面
  theme_classic() +   
           
拓端tecdat|基于R語言股票市場收益的統計可視化分析原文連結:http://tecdat.cn/?p=16453 原文出處:拓端資料部落公衆号計算多隻股票的收益統計資料

計算多隻股票的收益

計算多隻股票的收益與單隻股票一樣容易。這裡隻需要傳遞一個附加的參數。我們需要使用參數  group_by(symbol)  來計算單個股票的收益。

#計算多隻股票的每日收益
                          
  tq_transmute(select = adjusted,
               mutate_fun = periodReturn,
               period = 'daily',
               col_rename = 'returns')

#計算多隻股票的月收益

                            
  tq_transmute(select = adjusted,
               mutate_fun = periodReturn,
               period = 'monthly',
               col_rename = 'returns')
           

繪制多隻股票的收益圖表

一旦有了收益計算,就可以在圖表上繪制收益。

multpl_stock_daily_returns %>%
  ggplot(aes(x = date, y = returns)) +
  geom_line() +
  geom_hline(yintercept = 0) + 
           
拓端tecdat|基于R語言股票市場收益的統計可視化分析原文連結:http://tecdat.cn/?p=16453 原文出處:拓端資料部落公衆号計算多隻股票的收益統計資料
multpl_stock_monthly_returns %>%
  ggplot(aes(x = date, y = return 
  scale_fill_brewer(palette = "Set1",   # 我們會給他們不同的顔色,而不是黑色
                      
           
拓端tecdat|基于R語言股票市場收益的統計可視化分析原文連結:http://tecdat.cn/?p=16453 原文出處:拓端資料部落公衆号計算多隻股票的收益統計資料

在FAANG股票中,蘋果的波動最小,而Facebook和Netflix的波動最大。對于他們從事的業務而言,這是顯而易見的。Apple是一家穩定的公司,擁有穩定的現金流量。它的産品受到數百萬人的喜愛和使用,他們對Apple擁有極大的忠誠度。Netflix和Facebook也是令人難以置信的業務,但它們處于高增長階段,任何問題(收益或使用者增長下降)都可能對股票産生重大影響。

計算多隻股票的累計收益

通常,我們希望看到過去哪種投資産生了最佳效果。為此,我們可以計算累積結果。下面我們比較自2013年以來所有FAANG股票的投資結果。哪項是自2013年以來最好的投資?

multpl_stock_monthly_returns %>%
  mutate(returns e_returns = cr - 1) %>%
  ggplot(aes(x = date, y = cumulative_returns, color = symbol)) +
  geom_line() +
  labs(x = "Date" 
           
拓端tecdat|基于R語言股票市場收益的統計可視化分析原文連結:http://tecdat.cn/?p=16453 原文出處:拓端資料部落公衆号計算多隻股票的收益統計資料

毫不奇怪,Netflix自2013年以來獲得了最高的收益。亞馬遜和Facebook位居第二和第三。

統計資料

計算單個股票的均值,标準差

我們已經有了Netflix的每日和每月收益資料。現在我們将計算收益的每日和每月平均數和标準差。 為此,我們将使用  mean()  和  sd()函數。

# 計算平均值
 
  .[[1]] %>%
  mean(na.rm = TRUE)

nflx_monthly_mean_ret <- netfl turns) %>%
  .[[1]] %>%
  mean(na.rm = TRUE)

# 計算标準差

nflx_daily_sd_ret <- netflirns) %>%
  .[[1]] %>%
  sd()

nflx_monthly_sd_ret <- netflix_rns) %>%
  .[[1]] %>%
  sd()
 nflx_stat 
           
## # A tibble: 2 x 3
##   period     mean     sd
##   <chr>     <dbl>  <dbl>
## 1 Daily   0.00240 0.0337
## 2 Monthly 0.0535  0.176
           

我們可以看到Netflix的平均每日收益為0.2%,标準差為3.3%。它的月平均回報率是5.2%和17%标準差。該資料是自2009年以來的整個時期。如果我們要計算每年的均值和标準差,該怎麼辦。我們可以通過按年份對Netflix收益資料進行分組并執行計算來進行計算。

netflix  %>%
  summarise(Monthly_Mean_Returns = mean(nflx_returns),
            MOnthly_Standard_Deviation = sd(nflx_returns) 
           
## # A tibble: 10 x 3
##     year Monthly_Mean_Returns MOnthly_Standard_Deviation
##    <dbl>                <dbl>                      <dbl>
##  1  2009              0.0566                      0.0987
##  2  2010              0.110                       0.142 
##  3  2011             -0.0492                      0.209 
##  4  2012              0.0562                      0.289 
##  5  2013              0.137                       0.216 
##  6  2014              0.00248                     0.140 
##  7  2015              0.0827                      0.148 
##  8  2016              0.0138                      0.126 
##  9  2017              0.0401                      0.0815
## 10  2018              0.243                       0.233
           

我們還可以繪制結果更好地了解。

netflix_monthly_returns %>%
  mutate(year = rns, Standard_Deviation, keyistic)) +
  geom_bar(stat = "identity", position = "dodge") +
  scale_y_continuous(b ) +
  theme_bw() +
           
拓端tecdat|基于R語言股票市場收益的統計可視化分析原文連結:http://tecdat.cn/?p=16453 原文出處:拓端資料部落公衆号計算多隻股票的收益統計資料

我們可以看到,自2009年以來,每月收益和标準差波動很大。2011年,平均每月收益為-5%。

計算多隻股票的均值,标準差

接下來,我們可以計算多隻股票的均值和标準差。

group_by(symbol) %>%
  summarise(mean = mean(returns),
            sd = sd(returns)) 
           
## # A tibble: 5 x 3
##   symbol     mean     sd
##   <chr>     <dbl>  <dbl>
## 1 AAPL   0.00100  0.0153
## 2 AMZN   0.00153  0.0183
## 3 FB     0.00162  0.0202
## 4 GOOG   0.000962 0.0141
## 5 NFLX   0.00282  0.0300
           
group_by(symbol) %>%
  summarise(mean = mean(returns),
            sd = sd(returns)) 
           
## # A tibble: 5 x 3
##   symbol   mean     sd
##   <chr>   <dbl>  <dbl>
## 1 AAPL   0.0213 0.0725
## 2 AMZN   0.0320 0.0800
## 3 FB     0.0339 0.0900
## 4 GOOG   0.0198 0.0568
## 5 NFLX   0.0614 0.157
           

計算收益的年均值和标準差。

%>%
  group_by(symbol, year) %>%
  summarise(mean = mean(returns),
            sd = sd(returns))
           
## # A tibble: 30 x 4
## # Groups:   symbol [?]
##    symbol  year      mean     sd
##    <chr>  <dbl>     <dbl>  <dbl>
##  1 AAPL    2013  0.0210   0.0954
##  2 AAPL    2014  0.0373   0.0723
##  3 AAPL    2015 -0.000736 0.0629
##  4 AAPL    2016  0.0125   0.0752
##  5 AAPL    2017  0.0352   0.0616
##  6 AAPL    2018  0.0288   0.0557
##  7 AMZN    2013  0.0391   0.0660
##  8 AMZN    2014 -0.0184   0.0706
##  9 AMZN    2015  0.0706   0.0931
## 10 AMZN    2016  0.0114   0.0761
## # ... with 20 more rows
           

我們還可以繪制此統計資料。

multpl_stock_monthly_returns %>%
  mutate(year = year(date)) %>%
  group_by(symbol, yea s = seq(-0.1,0.4,0.02),
                     labels = scales::percent) +
  scale_x_continuous(breaks = seq(2009,2018,1)) +
  labs(x = "Year", y = Stocks") +
  ggtitle 
           
拓端tecdat|基于R語言股票市場收益的統計可視化分析原文連結:http://tecdat.cn/?p=16453 原文出處:拓端資料部落公衆号計算多隻股票的收益統計資料
multpl_stock_monthly_returns %>%
  mutate(year = year(date)) %>% 
  ggplot(aes(x = year, y = sd, fill = symbol)) +
  geom_bar(stat = "identity", position = "dodge", width = 0.7) +
  scale_y_continuous(breaks = seq(-0.1,0.4,0.02),
                     labels = scales::p 
  scale_fill_brewer(palette = "Set1",  
           
拓端tecdat|基于R語言股票市場收益的統計可視化分析原文連結:http://tecdat.cn/?p=16453 原文出處:拓端資料部落公衆号計算多隻股票的收益統計資料

計算多隻股票的協方差和相關性

另一個重要的統計計算是股票的相關性和協方差。為了計算這些統計資料,我們需要修改資料。我們将其轉換為xts對象。

協方差表

#計算協方差

  tk_xts(silent = TRUE) %>%
  cov()
           
##               AAPL        AMZN          FB         GOOG          NFLX
## AAPL  5.254736e-03 0.001488462 0.000699818 0.0007420307 -1.528193e-05
## AMZN  1.488462e-03 0.006399439 0.001418561 0.0028531565  4.754894e-03
## FB    6.998180e-04 0.001418561 0.008091594 0.0013566480  3.458228e-03
## GOOG  7.420307e-04 0.002853157 0.001356648 0.0032287790  3.529245e-03
## NFLX -1.528193e-05 0.004754894 0.003458228 0.0035292451  2.464202e-02
           

相關表

# 計算相關系數

 %>%
  tk_xts(silent = TRUE) %>%
  cor() 
           
##              AAPL      AMZN        FB      GOOG         NFLX
## AAPL  1.000000000 0.2566795 0.1073230 0.1801471 -0.001342964
## AMZN  0.256679539 1.0000000 0.1971334 0.6276759  0.378644485
## FB    0.107322952 0.1971334 1.0000000 0.2654184  0.244905437
## GOOG  0.180147089 0.6276759 0.2654184 1.0000000  0.395662114
## NFLX -0.001342964 0.3786445 0.2449054 0.3956621  1.000000000
           

我們可以使用

corrplot()

 包來繪制相關矩陣圖。

## corrplot 0.84 loaded
           
cor() %>%
  corrplot()
           
拓端tecdat|基于R語言股票市場收益的統計可視化分析原文連結:http://tecdat.cn/?p=16453 原文出處:拓端資料部落公衆号計算多隻股票的收益統計資料
拓端tecdat|基于R語言股票市場收益的統計可視化分析原文連結:http://tecdat.cn/?p=16453 原文出處:拓端資料部落公衆号計算多隻股票的收益統計資料

最受歡迎的見解

1.用機器學習識别不斷變化的股市狀況—隐馬爾科夫模型(HMM)的應用

2.R語言GARCH-DCC模型和DCC(MVT)模組化估計

3.R語言實作 Copula 算法模組化依賴性案例分析報告

4.R語言COPULAS和金融時間序列資料VaR分析

5.R語言多元COPULA GARCH 模型時間序列預測

6.用R語言實作神經網絡預測股票執行個體

7.r語言預測波動率的實作:ARCH模型與HAR-RV模型

8.R語言如何做馬爾科夫轉換模型markov switching model

9.matlab使用Copula仿真優化市場風險

繼續閱讀