본문 바로가기
Trading/PythonForFinance

data wrangling with web scraping

by bents 2020. 12. 23.

목표

1. 주식 시뮬레이션 전략 (공매도 포함)
2. 실제 매매(수동주문? 숏전략없음)
3.FX마진 시뮬레이션/데모 적용후 매매자동화


매매종목(유니버스) 데이터 수집하기

종목2300개 중 kospi200, kosdaq150 or krx300 으로 한정하자.

 

  *시장전체흐름을 보기 위해 지수 데이터도 필요하다.

  -->  코스피/코스닥지수, 업종섹터지수 가져오기

  *시장주도주는 결국 kospi200, kosdaq150 안에서 나온다.

  --> kospi200, kosdaq150 종목이 2020년부터 매년 6월,12월에 정기변경함

 

 

1. 수집정보 : 종목코드, 거래량, 시총, 현재가 (-> 주식수)

 [KRX 에서 다운로드 가능]

 

 - KOSPI200 : finance.naver.com/sise/entryJongmok.nhn?&page={pagenumber}

table#type_1>tbody>tr [2:]

 - KOSDAQ150 : www.kodex.com/product_view.do?fId=2ETF54

div#table-area>table>tbody.pdfResultList>tr

 

2. 수집정보 : 베타, 52주 신고가/신저가, 매도호가/매수호가(->호가단위), 전년동기 대비 분기성장률

- yfinance ( 제공해주지 않는 종목도 있다! )

[ value if key in target for key, value in yf.Ticker("005560.KS").info.items()]

 

## 수집정보 : 주가/거래량

- pandas_datareader

def decorator(func):
    def new_func(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except Exception as e:
            # print("Got error! ", repr(e))
            return pd.DataFrame()
            
    return new_func    


@decorator
def example1(code,start,end):
  return web.DataReader(f'{code}.KS', 'yahoo', start, end)


def get_data(stock,end):

  for year in range(2010,2020):
    start = datetime(year, 1, 1)
    result = example1(stock, start, end)

    if not result.empty :
      stock_history[stock] = result # 외부변수
      break

  if stock not in stock_history.keys():
    exception_code.append(stock) # 외부변수

def interpolate_outlier(df):
  for col in df.columns :
    condition = df[col] > df[col].mean()+df[col].std()*6
    condition2 = df[col] == 0
    df.loc[condition|condition2, col] = None
    df[col] = df[col].interpolate(method ='nearest', limit_direction ='both')
  return df