Siglens๋ ๋ณต์กํ ๋ฏธ๊ตญ ์ฃผ์ ๊ธฐ์ ์ ๋ถ์์ AI๊ฐ ๋์ ์ฒ๋ฆฌํด์ฃผ๋ ๋ถ์ ์ ์ฉ ์๋น์ค์ ๋๋ค.
์ด๋ํ๊ท , MACD, RSI, ๋ณผ๋ฆฐ์ ๋ฐด๋, DMI, ์บ๋ค ํจํด, ์ฐจํธ ํจํด์ฒ๋ผ ์ฌ๋ฌ ์งํ๋ฅผ ๋์์ ํด์ํด์ผ ํ๋ ์์ ์ ์๋ํํฉ๋๋ค. ์ฌ์ฉ์๋ ํฐ์ปค๋ฅผ ์ ๋ ฅํ๋ฉด ์ฐจํธ, ์ธ๋์ผ์ดํฐ, AI ๋ถ์ ๋ฆฌํฌํธ, ์ต์ ์์ฅ ํด์, ๋ด์ค/ํ๋๋ฉํธ ์์ฝ์ ํ ํ๋ฉด์์ ํ์ธํ ์ ์์ต๋๋ค.
๊ธฐ์กด ๋ฐฉ์ ๋ณด์กฐ์งํ ์๋ ์ถ๊ฐ -> ๊ฑฐ๋๋ ๋ถ์ -> ํจํด ํด์ -> ์ข
ํฉ ํ๋จ
Siglens ํฐ์ปค ์
๋ ฅ -> ์ฐจํธ/์งํ ์๋ ๋ ๋ -> AI ์ข
ํฉ ๋ถ์ ๋ฆฌํฌํธ
Siglens๋ ์ฃผ๋ฌธ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ๋ถ์ ์ ๋ณด๋ง ์ ๊ณตํ๋ฉฐ, ํฌ์ ๊ฒฐ์ ์ ์ฌ์ฉ์ ๋ณธ์ธ์ ์ฑ ์์ ๋๋ค.
Siglens๋ ํ์ฌ siglens.io์์ ์ ์ ๋ฐฐํฌ ์ค์ ๋๋ค.
- ์ฐจํธ: Lightweight Charts v5 ๊ธฐ๋ฐ ์บ๋ค, ๊ฑฐ๋๋, ๋ณด์กฐ์งํ ๋ ๋๋ง๊ณผ 5๋ถ๋ด~์ผ๋ด ๋ฉํฐ ํ์ํ๋ ์
- ์ธ๋์ผ์ดํฐ: RSI, MACD, ๋ณผ๋ฆฐ์ ๋ฐด๋, ADX, DMI, Stochastic, StochRSI, CCI, VWAP, MA, EMA, Volume Profile, Ichimoku Cloud, ATR, Donchian/Keltner Channel, SuperTrend, OBV, CMF, MFI, Parabolic SAR, Williams %R, Squeeze Momentum, Smart Money Concepts ๋ฑ
- ์บ๋ค/์ฐจํธ ํจํด: ๋จ์ผ ์บ๋ค 15์ข , ๋ฉํฐ ์บ๋ค 30์ข , ํค๋์ค์๋, ์๊ธฐ, ์ด์ค์ฒ์ฅ/๋ฐ๋ฅ, ์ผ๊ฐ์๋ ด, ํ๋๊ทธ, ์ปต์คํธ๋ค ๋ฑ Skills ๊ธฐ๋ฐ ๊ฐ์ง
- AI ์ข ํฉ ๋ถ์: ๊ธฐ์ ์ ๋ถ์, ํ๋๋ฉํธ, ๋ด์ค, ๊ณตํฌํ์, ์ต์ ์์ฅ์ ํตํฉํ ํ๊ตญ์ด ๋ฆฌํฌํธ
- ์ต์ ๋ถ์: Max Pain, Put/Call Ratio, ATM IV, Implied Move, Strike๋ณ Open Interest ๋ถํฌ ํด์
- AI ๋ชจ๋ธ ์ ํ: Claude, Gemini, ChatGPT ๋ชจ๋ธ์ ํ์ด์ง๋ณ๋ก ์ ํ
- BYOK: Anthropic, Google, OpenAI API Key๋ฅผ ์ฌ์ฉ์ ๊ณ์ ์ ์ํธํ ์ ์ฅํด ์์ฒด ํค๋ก ํธ์ถ
- ํ์ ๊ธฐ๋ฅ: ๋นํ์ ๊ธฐ๋ณธ ์ฌ์ฉ, ํ์ ๊ฐ์ ์ tier ๊ธฐ๋ฐ ๋ชจ๋ธ/ํ๋/BYOK ๊ธฐ๋ฅ ์ ๊ณต
- AI ์ฑ๋ด: ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์ปจํ ์คํธ๋ก ์ด์ด๊ฐ๋ ์์ฐ์ด ํ์ ์ง๋ฌธ
- ์์ฅ ํํฉ ๋์๋ณด๋: 11๊ฐ ์นํฐ 200+ ์ข ๋ชฉ์ ๊ณจ๋ ํฌ๋ก์ค, RSI ๋ค์ด๋ฒ์ ์ค, ๋ณผ๋ฆฐ์ ์คํด์ฆ ์ค์บ
- AI ๋ฐฑํ ์คํ : 2024.04~2026.04 ๊ธฐ๊ฐ์ ๋ถ์ ๊ฒฐ๊ณผ 100๊ฑด์ ๋ํ ์ค์ ์์ต๋ฅ ๊ฒ์ฆ
| ๊ฒฝ๋ก | ์ค๋ช |
|---|---|
/[symbol] |
์ข ๋ชฉ๋ณ ์ฐจํธ, ๊ธฐ์ ์ ๋ถ์, AI ๋ฆฌํฌํธ |
/[symbol]/fundamental |
์ฌ๋ฌด, ๋ฐธ๋ฅ์์ด์ , ์ ๋๋ฆฌ์คํธ ์ปจ์ผ์์ค ๊ธฐ๋ฐ ํ๋๋ฉํธ ๋ถ์ |
/[symbol]/news |
๋ด์ค์ ์ด๋ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ๋ถ์ |
/[symbol]/fear-greed |
์ข ๋ชฉ๋ณ ๊ณตํฌํ์ ์ง์ |
/[symbol]/options |
์ต์ ์ฒด์ธ, OI ๋ถํฌ, Max Pain, IV ๊ธฐ๋ฐ ๋ถ์ |
/[symbol]/overall |
๊ธฐ์ /ํ๋๋ฉํธ/๋ด์ค/์ต์ ์ ํฉ์น ์ข ํฉ ๋ถ์ |
/market |
์นํฐ๋ณ ์์ฅ ์ ํธ ๋์๋ณด๋ |
/backtesting |
AI ๋ถ์ ๋ฐฑํ ์คํ ๊ฒฐ๊ณผ |
| ๋ฐ์ดํฐ | ์ถ์ฒ | ๋น๊ณ |
|---|---|---|
| ์์ธ OHLCV | Financial Modeling Prep | 5๋ถ๋ด~์ผ๋ด ๋ฉํฐ ํ์ํ๋ ์, ์ต๋ 15๋ถ ์ง์ฐ |
| ํ๋๋ฉํธ | FMP /stable API |
PER, ROE, EPS, ์ปจ์ผ์์ค, ๋ชฉํ๊ฐ |
| ๋ด์ค/์ด๋ | FMP /stable API |
๋ด์ค sentiment๋ Gemini Flash-Lite๋ก ์์ฒด ๋ถ์ |
| ์ต์ ์ฒด์ธ | yahoo-finance2 | ์ค๋ ์ท ๊ธฐ๋ฐ ์ต์ ์ฒด์ธ, OI, IV, Greeks |
์ฃผ์ ์ธ๋ถ ์ธํ๋ผ ์์กด์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
| ์๋น์ค | ์ฉ๋ |
|---|---|
| Vercel | Next.js ๋ฐฐํฌ, Edge/Serverless ์คํ |
| Upstash | Redis ๊ธฐ๋ฐ ๋ถ์ ์บ์, Job ์ํ, ์ด๋ฉ์ผ ํ ํฐ ์ ์ฅ |
| Neon | PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค |
| Resend | ์ด๋ฉ์ผ ์ธ์ฆ๊ณผ ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ๋ฉ์ผ ๋ฐ์ก |
| Cloudflare | DNS, edge ๋ณด์, ์บ์/ํธ๋ํฝ ๊ด๋ฆฌ |
| ์์ญ | ๊ธฐ์ |
|---|---|
| Framework | Next.js 16.2, App Router, Turbopack, React Compiler |
| UI | React 19.2, Tailwind CSS 4 |
| Chart | Lightweight Charts v5, ์์ฒด SVG ์ต์ OI ์ฐจํธ |
| State | TanStack Query v5 |
| AI | Anthropic Claude, Google Gemini, OpenAI ChatGPT |
| Auth | bcryptjs, Google OAuth, Kakao OAuth, ์ํธํ ์ธ์ ์ฟ ํค |
| Database | Drizzle ORM, Neon PostgreSQL |
| Cache | Upstash Redis |
| Testing | Vitest, Testing Library, jsdom |
| Language | TypeScript 5 |
| Package Manager | yarn 4.12.0 |
| Runtime | Node.js 25.2.1 |
| Deploy | Vercel, Cloudflare, Cloud Run worker |
Node.js 25.2.1
yarn 4.12.0git clone https://github.com/y0ngha/siglens.git
cd siglens
yarn installcp .env.example .env.localํ์ ํ๊ฒฝ๋ณ์:
| ๋ณ์ | ๋ฐ๊ธ์ฒ | ์ฉ๋ |
|---|---|---|
FMP_API_KEY |
Financial Modeling Prep | ์์ธ, ์ข ๋ชฉ, ํ๋๋ฉํธ, ๋ด์ค ๋ฐ์ดํฐ |
GEMINI_CHAT_API_KEY |
Google AI Studio | Gemini ๋ชจ๋ธ, ์ฑ๋ด, ์ต์ ํด์ |
ANTHROPIC_CHAT_API_KEY |
Anthropic Console | Claude ๋ชจ๋ธ |
OPENAI_CHAT_API_KEY |
OpenAI Platform | ChatGPT ๋ชจ๋ธ |
UPSTASH_REDIS_REST_URL / UPSTASH_REDIS_REST_TOKEN |
Upstash | Redis ์บ์์ Job ์ํ |
DATABASE_URL |
Neon | PostgreSQL |
OAUTH_TOKEN_ENCRYPTION_KEY / LLM_API_KEY_ENCRYPTION_KEY |
openssl rand -hex 32 |
DB ์ ์ฅ ํ ํฐ/API ํค ์ํธํ |
CRON_SECRET |
์ง์ ์์ฑ | cron/action ๋ณดํธ์ฉ bearer token |
์ ํ ํ๊ฒฝ๋ณ์:
| ๋ณ์ | ์ฉ๋ |
|---|---|
GEMINI_CHAT_FREE_API_KEY |
Gemini free quota fallback |
TRANSLATE_API_KEY / TRANSLATE_FREE_API_KEY |
ํ๊ตญ์ด ์ข ๋ชฉ๋ช ๋ฒ์ญ |
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET |
Google OAuth ๋ก๊ทธ์ธ |
KAKAO_REST_API_KEY / KAKAO_CLIENT_SECRET |
Kakao OAuth ๋ก๊ทธ์ธ |
RESEND_API_KEY / EMAIL_FROM |
์ด๋ฉ์ผ ๋ฐ์ก |
NEXT_PUBLIC_SITE_URL |
์ฌ์ดํธ canonical URL |
NEXT_PUBLIC_ADSENSE_* |
Google AdSense |
SIGLENS_GITHUB_TOKEN |
@y0ngha/siglens-core ์ค์น์ฉ GitHub Packages token |
WORKER_URL / WORKER_SECRET |
Cloud Run worker ํธ์ถ |
yarn devhttp://localhost:4200 ์ ์
Siglens๋ Feature-Sliced Design 6-layer ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
app -> pages -> widgets -> features -> entities -> shared
^
@y0ngha/siglens-core๋ ๋ชจ๋ ๋ ์ด์ด์์ ์ง์ import ๊ฐ๋ฅ
siglens/
โโโ src/
โ โโโ app/ Next.js App Router, RSC, Route Handler
โ โโโ widgets/ ์ฐจํธ, ๋ถ์ ํจ๋, ๋์๋ณด๋, ํ์ด์ง ์กฐํฉ UI
โ โโโ features/ ์ธ์ฆ, ๊ฒ์, ์ฑํ
, premium gate ๋ฑ ์ฌ์ฉ์ ๊ธฐ๋ฅ
โ โโโ entities/ user, session, bars, analysis, ticker ๋ฑ ๋๋ฉ์ธ ์ํฐํฐ
โ โโโ shared/ ๊ณตํต UI, config, db, email, api, hooks, lib
โโโ skills/ ๋ถ์ ๊ธฐ๋ฒ ์ ์ Markdown
โโโ docs/ ์ํคํ
์ฒ, ๋๋ฉ์ธ, ์ปจ๋ฒค์
๋ฌธ์
โโโ refs/ ๋ณด์กฐ์งํ์ ํฌ์ ์ด๋ก ๋ ํผ๋ฐ์ค
๋ถ์ ๋๋ฉ์ธ ๋ก์ง์ ๋ณธ์ฒด๋ @y0ngha/siglens-core ํจํค์ง์ ์์ต๋๋ค. ์ด ํจํค์ง๋ ์ผ๋ฐ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋๋ผ Siglens ๋ถ์ ๋ก์ง์ ๋ถ๋ฆฌํ ์ฝ์ด ํจํค์ง์ด๋ฏ๋ก ๋ชจ๋ FSD ๋ ์ด์ด์์ ์ง์ importํ ์ ์์ต๋๋ค.
์์ธํ ๊ท์น์ ARCHITECTURE.md์ SCOPE.md๋ฅผ ์ฐธ๊ณ ํ์ธ์.
๋ถ์ ๊ธฐ๋ฒ์ ์ฝ๋๊ฐ ์๋๋ผ skills/ ๋๋ ํฐ๋ฆฌ์ Markdown ํ์ผ๋ก ์ ์ํฉ๋๋ค.
/skills/<category>/my-strategy.md ํ์ผ ์ถ๊ฐ -> ์๋ก์ด ๋ถ์ ๊ธฐ๋ฒ ์ ์ฉ
entities/skill์ด Markdown ํ์ผ์ ์ฝ๊ณ , ํ์ฑ๋ Skill ๋ฐ์ดํฐ๊ฐ @y0ngha/siglens-core์ ํ๋กฌํํธ ๋น๋์ ์ ๋ฌ๋ฉ๋๋ค. ๋๋ฉ์ธ ๊ณ์ฐ์์ ์์ ํ์ง ์๊ณ ๋ ๋ถ์ ๊ธฐ๋ฒ์ ์ถ๊ฐํ๊ฑฐ๋ ๋ณด์ํ ์ ์์ต๋๋ค.
ํ์ฌ ์นดํ ๊ณ ๋ฆฌ:
skills/patterns/: ์ฐจํธ ํจํดskills/indicators/: ๋ณด์กฐ์งํ ์๊ทธ๋ ํด์skills/strategies/: ์๋ฆฌ์ดํธ ํ๋, ๋์ํ ๋ถ์ ๋ฑskills/support-resistance/: ํผ๋ณด๋์น, ํผ๋ดํฌ์ธํธskills/candlesticks/: ์บ๋ค ํจํด ๊ต์กskills/fundamental/: ๊ฐ์น, ์ฑ์ฅ, ํ๋ฆฌํฐ ํฌ์ ๊ด์ skills/news/: ์ด๋ฒคํธ ๋๋ฆฌ๋ธ, ๋งคํฌ๋ก ์ํฅ, ์ด๋ ๋ฆฌ์ก์
| ๋ฌธ์ | ๋ด์ฉ |
|---|---|
| SERVICE.md | ์๋น์ค ๊ฐ์, ๋์ ์ฌ์ฉ์, ๊ธฐ์ ์คํ, Skills ์์คํ |
| ARCHITECTURE.md | FSD ๋ ์ด์ด ๊ตฌ์กฐ, ์์กด์ฑ ๊ท์น, ๋ฐ์ดํฐ ํ๋ฆ |
| SCOPE.md | siglens์ siglens-core์ ์ฑ ์ ๋ถ๋ฆฌ |
| AUTH.md | ์ธ์ฆ, ์ธ์ , OAuth, ์ด๋ฉ์ผ ํ ํฐ ํ๋ฆ |
| DOMAIN.md | ์ธ๋์ผ์ดํฐ ๊ณ์ฐ ๋ช ์ธ, ์บ๋ค ํจํด, Skills ์์คํ |
| API.md | ๋ฐ์ดํฐ/AI API์ ํ๊ฒฝ๋ณ์ |
| CONVENTIONS.md | ์ฝ๋ฉ ์ปจ๋ฒค์ , ๋ค์ด๋ฐ, ํ ์คํธ ์ ์ฑ |
| E2E.md | Playwright E2E ํ๋์ค ๊ตฌ์กฐ, ๋ก์ปฌ/CI ์คํ, ์คํ ์์ฑ ๊ฐ์ด๋ |
| DESIGN.md | ์ปฌ๋ฌ ์์คํ , Tailwind ์ค์ , ์ฐจํธ ์ปฌ๋ฌ ์์ |
| GIT_CONVENTIONS.md | ๋ธ๋์น, ์ปค๋ฐ ๋ฉ์์ง, PR ๊ท์น |
| MISTAKES.md | ๋ฐ๋ณต ์ค์์ ๋ฐฉ์ง ๊ท์น |
yarn test # ์ ์ฒด ํ
์คํธ
yarn test-watch # watch
yarn test-coverage # ์ปค๋ฒ๋ฆฌ์ง ํฌํจ
yarn test-coverage-report # ์์ธ ์ปค๋ฒ๋ฆฌ์ง ๋ฆฌํฌํธ์ปค๋ฒ๋ฆฌ์ง ๋ชฉํ๋ ์ ์ฒด FSD ๋ ์ด์ด ๊ธฐ์ค 90%์
๋๋ค. ํ์ฌ Vitest ์ค์ ์ entities/, features/, shared/, widgets/, app/, src/proxy.ts๋ฅผ ์ปค๋ฒ๋ฆฌ์ง ์ธก์ ๋์์ผ๋ก ํฌํจํฉ๋๋ค.
์ค์ ๋ธ๋ผ์ฐ์ ๋ก ์ฌ์ฉ์ ์ฌ์ ์ ๊ฒ์ฆํ๋ Playwright E2E ์ค์ํธ๋ Vitest ์์ ๋ณ๋๋ก ์ฌ๋ผ๊ฐ๋๋ค. ํ๋์ค ๊ตฌ์กฐ์ ๋ก์ปฌ/CI ์คํ ๋ฐฉ๋ฒ์ E2E.md๋ฅผ ์ฐธ๊ณ ํ์ธ์.
yarn dev # ๊ฐ๋ฐ ์๋ฒ, port 4200
yarn build # ํ๋ก๋์
๋น๋
yarn lint # ESLint
yarn lint:fix
yarn lint:style # Stylelint
yarn lint:style-fix
yarn typecheck # TypeScript
yarn format # Prettierํจํค์ง ์ค์น๋ ํญ์ yarn์ ์ฌ์ฉํฉ๋๋ค. npm๊ณผ pnpm์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
์์ง ์ธ๋ถ ์ฝ๋ ๊ธฐ์ฌ ํ๋ก์ธ์ค๋ ์ ์์ผ๋ก ์ด๋ ค ์์ง ์์ต๋๋ค. ๋ฒ๊ทธ ๋ฆฌํฌํธ๋ ์ ์์ Issues๋ก ๋จ๊ฒจ์ฃผ์ธ์.
Skills ๊ธฐ์ฌ๋ ์์ง ๊ณต๊ฐ๋ ๋ฆฌ๋ทฐ/๋จธ์ง ์ํฌํ๋ก๊ฐ ์์ต๋๋ค. skills/ ๋๋ ํฐ๋ฆฌ์ Markdown ํ์ผ ํ๋๋ฅผ ์ถ๊ฐํ๋ฉด ๋ถ์ ๊ธฐ๋ฒ์ ํ์ฅํ ์ ์๋๋ก ์ค๊ณ๋์ด ์์ง๋ง, frontmatter ํ์ค๊ณผ ๊ฒ์ฆ ์ ์ฐจ๊ฐ ์ ๋ฆฌ๋ ๋ค ๊ธฐ์ฌ ๊ฐ์ด๋๋ฅผ ๊ณต๊ฐํ ์์ ์
๋๋ค.
PolyForm Noncommercial License 1.0.0