Initial commit: Trading Portal - FastAPI + React + PostgreSQL

This commit is contained in:
2026-07-03 13:08:09 +00:00
commit 34a1e91541
198 changed files with 35110 additions and 0 deletions
+186
View File
@@ -0,0 +1,186 @@
# 📈 Trading Portal — Kế hoạch Cải Tiến Thuật Toán
## ✅ Giai đoạn 1 (Đã hoàn thành) — Short-term
| Thay đổi | File | Trước | Sau |
|----------|------|-------|-----|
| Stop Loss | signal_service.py | 15% | 8% |
| Take Profit | signal_service.py | 30% | 12% |
| Max Hold | signal_service.py | 72h | 24h |
| Interval check | main.py | 30 phút | 5 phút |
| ATR Cache | signal_service.py | Không cache | Cache 2 phút |
## ✅ Giai đoạn 2 (Đã hoàn thành) — Medium-term
### 🎯 1. ATR-based SL/TP
- **Stop Loss**: ATR% × 1.5 (tối thiểu 4%) — adaptive theo volatility
- **Take Profit**: ATR% × 3.0 (tối thiểu 6%) — adaptive theo volatility
- Với altcoin biến động mạnh, ATR cao → SL/TP rộng hơn
- Với stablecoin, ATR thấp → SL/TP hẹp hơn
### 🎯 2. Partial Take Profit (chốt lời một phần)
- Khi chạm TP lần đầu → **đóng 50%** vị thế
- 50% còn lại → **kích hoạt trailing stop** 5%
- Giúp chốt lời sớm + vẫn giữ được trend
### 🎯 3. Volatility Filter
- Nếu ATR% > 5% → log warning (skip trade quá rủi ro)
- Tránh mở lệnh khi thị trường quá biến động
### 🎯 4. OBV Indicator (thuật toán thứ 9)
- On-Balance Volume: cumulative volume theo hướng giá
- OBV crossover SMA(OBV, 20) → vote ±1
- Giúp xác nhận volume quality
### 🎯 5. Adaptive BB period (kế hoạch)
- Dùng ATR% để điều chỉnh period BB
- Volatility cao → period lớn hơn (ít nhạy)
- Volatility thấp → period nhỏ hơn (nhạy hơn)
---
## 🚀 Giai đoạn 3 (Kế hoạch) — Long-term
### 1. Market Regime Detection — Phát hiện chế độ thị trường
**Mục tiêu:** Tự động phát hiện thị trường đang ở chế độ nào → chọn thuật toán phù hợp.
```python
class MarketRegime(Enum):
TRENDING = "trending" # → SuperTrend, BB, MTF
SIDEWAYS = "sideways" # → Mean reversion, BB squeeze
VOLATILE = "volatile" # → Giảm position size
BREAKOUT = "breakout" # → Volume, Ichimoku
```
**Cách làm:**
- ADX (14) > 25 → trending; ADX < 20 → sideways
- BB width percentile → squeeze detection
- Volume spike + ATR spike → volatile/breakout
### 2. ML-based Signal Fusion (thay voting linear)
**Mục tiêu:** Thay vì cộng điểm đều, dùng ML để học trọng số tối ưu.
**Cách làm:**
```
Input: 9 features (mỗi algorithm vote score + confidence)
Output: BUY / SELL / HOLD (classification)
```
**Model Options:**
| Model | Ưu điểm | Nhược điểm | Phù hợp |
|-------|---------|------------|---------|
| **XGBoost** | Chạy nhanh, feature importance | Cần feature engineering | ✅ Gợi ý |
| **Random Forest** | Robust, ít overfit | Chậm hơn XGBoost | ✅ Gợi ý |
| **Logistic Regression** | Đơn giản, interpretable | Không bắt được non-linear | Có thể |
| **LSTM** | Bắt được sequence | Nặng, cần nhiều data | Nếu có 6+ tháng |
**Triển khai:**
```python
# Backend lưu feature-label pairs mỗi lần trade đóng
features = {
"bb_rsi_score": 2.0,
"macd_score": 1.0,
"supertrend_score": -1.0,
"volume_score": 0.0,
"ichimoku_score": 1.5,
"divergence_score": 0.0,
"smc_score": 1.0,
"mtf_score": 2.0,
"obv_score": 1.0,
"confidence": 0.72,
"atr_pct": 2.3,
"regime": "trending",
}
label = "WIN" if pnl > 0 else "LOSS"
```
### 3. Reinforcement Learning (PPO) cho Position Sizing
**Mục tiêu:** Học policy tối ưu cho:
- Khi nào vào lệnh (dựa trên signal confidence)
- Size bao nhiêu (Kelly Criterion biến thể)
- Khi nào thoát (không chỉ dựa trên SL/TP cứng)
**Cách làm:**
```
State: [features vector + current PnL + open positions]
Action: [ENTER_FULL, ENTER_HALF, HOLD, EXIT_HALF, EXIT_FULL]
Reward: +PnL (hoặc Sharpe ratio)
```
### 4. Portfolio-level Risk Management
**Mục tiêu:** Không chỉ quản lý rủi ro từng lệnh, mà quản lý toàn bộ danh mục.
**Tính năng:**
- **Value-at-Risk (VaR)**: 95% VaR của portfolio
- **Kelly Criterion**: Position size tối ưu theo win rate
- **Correlation filter**: Không mở quá nhiều lệnh cùng chiều trên các coin correlated
- **Max drawdown limit**: Dừng trading nếu drawdown > X%
### 5. Real-time Feature Store (Redis Stream)
**Mục tiêu:** Loại bỏ DB query bottleneck.
**Hiện tại (chậm):**
```python
# Mỗi lần check 2000 trade → 2000 DB queries
await db.execute(select(Candle).where(...).order_by(desc(...)).limit(20))
```
**Tương lai (nhanh):**
```python
# Redis stream: push candle mới, pop cũ
atr = redis_client.get(f"atr:{symbol}:{timeframe}")
```
### 6. Adaptive Parameters per Symbol
**Mục tiêu:** Mỗi symbol có bộ tham số riêng.
**Cách làm:**
```python
SYMBOL_PROFILES = {
"BTC/USDT": {"sl_atr_mult": 2.0, "tp_atr_mult": 4.0, "max_positions": 1},
"SOL/USDT": {"sl_atr_mult": 1.5, "tp_atr_mult": 3.0, "max_positions": 2},
"ZANO/USDT": {"sl_atr_mult": 1.0, "tp_atr_mult": 2.0, "max_positions": 1},
}
```
### 7. Backtesting Engine nâng cao
**Hiện tại:** Chạy paper trading real-time → chậm, không test được nhiều strategy.
**Tương lai:**
- Vectorized backtest với Pandas
- Walk-forward optimization
- Monte Carlo simulation
- Sharpe/Sortino/Calmar ratio reporting
---
## 📊 Timeline Gợi ý
| Giai đoạn | Thời gian | Priority | Impact |
|-----------|-----------|----------|--------|
| 1. Short-term | ✅ Xong | 🔴 Cao | 🟢 Ngay |
| 2. Medium-term | ✅ Xong | 🔴 Cao | 🟢 Ngay |
| 3a. Market Regime | 1-2 ngày | 🟡 Vừa | 🟡 Trung bình |
| 3b. XGBoost Fusion | 3-5 ngày | 🟡 Vừa | 🟢 Cao |
| 3c. Feature Store | 2-3 ngày | 🟢 Thấp | 🟢 Cao (performance) |
| 3d. Portfolio Risk | 3-5 ngày | 🟡 Vừa | 🟢 Cao |
| 3e. Adaptive Params | 2 ngày | 🟢 Thấp | 🟡 Trung bình |
| 3f. Backtest Engine | 5-7 ngày | 🟢 Thấp | 🟢 Cao (R&D) |
---
## 🔄 Liên kết với Hermes
Các cải tiến này có thể được Hermes hỗ trợ:
- **Cron job**: Chạy backtest mỗi đêm, gửi báo cáo qua Telegram
- **Memory**: Lưu win rate từng strategy để tối ưu
- **Subagent**: Phân tích hiệu suất, đề xuất cải tiến
- **Skill**: Tạo skill "trading-review" cho review hàng ngày