2025. 1. 13. 13:00ㆍ프로젝트
이 전 글들이 궁금하다면 ?
0. 사이트를 만드려는 이유
https://hsjoo126.tistory.com/80
1-1. 프로젝트 가능성 보기
https://hsjoo126.tistory.com/81
pandas 와 jupyter 이용해서 테스트해보기
https://hsjoo126.tistory.com/82
1-2. 기획 단계 - 디자인, 와이어 프레임, ERD 등
https://hsjoo126.tistory.com/83
자! 오늘은 개발을 해보도록 하자!
Django 를 이용해서 사이트를 만들어보겠다.
계획(틈틈히 깃헙 업로드!)
- 기본 세팅하기
- 새폴더, 가상환경, 각종 pip 설치(장고, 판다스 등)
- 프로젝트 만들고~ 앱만들고~ url도 작성~
- 각 페이지 view 짜기
- 페이지 별로 들어가는 데이터 뽑기
- templates에 어떻게 넘겨줄지 생각하기 .. ?
- templates
- view에서 넘어온 데이터 깔끔하게 정리 해서 보여주기
계획이랄 것도 없지만, 대충 생각나는 대로 적어보았다..!
사실 처음해보는 거라 ㅋㅋㅋㅋ 빈틈이 많을 거라 예상된다.
아마 view 파트에서 많이 헤맬거같은데, 그래도 해보자!
일단 기본세팅 먼저!
#1. 새폴더 만들기
#2. 깃 레포지토리 파고 깃에 올리기
#3. gitignore 파일 만들기
#4. 가상환경설치
#5. 각종 pip install
pip install django
pip install pandas
pip install yfinance
pip install notebook
#6.requirements.txt 생성
pip freeze > requirements.txt
#7 장고 프로젝트 시작하기
django-admin startproject 프로젝트이름
#8 앱 만들기
python manage.py startapp 앱이름
#9 urls.py 작성
#10 views.py 작성
#11 html 작성
urls.py 작성
views.py 작성
html 작성
서버켜서 테스트 해보기!!
코드는 최대한 간단하게 짰다.
복잡할게 없다고 생각해서 뷰도 함수형 뷰로 작성했고
url, view, html 까지 잘 연결 되어 있나 테스트도 마쳤다.
아마 이런거 저런거 적용해보면서 코드는 계속 바뀔 거라 예상된다!
이번 플젝의 목표는 최소한의 일과 최대의 효율이다!
복잡한 거 다 빼버리고 쉽게 만들 거다!
자, 기본 세팅은 완료가 되었고 이제,
야후 파이낸스 데이터를 어떻게 사이트에 보여줄지 생각해봐야한다.
내가 구현해야하는 항목은 다음과 같다.
구현해야할 목록
- 티커리스트
- 현재 주가
- 마지막 배당금
- 마지막 배당일
- 배당률
- 시총
1. 티커 리스트 구하기
초고배당주나 고중배당주를 보여주려면, 배당률 기준으로 필터링을 걸어서 각각 보여줘야 한다.
중요한 점은 티커 리스트를 구해야한다는 것이다.
사실... 여기서 막힐 줄 몰랐는데 티커가 워낙 방대하기도 하고 ... 그래서 구하기가 쉽지 않았다.
그러던 중 한 깃허브를 발견했는데
https://github.com/ranaroussi/yfinance/discussions/1699
나와 같은 고민을 한 사람들이 엄청 많았다.
나스닥 api 가 있기도 하고 티커들을 모아 놓은 사이트? 도 있고 했는데
문득 드는 생각이,
- 이 정보가 정확한가
- 정보가 꾸준히 업데이트 되는가
이런 생각이 들었다. 무엇보다도 옛날 정보를 그대로 갔다 쓸 수 없다는 생각이 들었다.
정확한 정보를 사용하려면 어떻게 해야할까? 음... 지금 생각나는 건 2가지 방법이다.
1. 야후 파이낸스 크롤링 하기
2. 유료 api 사용하기
이 둘 중 한 가지의 방법으로 구현할 수 있을 거 같았다(물론 확실하지 않음)
아 근데, 여기까지 해보니까 점점 일이 커지는 느낌이 들어서!
일단 수동으로 티커리스트를 넣어 놓고 mvp를 완성한 후에,
크롤링을 하든 api 를 사용하든 해봐야겠다!
다른 항목으로 넘어가보자~
구현해야할 목록
- 티커리스트 (일단 제외)
- 현재 주가
- 마지막 배당금
- 마지막 배당일
- 배당률
- 시총
2. 현재주가
현재 주가를 조사해보자!
이리저리 코드를 짜봤는데, yfinance에서 현재 주가를 불러오는 건 없는 것 같다.
https://stackoverflow.com/questions/61104362/how-to-get-actual-stock-prices-with-yfinance
그리고 다른 사람들은 어떻게 했나 싶어(위 사이트 참고)
구글링으로 찾아보기도 했는데, 대부분 종가를 구현해놓았다.
음.생각해보면 실시간으로 주고 받으려면 웹소켓을 써야하는 거 아닌가..? ㅋㅋㅋㅋㅋ
이제서야 깨닫다니!! 프로젝트가 복잡해지는 것은 싫은데 ....
일단 넘어가~
3. 마지막 배당금 & 마지막 배당금 날짜
이건 앞에 것들에 비해 코드 짜기가 쉬웠다!
다음과 같이 코드를 구성했고,
import yfinance as yf
ticker = yf.Ticker("AAPL")
# 배당금 데이터 가져오기
dividends = ticker.dividends
# 마지막 배당금 정보 가져오기
if not dividends.empty:
last_dividend_date = dividends.index[-1] # 마지막 배당금 날짜
last_dividend_value = dividends.iloc[-1] # 마지막 배당금 금액
print(f"마지막 배당금 날짜: {last_dividend_date}")
print(f"마지막 배당금 금액: {last_dividend_value}")
else:
print("배당금 데이터가 없습니다.")
결과는 이렇게 나왔다.
마지막 배당금 날짜: 2024-11-08 00:00:00-05:00
마지막 배당금 금액: 0.25
4. 배당률
그다음으론 배당률이다.
# 배당률 구하기
ticker = yf.Ticker("AAPL")
Yield = ticker.info['dividendYield']
print(round(Yield*100,2))
#결과
0.41
주식의 info를 조회 할 수 있는데, 그 info 안에 배당률이 들어있어서
쉽게 구할 수 있었다!
음 근데, 이 배당률이 어떻게 측정되는 것인지 궁금하긴 하다
배당률을 구할 때, 대부분 이렇게 구하라고 한다.
여기서 궁금한 것은?
- 현재 주가는 계속 바뀌지 않나..?
- 그럼 배당률도 현재 주가처럼 실시간으로 바뀌어야하는 거 아닌가?
- 배당금을 지급할 때의 주가를 기준으로 나오는 건가?
=> 그럼 야후 파이낸스는 어떤 기준으로 배당률을 측정하고 있을까?
GPT 슨생님께 물어보았다.
야후 파이낸스에서 제공하는 배당수익률(Dividend Yield)은 일반적으로 다음과 같은 공식을 사용하여 계산됩니다
배당수익률(%) = (연간 배당금 / 주가) × 100
1. 기준 = 연간 배당금
보통 최근 지급된 분기 배당금을 기준으로 계산하며, 이를 연간으로 환산합니다(4분기 기준).
예를 들어, 최근 분기 배당금이 $0.50이라면, 연간 배당금은 $0.50 × 4 = $2.00로 계산됩니다.
2. 주가
보통 현재 시장 가격을 기준으로 배당수익률을 산출합니다.
3. 특이사항
특정 기업은 분기별이 아닌 연간 배당금을 지급하기도 하며, 이런 경우 야후 파이낸스가 이를 반영하여 계산합니다.
배당 정책이 변경된 경우 최신 데이터를 기준으로 계산될 수 있습니다.
오호 gpt 의 말을 듣고 홈페이지를 찾아보니
배당금을 정말 1.00 달러로 계산하는 것을 볼 수 있다.
(애플의 마지막 배당금은 0.25달러였으니 4분기를 곱해서 1달러라는 값이 나온 것!)
왜 0.25가 아닌 1달러로 계산한지는 모르겠지만, 어쨌든!
큰 문제가 되지 않는다! yfinance에서 불러올 때 연간 배당금이 뜨진 않으니까!
엄.. 그런데,,,, 내가 앞서 구했던 배당날짜에 문제가 좀 있는 거 같다..!
그건 다음 글에서 알아보자!
(글이 너무 길어지는 관계로 한 번 끊어서 가보자구~)
'프로젝트' 카테고리의 다른 글
나만의 배당주 사이트 만들기) 2-2. 개발 단계 - 코드 정리(티커리스트, 마지막 배당금, 마지막 배당일, 배당률, 시총) (0) | 2025.01.15 |
---|---|
나만의 배당주 사이트 만들기) 2-1. 개발 단계 - 배당지불일, 시장별 티커리스트 구하기 feat. 웹크롤링, Yfinance, FinanceDataReader (0) | 2025.01.14 |
나만의 배당주 사이트 만들기) 1-2. 기획 단계 - 디자인, 와이어 프레임, ERD 등 (0) | 2025.01.10 |
나만의 배당주 사이트 만들기) 1-1. 기획 단계 - 프로젝트 가능성 보기 (0) | 2025.01.08 |
나만의 배당주 사이트 만들기) 0. 내가 사이트를 만드려는 이유 (0) | 2025.01.08 |