프로그래밍/파이썬

[Python] 파이썬 FinanceDataReader - 미국 ETF 시세 조회

매 석 2022. 10. 7. 10:44
반응형

1. FianceDataReader 설명 및 미국 주식 가격 조회는 아래 링크를 참조

 

[Python] 파이썬 FianceDataReader - 미국 주식 가격 조회하기

1. FinanceDataReader란? - 한국 주식 가격, 미국주식 가격, 지수, 환율, 암호화폐 가격 등의 데이터를 제공하는 라이브러리이다. - 이번 포스팅에서는 미국 주식 가격 조회하는 방법에 대해서 소개하려

maeseok.tistory.com

 

2. ETF 종목 파일에 저장

import FinanceDataReader as fdr
import pickle

df_etfus = fdr.StockListing('ETF/US')
df_etfus = df_etfus[['Name','Symbol']]
codepath="./etfus.txt"
f = open(codepath,"w")
#pickle 모듈을 사용하여 dataframe 타입을 파일에 저장한다. 
df_etfus.to_pickle(codepath)
f.close()

- fdr.StockListing('ETF/US')를 통해서 ETF 종목을 불러와서 /etfus.txt에 dataframe 형태로 저장한다.

- 참고로 파일에 저장을 해놓는 이유는 속도를 빠르게 하기 위함입니다.

 

3. 호출 시 ETF/US 정보 반환 함수

#ETF/US 연결하는 함수
def ETFUS_connect():
    codepath = "./DBandDB_SOURCE/etfus.txt"
    f = open(codepath,"r")
    df_etfus = pd.read_pickle(codepath)
    f.close()
    return df_etfus

- 함수만 호출 시 ETF/US의정보가 담긴 dataframe이 반환되게끔 만들어놓았다.

 

4. 호출 시 형식에 맞춰 가격 정보를 반환하는 함수

#ETF/US 가격 생성하는 함수
def ETFUS_rate(df_etfus,Name):
    nowDATE = time_format()

    symbol = df_etfus[df_etfus.Name==Name].Symbol.values[0].strip()
    rate = fdr.DataReader(symbol,nowDATE[:7])
    rate = rate[['Close','Change']]
    etfusrate = rate[-2:]
    ETFUS = []
    ETFUS.append(nowDATE)
    ETFUS.append(Name)
    ETFUS.append('$ '+str(etfusrate['Close'].values[1]))
    gap = "{:.2f}".format(etfusrate['Close'].values[1]-etfusrate['Close'].values[0])
    ETFUS.append('$ '+gap)
    ETFUS.append(str("{:.2f}".format(etfusrate['Change'].values[1]*100))+'%')
    return ETFUS

- 정보를 입력한 상태로 함수 호출을하면 가격 정보가 담긴 리스트가 반환되게 만들어놓았다.

 

5. 3번 4번 함수를 이용하여 html에 가격 정보 넘기기

#미국 ETF 종목 검색
@app.route("/inquiry/etfUS")
def EtfUS():
    return render_template("inquiryEtfUS.html")

#미국 ETF 오늘의 시세 출력
@app.route("/inquiry/etfUSrate")
def EtfUSrate():
    try:
        company = request.args.get('company')
        date = request.args.get('date')
        df_etfus = US.ETFUS_connect()
        stock_rate = US.ETFUS_rate(df_etfus,company)
        df = US.df_made(df_etfus,company,date)
        #chart img
        US.basic_chart(df,company)
        #chart html
        US.real_chart(df,company)
    except:
        return redirect("/")
    return render_template("inquiryEtfUSrate.html",searchingBy=company,
stockRate=stock_rate)

- df_etfus = US.ETFUS_connect()

- stock_rate = US.ETFUS_rate(df_etfus,company)

- 위 두 함수를 통해서 최종적으로 inquiryEtfUSrate.html에 보낼 stock_rate 값을 구했다.

 

6. 최종 결과