ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ค ํํธ ํฌ์ ์๋ํ – ํ์ด์ฌ์ผ๋ก ๋งค๋งค ์ ํธ ๋ง๋ค๊ธฐ
octo54 2025. 8. 21. 13:21๐ค ํํธ ํฌ์ ์๋ํ – ํ์ด์ฌ์ผ๋ก ๋งค๋งค ์ ํธ ๋ง๋ค๊ธฐ
ํํธ ์ ๋ต์ ์ ์ธ์๋, ๊ฒฐ๊ตญ ๋งค์ผ ์์นจ HTS ์ผ์ ์ข
๋ชฉ์ ์ผ์ผ์ด ํ์ธํ๋ค ๋ณด๋ฉด ์ง์น๊ฒ ๋ฉ๋๋ค.
๊ทธ๋์ ํํธ ํฌ์์๋ค์ด ๋ง์ด ํ๋ ๊ฒ ๋ฐ๋ก ์๋ํ์
๋๋ค.
์ค๋์ ํ์ด์ฌ์ ํ์ฉํด ๋งค๋งค ์ ํธ ์๋ฆผ์ ์๋์ผ๋ก ๋ฐ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๊ฒ ์ต๋๋ค.
(์ฝ๋๋ ์ค์ ๋ก ์คํ ๊ฐ๋ฅํ๋๋ก ๊ฒ์ฆํ์ต๋๋ค โ
)
1. ์๋ํ์ ๊ธฐ๋ณธ ์์ด๋์ด
- ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ – ์ผํ ํ์ด๋ธ์ค ๊ฐ์ API๋ก ์ฃผ๊ฐ ๋ถ๋ฌ์ค๊ธฐ
- ์กฐ๊ฑด ์ฒดํฌํ๊ธฐ – PER, PBR, ์ด๋ํ๊ท ์ ๊ฐ์ ์ ๋ต ์กฐ๊ฑด ์ ์ฉ
- ์ ํธ ์์ฑ – ์กฐ๊ฑด ์ถฉ์กฑ ์ "๋งค์ ํ๋ณด" ๋๋ "๋งค๋ ํ๋ณด"๋ก ๋ถ๋ฅ
- ์๋ฆผ ์ ์ก – ์ด๋ฉ์ผ, ํ ๋ ๊ทธ๋จ, ์ฌ๋ ๋ฑ์ผ๋ก ๊ฒฐ๊ณผ ์๋ ์ ์ก
2. ํ์ด์ฌ ์ค์ ์์
์์๋ ๊ฐ๋จํ 20์ผ ์ด๋ํ๊ท ์ ์์ ์๋ ์ข ๋ชฉ๋ง ๋งค์ ํ๋ณด๋ก ์ก๋ ์ฝ๋์ ๋๋ค.
import yfinance as yf
import smtplib
from email.mime.text import MIMEText
# ์ข
๋ชฉ ๋ฆฌ์คํธ
tickers = ["AAPL", "MSFT", "TSLA"]
# ๋งค๋งค ํ๋ณด ์ ์ฅ
buy_candidates = []
for ticker in tickers:
data = yf.download(ticker, period="3mo", interval="1d")
data["MA20"] = data["Close"].rolling(20).mean()
# ์กฐ๊ฑด: ์ข
๊ฐ๊ฐ 20์ผ ์ด๋ํ๊ท ์ ์
if data["Close"].iloc[-1] > data["MA20"].iloc[-1]:
buy_candidates.append(ticker)
# ์ด๋ฉ์ผ๋ก ๊ฒฐ๊ณผ ์ ์ก
msg = MIMEText("์ค๋์ ๋งค์ ํ๋ณด: " + ", ".join(buy_candidates))
msg["Subject"] = "ํํธ ๋งค๋งค ์ ํธ ์๋ฆผ"
s = smtplib.SMTP("smtp.gmail.com", 587)
s.starttls()
s.login("your_email@gmail.com", "your_app_password")
s.sendmail("your_email@gmail.com", "receiver_email@gmail.com", msg.as_string())
s.quit()
โ ์คํ ๊ฒฐ๊ณผ:
- ๋งค์ ํ๋ณด ์ข ๋ชฉ์ด ์ด๋ฉ์ผ๋ก ์๋ ์ ์ก๋ฉ๋๋ค.
- Gmail ๋ณด์ ์ค์ ์์ “์ฑ ๋น๋ฐ๋ฒํธ”๋ฅผ ๋ฐ๊ธ๋ฐ์ ๋ฃ์ผ๋ฉด ์ ์ ์๋ํฉ๋๋ค.
3. ํ์ฅ ์์ด๋์ด
- ์กฐ๊ฑด ๋ค์ํ: PER < 10, ROE > 15% ๊ฐ์ ์ฌ๋ฌด ํํฐ ์ถ๊ฐ
- ๋ฐ์ดํฐ ์์ค ํ์ฅ: ๋ค์ด๋ฒ ์ฆ๊ถ ํฌ๋กค๋ง, FRED API, Quandl ๋ฑ
- ์ค์๊ฐ ์๋ฆผ: ํ ๋ ๊ทธ๋จ ๋ด, ์ฌ๋ Webhook ์ฐ๊ฒฐ
- ์๋ ๋งค๋งค: ์ฆ๊ถ์ฌ API(ํค์์ฆ๊ถ, ๋ฏธ๋์์ ๋ฑ)์ ์ฐ๋ → ์ฃผ๋ฌธ ์๋ ์คํ
4. ์ฃผ์ํ ์
- ์๋ํ๋ ํธ๋ฆฌํ์ง๋ง, ์ ๋ต ์์ฒด๊ฐ ๊ฒ์ฆ๋์ง ์์๋ค๋ฉด ์ธ๋ชจ ์์
- ์๋ฆผ๋ง ์๋ํํ๊ณ , ์ค์ ๋งค์/๋งค๋๋ ์ฌ๋์ด ์ง์ ๊ฒฐ์ ํ๋ ๊ฒ ์์
- ์ฆ๊ถ์ฌ API๋ ์ข ์ข ์ ์ฑ ๋ณ๊ฒฝ → ํญ์ ๋ฌธ์ ์ต์ ํ์ธ ํ์
5. ์ ๋ฆฌ
- ํํธ ์๋ํ๋ “๊ท์ฐฎ์ ๋ฐ๋ณต ์์ ”์ ์ค์ฌ์ค
- ํ์ด์ฌ์ผ๋ก ๊ฐ๋จํ ์ ํธ ์์คํ ๋ถํฐ ์์ ๊ฐ๋ฅ
- ํ์ฅํ๋ฉด ์์ ์๋ ๋งค๋งค๊น์ง ์ฐ๊ฒฐ ๊ฐ๋ฅ
๐ ๋ค์ ๊ธ์์๋ **“ํํธ ํฌ์์์ ํ๋ฃจ ๋ฃจํด – ๋ฐ์ดํฐ ์์ง๋ถํฐ ๋งค๋งค ๊ธฐ๋ก๊น์ง”**๋ฅผ ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.
์ฆ, ๋งค์ผ ๋ฐ๋ณต ๊ฐ๋ฅํ ์ค์ ๋ฃจํด์ ๋ง๋ค ๊ฑฐ์์.
ํํธ์๋ํ,ํ์ด์ฌ์ฃผ์,๋งค๋งค์ ํธ,์ฃผ์์๋ํ,ํํธํฌ์์ ๋ต,์ฃผ์์๋ฆผ,ํ์ด์ฌํฌ์,์ฃผ์๋ฐฑํ ์คํธ,ํํธํธ๋ ์ด๋ฉ,์๋๋งค๋งค
'์ฃผ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
- Total
- Today
- Yesterday
- ๊ฐ๋ฐ๋ธ๋ก๊ทธ
- ์๋ฐ๋ฉด์
- rag
- flax
- JWT
- ํ๋ก ํธ์๋๊ฐ๋ฐ
- node.js
- Python
- ์ฟ ๋ฒ๋คํฐ์ค
- CI/CD
- nextJS
- Express
- llm
- ๋ฅ๋ฌ๋
- DevOps
- Next.js
- SEO์ต์ ํ
- Prisma
- NestJS
- Docker
- seo ์ต์ ํ 10๊ฐ
- kotlin
- ๋ฐฑ์๋๊ฐ๋ฐ
- JAX
- REACT
- ai์ฒ ํ
- ์น๊ฐ๋ฐ
- fastapi
- PostgreSQL
- Redis
| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |

