้ๆฏไธๅๅฐ็บ่ค้้่็ญ็ฅ่จญ่จ็็พ่กๆ่ณ็ตๅๅๆธฌๅนณๅฐใๅ็ซฏๆก็จ Next.js ๆไพๆตๆข็ไบๅ้ซ้ฉ๏ผๅพ็ซฏๅๅฉ็จ FastAPI ็ตๅ Python ๅผทๅคง็็งๅญธ่จ็ฎ็ๆ ๏ผPandas, VectorBT๏ผ๏ผๆฏๆดๆฉๅจๅญธ็ฟๆจกๅๆดๅ่ๅคง่ฆๆจก็ฉ้ฃ้็ฎใ
ๆฌ็ณป็ตฑ้ๅฐ้ท็ทๆ่ณ่่ณ็ข้ ็ฝฎ้ๆฑ๏ผๆไพไปฅไธๆ ธๅฟๅ่ฝ๏ผ
- ๅคๆชๆจ็ๆฏๆด๏ผๅฏๅๆๅๆธฌ 1 ่ณ 50 ๆช ็พ่กๆจ็ใ
- ๅฝๆงๆ้ๅ้๏ผๆๅฐ่จ็ฎๅฎไฝ็บ ใๆใ(Monthly)๏ผๆฏๆด 1ๅนดใ5ๅนดใ10ๅนดใ20ๅนด็ญ่ชๅฎ็พฉๅ้ใ
- ๅๅนณ่กกๆฉๅถ (Rebalancing)๏ผ
- ๆฏๆดๅนดๅบฆๅๅนณ่กก๏ผๆฏๅนดๅบๅฎๆ้้ป๏ผใ
- ่ชๅๅฐๅ่ณ็ขๆฌ้ๆขๅพฉ่ณไฝฟ็จ่ ่จญๅฎ็ๅๅงๆฏไพใ
- ๆ่ณ็ญ็ฅ๏ผๆกๅใไธๆฆ่ฒทๅ ฅ๏ผๆฐธไธๅบๅ ดใ็ญ็ฅ๏ผๅฐๆณจๆผ่ณ็ข้ ็ฝฎ่ๅๅนณ่กก็้ทๆๅฝฑ้ฟใ
- ๅฐๆฅญ็ธพๆๆๆจ๏ผ
- ่ณ็ขๆฒ็ท๏ผๆฏๆๆทจๅผ่ฎๅ็่ฆ่ฆบๅๅ็พใ
- ็ตๅ็ตฑ่จ๏ผCAGR๏ผๅนดๅ่คๅๅข้ท็๏ผใๅนดๅๆณขๅๅบฆใๆๅคงๅๆค (MDD)ใ
- ๅ่กๅๆ๏ผ้ๅฐ็ตๅๅ งๆฏๆช่ก็ฅจๆไพ็จ็ซ็็ธพๆๅๅ ฑๆธๆใ
ๆฌๅฐๆกๆก็จ pnpm Monorepo ๆถๆง๏ผ็ขบไฟๅๅพ็ซฏ็จๅผ็ขผ็้ซๆ็ฎก็่ๅๅฅๅๆญฅใ
| ๅฑค็ด | ๆ่กๅทฅๅ ท | ้้ต่ท่ฒฌ |
|---|---|---|
| Monorepo | pnpm |
ๅทฅไฝๅ (Workspace) ็ฎก็ใไพ่ณดๅ ฑไบซ่้ซๆๅฎ่ฃใ |
| ๅ็ซฏ | Next.js (App Router) |
ไฝฟ็จ่ ไป้ขใRecharts ๅ่กจๆธฒๆใ็ๆ ็ฎก็ใ |
| ๅพ็ซฏ | FastAPI (Python) |
้ซๆง่ฝ API ๆๅใๆฉๅจๅญธ็ฟๆจกๅๆจ่ซใ็ฉ้ฃ้็ฎ่ชฟๅบฆใ |
| ่จ็ฎๅผๆ | Pandas, VectorBT |
ๅ้ๅๅๆธฌ้็ฎใ้่ๆๆจ่จ็ฎใ |
| ่ณๆๅบซ | PostgreSQL |
ๆญทๅฒ่กๅน็ทฉๅญใไฝฟ็จ่ ๅๆธฌ็ด้่่จญๅฎๅญๅใ |
/quant-backtest-monorepo
โโโ .pnpm-workspace.yaml # pnpm Workspace ้
็ฝฎ
โโโ package.json # ๆ น็ฎ้ๅ
จๅ Script
โโโ /apps
โ โโโ /web # [Next.js] ๅ็ซฏไป้ข
โ โโโ /app # ้ ้ข่ทฏ็ฑ่ Server Components
โ โโโ /components # UI ๅ
ไปถ่ Recharts ๅ่กจ
โโโ /services
โ โโโ /fastapi-api # [FastAPI] ๅพ็ซฏ้็ฎไธญๅฟ
โ โโโ /core # ๆ ธๅฟๅๆธฌๅผๆ (Vectorized Engine)
โ โโโ /data # ๆธๆ็ฒๅ (yfinance/DB)
โ โโโ /routers # API Endpoint ๅฎ็พฉ
โโโ /shared # ๅๅพ็ซฏๅ
ฑไบซๅฎ็พฉ (Types/Schemas)
็ขบไฟๆจ็็ฐๅขๅทฒๅฎ่ฃ๏ผ
- Node.js (v18+)
- pnpm (v9+)
- Python (3.10+)
# ๅฎ่ฃๅ็ซฏไพ่ณด + ๅปบ็ซ Python ่ๆฌ็ฐๅข + ๅฎ่ฃๅพ็ซฏไพ่ณด
pnpm setup:all# ๅฎ่ฃๅ็ซฏ่ๅ
จๅฑไพ่ณด
pnpm install
# ๅปบ็ซ Python ่ๆฌ็ฐๅขไธฆๅฎ่ฃๅพ็ซฏไพ่ณด
cd services/fastapi-api
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt่ค่ฃฝ .env.example ไธฆๅกซๅ
ฅๆจ็่จญๅฎ๏ผ
cp .env.example .env.local้่ฆ่จญๅฎ็่ฎๆธ๏ผ
GOOGLE_CLIENT_ID- Google OAuth Client IDGOOGLE_CLIENT_SECRET- Google OAuth Client SecretJWT_SECRET_KEY- JWT ๅ ๅฏ้้ฐ๏ผๅฏ็จopenssl rand -hex 32็ข็๏ผ
ๅจๅฐๆกๆ น็ฎ้ๅท่กไธ้ตๅๅๆไปค๏ผ
pnpm dev:all- ๅ็ซฏไป้ข๏ผhttp://localhost:3000
- API ไบคไบๆไปถ๏ผhttp://localhost:8000/docs
ๆฌๅฐๆกๆฏๆด Google ๅธณ่็ปๅ ฅใ่จญๅฎๆญฅ้ฉ๏ผ
- ๅๅพ Google Cloud Console
- ๅปบ็ซๅฐๆกๆ้ธๆ็พๆๅฐๆก
- ๅ็จ Google+ API
- ๅปบ็ซ OAuth 2.0 ๆ่ญ๏ผWeb Application ้กๅ๏ผ
- ่จญๅฎๆๆฌ้ๆฐๅฐๅ URI๏ผ
http://localhost:8000/api/v1/auth/google/callback - ๅฐ Client ID ๅ Client Secret ๅกซๅ
ฅ
.env.local
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ Next.js App โโโโโโถโ FastAPI API โโโโโโถโ SQLite DB โ
โ (Frontend) โโโโโโโ (Backend) โโโโโโโ (Storage) โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ โ
โ โผ
โ โโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโถโ Google OAuth โ
โโโโโโโโโโโโโโโโโโโ
/options- Options Backtest๏ผ้็ปๅ ฅ๏ผ/- ้ฆ้ ๏ผๅ ฌ้๏ผ
็ขบไฟๅทฒๅฎ่ฃ Docker ่ Docker Compose๏ผ็ถๅพๅท่ก๏ผ
# ๅปบๆงไธฆๅๅๆๆๆๅ
docker compose up --build
# ่ๆฏ้่ก
docker compose up --build -dๅๅๅพ่จชๅ๏ผhttp://localhost
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Nginx (:80) โ
โ (ๅๅไปฃ็ & ่ฒ ่ผๅ่กก) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โผ โผ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ Next.js โ โ FastAPI โ
โ (:3000) โ โ (:8000) โ
โ ๅ็ซฏไป้ข โ โ ๅๆธฌ API โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
# ๆฅ็ๆฅ่ช
docker compose logs -f
# ๅๆญขๆๅ
docker compose down
# ้ๆฐๅปบๆงๅฎไธๆๅ
docker compose build api
docker compose build webไฝฟ็จ ./scripts/run.sh ็ฐกๅ Docker ๆไฝ๏ผ
./scripts/run.sh up # ๅๅๆๅ (้ ่จญ)
./scripts/run.sh down # ๅๆญขๆๅ
./scripts/run.sh restart # ้ๅๆๅ
./scripts/run.sh logs # ๆฅ็ๆฅ่ช
./scripts/run.sh status # ๆฅ็็ๆ
./scripts/run.sh clean # ๆธ
็ Docker ่ณๆบๅๅๅพ่จชๅ๏ผhttp://localhost:1111
| ๅนณๅฐ | ่ชชๆ | ๆไปค |
|---|---|---|
| Fly.io | ๅ จ็้จ็ฝฒใไฝๅปถ้ฒ | fly launch |
| Railway | ไธ้ต้จ็ฝฒใ่ชๅ CI/CD | ้ฃ็ต GitHub |
| DigitalOcean | App Platform | ้ฃ็ต GitHub |
| AWS ECS | ไผๆฅญ็ดๆดๅฑ | ไฝฟ็จ docker-compose |
# ๅฎ่ฃ Fly CLI
brew install flyctl
# ็ปๅ
ฅ & ้จ็ฝฒ
fly auth login
fly launchๅฐๆกๆ ธๅฟๅผๆไฝฟ็จไปฅไธๆธๅญธๆจกๅ็ขบไฟ่จ็ฎๆบ็ขบๆง๏ผ
ๅนดๅ่คๅๅข้ท็ (CAGR):$$CAGR = \left( \frac{V_{final}}{V_{initial}} \right)^{\frac{1}{t}} - 1$$
ๆๅคงๅๆค (Max Drawdown):$$MDD = \frac{Peak - Trough}{Peak}$$
ๅนดๅบฆๅๅนณ่กก:$$W_{t+1} = W_{initial} \cdot TotalValue_{t}$$
This project is licensed under the MIT License - see the LICENSE file for details.