국내주식에 대한 일봉/주봉/월봉, 분봉 데이터를 뽑아보자.
mojito2
모듈에서는 fetch-ohlcv
메서드를 통해서 데이터를 얻을 수 있는데, 리턴되는 값의 형식은 output2에 dictionary 타입으로 출력된다.
0. 객체 생성
import mojito
import pprint
key = "PStmW7....t"
secret = "7gPSHO....="
acc_no = "12345678-0"
# 객체 생성
broker = mojito.KoreaInvestment(api_key=key, api_secret=secret, acc_no=acc_no, mock=True)
1. 일봉 조회
resp = broker.fetch_ohlcv(
symbol="005930", # 삼성전자
timeframe='D',
adj_price=True
)
#주봉 resp = broker.fetch_ohlcv(symbol="005930", timeframe='W', adj_price=True)
#월봉 resp = broker.fetch_ohlcv(symbol="005930", timeframe='M', adj_price=True)
pprint.pprint(resp)
** fetch_ohlcv **
def fetch_ohlcv(self, symbol: str, timeframe: str = 'D', start_day:str="", end_day:str="",
adj_price: bool = True) -> dict:
"""fetch OHLCV (day, week, month)
Args:
symbol (str): 종목코드
timeframe (str): "D" (일), "W" (주), "M" (월)
start_day (str): 조회시작일자
end_day (str): 조회종료일자
adj_price (bool, optional): True: 수정주가 반영, False: 수정주가 미반영. Defaults to True.
"""
if self.exchange == '서울':
resp = self.fetch_ohlcv_domestic(symbol, timeframe, start_day, end_day, adj_price)
else:
resp = self.fetch_ohlcv_overesea(symbol, timeframe, end_day, adj_price)
return resp
** fetch_ohlcv_domestic **
resp = requests.get(url, headers=headers, params=params)
API를 호출하기 위한 문장으로, fetch_ohlcv에 의해 호출된 fetch_ohlcv_domestic
메서드가 OpenAPI를 통한 데이터를 polling 하는 코드이다.
def fetch_ohlcv_domestic(self, symbol: str, timeframe:str='D', start_day:str="",
end_day:str="", adj_price:bool=True):
"""국내주식시세/국내주식 기간별 시세(일/주/월/년)
Args:
symbol (str): symbol
timeframe (str, optional): "D": 일, "W": 주, "M": 월, 'Y': 년
start_day (str, optional): 조회시작일자(YYYYMMDD)
end_day (str, optional): 조회종료일자(YYYYMMDD)
adjusted (bool, optional): False: 수정주가 미반영, True: 수정주가 반영
"""
path = "/uapi/domestic-stock/v1/quotations/inquire-daily-itemchartprice"
url = f"{self.base_url}/{path}"
headers = {
"content-type": "application/json",
"authorization": self.access_token,
"appKey": self.api_key,
"appSecret": self.api_secret,
"tr_id": "FHKST03010100"
}
if end_day == "":
now = datetime.datetime.now()
end_day = now.strftime("%Y%m%d")
if start_day == "":
start_day = "19800104"
params = {
"FID_COND_MRKT_DIV_CODE": "J",
"FID_INPUT_ISCD": symbol,
"FID_INPUT_DATE_1": start_day,
"FID_INPUT_DATE_2": end_day,
"FID_PERIOD_DIV_CODE": timeframe,
"FID_ORG_ADJ_PRC": 0 if adj_price else 1
}
resp = requests.get(url, headers=headers, params=params)
return resp.json()