Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/FinanceDataReader/krx/listing.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ def read(self):
# 해당 날짜의 데이터를 가져옴
url = f'https://raw.githubusercontent.com/FinanceData/fdr_krx_data_cache/refs/heads/master/data/listing/krx/{formatted_date}.csv'
df = pd.read_csv(url, dtype={'Code': str, 'Dept': str, 'ChangeCode': str, 'MarketId': str})
df = df.rename(columns={'ChagesRatio': 'ChangesRatio'})

mkt_map = {'KRX-MARCAP':'ALL', 'KRX':'ALL', 'KOSPI':'STK', 'KOSDAQ':'KSQ', 'KONEX':'KNX'}
if self.market not in mkt_map:
Expand Down Expand Up @@ -89,7 +90,7 @@ def read(self):
df = df.sort_values('MKTCAP', ascending=False)
cols_map = {'ISU_SRT_CD':'Code', 'ISU_ABBRV':'Name',
'TDD_CLSPRC':'Close', 'SECT_TP_NM': 'Dept', 'FLUC_TP_CD':'ChangeCode',
'CMPPREVDD_PRC':'Changes', 'FLUC_RT':'ChagesRatio', 'ACC_TRDVOL':'Volume',
'CMPPREVDD_PRC':'Changes', 'FLUC_RT':'ChangesRatio', 'ACC_TRDVOL':'Volume',
'ACC_TRDVAL':'Amount', 'TDD_OPNPRC':'Open', 'TDD_HGPRC':'High', 'TDD_LWPRC':'Low',
'MKTCAP':'Marcap', 'LIST_SHRS':'Stocks', 'MKT_NM':'Market', 'MKT_ID': 'MarketId' }
df = df.rename(columns=cols_map)
Expand Down Expand Up @@ -335,4 +336,3 @@ def read(self):
df.rename(columns=col_map, inplace=True)
df.attrs = {'exchange':'KRX', 'source':'KRX', 'data':'LISTINGS'}
return df[['Symbol', 'Name', 'DesignationDate', 'Reason']]

4 changes: 2 additions & 2 deletions tests/test_basic.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ def test_pref_us():
def test_stocklistings():

# KRX 상장회사(발행회사)목록 (가격 중심, 주식 종목) - 시가총액순
# Code, ISU_CD, Name, Market, Dept, Close, ChangeCode, Changes, ChagesRatio, Open, High, Low, Volume, Amount, Marcap, Stocks, MarketId
# Code, ISU_CD, Name, Market, Dept, Close, ChangeCode, Changes, ChangesRatio, Open, High, Low, Volume, Amount, Marcap, Stocks, MarketId
df = fdr.StockListing('KRX') # 2,700+ 종목 - 한국거래소(=코스피+코스닥+코넥스)
assert len(df) > 2700

Expand Down Expand Up @@ -250,4 +250,4 @@ def test_snap_krx():

def test_snap_krx_stock_list():
df = fdr.SnapDataReader('KRX/INDEX/STOCK/1001') # 코스피 대형주 종목 리스트
assert len(df) >= 90
assert len(df) >= 90
70 changes: 70 additions & 0 deletions tests/test_krx_listing_schema.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import json

import pandas as pd

import FinanceDataReader as fdr
from FinanceDataReader.krx import listing as krx_listing


def test_krx_stock_listing_uses_correct_change_ratio_column(monkeypatch):
class Response:
text = json.dumps({"result": {"output": [{"max_work_dt": "20260329"}]}})

cached_listing = pd.DataFrame(
{
"Code": ["005930"],
"Name": ["Samsung"],
"ChagesRatio": [0.14],
"MarketId": ["STK"],
}
)

monkeypatch.setattr(krx_listing.requests, "get", lambda *args, **kwargs: Response())
monkeypatch.setattr(
krx_listing.pd, "read_csv", lambda *args, **kwargs: cached_listing.copy()
)

result = fdr.StockListing("KRX")

assert "ChangesRatio" in result.columns
assert "ChagesRatio" not in result.columns


def test_krx_live_listing_uses_correct_change_ratio_column(monkeypatch):
class Response:
def __init__(self, text):
self.text = text

metadata = json.dumps({"result": {"output": [{"max_work_dt": "20260329"}]}})
row = {
"ISU_SRT_CD": "005930",
"ISU_ABBRV": "Samsung",
"TDD_CLSPRC": "70000",
"SECT_TP_NM": "Electronics",
"FLUC_TP_CD": "1",
"CMPPREVDD_PRC": "100",
"FLUC_RT": "0.14",
"ACC_TRDVOL": "123",
"ACC_TRDVAL": "8610000",
"TDD_OPNPRC": "69900",
"TDD_HGPRC": "70500",
"TDD_LWPRC": "69500",
"MKTCAP": "1000000",
"LIST_SHRS": "1000",
"MKT_NM": "KOSPI",
"MKT_ID": "STK",
}

def fake_get(*args, **kwargs):
return Response(metadata)

def fake_post(*args, **kwargs):
return Response(json.dumps({"OutBlock_1": [row]}))

monkeypatch.setattr(krx_listing.requests, "get", fake_get)
monkeypatch.setattr(krx_listing.requests, "post", fake_post)

result = krx_listing.KrxMarcapListing("KRX").read()

assert "ChangesRatio" in result.columns
assert "ChagesRatio" not in result.columns