STEP 1
๐ Python ํ๊ฒฝ ์ค์น
1-1. Visual Studio Code ์ค์น
์ฝ๋ฉ ํธ์ง๊ธฐ์ธ VS Code๋ฅผ ๋จผ์ ์ค์นํฉ๋๋ค. ์ฝ๋๋ฅผ ๋ณด๊ณ ํธ์งํ๋ ์์
๊ณต๊ฐ์
๋๋ค.
2
์ค์น ์ต์
: ์ค์น ๊ณผ์ ์์ "PATH์ ์ถ๊ฐ" ๋ฐ "ํ์๊ธฐ ์ปจํ
์คํธ ๋ฉ๋ด์ ์ถ๊ฐ" ์ฒดํฌ๋ฐ์ค๋ฅผ ๋ฐ๋์ ์ฒดํฌํ์ธ์.
3
Python ํ์ฅ ์ค์น: VS Code ์คํ โ ์ผ์ชฝ ์์ด์ฝ ์ค Extensions(๋ค๋ชจ 4๊ฐ) ํด๋ฆญ โ ๊ฒ์์ฐฝ์ "Python" ์
๋ ฅ โ Microsoft ์ ๊ณต Python ํ์ฅ ์ค์น
1-2. Python ์ค์น
1
๋ค์ด๋ก๋: https://python.org ์ ์ โ "Downloads" โ "Download Python 3.x.x" ํด๋ฆญ
2
โ ๏ธ ์ค์: ์ค์น ์ฒซ ํ๋ฉด์์ "Add Python to PATH" ์ฒดํฌ๋ฐ์ค๋ฅผ ๋ฐ๋์ ์ฒดํฌํ ํ Install์ ํด๋ฆญํ์ธ์.
์ด๊ฑธ ๋น ๋จ๋ฆฌ๋ฉด ๋์ค์ ๋ช
๋ น์ด๊ฐ ์ธ์๋์ง ์์ต๋๋ค.
3
์ค์น ํ์ธ: ํค๋ณด๋
Win+R โ
cmd ์
๋ ฅ โ ์ํฐ โ ์๋ ๋ช
๋ น์ด ์
๋ ฅ
python --version
Python 3.x.x๊ฐ ํ์๋๋ฉด ์ฑ๊ณต์
๋๋ค.
STEP 2
๐ฆ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
2-1. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฌด์์ธ๊ฐ?
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋๊ตฐ๊ฐ ์ด๋ฏธ ๋ง๋ค์ด๋์ ๋๊ตฌ ๋ชจ์์
๋๋ค. ์๋ฅผ ๋ค์ด "์์
ํ์ผ ์ฝ๊ธฐ" ๊ธฐ๋ฅ์ ์ง์ ์๋ฐฑ ์ค๋ก ์ง์ง ์์๋, pandas ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๋ฉด ํ ์ค๋ก ํด๊ฒฐ๋ฉ๋๋ค.
๐ฅ๏ธ streamlit
ํ์ด์ฌ ์ฝ๋๋ฅผ ์น ๋์๋ณด๋๋ก ๋ฐ๊ฟ์ฃผ๋ ๋๊ตฌ. ์ด ํ๋ก์ ํธ์ ํต์ฌ ํ๋ฉด์ ๋ด๋นํฉ๋๋ค.
๐ pandas
์์
์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋๊ตฌ. ์์
ํ์ผ ์ฝ๊ธฐ/์ฐ๊ธฐ, ๊ณ์ฐ, ์ ๋ ฌ์ ๋ด๋นํฉ๋๋ค.
๐ yfinance
Yahoo Finance์์ ๋ฏธ๊ตญ ์ฃผ์(QQQ, SPY ๋ฑ) ์ค์๊ฐ ๊ฐ๊ฒฉ์ ๊ฐ์ ธ์ต๋๋ค.
๐ plotly
์ธํฐ๋ํฐ๋ธ ์ฐจํธ(ํ์ด์ฐจํธ, ๊ฒ์ด์ง ๋ฑ)๋ฅผ ๋ง๋๋ ์๊ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
๐ openpyxl
์์
ํ์ผ์ ํ์ด์ฌ์์ ์ฝ๊ณ ์์(์ด ๋๋น, ์ซ์ ํ์)๊น์ง ์กฐ์ํฉ๋๋ค.
๐ก FinanceDataReader
ํ๊ตญ ETF/์ฃผ์ ์ฝ๋๋ฅผ ์๋์ผ๋ก ๊ฒ์ํ๊ณ ๊ฐ์ ธ์ค๋ ๊ตญ๋ด ์ ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
2-2. ์ค์น ๋ช
๋ น์ด
VS Code์์ ํฐ๋ฏธ๋์ ์ฝ๋๋ค: ์๋จ ๋ฉ๋ด ํฐ๋ฏธ๋ โ ์ ํฐ๋ฏธ๋
pip install streamlit pandas openpyxl yfinance plotly
pip install FinanceDataReader
pip list
๐ก ํ: ์ค์น ์ค ์๋ฌ๊ฐ ๋๋ฉด pip๋ฅผ ๋จผ์ ์
๊ทธ๋ ์ด๋ํ์ธ์: python -m pip install --upgrade pip
โน๏ธ ModuleNotFoundError ๋ฐ์ ์: ์๋ฌ ๋ฉ์์ง์ ๋์จ ๋ชจ๋๋ช
์์ pip install ์ ๋ถ์ฌ ์ค์นํ๋ฉด ๋ฉ๋๋ค. (์: pip install requests)
STEP 3
๐ ์์
ํด๋ ๋ฐ ์์
ํ์ผ ์ค๋น
3-1. ์์
ํด๋ ๋ง๋ค๊ธฐ
1
ํด๋ ์์ฑ: ๋ฐํํ๋ฉด ๋๋ ์ํ๋ ์์น์ stock ํด๋๋ฅผ ๋ง๋์ธ์ (๊ฒฝ๋ก์ ํ๊ธ์ด ์๋ ๊ฒ ์์ ํฉ๋๋ค)
์: C:\Vibe coding\stock
2
VS Code๋ก ํด๋ ์ด๊ธฐ: VS Code โ ํ์ผ โ ํด๋ ์ด๊ธฐ โ ๋ง๋ ํด๋ ์ ํ
3-2. ๋์ํฌํธํด๋ฆฌ์ค.xlsx ๋ง๋ค๊ธฐ (๋ฉ์ธ ๋ฐ์ดํฐ)
์ด ํ์ผ์ ์ค์ ๋ณด์ ์ข
๋ชฉ ์๋์ ์
๋ ฅํ๋ ์๋ณธ ํ์ผ์
๋๋ค. ๊ฐ์ธ์ ๋ณด(์ค์ ๊ธ์ก, ๊ณ์ข๋ฒํธ ๋ฑ)๊ฐ ๋ค์ด๊ฐ๋ฏ๋ก ๊ณต์ ํ์ง ๋ง์ธ์.
โ ๏ธ ํ์ผ ์ด๋ฆ์ ๋ฐ๋์ ๋์ํฌํธํด๋ฆฌ์ค.xlsx๋ก ์ ์ฅํ๊ณ stock ํด๋ ์์ ๋ฃ์ด์ผ ํฉ๋๋ค.
โน๏ธ ์ข
๋ชฉ์ฝ๋๋ ์๋์ผ๋ก ์ฐพ์์ค๋๋ค!
์ข
๋ชฉ๋ช
์ ์
๋ ฅํ๋ฉด ์ฑ์ด FinanceDataReader(๊ตญ๋ด ETF), ๋ค์ด๋ฒ ๊ธ์ต API(ํ๊ตญ ์ฃผ์), yfinance(๋ฏธ๊ตญ ์ฃผ์)๋ฅผ ํตํด ์ข
๋ชฉ์ฝ๋๋ฅผ ์๋์ผ๋ก ๊ฒ์ํฉ๋๋ค.
๋ฐ๋ผ์ ์ข
๋ชฉ์ฝ๋ ์ด์ ์์ด๋ ๋ฉ๋๋ค.
๋จ, ์ ๊ท ์์ฅ ETF์ฒ๋ผ ์๋ ๊ฒ์์ด ์ ๋๋ ๊ฒฝ์ฐ์๋ง ์ข
๋ชฉ์ฝ๋๋ฅผ ์ง์ ์
๋ ฅํ๋ฉด ๋ฉ๋๋ค.
์ํธ ๊ตฌ์ฑ ์์ (๊ณ์ข๋ณ๋ก ์ํธ๋ฅผ ๋ถ๋ฆฌ)
๊ฐ ๊ณ์ข๋ง๋ค ์ํธ๋ฅผ ํ๋์ฉ ๋ง๋ญ๋๋ค. ์ํธ ์ด๋ฆ์ ๊ณ์ข ์ด๋ฆ์ผ๋ก ์ง์ต๋๋ค (์: ๊ตญ๋ดETF, ๋ฏธ๊ตญETF, ๊ฐ์ธ์ฐ๊ธ ๋ฑ)
โถ ๊ตญ๋ดETF ์ํธ ์์ โ ์ต์ ์
๋ ฅ (์ข
๋ชฉ๋ช
+ ์๋ + ํ๊ท ๋งค์
๊ฐ๋ง ์์ผ๋ฉด ๋ฉ๋๋ค)
| ์ข
๋ชฉ | ์๋ | ํ๊ท ๋งค์
๊ฐ |
| KODEX 200 | 30 | 35,200 |
| TIGER 200 | 20 | 34,800 |
| TIGER ๋ฏธ๊ตญS&P500 | 50 | 18,500 |
| โ ๋ณด์ ์ข
๋ชฉ์ ๊ณ์ ์๋๋ก ์ถ๊ฐ |
โถ ๋ฏธ๊ตญETF ์ํธ ์์ (ํฐ์ปค๋ช
์ด ๊ณง ์ฝ๋์ด๋ฏ๋ก ์ข
๋ชฉ๋ช
์ ํฐ์ปค๋ฅผ ์
๋ ฅ)
| ์ข
๋ชฉ | ์๋ | ํ๊ท ๋งค์
๊ฐ |
| QQQ | 5 | XXX.XX |
| SPY | 3 | XXX.XX |
| SCHD | 10 | XXX.XX |
๐ก ํต์ฌ ๊ท์น:
โข ์ข
๋ชฉ, ์๋, ํ๊ท ๋งค์
๊ฐ โ ์ด 3๊ฐ ์ด๋ง ์์ผ๋ฉด ๋์๋ณด๋๊ฐ ์๋ํฉ๋๋ค
โข ์ข
๋ชฉ์ฝ๋ ์ด์ ์ ํ์ฌํญ์
๋๋ค (์๋ ๊ฒ์์ด ์คํจํ ๊ฒฝ์ฐ ๋ณด์กฐ์ฉ์ผ๋ก๋ง ์ฌ์ฉ)
โข ํ๊ตญ ์ฃผ์/ETF๋ ์ข
๋ชฉ ์ ์ฒด๋ช
๊ทธ๋๋ก ์
๋ ฅ, ๋ฏธ๊ตญ ์ฃผ์์ ์๋ฌธ ํฐ์ปค(QQQ, SPY ๋ฑ)
โข "My์์ฐ" ์ด๋ฆ์ ์ํธ๋ ์์คํ
์ด ์๋์ผ๋ก ์ ์ธํฉ๋๋ค
3-3. portfolio2.xlsx ๋ง๋ค๊ธฐ (๋ถ๋ฅ ์ ๋ณด ํ์ผ)
์ด ํ์ผ์ ์ข
๋ชฉ๋ณ๋ก ์์ฐ๊ตฌ๋ถ, ํ
๋ง, ํ๋ฏธ๊ตฌ๋ถ์ ์๋์ผ๋ก ๋ถ๋ฅํด๋๋ ๋ณด์กฐ ํ์ผ์
๋๋ค. ์ฒ์์๋ ๋น ํ
ํ๋ฆฟ์ผ๋ก ์์ํด๋ ๋ฉ๋๋ค โ ๋์๋ณด๋๋ฅผ ์ฒ์ ์คํํ๋ฉด ๋์ํฌํธํด๋ฆฌ์ค.xlsx๋ฅผ ์ฝ์ด์ ์๋์ผ๋ก ์ผ๋ถ ์ฑ์์ค๋๋ค.
โน๏ธ ์ด ์์๊ฐ ๋ฌ๋ผ๋ ๋ฌธ์ ์์ต๋๋ค!
์ฑ์ ์ด ์ด๋ฆ(ํค๋)์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ ๋๋ฌธ์, ์์
์์ ์ด ์์๊ฐ ๋ณธ์ธ์ด ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋ฌ๋ผ๋ ๋ฉ๋๋ค.
์ค์ํ ๊ฒ์ ์ด ์ด๋ฆ(์ข
๋ชฉ, ์์ฐ๊ตฌ๋ถ, ํ
๋ง, ํ๋ฏธ๊ตฌ๋ถ, ์ข
๋ชฉ์ฝ๋)์ด ์ ํํ ์ผ์นํ๋ ๊ฒ์
๋๋ค.
โถ ์ง์ ์
๋ ฅํด์ผ ํ๋ ์ด (3๊ฐ์ง)
| ์ข
๋ชฉ |
์์ฐ๊ตฌ๋ถ |
ํ
๋ง |
ํ๋ฏธ๊ตฌ๋ถ |
์ข
๋ชฉ์ฝ๋ (์ ํ) |
| KODEX 200 | ๊ตญ๋ด ์ฃผ์ | ๊ตญ๋ด์ง์ | KR | 069500 |
| TIGER ๋ฏธ๊ตญS&P500 | ๋ฏธ๊ตญ์ง์์ถ์ข
๊ตญ๋ด ETF | ๋ฏธ๊ตญ ์์ฅ์ง์ | US | 360750 |
| QQQ | ๋ฏธ๊ตญ ETF | ๋ฏธ๊ตญ ๋น
ํ
ํฌ | US | QQQ |
| SCHD | ๋ฏธ๊ตญ ETF | ๋ฐฐ๋น์ฑ์ฅ | US | SCHD |
| โ ๋ณด์ ์ข
๋ชฉ์ ๊ณ์ ์๋๋ก ์ถ๊ฐ |
โถ ์ฑ์ด ์๋์ผ๋ก ์ฑ์์ฃผ๋ ์ด (๋์๋ณด๋ ์คํ ์ ์๋ ๊ฐฑ์ )
| ์๋ | ํ๊ท ๋งค์
๊ฐ | ๋งค์
๊ธ์ก | ํ์ฌ๊ฐ | ํ๊ฐ๊ธ์ก | ์์ต | ์์ต๋ฅ (%) | ์๊ฐ๋ฐฐ๋น๋ฅ (%) | ์ฐ๋ฐฐ๋น๊ธ |
| ์๋ | ์๋ | ์๋ |
์๋ | ์๋ | ์๋ |
์๋ | ์๋ | ์๋ |
๐ก ์์ฐ๊ตฌ๋ถ ์
๋ ฅ ์ต์
: ๊ตญ๋ด ์ฃผ์ / ๋ฏธ๊ตญ ETF / ๋ฏธ๊ตญ ์ฃผ์ / ๋ฏธ๊ตญ์ง์์ถ์ข
๊ตญ๋ด ETF
๐ก ํ๋ฏธ๊ตฌ๋ถ ์
๋ ฅ ์ต์
: KR (ํ๊ตญ ์์ฐ) / US (๋ฏธ๊ตญ ์์ฐ)
๐ก ์ฒ์ ์์ํ ๋๋ ์ข
๋ชฉ, ์์ฐ๊ตฌ๋ถ, ํ
๋ง, ํ๋ฏธ๊ตฌ๋ถ 4๊ฐ ์ด๋ง ๋ง๋ค์ด๋๋ฉด ๋ฉ๋๋ค. ๋๋จธ์ง ์ด์ ๋์๋ณด๋๊ฐ ์ฒซ ์คํ ์ ์๋์ผ๋ก ์ถ๊ฐํฉ๋๋ค.
STEP 4
๐ค Google Gemini๋ฅผ ํ์ฉํ ๊ธฐ์ด ์ฝ๋ฉ
Gemini๋ ๊ตฌ๊ธ์ AI์
๋๋ค. gemini.google.com์ ๊ตฌ๊ธ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ๋ฉด ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
4-1. ์ฒ์ ์์ํ ๋ โ ๊ธฐ๋ฐ ์ฝ๋ ๋ง๋ค๊ธฐ
๐ ํ๋กฌํํธ ์์ 1 โ ๊ธฐ๋ณธ ๋ผ๋ ์์ฒญ
๋๋ Python๊ณผ Streamlit์ ์ด์ฉํด ์ฃผ์ ํฌํธํด๋ฆฌ์ค ๋์๋ณด๋๋ฅผ ๋ง๋ค๋ ค๊ณ ํด.
์กฐ๊ฑด:
- ํ์ผ ์ด๋ฆ: app.py
- ์์
ํ์ผ(๋์ํฌํธํด๋ฆฌ์ค.xlsx)์ ์ฝ์ด์ ์ข
๋ชฉ๋ณ ์๋, ํ๊ท ๋งค์
๊ฐ๋ฅผ ๊ฐ์ ธ์ด
- yfinance๋ก ๋ฏธ๊ตญ ์ฃผ์ ์ค์๊ฐ ํ์ฌ๊ฐ ์กฐํ
- ๋ค์ด๋ฒ ๊ธ์ต API๋ก ํ๊ตญ ์ฃผ์ ํ์ฌ๊ฐ ์กฐํ
- ์ข
๋ชฉ๋ณ (ํ์ฌ๊ฐ ร ์๋ - ํ๊ท ๋งค์
๊ฐ ร ์๋)์ผ๋ก ์์ต ๊ณ์ฐ
- ์ด ์์ฐ ํฉ๊ณ, ์ข
๋ชฉ๋ณ ์ํ ํ์ด์ฐจํธ ํ์
๊ธฐ์ด ์ฝ๋๋ฅผ ๋ง๋ค์ด์ค.
๐ ํ๋กฌํํธ ์์ 2 โ ์์
์ํธ ๊ตฌ์กฐ ์ค๋ช
ํ ์์ฒญ
๋ด ์์
ํ์ผ(๋์ํฌํธํด๋ฆฌ์ค.xlsx)์๋ ์ํธ๊ฐ ์ฌ๋ฌ ๊ฐ์ผ.
๊ฐ ์ํธ ์ด๋ฆ์ด ๊ณ์ข ์ด๋ฆ(์: ๊ตญ๋ดETF, ๋ฏธ๊ตญETF, ๊ฐ์ธ์ฐ๊ธ)์ด๊ณ ,
๊ฐ ์ํธ์๋ ์ข
๋ชฉ์ฝ๋, ์ข
๋ชฉ, ์๋, ํ๊ท ๋งค์
๊ฐ ์ด์ด ์์ด.
์ด ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํด์ ๋ชจ๋ ์ํธ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ
ํญ(tab)์ผ๋ก ๊ณ์ข๋ณ๋ก ๋๋ ์ ๋ณด์ฌ์ฃผ๋ Streamlit ์ฝ๋๋ฅผ ์์ฑํด์ค.
๐ ํ๋กฌํํธ ์์ 3 โ ํ์จ ์ฐ๋ ์์ฒญ
๊ธฐ์กด app.py์ ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ค.
์ถ๊ฐ ๊ธฐ๋ฅ:
1. ๋ค์ด๋ฒ ๊ธ์ต API์์ ์ค์๊ฐ ์/๋ฌ๋ฌ ํ์จ์ ๊ฐ์ ธ์
2. ๋ฏธ๊ตญ ์ฃผ์(QQQ, SPY, SCHD ๋ฑ)์ ๋ฌ๋ฌ ๊ฐ๊ฒฉ์ ํ์จ์ ๊ณฑํด์ ์ํ๋ก ํ์ฐ
3. ์ฌ์ด๋๋ฐ์ ํ์ฌ ํ์จ์ ํ์
4. ํ์จ ๋ณ๋ ์๋ฎฌ๋ ์ดํฐ: ์ฌ์ฉ์๊ฐ ์ฌ๋ผ์ด๋๋ก ํ์จ ์
๋ ฅ โ ๋ฏธ๊ตญ ์์ฐ ํ๊ฐ์ก ๋ณํ ๊ณ์ฐ
์ฝ๋ ์ ์ฒด๋ฅผ ๋ค์ ์์ฑ๋ ํํ๋ก ์จ์ค.
4-2. ๊ธฐ๋ฅ ์ถ๊ฐ ๋จ๊ณ
๐ ํ๋กฌํํธ ์์ 4 โ ์๊ฐํ ๊ฐํ
app.py์ ์๋ ์ฐจํธ๋ค์ ์ถ๊ฐํด์ค:
1. ์์ฐ๊ตฌ๋ถ๋ณ(๊ตญ๋ด์ฃผ์/๋ฏธ๊ตญETF ๋ฑ) ํ์ด์ฐจํธ
2. ํ
๋ง๋ณ(๋ก๋ด/AI/๋ฐฐ๋น ๋ฑ) ํ์ด์ฐจํธ
3. ๊ณตํฌํ์์ง์(Fear & Greed Index) ๊ฒ์ด์ง ์ฐจํธ
4. VIX ์ง์ ํ์
5. ํ์จ 3๊ฐ์ ์ถ์ธ ๊บพ์์ ๊ทธ๋ํ
๋ชจ๋ ์ฐจํธ๋ plotly ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ
์ฌ์ด๋๋ฐ์๋ ์์ฅ ์งํ๋ง ๋ชจ์์ ๋ณด์ฌ์ค.
๐ ํ๋กฌํํธ ์์ 5 โ ์ํด ๋ชฉํ / ํ์ด์ด์กฑ ๊ธฐ๋ฅ
app.py์ ํ์ด์ด์กฑ ์ํด ๋ชฉํ ์ถ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ค.
์กฐ๊ฑด:
- ๋ชฉํ ๊ธ์ก: 3์ต์
- ๋ชฉํ ์ฐ๋: 2040๋
- ํ์ฌ ์ด ์์ฐ ๋๋น ๋ฌ์ฑ๋ฅ ์ progress bar๋ก ํ์
- ์ฌ์ด๋๋ฐ์์ ์ ์ ๋ฆฝ์ก(๋ง์)๊ณผ ์์ ์ฐ ์์ต๋ฅ (%)์ ์ฌ๋ผ์ด๋๋ก ์
๋ ฅ๋ฐ์
๋ชฉํ ๋ฌ์ฑ ์์ ์์ ์ ๊ณ์ฐํด์ ํ์
- D-day ์นด์ดํฐ๋ ํ์
๐ ํ๋กฌํํธ ์์ 6 โ ๋ฐฐ๋น๊ธ ๊ธฐ๋ฅ
app.py์ ๋ฐฐ๋น๊ธ ๋ถ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ค.
- yfinance์ ๋ค์ด๋ฒ API์์ ์ข
๋ชฉ๋ณ ์๊ฐ๋ฐฐ๋น๋ฅ (%)์ ๊ฐ์ ธ์ด
- ๋ณด์ ํ๊ฐ๊ธ์ก ร ๋ฐฐ๋น๋ฅ = ์ฐ๊ฐ ์์ ๋ฐฐ๋น๊ธ ๊ณ์ฐ
- ๋ฐฐ๋น๊ธ ์ธ๋ถ ๋ด์ญ ํ
์ด๋ธ ํ์ (์ข
๋ชฉ๋ช
, ๋ฐฐ๋น๋ฅ , ์ฐ๊ฐ ๋ฐฐ๋น๊ธ)
- "์ 2์ ์๊ธ ์๋ฎฌ๋ ์ดํฐ" ๋ฐ์ค: ์ฐ๊ฐ ์ด ๋ฐฐ๋น๊ธ์ 12๋ก ๋๋ ์ ๋ฐฐ๋น ํ์
- ๋ฐฐ๋น๊ธ Top5 ํ์ด์ฐจํธ
4-3. ์ค๋ฅ๊ฐ ๋ฌ์ ๋
๐ ํ๋กฌํํธ ์์ 7 โ ์๋ฌ ํด๊ฒฐ ์์ฒญ
์๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ด. ์์ธ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๋ ค์ค.
์๋ฌ ๋ฉ์์ง:
[์ฌ๊ธฐ์ ํฐ๋ฏธ๋์ ๋์จ ์๋ฌ ๋ฉ์์ง ์ ์ฒด๋ฅผ ๋ถ์ฌ๋ฃ๊ธฐ]
ํ์ฌ app.py ์ฝ๋ ์ค ๊ด๋ จ ๋ถ๋ถ:
[์๋ฌ๊ฐ ๋ฐ์ํ ํจ์๋ ๋ณ์ ์ฝ๋๋ฅผ ๋ถ์ฌ๋ฃ๊ธฐ]
์์ ๋ ์ฝ๋๋ก ๋ค์ ์จ์ค.
๐ ํ๋กฌํํธ ์์ 8 โ ์ฑ๋ฅ ์ต์ ํ
app.py๋ฅผ ์คํํ๋ฉด ์ข
๋ชฉ ๊ฐ๊ฒฉ์ ๊ฐ์ ธ์ค๋ ๋ฐ ๋๋ฌด ์ค๋ ๊ฑธ๋ ค.
์ข
๋ชฉ์ด 20๊ฐ ์ด์์ธ๋ฐ ์์๋๋ก ํ๋์ฉ ๊ฐ์ ธ์ค๊ณ ์์ด.
concurrent.futures๋ฅผ ์ฌ์ฉํด์ ๋ชจ๋ ์ข
๋ชฉ ๊ฐ๊ฒฉ์ ๋์์(๋ณ๋ ฌ๋ก) ๊ฐ์ ธ์ค๋๋ก ์ต์ ํํด์ค.
๋ํ @st.cache_data๋ฅผ ํ์ฉํด์ 60์ด ๋์ ์บ์๋๋๋ก ์ค์ ํด์ค.
๐ก Gemini ํ์ฉ ํ:
โข "์ฝ๋ ์ ์ฒด๋ฅผ ์์ฑ๋ ํํ๋ก ์จ์ค"๋ฅผ ํญ์ ๋ถ์ด์ธ์ โ ์ค๊ฐ์ ๋๊ธฐ์ง ์๊ฒ
โข ์๋ฌ ๋ฐ์ ์ ์๋ฌ ๋ฉ์์ง ์ ์ฒด๋ฅผ ๊ทธ๋๋ก ๋ณต๋ถํ์ธ์
โข ํ ๋ฒ์ ๋๋ฌด ๋ง์ ๊ธฐ๋ฅ์ ์์ฒญํ๊ธฐ๋ณด๋ค, ํ๋์ฉ ์ถ๊ฐํ๋ ๋ฐฉ์์ด ์์ ํฉ๋๋ค
STEP 5
โก Antigravity๋ก ๊ณ ๊ธ ๋ฐ์ด๋ธ์ฝ๋ฉ
5-1. Antigravity๋?
Antigravity๋ VS Code ์์ ๋ด์ฅ๋ AI ์ฝ๋ฉ ์์ด์ ํธ์
๋๋ค. Gemini๊ฐ ๋ํ์ฐฝ์์ ์ฝ๋๋ฅผ ์๋ ค์ฃผ๋ ์์ค์ด๋ผ๋ฉด, Antigravity๋ ์ค์ ๋ก ํ์ผ์ ์ง์ ์์ ํ๊ณ , ์ฌ๋ฌ ํ์ผ์ ๋์์ ๋ถ์ํ๊ณ , ์ฝ๋๋ฅผ ์คํ๊น์ง ํ ์ ์๋ ํ ๋จ๊ณ ๋์ ๋๊ตฌ์
๋๋ค.
๐ ํ์ผ ์ง์ ์์
๋ํ๋ง ํด๋ app.py ํ์ผ์ ์ง์ ์ด๊ณ ์์ ํฉ๋๋ค
๐ ์ฝ๋ ์ ์ฒด ๋ถ์
ํ๋ก์ ํธ ์ ์ฒด ํ์ผ์ ์ฝ๊ณ ๋ฌธ๋งฅ์ ๋ง๊ฒ ์์ ํฉ๋๋ค
๐ป ๋ช
๋ น์ด ์คํ
pip install, streamlit run ๋ฑ ํฐ๋ฏธ๋ ๋ช
๋ น์ ๋์ ์คํํฉ๋๋ค
๐ ๋ธ๋ผ์ฐ์ ํ
์คํธ
์คํํ ๋์๋ณด๋๋ฅผ ์ง์ ์ด์ด์ UI๋ฅผ ํ์ธํฉ๋๋ค
5-2. ์ค์น ๋ฐฉ๋ฒ
1
VS Code Extensions์์ ์ค์น:
VS Code ์คํ โ ์ผ์ชฝ Extensions ์์ด์ฝ ํด๋ฆญ โ ๊ฒ์์ฐฝ์ Antigravity ์
๋ ฅ โ ์ค์น
2
๊ตฌ๊ธ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ:
์ค์น ํ ํ๋จ ์ํ๋ฐ ๋๋ ์ฌ์ด๋๋ฐ์ Antigravity ์์ด์ฝ์ด ์๊น๋๋ค. ํด๋ฆญ โ ๊ตฌ๊ธ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ
3
์์
ํด๋ ํ์ธ:
VS Code์์ stock ํด๋๊ฐ ์ด๋ ค ์๋์ง ํ์ธํฉ๋๋ค. ํด๋๊ฐ ์ด๋ ค ์์ด์ผ Antigravity๊ฐ ํ์ผ๋ค์ ์ธ์ํฉ๋๋ค.
5-3. Antigravity ๋ํ์ฐฝ ์ด๊ธฐ
VS Code ์ผ์ชฝ ์ฌ์ด๋๋ฐ์์ Antigravity ์์ด์ฝ์ ํด๋ฆญํ๋ฉด ์ฑํ
์ฐฝ์ด ์ด๋ฆฝ๋๋ค. ์ด๊ณณ์์ ํ๊ตญ์ด๋ก ์์ ๋กญ๊ฒ ์์ฒญํ๋ฉด ๋ฉ๋๋ค.
5-4. ๋ฐ์ด๋ธ์ฝ๋ฉ ํ๋กฌํํธ ์์
๐ ํ๋กฌํํธ ์์ 1 โ ์ด๊ธฐ ํ์ผ ์์ฑ ์์ฒญ
stock ํด๋์ app.py ํ์ผ์ ์๋ก ๋ง๋ค์ด์ค.
๊ธฐ๋ฅ:
- ๋์ํฌํธํด๋ฆฌ์ค.xlsx๋ฅผ ์ฝ์ด์ ๊ณ์ข ์ํธ๋ณ๋ก ํญ์ ๋ง๋ค์ด
- ๊ฐ ํญ์์ ์ข
๋ชฉ๋ช
, ์๋, ํ๊ท ๋งค์
๊ฐ, ํ์ฌ๊ฐ, ์์ต, ์์ต๋ฅ (%)์ ํ
์ด๋ธ๋ก ๋ณด์ฌ์ค
- ํ๊ตญ ์ฃผ์์ ๋ค์ด๋ฒ ๊ธ์ต API, ๋ฏธ๊ตญ ์ฃผ์์ yfinance๋ก ํ์ฌ๊ฐ๋ฅผ ๊ฐ์ ธ์
- ํ๋ฉด ์๋จ์๋ ์ด ๋งค์
๊ธ์ก, ์ด ํ๊ฐ๊ธ์ก, ์ด ์์ต์ ํฐ ์ซ์๋ก ๋ณด์ฌ์ค
ํ์ด์ฌ ์ฝ๋๋ฅผ ์ง์ app.py์ ์์ฑํด์ค.
๐ ํ๋กฌํํธ ์์ 2 โ ๊ธฐ์กด ์ฝ๋ ๋ถ์ ํ ๋ฒ๊ทธ ์์
์ง๊ธ app.py๋ฅผ ์คํํ๋ฉด ํ๊ตญ ETF ์ข
๋ชฉ์ ํ์ฌ๊ฐ๊ฐ 0์ผ๋ก ๋์.
app.py ์ ์ฒด๋ฅผ ์ฝ๊ณ ์ด๋ ๋ถ๋ถ์ด ๋ฌธ์ ์ธ์ง ์ฐพ์์ ์์ ํด์ค.
์์ ํ streamlit run app.py๋ก ์คํํด์ ์ ์ ๋์ํ๋์ง ํ์ธํด์ค.
๐ ํ๋กฌํํธ ์์ 3 โ portfolio2.xlsx ์๋ ๋๊ธฐํ
app.py์ ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ค.
๊ธฐ๋ฅ:
- ๋์๋ณด๋๊ฐ ์คํ๋ ๋๋ง๋ค ๋์ํฌํธํด๋ฆฌ์ค.xlsx์ ์๋ ๋ณ๊ฒฝ์ ๊ฐ์งํด์
portfolio2.xlsx์ ์๋์ผ๋ก ๋ฐ์ํด
- portfolio2.xlsx์ ์๋ ์ ์ข
๋ชฉ์ ๋งจ ์๋ ํ์ ์๋ ์ถ๊ฐ
- ๊ธฐ์กด ์ข
๋ชฉ์ ํ ์์๋ ์ ๋ ๋ฐ๊พธ์ง ๋ง
- ์์
์์(์ด ๋๋น, ์ซ์ ํ์ #,##0)์ ์ ์งํด
- openpyxl ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ์์์ ์ ์ฉํด
app.py์ ์ง์ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ค.
๐ ํ๋กฌํํธ ์์ 4 โ ๋ฐฐ์น ํ์ผ(์คํ ํ์ผ) ๋ง๋ค๊ธฐ
๋๋ธํด๋ฆญ๋ง ํ๋ฉด ๋์๋ณด๋๊ฐ ์๋ ์คํ๋๋ ๋ฐฐ์น ํ์ผ์ ๋ง๋ค์ด์ค.
ํ์ผ๋ช
: ๋์ํฌํธํด๋ฆฌ์ค.bat
๋ด์ฉ:
- stock ํด๋๋ก ์ด๋
- streamlit run app.py ์คํ
- ์ฐฝ์ด ๊บผ์ก์ ๋ ์๋ฌ๋ฅผ ํ์ธํ ์ ์๊ฒ pause
stock ํด๋์ bat ํ์ผ๋ก ์ ์ฅํด์ค.
๐ ํ๋กฌํํธ ์์ 5 โ ์ฑ๋ฅ ๊ฐ์ (๋ณ๋ ฌ ์ฒ๋ฆฌ)
app.py๋ฅผ ๋ณด๋ฉด ์ข
๋ชฉ ๊ฐ๊ฒฉ์ ์์๋๋ก ํ ๊ฐ์ฉ ๊ฐ์ ธ์ค๊ณ ์์ด.
์ข
๋ชฉ์ด ๋ง์์ง๋ฉด ๋ก๋ฉ์ด ๋๋ฌด ๋๋ ค์ ธ.
concurrent.futures.ThreadPoolExecutor๋ฅผ ์ฌ์ฉํด์
ํ๊ตญ ์ฃผ์๊ณผ ๋ฏธ๊ตญ ์ฃผ์์ ๋์์ ๋ณ๋ ฌ๋ก ๊ฐ์ ธ์ค๋๋ก ๋ฐ๊ฟ์ค.
๋ชฉํ: 20๊ฐ ์ข
๋ชฉ ๊ธฐ์ค 5์ด ์ด๋ด์ ์ ๋ถ ๋ก๋ฉ๋๊ฒ.
๐ ํ๋กฌํํธ ์์ 6 โ UI/UX ๊ฐ์
app.py์ ๋์๋ณด๋๊ฐ ๋๋ฌด ๋ฐ๋ฐํด. ์๋์ฒ๋ผ ๊ฐ์ ํด์ค.
1. ์์ต์ด ํ๋ฌ์ค๋ฉด ๋นจ๊ฐ์, ๋ง์ด๋์ค๋ฉด ํ๋์์ผ๋ก ํ
์ด๋ธ์ ํ์ (ํ๊ตญ ์ฆ๊ถ์ฌ ์คํ์ผ)
2. ์ด ์์ฐ ์ซ์ ํฐํธ๋ฅผ ๋ ํฌ๊ฒ
3. ์ฌ์ด๋๋ฐ๋ฅผ ๋ ๊ทธ๋ฃน์ผ๋ก ๋๋ : ์์ชฝ์ Market Watch(ํ์จ/VIX/๊ณตํฌํ์), ์๋์ชฝ์ Tools(์๋ฎฌ๋ ์ดํฐ)
4. ์น์
์ฌ์ด์ ๊ตฌ๋ถ์ (st.divider()) ์ถ๊ฐ
5. ํ์ด์ง ํญ ์์ด์ฝ์ ์ด๋ชจ์ง ์ถ๊ฐ
๐ ํ๋กฌํํธ ์์ 7 โ ํน์ ETF ์ฝ๋ ๋งคํ
ํ๊ตญ ํน์ ETF ์ค ์ผ๋ถ๋ yfinance๋ ์ผ๋ฐ API๋ก ๊ฐ์ ธ์ฌ ์ ์์ด.
์: "TIGER ์ฝ๋ฆฌ์ํด๋จธ๋
ธ์ด๋๋ก๋ด์ฐ์
" ๊ฐ์ ์ ๊ท ETF
app.py์ NAME_TO_CODE ๋์
๋๋ฆฌ๋ฅผ ๋ง๋ค์ด์
์ข
๋ชฉ๋ช
์ผ๋ก ์ง์ ์ฝ๋๋ฅผ ๋งคํํด์ค.
์์:
- "TIGER ์ฝ๋ฆฌ์ํด๋จธ๋
ธ์ด๋๋ก๋ด์ฐ์
" โ "0148J0" (๋ค์ด๋ฒ ๊ธ์ต ์ํ ์ฝ๋)
- "KODEX ๋ฏธ๊ตญ์ฑ์ฅ์ปค๋ฒ๋์ฝ์กํฐ๋ธ" โ "0144L0"
์ด ๋์
๋๋ฆฌ๋ฅผ ์ฝ๋ ์๋จ์ ์ถ๊ฐํ๊ณ , ํ์ฌ๊ฐ ์กฐํ ์ ์ด ์ฝ๋๋ฅผ ์ฐ์ ์ฌ์ฉํ๋๋ก ํด์ค.
๐ ํ๋กฌํํธ ์์ 8 โ ๋ฆฌ๋ฐธ๋ฐ์ฑ ๋์ฐ๋ฏธ
์ฌ์ด๋๋ฐ์ ์์ฐ ๋ฆฌ๋ฐธ๋ฐ์ฑ ๋์ฐ๋ฏธ ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ค.
๊ธฐ๋ฅ:
- ์ฌ๋ผ์ด๋๋ก "๋ชฉํ ๋ฏธ๊ตญ ์์ฐ ๋น์ค(%)"์ ์ค์ (๊ธฐ๋ณธ๊ฐ 60%)
- ํ์ฌ ๋ฏธ๊ตญ/ํ๊ตญ ์์ฐ ๋น์ค์ ๊ณ์ฐํด์ ๋ณด์ฌ์ค
- ๋ชฉํ ๋น์ค์ ๋๋ฌํ๋ ค๋ฉด ์ด๋ค ์์ฐ์ ์ผ๋ง๋ ๋ ์ฌ์ผ ํ๋์ง ๊ณ์ฐ
- ๊ฒฐ๊ณผ๋ฅผ ํ์ดํ์ ๊ธ์ก์ผ๋ก ๋ช
ํํ๊ฒ ํ์
๐ก Antigravity ํ์ฉ ํ:
โข "app.py์ ์ง์ ์์ฑํด์ค" โ ํ์ผ์ ์ง์ ์์ ํ๊ฒ ์ ๋
โข "์ ์ฒด ์ฝ๋๋ฅผ ๋ค์ ์จ์ค"๋ณด๋ค "์ด ๊ธฐ๋ฅ๋ง ์ถ๊ฐํด์ค"๊ฐ ๋ ์ ํํฉ๋๋ค
โข ์์ ํ "์คํํด์ ํ์ธํด์ค"๋ฅผ ๋ถ์ด๋ฉด ๋ธ๋ผ์ฐ์ ๊น์ง ์ด์ด์ ๊ฒ์ฆํด์ค๋๋ค
โข ์ด์ ๋ํ ๋ด์ฉ์ ๊ธฐ์ตํ๋ฏ๋ก "์๊น ๋ง๋ ์ฝ๋์ ์ถ๊ฐํด์ค"๋ ๊ฐ๋ฅํฉ๋๋ค
STEP 6
๐ ๋์๋ณด๋ ์คํ ๋ฐฉ๋ฒ
๋ฐฉ๋ฒ A โ ๋๋ธํด๋ฆญ์ผ๋ก ์คํ (๋ฐฐ์น ํ์ผ)
๋์ํฌํธํด๋ฆฌ์ค.bat ํ์ผ์ ๋๋ธํด๋ฆญํ๋ฉด ์๋์ผ๋ก ๋์๋ณด๋๊ฐ ์คํ๋ฉ๋๋ค.
๐ก ๊ฒ์ ํฐ๋ฏธ๋ ์ฐฝ์ด ๋จ๋ฉด์ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋์ผ๋ก ์ด๋ฆฝ๋๋ค. ํฐ๋ฏธ๋ ์ฐฝ์ ๋ซ์ผ๋ฉด ๋์๋ณด๋๋ ์ข
๋ฃ๋ฉ๋๋ค.
๋ฐฉ๋ฒ B โ VS Code ํฐ๋ฏธ๋์์ ์ง์ ์คํ
streamlit run app.py
python -m streamlit run app.py
๋ฐฉ๋ฒ C โ ํ์๊ธฐ์์ ์ง์ ์คํ
1
Windows ํ์๊ธฐ์์ stock ํด๋ ์ด๊ธฐ
2
์๋จ ์ฃผ์์ฐฝ ํด๋ฆญ โ cmd ์
๋ ฅ โ ์ํฐ
3
์ด๋ฆฐ ๊ฒ์ ์ฐฝ์ streamlit run app.py ์
๋ ฅ โ ์ํฐ
์ต์ข
ํ์ผ ๊ตฌ์กฐ ํ์ธ
์์ฃผ ๋ฐ์ํ๋ ๋ฌธ์ ์ ํด๊ฒฐ๋ฒ
| ์๋ฌ ๋ฉ์์ง | ์์ธ | ํด๊ฒฐ๋ฒ |
| ModuleNotFoundError | ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฏธ์ค์น | pip install ๋ชจ๋๋ช
|
| ํ์ฌ๊ฐ 0์ผ๋ก ํ์ | ์ข
๋ชฉ์ฝ๋ ์ค๋ฅ | ๋ค์ด๋ฒ ๊ธ์ต์์ ์ ํํ ์ฝ๋ ํ์ธ |
| ํ์ผ์ ์ฐพ์ ์ ์์ | ํ์ผ๋ช
๋๋ ์์น ์ค๋ฅ | xlsx ํ์ผ์ด stock ํด๋ ์์ ์๋์ง ํ์ธ |
| ํฌํธ ์ด๋ฏธ ์ฌ์ฉ ์ค | ์ด๋ฏธ ์คํ ์ค | ํฐ๋ฏธ๋์์ Ctrl+C๋ก ์ข
๋ฃ ํ ์ฌ์คํ |
โน๏ธ GitHub์ ์ฝ๋ ์ ์ฅํ๋ ๋ฒ (์ ํ์ฌํญ)
์ฝ๋๋ฅผ ์จ๋ผ์ธ์ ๋ฐฑ์
ํ๊ฑฐ๋ ๋ค๋ฅธ ์ปดํจํฐ์์ ์ฌ์ฉํ๋ ค๋ฉด GitHub๋ฅผ ํ์ฉํ์ธ์.
git add . โ git commit -m "์ค๋ช
" โ git push
๋จ, ๋์ํฌํธํด๋ฆฌ์ค.xlsx ๋ ๊ฐ์ธ์ ๋ณด๊ฐ ๋ด๊ฒจ ์์ผ๋ฏ๋ก .gitignore ์ ์ถ๊ฐํด์ ์ ๋ ์
๋ก๋ํ์ง ๋ง์ธ์.
โ ๏ธ ๊ฐ์ธ์ ๋ณด ๋ณดํธ ์ฃผ์์ฌํญ
โข ๋์ํฌํธํด๋ฆฌ์ค.xlsx โ ์ค์ ๋ณด์ ์๋, ๋งค์
๊ธ์ก ํฌํจ โ ์ ๋ ๊ณต์ ๊ธ์ง
โข .bat ํ์ผ ๋ด ์ด๋ฆ(XXXXXX ์ฒ๋ฆฌ ๊ถ์ฅ) โ ์ 3์ ๊ณต์ ์ XX๋ก ๊ฐ๋ฆฌ๊ธฐ
โข app.py ๋ด page_title, st.title์ ์ค๋ช
โ ๊ณต์ ์ ์ญ์ ๋๋ ๋ณ๊ฒฝ
Made with โค๏ธ | Python + Streamlit ์ฃผ์ ํฌํธํด๋ฆฌ์ค ๋์๋ณด๋ ๊ฐ์ด๋