본문 바로가기

API

[yahoo finance API] 금 은 구리 스프레드와 주가(S&P500) 비교

반응형

yahoo finance를 이용해서 금 은 구리 및 S&P500 데이터를 수집하고 금-은 스프레드, 금-구리 스프레드를 구하겠습니다.

데이터를 가져오기 위해서는 yfinance의 설치가 필요합니다.

아래의 명령어로 설치가 가능합니다.

pip install yfinance

 

금(GC=F), 은(SI=F), 구리(HG=F) 및 S&P500(^GSPC)를 수집하겠습니다.

import yfinance as yf
from datetime import datetime, timedelta

startdate='2006-01-01'
enddate=(datetime.now() + timedelta(days=-1)).strftime('%Y-%m-%d')
gld=yf.download('GC=F', startdate, enddate, auto_adjust=True)
silv=yf.download('SI=F', startdate, enddate, auto_adjust=True)
hg=yf.download('HG=F', startdate, enddate, auto_adjust=True)

snp=yf.download('^GSPC', startdate, enddate, auto_adjust=True)

금 데이터가 수집된 것을 알 수 있습니다.

gld.head()

 

금, 은을 하나의 DataFrame으로 만들겠습니다.

import pandas as pd

gs=pd.concat([gld[['Close']],silv[['Close']]], axis=1)
gs.columns=['gold','silver']
gs

 

금과 은은 데이터의 Scale이 달라서 MinMaxScaler를 이용해서 정규화를 하겠습니다.

그리고 금데이터와 은데이터의 차분을 구해서 spread에 저장합니다.

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
scaler.fit(gs)
df1 = scaler.transform(gs)

gldscal=pd.DataFrame(df1, index=gs.index,columns=['gld','silv'])
gldscal['spread']=gldscal['gld']-gldscal['silv']
gldscal

 

반응형

 

 

S&P500과 금-은 스프레드를 그래프로 확인해 보겠습니다.

import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots

# Create figure with secondary y-axis
fig = make_subplots(specs=[[{"secondary_y": True}]])

# Add traces
fig.add_trace(
    go.Line(x=snp.index, y=snp['Close'], name="S&P500"),
    secondary_y=True,
)

fig.add_trace(
    go.Line(x=gldscal.index, y=gldscal['spread'], name="금-은 스프레드"),
    secondary_y=False,
)

fig.update_layout(
    title_text='금-은 스프레드와 S&P500',
    title={'x':0.5, 'y':0.85}
    
)

fig.show()

 

기간을 2014년 이전 이후로 나누어서 확인해 보겠습니다.

 

반응형

 

 

다음으로는 금과 구리를 알아보겠습니다.

우선 금과 구리를 정규화한 후에 스프레드 데이터를 구합니다.

gh=pd.concat([gld[['Close']],hg[['Close']]], axis=1)
gh.columns=['gold','hg']

scaler = MinMaxScaler()
scaler.fit(gh)
df2 = scaler.transform(gh)

hgscal=pd.DataFrame(df2, index=gh.index,columns=['gld','hg'])
hgscal['spread']=hgscal['gld']-hgscal['hg']
hgscal

 

 

그래프로 확인하겠습니다.

S&P500과는 반대로 움직이는 부분들이 많이 보이고 있습니다.

 

2014년 이전 이후로 나누어서 보겠습니다.

 

 

이상으로  금 은 구리 및 S&P500 데이터를 수집하고 금-은 스프레드, 금-구리 스프레드를 확인해 봤습니다.

반응형