---
### ๐ **QuantDinger DAO ์ปค๋ฎค๋ํฐ์ ์ฐธ์ฌํ์ธ์ - ์ด๊ธฐ ๊ธฐ์ฌ์๋ QDT ํ ํฐ์ ๋ฐ์ต๋๋ค!**
[](CONTRIBUTORS.md)
[](CONTRIBUTORS.md)
**๋ถ์ฐํ ์ปค๋ฎค๋ํฐ ์ฃผ๋ ๊ฑฐ๋ ํ๋ซํผ์ ๊ตฌ์ถํ๊ณ ์์ต๋๋ค. ์ด๊ธฐ ๊ธฐ์ฌ์๋ QDT ๊ฑฐ๋ฒ๋์ค ํ ํฐ์ ๋ฐ์ต๋๋ค!**
[๐ ์์ธํ ๋ณด๊ธฐ](CONTRIBUTORS.md) ยท [๐ฌ Telegram ์ฐธ์ฌ](https://t.me/quantdinger) ยท [๐ฎ Discord ์ฐธ์ฌ](https://discord.gg/vwJ8zxFh9Q)
---
## ๐ ์๊ฐ
**QuantDinger**๋ ํธ๋ ์ด๋, ์ฐ๊ตฌ์ ๋ฐ ๊ดด์ง๋ค์ ์ํด ์ค๊ณ๋ **๋ก์ปฌ ์ฐ์ (Local-First)** ํํธ ๊ฑฐ๋ ์ํฌ์คํ์ด์ค์
๋๋ค.
๋น์ผ SaaS ํ๋ซํผ๊ณผ ๋ฌ๋ฆฌ, QuantDinger๋ **๋ฐ์ดํฐ ์์ ๊ถ**์ ๊ทํ์๊ฒ ๋๋ ค๋๋ฆฝ๋๋ค. **LLM ๊ธฐ๋ฐ ๋ฉํฐ ์์ด์ ํธ ๋ฆฌ์์น ํ**์ด ๋ด์ฅ๋์ด ์์ด ์น์์ ๊ธ์ต ์ ๋ณด๋ฅผ ์์จ์ ์ผ๋ก ์์งํ๊ณ , ๋ก์ปฌ ์์ฅ ๋ฐ์ดํฐ์ ๊ฒฐํฉํ์ฌ ์ ๋ฌธ ๋ถ์ ๋ณด๊ณ ์๋ฅผ ์์ฑํ๋ฉฐ, ์ ๋ต ๊ฐ๋ฐ, ๋ฐฑํ
์คํ
๋ฐ ์ค๊ฑฐ๋ ์ํฌํ๋ก์ฐ์ ์ํํ๊ฒ ํตํฉ๋ฉ๋๋ค.
### ํต์ฌ ๊ฐ์น
- **๐ก๏ธ ํ๋ผ์ด๋ฒ์ ์ฐ์ **: ๋ชจ๋ ์ ๋ต, ๊ฑฐ๋ ๋ก๊ทธ ๋ฐ API ํค๋ ๋ก์ปฌ SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ฉ๋๋ค.
- **๐ง AI ๊ฐํ**: ๋จ์ํ ์ฝ๋ ์์ฑ์ด ์๋, OpenRouter/LLM์ผ๋ก ๊ตฌ๋๋๋ ์ง์ ํ AI ๋ฆฌ์์น ์ ๋๋ฆฌ์คํธ์
๋๋ค.
- **โก ๋ฉํฐ ๋ง์ผ**: **์ํธํํ**, **๋ฏธ๊ตญ ์ฃผ์**, **์ค๊ตญ/ํ์ฝฉ ์ฃผ์**, **์ธํ** ๋ฐ **์ ๋ฌผ**์ ๊ธฐ๋ณธ ์ง์ํฉ๋๋ค.
- **๐ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅ**: Docker๋ฅผ ํตํ ์ํด๋ฆญ ๋ฐฐํฌ. ๋ณต์กํ ํ๊ฒฝ ์ค์ ์ด ํ์ ์์ต๋๋ค.
---
## ๐บ ๋์์ ๋ฐ๋ชจ
์ ๋์์์ ํด๋ฆญํ์ฌ QuantDinger ํ๋ก์ ํธ ์๊ฐ๋ฅผ ์์ฒญํ์ธ์
---
## ๐ ๋ฌธ์
- [Python ์ ๋ต ๊ฐ๋ฐ ๊ฐ์ด๋](docs/STRATEGY_DEV_GUIDE_KO.md)
## ๐ธ ๋น์ฃผ์ผ ํฌ์ด
๐ ์ ๋ฌธ ํํธ ๋์๋ณด๋
์์ฅ ์ญํ, ์์ฐ ๋ฐ ์ ๋ต ์ํ์ ๋ํ ์ค์๊ฐ ๋ชจ๋ํฐ๋ง.
๐ค AI ๋ฅ ๋ฆฌ์์น
์์ฅ ์ฌ๋ฆฌ ๋ฐ ๊ธฐ์ ์ ๋ถ์์ ์ํ ๋ฉํฐ ์์ด์ ํธ ํ์
.
|
๐ฌ ์ค๋งํธ ํธ๋ ์ด๋ฉ ์ด์์คํดํธ
์ฆ๊ฐ์ ์ธ ์์ฅ ํต์ฐฐ๋ ฅ์ ์ํ ์์ฐ์ด ์ธํฐํ์ด์ค.
|
๐ ๋ํํ ์งํ ๋ถ์
๋๋๊ทธ ์ค ๋๋กญ ๋ถ์์ด ๊ฐ๋ฅํ ํ๋ถํ ๊ธฐ์ ์ ์งํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
|
๐ Python ์ ๋ต ์์ฑ
AI ์ง์ ์ ๋ต ์ฝ๋ฉ์ด ๊ฐ๋ฅํ ๋ด์ฅ ์๋ํฐ.
|
---
## โจ ์ฃผ์ ๊ธฐ๋ฅ
### 1. ๋ฒ์ฉ ๋ฐ์ดํฐ ์์ง
๋ ์ด์ ๋ฐ์ดํฐ API์ ๋ํด ๊ฑฑ์ ํ์ง ๋ง์ธ์. 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๋ ์ ์ง์ฐ ์คํ์ ์ํด ์ฃผ์ ์ํธํํ ๊ฑฐ๋์์ **์ง์ ์ฐ๊ฒฐ**์ ์ง์ํ๋ฉฐ, ๊ด๋ฒ์ํ ์์ฅ ๋ฐ์ดํฐ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ํด **CCXT**๋ฅผ ์ฌ์ฉํฉ๋๋ค.
> ๐ก **๋
์ ํํ**: ์๋ ํํธ๋ ๋งํฌ๋ฅผ ํตํด ๊ณ์ ์ ์์ฑํ๋ฉด **๊ฑฐ๋ ์์๋ฃ ํ ์ธ** ๋ฐ **๋
์ ๋ณด๋์ค**๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค. ์ด๋ ์ถ๊ฐ ๋น์ฉ ์์ด ํ๋ก์ ํธ๋ฅผ ์ง์ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค!
| ๊ฑฐ๋์ | ํน์ง | ๊ฐ์
๋ณด๋์ค |
|:--------:|:---------|:-------------:|
|
| ๐ฅ **์ธ๊ณ ์ต๋**
ํ๋ฌผ, ์ ๋ฌผ, ๋ง์ง |
|
|
| ๐ **Web3 & ํ์์ํ**
ํ๋ฌผ, ๋ฌด๊ธฐํ, ์ต์
|
|
|
| ๐ฅ **์์
ํธ๋ ์ด๋ฉ**
์นดํผ ํธ๋ ์ด๋ฉ, ์ ๋ฌผ |
|
**๋ํ ์ง์๋จ (Direct/CCXT):**
|
|
|
|
|
|
|:---:|:---:|:---:|:---:|:---:|
---
### ๋ค๊ตญ์ด ์ง์
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`
---
## ๐ค ์ปค๋ฎค๋ํฐ ๋ฐ ์ง์
์ ๋ต ๊ณต์ ๋ฐ ๊ธฐ์ ์ง์์ ์ํด ๊ธ๋ก๋ฒ ์ปค๋ฎค๋ํฐ์ ์ฐธ์ฌํ์ญ์์ค:
- **๐ ๊ธฐ์ฌํ๊ณ ์ถ์ผ์ ๊ฐ์๏ผ**: [๊ธฐ์ฌ์ ํ๋ก๊ทธ๋จ ์ฐธ์ฌ](CONTRIBUTORS.md) - ์ด๊ธฐ ๊ธฐ์ฌ์๋ QDT ๊ฑฐ๋ฒ๋์ค ํ ํฐ์ ๋ฐ์ต๋๋ค๏ผ
- **Telegram (Group)**: [Join QuantDinger Telegram Group](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
```
---
### ์์ฉ ์๋น์ค
QuantDinger๋ฅผ ์ต๋ํ ํ์ฉํ ์ ์๋๋ก ์ ๋ฌธ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค:
| ์๋น์ค | ์ค๋ช
|
|---------|-------------|
| **๋ฐฐํฌ ๋ฐ ์ค์ ** | ์๋ฒ ๋ฐฐํฌ, ๊ตฌ์ฑ ๋ฐ ์ต์ ํ์ ๋ํ ์ผ๋์ผ ์ง์ |
| **๋ง์ถคํ ์ ๋ต ๊ฐ๋ฐ** | ๊ทํ์ ํน์ ์๊ตฌ์ ์์ฅ์ ๋ง์ถ ๊ฑฐ๋ ์ ๋ต ์ค๊ณ |
| **์ํฐํ๋ผ์ด์ฆ ์
๊ทธ๋ ์ด๋** | ์์ฉ ๋ผ์ด์ ์ค, ์ฐ์ ์ง์ ๋ฐ ๋น์ฆ๋์ค๋ฅผ ์ํ ๊ณ ๊ธ ๊ธฐ๋ฅ |
| **๊ต์ก ๋ฐ ์ปจ์คํ
** | ๊ฑฐ๋ ํ์ ์ํ ์ค์ ๊ต์ก ์ธ์
๋ฐ ์ ๋ต ์ปจ์คํ
|
**๊ด์ฌ์ด ์์ผ์ญ๋๊น?** ๋ค์์ ํตํด ๋ฌธ์ํ์ญ์์ค:
- ๐ง 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 ๋ฑ๊ณผ ๊ฐ์ ํ๋ฅญํ ์คํ ์์ค ํ๋ก์ ํธ์ ์ด๊นจ ์์ ์ ์์ต๋๋ค.
๋ชจ๋ ๊ด๋ฆฌ์์ ๊ธฐ์ฌ์์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! โค๏ธ