Exemplo n.º 1
0
    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 []
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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')
Exemplo n.º 5
0
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
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
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())