Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/phamdinhkhanh/vnquant
VietNam Data Stock Market Price
https://github.com/phamdinhkhanh/vnquant
pandas python stock stock-market trading vietnamese-stock-price visualization
Last synced: 4 days ago
JSON representation
VietNam Data Stock Market Price
- Host: GitHub
- URL: https://github.com/phamdinhkhanh/vnquant
- Owner: phamdinhkhanh
- Created: 2019-02-22T14:49:55.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2024-11-30T01:15:03.000Z (about 2 months ago)
- Last Synced: 2025-01-09T07:04:53.592Z (11 days ago)
- Topics: pandas, python, stock, stock-market, trading, vietnamese-stock-price, visualization
- Language: Python
- Homepage:
- Size: 1.09 MB
- Stars: 393
- Watchers: 28
- Forks: 184
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# vnquant package
## 1. Introduction
This project offers comprehensive financial information and advanced visualization tools for the Vietnam stock market to researchers. Specifically, it provides extensive data, including historical prices, finacial, business, and cashflow reports for individual or multiple symbols over the same period. This enables investors to conduct in-depth quantitative analyses and forecasting. Additionally, the available stock prices can be utilized to create visualizations with advanced metrics such as Bollinger Bands and Relative Strength Index (RSI), aiding in identifying optimal buying and selling points.## 2. Setting:
### 2.1. Setup on local machine
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.### 2.2. Google colab
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](https://drive.google.com/file/d/10KNNA4sZTk2dKW6wvv3tLMivgQDgd-5-/view?usp=sharing) for detail.
## 3. Visualization: (0.0.2)
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.```{python}
import vnquant.plot as pl
pl.vnquant_candle_stick(data,
title=None,
xlab='Date', ylab='Price',
start_date=None, end_date=None,
colors=['blue', 'red'],
width=800, height=600,
show_advanced=[],
data_source='cafe',
**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. If data is a symbol, title is going to be created based on symbol and cloned datetime interval.
* `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 800px
* `height`: height of plot frame. Default 600px
* `show_advanced`: list of advanced stock index to show up. Each element belongs to ['volume', 'macd', 'rsi'].
* `data_source`: invalid when use symbol intead of data frame. Source to clone data, 'VND' or 'CAFE'.### 3.1. Visualization from source 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:
```{python}
from vnquant import plot as plt
plt.vnquant_candle_stick(
data='VND',
title='VND symbol from 2019-09-01 to 2019-11-01',
xlab='Date', ylab='Price',
start_date='2019-09-01',
end_date='2019-11-01',
data_source='CAFE',
show_advanced=['volume', 'macd', 'rsi'],
width=1600,
height=800
)
```You can suppress volume by set up show_vol=False. Result as below:
### 3.2. Visualization from data frame
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'] or ['open','high','low','close','volume_match'] and index is DateTime. In case your data frame have columns with the same function, you should accordingly rename its.```{python}
from vnquant import plot as pltplt.vnquant_candle_stick(
data = data,
title='Your data',
ylab='Date', xlab='Price',
show_advanced=['volume', 'macd', 'rsi']
)
```To check whether data_vnd frame is OHLC or OHLCV type you can try:
```{python}
from vnquant import utils
print(utils._isOHLC(data_vnd))
print(utils._isOHLCV(data_vnd))
```Return `True` mean data frame is adapted types.
## 4. Clone Stock Prices: (0.1.2)
You can load the prices of one or more stocks in specific time interval according to syntax as below.
```{python}
import vnquant.data as dtloader = dt.DataLoader(
symbols: Union[str, list],
start: Optional[Union[str, datetime]]=None,
end: Optional[Union[str, datetime]]=None,
data_source: str='CAFE',
minimal: bool=True,
table_style: str='levels')
```For example:
```
loader = DataLoader(
symbols='VND',
start='2018-01-10', end='2018-02-15',
data_source='CAFE',
minimal=True,
table_style='levels')loader.download()
```**Arguments**
* `symbols` (Union[str, list]): A single stock symbol as a string or multiple stock symbols as a list of strings. The stock symbols regularly include 3 upper case letters except several special index such as: `E1VFVN30, FUEVN100` for both data_source `cafe and vnd`, `HNX-INDEX, HNX30-INDEX, UPCOM-INDEX` for `cafe`.
* `start` (Optional[Union[str, datetime]], default=None): The start date for the data. Can be a string in the format 'YYYY-MM-DD' or a datetime object.
* `end` (Optional[Union[str, datetime]], default=None): The end date for the data. Can be a string in the format 'YYYY-MM-DD' or a datetime object.
* `data_source` (str, default='CAFE'): The data source to be used for downloading stock data. Currently supports 'CAFE' and 'VND'.
* `minimal` (bool, default=True): If True, returns a minimal set of columns. If False, returns all available columns.
* `table_style` (str, default='levels'): The style of the returned table. Options are 'levels', 'prefix', and 'stack'.
- 'levels': Returns the DataFrame with multi-level colums of symbols and list of basic arguments like `['high', 'low', 'open', 'close', 'adjust', 'volume', 'value']`
- 'prefix': Adds the stock symbol as a prefix to each column name.
- 'stack': Returns the DataFrame and add one column 'code' to clarify each record belong to what stock symbol.### 4.1. Clone one stock:
There are three return formats supported in the latest version 0.1.2.
- Multiple-level: It will return a table with mutilple column indexes with two main levels Arguments (including many basical stock indexes) and Symbols (including list of stock codes).
```{python}
import vnquant.data as dt
loader = dt.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
- Prefix: The stock code is appended before each index to become a column name.
```{python}
import vnquant.data as dt
loader = dt.DataLoader(['VND', 'FPT'], '2018-02-02','2018-04-02', table_style='prefix')
data = loader.download()
data.head()
```
VND_code
FPT_code
VND_high
FPT_high
VND_low
FPT_low
VND_open
FPT_open
VND_close
FPT_close
VND_adjust
FPT_adjust
VND_volume_match
FPT_volume_match
VND_value_match
FPT_value_match
date
2018-04-02
VND
FPT
29.80
61.7
29.10
61.0
29.10
61.5
29.55
61.5
6.52
21.98
2141980.0
2194820.0
6.320100e+10
1.347410e+11
2018-03-30
VND
FPT
29.50
61.3
28.75
59.4
29.00
59.6
29.05
60.7
6.41
21.69
1688000.0
2434830.0
4.925300e+10
1.474940e+11
2018-03-29
VND
FPT
29.00
59.7
28.25
59.0
28.50
59.4
29.00
59.5
6.40
21.26
1294580.0
827280.0
3.717900e+10
4.915900e+10
2018-03-28
VND
FPT
28.65
59.4
27.60
58.8
27.75
59.1
28.65
58.9
6.32
21.05
1429910.0
660440.0
4.012300e+10
3.901500e+10
2018-03-27
VND
FPT
28.55
60.1
27.75
59.0
28.55
59.9
28.00
59.5
6.18
21.26
2589800.0
993260.0
7.289400e+10
5.916600e+10
- Stack: It will add one more column named code to demonstrate the stock symbols.
```{python}
import vnquant.data as dt
loader = dt.DataLoader(['VND', 'FPT'], '2018-02-02','2018-04-02', table_style='stack')
data = loader.download()
data.head(4)
```
code
high
low
open
close
adjust
volume_match
value_match
date
2018-04-02
FPT
61.7
61.00
61.5
61.50
21.98
2194820.0
1.347410e+11
2018-04-02
VND
29.8
29.10
29.1
29.55
6.52
2141980.0
6.320100e+10
2018-03-30
FPT
61.3
59.40
59.6
60.70
21.69
2434830.0
1.474940e+11
2018-03-30
VND
29.5
28.75
29.0
29.05
6.41
1688000.0
4.925300e+10
### 4.2. Clone more stocks
We need to set up symbols as a list.
```{python}
loader = dt.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
### 4.3. Clone full information:
To get more the others information about `volume` and `value` beside basical fields, we need to declare `minimal=False` (default `True`).
```{python}
loader = dt.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.# 5. Get finance, cashflow, business and basic index reports (0.0.3)
In version 0.0.3 you can download finance, cashflow, business and basic index reports with class `vnquant.data.FinanceLoader`. Currently, we only support you clone one symbol per each time. To use this class you import as bellow:
```
import vnquant.data as dt
loader = dt.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 format `yyyy-mm-dd`.
* `end`: end date time with format `yyyy-mm-dd`.## 5.1. Get finance report
Function `get_finan_report()` will help you get these finance indexes. For example:
```
import vnquant.data as dt
loader = dt.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
## 5.2. Get business report
To get business report of each symbol, you use `get_business_report()` function as below:
```
import vnquant.data as dt
loader = dt.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
## 5.3. Get cashflow report
Function `get_cashflow_report()` shall support to clone cashflow report:
```
import vnquant.data as dt
loader = dt.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
## 5.4. Get basic index report
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.data as dt
loader = dt.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