ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ ํํธ ํฌ์ ๋ฆฌํฌํธ ์๋ ์์ฑ ์์คํ – Python์ผ๋ก PDF ๋ณด๊ณ ์ ๋ง๋ค๊ธฐ
octo54 2025. 10. 20. 11:06๐ ํํธ ํฌ์ ๋ฆฌํฌํธ ์๋ ์์ฑ ์์คํ – Python์ผ๋ก PDF ๋ณด๊ณ ์ ๋ง๋ค๊ธฐ
ํํธ ํฌ์์์ “๋ฐ์ดํฐ๋ก ํ๋จํ๋ค”๋ ๊ฑด ๊ฒฐ๊ตญ
๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ๊ณ , ๋น๊ตํ๊ณ , ์๊ฐํํ๋ค๋ ๋ป์
๋๋ค.
์ด๋ฒ ๊ธ์์๋ ์์ ๋ง๋ ์๋ ๋ฆฌ๋ฐธ๋ฐ์ฑ ์์คํ
์
PDF ๋ฆฌํฌํธ ์๋ ์์ฑ ๊ธฐ๋ฅ์ ์ถ๊ฐํด๋ณด๊ฒ ์ต๋๋ค.
์ฆ, ๋งค์ ๋ง ์๋์ผ๋ก ์๋ ๋ด์ฉ์ ํฌํจํ ํฌ์ ๋ฆฌํฌํธ๊ฐ PDF๋ก ์ ์ฅ๋ฉ๋๋ค.
โ
์ด๋ฒ ๋ฌ ์์ต๋ฅ ๊ทธ๋ํ
โ
ํฌํธํด๋ฆฌ์ค ๊ตฌ์ฑ
โ
์ฃผ์ ํฉํฐ ์ ์
โ
๋์ ์์ต๋ฅ ๋ฐ MDD
โ
๋ค์ ๋ฆฌ๋ฐธ๋ฐ์ฑ ์ผ์
1๏ธโฃ ์ค์น ์ค๋น
pip install reportlab matplotlib pandas
์ด ์ธ ๊ฐ์ง๋ฉด ์ถฉ๋ถํฉ๋๋ค.
- reportlab: PDF ํ์ผ ์์ฑ
- matplotlib: ์์ต๋ฅ ์ฐจํธ
- pandas: ๋ฐ์ดํฐ ์ฒ๋ฆฌ
2๏ธโฃ ๊ธฐ๋ณธ ์ฝ๋ ๊ตฌ์กฐ
import pandas as pd
import matplotlib.pyplot as plt
from reportlab.lib.pagesizes import A4
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image
from reportlab.lib.styles import getSampleStyleSheet
from datetime import datetime
# ์์ ๋ฐ์ดํฐ
portfolio = pd.DataFrame({
"Ticker": ["005930.KS", "000660.KS", "035420.KS"],
"Return": [0.052, 0.034, 0.071],
"Score": [0.78, 0.66, 0.83]
})
# ์์ต๋ฅ ๊ทธ๋ํ
plt.figure(figsize=(6, 3))
portfolio["Return"].plot(kind="bar", color="skyblue")
plt.title("Monthly Returns by Stock")
plt.ylabel("Return (%)")
plt.tight_layout()
plt.savefig("returns_chart.png")
plt.close()
# PDF ์์ฑ
styles = getSampleStyleSheet()
doc = SimpleDocTemplate(f"Quant_Report_{datetime.now().strftime('%Y%m')}.pdf", pagesize=A4)
elements = []
elements.append(Paragraph("๐ Quant Investment Monthly Report", styles['Title']))
elements.append(Spacer(1, 12))
elements.append(Paragraph(f"Report Date: {datetime.now().strftime('%Y-%m-%d')}", styles['Normal']))
elements.append(Spacer(1, 12))
elements.append(Paragraph("<b>1๏ธโฃ Portfolio Overview</b>", styles['Heading2']))
elements.append(Paragraph(portfolio.to_html(index=False), styles['Normal']))
elements.append(Spacer(1, 12))
elements.append(Paragraph("<b>2๏ธโฃ Monthly Return Chart</b>", styles['Heading2']))
elements.append(Image("returns_chart.png", width=400, height=200))
elements.append(Spacer(1, 12))
elements.append(Paragraph("<b>3๏ธโฃ Key Indicators</b>", styles['Heading2']))
elements.append(Paragraph("MDD: -6.2%<br/>Sharpe Ratio: 1.34<br/>Next Rebalancing: 2025-11-01", styles['Normal']))
doc.build(elements)
print("โ
PDF ๋ฆฌํฌํธ ์์ฑ ์๋ฃ")
3๏ธโฃ ์คํ ๊ฒฐ๊ณผ
์ด ์ฝ๋๋ฅผ ์คํํ๋ฉด
๐ Quant_Report_202510.pdf ๊ฐ์ ํ์ผ์ด ์์ฑ๋ฉ๋๋ค.
๋ฆฌํฌํธ ์์๋ ๋ค์ ํญ๋ชฉ์ด ์๋์ผ๋ก ํฌํจ๋ฉ๋๋ค:
ํญ๋ชฉ ์ค๋ช
| ํฌํธํด๋ฆฌ์ค ํ | ์ข ๋ชฉ๋ช , ์์ต๋ฅ , ํฉํฐ ์ ์ |
| ์์ต๋ฅ ๊ทธ๋ํ | ์๊ฐ ์ฑ๊ณผ ๋น๊ต ์๊ฐํ |
| ํต์ฌ ์งํ | MDD, ์คํ์ง์, ๋ฆฌ๋ฐธ๋ฐ์ฑ ์ผ์ |
๐ก ๋์์ธ์ ์ข ๋ ๊ณ ๊ธ์ค๋ฝ๊ฒ ํ๊ณ ์ถ๋ค๋ฉด reportlab.platypus.Table์ด๋
matplotlib.style.use("ggplot")์ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
4๏ธโฃ ์๋ํ์ ์ฐ๊ฒฐํ๊ธฐ
์์ ๋ง๋ **๋ฆฌ๋ฐธ๋ฐ์ฑ ์ค์ผ์ค๋ฌ ์ฝ๋(schedule ๋ผ์ด๋ธ๋ฌ๋ฆฌ)**์ ๊ฒฐํฉํ๋ฉด
๋งค์ ๋ง์ง๋ง ๋ ์๋์ผ๋ก PDF ๋ณด๊ณ ์๊ฐ ์์ฑ๋ฉ๋๋ค.
import schedule, time
schedule.every().month.at("18:00").do(generate_report)
while True:
schedule.run_pending()
time.sleep(60)
์ด์ ์์ ํ ์๋ํ๋ “ํํธ ๋ฆฌํฌํธ ์์คํ ”์ด ์์ฑ๋ฉ๋๋ค.
5๏ธโฃ ํ์ฅ ์์ด๋์ด
ํ์ฅ ๊ธฐ๋ฅ ์ค๋ช
| ๐ฌ Slack/Email ์๋ฆผ | ์์ฑ๋ PDF ์๋ ์ ์ก |
| โ๏ธ Google Drive ์ ๋ก๋ | ํด๋ผ์ฐ๋ ๋ณด๊ด ๋ฐ ๊ณต์ |
| ๐ Multi-Factor Summary | ํฉํฐ๋ณ Score ํ๊ท ์๋ ํ๊ธฐ |
| ๐งฎ Benchmark ๋น๊ต | KOSPI·S&P500 ๋๋น ์์ต๋ฅ ์ฐจํธ |
๐ ์ ๋ฆฌ
๋จ๊ณ ๊ธฐ๋ฅ ์ค๋ช
| 1 | ์์ต๋ฅ ๋ฐ์ดํฐ ์์ง | yfinance, pandas |
| 2 | ๊ทธ๋ํ ์์ฑ | matplotlib |
| 3 | PDF ๋ฆฌํฌํธ ์์ฑ | reportlab |
| 4 | ์๋ํ | schedule ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฒฐํฉ |
| 5 | ๊ณต์ | Google Drive or Email ์ฐ๋ |
๐ ์ด๋ ๊ฒ ํ๋ฉด ์ฌ๋ฌ๋ถ์ ์๊ฐ ํํธ ์ด์ฉ ๋ฆฌํฌํธ๋ฅผ ํด๋ฆญ ํ ๋ฒ ์์ด ์๋์ผ๋ก ๋ฐ์๋ณด๋ ์์คํ ์ ๊ฐ๊ฒ ๋ฉ๋๋ค.
๐ ๋ค์ ๊ธ ์๊ณ
๋ค์ ํธ์์๋ **“ํํธ ์ ๋ต ์ต์ ํ – ๋ฐฑํ
์คํธ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ค์น ์๋ ์กฐ์ ํ๊ธฐ”**๋ฅผ ๋ค๋ฃน๋๋ค.
์ฆ, ๊ฐ ํฉํฐ์ ์ฑ๊ณผ์ ๋ฐ๋ผ ํฌํธํด๋ฆฌ์ค ๋น์ค์ ์๋์ผ๋ก ์
๋ฐ์ดํธํ๋ ‘AIํ ํํธ ์์คํ
’์ ๋ง๋ค์ด๋ณผ ๊ฑฐ์์.
๐ ์ถ์ฒ ํ๊ทธ (SEO ์ต์ ํ์ฉ)
ํํธ์๋ํ,PDF๋ฆฌํฌํธ,ํ์ด์ฌ๋ฆฌํฌํธ,reportlab,matplotlib,ํํธํฌ์,์ฃผ์๋ฐ์ดํฐ์๊ฐํ,์๋๋ฆฌ๋ฐธ๋ฐ์ฑ,ํฌ์๋ฆฌํฌํธ,ํ์ด์ฌ์๋ํ
'์ฃผ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
- Total
- Today
- Yesterday
- ๊ฐ๋ฐ๋ธ๋ก๊ทธ
- REACT
- SEO์ต์ ํ
- JAX
- seo ์ต์ ํ 10๊ฐ
- DevOps
- ์ฟ ๋ฒ๋คํฐ์ค
- Python
- ์๋ฐ๋ฉด์
- Redis
- flax
- PostgreSQL
- ํ๋ก ํธ์๋๊ฐ๋ฐ
- kotlin
- nextJS
- Next.js
- ๋ฅ๋ฌ๋
- rag
- node.js
- Express
- Prisma
- ai์ฒ ํ
- CI/CD
- llm
- ์น๊ฐ๋ฐ
- NestJS
- ๋ฐฑ์๋๊ฐ๋ฐ
- JWT
- Docker
- fastapi
| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 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 |

