---
## ๐ ์๊ฐ
### QuantDinger๋ ๋ฌด์์ธ๊ฐ์?
QuantDinger๋ **๋ก์ปฌ ์ฐ์ , ํ๋ผ์ด๋ฒ์ ์ฐ์ ์ ์ ๋ ๊ฑฐ๋ ์ธํ๋ผ**์
๋๋ค. ์์ ํ ๊ทํ์ ๋จธ์ ์์ ์คํ๋๋ฉฐ, ์ ๋ต, ๊ฑฐ๋ ๋ฐ์ดํฐ ๋ฐ API ํค๋ฅผ ์์ ํ ์ ์ดํ ์ ์์ต๋๋ค.
### ์ ๋ก์ปฌ ์ฐ์ ์ธ๊ฐ์?
๋ฐ์ดํฐ์ ์ ๋ต์ ํด๋ผ์ฐ๋์ ์ ๊ทธ๋ SaaS ํ๋ซํผ๊ณผ ๋ฌ๋ฆฌ, QuantDinger๋ ๋ก์ปฌ์์ ์คํ๋ฉ๋๋ค. ๊ทํ์ ์ ๋ต, ๊ฑฐ๋ ๋ก๊ทธ, API ํค ๋ฐ ๋ถ์ ๊ฒฐ๊ณผ๋ ๋ชจ๋ ๊ทํ์ ๋จธ์ ์ ์ ์ฅ๋ฉ๋๋ค. ๋ฒค๋ ์ ๊ธ ์์, ๊ตฌ๋
๋ฃ ์์, ๋ฐ์ดํฐ ์ ์ถ ์์.
### ๋๊ตฌ๋ฅผ ์ํ ๊ฒ์ธ๊ฐ์?
QuantDinger๋ ๋ค์์ ์ํ ์ฌ์ฉ์๋ฅผ ์ํด ๊ตฌ์ถ๋์์ต๋๋ค:
- ๋ฐ์ดํฐ ์ฃผ๊ถ๊ณผ ํ๋ผ์ด๋ฒ์๋ฅผ ์ค์ํ๋ ํธ๋ ์ด๋, ์ฐ๊ตฌ์ ๋ฐ ์์ง๋์ด
- ํฌ๋ช
ํ๊ณ ๊ฐ์ฌ ๊ฐ๋ฅํ ๊ฑฐ๋ ์ธํ๋ผ๋ฅผ ์ํ๋ ์ฌ๋
- ๋ง์ผํ
๋ณด๋ค ์์ง๋์ด๋ง์ ์ ํธํ๋ ์ฌ๋
- ์์ ํ ์ํฌํ๋ก์ฐ๊ฐ ํ์ํ ์ฌ๋: ๋ฐ์ดํฐ, ๋ถ์, ๋ฐฑํ
์คํ
๋ฐ ์คํ
### ํต์ฌ ๊ธฐ๋ฅ
QuantDinger๋ ์น์์ ๊ธ์ต ์ ๋ณด๋ฅผ ์์งํ๊ณ , ๋ก์ปฌ ์์ฅ ๋ฐ์ดํฐ์ ๊ฒฐํฉํ์ฌ ๋ถ์ ๋ณด๊ณ ์๋ฅผ ์์ฑํ๋ ๋ด์ฅ **LLM ๊ธฐ๋ฐ ๋ฉํฐ ์์ด์ ํธ ๋ฆฌ์์น ์์คํ
**์ ํฌํจํฉ๋๋ค. ์ด๊ฒ์ ์ ๋ต ๊ฐ๋ฐ, ๋ฐฑํ
์คํ
๋ฐ ์ค๊ฑฐ๋ ์ํฌํ๋ก์ฐ์ ํตํฉ๋ฉ๋๋ค.
### ํต์ฌ ๊ฐ์น
- **ํ๋ผ์ด๋ฒ์ ์ฐ์ **: ๋ชจ๋ ์ ๋ต, ๊ฑฐ๋ ๋ก๊ทธ ๋ฐ API ํค๋ ๋ก์ปฌ SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ฉ๋๋ค
- **AI ๊ธฐ๋ฐ ๋ถ์**: ์์ฅ ๋ถ์์ ์ํ LLM ๊ธฐ๋ฐ ๋ฆฌ์์น ์์ด์ ํธ๏ผOpenRouter/LLM๏ผ
- **๋ฉํฐ ๋ง์ผ ์ง์**: ์ํธํํ, ๋ฏธ๊ตญ ์ฃผ์, ์ค๊ตญ/ํ์ฝฉ ์ฃผ์, ์ธํ ๋ฐ ์ ๋ฌผ
- **Docker ๋ฐฐํฌ**: Docker Compose๋ฅผ ํตํ ์ํด๋ฆญ ์ค์
---
## ๐บ ๋์์ ๋ฐ๋ชจ
์ ๋์์์ ํด๋ฆญํ์ฌ QuantDinger ํ๋ก์ ํธ ์๊ฐ๋ฅผ ์์ฒญํ์ธ์
---
## ๐ ๋ฌธ์
- [Python ์ ๋ต ๊ฐ๋ฐ ๊ฐ์ด๋](docs/STRATEGY_DEV_GUIDE_KO.md)
## ๐ธ ๋น์ฃผ์ผ ํฌ์ด
๐ ์ ๋ฌธ ํํธ ๋์๋ณด๋
์์ฅ ์ญํ, ์์ฐ ๋ฐ ์ ๋ต ์ํ์ ๋ํ ์ค์๊ฐ ๋ชจ๋ํฐ๋ง.
๐ค AI ๋ฅ ๋ฆฌ์์น
์์ฅ ์ฌ๋ฆฌ ๋ฐ ๊ธฐ์ ์ ๋ถ์์ ์ํ ๋ฉํฐ ์์ด์ ํธ ํ์
.
|
๐ฌ ์ค๋งํธ ํธ๋ ์ด๋ฉ ์ด์์คํดํธ
์ฆ๊ฐ์ ์ธ ์์ฅ ํต์ฐฐ๋ ฅ์ ์ํ ์์ฐ์ด ์ธํฐํ์ด์ค.
|
๐ ๋ํํ ์งํ ๋ถ์
๋๋๊ทธ ์ค ๋๋กญ ๋ถ์์ด ๊ฐ๋ฅํ ํ๋ถํ ๊ธฐ์ ์ ์งํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
|
๐ Python ์ ๋ต ์์ฑ
AI ์ง์ ์ ๋ต ์ฝ๋ฉ์ด ๊ฐ๋ฅํ ๋ด์ฅ ์๋ํฐ.
|
---
## โจ ์ฃผ์ ๊ธฐ๋ฅ
### 1. ๋ฒ์ฉ ๋ฐ์ดํฐ ์์ง
QuantDinger๋ ์ฌ๋ฌ ์์ฅ์ ๊ฑธ์น ํตํฉ ๋ฐ์ดํฐ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค:
- **์ํธํํ**: ๊ฑฐ๋๋ฅผ ์ํ ์ง์ API ์ฐ๊ฒฐ๏ผ10๊ฐ ์ด์์ ๊ฑฐ๋์๏ผ๋ฐ ์์ฅ ๋ฐ์ดํฐ๋ฅผ ์ํ CCXT ํตํฉ๏ผ100๊ฐ ์ด์์ ์์ค๏ผ
- **์ฃผ์**: Yahoo Finance, Finnhub, Tiingo๏ผ๋ฏธ๊ตญ ์ฃผ์๏ผ๋ฐ AkShare๏ผ์ค๊ตญ/ํ์ฝฉ ์ฃผ์๏ผ
- **์ ๋ฌผ/์ธํ**: OANDA ๋ฐ ์ฃผ์ ์ ๋ฌผ ๋ฐ์ดํฐ ์์ค
- **ํ๋ก์ ์ง์**: ์ ํ๋ ๋คํธ์ํฌ ํ๊ฒฝ์ ์ํ ๋ด์ฅ ํ๋ก์ ๊ตฌ์ฑ
### 2. AI ๋ฉํฐ ์์ด์ ํธ ๋ฆฌ์์น
์์คํ
์๋ ์์ฅ ๋ถ์์ ์ํ ๋ฉํฐ ์์ด์ ํธ ์ํฌํ๋ก์ฐ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค:
- **์ฝ๋๋ค์ดํฐ ์์ด์ ํธ**: ์์
๋ถํด ๋ฐ ์ํฌํ๋ก์ฐ ๊ด๋ฆฌ
- **๋ฆฌ์์น ์์ด์ ํธ**: ๊ฑฐ์ ๋ด์ค ๋ฐ ์ด๋ฒคํธ๋ฅผ ์ํ ์น ๊ฒ์๏ผGoogle/Bing๏ผ
- **์์ฅ๋ณ ์์ด์ ํธ**: ์ํธํํ ๋ฐ ์ฃผ์์ ๋ํ ๊ธฐ์ ์ ๋ถ์ ๋ฐ ์๊ธ ํ๋ฆ ๋ถ์
- **๋ณด๊ณ ์ ์์ฑ**: ๊ตฌ์กฐํ๋ ์ผ์ผ/์ฃผ๊ฐ ๋ฆฌ์์น ๋ณด๊ณ ์
### 2.1 ๐ง ๋ฉ๋ชจ๋ฆฌ ์ฆ๊ฐ ์์ด์ ํธ(Memory-Augmented Agents)
QuantDinger์ ์์ด์ ํธ๋ ๋งค๋ฒ โ์ฒ์๋ถํฐโ ์์ํ์ง ์์ต๋๋ค. ๋ฐฑ์๋์๋ **๋ก์ปฌ ๋ฉ๋ชจ๋ฆฌ DB + ๋ฆฌํ๋ ์
(๊ฒ์ฆ) ๋ฃจํ**๊ฐ ๋ด์ฅ๋์ด ์์ด, ๊ณผ๊ฑฐ ๊ฒฝํ์ ๊ฒ์ํด system prompt์ ์ฃผ์
ํ๋ RAG ์คํ์ผ์ ๊ฐํ๊ฐ ๋์ํฉ๋๋ค.
- **๋ฌด์์ธ๊ฐ**: ๊ฒฝํ ๊ฒ์ ๊ธฐ๋ฐ ํ๋กฌํํธ ๊ฐํ(๋ชจ๋ธ ํ์ธํ๋/ํ์ต์ด ์๋)
- **์ ์ฅ ์์น**: ๋ก์ปฌ SQLite (`backend_api_python/data/memory/`)
#### ํ๋ฆ๋(์์ฒญ โ ๋ฉ๋ชจ๋ฆฌ ํ๋ฃจํ)
```mermaid
flowchart TB
%% ===== ๐ ์ง์
๋ ์ด์ด =====
subgraph Entry["๐ API ์ง์
์ "]
A["๐ก POST /api/analysis/multi"]
A2["๐ POST /api/analysis/reflect"]
end
%% ===== โ๏ธ ์๋น์ค ๋ ์ด์ด =====
subgraph Service["โ๏ธ ์๋น์ค ์ค์ผ์คํธ๋ ์ด์
"]
B[AnalysisService]
C[AgentCoordinator]
D["๐ ์ปจํ
์คํธ ๊ตฌ์ฑ
price ยท kline ยท news ยท indicators"]
end
%% ===== ๐ค ๋ฉํฐ์์ด์ ํธ ์ํฌํ๋ก์ฐ =====
subgraph Agents["๐ค ๋ฉํฐ์์ด์ ํธ ์ํฌํ๋ก์ฐ"]
subgraph P1["๐ Phase 1 ยท ๋ค์ฐจ์ ๋ถ์๏ผ๋ณ๋ ฌ๏ผ"]
E1["๐ MarketAnalyst
๊ธฐ์ ์ ๋ถ์"]
E2["๐ FundamentalAnalyst
ํ๋๋ฉํธ"]
E3["๐ฐ NewsAnalyst
๋ด์ค"]
E4["๐ญ SentimentAnalyst
์ฌ๋ฆฌ"]
E5["โ ๏ธ RiskAnalyst
๋ฆฌ์คํฌ ํ๊ฐ"]
end
subgraph P2["๐ฏ Phase 2 ยท ๊ฐ์ธ/์ฝ์ธ ๋
ผ์๏ผ๋ณ๋ ฌ๏ผ"]
F1["๐ BullResearcher
๊ฐ์ธ ๋
ผ๊ฑฐ"]
F2["๐ป BearResearcher
์ฝ์ธ ๋
ผ๊ฑฐ"]
end
subgraph P3["๐น Phase 3 ยท ๊ฑฐ๋ ๊ฒฐ์ "]
G["๐ฐ TraderAgent
์ข
ํฉ ํ๋จ โ BUY / SELL / HOLD"]
end
end
%% ===== ๐ง ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์ด =====
subgraph Memory["๐ง ๋ก์ปฌ SQLite ๋ฉ๋ชจ๋ฆฌ๏ผdata/memory/๏ผ"]
M1[("market_analyst")]
M2[("fundamental")]
M3[("news_analyst")]
M4[("sentiment")]
M5[("risk_analyst")]
M6[("bull_researcher")]
M7[("bear_researcher")]
M8[("trader_agent")]
end
%% ===== ๐ ๋ฆฌํ๋ ์
๋ฃจํ =====
subgraph Reflect["๐ ๋ฆฌํ๋ ์
๋ฃจํ๏ผ์ต์
๏ผ"]
R[ReflectionService]
RR[("reflection_records.db")]
W["โฐ ReflectionWorker"]
end
%% ===== ๋ฉ์ธ ํ๋ฆ =====
A --> B --> C --> D
D --> P1 --> P2 --> P3
%% ===== ๋ฉ๋ชจ๋ฆฌ ์ฝ๊ธฐ/์ฐ๊ธฐ =====
E1 <-.-> M1
E2 <-.-> M2
E3 <-.-> M3
E4 <-.-> M4
E5 <-.-> M5
F1 <-.-> M6
F2 <-.-> M7
G <-.-> M8
%% ===== ๋ฆฌํ๋ ์
ํ๋ฆ =====
C --> R --> RR
W --> RR
W -.->|"๊ฒ์ฆ + ํ์ต"| M8
A2 -.->|"์๋ ํ๊ณ "| M8
```
#### ๊ฒ์ ๋ญํน(๊ฐ๋ต)
\[
score = w_{sim}\cdot sim + w_{recency}\cdot recency + w_{returns}\cdot returns\_score
\]
#### ํ์ต ๊ฒฝ๋ก
- **์๋ ํ๊ณ (์ถ์ฒ)**: `POST /api/analysis/reflect`๋ก ์ค์ ๊ฒฐ๊ณผ(returns/result)๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๊ธฐ๋ก
- **์๋ ๊ฒ์ฆ(์ต์
)**: `ENABLE_REFLECTION_WORKER=true`, `REFLECTION_WORKER_INTERVAL_SEC`๋ก ์ฃผ๊ธฐ์ ๊ฒ์ฆโ๋ฉ๋ชจ๋ฆฌ ๋ฐ์
#### ์ฃผ์ ํ๊ฒฝ ๋ณ์(`.env`)
- `ENABLE_AGENT_MEMORY`, `AGENT_MEMORY_TOP_K`, `AGENT_MEMORY_CANDIDATE_LIMIT`
- `AGENT_MEMORY_ENABLE_VECTOR`, `AGENT_MEMORY_EMBEDDING_DIM`
- `AGENT_MEMORY_HALF_LIFE_DAYS`, `AGENT_MEMORY_W_SIM`, `AGENT_MEMORY_W_RECENCY`, `AGENT_MEMORY_W_RETURNS`
- `ENABLE_REFLECTION_WORKER`, `REFLECTION_WORKER_INTERVAL_SEC`
### 3. ์ ๋ต ๋ฐํ์
- **์ค๋ ๋ ๊ธฐ๋ฐ ์คํ๊ธฐ**: ์ ๋ต ์คํ์ ์ํ ๋
๋ฆฝ์ ์ธ ์ค๋ ๋ ํ
- **์๋ ๋ณต๊ตฌ**: ์์คํ
์ฌ์์ ํ ์คํ ์ค์ธ ์ ๋ต ์ฌ๊ฐ
- **์ฃผ๋ฌธ ๋๊ธฐ์ด**: ์ฃผ๋ฌธ ์คํ์ ์ํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ปค
### 4. ๊ธฐ์ ์คํ
- **๋ฐฑ์๋**: Python (Flask) + SQLite + Redis๏ผ์ต์
๏ผ
- **ํ๋ก ํธ์๋**: Vue 2 + Ant Design Vue + KlineCharts/ECharts
- **๋ฐฐํฌ**: Docker Compose
---
## ๐ ์ง์๋๋ ๊ฑฐ๋์
QuantDinger๋ ์คํ์ ์ํ ์ฃผ์ ์ํธํํ ๊ฑฐ๋์์ ๋ํ ์ง์ API ์ฐ๊ฒฐ์ ์ง์ํ๋ฉฐ, ๊ด๋ฒ์ํ ์์ฅ ๋ฐ์ดํฐ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ํด CCXT๋ฅผ ์ฌ์ฉํฉ๋๋ค.
### ์ง์ API ์ง์
| ๊ฑฐ๋์ | ์์ฅ |
|:--------:|:---------|
| Binance | ํ๋ฌผ, ์ ๋ฌผ, ๋ง์ง |
| OKX | ํ๋ฌผ, ๋ฌด๊ธฐํ, ์ต์
|
| Bitget | ํ๋ฌผ, ์ ๋ฌผ, ์นดํผ ํธ๋ ์ด๋ฉ |
### CCXT๋ฅผ ํตํด์๋ ์ง์
Bybit, Gate.io, Kraken, KuCoin, HTX ๋ฐ 100๊ฐ ์ด์์ ๊ธฐํ ๊ฑฐ๋์๊ฐ ์์ฅ ๋ฐ์ดํฐ์ฉ์ผ๋ก ์ง์๋ฉ๋๋ค.
---
### ๋ค๊ตญ์ด ์ง์
QuantDinger๋ ํฌ๊ด์ ์ธ ๊ตญ์ ํ๋ฅผ ํตํด ๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ์ํด ๊ตฌ์ถ๋์์ต๋๋ค:
๋ชจ๋ UI ์์, ์ค๋ฅ ๋ฉ์์ง ๋ฐ ๋ฌธ์๋ ์๋ฒฝํ๊ฒ ๋ฒ์ญ๋์ด ์์ต๋๋ค. ์ธ์ด๋ ๋ธ๋ผ์ฐ์ ์ค์ ์ ๋ฐ๋ผ ์๋์ผ๋ก ๊ฐ์ง๋๊ฑฐ๋ ์ฑ์์ ์๋์ผ๋ก ์ ํํ ์ ์์ต๋๋ค.
---
### ์ง์๋๋ ์์ฅ
| ์์ฅ ์ ํ | ๋ฐ์ดํฐ ์์ค | ๊ฑฐ๋ |
|-------------|--------------|---------|
| **์ํธํํ** | Binance, OKX, Bitget, + 100 ๊ฑฐ๋์ | โ
์์ ์ง์ |
| **๋ฏธ๊ตญ ์ฃผ์** | Yahoo Finance, Finnhub, Tiingo | โ
๋ธ๋ก์ปค API ๊ฒฝ์ |
| **์ค๊ตญ/ํ์ฝฉ ์ฃผ์** | AkShare, East Money | โก ๋ฐ์ดํฐ๋ง |
| **์ธํ** | Finnhub, OANDA | โ
๋ธ๋ก์ปค API ๊ฒฝ์ |
| **์ ๋ฌผ** | ๊ฑฐ๋์ API, AkShare | โก ๋ฐ์ดํฐ๋ง |
---
### ์ํคํ
์ฒ (ํ์ฌ ๋ ํฌ์งํ ๋ฆฌ)
```text
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ quantdinger_vue โ
โ (Vue 2 + Ant Design Vue) โ
โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
โ HTTP (/api/*)
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ backend_api_python โ
โ (Flask + ์ ๋ต ๋ฐํ์) โ
โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
โ
โโ SQLite (quantdinger.db)
โโ Redis (์ต์
์บ์)
โโ ๋ฐ์ดํฐ ์ ๊ณต์ / LLMs / ๊ฑฐ๋์
```
---
### ๋ ํฌ์งํ ๋ฆฌ ๊ตฌ์กฐ
```text
.
โโ backend_api_python/ # Flask API + AI + ๋ฐฑํ
์คํธ + ์ ๋ต ๋ฐํ์
โ โโ app/
โ โโ env.example # ๋ก์ปฌ ๊ตฌ์ฑ์ ์ํด .env๋ก ๋ณต์ฌ
โ โโ requirements.txt
โ โโ run.py # ์ํธ๋ฆฌ ํฌ์ธํธ
โโ quantdinger_vue/ # Vue 2 UI (๊ฐ๋ฐ ์๋ฒ๋ /api๋ฅผ ๋ฐฑ์๋๋ก ํ๋ก์)
```
---
## ๋น ๋ฅธ ์์
### ์ต์
1: Docker ๋ฐฐํฌ (๊ถ์ฅ)
QuantDinger๋ฅผ ์คํํ๋ ๊ฐ์ฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ์
๋๋ค.
#### 1. ์ํด๋ฆญ ์์
**Linux / macOS**
```bash
git clone https://github.com/brokermr810/QuantDinger.git && \
cd QuantDinger && \
cp backend_api_python/env.example backend_api_python/.env && \
docker-compose up -d --build
```
**Windows (PowerShell)**
```powershell
git clone https://github.com/brokermr810/QuantDinger.git
cd QuantDinger
Copy-Item backend_api_python\env.example -Destination backend_api_python\.env
docker-compose up -d --build
```
#### 2. ์ ์ ๋ฐ ๊ตฌ์ฑ
- **ํ๋ก ํธ์๋ UI**: http://localhost:8888
- **๊ธฐ๋ณธ ๊ณ์ **: `quantdinger` / `123456`
> **์ฐธ๊ณ **: AI ๊ธฐ๋ฅ์ด๋ ํ๋ก๋์
ํ๊ฒฝ์ ๋ณด์์ ์ํด, `backend_api_python/.env`๋ฅผ ํธ์งํ์ฌ( `OPENROUTER_API_KEY` ์ถ๊ฐ, ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ) `docker-compose restart backend`๋ก ์๋น์ค๋ฅผ ์ฌ์์ํ์ญ์์ค.
#### 3. ์ ํ๋ฆฌ์ผ์ด์
์ก์ธ์ค
- **ํ๋ก ํธ์๋ UI**: http://localhost
- **๋ฐฑ์๋ API**: http://localhost:5000
#### Docker ๋ช
๋ น ์ฐธ์กฐ
```bash
# ์คํ ์ํ ๋ณด๊ธฐ
docker-compose ps
# ๋ก๊ทธ ๋ณด๊ธฐ
docker-compose logs -f
# ์๋น์ค ์ค์ง
docker-compose down
# ๋ณผ๋ฅจ ์ค์ง ๋ฐ ์ ๊ฑฐ (๊ฒฝ๊ณ : ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ญ์ ๋ฉ๋๋ค!)
docker-compose down -v
```
#### ๋ฐ์ดํฐ ์ง์์ฑ
๋ค์ ๋ฐ์ดํฐ๋ ํธ์คํธ์ ๋ง์ดํธ๋๋ฉฐ ์ปจํ
์ด๋ ์ฌ์์ ํ์๋ ์ ์ง๋ฉ๋๋ค:
```yaml
volumes:
- ./backend_api_python/logs:/app/logs # ๋ก๊ทธ
- ./backend_api_python/data:/app/data # ๋ฐ์ดํฐ ๋๋ ํ ๋ฆฌ(quantdinger.db ํฌํจ)
- ./backend_api_python/.env:/app/.env # ๊ตฌ์ฑ ํ์ผ
```
---
### ์ต์
2: ๋ก์ปฌ ๊ฐ๋ฐ
**์ ์ ์กฐ๊ฑด**
- Python 3.10+ ๊ถ์ฅ
- Node.js 16+ ๊ถ์ฅ
#### 1. ๋ฐฑ์๋ ์์ (Flask API)
```bash
cd backend_api_python
pip install -r requirements.txt
cp env.example .env # Windows: copy env.example .env
python run.py
```
๋ฐฑ์๋๋ `http://localhost:5000`์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
#### 2. ํ๋ก ํธ์๋ ์์ (Vue UI)
```bash
cd quantdinger_vue
npm install
npm run serve
```
ํ๋ก ํธ์๋ ๊ฐ๋ฐ ์๋ฒ๋ `http://localhost:8000`์์ ์คํ๋๋ฉฐ `/api/*`๋ฅผ `http://localhost:5000`์ผ๋ก ํ๋ก์ํฉ๋๋ค.
---
### ๊ตฌ์ฑ (.env)
`backend_api_python/env.example`์ ํ
ํ๋ฆฟ์ผ๋ก ์ฌ์ฉํ์ญ์์ค. ์ผ๋ฐ์ ์ธ ์ค์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- **์ธ์ฆ**: `SECRET_KEY`, `ADMIN_USER`, `ADMIN_PASSWORD`
- **์๋ฒ**: `PYTHON_API_HOST`, `PYTHON_API_PORT`, `PYTHON_API_DEBUG`
- **AI / LLM**: `OPENROUTER_API_KEY`, `OPENROUTER_MODEL`
- **์น ๊ฒ์**: `SEARCH_PROVIDER`, `SEARCH_GOOGLE_*`, `SEARCH_BING_API_KEY`
- **ํ๋ก์ (์ต์
)**: `PROXY_PORT` ๋๋ `PROXY_URL`
---
## ๐ค ์ปค๋ฎค๋ํฐ ๋ฐ ์ง์
- **๊ธฐ์ฌ**: [๊ธฐ์ฌ ๊ฐ์ด๋](CONTRIBUTING.md) ยท [๊ธฐ์ฌ์](CONTRIBUTORS.md)
- **Telegram**: [QuantDinger ๊ทธ๋ฃน](https://t.me/quantdinger)
- **Discord**: [์๋ฒ ์ฐธ์ฌ](https://discord.gg/vwJ8zxFh9Q)
- **๐บ ๋์์ ๋ฐ๋ชจ**: [ํ๋ก์ ํธ ์๊ฐ](https://youtu.be/HPTVpqL7knM)
- **YouTube**: [@quantdinger](https://youtube.com/@quantdinger)
- **Email**: [brokermr810@gmail.com](mailto:brokermr810@gmail.com)
- **GitHub Issues**: [๋ฒ๊ทธ ์ ๊ณ / ๊ธฐ๋ฅ ์์ฒญ](https://github.com/brokermr810/QuantDinger/issues)
---
## ๐ฐ ํ๋ก์ ํธ ์ง์ ๊ฐ๋ฅ์ฑ
QuantDinger๋ ์คํ์์ค์ด๋ฉฐ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ์ฉํ๋ค๊ณ ์๊ฐ๋๋ฉด ๋ค์์ ์ง์์ ์ธ ๊ฐ๋ฐ์ ์ง์ํ๋ ๋ฐฉ๋ฒ์
๋๋ค:
### ์ง์ ๊ธฐ๋ถ
**ERC-20 / BEP-20 / Polygon / Arbitrum**
```
0x96fa4962181bea077f8c7240efe46afbe73641a7
```
### ๊ฑฐ๋์ ์ถ์ฒ ๋งํฌ
์ง์๋๋ ๊ฑฐ๋์์ ๊ฐ์
ํ๋ ๊ฒฝ์ฐ, ์๋ ๋งํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ถ์ฒ ํํ์ด ์ ๊ณต๋์ด ํ๋ก์ ํธ ์ง์์ ๋์์ด ๋ฉ๋๋ค. ์ด๋ ์ ํ ์ฌํญ์ด๋ฉฐ ๊ฑฐ๋ ์์๋ฃ๋ ๊ณ์ ๊ธฐ๋ฅ์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค.
| ๊ฑฐ๋์ | ์ถ์ฒ ๋งํฌ |
|:--------:|:-------------|
| Binance | [์ถ์ฒ ๋งํฌ๋ก ๊ฐ์
](https://www.bmwweb.ac/referral/earn-together/refer2earn-usdc/claim?hl=zh-CN&ref=GRO_28502_9OSOJ) |
| OKX | [์ถ์ฒ ๋งํฌ๋ก ๊ฐ์
](https://www.bjwebptyiou.com/join/14449926) |
| Bitget | [์ถ์ฒ ๋งํฌ๋ก ๊ฐ์
](https://share.glassgs.com/u/H8XZGS71) |
---
### ์์ฉ ์๋น์ค
๋ค์ ์ ๋ฌธ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค:
| ์๋น์ค | ์ค๋ช
|
|---------|-------------|
| **๋ฐฐํฌ ๋ฐ ์ค์ ** | ์๋ฒ ๋ฐฐํฌ, ๊ตฌ์ฑ ๋ฐ ์ต์ ํ์ ๋ํ ์ผ๋์ผ ์ง์ |
| **๋ง์ถคํ ์ ๋ต ๊ฐ๋ฐ** | ๊ทํ์ ํน์ ์๊ตฌ์ ์์ฅ์ ๋ง์ถ ๊ฑฐ๋ ์ ๋ต ์ค๊ณ |
| **์ํฐํ๋ผ์ด์ฆ ์
๊ทธ๋ ์ด๋** | ์์ฉ ๋ผ์ด์ ์ค, ์ฐ์ ์ง์ ๋ฐ ๋น์ฆ๋์ค๋ฅผ ์ํ ๊ณ ๊ธ ๊ธฐ๋ฅ |
| **๊ต์ก ๋ฐ ์ปจ์คํ
** | ๊ฑฐ๋ ํ์ ์ํ ์ค์ ๊ต์ก ์ธ์
๋ฐ ์ ๋ต ์ปจ์คํ
|
**๊ด์ฌ์ด ์์ผ์ญ๋๊น?** ๋ค์์ ํตํด ๋ฌธ์ํ์ญ์์ค:
- ๐ง Email: [brokermr810@gmail.com](mailto:brokermr810@gmail.com)
- ๐ฌ Telegram: [QuantDinger Group](https://t.me/quantdinger)
---
### ๊ฐ์ฌ์ ๋ง
QuantDinger๋ Flask, Pandas, CCXT, Vue.js, Ant Design Vue, KlineCharts ๋ฑ๊ณผ ๊ฐ์ ํ๋ฅญํ ์คํ ์์ค ํ๋ก์ ํธ์ ์ด๊นจ ์์ ์ ์์ต๋๋ค.
๋ชจ๋ ๊ด๋ฆฌ์์ ๊ธฐ์ฌ์์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! โค๏ธ