< 주가 일봉 데이터 저장 프로그램 개발 - 프로그램 기능 구현>
해당 포스트를 읽기 전에 이전 포스트를 읽기 바란다.
보다시피 DB 로그인, 데이터 DB 저장, 데이터 엑셀 저장 기능이 필요한 걸 알 수 있다. 추가로 입력한 종목 코드가 실제 상장된 주식의 종목 코드인지 확인하는 기능이 필요하다. 코스피/코스닥 지수의 경우는 종목 코드가 없기 때문에 "kospi"를 입력하면 코스피 지수 일봉 데이터가, "kosdaq"을 입력하면 코스닥 지수 일봉 데이터가 요청된다.
전체 코드는 다음과 같다. 이전 포스트에서 Kiwoom.py와 StockDB.py를 구현했기에 소스가 간단하다.
import Kiwoom as kw import DB as db from datetime import date, timedelta class MainFunctions(): def __init__(self): self.ki = kw.Kiwoom() self.dB = db.StockDB() self.date = date.today() - timedelta(1) def db_login(self, password): return self.dB.init(password) def is_stock(self, code): if code == 'kospi' or code == 'kosdaq': return code stock_name = self.ki.is_stock(code) if stock_name is not "": return stock_name return None def db_insert_stock(self, code): table_name = "" if code == 'kospi': table_name = code code = '001' elif code == 'kosdaq': table_name = code code = '101' else: table_name = 'a' + code # 테이블이 생성되지 않았으면 테이블 생성 self.dB.create_table(table_name) # 테이블에 입력된 데이터 중 가장 최근 날짜 획득 recent_day = self.dB.select_max_date(table_name) if recent_day == self.date: return # 일봉 데이터 획득 if code == '001' or code =='101': data = self.ki.req_index_daily_value(code, recent_day) else: data = self.ki.req_stock_daily_value(code, recent_day) # 테이블에 데이터 insert self.dB.insert_chart(data, table_name) def data_to_excel(self, code): if code == 'kospi': # 코스피 일봉 데이터 획득 data = self.ki.req_index_daily_value('001', None) data.to_excel('./kospi.xlsx') elif code == 'kosdaq': # 코스닥 일봉 데이터 획득 data = self.ki.req_index_daily_value('101', None) data.to_excel('./kosdaq.xlsx') else: # 종목 일봉 데이터 획득 data = self.ki.req_stock_daily_value(code, None) data.to_excel('./a' + code + '.xlsx')
def db_login(self,password): return self.dB.init(password)
def is_stock(self,code): if code == 'kospi' or code == 'kosdaq' or self.ki.is_stock(code) is not "": return True else: return False
다음 코드는 주식의 일봉 데이터를 엑셀로 저장한다. code에 해당하는 주식의 일봉 데이터를 요청한다. 결과 값은 'data'에 DataFrame 형식으로 저장된다. 'data.to_excel()' 메서드로 프로그램 설치 장소에 데이터를 엑셀로 변환한다.
def data_to_excel(self,code): if code == 'kospi': # 코스피 일봉 데이터 획득 data = self.ki.req_index_daily_value('001', None) data.to_excel('./kospi.xlsx') elif code == 'kosdaq': # 코스닥 일봉 데이터 획득 data = self.ki.req_index_daily_value('101', None) data.to_excel('./kosdaq.xlsx') else: # 종목 일봉 데이터 획득 data = self.ki.req_stock_daily_value(code, None) data.to_excel('./a'+code+'.xlsx')
다음은 code에 해당하는 주식 일봉 데이터를 DB에 저장하는 소스이다. 소스에 달린 주석을 보면 이해 가능할 것이다. 참고로 'self.date'는 클래스 초기화 부분에서 생성한 변수로 프로그램을 실행한 어제 날짜를 가지고 있다. 'if recent_day == self. date' 는 DB에 저장된 데이터의 최근 날짜가 어제 날짜와 동일한 지 확인한다. 같다면 바로 리턴한다. 이미 주식 일봉 데이터 전체를 가지기 때문이다.(해당 프로그램은 어제까지 주식 일봉 데이터를 저장한다.)
def db_insert_stock(self, code): table_name = "" if code == 'kospi': table_name = code code = '001' elif code == 'kosdaq': table_name = code code = '101' else: table_name = 'a' + code # 테이블이 생성되지 않았으면 테이블 생성 self.dB.create_table(table_name) # 테이블에 입력된 데이터 중 가장 최근 날짜 획득 recent_day = self.dB.select_max_date(table_name) if recent_day == self.date: return # 일봉 데이터 획득 if code == '001' or code =='101': data = self.ki.req_index_daily_value(code, recent_day) else: data = self.ki.req_stock_daily_value(code, recent_day) # 테이블에 데이터 insert self.dB.insert_chart(data, table_name)
여기까지 전체적인 프로그램 기능을 구현했다. 대부분이 이전 포스트에서 구현한 메서드들을 사용한 것이기에 해당 포스트까지 잘 따라왔다면 이해하기 쉬울 것이다. 전체 소스코드는 아래 첨부파일에 있다.
다음 포스트에서는 프로그램 GUI를 구현한다. GUI만 구현하면 주가 일봉 데이터 저장 프로그램 개발을 마치게 된다.
'주식 프로그래밍(시스템 트레이딩)' 카테고리의 다른 글
주가 일봉 데이터 저장 프로그램 코드 및 파일 (3) | 2018.01.09 |
---|---|
5. 주가 일봉 데이터 저장 프로그램 개발(프로그램 GUI 구현) (5) | 2018.01.07 |
3. 주가 일봉 데이터 저장 프로그램 개발(키움 API 구현) (4) | 2018.01.06 |
2. 주가 일봉 데이터 저장 프로그램 개발(DB 설계 및 구현) (5) | 2018.01.06 |
1. 주가 일봉 데이터 저장 프로그램 개발(개요) (1) | 2018.01.05 |