def __get_stock_info(self, stock_code): try: ## 기업명으로 오늘 날짜 기준 시가총액, 상장주식수 가져오기 # 1. 해당 기업명의 네이버 주식코드(티커) 알아오기 if company_name not in self.__dict_tickers: return [] # 2. df = stock.get_market_cap_by_date("20190101", "20190131", "005930") 호출 # df = 날짜, 시가총액, 거래량, 거래대금, 상장주식수 stock_df = stock.get_market_cap_by_date(self.__base_time, self.__base_time, stock_code) # 3. df에서 시가총액 컬럼 series series_cap = stock_df.get("시가총액") if not series_cap.array: print("series_cap erroor") market_capitalization = round(int(series_cap.array[0]) / 100, 2) # 억단위로 변경 # 4. df에서 발행주식 컬럼 series series_shares = stock_df.get("상장주식수") if not series_shares.array: print("series_shares erroor") listed_shares = series_shares.array[0] data = [] data.append(market_capitalization) data.append(listed_shares) return data except: print("[__get_stock_info] ", company_name, " error") return []
def test_cap_by_date_query(self): # holiday df = stock.get_market_cap_by_date("20200101", "20200102", "005930") self.assertTrue(len(df) == 1) for col in df.columns: self.assertEqual(type(df[col].iloc[0]), np.int64)
def _update_capitals(code: str, fromdate: date, todate: date): df = pykrx_stock.get_market_cap_by_date( fromdate=_date_to_str(fromdate), todate=_date_to_str(todate), ticker=code ) capitals = [] for idx, row in df.iterrows(): all_nan = True for v in row: if v: all_nan = False break if not all_nan: # noinspection PyUnresolvedReferences capitals.append( Capital( code=code, date=idx.date(), cap=row.get('시가총액'), ) ) with AllCapitalTable() as cap_table: whitelist = [] exists_rows = cap_table.all() for cap in capitals: if cap.date not in [row.date for row in exists_rows]: whitelist.append(cap) print(f'Inserting {len(whitelist)} records...') cap_table.insert_all(whitelist)
def download(lastUpdateDate): """ 주가 데이터를 받아와서 csv파일을 새로 제작한다. """ global u global end global x global downloadSize global path downloadSize =0 x=1 if (int(lastUpdateDate) <= int(todayDate)) : #모든 주가 데이터 종가 데이터로 변환 df=pd.read_csv('stock_code_data.csv',header = 0 ,names = ['num','stockCodeData']) tickerSymbolList = df['stockCodeData'].values downloadSize = tickerSymbolList.size #마우스 클립 입력받아 다운로드 퍼센트 확인 listener = mouse.Listener(on_click=on_click) listener.start() df = pd.DataFrame(index=range(0,0)) #주가 데이터 받기 for x in tickerSymbolList: df1 = stock.get_market_cap_by_date(lastUpdateDate, todayDate , x) #주가 데이터 수집 df = pd.concat([df , df1['시가총액']], axis=1)#시가총액 데이터로 변환 u= u+1 df.columns = tickerSymbolList #이전 버전이 없을시 새로 만들고 존재시 덧붙인다 try: if int(lastUpdateDate)<=int(firstSkockDate): df.to_csv('stock_price_data.csv', mode='w', header= True,encoding='utf-8-sig') else : df.to_csv('stock_price_data.csv', mode='a', header =True, encoding='utf-8-sig') updateTxt = open('update.txt','w') updateTxt.write(str(int(todayDate)+1))#다음날의 데이터 부터 받아온다 updateTxt.close() #접근성 오류 : 데이터 저장 관련 오류 except PermissionError: print("ERR : check you open csv file") updateTxt = open('update.txt','w') updateTxt.write(lastUpdateDate) updateTxt.close() else: print('it already done')
def Daily_Crawling(start_date: str, end_date: str, code: str): # 위 순서대로 df_market_cap = stock.get_market_cap_by_date(start_date, end_date, code) df_ohlcv = stock.get_market_ohlcv_by_date(start_date, end_date, code) df_fundamental = stock.get_market_fundamental_by_date( start_date, end_date, code) df = pd.concat([df_market_cap.iloc[:, 0], df_ohlcv, df_fundamental], axis=1) return df
def test_not_empty_result(self): df = stock.get_market_ohlcv_by_date("20190225", "20190228", "000660") self.assertTrue(df.empty) df = stock.get_market_cap_by_date("20190101", "20190131", "005930") self.assertTrue(df.empty) df = stock.get_market_cap_by_ticker("20200625") self.assertTrue(df.empty) df = stock.get_market_price_change_by_ticker("20180301", "20180320") self.assertTrue(df.empty) df = stock.get_market_fundamental_by_ticker("20180305", "KOSPI") self.assertTrue(df.empty) df = stock.get_market_fundamental_by_date("20180301", "20180320", '005930') self.assertTrue(df.empty)
def insertQuotes(stockCode, startDate, endDate, source='yahoo'): df = stock.get_market_ohlcv_by_date(startDate, endDate, stockCode) dfMarketCap = stock.get_market_cap_by_date(startDate, endDate, stockCode) df['stock_code'] = stockCode df['date'] = df.index df['market_cap'] = dfMarketCap['시가총액'] df['num_stocks'] = dfMarketCap['상장주식수'] df = df.rename(columns={ '고가': 'high', '저가': 'low', '시가': 'open', '종가': 'close', '거래량': 'volume' }) df = df[[ 'stock_code', 'date', 'open', 'high', 'low', 'close', 'volume', 'market_cap', 'num_stocks' ]] with sl.connect(config.dbName) as con: df.to_sql('QUOTES', con, if_exists='replace', index=False)
from pykrx import stock df = stock.get_market_ohlcv_by_date("20180810", "20181212", "005930") print(df.head(3)) df = stock.get_market_cap_by_date("20190101", "20190131", "005930") print(df.head())