Skip to content

Commit

Permalink
Country code assigned ('KR', 'US', 'CN', 'JP')
Browse files Browse the repository at this point in the history
  • Loading branch information
FinanceData committed Aug 8, 2018
1 parent ef66943 commit e1b52a4
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 42 deletions.
85 changes: 51 additions & 34 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,32 +1,26 @@

# FinanceDataReader
Financial price data reader (an alternative to google finance and yahoo finance in pandas-datareader)

https://github.com/FinanceData/FinanceDataReader
Financial price data reader (an alternative to Google/Yahoo finance in pandas-datareader)


# Overview
금융 데이터를 다루는데 가장 기본이 되는 데이터는 거래소별 전체 종목 코드와 가격 데이터 이다.

[pandas-datareader](https://pandas-datareader.readthedocs.io) 는 잘 구성된 시계열 데이터 수집 라이브러리로 사용이 간편하고 다양한 시계열 데이터를 수집할 수 있다는 장점이 있다. (현재 버전 : pandas_datareader 0.6.0) 하지만, 거래소별(KRX, NASDAQ, NYSE 등) 전체 종목 코드(ticker symbol)를 가져오는 기능이 없으며, 야후 파이낸스가 더 이상지원되지 않고(deprecated), 구글 파이낸스는 UNSTABLE_WARNING + RemoteDataError 를 낸다.

FinanceDataReader는 [pandas-datareader](https://pandas-datareader.readthedocs.io) 를 대체하기 보다 보완하기 위한 목적으로 만들어졌다. 주요한 기능은 다음과 같다.

* 해외주식 가격 데이터: AAPL(애플), AMZN(아마존), GOOG(구글) 등
* 국내주식 가격 데이터: 005930(삼성전자), 091990(셀트리온헬스케어) 등
* 각종 지수: KS11(코스피지수), KQ11(코스닥지수), DJI(다우지수), IXIC(나스닥 지수), US500(S&P 5000)
* 환율 데이터: USD/KRX (원달러 환율), USD/EUR(달러당 유로화 환율), CNY/KRW: 위엔화 원화 환율
* 암호화폐 가격: BTC/USD (비트코인 달러 가격, Bitfinex), BTC/KRW (비트코인 원화 가격, 빗썸)
* 거래소별 전체 종목 코드: KRX (KOSPI, KODAQ, KONEX), NASDAQ, NYSE, AMEX, S&P 500 종목
The most basic data of market data is stock symbols and price data. [pandas-datareader](https://pandas-datareader.readthedocs.io) is one of the most well-constructed library for market data.
But, Yahoo/Google Finance deprecated (or UNSTABLE, Raises a RemoteDataError)

FinanceDataReader 심볼 리스트는 다음 문서에 정리되어 있다. (빠른 참조)
* http://nbviewer.jupyter.org/540b4c74a898bbe1af8715926eed24f8
The FinanceDataReader is intended to complement rather than replacement [pandas-datareader](https://pandas-datareader.readthedocs.io).
The main functions are as follows.

* Stock price: AAPL, AMZN, GOOG ...
* Stock price: 005930(Samsung), 091990(Celltrion Healthcare) ...
* Indexes: KOSPI, KOSDAQ, DJI, IXIC, US500(S&P 500) ...
* Exchanges: USD/KRX, USD/EUR, CNY/KRW ...
* Cryptocurrency: BTC/USD (Bitfinex), BTC/KRW (Bithumb)
* Symbols lists: KRX (KOSPI, KODAQ, KONEX), NASDAQ, NYSE, AMEX and S&P 500

# Install

```bash
pip install -U finance-datareader
pip install -U finance-datareader # for update
```


Expand All @@ -35,52 +29,75 @@ pip install -U finance-datareader
```python
import FinanceDataReader as fdr

# 애플(AAPL), 2017년~현재
# Apple(AAPL), 2017~Now
df = fdr.DataReader('AAPL', '2017')

# 아마존(AMZN), 2010~현재
# AMAZON(AMZN), 2010~Now
df = fdr.DataReader('AMZN', '2010')

# 셀트리온(068270), 2017년~현재
df = fdr.DataReader('068270', '2017')
# Celltrion(068270), 2018-07-01~Now
df = fdr.DataReader('068270', '2018-07-01')

# country code: ex) 000150: Doosan(KR), Yihua Healthcare(CN)
df = fdr.DataReader('000150', '2018-01-01', '2018-03-30') # default: 'KR'
df = fdr.DataReader('000150', '2018-01-01', '2018-03-30', country='KR')
df = fdr.DataReader('000150', '2018-01-01', '2018-03-30', country='CN')

# KS11 (KOSPI 지수), 2015년~현재
# KOSPI index, 2015~Now
df = fdr.DataReader('KS11', '2015')

# 다우지수, 2015년~현재
# Dow Jones Industrial(DJI), 2015년~Now
df = fdr.DataReader('DJI', '2015')

# 원달러 환율, 1995년~현재
# USD/KRW, 1995~Now
df = fdr.DataReader('USD/KRW', '1995')

# 비트코인 원화 가격 (빗썸), 2016년~현재
# Bitcoin KRW price (Bithumbs), 2016 ~ Now
df = fdr.DataReader('BTC/KRW', '2016')

# 한국거래소 상장종목과 코드명 전체
# KRX stock symbols and names
df_krx = fdr.StockListing('KRX')

# S&P 500 종목과 코드명 전체
# S&P 500 symbols
df_spx = fdr.StockListing('S&P500')
```


# Changes
2018-08-08 v0.6.0
* Country code assigned ('KR', 'US', 'CN', 'JP')

2018-06-09 v0.5.0
* 상품선물 추가, 국채 심볼 추가, 항생지수 FIX (HSI)

2018-05-17 v0.4.0
* pip install (packaging register The Python Package Index (PyPI) repository)

2018-05-17 v0.2.0
* StockListing, SP500 (S&P 500 Listings, wikipedia), 추가
* StockListing, SP500 (S&P500 Listings, wikipedia) added

2018-05-16 v0.1.0
* StockListing KRX, KOSPI, KODAQ, KONEX, 추가
* StockListing NASDAQ, NYSE, AMEX, 추가
* StockListing KRX, KOSPI, KODAQ, KONEX added
* StockListing NASDAQ, NYSE, AMEX added

2018-05-14 v0.0.1
* DataReader 국내/매국 주가 데이터, 추가
* DataReader KRX,US Stock prices


# 간략한 설명 (Korean)
마켓 데이터를 다루는데 가장 기본이 되는 데이터는 거래소별 전체 심볼(종목 코드)와 개별 종목들의 가격 데이터 이다.
[pandas-datareader](https://pandas-datareader.readthedocs.io)는 매우 잘 구성된 라이브러리로 사용이 간편하고
다양한 시계열 데이터를 수집할 수 있다는 장점이 있다. (현재 버전 : pandas_datareader 0.6.0)
하지만, 거래소별(KRX, NASDAQ, NYSE 등) 전체 종목 코드(ticker symbol)를 가져오는 기능이 없으며,
구글/야후 파이낸스가 더 이상지원되지 않는다(deprecated). <br>
FinanceDataReader는 [pandas-datareader](https://pandas-datareader.readthedocs.io) 를 대체하기 보다
보완하기 위한 목적으로 만들어졌으며 주요한 기능은 다음과 같다.

* 해외주식 가격 데이터: AAPL(애플), AMZN(아마존), GOOG(구글) 등
* 국내주식 가격 데이터: 005930(삼성전자), 091990(셀트리온헬스케어) 등
* 각종 지수: KS11(코스피지수), KQ11(코스닥지수), DJI(다우지수), IXIC(나스닥 지수), US500(S&P 500)
* 환율 데이터: USD/KRX (원달러 환율), USD/EUR(달러당 유로화 환율), CNY/KRW: 위엔화 원화 환율
* 암호화폐 가격: BTC/USD (비트코인 달러 가격, Bitfinex), BTC/KRW (비트코인 원화 가격, 빗썸)
* 거래소별 전체 종목 코드: KRX (KOSPI, KODAQ, KONEX), NASDAQ, NYSE, AMEX, S&P 500 종목


#### 2018 [FinanceData.KR](http://financedata.kr)
#### 2018 [FinanceData.KR](http://financedata.kr)
2 changes: 1 addition & 1 deletion __init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from .data import (DataReader)
from .data import (StockListing)

__version__ = '0.5.0'
__version__ = '0.6.0'

__all__ = ['__version__', 'DataReader', 'StockListing']
4 changes: 2 additions & 2 deletions data.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
from FinanceDataReader.krx.listing import (KrxStockListing)
from FinanceDataReader.wikipedia.listing import (WikipediaStockListing)

def DataReader(name, start=None, end=None, data_source=None):
return InvestingDailyReader(symbols=name, start=start, end=end).read()
def DataReader(symbol, start=None, end=None, country=None):
return InvestingDailyReader(symbols=symbol, start=start, end=end, country=country).read()

def StockListing(market):
market = market.upper()
Expand Down
18 changes: 13 additions & 5 deletions investing/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,36 @@
from FinanceDataReader._utils import (_convert_letter_to_num, _validate_dates)

class InvestingDailyReader:
def __init__(self, symbols, start=None, end=None):
def __init__(self, symbols, start=None, end=None, country=None):
self.symbols = symbols
start, end = _validate_dates(start, end)
self.start = start
self.end = end
self.country = country

def _get_currid_investing(self, symbol):
def _get_currid_investing(self, symbol, country):
predef_table = { # for exceptional case
'HSI': '179', # Hang Seng (HSI)
}
if symbol in predef_table.keys():
return predef_table[symbol]

url = 'https://www.investing.com/search/service/search'
country_map = {'KR':'11', 'US':'5', 'CN':'37', 'HK':'39', 'JP':'35'}
if country:
country_id = country_map[country.upper()] if country in country_map.keys() else '0'
else:
country_id = '11' if symbol.isnumeric() else '0'

url = 'https://kr.investing.com/search/service/search'
headers = {
'User-Agent':'Mozilla',
'X-Requested-With':'XMLHttpRequest',
}

data = {
'search_text': symbol,
'term': symbol,
'country_id': '0',
'country_id': country_id,
'tab_id': 'All',
}
r = requests.post(url, data=data, headers=headers)
Expand All @@ -39,7 +47,7 @@ def _get_currid_investing(self, symbol):
def read(self):
start_date_str = self.start.strftime('%m/%d/%Y')
end_date_str = self.end.strftime('%m/%d/%Y')
curr_id = self._get_currid_investing(self.symbols)
curr_id = self._get_currid_investing(self.symbols, self.country)
if not curr_id:
raise ValueError("Symbol unsupported or not found")

Expand Down

0 comments on commit e1b52a4

Please sign in to comment.