돈벌고싶다

파이썬을 이용한 주식 포트폴리오 - 1. 데이터 수집 본문

주식 포트폴리오

파이썬을 이용한 주식 포트폴리오 - 1. 데이터 수집

coinwithpython 2022. 8. 31. 00:54
728x90
반응형

시작

 

해당 글은 다음 사람들에게 유용합니다.

 

  1. 코인 종목에 대해 기술적 분석을 하는 투자자
  2. 나만의 주식 포트폴리오 생성을 원하는 투자자

 

1번, 저는 비트코인에 대해 기술적 분석을 통해 알고리즘을 짜고 있습니다. 따라서 주식 포트폴리오를 생성한다면, 코인과는 시세 흐름이 상이한 종목을 찾는 것이 안정성 측면에서 뛰어납니다. 2번, 구글링을 하면 종목 선정은 예시로 해버리고 백테스팅을 통한 안정성 및 수익성에 대한 분석만을 진행하더군요. 저는 데이터를 통한 근거 있는 종목 선정을 하고 싶었습니다. 개인 취향에 따라 코드를 변경해가며 나만의 주식 포트폴리오를 생성하는 것에 도움이 될 듯 합니다.

 

저는 슬슬 포트폴리오를 구성할 단계가 오고 있습니다. 시스템 트레이딩을 하기 위한 알고리즘은 안정화되었으나, 코인 시장에는 내 투자와는 상관없이 꾸준한 리스크가 존재하고 있습니다. 또한 모든 자산을 하나의 종목에 넣는 것은 수익률은 물론, 안전성 측면에서 위험합니다. 특히 요즘들어 BTCUSDT로 거래하고 있는 개미 입장으로서 스테이블코인 "테더"의 붕괴 의혹은 치명적입니다.

 

https://m.kmib.co.kr/view.asp?arcid=0017103182 

 

“루나 꼴 나나”… 테더 달러 보유량 3% 불과, 폰지사기 의혹 증폭

‘스테이블코인’ 루나·테라가 순식간에 몰락하며 암호화폐(가상화폐) 투자자들의 눈이 테더로 쏠리고 있다. 테더는 테라와 달리 미국달러를 담보로 코인의 가

m.kmib.co.kr

 

따라서 주식 포트폴리오를 만들 차례가 왔다고 판단하여, 다양한 고민을 해왔고, 저의 고민들을 공유해볼까 합니다. 일단은 데이터를 수집하는 것에서부터 시작하도록 하겠습니다.

 


코드

1. 라이브러리 호출

import yfinance as yf
import pandas as pd
import numpy as np
import time

 

2. 함수 정의

def get_data(symbol, interval, start_date, end_date):
    ticker = yf.Ticker(symbol)
    df = ticker.history(
        interval=interval,
        start=start_date,
        end=end_date,
        actions=True,
        auto_adjust=True
    )
    return df

 

3. 필요 데이터

보시는 분들의 편의도 위할 겸, 제가 이미 수집한 파일을 공유하겠습니다. 해당 데이터는 각각 코스피 상위 100 종목, 나스닥 상위 100 종목에 대한 데이터를 담고 있습니다.

 

KOSPI100.csv
0.00MB
NASDAQ100.csv
0.00MB

 

각 데이터의 출처는 다음과 같습니다.

 

http://data.krx.co.kr/contents/MDC/MAIN/main/index.cmd

 

KRX 정보데이터시스템

증권·파생상품의 시장정보(Marketdata), 공매도정보, 투자분석정보(SMILE) 등 한국거래소의 정보데이터를 통합하여 제공 서비스

data.krx.co.kr

https://kr.investing.com/indices/nq-100-components

 

Nasdaq 100 지수 주식 가격 - Investing.com

에 페이지는 NQ 100 지수 성분에 대한 실시간 스트리밍 시세표를 포함하고 있습니다.

kr.investing.com

 

해당 데이터를 코드가 저장되어있는 파일 안에 "data" 폴더를 생성해주시고, 그 안에 저장해주시기 바랍니다.

 

4. 시세 데이터 수집

# 변수 설정
interval = '1wk'
start_date = '1975-06-11'
end_date = '2022-08-29'
data_path = './data/'

# 코스피100, 나스닥100 종목 코드 불러오기
kospi = pd.read_csv(data_path + 'KOSPI100.csv', encoding='cp949')
nasdaq = pd.read_csv(data_path + 'NASDAQ100.csv')

# 코스피 종목 코드 수정
kospi['SYMBOL'] = kospi.apply(lambda x: x['SYMBOL'].replace('"', ''), axis=1)

# 코스피100 데이터 수집
data = [[] for n in range(len(kospi))]
for symbol, n in zip(kospi['SYMBOL'], range(len(kospi))):
    data[n] = get_data(f'{symbol}.KS', interval, start_date, end_date)
    time.sleep(0.2)
df = pd.concat([d['Close'] for d in data], axis=1)
df.columns = kospi['SYMBOL'].tolist()
df.to_csv(data_path + "kospi_price.csv")

# 나스닥100 데이터 수집
data = [[] for n in range(len(nasdaq))]
for symbol, n in zip(nasdaq['SYMBOL'], range(len(nasdaq))):
    data[n] = get_data(symbol, interval, start_date, end_date)
    time.sleep(0.2)
df = pd.concat([d['Close'] for d in data], axis=1)
df.columns = nasdaq['SYMBOL'].tolist()
df.to_csv(data_path + "nasdaq_price.csv")

모두 진행하고 나면 코스피 100 기업에 대한 시세와 나스닥 100 기업에 대한 시세에 대한 주봉 데이터를 얻을 수 있습니다. 다음 글에서는 데이터를 이용하여 상관관계를 분석하고 시각화해보겠습니다.

 

 

728x90
반응형
Comments