본문 바로가기
언어/Python

국제 금/은/구리 및 텍사스/두바이 중질유 석유값 가져 오기

by darkdevilness 2019. 8. 16.
728x90

source code는 아래와 같습니다.  (파일 첨부)

https://financedata.github.io/posts/global-commodity-price.html  을 기준으로 작성하였습니다.

일부 안되는 부분이 있는 것으로 보여, 동작 및 바로 사용할 수 있도록 새로이 coding 하였습니다.

Finance data는 두 곳에서  불러 올 수 있습니다 quandl.com(접속 권한 필요, Limitation 있음)과 fred.com (Free) 입니다.  

2019년 8월 16일에는  두 곳 모두 접속하여 관련 data를 모두 가져 왔습니다.  

그래프는 일부항목만 표시합니다. ( 여기까지 오셨으면  pandas 및 matlibplot 기능 사용 보유자로 예상되므로, 알아서.. )

# -*- coding: utf-8 -*-
"""
Created on 2019. 8. 16.

@author: HOME
"""

import os
import sys

import pandas
import pandas_datareader as pdr

import matplotlib.pyplot as plt

class finance_quandl:
"""
국제 금/은/구리 가격
https://www.quandl.com/ 다양한 금융, 경제 데이터와 API를 제공)
https://docs.quandl.com/docs/python-installation
sign-up and get ''
pip/pip3 install quandl

"LBMA/GOLD", 런던 금시장협회 (LBMA) 금 가격
"LBMA/SILVER", 런던 금시장협회 (LBMA) 은 가격

국제 구리 가격
런던 금속 거래소(London Metal Exchange), 전 세계 비철금속거래의 지표
Cash(현금가격), 3Months(3개월 선물가격), 15Months(15개월 선물가격) 등
"""
import quandl

def __init__(self):
self.df_gold = pandas.DataFrame()
self.df_silver = pandas.DataFrame()
self.df_copper = pandas.DataFrame()
self.df_oil = pandas.DataFrame()

def gold(self):
self.df_gold = self.quandl.get('LBMA/GOLD', start_date='2010-01-01', authtoken="VbSziv5CowGrkRqWnKq_")
print(type(self.df_gold))
print(self.df_gold.tail(5))
self.df_gold.plot()
return self.df_gold

def silver(self):
self.df_silver = self.quandl.get('LBMA/SILVER', start_date='2010-01-01', authtoken="VbSziv5CowGrkRqWnKq_")
print(type(self.df_silver))
print(self.df_silver.tail(5))
self.df_silver.plot()
return self.df_silver

def copper(self):
self.df_copper = self.quandl.get('ODA/PCOPP_USD', start_date='2010-01-01', authtoken="VbSziv5CowGrkRqWnKq_")
print('row count:', len(self.df_copper))
print(self.df_copper.tail(5))
self.df_copper.plot()

def crude_wti(self):
# 서부 텍사스 중질유(WTI Crude), monthly
#self.df_oil = self.df_copper = self.quandl.get("EIA/PET_RWTC_D", start_date='2019-01-01', authtoken="VbSziv5CowGrkRqWnKq_")
self.df_oil = self.quandl.get("FRED/WTISPLC", start_date='2010-01-01', authtoken="VbSziv5CowGrkRqWnKq_")
print(type(self.df_oil))
print(self.df_oil.tail(5))
self.df_oil.plot()
return self.df_oil

def crude_dubai(self):
# 두바이유 (Dubai Crude), monthly
self.df_oil = self.quandl.get("ODA/POILDUB_USD", start_date='2010-01-01', authtoken="VbSziv5CowGrkRqWnKq_")
print(type(self.df_oil))
print(self.df_oil.tail(5))
self.df_oil.plot()
return self.df_oil

def miscellaneous(self):
df_copper = pdr.DataReader('LME/PR_CU', 'quandl', start='2000-01-01')
print('row count:', len(df_copper))
df_copper.tail(10)
df_copper['CashSeller&Settlement'].plot()

class finance_fred:
"""
국제 원유 가격
국제 원유 가격을 대표하는 3대 유종이 있으며, 생산지와 대표적인 소비지역이 다르다.
서부 텍사스 중질유 (POILWTIUSDM): 국제 원유가격을 대표
두바이유 (POILDUBUSDM): 한국이 주로 수입(국내 유가에 영향)
북해 브렌트유 (POILBREUSDM): 북해에서 생산, 유럽과 아프리카에서 소비
FRED 링크는 각각 다음과 같다.
서부 텍사스 중질유(WTI Crude): https://fred.stlouisfed.org/series/POILWTIUSDM
두바이유 (Dubai Crude): https://fred.stlouisfed.org/series/POILDUBUSDM
북해 브렌트유(Brent Crude): https://fred.stlouisfed.org/series/POILBREUSDM
"""
def __init__(self):
pass

def gold(self):
"""
Gold Fixing Price in London Bullion Market (based in U.S. Dollar)
(HSBC, 도이치은행 등) 5개 은행이 회의를 통해 Gold Fixing Price 발표 하루에 두 번 (10:30 AM, 3:00 PM 런던시간)
FRED (세인트루이스 연방준비은행 경제 데이터)
https://fred.stlouisfed.org/series/GOLDAMGBD228NLBM
https://fred.stlouisfed.org/series/GOLDPMGBD228NLBM
"""
# 세인트루이스 연방준비은행 금(Gold)
df_data = pdr.DataReader('GOLDAMGBD228NLBM', 'fred', start='2000-01-01')
df_data = pdr.DataReader('GOLDPMGBD228NLBM', 'fred', start='2000-01-01')
print('row count:', len(df_data))
print(df_data.tail(5))

def silver(self):
df_data = pdr.DataReader('SLVPRUSD', 'fred', start='2000-01-01')
print('row count:', len(df_data))
print(df_data.tail(5))

def copper(self):
df_data = pdr.DataReader('PCOPPUSDM', 'fred', start='2000-01-01')
print('row count:', len(df_data))
print(df_data.tail(5))

def crude_wti(self):
# 서부 텍사스 중질유(WTI Crude), monthly
df_data = pdr.DataReader('POILWTIUSDM', 'fred', start='2000-01-01')
print('row count:', len(df_data))
print(df_data.tail(5))

def crude_dubai(self):
# 두바이유 (Dubai Crude), monthly
df_data = pdr.DataReader('POILDUBUSDM', 'fred', start='2000-01-01')
print('row count:', len(df_data))
print(df_data.tail(5))

def crude_mixed(self):
# POILDUBUSDM: 두바이유
# POILWTIUSDM: 서부 텍사스 중질유

df_oil = pdr.DataReader(['POILDUBUSDM', 'POILWTIUSDM'], 'fred', start='2000-01-01')
print('row count:', len(df_oil))
df_oil.tail(10)
df_oil.plot()

def crude_diff(self):
df_oil = pdr.DataReader(['POILDUBUSDM', 'POILWTIUSDM'], 'fred', start='2000-01-01')
df_oil['diff'] = df_oil['POILDUBUSDM'] - df_oil['POILWTIUSDM']
df_oil.tail(10)
df_oil['diff'].plot()
ax = df_oil['diff'].plot(color='k')

x = df_oil.index
y = df_oil['diff']

ax.fill_between(x, 0, y, where=y > 0, facecolor='r', alpha=0.6, interpolate=True)
ax.fill_between(x, 0, y, where=y <= 0, facecolor='b', alpha=0.6, interpolate=True)

def test():

data = finance_quandl()
# data = finance_fred()
data.gold()
data.silver()
data.copper()
data.crude_wti()
# data.crude_dubai()

plt.show()

if __name__ == "__main__":
test()

finance.py
0.01MB

 

728x90