Initial commit: Trading Portal - FastAPI + React + PostgreSQL
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user