Spaces:
Running
DartLab
์ข ๋ชฉ์ฝ๋ ํ๋. ๊ธฐ์ ์ ์ ์ฒด ์ด์ผ๊ธฐ.
DART ์ ์๊ณต์์ EDGAR ๊ณต์, ํ ์ค์ Python์ผ๋ก ๊ตฌ์กฐํํ๊ณ ๋น๊ตํ๋ค.
๋ฌธ์ ยท ๋ธ๋ก๊ทธ ยท ๋ผ์ด๋ธ ๋ฐ๋ชจ ยท Colab์์ ์ด๊ธฐ ยท Molab์์ ์ด๊ธฐ ยท English ยท ํ์
ํ์ฌ์๋ ์ด์ผ๊ธฐ๊ฐ ์๋ค
์ซ์๋ฅผ ๋์ดํ๋ฉด ๋์๋ณด๋๊ฐ ๋์ง๋ง, ์ซ์์ ์ธ๊ณผ๋ฅผ ์ฐ๊ฒฐํ๋ฉด ์คํ ๋ฆฌ๊ฐ ๋๋ค. DartLab์ ๊ทธ ์คํ ๋ฆฌ๋ฅผ ์ฝ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
์ฌ๋์ด ์ง์ ์ฝ๋๋ค โ ์ข ๋ชฉ์ฝ๋ ํ๋๋ก ์ฌ๋ฌด์ ํ, ๊ณต์, ๋น์จ์ ๊บผ๋ด๊ณ , 6๋ง ์ธ๊ณผ ๊ตฌ์กฐ๋ก "์ ์ด ํ์ฌ์ ๋ง์ง์ด ์ด ์์ค์ธ๊ฐ"๋ฅผ ์ถ์ ํ๋ค. ์ฝ๋ ํ ์ค์ด๋ฉด ๋ฐ์ดํฐ๊ฐ ๋์ค๊ณ , ๊ทธ ๋ฐ์ดํฐ๊ฐ ์ด์ผ๊ธฐ๋ฅผ ๋ง๋ ๋ค.
AI๊ฐ ์ฝ์ด์ค๋ค โ ๊ฐ์ ๋๊ตฌ๋ฅผ AI๊ฐ ์กฐํฉํด์ ์ง๋ฌธ์ ๋ง๋ ๋ถ์ ํ๋ฆ์ ์ค์ค๋ก ์ค๊ณํ๊ณ , ์ฝ๋์ ๊ฒฐ๊ณผ๋ฅผ ํฌ๋ช ํ๊ฒ ๋ณด์ฌ์ค๋ค. ์ฌ์ฉ์๋ ๋ต๋ง ์ป๋ ๊ฒ ์๋๋ผ ๋ถ์ ๋ฐฉ๋ฒ์ ๋ฐฐ์ด๋ค.
๋ ๊ฒฝ๋ก ๋ชจ๋ ๊ฐ์ ์์ง ์์์ ๋์ํ๋ค.
๋ฌธ์
์ผ์ฑ์ ์์ "๋งค์ถ์ก"์ 5๋ ๊ฐ ๋น๊ตํ๋ ค๊ณ ํ ์ ์๋๊ฐ?
DART์์ ์ฌ์
๋ณด๊ณ ์๋ฅผ ์ด๋ฉด ๊ฐ์ ์ซ์๊ฐ ifrs-full_Revenue, dart_Revenue, ๋งค์ถ์ก, ์์
์์ต ๋ค ๊ฐ์ง ์ด๋ฆ์ผ๋ก ๋์จ๋ค. ์๋
๊ณผ ์ฌํด์ ๋ชฉ์ฐจ ๊ตฌ์กฐ๊ฐ ๋ค๋ฅด๋ค. SKํ์ด๋์ค์ ๋น๊ตํ๋ ค๋ฉด ๊ฐ์ ์์
์ ์ฒ์๋ถํฐ ๋ค์ ํด์ผ ํ๋ค.
์ง์ง ๋ฌธ์ ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒ ์๋๋ค. ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๋๋ฌด ๋ง์ ์ด๋ฆ์ผ๋ก ์กด์ฌํ๋ ๊ฒ์ด๋ค.
DartLab์ ํ๋์ ์ ์ ์์ ์ ์๋ค: ๋ชจ๋ ๊ธฐ๊ฐ์ ๋น๊ต ๊ฐ๋ฅํด์ผ ํ๊ณ , ๋ชจ๋ ํ์ฌ๋ ๋น๊ต ๊ฐ๋ฅํด์ผ ํ๋ค. ๊ณต์ ์น์
์ ํ ํฝ-๊ธฐ๊ฐ ๊ทธ๋ฆฌ๋๋ก ์ ๊ทํํ๊ณ (95% ๋งคํ์จ), XBRL ๊ณ์ ์ ํ์ค ์ด๋ฆ์ผ๋ก ํต์ผํ๋ค(97% ๋งคํ์จ) โ ์์์ด ์๋๋ผ ๊ธฐ์
์ ๋น๊ตํ๋ค.
๋น ๋ฅธ ์์
uv add dartlab
import dartlab
c = dartlab.Company("005930") # ์ผ์ฑ์ ์
c.sections # ๋ชจ๋ topic, ๋ชจ๋ ๊ธฐ๊ฐ, ๋๋ํ
# shape: (41, 12) โ 41๊ฐ ํ ํฝ ร 12๊ฐ ๊ธฐ๊ฐ
# 2025Q4 2024Q4 2024Q3 2023Q4 ...
# companyOverview v v v v
# businessOverview v v v v
# riskManagement v v v v
ํ ์คํธ์ ์ซ์์ ์๊ณ์ด ์ํํ โ ์ ๊ธฐ๊ฐ ๋น๊ต ๊ฐ๋ฅ์ฑ์ ํต์ฌ
![]()
c.show("IS") # ์์ต๊ณ์ฐ์ โ ๋ถ๊ธฐ๊ฐ ๊ธฐ๋ณธ
๋ถ๊ธฐ๋ณ ์ฌ๋ฌด์ ํ๊ฐ ๊ธฐ๋ณธ โ snakeId + ํ๊ธ ํญ๋ชฉ๋ช ๋์ ์ ๊ณต
![]()
c.show("IS", freq="Y") # freq="Y"๋ก ์ฐ๊ฐ ํฉ์ฐ
๊ฐ์ ๋ฐ์ดํฐ, ์ฐ๊ฐ์ผ๋ก โ 4๋ถ๊ธฐ ํฉ์ฐ ์๋ ์ฒ๋ฆฌ
![]()
c.show("businessOverview") # ์ด ํ์ฌ๊ฐ ์ค์ ๋ก ๋ญ ํ๋์ง
c.diff("businessOverview") # ์๋
๋๋น ๋ญ๊ฐ ๋ฐ๋์๋์ง
c.show("ratios") # ์ฌ๋ฌด๋น์จ, ์ด๋ฏธ ๊ณ์ฐ๋จ
c.filings() # ๋ชจ๋ ๋ณด๊ณ ์ โ DART ๋ทฐ์ด๋ก ๋ฐ๋ก ์ฐ๊ฒฐ
์ฌ์ ๋ณด๊ณ ์๋ถํฐ ๋ถ๊ธฐ๋ณด๊ณ ์๊น์ง, dartUrl๋ก ์๋ฌธ ์ฆ์ ํ์ธ
![]()
# ๊ฐ์ ์ธํฐํ์ด์ค, ๋ค๋ฅธ ๋๋ผ
us = dartlab.Company("AAPL")
us.show("business")
us.show("ratios")
# ์์ฐ์ด๋ก ์ง๋ฌธ
dartlab.ask("์ผ์ฑ์ ์ ์ฌ๋ฌด๊ฑด์ ์ฑ ๋ถ์ํด์ค")
# โ AI๊ฐ ์ฝ๋๋ฅผ ์คํํ๋ฉฐ ๋ถ์: "์์
์ด์ต๋ฅ ์ด 8.6%โ21.4%๋ก ๋ฐ๋ฑ..."
API ํค ๋ถํ์. HuggingFace์์ ์๋ ๋ค์ด๋ก๋, ๋ก์ปฌ ์บ์๋ก ์ฆ์ ๋ก๋.
DartLab์ ๋ฌด์์ธ๊ฐ
ํ๋์ ํธ์ถ ๊ณ์ฝ. dartlab.์์ง() ์ผ๋ก ๊ฐ์ด๋ ๋ณด๊ณ dartlab.์์ง("์ถ") ์ผ๋ก ์คํ.
์ฒ์์ด๋ผ๋ฉด?
CompanyโReviewโAsk์์๋ก. ์ข ๋ชฉ์ฝ๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ณ , ๋ณด๊ณ ์๋ฅผ ๋ง๋ค๊ณ , AI์๊ฒ ๋ฌผ์ด๋ณธ๋ค.
| ๋ ์ด์ด | ์์ง | ํ๋ ์ผ | ์ง์ ์ | ๋ ธํธ๋ถ |
|---|---|---|---|---|
| Data | Data | HuggingFace ์ฌ์ ๊ตฌ์ถ, ์๋ ๋ค์ด๋ก๋ | Company("005930") |
โ |
| L0/L1 | Company | ๊ณต์ + ์ฌ๋ฌด์ ํ + ์ ํ ๋ฐ์ดํฐ๋ฅผ ์ข ๋ชฉ์ฝ๋ ํ๋๋ก ํตํฉ | c.show(), c.select() |
|
| L1 | Gather | ์ธ๋ถ ์์ฅ ๋ฐ์ดํฐ (์ฃผ๊ฐ/์๊ธ/๋งคํฌ๋ก/๋ด์ค) | dartlab.gather() |
|
| L1 | Scan | ์ ์ข ๋ชฉ ํก๋จ ๋น๊ต (๊ฑฐ๋ฒ๋์ค/๋น์จ/ํ๊ธํ๋ฆ ๋ฑ) | dartlab.scan() |
|
| L1 | Quant | ๊ธฐ์ ์ ยท์ ๋ ๋ถ์ (๋ชจ๋ฉํ /ํฉํฐ/ํจํด) | c.quant() |
|
| L2 | Analysis | ์์ต์ฑ/์์ ์ฑ/ํ๊ธํ๋ฆ ๋ฑ ์ฌ๋ฌด ์ธ๊ณผ ๋ถ์ + ๊ฐ์นํ๊ฐ + ์ ๋ง | c.analysis("financial", "์์ต์ฑ") |
|
| L2 | Macro | ์์ฅ ๋ ๋ฒจ ๋งคํฌ๋ก (์ฌ์ดํด/๊ธ๋ฆฌ/์ ๋์ฑ/์ฌ๋ฆฌ/์์ฐ) | dartlab.macro("์ฌ์ดํด") |
|
| L2 | Credit | ๋ ๋ฆฝ ์ ์ฉํ๊ฐ (dCR ๋ฑ๊ธ, ๋ถ๋ํ๋ฅ , ๊ฑด์ ๋) | c.credit("๋ฑ๊ธ") |
|
| L2 | Review | ๋ถ์ ์์ง์ ์กฐํฉํ ๋ณด๊ณ ์ (rich/html/markdown/json) | c.review("์์ต์ฑ") |
|
| L3 | AI | ์ ๊ทน์ ๋ถ์๊ฐ โ ์ฝ๋ ์คํ + ํด์ | dartlab.ask() |
|
| L4 | Channel | ์ธ๋ถ ๊ณต์ โ dartlab channel ํ ์ค๋ก ํฐ์์ PC dartlab ์ฌ์ฉ |
dartlab channel |
โ |
| core | Search | ๊ณต์ ์๋งจํฑ ๊ฒ์ (alpha) | dartlab.search() |
|
| facade | Listing | ์ข ๋ชฉ/๊ณต์/topic ์นดํ๋ก๊ทธ API | dartlab.listing() |
|
| viz | Viz | ์ฐจํธ/๋ค์ด์ด๊ทธ๋จ (emit_chart) |
emit_chart({...}) |
โ |
| guide | Guide | ์๋ด ๋ฐ์คํฌ โ readiness/์๋ฌ/๊ต์ก | dartlab.guide.checkReady() |
โ |
Company
์ค๊ณ: ops/company.md
์ธ ๊ฐ์ง ๋ฐ์ดํฐ ์์ค โ docs(์ ๋ฌธ ๊ณต์), finance(XBRL ์ฌ๋ฌด์ ํ), report(DART API ์ ํ ๋ฐ์ดํฐ) โ ๋ฅผ ํ๋์ ๊ฐ์ฒด๋ก ํตํฉ. HuggingFace์์ ์๋ ๋ค์ด๋ก๋, ์ค์ ๋ถํ์.
c = dartlab.Company("005930")
c.index # ๋ญ๊ฐ ์๋์ง -- topic ๋ชฉ๋ก + ๊ฐ์ฉ ๊ธฐ๊ฐ
c.show("BS") # ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ ค๋ฉด -- topic๋ณ DataFrame
c.select("IS", ["๋งค์ถ์ก"]) # ๋ฐ์ดํฐ๋ฅผ ๋ฝ์ผ๋ ค๋ฉด -- finance๋ docs๋ ๊ฐ์ ํจํด
c.trace("BS") # ์ด๋์ ์๋์ง -- source provenance
c.diff() # ๋ญ๊ฐ ๋ฐ๋์๋์ง -- ๊ธฐ๊ฐ ๊ฐ ํ
์คํธ ๋ณํ
์ฃผ์(Notes) โ BS/IS ์ด์ก ์ด๋ฉด์ ํญ๋ชฉ๋ณ ๋ถํด. c.show("topic")์ผ๋ก ์ฌ๋ฌด์ ํ์ ๊ฐ์ ํจํด์ผ๋ก ์ ๊ทผ. DART(K-IFRS HTML ํ์ฑ)์ EDGAR(US-GAAP XBRL ํ๊ทธ) ๋์ผ ์ธํฐํ์ด์ค.
c.show(...) |
๋ด์ฉ | DART | EDGAR |
|---|---|---|---|
"inventory" |
์์ฌ๋ฃ/์ฌ๊ณตํ/์ ํ ๋ถํด | โ | โ |
"borrowings" |
๋จ๊ธฐ/์ฅ๊ธฐ ์ฐจ์ ๊ธ ๋ถํด | โ | โ |
"tangibleAsset" |
์ ํ์์ฐ ์ทจ๋์๊ฐ/๊ฐ๊ฐ์๊ฐ/์ฅ๋ถ๊ฐ | โ | โ |
"intangibleAsset" |
์์ ๊ถ/๊ฐ๋ฐ๋น ๋ฑ | โ | โ |
"receivables" |
๋งค์ถ์ฑ๊ถ + ๋์์ถฉ๋น๊ธ | โ | โ |
"provisions" |
๋ณด์ฆ/์์ก/๊ตฌ์กฐ์กฐ์ ์ถฉ๋น๋ถ์ฑ | โ | โ |
"eps" |
๊ธฐ๋ณธ/ํฌ์ ์ฃผ๋น์ด์ต | โ | โ |
"segments" |
๋ถ๋ฌธ๋ณ ๋งค์ถ/์ด์ต | โ | โ |
"costByNature" |
์์ฌ๋ฃ/๊ธ์ฌ/๊ฐ๊ฐ์๊ฐ ์ฑ๊ฒฉ๋ณ ๋น์ฉ | โ | โ |
"lease" |
์ฌ์ฉ๊ถ์์ฐ/๋ฆฌ์ค๋ถ์ฑ | โ | โ |
"affiliates" |
๊ด๊ณ๊ธฐ์ ์ง๋ถ๋ฒ ํฌ์ | โ | โ |
"investmentProperty" |
ํฌ์๋ถ๋์ฐ ๊ณต์ ๊ฐ์น/์ฅ๋ถ๊ฐ | โ | โ |
Scan โ ์ ์ข ๋ชฉ ํก๋จ ๋น๊ต
์ค๊ณ: ops/scan.md
์ ์ข ๋ชฉ ๋์ ํก๋จ ๋ถ์. ๊ฑฐ๋ฒ๋์ค, ์ธ๋ ฅ, ์ฃผ์ฃผํ์, ๋ถ์ฑ, ํ๊ธํ๋ฆ, ๊ฐ์ฌ, ๋ด๋ถ์, ์ด์ต์ ์ง, ์ ๋์ฑ, ๋คํธ์ํฌ, ๊ณ์ /๋น์จ ๋น๊ต ๋ฑ.
dartlab.scan("governance") # ์ ์ข
๋ชฉ ์ง๋ฐฐ๊ตฌ์กฐ
dartlab.scan("ratio", "roe") # ์ ์ข
๋ชฉ ROE
dartlab.scan("account", "๋งค์ถ์ก") # ์ ์ข
๋ชฉ ๋งค์ถ์ก ์๊ณ์ด
2,500+ ์ข ๋ชฉ์ ๋งค์ถ์ก์ ํ ๋ฒ์ โ ๋ถ๊ธฐ๋ณ ์๊ณ์ด๋ก ์ฆ์ ๋น๊ต
![]()
Gather โ ์ธ๋ถ ์์ฅ ๋ฐ์ดํฐ
์ค๊ณ: ops/gather.md
์ฃผ๊ฐ, ์๊ธ, ๊ฑฐ์์งํ, ๋ด์ค โ Polars DataFrame์ผ๋ก.
dartlab.gather("price", "005930") # KR OHLCV
dartlab.gather("price", "AAPL", market="US") # US ์ฃผ๊ฐ
dartlab.gather("macro", "FEDFUNDS") # ์๋ US ๊ฐ์ง
dartlab.gather("news", "์ผ์ฑ์ ์") # Google News RSS
Analysis โ ์ฌ๋ฌด ์ธ๊ณผ ๋ถ์
์ค๊ณ: ops/analysis.md
์์ต๊ตฌ์กฐ โ ์์ต์ฑ โ ์ฑ์ฅ์ฑ โ ์์ ์ฑ โ ํ๊ธํ๋ฆ โ ์๋ณธ๋ฐฐ๋ถ โ ๊ฐ์นํ๊ฐ โ ์ ๋ง. ์๋ณธ ์ฌ๋ฌด์ ํ๋ฅผ ์ธ๊ณผ ์์ฌ๋ก ๊ฐ๊ณตํ๋ค.
c.analysis("financial", "์์ต์ฑ") # ์์ต์ฑ ๋ถ์
c.analysis("์์ต์ฑ") # ๋จ์ถํ (financial ์๋)
print(c.credit()) # ์ฌ์ฉ ๊ฐ๋ฅํ ์ถ ๊ฐ์ด๋ DataFrame (self-discovery)
c.credit("๋ฑ๊ธ") # dCR-AA, ๊ฑด์ ๋ 93/100
c.credit("๋ฑ๊ธ", detail=True) # ๋ฑ๊ธ + ์์ฌ + ์งํ ์๊ณ์ด
Credit โ ๋ ๋ฆฝ ์ ์ฉ๋ถ์
์ค๊ณ: ops/credit.md | ๋ณด๊ณ ์: dartlab.pages.dev/blog/credit-reports
3-Track ๋ชจ๋ธ(์ผ๋ฐ/๊ธ์ต/์ง์ฃผ) + Notch Adjustment + CHS ์์ฅ ๋ณด์ + ๋ณ๋์ฌ๋ฌด ๋ธ๋ ๋ฉ.
79๊ฐ์ฌ ๊ฒ์ฆ: ๋๊ธฐ์ 87% (26/30), ์ค๋ํ 82% (41/50), ์ ์ฒด 70% (55/79, v5.0 ๊ณผ๋ํ๊ฐ ์์ ํ ์ฌ์ธก์ ์์ ). ์ผ์ฑ์ ์ AA+ ์ ํ ์ผ์น. ๊ฒ์ฆ ๋ฐฉ๋ฒ๋ก ์ methodology ์ฐธ์กฐ.
print(c.credit()) # self-discovery โ ์ฌ์ฉ ๊ฐ๋ฅํ ์ถ + ์ข
ํฉ ๋ฑ๊ธ
cr = c.credit("๋ฑ๊ธ") # ์ข
ํฉ ๋ฑ๊ธ
print(cr["grade"]) # dCR-AA+
print(cr["healthScore"]) # 96 (0-100, ๋์์๋ก ๊ฑด์ )
print(cr["pdEstimate"]) # 0.01% ๋ถ๋ํ๋ฅ
cr = c.credit("๋ฑ๊ธ", detail=True) # ๋ฑ๊ธ + ์์ฌ + ์งํ + ๊ดด๋ฆฌ ์ค๋ช
print(cr["divergenceExplanation"]) # ์ ํ์ฌ์ ์ ๋ค๋ฅธ์ง
์ ์ฉ๋ถ์ ๋ณด๊ณ ์ ๋ฐ๊ฐ (credit ์์ฌ + ์ ํ์ฌ ๋์กฐ๊ฐ review 5๋ง์ ์๋ ํตํฉ):
from dartlab.review.publisher import publishReport
publishReport("005930") # 6๋ง ๋ณด๊ณ ์ (credit narrative + audit ํฌํจ)
Macro โ ์ข ๋ชฉ์ฝ๋ ์์ด ๊ฒฝ์ ๋ฅผ ์ฝ๋ค
์ค๊ณ: ops/macro.md
Company ์์ด ๊ฒฝ์ ํ๊ฒฝ์ ๋ถ์ํ๋ค. import dartlab ํ๋๋ก.
dartlab.macro("์ฌ์ดํด") # ๊ฒฝ๊ธฐ 4๊ตญ๋ฉด ํ๋ณ
dartlab.macro("๊ธ๋ฆฌ") # ๊ธ๋ฆฌ + Nelson-Siegel ์์ต๋ฅ ๊ณก์
dartlab.macro("์์ธก") # LEI + ์นจ์ฒดํ๋ฅ + Hamilton RS + GDP Nowcast
dartlab.macro("์ข
ํฉ") # ๋งคํฌ๋ก ์ข
ํฉ + ํฌ์์ ๋ต + ํฌํธํด๋ฆฌ์ค ๋งคํ
์์ฅ ์ฌ์ดํดยท๊ธ๋ฆฌยท์ ๋์ฑยท์ฌ๋ฆฌยท์์ฐ ์ ํธ์ ๊ธ๋ก๋ฒ ๊ฑฐ์ ๋ถ์ ๋ฐฉ๋ฒ๋ก (Hamilton EM, Kalman DFM, Nelson-Siegel, Cleveland Fed ํ๋ก๋น, Sahm Rule, BIS Credit-to-GDP)์ numpy๋ง์ผ๋ก ์ง์ ๊ตฌํ.
๋ฐฑํ ์คํธ ์ค์ฆ (2000-2024, FRED): Cleveland Fed ํ๋ก๋น์ด ๋ฏธ๊ตญ 3/3 ์นจ์ฒด๋ฅผ 2-16๊ฐ์ ์ ์ ์ฌ์ ๊ฐ์ง, recall 90%.
Review โ ๋ถ์์ ๋ณด๊ณ ์๋ก
์ค๊ณ: ops/review.md
analysis๋ฅผ ๊ตฌ์กฐํ ๋ณด๊ณ ์๋ก ์กฐ๋ฆฝ. 4๊ฐ ์ถ๋ ฅ ํ์: rich(ํฐ๋ฏธ๋), html, markdown, json.
c.review() # ์ ์ฒด ๋ณด๊ณ ์
c.reviewer() # ๋ณด๊ณ ์ + AI ์ข
ํฉ์๊ฒฌ
์ผ์ฑ์ ์ ๋ณด๊ณ ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ: "๋งค์ถ +23.8% ์ฑ์ฅ, ์์ ์ด์ต๋ฅ 8.6%โ21.4% ๋ฐ๋ฑ. FCF ์์ ์ ํ, ROIC > WACC โ ์ฌํฌ์๊ฐ ๊ฐ์น๋ฅผ ์ฐฝ์ถํ๋ ๊ตฌ๊ฐ."
์ํ ๋ณด๊ณ ์: ์ผ์ฑ์ ์ ยท SKํ์ด๋์ค ยท ๊ธฐ์ ยท ํํ์ค์ ยท SKํ ๋ ์ฝค ยท LGํํ ยท ์์จ์ํํธ ยท ์๋ชจ๋ ํผ์ํฝ
์ด์ผ๊ธฐ๊พผ โ ์ซ์๊ฐ ์๋๋ผ ์ด์ผ๊ธฐ๋ค
์ค๊ณ: ops/review.md ยท ์๋ฆฌ์ฆ: ๊ธฐ์ ์ด์ผ๊ธฐ
๊ธฐ์ ๋ถ์์ ๋น์จ ๋์ด์ด ์๋๋ค. DartLab์ 5๊ฐ ์์ง(analysis, credit, scan, quant, macro)์ ๊ฒฐ๊ณผ๋ฅผ 6๋ง ์คํ ๋ฆฌํ ๋ง ๊ตฌ์กฐ๋ก ์กฐํฉํด ๋ธ๋ก๊ทธ์ ๋ฐ๊ฐ ๊ฐ๋ฅํ ๊ธฐ์ ์ด์ผ๊ธฐ๋ฅผ ์๋ ์์ฑํ๋ค.
from dartlab.review.publisher import publishReport
publishReport("068270") # ์
ํธ๋ฆฌ์จ โ 6๋ง ๊ธฐ์
์ด์ผ๊ธฐ ์๋ ๋ฐ๊ฐ
๋ฐ๊ฐ๋ ๊ธฐ์ ์ด์ผ๊ธฐ:
| ๊ธฐ์ | ์ด์ผ๊ธฐ |
|---|---|
| SKํ์ด๋์ค | ํ๊ตญ ๋ฐ๋์ฒด 30๋ ์ ๋ฏธ์คํฐ๋ฆฌ, ์์ ์ด์ต๋ฅ 58% |
| ์ผ์์ํ | ๋ผ๋ฉด ๋น 3 ๊ผด๋ฑ์ด ๋งค์ถ 2.3์กฐ ๊ธ๋ก๋ฒ ์ํ ๊ฑฐ์ธ์ด ๋๊ธฐ๊น์ง |
| ๋์ฐ์๋๋น๋ฆฌํฐ | ๋ถ์ฑ๋น์จ 305%์์ 129%๊น์ง, 9๋ ๋ค์ด์ดํธ์ ์ง์ง ๋ชจ์ต |
| ์ํ ์ค์ | 9๋ ์ ์ ๋ฐ์ด์คํ ์ด ํ ๊ฑด์ ๋ผ์ด์ ์ค๋ก ์์ ์ด์ต +1,069์ต |
| HMM | ์์ฅ์ด ์๋๋ผ ์ฌ์ดํด์ด ์ฃผ๊ฐ๋ฅผ ๊ฒฐ์ ํ๋ ํ์ฌ |
| ์ ํธ๋ฆฌ์จ | IMF๋ก ์ง์ฅ ์์ 41์ธ, 5์ฒ๋ง์์ผ๋ก ์์ํด 25๋ ํ ๋ฌดํ์์ฐ 13.78์กฐ |
| ํํ์์ด๋ก์คํ์ด์ค | ์ผ์ฑ์ด 8,400์ต์ ๋ฒ๋ฆฐ ๋ฌด๊ธฐ๊ฐ ์์ฃผ์๊ณ 37์กฐ๊ฐ ๋๋ค |
| HDํ๋์ผ๋ ํธ๋ฆญ | 7๋ ์ ์ ์ 1,006์ต์ด ์ฌํด 1์กฐ๊ฐ ๋๋ค, ๋ณ์๊ธฐ ํ๋๋ก |
| ๊ณ ๋ ค์์ฐ | 50๋ ๋ง์ ์ฒซ ์์์ค 2,457์ต, ๊ทธ๋ฐ๋ฐ ์์ ์ด์ต์ ์ฌ์ ์ต๋ |
| ์์ดํผ์ | ํ์ฅํ ํ์ฌ๊ฐ ๊ฐ์ ์ 4,070์ต ํ์๋ค, ๊ทธ๊ฒ ์์์ด์๋ค |
Search โ ๊ณต์๋ฅผ ์๋ฏธ๋ก ๊ฒ์ (alpha)
์ค๊ณ: ops/search.md
๋ชจ๋ธ ์์, GPU ์์, cold start ์์. 400๋ง ๋ฌธ์ 95% ์ ๋ฐ๋ โ ์๋ฒ ๋ฉ๋ณด๋ค ์ ํ, 1/100 ๋น์ฉ. ๋ฒค์น๋งํฌ ์์ธ๋ methodology ์ฐธ์กฐ.
dartlab.search("์ ์์ฆ์ ๊ฒฐ์ ") # ์ ์์ฆ์ ๊ณต์ ์ฐพ๊ธฐ
dartlab.search("๋ํ์ด์ฌ ๋ณ๊ฒฝ", corp="005930") # ์ข
๋ชฉ ํํฐ
dartlab.search("ํ์ฌ๊ฐ ๋์ ๋น๋ ธ๋ค") # ์์ฐ์ด๋ ๋์
AI โ ์ ๊ทน์ ๋ถ์๊ฐ
์ค๊ณ: ops/ai.md
AI๊ฐ dartlab์ ์ ์ฒด API๋ก Python ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์คํํ๋ค. ๋ชจ๋ ์ฝ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์๋ค. 60+ ์ง๋ฌธ ๊ฒ์ฆ, 1ํ ์ฑ๊ณต๋ฅ 95%+. ๊ฒ์ฆ ๋ฒ์์ ํ๊ณ๋ methodology ์ฐธ์กฐ.
dartlab.ask("์ผ์ฑ์ ์ ์ฌ๋ฌด๊ฑด์ ์ฑ ๋ถ์ํด์ค")
dartlab.ask("์ผ์ฑ์ ์ ๋ถ์", provider="gemini") # ๋ฌด๋ฃ provider ์ฌ์ฉ ๊ฐ๋ฅ
Provider: gemini(๋ฌด๋ฃ), groq(๋ฌด๋ฃ), cerebras(๋ฌด๋ฃ), oauth-codex(ChatGPT ๊ตฌ๋
), openai, ollama(๋ก์ปฌ) ๋ฑ. Rate limit ์ ์๋ ๋์ฒด.
Channel โ ์ธ๋ถ์์ ๋ด PC dartlab ์ ๊ทผ
์ค๊ณ: ops/channel.md
PC์์ ํ ์ค์ด๋ฉด ํฐ์์ dartlab UI ๊ทธ๋๋ก ์ฌ์ฉ. Microsoft DevTunnels ์๋ ์ ์ .
dartlab channel
ํ๋ฆ:
- winget์ผ๋ก devtunnel CLI ์๋ ์ค์น (์ต์ด 1ํ)
- GitHub OAuth 1ํ ์ธ์ฆ (๋ธ๋ผ์ฐ์ ์๋ ์คํ)
- ์๊ตฌ URL + QR ๋ฐ๊ธ (
https://<id>-8400.<region>.devtunnels.ms) - ํฐ Chrome์ URL/QR ์ ๋ ฅ โ dartlab UI ๊ทธ๋๋ก ๋์
๋๋ฉ์ธ 0๊ฐ, ํ ํฐ ํธ๋ฆญ 0๊ฐ. VS Code Remote Tunnels์ ๋์ผ ์ธํ๋ผ๋ผ ๋ชจ๋ฐ์ผ ํธํ์ฑ ๊ฒ์ฆ๋จ. ๋ฉ์์ง ๋ด ์ต์
(--telegram/slack/discord) ๋ ์ง์.
์ํคํ ์ฒ
L0 core/ ํ๋กํ ์ฝ, ์ฌ๋ฌด ์ ํธ, docs ์ ํธ, ๋ ์ง์คํธ๋ฆฌ
L1 providers/ ๊ตญ๊ฐ๋ณ ๋ฐ์ดํฐ (DART, EDGAR, EDINET)
gather/ ์ธ๋ถ ์์ฅ ๋ฐ์ดํฐ (Naver, Yahoo, FRED)
scan/ ์์ฅ ํก๋จ๋ถ์ โ scan("๊ทธ๋ฃน", "์ถ")
quant/ ๊ธฐ์ ์ ๋ถ์ โ c.quant()
L2 analysis/ ์ฌ๋ฌด + ์ ๋ง + ๊ฐ์นํ๊ฐ โ analysis("๊ทธ๋ฃน", "์ถ")
credit/ ๋
๋ฆฝ ์ ์ฉํ๊ฐ โ c.credit()
macro/ ์์ฅ ๋ ๋ฒจ ๋งคํฌ๋ก โ dartlab.macro()
review/ 5์์ง ์กฐํฉ ๋ณด๊ณ ์ (analysis + credit + scan + quant + macro)
L3 ai/ ์ ๊ทน์ ๋ถ์๊ฐ โ dartlab.ask()
L4 vscode/ VSCode ํ์ฅ (dartlab chat --stdio)
ui/web/ Svelte SPA ์น ์ธํฐํ์ด์ค
import ๋ฐฉํฅ์ CI ๊ฐ์ . ์ ๊ตญ๊ฐ ์ถ๊ฐ = provider ํจํค์ง ํ๋, core ์์ 0์ค.
๋ ์ด์ด ๊ฐ ์๋น ํ๋ฆ
๊ฐ ๋ ์ด์ด๊ฐ ๋๊ตฌ๋ฅผ ์๋นํ๊ณ ๋๊ตฌ์๊ฒ ์๋น๋๋์ง:
flowchart TB
subgraph L4["L4 ยท ์ฌ์ฉ์ ์ธํฐํ์ด์ค"]
UI["vscode / CLI / web"]
end
subgraph L3["L3 ยท LLM ๋ถ์๊ฐ"]
AI["ai<br/>dartlab.ask()"]
end
subgraph L2["L2 ยท ๋ถ์"]
ANA["analysis<br/>์ฌ๋ฌด ์ธ๊ณผ + ์ ๋ง + ๊ฐ์นํ๊ฐ"]
CRD["credit<br/>๋
๋ฆฝ ์ ์ฉํ๊ฐ"]
MAC["macro<br/>์์ฅ ํด์"]
REV["review<br/>๋ธ๋ก์ ๋ณด๊ณ ์"]
end
subgraph L1["L1 ยท ๋ฐ์ดํฐ ์์ง"]
PRV["providers<br/>DART / EDGAR / EDINET"]
GAT["gather<br/>FRED / ECOS / Naver / Yahoo"]
SCN["scan<br/>์ ์ข
๋ชฉ ํก๋จ"]
QNT["quant<br/>๊ธฐ์ ์ 25์งํ"]
end
subgraph L0["L0 ยท ์ธํ๋ผ"]
CORE["core<br/>protocols + finance + docs + search"]
end
UI --> AI
AI --> REV
AI --> ANA
AI --> MAC
AI --> SCN
REV --> ANA
REV --> CRD
REV --> SCN
REV --> QNT
REV --> MAC
ANA --> PRV
ANA --> GAT
CRD --> PRV
MAC --> GAT
SCN --> PRV
QNT --> GAT
PRV --> CORE
GAT --> CORE
SCN --> CORE
QNT --> CORE
classDef l0 fill:#f5f5f5,stroke:#999
classDef l1 fill:#e8f4ff,stroke:#4a90e2
classDef l2 fill:#fff4e6,stroke:#e67e22
classDef l3 fill:#f0e6ff,stroke:#8e44ad
classDef l4 fill:#e6ffe6,stroke:#27ae60
class CORE l0
class PRV,GAT,SCN,QNT l1
class ANA,CRD,MAC,REV l2
class AI l3
class UI l4
ํต์ฌ ๊ท์น:
- ํ์ดํ๋ ํญ์ ์โ์๋ (L4โL3โL2โL1โL0). ์ญ๋ฐฉํฅ import ๊ธ์ง (CI ๊ฒ์ฆ)
- L2 ์์ง๋ผ๋ฆฌ๋ ์๋ก import ๊ธ์ง โ analysis โ credit, macro โ analysis. ์กฐํฉ์ review ๋๋ ai์ ๋ชซ
- ์ ๊ธฐ๋ฅ ์ถ๊ฐ ์ ์ ํฉํ ๋ ์ด์ด๋ฅผ ๋จผ์ ๊ฒฐ์ ํ ๋ค ํ ๋ฐฉํฅ์ผ๋ก๋ง ๋ฐ์ดํฐ๊ฐ ํ๋ฅด๊ฒ ํ๋ค
EDGAR (๋ฏธ๊ตญ)
๊ฐ์ ์ธํฐํ์ด์ค, ๋ค๋ฅธ ๋ฐ์ดํฐ ์์ค. SEC API์์ ์๋ ์์ง, ์ฌ์ ๋ค์ด๋ก๋ ๋ถํ์.
# Korea (DART) # US (EDGAR)
c = dartlab.Company("005930") c = dartlab.Company("AAPL")
c.sections c.sections
c.show("businessOverview") c.show("business")
c.show("BS") c.show("BS")
c.show("ratios") c.show("ratios")
c.diff("businessOverview") c.diff("10-K::item7Mdna")
MCP โ AI ์ด์์คํดํธ ์ฐ๋
MCP ์๋ฒ ๋ด์ฅ. Claude Desktop, Claude Code, Cursor์์ ์ฌ์ฉ ๊ฐ๋ฅ.
# Claude Code โ ํ ์ค ์ค์
claude mcp add dartlab -- uv run dartlab mcp
# Codex CLI
codex mcp add dartlab -- uv run dartlab mcp
Claude Desktop / Cursor ์ค์
claude_desktop_config.json ๋๋ .cursor/mcp.json์ ์ถ๊ฐ:
{
"mcpServers": {
"dartlab": {
"command": "uv",
"args": ["run", "dartlab", "mcp"]
}
}
}
์๋ ์์ฑ: dartlab mcp --config claude-desktop
OpenAPI โ ์๋ณธ ๊ณต๊ณต API
from dartlab import OpenDart, OpenEdgar
# ํ๊ตญ (opendart.fss.or.kr ๋ฌด๋ฃ API ํค ํ์)
d = OpenDart()
d.filings("์ผ์ฑ์ ์", "2024")
d.finstate("์ผ์ฑ์ ์", 2024)
# ๋ฏธ๊ตญ (API ํค ๋ถํ์)
e = OpenEdgar()
e.filings("AAPL", forms=["10-K", "10-Q"])
๋ฐ์ดํฐ
๋ชจ๋ ๋ฐ์ดํฐ๋ HuggingFace์ ์ฌ์ ๊ตฌ์ถ โ ์๋ ๋ค์ด๋ก๋. EDGAR๋ SEC API ์ง์ ์์ง.
| ๋ฐ์ดํฐ์ | ๊ท๋ชจ | ์ฉ๋ |
|---|---|---|
| DART docs | 2,500+ ๊ธฐ์ | ~8 GB |
| DART finance | 2,700+ ๊ธฐ์ | ~600 MB |
| DART report | 2,700+ ๊ธฐ์ | ~320 MB |
| EDGAR | ์ฃผ๋ฌธํ | SEC API |
ํ์ดํ๋ผ์ธ: ๋ก์ปฌ ์บ์(์ฆ์) โ HuggingFace(์๋ ๋ค์ด๋ก๋) โ DART API(ํค ํ์). ๋๋ถ๋ถ ์ฒ์ ๋ ๋จ๊ณ๋ก ์ถฉ๋ถ.
๋ฐ๋ก ์์ํ๊ธฐ
๋ผ์ด๋ธ ๋ฐ๋ชจ โ ์ค์น ์์ด ๋ธ๋ผ์ฐ์ ์์ ๋ฐ๋ก
๋ ธํธ๋ถ: Company ยท Scan ยท Review ยท Gather ยท Analysis ยท Ask (AI)
๋ฌธ์
๋ฌธ์ ยท ๋น ๋ฅธ ์์ ยท API ๊ฐ์
๋ธ๋ก๊ทธ (120+ ๊ธ): ์ ์ฒด ยท ๊ธฐ์ ์ด์ผ๊ธฐ ยท ์ ์ฉํ๊ฐ ๋ณด๊ณ ์ ยท ๋งคํฌ๋ก ๋ณด๊ณ ์
์์ ์ฑ
| Tier | ๋ฒ์ |
|---|---|
| Stable | DART Company (sections, show, trace, diff, BS/IS/CF, CIS, index, filings, profile), EDGAR Company core, valuation, forecast, simulation |
| Beta | EDGAR ํ์์ ์ (SCE, notes, freq, coverage), credit, insights, distress, ratios, timeseries, network, governance, workforce, capital, debt, chart/table/text ๋๊ตฌ, ask/chat, OpenDart, OpenEdgar, Server API, MCP |
| Experimental | AI ๋๊ตฌ ํธ์ถ, export, viz (์ฐจํธ) |
์์ธํ ๊ธฐ์ค์ docs/stability.md๋ฅผ ๋ณธ๋ค.
๊ธฐ์ฌ
๊ธฐ์ฌ์๋ฅผ ๋ํ์ํฉ๋๋ค. ๋ฒ๊ทธ ๋ฆฌํฌํธ, ์ ๋ถ์ ์ถ, ๋งคํ ์์ , ๋ฌธ์ ๊ฐ์ โ ์ด๋ค ๊ธฐ์ฌ๋ dartlab์ ๋ ์ข๊ฒ ๋ง๋ญ๋๋ค.
๊ท์น ํ๋: ์คํ ๋จผ์ , ์์ง์ ๊ทธ ๋ค์. ์์ด๋์ด๋ experiments/์์ ๊ฒ์ฆํ ๋ค ์์ง์ ๋ฐ์ํ๋ค.
- ์คํ ํด๋:
experiments/XXX_name/โ ๊ฐ ํ์ผ์ ๋ ๋ฆฝ ์คํ ๊ฐ๋ฅ, docstring์ ์ค์ ๊ฒฐ๊ณผ ํฌํจ - ๋ฐ์ดํฐ ๊ธฐ์ฌ (
accountMappings.json,sectionMappings.json๋ฑ): ์คํ ์ฆ๊ฑฐ๊ฐ ์์ ๋ ์์ฉ - ํ๊ตญ์ด/์์ด ์ด์์ PR ๋ชจ๋ ํ์
- ์ด๋์ ์์ํ ์ง ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด ์ด์๋ฅผ ์ด์ด์ฃผ์ธ์
๋ผ์ด์ ์ค
MIT

