Note: Currently, prices on VnDirect source are supported again. There are two options data source for you:
- cafef: Set data_source='CAFE'
- vndirect: set data_source='VND'
This project provide the financial information and useful visualization instrument about Vietnam stock market to researcher. Particularly, there are many aspect of data relating to any stock being able to store and clone. The official version are built on both machine learning language Python and R.
This project is in developing process, So it is only distributed on github channel. To install requiring you open the command line and type the below commands:
git clone https://github.com/phamdinhkhanh/vnquant
cd vnquant
python setup.py install
you must install git command line in your computer to run above command.
To use package in google colab, you have to mount point to google drive folder first and setup the same as in local machine. Reference to google colab - vnquant example for detail.
from version 0.0.2 vnquant enable to you visualize stock price from any symbols code at source cafe or vnd or pandas data frame which have OHLC type. OHLC type meaning that your data frame columns is enough ['open', 'high', 'low', 'close'] list. Below is general syntax of visualization function supported on vnquant package.
from vnquant import Plot
Plot._vnquant_candle_stick(data,
title=None,
xlab='Date', ylab='Price',
start_date=None, end_date=None,
colors=['blue', 'red'],
width=800, height=600,
show_vol=True,
data_source='cafe', # not support vnd
**kargs)
Arguments
data
: is pandas data frame of OHLC type or OHLCV type, or string symbol of any VietNam stock index. in case symbol, data is automatically cloned from open source.title
: General title of candle stick chart. In case data is symbol, title going to be default according to cloned data.xlab
: x label. Default Date.ylab
: y label. Default Price.start_date
: start date. Default None. Must to be declared when data is symbol.end_date
: end date. Default None. Must to be declared when data is symbol.colors
: list colors defines increasing and decreasing color stick candle in order.width
: with of plot frame. Default 800pxheight
: height of plot frame. Default 600pxshow_vol
: is show volume of stock price?data_source
: invalid when use symbol intead of data frame. Source to clone data, 'VND' or 'CAFE'.
In this way, you can visualize stock price clone from VND or CAFE source by pass symbol, start_date, end_date into module as below:
from vnquant import Plot
Plot._vnquant_candle_stick(data='VND',
title='VND stock price data and volume from 2019-09-01 to 2019-11-01',
xlab='Date', ylab='Price',
start_date='2019-09-01',
end_date='2019-11-01',
show_vol=True)
You can suppress volume by set up show_vol=False. Result as below:
Data frame must be OHLC or OHLCV type. OHLC type when it includes ['open','high','low','close'] and OHLCV is ['open','high','low','close','volume']. In case your data frame have columns with the same function, you should accordingly rename its.
from vnquant import Plot
Plot._vnquant_candle_stick(data = data_vnd,
title='Your data',
ylab='Date', xlab='Price',
show_vol=True)
To check whether data_vnd frame is OHLC or OHLCV type you can try:
from vnquant import utils
print(utils._isOHLC(data_vnd))
print(utils._isOHLCV(data_vnd))
Return True
mean data frame is adapted types.
You can load the prices of one or more stocks in specific time interval according to syntax as below.
from vnquant.DataLoader import DataLoader
DataLoader(symbols="VND",
start="2018-01-10",
end="2018-02-15",
minimal=True,
data_source="cafe")
Arguments
symbols
: a string or list of strings indicate the stock names. The stock symbols in regular include 3 upper case letters except several special index such as:E1VFVN30, VN100-INDEX, HNX-INDEX, HNX30-INDEX, UPCOM-INDEX
in case yourdata_source = "cafe"
andVN30, HNX30, UPCOM
in case yourdata_source = "vnd"
.start
: start date time with formatyyyy-mm-dd
.end
: end date time with formatyyyy-mm-dd
.minimal
: default is True, we only clonehigh, low, open, close, adjust price, volume
of stocks. In contrast, more information is added, for examplevolumn_reconcile, volumn_match,...
data_source
: the source to clone the stock prices. Currently, there two main resources areVndirect
andCafef
showed bydata_source = vnd
andcafe
, respectively. The default isvnd
.
import vnquant.DataLoader as web
loader = web.DataLoader('VND', '2018-02-02','2018-04-02')
data = loader.download()
data.head()
Attributes | high | low | open | close | avg | volume |
---|---|---|---|---|---|---|
Symbols | VND | VND | VND | VND | VND | VND |
date | ||||||
2018-02-02 | 28.95 | 27.60 | 28.5 | 28.95 | 28.28 | 1700670.0 |
2018-02-05 | 28.45 | 26.95 | 28.1 | 26.95 | 27.68 | 2150120.0 |
2018-02-06 | 26.95 | 25.10 | 25.1 | 26.40 | 25.25 | 3129690.0 |
2018-02-07 | 28.20 | 27.50 | 27.5 | 28.20 | 27.99 | 1985120.0 |
2018-02-08 | 29.20 | 27.70 | 28.0 | 28.00 | 28.47 | 943260.0 |
We need to set up symbols as a list.
loader = web.DataLoader(symbols=["VND", "VCB"], start="2018-01-10", end="2018-02-15", minimal=True, data_source="cafe")
data = loader.download()
data.head()
Attributes | high | low | open | close | avg | volume | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Symbols | VND | VCB | VND | VCB | VND | VCB | VND | VCB | VND | VCB | VND | VCB |
date | ||||||||||||
2018-01-10 | 27.75 | 59.2 | 27.10 | 57.3 | 27.55 | 58.3 | 27.50 | 58.0 | 27.52 | 58.08 | 1466780.0 | 2842830.0 |
2018-01-11 | 27.50 | 58.8 | 26.80 | 57.2 | 27.30 | 57.5 | 27.20 | 58.8 | 27.21 | 58.04 | 1260720.0 | 1766240.0 |
2018-01-12 | 28.20 | 59.4 | 27.35 | 58.0 | 27.45 | 58.8 | 27.60 | 58.0 | 27.76 | 58.63 | 1730170.0 | 2525840.0 |
2018-01-15 | 28.40 | 60.0 | 27.35 | 57.0 | 27.60 | 58.0 | 28.25 | 60.0 | 28.11 | 58.76 | 1273740.0 | 2217420.0 |
2018-01-16 | 28.40 | 60.3 | 27.90 | 58.8 | 28.10 | 59.3 | 28.25 | 60.0 | 28.14 | 59.64 | 1163350.0 | 2218380.0 |
To get more the others information about volume
and value
beside basical fields, we need to declare minimal=False
(default True
).
loader = web.DataLoader(symbols=["VND"], start="2018-01-10", end="2018-02-15", minimal=False)
data = loader.download()
data.head()
Attributes | change_perc1 | change_perc2 | open | high | low | close | avg | volume_match | volume_reconcile | volume |
---|---|---|---|---|---|---|---|---|---|---|
Symbols | VND | VND | VND | VND | VND | VND | VND | VND | VND | VND |
date | ||||||||||
2018-01-10 | 0.00 | 0.000000 | 27.55 | 27.75 | 27.10 | 27.50 | 27.52 | 1382780.0 | 84000.0 | 1466780.0 |
2018-01-11 | -0.30 | 0.010909 | 27.30 | 27.50 | 26.80 | 27.20 | 27.21 | 1260720.0 | 0.0 | 1260720.0 |
2018-01-12 | 0.40 | 0.014706 | 27.45 | 28.20 | 27.35 | 27.60 | 27.76 | 1730170.0 | 0.0 | 1730170.0 |
2018-01-15 | 0.65 | 0.023551 | 27.60 | 28.40 | 27.35 | 28.25 | 28.11 | 1273740.0 | 0.0 | 1273740.0 |
2018-01-16 | 0.00 | 0.000000 | 28.10 | 28.40 | 27.90 | 28.25 | 28.14 | 1077350.0 | 86000.0 | 1163350.0 |
Through this project, i hope you make your work being more covinient and easy by applying them. Though try hard, but there are many drawback, kindly comment and send me feed back to implement my project.
In version 0.0.3 you can download finance, cashflow, business and basic index reports with class vnquant.DataLoader.FinanceLoader
. Currently, we only support you clone one symbol per each time. To use this class you import as bellow:
import vnquant.DataLoader as dl
loader = dl.FinanceLoader(symbol = 'VND',
start = '2019-06-02',
end = '2021-12-31')
Arguments
symbol
: a string indicates the stock name. The stock symbol in regular includes 3 upper case letters.start
: start date time with formatyyyy-mm-dd
.end
: end date time with formatyyyy-mm-dd
.
Function get_finan_report()
will help you get these finance indexes. For example:
import vnquant.DataLoader as dl
loader = dl.FinanceLoader('VND', '2019-06-02','2021-12-31')
data_finan = loader.get_finan_report()
data_finan.head()
2021-06 | 2021-03 | 2020-12 | 2020-09 | 2020-06 | 2020-03 | 2019-12 | 2019-09 | 2019-06 | |
---|---|---|---|---|---|---|---|---|---|
index | |||||||||
Tài sản ngắn hạn | 21351441834807 | 17347112129802 | 12793253609747 | 11585099253268 | 11479005695043 | 10851511570130 | 11239350733660 | 11059560981795 | 10590145635691 |
Tài sản tài chính ngắn hạn | 21339567743512 | 17332349291032 | 12770938291296 | 11570420145910 | 11465268994352 | 10826493556341 | 11222476803929 | 11036102039564 | 10550582164047 |
Tiền và các khoản tương đương tiền | 1153684350307 | 590663521250 | 595786368281 | 175314778804 | 185532378242 | 368330609085 | 613548205346 | 298144380199 | 413837038988 |
Tiền | 778884350307 | 460708745512 | 509970753138 | 141314778804 | 148847077857 | 346330609085 | 611548205346 | 158744380199 | 252137038988 |
Tiền gửi của người đầu tư về giao dịch chứng khoán | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
To get business report of each symbol, you use get_business_report()
function as below:
import vnquant.DataLoader as dl
loader = dl.FinanceLoader('VND', '2019-06-02','2021-12-31', data_source='VND', minimal=True)
data_bus = loader.get_business_report()
data_bus.head()
2021-06 | 2021-03 | 2020-12 | 2020-09 | 2020-06 | 2020-03 | 2019-12 | 2019-09 | 2019-06 | |
---|---|---|---|---|---|---|---|---|---|
index | |||||||||
Lãi từ các tài sản tài chính ghi nhận thông qua lãi/lỗ ( FVTPL) | 384484114460 | 446903481873 | 348445083732 | 177846582328 | 126873424297 | 112699410946 | 69471930133 | 100788177914 | 96112568053 |
Lãi bán các tài sản tài chính PVTPL | 187329856826 | 258061271830 | 321502700913 | 126020773731 | 120870780627 | 121996865833 | 77348559746 | 70332267851 | 62535937574 |
Chênh lệch tăng đánh giá lại các TSTC thông qua lãi/lỗ | 192578271638 | 188425144043 | -8160509655 | 33713693597 | -848309517 | -10832424389 | -13633761575 | 28457177453 | 15139720013 |
Cổ tức, tiền lãi phát sinh từ tài sản tài chính PVTPL | 4575985996 | 417066000 | 35102892474 | 18112115000 | 6850953187 | 1534969502 | 5757131962 | 1998732610 | 18436910466 |
Lãi từ các khoản đầu tư nắm giữ đến ngày đáo hạn | 24948288940 | 108779296202 | 98753552528 | 84000482631 | 84108399683 | 105941161289 | 107029644615 | 100310037665 | 120061106620 |
Function get_cashflow_report()
shall support to clone cashflow report:
import vnquant.DataLoader as dl
loader = dl.FinanceLoader('VND', '2019-06-02','2021-12-31', data_source='VND', minimal=True)
data_cash = loader.get_cashflow_report()
data_cash.head()
2021-06 | 2021-03 | 2020-09 | 2020-06 | 2020-03 | 2019-12 | 2019-09 | 2019-06 | |
---|---|---|---|---|---|---|---|---|
index | ||||||||
Điều chỉnh cho các khoản | 117772457799 | 102102918502 | 39938806717 | -2179656198 | 189614451308 | 77119446501 | 115901816119 | 310400347299 |
Chi phí khấu hao tài sản cố định | 7121178573 | 5117724702 | 5200320730 | 4817922370 | 5082314726 | 4956658731 | 5024428635 | 5218835903 |
Phân bổ lợi thế thương mại | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Dự phòng giảm giá các khoản đầu tư ngắn hạn, dài hạn | 15351994938 | 7673582615 | -50406427024 | -97302010585 | 74769599906 | -47666085953 | -1958363587 | 194803059759 |
Lãi, lỗ chênh lệch tỷ giá hối đoái chưa thực hiện | 2291430861 | 0 | -855383375 | -855383375 | 0 | -535741671 | -136318575 | 136318575 |
This function provide to you basic and important index of each symbol such as: ROA, ROE, Net Profit Marget, Net Revenue Growth, Profit After tax Growth
import vnquant.DataLoader as dl
loader = dl.FinanceLoader('VND', '2019-06-02','2021-12-31', data_source='VND', minimal=True)
data_basic = loader.get_basic_index()
data_basic.head()
2020-12 | 2019-12 | |
---|---|---|
index | ||
Profit After Tax Growth (YoY) | 0.810405 | 0.025519 |
Net Revenue Growth (YoY) | 0.421240 | -0.023797 |
Net Profit Margin (Yr) | 0.324553 | 0.254787 |
ROE last 4 quarters | 0.195974 | 0.123374 |
ROA last 4 quarters | 0.053917 | 0.033224 |