iyeung144.github.io

My Github Pages

View My GitHub Profile

About

CV

Blog

14 March 2022

Hong Kong Stock 4

by Yeung Ka Ming, CFA

Summary

66 constituent stocks in Hang Seng Index. Stock prices can be downloaded and plot by below.

R Libraries

library(quantmod)
library(tidyverse)
library(ggplot2)

Preparation of data

Direct download by getSymbols

tickers <- c('0001.HK','0002.HK','0003.HK','0005.HK',
             '0006.HK','0011.HK','0012.HK','0016.HK',
             '0017.HK','0027.HK','0066.HK','0101.HK',
             '0175.HK','0241.HK','0267.HK','0288.HK',
             '0291.HK','0386.HK','0388.HK','0669.HK',
             '0688.HK','0700.HK','0762.HK','0823.HK',
             '0857.HK','0868.HK','0883.HK','0939.HK',
             '0941.HK','0960.HK','0968.HK','0992.HK',
             '1038.HK','1044.HK','1093.HK','1109.HK',
             '1113.HK','1177.HK','1211.HK','1299.HK',
             '1398.HK','1810.HK','1876.HK','1928.HK',
             '1997.HK','2007.HK','2018.HK','2020.HK',
             '2269.HK','2313.HK','2318.HK','2319.HK',
             '2331.HK','2382.HK','2388.HK','2628.HK',
             '2688.HK','3690.HK','3968.HK','3988.HK',
             '6098.HK','6862.HK','9618.HK','9633.HK',
             '9988.HK','9999.HK')
hkport <- new.env()
getSymbols(tickers, 
           env=hkport, 
           src = "yahoo",
           index.class = "POSIXct",
           from = "2022-01-01")
##  [1] "0001.HK" "0002.HK" "0003.HK" "0005.HK" "0006.HK" "0011.HK" "0012.HK" "0016.HK" "0017.HK" "0027.HK" "0066.HK" "0101.HK" "0175.HK" "0241.HK"
## [15] "0267.HK" "0288.HK" "0291.HK" "0386.HK" "0388.HK" "0669.HK" "0688.HK" "0700.HK" "0762.HK" "0823.HK" "0857.HK" "0868.HK" "0883.HK" "0939.HK"
## [29] "0941.HK" "0960.HK" "0968.HK" "0992.HK" "1038.HK" "1044.HK" "1093.HK" "1109.HK" "1113.HK" "1177.HK" "1211.HK" "1299.HK" "1398.HK" "1810.HK"
## [43] "1876.HK" "1928.HK" "1997.HK" "2007.HK" "2018.HK" "2020.HK" "2269.HK" "2313.HK" "2318.HK" "2319.HK" "2331.HK" "2382.HK" "2388.HK" "2628.HK"
## [57] "2688.HK" "3690.HK" "3968.HK" "3988.HK" "6098.HK" "6862.HK" "9618.HK" "9633.HK" "9988.HK" "9999.HK"
# auto.assign is FALSE, so an environment is used here. 
# Unlike US stocks, # the tickers in HK stock market is 
# by number, which cannot be the variable
# name in R. Further fine tune in next step.

OHLC price

head(Ad(hkport$`0001.HK`))
##            0001.HK.Adjusted
## 2022-01-03            51.30
## 2022-01-04            51.40
## 2022-01-05            52.55
## 2022-01-06            52.55
## 2022-01-07            52.95
## 2022-01-10            54.05
head(Cl(hkport$`0001.HK`))
##            0001.HK.Close
## 2022-01-03         51.30
## 2022-01-04         51.40
## 2022-01-05         52.55
## 2022-01-06         52.55
## 2022-01-07         52.95
## 2022-01-10         54.05
head(Op(hkport$`0001.HK`))
##            0001.HK.Open
## 2022-01-03        50.95
## 2022-01-04        51.60
## 2022-01-05        51.75
## 2022-01-06        52.65
## 2022-01-07        52.55
## 2022-01-10        53.25
head(Hi(hkport$`0001.HK`))
##            0001.HK.High
## 2022-01-03        51.70
## 2022-01-04        51.70
## 2022-01-05        52.95
## 2022-01-06        52.80
## 2022-01-07        53.00
## 2022-01-10        54.10
head(Lo(hkport$`0001.HK`))
##            0001.HK.Low
## 2022-01-03       50.50
## 2022-01-04       51.10
## 2022-01-05       51.30
## 2022-01-06       51.85
## 2022-01-07       52.15
## 2022-01-10       52.80

Prepare a dataframe with all adjusted close prices

Prepare dataframe

## To get all the adjusted close prices
## into a single xts object
ad.HSI.xts <- Reduce(merge,eapply(hkport, Ad))
colnames(ad.HSI.xts) <- sub('X','',colnames(ad.HSI.xts))

ad.HSI.tbl <- as_tibble(fortify(ad.HSI.xts))
ad.HSI.long.tbl <- ad.HSI.tbl %>% 
  pivot_longer(!Index,
               names_to = "tickers", 
               values_to = "Adjusted.Close")
ad.HSI.long.tbl
## # A tibble: 3,102 x 3
##    Index               tickers          Adjusted.Close
##    <dttm>              <chr>                     <dbl>
##  1 2022-01-03 00:00:00 6098.HK.Adjusted          44.6 
##  2 2022-01-03 00:00:00 3988.HK.Adjusted           2.83
##  3 2022-01-03 00:00:00 3690.HK.Adjusted         223.  
##  4 2022-01-03 00:00:00 2628.HK.Adjusted          13   
##  5 2022-01-03 00:00:00 0175.HK.Adjusted          21.3 
##  6 2022-01-03 00:00:00 0012.HK.Adjusted          33.2 
##  7 2022-01-03 00:00:00 0003.HK.Adjusted          12.3 
##  8 2022-01-03 00:00:00 0823.HK.Adjusted          68.7 
##  9 2022-01-03 00:00:00 0968.HK.Adjusted          13.2 
## 10 2022-01-03 00:00:00 0288.HK.Adjusted           4.93
## # ... with 3,092 more rows

Plot graph

p3 <- ggplot(ad.HSI.long.tbl,
            aes(x = Index, 
                y = Adjusted.Close,
                color=tickers))
p3 + 
  geom_line(size = 1) + 
  xlab("Date") + 
  ylab("Adjusted Close")

tags: Porfolio