乐趣区

关于数据挖掘:基于R语言股票市场收益的统计可视化分析

原文链接: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()

计算单个股票的每日和每月收益率

一旦咱们从 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() +

查看 Netflix 的每日收益图表后,咱们能够得出结论,收益稳定很大,并且股票在任何一天都能够稳定 +/- 5%。为了理解收益率的散布,咱们能够绘制直方图。

netflix\_daily\_returns %>%

  ggplot(aes(x = nflx_returns)) +

  geom_histogram(binwidth = 0.015) +

  theme_classic() +

接下来,咱们能够绘制自 2009 年以来 Netflix 的月度收益率。咱们应用条形图来绘制数据。

# 绘制 Netflix 的月度收益图表。应用条形图





  ggplot(aes(x = date, y = nflx_returns)) +

  geom_bar(stat = "identity") +

  theme_classic() +

计算 Netflix 股票的累计收益

绘制每日和每月收益对理解投资的每日和每月稳定很有用。要计算投资的增长,换句话说,计算投资的总收益,咱们须要计算该投资的累积收益。要计算累积收益,咱们将应用  cumprod()  函数。

 

  mutate(cr = cumprod(1 + nflx_returns)) %>%      # 应用 cumprod 函数
 

  ggplot(aes(x = date, y = cumulative_returns)) +

  geom_line() +

  theme_classic() +

该图表显示了自 2009 年以来 Netflix 的累计收益。有了预先剖析的力量,自 2009 年以来,_能够_用 1 美元的投资赚取 85 美元。但据咱们所知,说起来容易做起来难。在 10 年左右的工夫里,在 Qwickster 惨败期间投资损失了其价值的 50%。在这段期间内,很少有投资者可能保持投资。

  ggplot(aes(x = date, y = cumulative_returns)) +

  geom_line() +

  theme_classic() +

咱们能够直观地看到,月收益表比日图表要平滑得多。

多只股票

下载多只股票的股票市场数据。

# 将咱们的股票代码设置为变量



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



# 下载股价数据



multpl\_stocks <- tq\_get(tickers,

绘制多只股票的股价图

接下来,咱们将绘制多只股票的价格图表

multpl_stocks %>%

  ggplot(aes(x = date, y = adjusted,

这不是咱们预期的后果。因为这些股票具备微小的价格差别(FB 低于 165,AMZN 高于 1950),因而它们的规模不同。咱们能够通过按各自的 y 比例绘制股票来克服此问题。

 

  facet\_wrap(~symbol, scales = "free\_y") +  # facet_wrap 用于制作不同的页面

  theme_classic() +

计算多只股票的收益

计算多只股票的收益与单只股票一样容易。这里只须要传递一个附加的参数。咱们须要应用参数  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) +

multpl\_stock\_monthly_returns %>%

  ggplot(aes(x = date, y = return 

  scale\_fill\_brewer(palette = "Set1",   # 咱们会给他们不同的色彩,而不是彩色

在 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"

毫不奇怪,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() +

咱们能够看到,自 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

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",

计算多只股票的协方差和相关性

另一个重要的统计计算是股票的相关性和协方差。为了计算这些统计数据,咱们须要批改数据。咱们将其转换为 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()


最受欢迎的见解

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 仿真优化市场危险

退出移动版