1 Giới thiệu về VNDS package

VNDS là một package đầu tiên trên R cho phép bạn lấy dữ liệu giá chứng khoán của tất cả các mã niêm yết trên sàn HNX, HOSE, UPCOM của thị trường chứng khoán Việt Nam. Mục đích của package này là cung cấp một công cụ khai thác dữ liệu chứng khoán cho những nhà phân tích tài chính bằng ngôn ngữ R bao gồm giá cả, thông tin tài chính và hoạt động kinh doanh của các công ty. Và không chỉ dừng ở đó, package hướng tới việc cung cấp các biểu đồ phân tích, thống kê mô tả về phân phối, lợi tức của chứng khoán và đưa ra các mô hình tối ưu hóa danh mục, mô hình rủi ro thị trường.

2 Các hàm thông tin tài chính

Trong VNDS package có 2 hàm chính để lấy thông tin tài chính gồm tq_balancesheet() (lấy báo cáo tài chính) và tq_business_report() (lấy báo cáo kết quả kinh doanh). Các hàm số này cho phép lấy thông tin của 1 hoặc nhiều mã cùng lúc và lưu dưới dạng list. Tên của các chỉ tiêu tài chính sẽ bị lỗi font tiếng Việt nếu chúng ta sử dụng hệ điều hành window (đây là lỗi mặc định của R và chưa tìm được cách khắc phục), khi chuyển sang ubuntu sẽ không còn gặp lỗi.

2.1 Cú pháp

tq_balancesheet(symbols, endYear, n, period)
tq_business_report(symbols, endYear, n, period)

2.2 Giải thích các argument

symbol: Là một vector character gồm các mã chứng khoán cần lấy.
endYear: Định dạng character dạng yyyy, là năm tài chính cuối cùng để lấy dữ liệu.
n: Định dạng numeric là số chu kì dữ liệu cần lấy. Tối đa là 5.
period: Định dạng character gồm các lựa chọn ‘Q1’,‘Q2’,‘Q3’,‘Q4’ và ‘IN_YEAR’. Trong đó ‘Q1’,‘Q2’,‘Q3’,‘Q4’ qui định chu kì dữ liệu cần lấy theo quí, ‘IN_YEAR’ là chu kì lấy dữ liệu theo năm. Kết hợp period với endYear ta sẽ thu được thời điểm kết thúc lấy dữ liệu. Chẳng hạn như endYear = ‘2018’ và period = ‘Q1’, n = 5 thì sẽ lấy dữ liệu tổng cộng 5 quí liên tiếp. Từ 5 quí trước đến quí 1 năm 2018.

library(VNDS)
#2.Lấy bảng cân đối kế toán
#Cho 5 năm tài chính gần nhất kể từ 2017
(VNDBalanceSheet <- tq_balancesheet(symbol = "VND",
                                   endYear = 2017,
                                   n = 5,
                                   period = "IN_YEAR"))
#Cho 5 quí gần nhất kể từ Q4/2017
VNDBalanceSheet <- tq_balancesheet(symbol = "VND",
                                   endYear = 2017,
                                   n = 5,
                                   period = "Q4")

#3.Lấy báo cáo hoạt động kinh doanh
#Tương tự như getBalanceSheetReport
(VNDBusinessReport <- tq_business_report(symbol = "VND", 
                                        endYear = 2017,
                                        n = 5, 
                                        period = "Q1"))
VNDBusinessReport <- tq_business_report(symbol = "VND",
                                        endYear = 2017,
                                        n = 5,
                                        period = "IN_YEAR")

#Lấy báo cáo kết quả kinh doanh cho nhiều mã:
lsBusinessReport <- tq_business_report(symbol = c('VND','VPB'),
                   endYear = '2017',
                   n = 5,
                   period = 'IN_YEAR')

#Kiểm tra cấu trúc list trả về
str(lsBusinessReport)
## List of 2
##  $ VND:'data.frame': 23 obs. of  8 variables:
##   ..$ symBols     : chr [1:23] "VND" "VND" "VND" "VND" ...
##   ..$ itemName    : chr [1:23] "T<U+1ED5>ng doanh thu ho<U+1EA1>t d<U+1ED9>ng kinh doanh" "Lãi t<U+1EEB> các tài s<U+1EA3>n tài chính ghi nh<U+1EAD>n thông qua lãi/l<U+1ED7> ( FVTPL)" "Lãi bán các tài s<U+1EA3>n tài chính PVTPL" "Chênh l<U+1EC7>ch tang dánh giá l<U+1EA1>i các TSTC thông qua lãi/l<U+1ED7>" ...
##   ..$ currencyCode: chr [1:23] "VND" "VND" "VND" "VND" ...
##   ..$ X2017       : num [1:23] 1240432 302815 223245 33777 45794 ...
##   ..$ X2016       : num [1:23] 731392 219871 54255 0 165615 ...
##   ..$ X2015       : num [1:23] 534123 0 0 0 0 ...
##   ..$ X2014       : num [1:23] 435290 0 0 0 0 ...
##   ..$ X2013       : num [1:23] 262619 0 0 0 0 ...
##  $ VPB:'data.frame': 23 obs. of  8 variables:
##   ..$ symBols     : chr [1:23] "VPB" "VPB" "VPB" "VPB" ...
##   ..$ itemName    : chr [1:23] "Thu nh<U+1EAD>p lãi và các kho<U+1EA3>n thu nh<U+1EAD>p tuong t<U+1EF1>" "Chi phí lãi và các kho<U+1EA3>n chi phí tuong t<U+1EF1>" "Thu nh<U+1EAD>p lãi thu<U+1EA7>n" "Thu nh<U+1EAD>p t<U+1EEB> ho<U+1EA1>t d<U+1ED9>ng d<U+1ECB>ch v<U+1EE5>" ...
##   ..$ currencyCode: chr [1:23] "VND" "VND" "VND" "VND" ...
##   ..$ X2017       : num [1:23] 34133371 13518945 20614426 3210071 1748527 ...
##   ..$ X2016       : num [1:23] 25631116 10463257 15167859 2114834 1261908 ...
##   ..$ X2015       : num [1:23] 18758801 8405364 10353437 1597313 712646 ...
##   ..$ X2014       : num [1:23] 12404218 7113131 5291087 959852 352700 ...
##   ..$ X2013       : num [1:23] 11194255 7042590 4151665 811131 276385 ...
#Lấy báo cáo tài chính của VND từ list trả về
lsBusinessReport$VND
#Lấy báo cáo tài chính của VPB từ list trả về
lsBusinessReport$VPB
#Lấy báo cáo tài chính cho nhiều mã sử dụng hàm tq_balancesheet hoàn toàn tương tự.

3 Các hàm lấy giá

VNDS cho phép khai thác các thông tin về giá của các nguồn như Vndirect và CafeF thông qua các lệnh tq_get_vnd(), tq_get_cafef(). Kết quả trả về là một định dạng data.frame chứa các trường dữ liệu thuộc class OHLCV của quantmod. Trong đó có những nhóm hàm chính sau:

3.1 Nhóm hàm lấy nhiều mã

3.1.1 Nhóm hàm sử dụng phép gán

  • tq_get(): Lấy thông tin của một hoặc nhiều mã chứng khoán. Định dạng trả về là tibble hoặc xts object tùy vào khai báo trong argument return.type. Trong trường hợp lấy nhiều mã, kết quả trả về có thể là dạng bảng stack table với các mã được phân biệt bởi trường symbol hoặc dạng list chứa từng mã riêng rẽ. Nếu lấy trên 10 mã khuyến nghị sử dụng tq_bigquerry() để không bị treo lệnh.

  • tq_get_xts(): Tương tự như tq_get() nhưng luôn mặc định trả về định dạng xts.

3.1.2 Hàm đặc biệt tq_bigquery()

  • tq_bigquery(): Thông thường nếu lấy dữ liệu của hàng chục đến hàng trăm mã chứng khoán sẽ bị lỗi do pending lệnh trên server quá lâu. tq_bigquery() sẽ support chúng ta thực hiện lấy nhiều mã mà không bị dán đoạn connection thông qua cơ chế gọi nhiều lần và set time out cho các lần post request. Số mã lấy về trong 1 lần gọi được qui định qua argument n và thời gian chờ là argument timeout.

3.1.3 Hàm xuất dữ liệu theo quantmod

  • tq_getSymbols(): Tương tự như tq_get() nhưng không cần phép gán. Chẳng hạn như theo cách lấy thông thường ta phải gán VND <- tq_get('VND'). Tuy nhiên sử dụng tq_getSymbols('VND') trên Global Enviroment sẽ tự xuất hiện tibble object VND.

3.2 Nhóm hàm lấy 1 mã

  • tq_get_vnd(): Lấy 1 mã từ thời gian bắt đầu (from) đến kết thúc (to) từ nguồn VND. Định dạng trả về là tibble object.

  • tq_get_cafef(): Lấy 1 mã từ thời gian bắt đầu (from) đến kết thúc (to) từ nguồn CAFEF. Định dạng trả về là tibble object.

  • tq_get_single(): Là kết hợp của tq_get_vnd()tq_get_cafef(). Qui định nguồn dữ liệu cần lấy thông qua argument src và định dạng trả về thông qua return.type (‘tibble’ hoặc ‘xts’).

3.3 Cú pháp

tq_bigquery(symbols,from,to,src="VND",minimal = TRUE,stack = FALSE,return.type = 'tibble',n=5,timeout=2,...)
tq_get(symbols,from,to,src="VND",minimal = TRUE,stack = FALSE,return.type='tibble',...)
tq_get_xts(symbols,from,to,src="VND",minimal = TRUE,stack = FALSE,...)
tq_getSymbols(symbols,from,to,src="VND",minimal = TRUE,stack = FALSE,return.type='tibble',...)
tq_get_single(symbol,from,to,src="VND",minimal = TRUE,stack = FALSE,return.type='tibble',...)
tq_get_vnd(symbol, from, to, minimal = TRUE,...)
tq_get_cafef(symbol, from, to, minimal = TRUE,...)

3.4 Giải thích các argument

symbol: Định dạng character, là mã chứng khoán cần lấy.

symbols: Định dạng vector character, là các mã chứng khoán cần lấy.

from: Định dạng character dạng yyyy-mm-dd, là ngày bắt đầu lấy giá. Mặc định là ngày hiện tại.

to: Định dạng character dạng yyyy-mm-dd, là ngày kết thúc lấy giá. Mặc định là ngày cách ngày hiện tại 1 năm.

src: Nguồn cần lấy, có 2 lựa chọn gồm ‘VND’ và ‘CAFEF’. Mặc định là VND.

minimal: Giá trị logical mặc định là TRUE (lấy toàn bộ trường). Nếu FALSE sẽ chỉ lấy OLHCV.

stack: Đối với trường hợp lấy nhiều mã. Nếu TRUE trả về dạng list. Nếu FALSE (mặc định) trả về một tibble object dạng stack được phân biệt dữ liệu các mã qua trường symbol.

return.type: Lựa chọn định dạng trả về của từng mã chứng khoán là tibble object hay xts object. Mặc định là tibble object.

n: Định dạng numeric. Được sử dụng riêng cho hàm tq_bigquery() qui định số mã trong 1 lần request. Mặc định là 5.

timeout: Định dạng numeric. Được sử dụng riêng cho hàm tq_bigquery() qui định thời gian chờ mỗi lần request. Mặc định là 2.

#lấy giá chứng khoán full các trường
(VND <- tq_get(symbol = "VND",
              from = "2017-01-01",
              to = "2018-01-01", 
              src = "VND",
              minimal = FALSE))
## #VND from 2017-01-01 to 2018-01-01 already cloned
#lấy các trường chính gồm open, high, low, close, volume, adjust price và date (bỏ argument minimal)
(VND <- tq_get(symbol = "VND",
              from = "2017-01-01",
              to = "2018-01-01", 
              src = "VND"))
## #VND from 2017-01-01 to 2018-01-01 already cloned
#Khi không truyền from, to sẽ mặc định lấy dữ liệu 1 năm gần nhất.
(VND <- tq_get(symbol = "VND"))
## #VND from 2017-05-27 to 2018-05-27 already cloned
#Khi muốn định dạng trả về là xts 
(VND <- tq_get(symbol = "VND", from='2018-04-01',to='2018-05-11',return.type = 'xts'))
## #VND from 2018-04-01 to 2018-05-11 already cloned
##            date         open    high    low     close   volume    adjusted
## 2018-04-02 "2018-04-02" "29.10" "29.80" "29.10" "29.55" "2141980" "28.506"
## 2018-04-03 "2018-04-03" "29.55" "31.55" "29.55" "31.30" "2845070" "30.194"
## 2018-04-04 "2018-04-04" "31.80" "32.00" "30.55" "30.90" "2649810" "29.808"
## 2018-04-05 "2018-04-05" "30.90" "31.20" "30.40" "31.20" "2145760" "30.098"
## 2018-04-06 "2018-04-06" "31.20" "32.75" "31.00" "32.55" "2301660" "31.400"
## 2018-04-09 "2018-04-09" "33.00" "34.00" "32.50" "34.00" "2422270" "32.799"
## 2018-04-10 "2018-04-10" "34.40" "34.40" "33.55" "33.65" "2593060" "32.461"
## 2018-04-11 "2018-04-11" "33.70" "34.10" "32.40" "32.80" "2303750" "31.641"
## 2018-04-12 "2018-04-12" "32.50" "33.50" "31.60" "33.50" "1522570" "32.316"
## 2018-04-13 "2018-04-13" "33.95" "34.20" "32.70" "33.20" "1210560" "32.027"
## 2018-04-16 "2018-04-16" "32.80" "33.50" "32.00" "33.00" " 942970" "31.834"
## 2018-04-17 "2018-04-17" "33.00" "33.50" "32.60" "33.10" "1307860" "31.930"
## 2018-04-18 "2018-04-18" "33.10" "33.65" "32.30" "32.30" "1603560" "31.159"
## 2018-04-19 "2018-04-19" "32.10" "32.30" "30.50" "31.60" "2133990" "30.483"
## 2018-04-20 "2018-04-20" "31.20" "31.90" "30.60" "31.60" " 887180" "30.483"
## 2018-04-23 "2018-04-23" "31.50" "31.50" "29.40" "29.40" "2464590" "28.361"
## 2018-04-24 "2018-04-24" "28.25" "28.95" "27.35" "27.35" "2445240" "26.384"
## 2018-04-26 "2018-04-26" "27.00" "27.10" "25.45" "25.45" "2334780" "24.551"
## 2018-04-27 "2018-04-27" "24.50" "27.20" "24.50" "27.20" "3198625" "26.239"
## 2018-05-02 "2018-05-02" "27.50" "27.90" "25.80" "26.20" "1353448" "25.274"
## 2018-05-03 "2018-05-03" "26.00" "27.15" "25.30" "27.10" "1389550" "26.142"
## 2018-05-04 "2018-05-04" "27.50" "27.70" "26.70" "26.80" "1005460" "25.853"
## 2018-05-07 "2018-05-07" "27.10" "28.45" "26.10" "28.45" "1104670" "27.445"
## 2018-05-08 "2018-05-08" "28.45" "28.70" "27.80" "28.30" "1088440" "27.300"
## 2018-05-09 "2018-05-09" "27.50" "27.50" "25.40" "25.40" "3388590" "25.400"
## 2018-05-10 "2018-05-10" "23.65" "25.00" "23.65" "23.65" "7057690" "23.650"
## 2018-05-11 "2018-05-11" "22.00" "25.30" "22.00" "25.30" "2888280" "25.300"
#Hoặc có thể sử dụng tq_get_xts(symbol='VND') hàm này luốn mặc định trả về định dạng xts

#Lấy về nhiều mã chứng khoán. Mặc định sẽ trả về 1 list:
(list_stocks <- tq_get(symbol = c("VND","SSI")))
## #VND from 2017-05-27 to 2018-05-27 already cloned 
## #SSI from 2017-05-27 to 2018-05-27 already cloned
## $VND
## # A tibble: 244 x 7
##    date        open  high   low close  volume adjusted
##    <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 2018-05-25  20.1  20.4  19.1  19.2 1395460     19.2
##  2 2018-05-24  21.0  21.4  20.1  20.5 1553540     20.5
##  3 2018-05-23  20.0  21.4  19.0  21.4 2054330     21.4
##  4 2018-05-22  21.0  21.4  20.0  20.0 2487610     20.0
##  5 2018-05-21  22.5  22.5  21.5  21.5  862490     21.5
##  6 2018-05-18  22.5  22.8  21.6  22.2 1261480     22.2
##  7 2018-05-17  23.0  23.2  22.8  22.9 1451740     22.9
##  8 2018-05-16  22.0  22.8  21.0  22.6 1672930     22.6
##  9 2018-05-15  23.1  23.4  22.1  22.1 3651020     22.1
## 10 2018-05-14  24.0  24.9  23.6  23.6 2430770     23.6
## # ... with 234 more rows
## 
## $SSI
## # A tibble: 248 x 7
##    date        open  high   low close  volume adjusted
##    <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 2018-05-25  30.4  31.2  29.5  29.5 4587060     29.5
##  2 2018-05-24  31.0  31.4  30.4  30.4 3866910     30.4
##  3 2018-05-23  30.0  31.2  29.8  31.2 6944590     31.2
##  4 2018-05-22  31.0  32.2  29.8  30.0 8217100     30.0
##  5 2018-05-21  33.3  33.5  32.0  32.0 4716910     32.0
##  6 2018-05-18  34.0  34.2  32.0  33.0 4498370     33.0
##  7 2018-05-17  34.6  34.9  33.6  33.6 4449330     33.6
##  8 2018-05-16  35.1  35.5  34.2  34.5 3220940     34.5
##  9 2018-05-15  35.3  36.0  35.1  35.5 3927810     35.5
## 10 2018-05-14  35.0  35.4  34.4  35.0 3544440     35.0
## # ... with 238 more rows
#Các bảng trong list trả về sẽ có định dạng là tibble objects. Do đó muốn trả về dạng xts thì cần thêm return.type = 'xts'
(list_stocks <- tq_get(symbol = c("VND","SSI"), return.type='xts'))
## #VND from 2017-05-27 to 2018-05-27 already cloned 
## #SSI from 2017-05-27 to 2018-05-27 already cloned
## $VND
##            date         open    high    low     close   volume    adjusted
## 2017-05-29 "2017-05-29" "19.60" "19.80" "19.30" "19.60" "1274174" "14.588"
## 2017-05-30 "2017-05-30" "19.50" "19.70" "18.70" "19.20" "1541015" "14.290"
## 2017-05-31 "2017-05-31" "19.10" "19.10" "18.60" "18.80" "1196663" "13.992"
## 2017-06-01 "2017-06-01" "18.70" "19.00" "18.70" "18.90" " 167488" "14.067"
## 2017-06-02 "2017-06-02" "18.90" "19.50" "18.70" "19.20" " 411631" "14.290"
## 2017-06-05 "2017-06-05" "19.40" "19.70" "19.10" "19.20" " 671582" "14.290"
## 2017-06-06 "2017-06-06" "19.20" "19.40" "19.10" "19.40" " 174645" "14.439"
## 2017-06-07 "2017-06-07" "19.40" "21.10" "19.40" "21.00" "2332950" "15.629"
## 2017-06-08 "2017-06-08" "21.30" "21.30" "20.50" "20.70" " 467477" "15.407"
## 2017-06-09 "2017-06-09" "20.60" "21.40" "20.60" "20.80" " 726174" "15.481"
## 2017-06-12 "2017-06-12" "20.70" "21.50" "20.70" "21.20" " 888165" "15.778"
## 2017-06-13 "2017-06-13" "21.40" "21.80" "21.20" "21.50" " 656682" "16.002"
## 2017-06-14 "2017-06-14" "21.50" "21.80" "21.20" "21.50" " 729931" "16.002"
## 2017-06-15 "2017-06-15" "21.40" "21.60" "21.10" "21.20" " 456930" "15.778"
## 2017-06-16 "2017-06-16" "20.60" "21.30" "20.60" "21.30" " 602763" "15.852"
## 2017-06-19 "2017-06-19" "21.50" "21.50" "21.00" "21.30" " 857156" "15.852"
## 2017-06-20 "2017-06-20" "21.30" "21.90" "21.20" "21.50" " 610888" "16.002"
## 2017-06-21 "2017-06-21" "21.40" "21.50" "21.10" "21.40" " 516247" "15.928"
## 2017-06-22 "2017-06-22" "21.50" "22.30" "21.30" "21.90" " 716804" "16.299"
## 2017-06-23 "2017-06-23" "21.90" "22.30" "20.90" "21.70" " 473880" "16.150"
## 2017-06-26 "2017-06-26" "21.40" "21.90" "21.40" "21.70" " 241910" "16.150"
## 2017-06-27 "2017-06-27" "22.00" "22.00" "21.30" "21.40" " 389200" "15.928"
## 2017-06-28 "2017-06-28" "21.50" "21.50" "21.10" "21.40" " 365219" "15.928"
## 2017-06-29 "2017-06-29" "21.40" "21.80" "21.40" "21.60" " 336620" "16.076"
## 2017-06-30 "2017-06-30" "21.70" "21.70" "21.50" "21.60" " 252551" "16.076"
## 2017-07-03 "2017-07-03" "21.80" "22.80" "21.80" "22.60" " 745503" "16.820"
## 2017-07-04 "2017-07-04" "23.60" "23.60" "22.70" "23.00" " 593165" "17.118"
## 2017-07-05 "2017-07-05" "23.00" "23.40" "22.80" "23.40" " 426704" "17.416"
## 2017-07-06 "2017-07-06" "23.40" "23.80" "23.00" "23.30" " 741615" "17.342"
## 2017-07-07 "2017-07-07" "23.30" "23.40" "21.80" "22.00" "1406686" "16.374"
## 2017-07-10 "2017-07-10" "22.10" "22.50" "20.70" "21.40" " 987801" "15.928"
## 2017-07-11 "2017-07-11" "19.30" "21.60" "19.30" "21.60" " 592222" "16.076"
## 2017-07-12 "2017-07-12" "21.40" "22.30" "21.40" "22.20" " 625885" "16.523"
## 2017-07-13 "2017-07-13" "22.30" "22.30" "22.00" "22.30" " 228742" "16.597"
## 2017-07-14 "2017-07-14" "22.50" "22.60" "22.00" "22.20" " 233200" "16.523"
## 2017-07-17 "2017-07-17" "22.20" "22.20" "21.00" "21.00" " 603166" "15.629"
## 2017-07-18 "2017-07-18" "21.00" "21.00" "20.10" "21.00" " 711950" "15.629"
## 2017-07-19 "2017-07-19" "21.00" "21.90" "21.00" "21.30" " 739415" "15.852"
## 2017-07-20 "2017-07-20" "21.30" "21.40" "20.80" "21.40" " 386685" "15.928"
## 2017-07-21 "2017-07-21" "21.30" "21.60" "21.20" "21.40" " 409975" "15.928"
## 2017-07-24 "2017-07-24" "21.30" "21.40" "21.10" "21.20" " 197652" "15.778"
## 2017-07-25 "2017-07-25" "21.20" "21.90" "21.20" "21.90" " 366404" "16.299"
## 2017-07-26 "2017-07-26" "22.50" "22.50" "21.90" "22.40" " 266256" "16.671"
## 2017-07-27 "2017-07-27" "22.40" "22.40" "22.10" "22.20" " 307030" "16.523"
## 2017-07-28 "2017-07-28" "22.10" "22.60" "22.10" "22.50" " 258859" "16.746"
## 2017-07-31 "2017-07-31" "22.50" "22.70" "22.30" "22.70" " 334408" "16.895"
## 2017-08-01 "2017-08-01" "22.60" "22.90" "22.60" "22.70" " 279993" "16.895"
## 2017-08-02 "2017-08-02" "22.70" "22.90" "22.50" "22.90" " 409162" "17.044"
## 2017-08-03 "2017-08-03" "23.00" "24.00" "22.90" "24.00" " 583335" "17.863"
## 2017-08-04 "2017-08-04" "24.10" "24.90" "24.00" "24.90" " 878978" "18.532"
## 2017-08-07 "2017-08-07" "25.00" "25.60" "25.00" "25.10" " 602812" "18.681"
## 2017-08-08 "2017-08-08" "25.10" "25.30" "24.20" "24.40" " 598843" "18.160"
## 2017-08-09 "2017-08-09" "24.40" "24.80" "23.20" "23.90" " 598558" "17.787"
## 2017-08-10 "2017-08-10" "22.70" "24.00" "22.70" "24.00" " 519830" "17.863"
## 2017-08-11 "2017-08-11" "24.00" "24.90" "24.00" "24.90" " 571853" "18.532"
## 2017-08-18 "2017-08-18" "24.40" "24.40" "22.70" "23.40" " 974820" "17.416"
## 2017-08-21 "2017-08-21" "23.60" "23.60" "22.70" "22.95" " 184370" "17.080"
## 2017-08-22 "2017-08-22" "22.10" "22.50" "21.35" "21.35" "1250570" "15.890"
## 2017-08-23 "2017-08-23" "21.00" "21.30" "20.50" "20.95" " 651630" "15.592"
## 2017-08-24 "2017-08-24" "20.80" "21.40" "20.80" "21.00" " 434630" "15.629"
## 2017-08-25 "2017-08-25" "21.00" "21.20" "20.30" "20.45" " 465380" "15.220"
## 2017-08-28 "2017-08-28" "20.45" "21.00" "20.20" "21.00" "1872220" "15.629"
## 2017-08-29 "2017-08-29" "21.35" "21.35" "20.65" "20.90" " 731040" "15.555"
## 2017-08-30 "2017-08-30" "20.70" "20.85" "20.50" "20.70" " 659110" "15.407"
## 2017-08-31 "2017-08-31" "20.70" "21.05" "20.70" "20.75" "1158400" "15.443"
## 2017-09-01 "2017-09-01" "20.70" "20.95" "20.70" "20.95" " 651180" "15.592"
## 2017-09-05 "2017-09-05" "20.95" "21.40" "20.75" "21.40" "1087850" "15.928"
## 2017-09-06 "2017-09-06" "21.40" "21.50" "21.05" "21.40" " 519460" "15.928"
## 2017-09-07 "2017-09-07" "21.40" "21.70" "21.15" "21.35" " 662990" "15.890"
## 2017-09-08 "2017-09-08" "21.30" "21.45" "20.90" "21.10" " 799900" "15.704"
## 2017-09-11 "2017-09-11" "21.10" "21.10" "20.80" "20.90" "1069340" "15.555"
## 2017-09-12 "2017-09-12" "20.80" "21.00" "20.80" "21.00" " 660860" "15.629"
## 2017-09-13 "2017-09-13" "21.00" "21.95" "21.00" "21.90" "3884400" "16.299"
## 2017-09-14 "2017-09-14" "21.85" "22.40" "21.85" "22.40" "2447850" "16.671"
## 2017-09-15 "2017-09-15" "22.45" "22.45" "21.95" "22.10" "1081030" "16.448"
## 2017-09-18 "2017-09-18" "22.30" "22.40" "21.80" "22.15" "1285110" "16.485"
## 2017-09-19 "2017-09-19" "22.00" "22.20" "21.80" "22.00" " 836960" "16.374"
## 2017-09-20 "2017-09-20" "21.90" "22.00" "21.65" "21.75" " 375240" "16.188"
## 2017-09-21 "2017-09-21" "21.75" "22.30" "21.70" "21.95" " 664220" "16.337"
## 2017-09-22 "2017-09-22" "22.00" "22.00" "21.80" "21.90" " 457490" "16.299"
## 2017-09-25 "2017-09-25" "21.80" "21.90" "21.50" "21.50" " 510810" "16.002"
## 2017-09-26 "2017-09-26" "21.40" "21.70" "21.35" "21.50" " 417760" "16.002"
## 2017-09-27 "2017-09-27" "21.60" "21.85" "21.45" "21.60" " 328060" "16.076"
## 2017-09-28 "2017-09-28" "21.70" "21.75" "21.30" "21.40" " 450830" "15.928"
## 2017-09-29 "2017-09-29" "21.60" "21.60" "21.20" "21.35" " 414550" "15.890"
## 2017-10-02 "2017-10-02" "21.35" "21.60" "21.00" "21.05" " 347690" "15.667"
## 2017-10-03 "2017-10-03" "21.25" "21.25" "19.70" "20.50" " 574090" "15.257"
## 2017-10-04 "2017-10-04" "20.50" "20.80" "20.40" "20.65" " 214340" "15.369"
## 2017-10-05 "2017-10-05" "21.00" "21.10" "20.65" "20.65" " 306850" "15.369"
## 2017-10-06 "2017-10-06" "20.95" "21.15" "20.85" "20.90" " 433610" "15.555"
## 2017-10-09 "2017-10-09" "21.35" "21.35" "20.95" "21.15" " 423120" "15.741"
## 2017-10-10 "2017-10-10" "21.15" "21.30" "20.90" "21.05" " 371460" "15.667"
## 2017-10-11 "2017-10-11" "21.10" "21.20" "20.90" "20.95" " 413890" "15.592"
## 2017-10-12 "2017-10-12" "21.10" "21.20" "20.95" "20.95" " 359990" "15.592"
## 2017-10-13 "2017-10-13" "20.95" "20.95" "20.75" "20.80" " 205110" "15.481"
## 2017-10-16 "2017-10-16" "20.80" "20.90" "20.35" "20.40" " 513240" "15.183"
## 2017-10-17 "2017-10-17" "20.40" "20.80" "20.40" "20.80" " 220360" "15.481"
## 2017-10-18 "2017-10-18" "21.10" "21.35" "20.90" "20.95" " 749340" "15.592"
## 2017-10-19 "2017-10-19" "20.90" "21.10" "20.70" "20.80" " 176540" "15.481"
## 2017-10-20 "2017-10-20" "20.75" "20.80" "20.50" "20.55" " 260610" "15.295"
## 2017-10-23 "2017-10-23" "20.40" "20.75" "19.80" "20.00" " 455840" "14.885"
## 2017-10-24 "2017-10-24" "20.00" "20.40" "20.00" "20.20" " 332500" "15.034"
## 2017-10-25 "2017-10-25" "20.30" "20.50" "20.30" "20.40" " 380560" "15.183"
## 2017-10-26 "2017-10-26" "20.50" "20.80" "20.00" "20.30" " 322940" "15.109"
## 2017-10-27 "2017-10-27" "20.40" "20.40" "20.15" "20.25" " 286070" "15.071"
## 2017-10-30 "2017-10-30" "20.25" "20.60" "20.20" "20.20" " 374290" "15.034"
## 2017-10-31 "2017-10-31" "20.25" "20.30" "19.40" "19.50" " 387580" "14.513"
## 2017-11-01 "2017-11-01" "19.65" "19.65" "18.20" "19.00" " 633640" "14.141"
## 2017-11-02 "2017-11-02" "18.80" "19.45" "18.60" "18.90" " 365320" "14.067"
## 2017-11-03 "2017-11-03" "19.00" "19.10" "18.70" "19.00" " 282390" "14.141"
## 2017-11-06 "2017-11-06" "19.20" "19.40" "19.00" "19.40" " 302320" "14.439"
## 2017-11-07 "2017-11-07" "19.40" "19.50" "19.10" "19.30" " 185400" "14.364"
## 2017-11-08 "2017-11-08" "19.30" "19.40" "19.00" "19.40" " 293860" "14.439"
## 2017-11-09 "2017-11-09" "19.40" "19.80" "19.20" "19.75" " 423400" "14.700"
## 2017-11-10 "2017-11-10" "19.75" "19.85" "19.60" "19.60" "1192150" "14.588"
## 2017-11-13 "2017-11-13" "19.60" "20.70" "19.55" "20.65" " 768360" "15.369"
## 2017-11-14 "2017-11-14" "20.90" "20.90" "20.30" "20.60" "1011450" "15.331"
## 2017-11-15 "2017-11-15" "20.70" "20.90" "20.45" "20.70" "5834460" "15.407"
## 2017-11-16 "2017-11-16" "20.70" "21.35" "20.55" "21.25" " 696600" "15.816"
## 2017-11-17 "2017-11-17" "21.30" "21.95" "21.30" "21.55" "1302190" "16.039"
## 2017-11-20 "2017-11-20" "21.85" "21.85" "21.40" "21.60" " 702840" "16.076"
## 2017-11-21 "2017-11-21" "21.70" "22.40" "21.60" "22.25" "1696230" "16.559"
## 2017-11-22 "2017-11-22" "22.25" "22.50" "22.10" "22.35" " 916450" "16.635"
## 2017-11-23 "2017-11-23" "22.55" "22.60" "21.70" "22.00" "1564980" "16.374"
## 2017-11-24 "2017-11-24" "22.00" "22.30" "21.60" "22.20" " 696370" "16.523"
## 2017-11-27 "2017-11-27" "22.40" "23.30" "22.20" "22.85" "1428330" "17.006"
## 2017-11-28 "2017-11-28" "23.00" "23.10" "22.25" "22.80" " 607610" "16.969"
## 2017-11-29 "2017-11-29" "23.25" "23.30" "22.70" "22.75" " 870830" "16.932"
## 2017-11-30 "2017-11-30" "23.10" "23.70" "23.00" "23.50" "1518630" "17.490"
## 2017-12-01 "2017-12-01" "23.75" "23.95" "23.55" "23.80" " 816650" "17.713"
## 2017-12-04 "2017-12-04" "24.10" "24.95" "23.95" "24.50" "1236940" "18.234"
## 2017-12-05 "2017-12-05" "24.50" "24.50" "23.50" "23.50" "1818830" "17.490"
## 2017-12-06 "2017-12-06" "23.40" "23.60" "22.70" "23.40" "2025180" "17.416"
## 2017-12-07 "2017-12-07" "23.50" "23.55" "22.60" "22.80" " 823270" "16.969"
## 2017-12-08 "2017-12-08" "22.70" "23.10" "22.50" "22.75" " 719860" "16.932"
## 2017-12-11 "2017-12-11" "22.30" "22.50" "21.60" "21.60" "1207890" "16.076"
## 2017-12-12 "2017-12-12" "21.80" "21.90" "20.20" "21.40" "1585620" "15.928"
## 2017-12-13 "2017-12-13" "21.60" "21.80" "20.95" "21.35" " 715040" "15.890"
## 2017-12-14 "2017-12-14" "21.40" "21.95" "21.40" "21.95" "1093390" "16.337"
## 2017-12-15 "2017-12-15" "21.95" "22.10" "21.75" "22.00" " 836400" "16.374"
## 2017-12-18 "2017-12-18" "22.50" "22.90" "22.20" "22.65" "1759750" "16.858"
## 2017-12-19 "2017-12-19" "22.95" "23.70" "22.75" "23.60" "2031720" "17.565"
## 2017-12-20 "2017-12-20" "23.75" "24.10" "23.40" "23.70" "1646090" "17.639"
## 2017-12-21 "2017-12-21" "23.70" "23.85" "23.50" "23.55" " 677420" "17.527"
## 2017-12-22 "2017-12-22" "23.35" "23.75" "23.25" "23.65" " 825360" "17.602"
## 2017-12-25 "2017-12-25" "23.65" "24.30" "23.60" "24.10" "1082430" "17.937"
## 2017-12-26 "2017-12-26" "24.30" "24.30" "23.80" "24.00" " 696510" "17.863"
## 2017-12-27 "2017-12-27" "24.30" "24.80" "24.20" "24.40" "1834450" "18.160"
## 2017-12-28 "2017-12-28" "24.70" "26.10" "24.40" "26.10" "3208580" "19.425"
## 2017-12-29 "2017-12-29" "26.30" "26.90" "26.10" "26.40" "1787920" "19.648"
## 2018-01-02 "2018-01-02" "26.40" "26.80" "26.40" "26.70" " 853480" "19.872"
## 2018-01-03 "2018-01-03" "26.70" "27.25" "26.55" "26.80" "1970320" "19.946"
## 2018-01-04 "2018-01-04" "26.80" "27.10" "26.65" "27.00" "1219660" "20.095"
## 2018-01-05 "2018-01-05" "27.00" "27.10" "26.10" "26.25" "1379580" "19.537"
## 2018-01-08 "2018-01-08" "26.00" "27.10" "25.70" "27.00" "1828380" "20.095"
## 2018-01-09 "2018-01-09" "27.90" "27.90" "26.95" "27.40" "1106020" "20.393"
## 2018-01-10 "2018-01-10" "27.55" "27.75" "27.10" "27.50" "1466780" "20.467"
## 2018-01-11 "2018-01-11" "27.30" "27.50" "26.80" "27.20" "1260720" "20.243"
## 2018-01-12 "2018-01-12" "27.45" "28.20" "27.35" "27.60" "1730170" "20.542"
## 2018-01-15 "2018-01-15" "27.60" "28.40" "27.35" "28.25" "1273740" "21.026"
## 2018-01-16 "2018-01-16" "28.10" "28.40" "27.90" "28.25" "1163350" "21.026"
## 2018-01-17 "2018-01-17" "28.20" "28.40" "26.70" "26.70" "1715210" "19.872"
## 2018-01-18 "2018-01-18" "26.10" "27.50" "25.70" "27.50" "1559030" "20.467"
## 2018-01-19 "2018-01-19" "27.65" "28.00" "27.50" "27.70" " 928770" "20.616"
## 2018-01-22 "2018-01-22" "28.10" "29.15" "28.00" "28.60" "2150450" "21.286"
## 2018-01-25 "2018-01-25" "29.00" "30.00" "28.70" "29.50" "5245410" "21.956"
## 2018-01-26 "2018-01-26" "30.00" "30.00" "28.85" "29.25" "1699100" "21.770"
## 2018-01-29 "2018-01-29" "29.40" "30.50" "29.20" "29.80" "1544710" "22.179"
## 2018-01-30 "2018-01-30" "29.40" "31.70" "29.30" "31.70" "1608010" "23.593"
## 2018-01-31 "2018-01-31" "31.90" "32.30" "30.00" "30.00" "1883150" "22.328"
## 2018-02-01 "2018-02-01" "30.00" "30.30" "28.20" "28.30" "2939860" "21.062"
## 2018-02-02 "2018-02-02" "28.50" "28.95" "27.60" "28.95" "1700670" "21.547"
## 2018-02-05 "2018-02-05" "28.10" "28.45" "26.95" "26.95" "2150120" "20.058"
## 2018-02-06 "2018-02-06" "25.10" "26.95" "25.10" "26.40" "3129690" "19.648"
## 2018-02-07 "2018-02-07" "27.50" "28.20" "27.50" "28.20" "1985120" "20.988"
## 2018-02-08 "2018-02-08" "28.00" "29.20" "27.70" "28.00" " 943260" "20.840"
## 2018-02-09 "2018-02-09" "26.40" "28.50" "26.40" "28.50" "1050600" "21.211"
## 2018-02-12 "2018-02-12" "29.35" "29.50" "28.60" "29.50" " 929580" "21.956"
## 2018-02-13 "2018-02-13" "29.70" "30.15" "29.50" "29.60" "1012090" "22.030"
## 2018-02-21 "2018-02-21" "30.00" "30.65" "29.85" "30.45" "1377960" "22.663"
## 2018-02-22 "2018-02-22" "30.00" "30.35" "29.20" "29.50" "1245400" "21.956"
## 2018-02-23 "2018-02-23" "29.80" "30.00" "29.00" "29.95" "1553330" "22.290"
## 2018-02-26 "2018-02-26" "30.40" "31.95" "30.40" "31.50" "3895800" "23.444"
## 2018-02-27 "2018-02-27" "25.50" "26.00" "24.95" "26.00" "3592350" "25.081"
## 2018-02-28 "2018-02-28" "25.60" "27.70" "25.30" "27.20" "1646510" "26.239"
## 2018-03-01 "2018-03-01" "26.60" "27.40" "26.00" "26.70" "1876060" "25.757"
## 2018-03-02 "2018-03-02" "26.00" "26.75" "26.00" "26.50" "1360260" "25.564"
## 2018-03-05 "2018-03-05" "26.80" "26.90" "24.65" "24.65" "2011650" "23.779"
## 2018-03-06 "2018-03-06" "25.30" "26.35" "24.70" "26.35" "1450870" "25.419"
## 2018-03-07 "2018-03-07" "26.90" "28.15" "26.80" "27.50" "3765060" "26.528"
## 2018-03-08 "2018-03-08" "27.50" "27.90" "27.10" "27.45" " 830950" "26.480"
## 2018-03-09 "2018-03-09" "28.00" "28.30" "27.40" "27.50" "1459510" "26.528"
## 2018-03-12 "2018-03-12" "27.80" "27.80" "26.90" "27.00" " 948240" "26.046"
## 2018-03-13 "2018-03-13" "27.30" "27.45" "26.90" "27.40" " 850470" "26.432"
## 2018-03-14 "2018-03-14" "27.90" "28.60" "27.90" "28.35" "2095390" "27.348"
## 2018-03-15 "2018-03-15" "28.35" "29.20" "28.20" "29.20" "1905300" "28.168"
## 2018-03-16 "2018-03-16" "29.20" "29.50" "28.90" "29.15" "2808720" "28.120"
## 2018-03-19 "2018-03-19" "29.70" "29.90" "29.15" "29.50" "1526710" "28.458"
## 2018-03-20 "2018-03-20" "29.00" "29.70" "29.00" "29.05" "1360430" "28.023"
## 2018-03-21 "2018-03-21" "29.15" "29.40" "28.60" "28.70" "1491440" "27.686"
## 2018-03-22 "2018-03-22" "28.80" "28.80" "26.80" "27.60" "5618480" "26.625"
## 2018-03-23 "2018-03-23" "26.30" "27.20" "26.30" "26.90" "2287250" "25.949"
## 2018-03-26 "2018-03-26" "26.90" "28.50" "26.80" "28.50" "1481870" "27.493"
## 2018-03-27 "2018-03-27" "28.55" "28.55" "27.75" "28.00" "2589800" "27.011"
## 2018-03-28 "2018-03-28" "27.75" "28.65" "27.60" "28.65" "1429910" "27.638"
## 2018-03-29 "2018-03-29" "28.50" "29.00" "28.25" "29.00" "1294580" "27.975"
## 2018-03-30 "2018-03-30" "29.00" "29.50" "28.75" "29.05" "1688000" "28.023"
## 2018-04-02 "2018-04-02" "29.10" "29.80" "29.10" "29.55" "2141980" "28.506"
## 2018-04-03 "2018-04-03" "29.55" "31.55" "29.55" "31.30" "2845070" "30.194"
## 2018-04-04 "2018-04-04" "31.80" "32.00" "30.55" "30.90" "2649810" "29.808"
## 2018-04-05 "2018-04-05" "30.90" "31.20" "30.40" "31.20" "2145760" "30.098"
## 2018-04-06 "2018-04-06" "31.20" "32.75" "31.00" "32.55" "2301660" "31.400"
## 2018-04-09 "2018-04-09" "33.00" "34.00" "32.50" "34.00" "2422270" "32.799"
## 2018-04-10 "2018-04-10" "34.40" "34.40" "33.55" "33.65" "2593060" "32.461"
## 2018-04-11 "2018-04-11" "33.70" "34.10" "32.40" "32.80" "2303750" "31.641"
## 2018-04-12 "2018-04-12" "32.50" "33.50" "31.60" "33.50" "1522570" "32.316"
## 2018-04-13 "2018-04-13" "33.95" "34.20" "32.70" "33.20" "1210560" "32.027"
## 2018-04-16 "2018-04-16" "32.80" "33.50" "32.00" "33.00" " 942970" "31.834"
## 2018-04-17 "2018-04-17" "33.00" "33.50" "32.60" "33.10" "1307860" "31.930"
## 2018-04-18 "2018-04-18" "33.10" "33.65" "32.30" "32.30" "1603560" "31.159"
## 2018-04-19 "2018-04-19" "32.10" "32.30" "30.50" "31.60" "2133990" "30.483"
## 2018-04-20 "2018-04-20" "31.20" "31.90" "30.60" "31.60" " 887180" "30.483"
## 2018-04-23 "2018-04-23" "31.50" "31.50" "29.40" "29.40" "2464590" "28.361"
## 2018-04-24 "2018-04-24" "28.25" "28.95" "27.35" "27.35" "2445240" "26.384"
## 2018-04-26 "2018-04-26" "27.00" "27.10" "25.45" "25.45" "2334780" "24.551"
## 2018-04-27 "2018-04-27" "24.50" "27.20" "24.50" "27.20" "3198625" "26.239"
## 2018-05-02 "2018-05-02" "27.50" "27.90" "25.80" "26.20" "1353448" "25.274"
## 2018-05-03 "2018-05-03" "26.00" "27.15" "25.30" "27.10" "1389550" "26.142"
## 2018-05-04 "2018-05-04" "27.50" "27.70" "26.70" "26.80" "1005460" "25.853"
## 2018-05-07 "2018-05-07" "27.10" "28.45" "26.10" "28.45" "1104670" "27.445"
## 2018-05-08 "2018-05-08" "28.45" "28.70" "27.80" "28.30" "1088440" "27.300"
## 2018-05-09 "2018-05-09" "27.50" "27.50" "25.40" "25.40" "3388590" "25.400"
## 2018-05-10 "2018-05-10" "23.65" "25.00" "23.65" "23.65" "7057690" "23.650"
## 2018-05-11 "2018-05-11" "22.00" "25.30" "22.00" "25.30" "2888280" "25.300"
## 2018-05-14 "2018-05-14" "24.00" "24.90" "23.55" "23.55" "2430770" "23.550"
## 2018-05-15 "2018-05-15" "23.10" "23.35" "22.10" "22.10" "3651020" "22.100"
## 2018-05-16 "2018-05-16" "22.00" "22.80" "21.00" "22.55" "1672930" "22.550"
## 2018-05-17 "2018-05-17" "23.00" "23.20" "22.80" "22.90" "1451740" "22.900"
## 2018-05-18 "2018-05-18" "22.50" "22.80" "21.65" "22.25" "1261480" "22.250"
## 2018-05-21 "2018-05-21" "22.50" "22.50" "21.50" "21.50" " 862490" "21.500"
## 2018-05-22 "2018-05-22" "21.00" "21.40" "20.00" "20.00" "2487610" "20.000"
## 2018-05-23 "2018-05-23" "20.00" "21.40" "19.00" "21.40" "2054330" "21.400"
## 2018-05-24 "2018-05-24" "21.00" "21.40" "20.10" "20.50" "1553540" "20.500"
## 2018-05-25 "2018-05-25" "20.10" "20.45" "19.10" "19.20" "1395460" "19.200"
## 
## $SSI
##            date         open    high    low     close   volume    
## 2017-05-29 "2017-05-29" "26.30" "26.60" "25.80" "25.80" " 3751650"
## 2017-05-30 "2017-05-30" "25.80" "25.80" "24.70" "24.75" " 7680150"
## 2017-05-31 "2017-05-31" "24.75" "25.20" "24.55" "24.80" " 4782800"
## 2017-06-01 "2017-06-01" "24.95" "25.10" "24.80" "24.90" " 1888560"
## 2017-06-02 "2017-06-02" "24.95" "26.00" "24.75" "25.80" " 5719180"
## 2017-06-05 "2017-06-05" "25.90" "26.00" "25.30" "25.30" " 2904890"
## 2017-06-06 "2017-06-06" "25.45" "25.70" "25.25" "25.60" " 2952940"
## 2017-06-07 "2017-06-07" "25.80" "26.25" "25.75" "25.85" " 4110110"
## 2017-06-08 "2017-06-08" "26.00" "26.40" "25.75" "26.05" " 3599060"
## 2017-06-09 "2017-06-09" "26.20" "26.60" "26.10" "26.25" " 3427850"
## 2017-06-12 "2017-06-12" "26.40" "26.60" "26.15" "26.30" " 4017400"
## 2017-06-13 "2017-06-13" "26.30" "26.75" "26.25" "26.60" " 3671640"
## 2017-06-14 "2017-06-14" "26.90" "26.90" "26.40" "26.50" " 3100170"
## 2017-06-15 "2017-06-15" "26.50" "26.65" "26.35" "26.40" " 3162870"
## 2017-06-16 "2017-06-16" "26.40" "26.80" "26.35" "26.60" " 5066760"
## 2017-06-19 "2017-06-19" "26.90" "27.80" "26.80" "27.70" " 6069550"
## 2017-06-20 "2017-06-20" "28.10" "28.15" "27.50" "27.55" " 5461220"
## 2017-06-21 "2017-06-21" "27.40" "27.60" "27.10" "27.40" " 5752750"
## 2017-06-22 "2017-06-22" "27.65" "27.65" "27.20" "27.35" " 3594520"
## 2017-06-23 "2017-06-23" "27.50" "27.50" "26.90" "27.30" " 4040440"
## 2017-06-26 "2017-06-26" "27.30" "27.60" "27.30" "27.45" " 2760120"
## 2017-06-27 "2017-06-27" "27.50" "27.55" "26.95" "26.95" " 2752530"
## 2017-06-28 "2017-06-28" "26.95" "27.40" "26.85" "27.40" " 3526870"
## 2017-06-29 "2017-06-29" "27.50" "27.75" "27.35" "27.50" " 2457240"
## 2017-06-30 "2017-06-30" "27.55" "27.65" "27.40" "27.65" " 2278220"
## 2017-07-03 "2017-07-03" "28.00" "28.25" "27.80" "27.95" " 5285670"
## 2017-07-04 "2017-07-04" "28.05" "28.25" "27.95" "28.25" " 3945450"
## 2017-07-05 "2017-07-05" "28.25" "28.35" "28.10" "28.30" " 2157440"
## 2017-07-06 "2017-07-06" "28.70" "29.00" "28.60" "28.60" " 3966060"
## 2017-07-07 "2017-07-07" "28.55" "28.55" "27.10" "27.50" " 8259690"
## 2017-07-10 "2017-07-10" "27.50" "27.60" "26.65" "26.65" " 6248380"
## 2017-07-11 "2017-07-11" "26.65" "26.85" "26.20" "26.80" " 5183050"
## 2017-07-12 "2017-07-12" "27.00" "27.15" "26.55" "26.60" " 2688120"
## 2017-07-13 "2017-07-13" "26.55" "26.70" "26.50" "26.65" " 2098440"
## 2017-07-14 "2017-07-14" "26.75" "27.25" "26.70" "26.80" " 4311140"
## 2017-07-17 "2017-07-17" "26.90" "26.90" "25.55" "25.70" " 7078640"
## 2017-07-18 "2017-07-18" "25.60" "25.70" "25.10" "25.25" " 5083880"
## 2017-07-19 "2017-07-19" "25.55" "25.65" "25.10" "25.20" " 4225880"
## 2017-07-20 "2017-07-20" "25.10" "25.35" "24.80" "25.30" " 5660150"
## 2017-07-21 "2017-07-21" "25.70" "25.70" "24.95" "25.40" " 4105620"
## 2017-07-24 "2017-07-24" "25.00" "25.20" "24.75" "24.75" " 2785230"
## 2017-07-25 "2017-07-25" "24.75" "25.25" "24.65" "25.25" " 3062910"
## 2017-07-26 "2017-07-26" "25.35" "25.65" "25.20" "25.60" " 4324720"
## 2017-07-27 "2017-07-27" "25.60" "25.75" "25.45" "25.55" " 3620350"
## 2017-07-28 "2017-07-28" "25.50" "26.00" "25.45" "25.85" " 3213330"
## 2017-07-31 "2017-07-31" "25.90" "26.35" "25.85" "26.30" " 4547380"
## 2017-08-01 "2017-08-01" "26.45" "26.70" "26.00" "26.00" " 4487850"
## 2017-08-02 "2017-08-02" "25.90" "26.15" "25.60" "25.75" " 4390170"
## 2017-08-03 "2017-08-03" "25.80" "26.20" "25.80" "25.95" " 3366750"
## 2017-08-04 "2017-08-04" "26.20" "26.40" "26.05" "26.40" " 3453580"
## 2017-08-07 "2017-08-07" "26.65" "26.80" "26.35" "26.35" " 4241210"
## 2017-08-08 "2017-08-08" "26.40" "26.40" "25.90" "26.00" " 4126450"
## 2017-08-09 "2017-08-09" "25.90" "25.90" "25.10" "25.25" " 5112188"
## 2017-08-10 "2017-08-10" "25.00" "25.40" "25.00" "25.20" " 3161970"
## 2017-08-11 "2017-08-11" "25.25" "25.40" "25.00" "25.05" " 2820050"
## 2017-08-14 "2017-08-14" "25.05" "25.40" "25.05" "25.30" " 1485350"
## 2017-08-15 "2017-08-15" "25.50" "25.50" "25.05" "25.15" " 1531770"
## 2017-08-16 "2017-08-16" "25.05" "25.25" "25.05" "25.15" " 2517880"
## 2017-08-17 "2017-08-17" "25.25" "25.25" "24.60" "24.60" " 3983210"
## 2017-08-18 "2017-08-18" "24.50" "25.05" "24.40" "24.85" " 4167990"
## 2017-08-21 "2017-08-21" "24.85" "24.90" "24.45" "24.45" " 2261090"
## 2017-08-22 "2017-08-22" "24.45" "24.50" "24.00" "24.00" " 3644570"
## 2017-08-23 "2017-08-23" "24.10" "24.30" "23.85" "24.30" " 3220320"
## 2017-08-24 "2017-08-24" "24.20" "24.60" "24.20" "24.35" " 2989440"
## 2017-08-25 "2017-08-25" "24.55" "24.70" "24.35" "24.65" " 2255190"
## 2017-08-28 "2017-08-28" "24.70" "25.20" "24.50" "25.15" " 4638200"
## 2017-08-29 "2017-08-29" "25.20" "25.25" "24.90" "24.90" " 2728450"
## 2017-08-30 "2017-08-30" "24.90" "25.00" "24.80" "24.85" " 1662960"
## 2017-08-31 "2017-08-31" "24.80" "25.15" "24.75" "25.05" " 3062070"
## 2017-09-01 "2017-09-01" "25.05" "25.30" "25.05" "25.20" " 2119210"
## 2017-09-05 "2017-09-05" "25.10" "25.30" "24.85" "25.10" " 2279240"
## 2017-09-06 "2017-09-06" "25.10" "25.15" "24.90" "25.00" " 1730160"
## 2017-09-07 "2017-09-07" "25.00" "25.35" "24.95" "25.05" " 2018750"
## 2017-09-08 "2017-09-08" "25.10" "25.20" "24.95" "24.95" " 1550010"
## 2017-09-11 "2017-09-11" "24.85" "25.05" "24.65" "24.70" " 2314020"
## 2017-09-12 "2017-09-12" "24.70" "24.80" "24.60" "24.70" " 1704890"
## 2017-09-13 "2017-09-13" "24.80" "25.05" "24.75" "25.05" " 1778620"
## 2017-09-14 "2017-09-14" "25.20" "25.70" "25.15" "25.45" " 4258280"
## 2017-09-15 "2017-09-15" "25.45" "25.60" "25.30" "25.60" " 2967640"
## 2017-09-18 "2017-09-18" "25.65" "26.05" "25.50" "25.80" " 4233740"
## 2017-09-19 "2017-09-19" "25.90" "25.95" "25.70" "25.80" " 2413850"
## 2017-09-20 "2017-09-20" "25.85" "25.85" "25.45" "25.50" " 1488560"
## 2017-09-21 "2017-09-21" "25.50" "25.65" "25.35" "25.35" " 2634790"
## 2017-09-22 "2017-09-22" "25.50" "25.70" "25.40" "25.50" " 1984610"
## 2017-09-25 "2017-09-25" "25.60" "25.80" "25.40" "25.40" " 1957240"
## 2017-09-26 "2017-09-26" "25.55" "25.55" "25.35" "25.40" " 1794660"
## 2017-09-27 "2017-09-27" "25.40" "25.55" "25.35" "25.40" "  830510"
## 2017-09-28 "2017-09-28" "25.40" "25.55" "25.00" "25.00" " 1848660"
## 2017-09-29 "2017-09-29" "25.00" "25.20" "25.00" "25.05" " 1773120"
## 2017-10-02 "2017-10-02" "25.05" "25.25" "24.95" "25.00" "  798050"
## 2017-10-03 "2017-10-03" "25.05" "25.05" "24.70" "24.90" " 1669940"
## 2017-10-04 "2017-10-04" "24.90" "25.10" "24.80" "25.10" " 1351090"
## 2017-10-05 "2017-10-05" "25.20" "25.65" "25.10" "25.55" " 3695800"
## 2017-10-06 "2017-10-06" "25.60" "25.80" "25.50" "25.55" " 2350450"
## 2017-10-09 "2017-10-09" "25.00" "25.05" "24.75" "24.75" " 3984240"
## 2017-10-10 "2017-10-10" "24.70" "24.70" "24.45" "24.55" " 2785450"
## 2017-10-11 "2017-10-11" "24.80" "24.85" "24.60" "24.70" " 3114990"
## 2017-10-12 "2017-10-12" "24.70" "24.80" "24.35" "24.35" " 2587430"
## 2017-10-13 "2017-10-13" "24.30" "24.40" "24.20" "24.35" " 1686550"
## 2017-10-16 "2017-10-16" "24.35" "24.45" "24.30" "24.40" " 2138810"
## 2017-10-17 "2017-10-17" "24.40" "24.80" "24.35" "24.80" " 2378250"
## 2017-10-18 "2017-10-18" "25.00" "25.25" "24.85" "24.85" " 7487940"
## 2017-10-19 "2017-10-19" "24.90" "25.00" "24.50" "24.50" " 2615570"
## 2017-10-20 "2017-10-20" "24.50" "24.75" "24.30" "24.30" " 2888670"
## 2017-10-23 "2017-10-23" "24.20" "24.20" "23.60" "23.60" " 4844710"
## 2017-10-24 "2017-10-24" "23.65" "23.75" "23.35" "23.35" " 3195190"
## 2017-10-25 "2017-10-25" "23.60" "23.60" "23.35" "23.40" " 1940490"
## 2017-10-26 "2017-10-26" "23.40" "23.50" "22.80" "23.20" " 3117300"
## 2017-10-27 "2017-10-27" "23.00" "23.20" "22.90" "23.20" " 1703920"
## 2017-10-30 "2017-10-30" "23.30" "23.40" "22.85" "22.85" " 2989480"
## 2017-10-31 "2017-10-31" "22.80" "23.00" "22.60" "22.60" " 2300130"
## 2017-11-01 "2017-11-01" "22.60" "22.70" "21.90" "22.20" " 4748180"
## 2017-11-02 "2017-11-02" "22.50" "23.00" "22.40" "22.55" " 4480030"
## 2017-11-03 "2017-11-03" "22.50" "22.80" "22.50" "22.80" " 1485690"
## 2017-11-06 "2017-11-06" "22.80" "23.10" "22.80" "23.10" " 1455830"
## 2017-11-07 "2017-11-07" "23.20" "23.20" "22.90" "23.00" " 1751460"
## 2017-11-08 "2017-11-08" "23.00" "23.10" "22.90" "23.05" " 1688320"
## 2017-11-09 "2017-11-09" "23.10" "23.45" "23.10" "23.35" " 2422140"
## 2017-11-10 "2017-11-10" "23.25" "23.45" "23.15" "23.30" " 1729980"
## 2017-11-13 "2017-11-13" "23.30" "24.05" "23.15" "24.05" " 3562920"
## 2017-11-14 "2017-11-14" "24.20" "24.50" "23.75" "24.30" " 2988570"
## 2017-11-15 "2017-11-15" "24.00" "24.40" "24.00" "24.25" " 2064670"
## 2017-11-16 "2017-11-16" "24.10" "24.60" "24.00" "24.60" " 3823680"
## 2017-11-17 "2017-11-17" "24.70" "24.80" "24.25" "24.50" " 3145030"
## 2017-11-20 "2017-11-20" "24.40" "24.80" "24.35" "24.60" " 2020940"
## 2017-11-21 "2017-11-21" "24.65" "25.50" "24.65" "25.10" " 9166290"
## 2017-11-22 "2017-11-22" "25.20" "25.60" "25.10" "25.45" " 4509450"
## 2017-11-23 "2017-11-23" "25.65" "25.85" "25.30" "25.50" " 4370900"
## 2017-11-24 "2017-11-24" "25.50" "25.60" "25.20" "25.50" " 3049650"
## 2017-11-27 "2017-11-27" "25.70" "26.25" "25.60" "26.00" " 5759130"
## 2017-11-28 "2017-11-28" "26.20" "26.20" "25.70" "26.00" " 3815360"
## 2017-11-29 "2017-11-29" "27.00" "27.50" "26.60" "26.60" " 7091470"
## 2017-11-30 "2017-11-30" "26.80" "27.30" "26.65" "26.90" " 4363400"
## 2017-12-01 "2017-12-01" "26.95" "27.90" "26.85" "27.55" " 6656170"
## 2017-12-04 "2017-12-04" "27.80" "29.30" "27.65" "29.10" " 6806200"
## 2017-12-05 "2017-12-05" "29.00" "29.10" "28.00" "28.20" " 6972920"
## 2017-12-06 "2017-12-06" "28.10" "28.20" "26.95" "27.95" " 9155410"
## 2017-12-07 "2017-12-07" "27.95" "28.00" "26.90" "27.10" " 5225010"
## 2017-12-08 "2017-12-08" "27.20" "27.60" "26.85" "27.20" " 3859820"
## 2017-12-11 "2017-12-11" "26.90" "27.10" "25.80" "25.80" " 4164300"
## 2017-12-12 "2017-12-12" "26.00" "26.45" "24.85" "26.45" " 5025080"
## 2017-12-13 "2017-12-13" "26.45" "26.60" "25.95" "26.20" " 3583760"
## 2017-12-14 "2017-12-14" "26.15" "26.70" "26.15" "26.65" " 2149240"
## 2017-12-15 "2017-12-15" "26.90" "27.40" "26.45" "27.10" " 4526560"
## 2017-12-18 "2017-12-18" "27.60" "27.75" "27.30" "27.50" " 4340510"
## 2017-12-19 "2017-12-19" "27.70" "28.15" "27.60" "27.85" " 6370700"
## 2017-12-20 "2017-12-20" "28.00" "28.45" "27.80" "28.00" " 4350100"
## 2017-12-21 "2017-12-21" "28.00" "28.25" "27.60" "27.60" " 3513330"
## 2017-12-22 "2017-12-22" "27.40" "27.85" "27.25" "27.55" " 2724100"
## 2017-12-25 "2017-12-25" "27.60" "28.10" "27.60" "27.85" " 2426030"
## 2017-12-26 "2017-12-26" "28.00" "28.20" "27.90" "28.00" " 5812250"
## 2017-12-27 "2017-12-27" "28.05" "28.25" "27.70" "27.70" " 4074240"
## 2017-12-28 "2017-12-28" "27.95" "28.75" "27.85" "28.65" " 6566090"
## 2017-12-29 "2017-12-29" "29.05" "29.35" "28.70" "28.80" " 8555590"
## 2018-01-02 "2018-01-02" "28.90" "29.30" "28.90" "29.10" " 4515320"
## 2018-01-03 "2018-01-03" "29.30" "30.20" "29.20" "30.20" "10288870"
## 2018-01-04 "2018-01-04" "30.30" "30.50" "30.00" "30.10" " 7008620"
## 2018-01-05 "2018-01-05" "30.20" "30.30" "28.90" "28.90" " 8352050"
## 2018-01-08 "2018-01-08" "28.90" "29.50" "28.60" "29.50" " 8373690"
## 2018-01-09 "2018-01-09" "30.00" "30.20" "29.35" "29.80" " 5444200"
## 2018-01-10 "2018-01-10" "30.15" "30.80" "29.90" "30.35" "10488420"
## 2018-01-11 "2018-01-11" "30.35" "30.45" "29.80" "30.30" " 6541660"
## 2018-01-12 "2018-01-12" "30.50" "31.75" "30.30" "31.30" "12631800"
## 2018-01-15 "2018-01-15" "31.40" "32.20" "30.80" "31.95" " 6207200"
## 2018-01-16 "2018-01-16" "31.60" "32.10" "31.25" "31.85" " 7578000"
## 2018-01-17 "2018-01-17" "31.80" "31.95" "30.50" "30.50" " 9746960"
## 2018-01-18 "2018-01-18" "30.10" "31.50" "29.70" "31.50" " 8140337"
## 2018-01-19 "2018-01-19" "31.70" "32.75" "31.50" "32.50" " 9619390"
## 2018-01-22 "2018-01-22" "33.00" "34.30" "32.80" "34.20" "10563620"
## 2018-01-25 "2018-01-25" "34.00" "36.30" "34.00" "35.40" "13495460"
## 2018-01-26 "2018-01-26" "35.70" "36.30" "34.50" "35.30" " 7800330"
## 2018-01-29 "2018-01-29" "35.30" "37.10" "35.20" "36.60" " 5149430"
## 2018-01-30 "2018-01-30" "35.60" "36.65" "35.50" "36.50" " 9041900"
## 2018-01-31 "2018-01-31" "36.50" "36.95" "34.10" "34.10" " 7421310"
## 2018-02-01 "2018-02-01" "35.00" "35.50" "34.10" "34.55" " 6962490"
## 2018-02-02 "2018-02-02" "34.80" "35.35" "34.50" "35.10" " 3569790"
## 2018-02-05 "2018-02-05" "34.00" "34.70" "32.65" "32.65" " 9615070"
## 2018-02-06 "2018-02-06" "30.40" "32.30" "30.40" "31.20" "12223040"
## 2018-02-07 "2018-02-07" "33.20" "33.35" "32.60" "33.00" " 5380150"
## 2018-02-08 "2018-02-08" "32.20" "33.00" "31.60" "31.60" " 3180480"
## 2018-02-09 "2018-02-09" "29.90" "31.60" "29.90" "31.60" " 5374370"
## 2018-02-12 "2018-02-12" "32.70" "33.60" "32.40" "33.60" " 4601160"
## 2018-02-13 "2018-02-13" "33.80" "34.50" "33.80" "34.15" " 3788310"
## 2018-02-21 "2018-02-21" "34.50" "35.60" "34.35" "35.10" " 5587150"
## 2018-02-22 "2018-02-22" "34.60" "35.15" "34.05" "34.40" " 4449070"
## 2018-02-23 "2018-02-23" "34.70" "35.30" "34.45" "35.20" " 4351290"
## 2018-02-26 "2018-02-26" "36.00" "36.20" "35.05" "35.05" " 7629640"
## 2018-02-27 "2018-02-27" "35.30" "35.45" "34.85" "35.30" " 4419640"
## 2018-02-28 "2018-02-28" "35.00" "36.90" "34.75" "36.90" " 9881900"
## 2018-03-01 "2018-03-01" "36.90" "38.45" "36.80" "37.80" " 9240120"
## 2018-03-02 "2018-03-02" "37.30" "38.25" "36.90" "38.00" " 6267180"
## 2018-03-05 "2018-03-05" "38.40" "38.95" "35.35" "35.35" " 9104540"
## 2018-03-06 "2018-03-06" "36.25" "37.80" "35.80" "37.80" " 7628590"
## 2018-03-07 "2018-03-07" "38.00" "38.90" "37.30" "38.20" " 8682010"
## 2018-03-08 "2018-03-08" "38.10" "38.20" "37.50" "38.15" " 5641340"
## 2018-03-09 "2018-03-09" "38.90" "39.45" "38.45" "38.80" " 9301060"
## 2018-03-12 "2018-03-12" "39.30" "39.45" "38.30" "38.40" " 4999020"
## 2018-03-13 "2018-03-13" "38.60" "39.50" "38.30" "39.50" " 5269610"
## 2018-03-14 "2018-03-14" "39.85" "39.95" "39.20" "39.20" " 5410260"
## 2018-03-15 "2018-03-15" "38.90" "39.35" "38.80" "39.25" " 4764650"
## 2018-03-16 "2018-03-16" "39.50" "41.15" "39.40" "41.00" "14450650"
## 2018-03-19 "2018-03-19" "41.50" "41.80" "40.50" "41.00" " 5351810"
## 2018-03-20 "2018-03-20" "40.40" "41.70" "40.40" "41.05" " 5022610"
## 2018-03-21 "2018-03-21" "41.35" "41.40" "40.60" "40.95" " 6209400"
## 2018-03-22 "2018-03-22" "41.30" "41.35" "40.25" "40.30" " 7379090"
## 2018-03-23 "2018-03-23" "39.10" "39.60" "38.10" "39.60" " 9963470"
## 2018-03-26 "2018-03-26" "39.30" "40.30" "39.20" "40.20" " 4121060"
## 2018-03-27 "2018-03-27" "40.90" "41.10" "39.80" "40.00" " 5638950"
## 2018-03-28 "2018-03-28" "39.55" "40.00" "39.30" "39.50" " 3125890"
## 2018-03-29 "2018-03-29" "39.55" "39.75" "38.85" "39.00" " 3861330"
## 2018-03-30 "2018-03-30" "39.15" "39.20" "38.20" "39.00" " 4561950"
## 2018-04-02 "2018-04-02" "39.50" "40.85" "39.30" "40.80" " 7116550"
## 2018-04-03 "2018-04-03" "40.80" "42.55" "40.50" "42.20" "12845680"
## 2018-04-04 "2018-04-04" "43.00" "43.20" "41.90" "41.90" " 6532980"
## 2018-04-05 "2018-04-05" "42.20" "42.35" "41.60" "41.90" " 4595600"
## 2018-04-06 "2018-04-06" "42.00" "42.65" "41.75" "41.90" " 6142670"
## 2018-04-09 "2018-04-09" "42.00" "44.30" "41.90" "44.30" " 9698600"
## 2018-04-10 "2018-04-10" "44.10" "44.40" "43.05" "43.50" " 6851810"
## 2018-04-11 "2018-04-11" "43.60" "43.70" "41.70" "41.80" " 8254090"
## 2018-04-12 "2018-04-12" "41.50" "42.45" "40.80" "42.00" " 6199070"
## 2018-04-13 "2018-04-13" "42.50" "42.50" "41.10" "41.30" " 3210960"
## 2018-04-16 "2018-04-16" "41.10" "42.20" "40.10" "41.40" " 3375220"
## 2018-04-17 "2018-04-17" "41.50" "42.00" "40.90" "42.00" " 2949810"
## 2018-04-18 "2018-04-18" "42.20" "42.50" "41.50" "41.50" " 3774190"
## 2018-04-19 "2018-04-19" "41.00" "41.60" "40.45" "40.60" " 5662440"
## 2018-04-20 "2018-04-20" "40.60" "42.00" "40.05" "42.00" " 4445130"
## 2018-04-23 "2018-04-23" "41.90" "42.10" "39.10" "39.10" " 6741840"
## 2018-04-24 "2018-04-24" "39.00" "39.20" "37.40" "37.40" " 4986750"
## 2018-04-26 "2018-04-26" "37.40" "37.45" "34.80" "34.80" "10948440"
## 2018-04-27 "2018-04-27" "34.30" "36.70" "34.30" "36.00" " 5390690"
## 2018-05-02 "2018-05-02" "36.30" "36.45" "34.70" "34.80" " 3753890"
## 2018-05-03 "2018-05-03" "34.30" "35.40" "32.70" "35.00" " 5468480"
## 2018-05-04 "2018-05-04" "35.50" "35.60" "34.10" "34.25" " 2624670"
## 2018-05-07 "2018-05-07" "34.90" "36.55" "34.00" "36.40" " 3820060"
## 2018-05-08 "2018-05-08" "36.00" "36.80" "35.80" "35.80" "17141450"
## 2018-05-09 "2018-05-09" "35.70" "36.20" "35.40" "35.80" " 4540570"
## 2018-05-10 "2018-05-10" "35.50" "35.75" "34.00" "34.30" " 4509990"
## 2018-05-11 "2018-05-11" "34.00" "34.60" "33.30" "34.60" " 5071080"
## 2018-05-14 "2018-05-14" "35.00" "35.40" "34.40" "35.00" " 3544440"
## 2018-05-15 "2018-05-15" "35.30" "35.95" "35.10" "35.50" " 3927810"
## 2018-05-16 "2018-05-16" "35.10" "35.50" "34.20" "34.50" " 3220940"
## 2018-05-17 "2018-05-17" "34.60" "34.90" "33.60" "33.60" " 4449330"
## 2018-05-18 "2018-05-18" "34.00" "34.15" "32.00" "33.00" " 4498370"
## 2018-05-21 "2018-05-21" "33.30" "33.50" "32.00" "32.00" " 4716910"
## 2018-05-22 "2018-05-22" "31.00" "32.20" "29.80" "30.05" " 8217100"
## 2018-05-23 "2018-05-23" "30.00" "31.20" "29.80" "31.20" " 6944590"
## 2018-05-24 "2018-05-24" "31.00" "31.45" "30.35" "30.45" " 3866910"
## 2018-05-25 "2018-05-25" "30.45" "31.15" "29.50" "29.50" " 4587060"
##            adjusted
## 2017-05-29 "24.790"
## 2017-05-30 "23.781"
## 2017-05-31 "23.829"
## 2017-06-01 "23.925"
## 2017-06-02 "24.790"
## 2017-06-05 "24.310"
## 2017-06-06 "24.598"
## 2017-06-07 "24.838"
## 2017-06-08 "25.030"
## 2017-06-09 "25.223"
## 2017-06-12 "25.271"
## 2017-06-13 "25.559"
## 2017-06-14 "25.463"
## 2017-06-15 "25.367"
## 2017-06-16 "25.559"
## 2017-06-19 "26.616"
## 2017-06-20 "26.472"
## 2017-06-21 "26.328"
## 2017-06-22 "26.280"
## 2017-06-23 "26.232"
## 2017-06-26 "26.376"
## 2017-06-27 "25.895"
## 2017-06-28 "26.328"
## 2017-06-29 "26.424"
## 2017-06-30 "26.568"
## 2017-07-03 "26.856"
## 2017-07-04 "27.144"
## 2017-07-05 "27.192"
## 2017-07-06 "27.481"
## 2017-07-07 "26.424"
## 2017-07-10 "25.607"
## 2017-07-11 "25.751"
## 2017-07-12 "25.559"
## 2017-07-13 "25.607"
## 2017-07-14 "25.751"
## 2017-07-17 "24.694"
## 2017-07-18 "24.262"
## 2017-07-19 "24.214"
## 2017-07-20 "24.310"
## 2017-07-21 "24.406"
## 2017-07-24 "23.781"
## 2017-07-25 "24.262"
## 2017-07-26 "24.598"
## 2017-07-27 "24.550"
## 2017-07-28 "24.838"
## 2017-07-31 "25.271"
## 2017-08-01 "24.982"
## 2017-08-02 "24.742"
## 2017-08-03 "24.934"
## 2017-08-04 "25.367"
## 2017-08-07 "25.319"
## 2017-08-08 "24.982"
## 2017-08-09 "24.262"
## 2017-08-10 "24.214"
## 2017-08-11 "24.070"
## 2017-08-14 "24.310"
## 2017-08-15 "24.166"
## 2017-08-16 "24.166"
## 2017-08-17 "23.637"
## 2017-08-18 "23.877"
## 2017-08-21 "23.493"
## 2017-08-22 "23.061"
## 2017-08-23 "23.349"
## 2017-08-24 "23.397"
## 2017-08-25 "23.685"
## 2017-08-28 "24.166"
## 2017-08-29 "23.925"
## 2017-08-30 "23.877"
## 2017-08-31 "24.070"
## 2017-09-01 "24.214"
## 2017-09-05 "24.118"
## 2017-09-06 "24.022"
## 2017-09-07 "24.070"
## 2017-09-08 "23.973"
## 2017-09-11 "23.733"
## 2017-09-12 "23.733"
## 2017-09-13 "24.070"
## 2017-09-14 "24.454"
## 2017-09-15 "24.598"
## 2017-09-18 "24.790"
## 2017-09-19 "24.790"
## 2017-09-20 "24.502"
## 2017-09-21 "24.358"
## 2017-09-22 "24.502"
## 2017-09-25 "24.406"
## 2017-09-26 "24.406"
## 2017-09-27 "24.406"
## 2017-09-28 "24.022"
## 2017-09-29 "24.070"
## 2017-10-02 "24.022"
## 2017-10-03 "23.925"
## 2017-10-04 "24.118"
## 2017-10-05 "24.550"
## 2017-10-06 "24.550"
## 2017-10-09 "24.750"
## 2017-10-10 "24.550"
## 2017-10-11 "24.700"
## 2017-10-12 "24.350"
## 2017-10-13 "24.350"
## 2017-10-16 "24.400"
## 2017-10-17 "24.800"
## 2017-10-18 "24.850"
## 2017-10-19 "24.500"
## 2017-10-20 "24.300"
## 2017-10-23 "23.600"
## 2017-10-24 "23.350"
## 2017-10-25 "23.400"
## 2017-10-26 "23.200"
## 2017-10-27 "23.200"
## 2017-10-30 "22.850"
## 2017-10-31 "22.600"
## 2017-11-01 "22.200"
## 2017-11-02 "22.550"
## 2017-11-03 "22.800"
## 2017-11-06 "23.100"
## 2017-11-07 "23.000"
## 2017-11-08 "23.050"
## 2017-11-09 "23.350"
## 2017-11-10 "23.300"
## 2017-11-13 "24.050"
## 2017-11-14 "24.300"
## 2017-11-15 "24.250"
## 2017-11-16 "24.600"
## 2017-11-17 "24.500"
## 2017-11-20 "24.600"
## 2017-11-21 "25.100"
## 2017-11-22 "25.450"
## 2017-11-23 "25.500"
## 2017-11-24 "25.500"
## 2017-11-27 "26.000"
## 2017-11-28 "26.000"
## 2017-11-29 "26.600"
## 2017-11-30 "26.900"
## 2017-12-01 "27.550"
## 2017-12-04 "29.100"
## 2017-12-05 "28.200"
## 2017-12-06 "27.950"
## 2017-12-07 "27.100"
## 2017-12-08 "27.200"
## 2017-12-11 "25.800"
## 2017-12-12 "26.450"
## 2017-12-13 "26.200"
## 2017-12-14 "26.650"
## 2017-12-15 "27.100"
## 2017-12-18 "27.500"
## 2017-12-19 "27.850"
## 2017-12-20 "28.000"
## 2017-12-21 "27.600"
## 2017-12-22 "27.550"
## 2017-12-25 "27.850"
## 2017-12-26 "28.000"
## 2017-12-27 "27.700"
## 2017-12-28 "28.650"
## 2017-12-29 "28.800"
## 2018-01-02 "29.100"
## 2018-01-03 "30.200"
## 2018-01-04 "30.100"
## 2018-01-05 "28.900"
## 2018-01-08 "29.500"
## 2018-01-09 "29.800"
## 2018-01-10 "30.350"
## 2018-01-11 "30.300"
## 2018-01-12 "31.300"
## 2018-01-15 "31.950"
## 2018-01-16 "31.850"
## 2018-01-17 "30.500"
## 2018-01-18 "31.500"
## 2018-01-19 "32.500"
## 2018-01-22 "34.200"
## 2018-01-25 "35.400"
## 2018-01-26 "35.300"
## 2018-01-29 "36.600"
## 2018-01-30 "36.500"
## 2018-01-31 "34.100"
## 2018-02-01 "34.550"
## 2018-02-02 "35.100"
## 2018-02-05 "32.650"
## 2018-02-06 "31.200"
## 2018-02-07 "33.000"
## 2018-02-08 "31.600"
## 2018-02-09 "31.600"
## 2018-02-12 "33.600"
## 2018-02-13 "34.150"
## 2018-02-21 "35.100"
## 2018-02-22 "34.400"
## 2018-02-23 "35.200"
## 2018-02-26 "35.050"
## 2018-02-27 "35.300"
## 2018-02-28 "36.900"
## 2018-03-01 "37.800"
## 2018-03-02 "38.000"
## 2018-03-05 "35.350"
## 2018-03-06 "37.800"
## 2018-03-07 "38.200"
## 2018-03-08 "38.150"
## 2018-03-09 "38.800"
## 2018-03-12 "38.400"
## 2018-03-13 "39.500"
## 2018-03-14 "39.200"
## 2018-03-15 "39.250"
## 2018-03-16 "41.000"
## 2018-03-19 "41.000"
## 2018-03-20 "41.050"
## 2018-03-21 "40.950"
## 2018-03-22 "40.300"
## 2018-03-23 "39.600"
## 2018-03-26 "40.200"
## 2018-03-27 "40.000"
## 2018-03-28 "39.500"
## 2018-03-29 "39.000"
## 2018-03-30 "39.000"
## 2018-04-02 "40.800"
## 2018-04-03 "42.200"
## 2018-04-04 "41.900"
## 2018-04-05 "41.900"
## 2018-04-06 "41.900"
## 2018-04-09 "44.300"
## 2018-04-10 "43.500"
## 2018-04-11 "41.800"
## 2018-04-12 "42.000"
## 2018-04-13 "41.300"
## 2018-04-16 "41.400"
## 2018-04-17 "42.000"
## 2018-04-18 "41.500"
## 2018-04-19 "40.600"
## 2018-04-20 "42.000"
## 2018-04-23 "39.100"
## 2018-04-24 "37.400"
## 2018-04-26 "34.800"
## 2018-04-27 "36.000"
## 2018-05-02 "34.800"
## 2018-05-03 "35.000"
## 2018-05-04 "34.250"
## 2018-05-07 "36.400"
## 2018-05-08 "35.800"
## 2018-05-09 "35.800"
## 2018-05-10 "34.300"
## 2018-05-11 "34.600"
## 2018-05-14 "35.000"
## 2018-05-15 "35.500"
## 2018-05-16 "34.500"
## 2018-05-17 "33.600"
## 2018-05-18 "33.000"
## 2018-05-21 "32.000"
## 2018-05-22 "30.050"
## 2018-05-23 "31.200"
## 2018-05-24 "30.450"
## 2018-05-25 "29.500"
#Muốn chuyển về dạng bảng stack
(stocks <- tq_get(symbol = c("VND","SSI"), stack = TRUE))
## #VND from 2017-05-27 to 2018-05-27 already cloned 
## #SSI from 2017-05-27 to 2018-05-27 already cloned
#Lưu ý rằng bảng stack thì luôn có định dạng tibble objects vì dữ liệu sau khi đã stack nhiều mã chứng khoán sẽ không thể tạo index theo thời gian.

#Lấy >= 10 mã chứng khoán bằng hàm tq_bigquery()
(ls_VND <- VNDS::tq_bigquery( symbols = c('VND','VPB','FPT','ABC','MSN',
                                        'BID','SHB','SSI','VCB','MBB'),
                             from = '2017-01-01',
                             to = '2018-01-01',
                             src = 'VND',
                             minimal = FALSE))
## 1 - 5  :  VND VPB FPT ABC MSNNULL
## #VND from 2017-01-01 to 2018-01-01 already cloned 
## #VPB from 2017-01-01 to 2018-01-01 already cloned 
## #FPT from 2017-01-01 to 2018-01-01 already cloned 
## #ABC from 2017-01-01 to 2018-01-01 already cloned 
## #MSN from 2017-01-01 to 2018-01-01 already cloned 
## 6 - 10  :  BID SHB SSI VCB MBBNULL
## #BID from 2017-01-01 to 2018-01-01 already cloned 
## #SHB from 2017-01-01 to 2018-01-01 already cloned 
## #SSI from 2017-01-01 to 2018-01-01 already cloned 
## #VCB from 2017-01-01 to 2018-01-01 already cloned 
## #MBB from 2017-01-01 to 2018-01-01 already cloned
## $VND
## # A tibble: 246 x 12
##    date       change.percent1 change.percent2  open  high   low close
##    <date>               <dbl>           <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 2017-12-29          0.300          0.0115   26.3  26.9  26.1  26.4
##  2 2017-12-28          1.70           0.0697   24.7  26.1  24.4  26.1
##  3 2017-12-27          0.400          0.0167   24.3  24.8  24.2  24.4
##  4 2017-12-26         -0.100          0.00415  24.3  24.3  23.8  24.0
##  5 2017-12-25          0.450          0.0190   23.6  24.3  23.6  24.1
##  6 2017-12-22          0.1000         0.00425  23.4  23.8  23.2  23.6
##  7 2017-12-21         -0.150          0.00633  23.7  23.8  23.5  23.6
##  8 2017-12-20          0.1000         0.00424  23.8  24.1  23.4  23.7
##  9 2017-12-19          0.950          0.0419   23.0  23.7  22.8  23.6
## 10 2017-12-18          0.650          0.0295   22.5  22.9  22.2  22.6
## # ... with 236 more rows, and 5 more variables: average <dbl>,
## #   adjusted <dbl>, match.volume <dbl>, reconcile.volume <dbl>,
## #   volume <dbl>
## 
## $VPB
## # A tibble: 96 x 12
##    date       change.percent1 change.percent2  open  high   low close
##    <date>               <dbl>           <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 2017-12-29          0.500          0.0123   40.8  41.3  40.6  41.0
##  2 2017-12-28          0.600          0.0150   40.2  40.8  40.2  40.5
##  3 2017-12-27          0.100          0.00251  40.0  40.3  39.9  39.9
##  4 2017-12-26         -0.100          0.00251  40.0  40.1  39.7  39.8
##  5 2017-12-25         -0.500          0.0124   40.4  40.4  39.8  39.9
##  6 2017-12-22         -0.0500         0.00124  40.3  40.4  39.8  40.4
##  7 2017-12-21          0.100          0.00248  40.4  40.9  40.4  40.4
##  8 2017-12-20          1.15           0.0293   39.2  40.5  39.2  40.4
##  9 2017-12-19          0.200          0.00513  39.4  39.4  38.5  39.2
## 10 2017-12-18          0.800          0.0209   38.5  39.3  38.4  39.0
## # ... with 86 more rows, and 5 more variables: average <dbl>,
## #   adjusted <dbl>, match.volume <dbl>, reconcile.volume <dbl>,
## #   volume <dbl>
## 
## $FPT
## # A tibble: 250 x 12
##    date       change.percent1 change.percent2  open  high   low close
##    <date>               <dbl>           <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 2017-12-29          -0.100         0.00175  57.2  57.6  57.0  57.1
##  2 2017-12-28           0.500         0.00882  56.7  57.6  56.5  57.2
##  3 2017-12-27          -0.400         0.00701  57.5  57.5  56.6  56.7
##  4 2017-12-26          -0.500         0.00868  58.0  58.0  57.1  57.1
##  5 2017-12-25           0.500         0.00876  57.3  58.1  57.3  57.6
##  6 2017-12-22           0.700         0.0124   56.4  57.4  56.2  57.1
##  7 2017-12-21           0.100         0.00178  56.8  57.4  56.1  56.4
##  8 2017-12-20           1.10          0.0199   55.2  57.0  55.2  56.3
##  9 2017-12-19          -1.10          0.0195   56.3  56.7  54.9  55.2
## 10 2017-12-18          -0.200         0.00354  57.0  57.2  56.1  56.3
## # ... with 240 more rows, and 5 more variables: average <dbl>,
## #   adjusted <dbl>, match.volume <dbl>, reconcile.volume <dbl>,
## #   volume <dbl>
## 
## $ABC
## # A tibble: 250 x 12
##    date       change.percent1 change.percent2  open  high   low close
##    <date>               <dbl>           <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 2017-12-29         -0.1000         0.00671  15.0  15.0  14.8  14.8
##  2 2017-12-28         -0.1000         0.00667  15.2  15.3  14.9  14.9
##  3 2017-12-27         -0.1000         0.00662  15.2  15.2  15.0  15.0
##  4 2017-12-26          0.1000         0.00667  15.3  15.3  15.0  15.1
##  5 2017-12-25          0              0        15.0  15.3  14.9  15.0
##  6 2017-12-22          0              0        15.1  15.1  14.8  15.0
##  7 2017-12-21         -0.500          0.0323   15.0  15.1  15.0  15.0
##  8 2017-12-20          0.400          0.0265   15.0  15.5  15.0  15.5
##  9 2017-12-19         -0.300          0.0195   15.7  15.8  15.1  15.1
## 10 2017-12-18         -0.1000         0.00645  15.5  15.5  15.0  15.4
## # ... with 240 more rows, and 5 more variables: average <dbl>,
## #   adjusted <dbl>, match.volume <dbl>, reconcile.volume <dbl>,
## #   volume <dbl>
## 
## $MSN
## # A tibble: 250 x 12
##    date       change.percent1 change.percent2  open  high   low close
##    <date>               <dbl>           <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 2017-12-29          1.00           0.0132   74.8  77.0  74.8  76.7
##  2 2017-12-28          0.700          0.00933  75.0  76.0  74.5  75.7
##  3 2017-12-27         -0.500          0.00662  74.9  75.7  74.8  75.0
##  4 2017-12-26          1.30           0.0175   74.9  75.5  74.3  75.5
##  5 2017-12-25          0.300          0.00406  73.1  75.4  73.0  74.2
##  6 2017-12-22          0.700          0.00956  74.4  74.7  72.0  73.9
##  7 2017-12-21         -2.90           0.0381   76.3  76.7  73.2  73.2
##  8 2017-12-20          0.1000         0.00132  75.5  76.9  75.1  76.1
##  9 2017-12-19          0.500          0.00662  75.5  76.6  75.2  76.0
## 10 2017-12-18          3.80           0.0530   72.0  75.7  72.0  75.5
## # ... with 240 more rows, and 5 more variables: average <dbl>,
## #   adjusted <dbl>, match.volume <dbl>, reconcile.volume <dbl>,
## #   volume <dbl>
## 
## $BID
## # A tibble: 250 x 12
##    date       change.percent1 change.percent2  open  high   low close
##    <date>               <dbl>           <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 2017-12-29          0.750          0.0303   25.0  25.5  24.8  25.5
##  2 2017-12-28          0.350          0.0143   24.4  25.1  24.4  24.8
##  3 2017-12-27          0.300          0.0124   24.2  24.6  24.0  24.4
##  4 2017-12-26          0.300          0.0126   23.8  24.1  23.5  24.1
##  5 2017-12-25         -0.0500         0.00210  24.2  24.3  23.7  23.8
##  6 2017-12-22         -0.350          0.0145   23.9  24.2  23.5  23.8
##  7 2017-12-21         -0.300          0.0122   24.5  24.8  24.2  24.2
##  8 2017-12-20          0.400          0.0166   24.1  24.7  24.0  24.5
##  9 2017-12-19         -0.250          0.0103   24.4  24.7  24.1  24.1
## 10 2017-12-18          0.0500         0.00206  24.3  24.5  24.2  24.4
## # ... with 240 more rows, and 5 more variables: average <dbl>,
## #   adjusted <dbl>, match.volume <dbl>, reconcile.volume <dbl>,
## #   volume <dbl>
## 
## $SHB
## # A tibble: 250 x 12
##    date       change.percent1 change.percent2  open  high   low close
##    <date>               <dbl>           <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 2017-12-29          0.100           0.0109  9.30  9.50  9.20  9.30
##  2 2017-12-28          0               0       9.30  9.30  9.10  9.20
##  3 2017-12-27          0.1000          0.0110  9.10  9.30  9.10  9.20
##  4 2017-12-26          0.1000          0.0111  9.00  9.20  8.90  9.10
##  5 2017-12-25          0               0       9.00  9.10  8.90  9.00
##  6 2017-12-22          0               0       9.00  9.10  8.90  9.00
##  7 2017-12-21         -0.200           0.0217  9.20  9.40  9.00  9.00
##  8 2017-12-20          0.1000          0.0110  9.10  9.30  9.00  9.20
##  9 2017-12-19         -0.1000          0.0109  9.20  9.30  9.00  9.10
## 10 2017-12-18          0.500           0.0575  8.80  9.20  8.80  9.20
## # ... with 240 more rows, and 5 more variables: average <dbl>,
## #   adjusted <dbl>, match.volume <dbl>, reconcile.volume <dbl>,
## #   volume <dbl>
## 
## $SSI
## # A tibble: 250 x 12
##    date       change.percent1 change.percent2  open  high   low close
##    <date>               <dbl>           <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 2017-12-29          0.150          0.00524  29.0  29.4  28.7  28.8
##  2 2017-12-28          0.950          0.0343   28.0  28.8  27.8  28.6
##  3 2017-12-27         -0.300          0.0107   28.0  28.2  27.7  27.7
##  4 2017-12-26          0.150          0.00539  28.0  28.2  27.9  28.0
##  5 2017-12-25          0.300          0.0109   27.6  28.1  27.6  27.8
##  6 2017-12-22         -0.0500         0.00181  27.4  27.8  27.2  27.6
##  7 2017-12-21         -0.400          0.0143   28.0  28.2  27.6  27.6
##  8 2017-12-20          0.150          0.00539  28.0  28.4  27.8  28.0
##  9 2017-12-19          0.350          0.0127   27.7  28.2  27.6  27.8
## 10 2017-12-18          0.400          0.0148   27.6  27.8  27.3  27.5
## # ... with 240 more rows, and 5 more variables: average <dbl>,
## #   adjusted <dbl>, match.volume <dbl>, reconcile.volume <dbl>,
## #   volume <dbl>
## 
## $VCB
## # A tibble: 250 x 12
##    date       change.percent1 change.percent2  open  high   low close
##    <date>               <dbl>           <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 2017-12-29          0.200          0.00370  54.0  55.0  53.9  54.3
##  2 2017-12-28          1.60           0.0305   52.5  54.9  52.5  54.1
##  3 2017-12-27          1.10           0.0214   51.4  52.8  51.1  52.5
##  4 2017-12-26          0              0        51.5  51.7  50.5  51.4
##  5 2017-12-25          0.600          0.0118   51.0  51.7  50.8  51.4
##  6 2017-12-22          2.30           0.0474   48.2  50.8  48.0  50.8
##  7 2017-12-21         -0.500          0.0102   49.0  49.2  48.5  48.5
##  8 2017-12-20          1.25           0.0262   47.8  49.4  47.4  49.0
##  9 2017-12-19         -0.0500         0.00105  47.9  48.4  47.4  47.8
## 10 2017-12-18          1.80           0.0391   47.0  48.2  46.6  47.8
## # ... with 240 more rows, and 5 more variables: average <dbl>,
## #   adjusted <dbl>, match.volume <dbl>, reconcile.volume <dbl>,
## #   volume <dbl>
## 
## $MBB
## # A tibble: 250 x 12
##    date       change.percent1 change.percent2  open  high   low close
##    <date>               <dbl>           <dbl> <dbl> <dbl> <dbl> <dbl>
##  1 2017-12-29         -0.250          0.00975  25.8  25.8  25.4  25.4
##  2 2017-12-28          0.550          0.0219   25.2  25.6  25.0  25.6
##  3 2017-12-27          0.100          0.00400  25.0  25.4  24.9  25.1
##  4 2017-12-26          0              0        24.7  25.1  24.6  25.0
##  5 2017-12-25         -0.250          0.00990  25.3  25.6  24.9  25.0
##  6 2017-12-22          0.300          0.0120   25.0  25.3  24.8  25.2
##  7 2017-12-21          0.0500         0.00201  25.0  25.4  24.8  25.0
##  8 2017-12-20          0.350          0.0143   24.6  25.0  24.4  24.9
##  9 2017-12-19         -0.150          0.00607  24.6  24.8  24.4  24.6
## 10 2017-12-18          0.450          0.0186   24.3  24.7  24.2  24.7
## # ... with 240 more rows, and 5 more variables: average <dbl>,
## #   adjusted <dbl>, match.volume <dbl>, reconcile.volume <dbl>,
## #   volume <dbl>

4 Các hàm visualization

Sử đụng các lệnh tq_candlechart(),tq_candlechart_symbol(), tq_candlechart_ohlc() để vẽ các biểu đồ nến của các chứng khoán này. tq_candlechart_symbol() sẽ lấy trực tiếp dữ liệu chứng khoán từ internet và vẽ đồ thị thông qua việc truyền tên mã. tq_candlechart_ohlc() sẽ trả về đồ thị từ một OHLC object. tq_candlechart() là kết hợp của 2 hàm trên, có thể tự nhận biết được df_symbol là mã chứng khoán hay OHLC object để vẽ đồ thị.

4.1 Cú pháp

tq_candlechart(df_symbol, from, to, show.volume = TRUE, 
colour=c('#17BECF','#7F7F7F'),title="",...)
tq_candlechart_symbol(symbol, from, to, src = 'VND', minimal = TRUE,colour=c('#17BECF','#7F7F7F'),title=""...)
tq_candlechart_ohlc(df_ohlc,colour=c('#17BECF','#7F7F7F'),title="")
tq_candlechart_khanh(df_symbol, colour = NA, show.volume = TRUE, title = NA, xbreak=10,
                                 xformat=NA,...)

4.2 Giải thích các argument

df_symbol: Có thể là một OHLC object (là một dataframe chứa các trường open, high, low, close) hoặc character tên mã chứng khoán.
df_ohlc: Là định dạng của một OHLC object.
symbol: Định dạng character, là mã chứng khoán cần lấy.
from: Định dạng character dạng yyyy-mm-dd, là ngày bắt đầu lấy giá.
end: Định dạng character dạng yyyy-mm-dd, là ngày kết thúc lấy giá.
colour: Định dạng vector độ dài 2L qui định màu sắc của nến tăng, giảm. Mặc định là cặp màu colour=c(‘#17BECF’,‘#7F7F7F’)
title: Tiêu đề của đồ thị. Mặc định là tên oHLC object hoặc mã symbol kết hợp với start_date và end_date.
show.volume: TRUE (giá trị mặc định) sẽ show khối lượng bên dưới. FALSE sẽ không show khối lượng.
xbreak: số lượng labels của tick markers trục x được scale theo scale_x_bd.*xformat**: Định dạng của labels trục x.

Bên cạnh các hàm visualization của version 0.0.6 như tq_candlechart() và tq_candlechart_symbol() và tq_candlechart_khanh() version 0.0.7 còn tích hợp thêm những biểu đồ trong tidyquant bao gồm:

geom_barchart(): Biểu diễn xu hướng giá open, high, low, close qua từng phiên theo barchart.

geom_candlestick(): Biểu diễn xu hướng giá open, high, low, close qua từng phiên theo candlechart.

geom_ma(): Thêm các đường moving average dựa vào công thức được định nghĩa trong ma_fun. Chẳng hạn như moving average theo SMA, EMA, WMA,….

geom_bbands(): Biếu diễn đường bollinger bands dựa vào chu kì và range biến thiên được qui định theo cấp số nhân của standard deviation.

4.3 Cú pháp

geom_barchart(open,high,low,close)
geom_candlestick(open,high,low,close)
geom_bbands(ma_fun, sd, n)
geom_ma(ma_fun, n)

4.4 Giải thích các Arguments

open, high, low, close: Giá mở, cao nhất, thấp nhất và đóng cửa.

n: Số phiên được sử dụng trong các công thức tính moving average.

sd: Độ rộng range của đường bollinger bands.

ma_fun: Công thức tính moving average.

Ngoài ra trong các hàm số trên còn có những thành phân khác tương tự như ggplot2 thể hiện định dạng đồ thị như linetype, color, size,…

Ví dụ

library(VNDS)
library(quantmod)
#Vẽ biểu đồ từ một OLCH object.
VND <- tq_get('VND','2017-01-01','2018-01-01')
## #VND from 2017-01-01 to 2018-01-01 already cloned
tq_candlechart_ohlc(VND)
#Vẽ biểu đồ trực tiếp từ symbol truyền vào
tq_candlechart_symbol('VND','2017-01-01','2018-01-01')
## #VND from 2017-01-01 to 2018-01-01 already cloned
#Tự động xác định tham số truyền vào là symbol hay OLCH object để visualize
tq_candlechart(VND)
tq_candlechart('VND','2017-01-01','2018-01-01')
## #VND from 2017-01-01 to 2018-01-01 already cloned
#Thay đổi màu nến tăng giảm 
tq_candlechart('VND','2017-01-01','2018-01-01', colour = c('red','darkred'))
## #VND from 2017-01-01 to 2018-01-01 already cloned
#Loại bỏ các ngày nghỉ
tq_candlechart_khanh(VND,colour = c('red','darkred'),
                     show.volume = TRUE,
                     title = 'VND Price', xbreak=5,
                     xformat='%Y %b')
## [1] 1
## [1] 2
## [1] 3

Các biểu đồ tích hợp từ tidyquant:

Phần này các bạn xem ở chương 2 của hướng dẫn cập nhật VNDS package version 0.0.7 link sau:

http://rpubs.com/phamdinhkhanh/388499

5 Tích hợp với hệ sinh thái tidyquant

Bên cạnh các hàm đặc trưng của thị trường chứng khoán Việt Nam, VNDS hướng tới việc kế thừa các hàm phân tích của package tidyquant của hệ sinh thái tidyverse bởi 3 lý do chính:

  • tidyquant đã kế thừa lại hầu hết các hàm trong nhóm package của hệ sinh thái QFA (quantitative financial analytics package) như xts, zoo, quantmod, TTR và PerformanceAnalytics. Do đó thay vì kế thừa nhiều package rời rạc thì việc kế thừa theo tidyquant sẽ cover được nhiều chức năng phân tích hơn.

  • Đặc thù của hệ sinh thái tidyverse là làm việc với các tible object trong khi QFA là xts object và tible object là một định dạng trùng hợp với VNDS package đang sử dụng.

  • Bên cạnh kế sử dụng các hàm phân tích của QFA, kế thừa theo tidyquant sẽ tận dụng được một hệ sinh thái rộng lớn của tidyverse bao gồm các phương thức data wrangling của dplyr, visualizatioin của ggplot2 và rất nhiều các package khác đang ngày một phình to của hệ sinh thái này:

https://github.com/tidyverse

library(tidyquant)

# Các hàm của hệ sinh thái QFA được kế thừa trong tidyquant
tq_transmute_fun_options()
## $zoo
##  [1] "rollapply"          "rollapplyr"         "rollmax"           
##  [4] "rollmax.default"    "rollmaxr"           "rollmean"          
##  [7] "rollmean.default"   "rollmeanr"          "rollmedian"        
## [10] "rollmedian.default" "rollmedianr"        "rollsum"           
## [13] "rollsum.default"    "rollsumr"          
## 
## $xts
##  [1] "apply.daily"     "apply.monthly"   "apply.quarterly"
##  [4] "apply.weekly"    "apply.yearly"    "diff.xts"       
##  [7] "lag.xts"         "period.apply"    "period.max"     
## [10] "period.min"      "period.prod"     "period.sum"     
## [13] "periodicity"     "to.daily"        "to.hourly"      
## [16] "to.minutes"      "to.minutes10"    "to.minutes15"   
## [19] "to.minutes3"     "to.minutes30"    "to.minutes5"    
## [22] "to.monthly"      "to.period"       "to.quarterly"   
## [25] "to.weekly"       "to.yearly"       "to_period"      
## 
## $quantmod
##  [1] "allReturns"      "annualReturn"    "ClCl"           
##  [4] "dailyReturn"     "Delt"            "HiCl"           
##  [7] "Lag"             "LoCl"            "LoHi"           
## [10] "monthlyReturn"   "Next"            "OpCl"           
## [13] "OpHi"            "OpLo"            "OpOp"           
## [16] "periodReturn"    "quarterlyReturn" "seriesAccel"    
## [19] "seriesDecel"     "seriesDecr"      "seriesHi"       
## [22] "seriesIncr"      "seriesLo"        "weeklyReturn"   
## [25] "yearlyReturn"   
## 
## $TTR
##  [1] "adjRatios"          "ADX"                "ALMA"              
##  [4] "aroon"              "ATR"                "BBands"            
##  [7] "CCI"                "chaikinAD"          "chaikinVolatility" 
## [10] "CLV"                "CMF"                "CMO"               
## [13] "DEMA"               "DonchianChannel"    "DPO"               
## [16] "DVI"                "EMA"                "EMV"               
## [19] "EVWMA"              "GMMA"               "growth"            
## [22] "HMA"                "KST"                "lags"              
## [25] "MACD"               "MFI"                "momentum"          
## [28] "OBV"                "PBands"             "ROC"               
## [31] "rollSFM"            "RSI"                "runCor"            
## [34] "runCov"             "runMAD"             "runMax"            
## [37] "runMean"            "runMedian"          "runMin"            
## [40] "runPercentRank"     "runSD"              "runSum"            
## [43] "runVar"             "SAR"                "SMA"               
## [46] "SMI"                "SNR"                "stoch"             
## [49] "TDI"                "TRIX"               "ultimateOscillator"
## [52] "VHF"                "VMA"                "volatility"        
## [55] "VWAP"               "VWMA"               "wilderSum"         
## [58] "williamsAD"         "WMA"                "WPR"               
## [61] "ZigZag"             "ZLEMA"             
## 
## $PerformanceAnalytics
## [1] "Return.annualized"        "Return.annualized.excess"
## [3] "Return.clean"             "Return.cumulative"       
## [5] "Return.excess"            "Return.Geltner"          
## [7] "zerofill"

Các hàm chính của tidyquant gồm tq_mutate() và tq_transmute(). Tư tưởng của các hàm này giống với hàm mutate() và transmute() của dplyr (chương I link http://rpubs.com/phamdinhkhanh/381066). Trong đó:

tq_mutate: Tạo trường mới vào bảng sẵn có theo công thức được ta tự định nghĩa. *tq_transmute**: Tạo thêm trường mới vào bảng sẵn có theo công thức được ta tự định nghĩa và drop các trường cũ trong bảng.

5.1 Cú pháp

tq_mutate(data, select = NULL, mutate_fun, col_rename = NULL,
  ohlc_fun = NULL, ...)
tq_mutate_(data, select = NULL, mutate_fun, col_rename = NULL, ...)
tq_mutate_xy(data, x, y = NULL, mutate_fun, col_rename = NULL, ...)
tq_mutate_xy_(data, x, y = NULL, mutate_fun, col_rename = NULL, ...)

tq_transmute(data, select = NULL, mutate_fun, col_rename = NULL,
  ohlc_fun = NULL, ...)
tq_transmute_(data, select = NULL, mutate_fun, col_rename = NULL, ...)
tq_transmute_xy(data, x, y = NULL, mutate_fun, col_rename = NULL, ...)
tq_transmute_xy_(data, x, y = NULL, mutate_fun, col_rename = NULL, ...)

Chú ý các hàm có đuôi là _xy sẽ là những hàm có 2 input. Khi đó tham số input cho mutate_fun phải là x,y chứ không phải là select.

5.2 Giải thích argument

data: Một tibble object, chủ yếu được lấy từ hàm tq_get() (VNDS đã đồng bộ format theo tidyquant hàm này tq_get()).

select: Một hàm tương tự như dplyr::select(). Lựa chọn các chỉ số làm input cho mutate_fun. select có thể là tên trường khi có 1 trường hoặc vector vị trí các trường khi có nhiều trường. Chẳng hạn select = c(2:5) thức là sẽ lựa chọn các trường vị trí 2:5 trong dataframe làm input cho mutate_fun.

mutate_fun: Có thể là bất kì hàm số nào trong quantmod,xts,TTR được list trong danh sách tq_mutate_fun_options().

col_rename: Tên của columns mới được tạo thành từ tq_mutate hoặc tq_transmute.

x,y: Tham số được sử dụng với các hàm có đuôi _xy. Đây là các input của các hàm mutate_fun trong các hàm có 2 biến. Chẳng hạn như EVWMA là chuỗi trung bình trượt của giá theo trọng số volume.

: Các tham số khác được truyền thêm vào hàm.

5.3 Ví dụ về tích hợp VNDS và tidyquant

5.3.1 Các hàm trong TTR

Giả sử chúng ta cần phân tích chuỗi moving average trong vòng 15 và 50 ngày để tìm ra xu hướng của chuỗi chứng khoán. Thông thường sẽ sử dụng hàm SMA() từ package TTR.

Đầu tiên ta sẽ cần phải lấy dữ liệu định dạng OHLC object từ VNDS:

library(VNDS)
library(tidyquant)
VND <- VNDS::tq_get('VND','2017-01-01','2018-01-01')
## #VND from 2017-01-01 to 2018-01-01 already cloned
head(VND,10)

Kiểm tra danh sách các hàm của TTR được support trong tidyquant đã bao gồm SMA:

tq_mutate_fun_options()$TTR
##  [1] "adjRatios"          "ADX"                "ALMA"              
##  [4] "aroon"              "ATR"                "BBands"            
##  [7] "CCI"                "chaikinAD"          "chaikinVolatility" 
## [10] "CLV"                "CMF"                "CMO"               
## [13] "DEMA"               "DonchianChannel"    "DPO"               
## [16] "DVI"                "EMA"                "EMV"               
## [19] "EVWMA"              "GMMA"               "growth"            
## [22] "HMA"                "KST"                "lags"              
## [25] "MACD"               "MFI"                "momentum"          
## [28] "OBV"                "PBands"             "ROC"               
## [31] "rollSFM"            "RSI"                "runCor"            
## [34] "runCov"             "runMAD"             "runMax"            
## [37] "runMean"            "runMedian"          "runMin"            
## [40] "runPercentRank"     "runSD"              "runSum"            
## [43] "runVar"             "SAR"                "SMA"               
## [46] "SMI"                "SNR"                "stoch"             
## [49] "TDI"                "TRIX"               "ultimateOscillator"
## [52] "VHF"                "VMA"                "volatility"        
## [55] "VWAP"               "VWMA"               "wilderSum"         
## [58] "williamsAD"         "WMA"                "WPR"               
## [61] "ZigZag"             "ZLEMA"

Chúng ta thấy đã bao gồm SMA ở vị trí thứ 45.

dụng hàm SMA() truyền vào mutate_fun để tính toán moving average cho giá đóng cửa với chu kì là n = 15 ngày. Chúng ta sẽ cần truyền trường cần tính SMA vào select và hàm số cần tính vào SMA. Một điểm đặc biệt là chúng ta sử dụng nhân từ pipe nhưng không cần import dplyr bởi tidyquant gọi sẵn nhân tử này.

VND %>% tq_mutate(select = close, 
                  mutate_fun  = SMA, 
                  n = 15) %>% tail(10)

Khi chúng ta muốn moving average cho chuỗi giá điều chỉnh thì chỉ cần đưa vào argument select

VND %>% tq_mutate(select = adjusted, 
                  mutate_fun = SMA, 
                  n = 50 ) %>% tail(15)

Tính chỉ số Bolinger band cho chuỗi close:

VND %>% tq_mutate(select = adjusted, 
                  mutate_fun = BBands, 
                  n = 50 ) %>% tail(15)

tính trung bình trượt có trọng EVWMA theo khối lượng của giá

VND %>% tq_mutate_xy(x=adjusted,y=volume, 
                  mutate_fun = EVWMA, 
                  n = 50, col_rename = 'EVWMA') %>% tail(15)

Tính volatility cho chuỗi close

#Dung lenh help để đọc công thức của volatility
#help("volatility")
#Tính volatility cho 260 phiên, sử dụng phương pháp close.
VND %>% tq_mutate(select = c(5),
                  #c(5) là vị trí của close trong dataframe, cũng có thế viết select = close
                  mutate_fun = volatility, 
                  n = 10, calc = "close", N = 260,
                  col_rename = "Volatility") %>% tail(15)
#Tính volatility cho 260 phiên, sử dụng phương pháp garman.klass. Xem ccoong thức trong #help("volatility") sẽ thấy hàm này sử dụng cả 4 chỉ số ohlc nên phải lựa chọn c(2:5)
VND %>% tq_mutate(select = c(2:5),
                  #c(5) là vị trí của close trong dataframe
                  mutate_fun = volatility, 
                  n = 10, calc = "garman.klass", N = 260,
                  col_rename = "Volatility") %>% tail(15)
#Ngoài ra còn có các phương pháp khác như: parkinson, rogers.satchell, Garman and Klass - Yang and Zhang, Yang and Zhang. Khi mutate_fun cần sử dụng công thức nào thì truyền vị trí vào select.

Tính Bollinger bands của chuỗi close

#Kiểm tra công thức Bollinger bands
#help("BBands")
#Tính bollinger bands với chu kì moving average = 20 và độ rộng standard deviation = 2
VND %>% tq_mutate(select = close,
                  n = 20,
                  mutate_fun = BBands) %>% tail(15)

5.3.2 Các hàm trong xts

#Danh sách các hàm hỗ trợ:
tq_mutate_fun_options()$xts
##  [1] "apply.daily"     "apply.monthly"   "apply.quarterly"
##  [4] "apply.weekly"    "apply.yearly"    "diff.xts"       
##  [7] "lag.xts"         "period.apply"    "period.max"     
## [10] "period.min"      "period.prod"     "period.sum"     
## [13] "periodicity"     "to.daily"        "to.hourly"      
## [16] "to.minutes"      "to.minutes10"    "to.minutes15"   
## [19] "to.minutes3"     "to.minutes30"    "to.minutes5"    
## [22] "to.monthly"      "to.period"       "to.quarterly"   
## [25] "to.weekly"       "to.yearly"       "to_period"

Trong đó chúng ta chia thành 2 nhóm chính:

  • Period apply function: Áp dụng các hàm thống kê theo time segment

  • Các hàm này được ứng dụng theo time segment (chẳng hạn như tính max, min, mean, … theo các time segment daily,weekly, monthly, quarterly, yearly).

  • Cú pháp: apply.daily(x, FUN, …). Trong đó FUN là hàm số áp dụng (min,max,mean,…)

  • Trường hợp chưa xác định periodic sử dụng hàm: period.apply(x,INDEX,FUN,…). INDEX là điểm endpoints đánh dấu cho vị trí kết thúc chu kì. Chẳng hạn với chuỗi weekly thì INDEX là chuỗi 0,7,14,21,28,… cách nhau 7 ngày (nếu weekly tính cả thứ 7,chủ nhật).

  • Các lựa chọn sẵn có bao gồm: apply.daily, weekly, monthly, quarterly, yearly.

  • To-period apply function: Chuyển đổi dữ liệu theo chu kì

  • Chuyển từ chuỗi có chu kì nhỏ sang các chuỗi có chu kì lớn hơn (ví dụ convert chu kì daily to monthly).

  • Cú pháp: to.period(x, period = ‘months’, k = 1, indexAt, name = NULL, OHLC = TRUE, …).Argument period xác định chu kì (minutes, hourly,daily, weekly, monthly, quarterly, yearly), argument k xác định step của chi kì trong chuỗi, indexAt là định dạng của index sau khi chuỗi mới được trả về (các options: ‘yearmon’, ‘yearqtr’, ‘firstof’, ‘lastof’, ‘startof’, or ‘endof’ tương ứng với tháng, quí, đầu chu kì, cuối chu kì, thời điểm bắt đầu trong data ứng với chu kì,thời điểm kết thúc trong data ứng với chu kì).

  • Các lựa chọn gồm to.minutes, hourly, daily, weekly, monthly, quarterly, yearly.

Chú ý quan trọng: Cấu trúc trả về là khác nhau đối với hàm to.period và to.monthly (to.weekly, to.quarterly,…). to.period trả về một ngày trong khi to.months trả về kí tự dạng MMM YYYY. Tốt nhất là sử dụng to.period khi làm việc với time-series thông qua package lubridate.

Ví dụ

#Chuyển chuỗi từ ngày sang tháng
#help('to.monthly')
VND %>% tq_transmute(select = c(2:5),
                  mutate_fun = to.period,
                  period = 'months') %>% tail(5)
#Lấy giá trung bình trong tháng
VND %>% tq_transmute(select = c(2:5),
                  mutate_fun = apply.monthly,
                  period = 'months',
                  FUN = mean) %>% tail(5)

5.3.3 Các hàm trong quantmod

#Danh sách các hàm hỗ trợ:
tq_mutate_fun_options()$quantmod
##  [1] "allReturns"      "annualReturn"    "ClCl"           
##  [4] "dailyReturn"     "Delt"            "HiCl"           
##  [7] "Lag"             "LoCl"            "LoHi"           
## [10] "monthlyReturn"   "Next"            "OpCl"           
## [13] "OpHi"            "OpLo"            "OpOp"           
## [16] "periodReturn"    "quarterlyReturn" "seriesAccel"    
## [19] "seriesDecel"     "seriesDecr"      "seriesHi"       
## [22] "seriesIncr"      "seriesLo"        "weeklyReturn"   
## [25] "yearlyReturn"
  • Các hàm tăng extract và transfrorm OHLC object

  • Lớp các hàm tính chênh lệch giá trong phiên: ClCl, HiCl, LoCl, LoHi, OpCl, OpHi, OpLo, OpOp. Chẳng hạn khi sử dụng hàm OpCl(OHLC object) kết quả trả về là tăng trưởng trong ngày = Close/Open - 1.

  • Lớp các hàm Extract data: Op, Hi, Lo, Cl. Các hàm này sẽ lấy dữ liệu với các cột ứng với Open, High, Low, Close.

  • TÍnh sai phân (Delt) và trễ (Lag):

  • Delt: Là sai phân của các chuỗi theo thời gian có thể sử dụng phương pháp chia số học hoặc log. Delt(x1, x2 = NULL, k = 0, type = c(“arithmetic”, “log”))

  • Lag/Next: Nhân tử trễ/ sớm tương ứng với Lag(x, k = 1) / Next: Next(x, k = 1) (Chúng ta cũng có thể sử dplyr::lag và dplyr::lead)

  • Period Return:

  • Trả về lợi suất arithmetic hoặc logarithmic cho các chu kì khác nhau như daily, weekly, monthly, quarterly, and yearly.

Cú pháp: periodReturn(x, period = ‘monthly’, subset = NULL, type = ‘arithmetic’, leading = TRUE, …).

  • Series Functions:

  • Trả về mô tả của chuỗi. Các lựa chọn bao gồm increases/decreases, acceleration/deceleration, and hi/low.

  • Cú pháp: seriesHi(x), seriesIncr(x, thresh = 0, diff. = 1L), seriesAccel(x)

Ví dụ

Tính lợi nhuận theo tháng của VND

#help("periodReturn")
VND %>% tq_transmute(select = close,
                  mutate_fun = periodReturn,
                  period = 'monthly',
                  type = 'log') %>% tail(5)

Tính trễ của VND

VND %>% tq_transmute(select = close,
                  mutate_fun = Lag,
                  k = 1) %>% tail(5)
# Nhưng tốt nhất là sử dụng hàm lag của dplyr
VND %>% transmute(Lag.1 = lag(close, n = 1L)) %>% tail(5)

Tính tăng/giảm của chuỗi VND

VND %>% tq_mutate(select = close,
                  mutate_fun = seriesIncr) %>% tail(5)

5.3.4 các hàm trong PerformanceAnalytics

# Danh sách cá hàm được hỗ trợ
tq_transmute_fun_options()$PerformanceAnalytics 
## [1] "Return.annualized"        "Return.annualized.excess"
## [3] "Return.clean"             "Return.cumulative"       
## [5] "Return.excess"            "Return.Geltner"          
## [7] "zerofill"

Các hàm của PerformanceAnalytics chủ yếu được sử dụng để tính toán các returns:

  • Return.annualized: Tính lợi suất theo năm.

  • Return.annualized.excess: Tính lợi suất theo năm chênh lệch giữa 2 giai đoạn.

  • Return.clean: Tính return sau khi loại bỏ các outlier khỏi return theo 3 phương pháp chính gồm: none, boudt, geltner

  • Return.excess: Loại bỏ các risk-free rate từ return của yield returns

  • zerofill: Replace các giá trị NA bằng zeros.

Ví dụ

Tính lợi suất của VND theo năm

#help("Return.annualized")

VND %>% tq_transmute(
                  mutate_fun = Return.annualized,
                  scale = 252,
                  geometric = FALSE)
##                       open     high      low    close    volume adjusted
## Annualized Return 4737.446 4817.861 4663.998 4744.822 174370927 3531.398

Tính lợi suất của VND theo năm clean 95% outliear

VND %>% tq_transmute(select = close,
                  mutate_fun = Return.clean,
                  alpha = 0.05,
                  method = c("geltner")) %>% tail(5)