본문 바로가기

API

[Fred API] 달러 인덱스와 금, 은, 구리 비교 그래프

반응형

Fred API를 이용해서 달러 인덱스를 수집하고 yfinance로 금, 은, 구리의 데이터를 가져와서 그래프를 그려보겠습니다.

1. Fred 가입 후 API KEY 신청 및 확인하기
2. 달러 인덱스 데이터 및 금, 은, 구리 데이터 수집
3. 그래프 확인

1. Fred 가입 후 API KEY 신청 및 확인하기

https://yenpa.tistory.com/65

[Fred API] 가입 후 API KEY 신청 및 확인하기

Fred 사이트에 가입 후 API Key 확인하는 방법을 알아보겠습니다. 1. Fred 사이트 가입 아래의 사이트에 접속합니다 https://fred.stlouisfed.org/ Federal Reserve Economic Data | FRED | St. Louis Fed Welcome to FRED, your trust

yenpa.tistory.com



2. 달러 인덱스 데이터 및 금, 은, 구리 데이터 수집

fred에서 달러 인덱스를 불러옵니다. symbol은 'DTWEXBGS'입니다.

import pandas as pd
import fredpy as fp
from datetime import datetime, timedelta
#fp.api_key = 'YOUR_API_KEY'

enddate=(datetime.now() + timedelta(days=-1)).strftime('%Y-%m-%d')
dol= fp.series('DTWEXBGS',enddate)
dol.data

2006-01-02부터의 데이터가 확인이 됩니다.


금, 은, 구리 데이터를 수집하기 위해 yfinance를 설치합니다.

pip install yfinance

라이브러리를 import 하고 각 데이터 금(GC=F), 은(SI=F), 구리(HG=F) 데이터를
달러 인덱스의 기간과 맞추기 위해 시작 날짜를 2006-01-01부터로 설정했습니다.

import yfinance as yf

gld=yf.download('GC=F', '2006-01-01', enddate, auto_adjust=True)
silv=yf.download('SI=F', '2006-01-01', enddate, auto_adjust=True)
hg=yf.download('HG=F', '2006-01-01', enddate, auto_adjust=True)

금 데이터만 확인해 볼까요

gld

수집이 된 것을 알 수 있습니다.


3. 그래프 확인

달러 인덱스와 금 그래프입니다.

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=dol.data.index, y=dol.data.values, name="달러인덱스"),
    secondary_y=True,
)

fig.add_trace(
    go.Line(x=gld.index, y=gld['Close'], name="금"),
    secondary_y=False,
)


fig.show()


달러인덱스와 은 그래프를 확인하겠습니다.
코드에서 go.Line(x=gld.index, y=gld['Close'], name="금")에서 gld -> silv로 변경하면 됩니다.

달러 인덱스와 구리 그래프입니다.
코드에서 go.Line(x=gld.index, y=gld['Close'], name="금")에서 gld -> hg로 변경하면 됩니다.


달러 인덱스의 2006-01-03의 데이터는 100.7558입니다.
금, 은, 구리의 데이터도 2006-01-03을 100.7558로 설정하고
이후의 변동량을 확인할 수 있도록 아래와 같이 gld_index column을 추가합니다.

gld['Close_change']=gld['Close'].pct_change()
gld['Close_changecum']=(1+gld['Close_change']).cumprod()
gld.loc['2006-01-03','Close_changecum']=1
gld['gld_index']=gld['Close_changecum']*100.7558
gld

gld_index가 생성되었는데 2006-01-03일이 100.7558로 설정되었습니다.


마찬가지로 은, 구리 데이터도 각각 index column을 추가하겠습니다.

silv['Close_change']=silv['Close'].pct_change()
silv['Close_changecum']=(1+silv['Close_change']).cumprod()
silv.loc['2006-01-03','Close_changecum']=1
silv['silv_index']=silv['Close_changecum']*100.7558

hg['Close_change']=hg['Close'].pct_change()
hg['Close_changecum']=(1+hg['Close_change']).cumprod()
hg.loc['2006-01-03','Close_changecum']=1
hg['hg_index']=hg['Close_changecum']*100.7558


그럼 이제 하나의 그래프에서 달러 인덱스, 금, 은, 구리를 확인해 보겠습니다.

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

# Add traces
fig.add_trace(
    go.Line(x=dol.data.index, y=dol.data.values, name="달러인덱스"),
    secondary_y=True,
)

fig.add_trace(
    go.Line(x=gld.index, y=gld['gld_index'], name="금"),
    secondary_y=False,
)

fig.add_trace(
    go.Line(x=silv.index, y=silv['silv_index'], name="은"),
    secondary_y=False,
)


fig.add_trace(
    go.Line(x=hg.index, y=hg['hg_index'], name="구리"),
    secondary_y=False,
)

fig.update_layout(
    title_text='달러인덱스와 금,은,구리',
    title={'x':0.5, 'y':0.85}
    
)

fig.show()


이상으로 달러 인덱스와 금, 은, 구리의 데이터를 수집하고 그래프를 그려봤습니다.

반응형