돈벌고싶다

파이썬을 이용한 주식 포트폴리오 - 3. 안티 비트코인 종목 양적 분석 본문

주식 포트폴리오

파이썬을 이용한 주식 포트폴리오 - 3. 안티 비트코인 종목 양적 분석

coinwithpython 2022. 8. 31. 21:59
728x90
반응형

설명

저번 글에서 우리는 비트코인과 유사한 종목, 비트코인과 유사하지 않은 종목에 대해 상관관계 계산을 통해 리스트를 생성하였습니다. 해당 내용을 이어서 비트코인과 유사하지 않은 종목들, 즉 안티 비트코인 테마주에 대해 양적 분석을 할 수 있는 데이터를 생성해보겠습니다.

 


코드

1. 라이브러리

import yfinance as yf
import pandas as pd
import numpy as np
import datetime
import time
import ccxt
from sklearn.preprocessing import StandardScaler

 

2. 이전 포스팅 내용 진행

data_path = './data/'
binance = ccxt.binance()
bitcoin = get_binance_data('BTC/USDT', '1w', to_mstimestamp("2022-08-25 23:59:59"))
kospi = pd.read_csv(data_path + 'kospi_price.csv')
nasdaq = pd.read_csv(data_path + 'nasdaq_price.csv')

kospi.set_index('Date', inplace=True)
nasdaq.set_index('Date', inplace=True)
bitcoin.reset_index(drop=False, inplace=True)
bitcoin['datetime'] = bitcoin['datetime'].astype(str)
bitcoin.columns = ['Date', 'open', 'high', 'low', 'BTC', 'volume']
bitcoin.set_index('Date', inplace=True)

df = pd.concat([kospi, nasdaq, bitcoin['BTC']], axis=1, join='outer')
df = df.sort_index(ascending=True)
df = df.iloc[4310:].copy()
df = df.interpolate()

scaler = StandardScaler()
scaler.fit(df)
scaled = scaler.transform(df)
df_scaled = pd.DataFrame(data=scaled, columns=df.columns)
df_scaled.index = df.index

corr = df_scaled.corr(method = 'pearson')
withcoin = corr[corr['BTC']>0.9].index.tolist()
anticoin = corr[corr['BTC']<0.1].index.tolist()

해당 내용은 이전 글에서 다뤘기 때문에, 설명은 이전 글을 참고해주시면 되겠습니다.

2022.08.31 - [주식 포트폴리오] - 파이썬을 이용한 주식 포트폴리오 - 2. 비트코인과 코스피&나스닥 상관관계 분석

 

파이썬을 이용한 주식 포트폴리오 - 2. 비트코인과 코스피&나스닥 상관관계 분석

설명 저번 글에 이어, 시세 데이터를 활용하여 비트코인과 코스피, 비트코인과 나스닥 상관관계를 분석하겠습니다. 코드 1. 라이브러리 호출 import yfinance as yf import pandas as pd import numpy as np impor..

tfrecord.tistory.com

 

3. 안티 비트코인 테마주 양적 분석 데이터 생성

data = np.zeros((len(anticoin), 8))
for symbol, n in zip(anticoin, range(len(anticoin))):
    if len(symbol) == 6:
        temp = yf.Ticker(f'{symbol}.KS')
    else:
        temp = yf.Ticker(symbol)
    temp_f = temp.financials.transpose().reset_index(drop=True)
    temp_bs = temp.balance_sheet.transpose().reset_index(drop=True)
    temp_cf = temp.cashflow.transpose().reset_index(drop=True)
    temp_e = temp.earnings.sort_index(ascending=False).reset_index(drop=True)
    temp = [
        temp_f['Net Income'] / temp_bs['Total Assets'],                   # ROI = 당기순이익 / 총자본
        temp_f['Net Income'] / temp_bs['Total Stockholder Equity'],       # ROE = 당기순이익 / 자기자본
        temp_bs['Total Liab'] / temp_bs['Total Stockholder Equity'],      # debt to equity ratio(부채비율) = 타인자본 / 자기자본
        temp_cf['Total Cashflows From Investing Activities'],             # 투자활동으로 인한 현금흐름
        temp_cf['Total Cash From Financing Activities'],                  # 재무활동으로 인한 현금흐름
        temp_cf['Total Cash From Operating Activities'],                  # 영업활동으로 인한 현금흐름
        temp_e['Earnings'],                                               # 순이익
        temp_e['Revenue']                                                 # 매출
    ]
    temp = pd.DataFrame(temp).transpose()
    data[n] = temp.iloc[0]

df = pd.DataFrame(data)
df.columns = ['ROI', 'ROE', 'debt to equity ratio', 'Total Cashflows From Investing Activities', 'Total Cash From Financing Activities', 'Total Cash From Operating Activities', 'Earnings', 'Revenue']
df.index = anticoin
df.to_csv(data_path + "안티코인기업_기본적분석.csv")

기본적 분석에 대해서는 아래 링크에 내용을 보고 참고하며 자신이 원하는 컬럼을 추가하는 방식으로 자신만의 기본적 분석을 진행하시면 되겠습니다.

 

http://contents.kocw.or.kr/KOCW/document/2013/DonggukGyeongju/Leesiyoung/7.pdf

 

제가 작성한 코드에서는 ROI, ROE, 부채비율, EPS, 투자 현금 흐름, 재무 현금 흐름, 영업 현금 흐름, 순이익률에 대해 양적 분석을 진행하기 위해 데이터를 쌓은 모습이며, 가장 최근 데이터만을 이용하였습니다. yfinance 라이브러리는 request 부분에서 시간이 걸리기 때문에, 위 코드를 실행하면 완료하기까지 수 분이 걸릴 겁니다.

 

 

728x90
반응형
Comments