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.
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.
tq_balancesheet(symbols, endYear, n, period)
tq_business_report(symbols, endYear, n, period)
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ự.
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:
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.
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.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.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() và 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’).
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,...)
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>
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ị.
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,...)
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.
geom_barchart(open,high,low,close)
geom_candlestick(open,high,low,close)
geom_bbands(ma_fun, sd, n)
geom_ma(ma_fun, n)
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:
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:
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.
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.
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.
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)
#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)
#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)
# 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)