New documentation files: - 16-MT5-Connector: Broker bridge with auto-reconnect & Polars native - 17-Configuration: 6 sub-configs with capital mode auto-adjustment - 18-Trade-Logger: Dual storage (PostgreSQL + CSV), thread-safe - 19-Position-Manager: 7 action conditions, trailing SL, market close handler - 20-Risk-Engine: Kelly Criterion sizing, circuit breaker, order validation - 21-Database: PostgreSQL integration with 6 repositories - 22-Train-Models: Initial training script (HMM + XGBoost) - 23-Main-Live-Orchestrator: Main loop coordinating 15+ components Updated README.md with complete index of all 23 components. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
165 lines
4.5 KiB
Markdown
165 lines
4.5 KiB
Markdown
# Configuration — Pusat Pengaturan Bot
|
||
|
||
> **File:** `src/config.py`
|
||
> **Class:** `TradingConfig`, `RiskConfig`, `SMCConfig`, `MLConfig`, `ThresholdsConfig`, `RegimeConfig`
|
||
> **Sumber:** Environment variables (`.env`)
|
||
|
||
---
|
||
|
||
## Apa Itu Configuration?
|
||
|
||
Configuration adalah **pusat pengaturan** seluruh parameter bot — dari kredensial MT5 hingga threshold AI. Semua pengaturan otomatis menyesuaikan berdasarkan ukuran modal (small/medium).
|
||
|
||
**Analogi:** Configuration seperti **kokpit pesawat** — semua tombol dan dial pengaturan ada di satu tempat, dan bisa diubah sebelum "terbang" (trading).
|
||
|
||
---
|
||
|
||
## Capital Mode (Otomatis)
|
||
|
||
| Mode | Modal | Risk/Trade | Max Daily Loss | Leverage | Max Lot | Max Posisi | Timeframe |
|
||
|------|-------|-----------|----------------|----------|---------|-----------|-----------|
|
||
| **SMALL** | ≤ $10K | 1% | 3% | 1:100 | 0.05 | 3 | M15 |
|
||
| **MEDIUM** | > $10K | 0.5% | 2% | 1:30 | 2.0 | 5 | H1 |
|
||
|
||
```python
|
||
# Otomatis berdasarkan capital
|
||
if capital <= 10000:
|
||
mode = SMALL # Growth mode
|
||
else:
|
||
mode = MEDIUM # Preservation mode
|
||
```
|
||
|
||
---
|
||
|
||
## 6 Sub-Konfigurasi
|
||
|
||
### 1. RiskConfig
|
||
|
||
```python
|
||
RiskConfig(
|
||
risk_per_trade=1.0, # 1% per trade ($50 dari $5K)
|
||
max_daily_loss=3.0, # 3% max daily loss ($150)
|
||
max_leverage=100, # 1:100
|
||
max_positions=3, # Max 3 posisi bersamaan
|
||
max_lot_size=0.05, # Max 0.05 lot
|
||
min_lot_size=0.01, # Min 0.01 lot
|
||
lot_step=0.01, # Increment 0.01
|
||
)
|
||
```
|
||
|
||
### 2. SMCConfig
|
||
|
||
```python
|
||
SMCConfig(
|
||
swing_length=5, # 5 bar untuk swing detection
|
||
fvg_min_gap_pips=2.0, # Min gap FVG: 2 pips
|
||
ob_lookback=10, # Order block lookback: 10 bar
|
||
bos_close_break=True, # Butuh close break untuk BOS
|
||
)
|
||
```
|
||
|
||
### 3. MLConfig
|
||
|
||
```python
|
||
MLConfig(
|
||
model_path="models/xgboost_model.json",
|
||
confidence_threshold=0.65, # Min confidence untuk entry
|
||
retrain_frequency_days=7, # Retrain setiap 7 hari
|
||
lookback_periods=1000, # Data lookback
|
||
)
|
||
```
|
||
|
||
### 4. ThresholdsConfig
|
||
|
||
```python
|
||
ThresholdsConfig(
|
||
# ML Confidence
|
||
ml_min_confidence=0.65, # Minimum confidence
|
||
ml_entry_confidence=0.70, # Default entry
|
||
ml_high_confidence=0.75, # High confidence
|
||
ml_very_high_confidence=0.80, # Lot multiplier trigger
|
||
|
||
# Risk
|
||
trend_reversal_confidence=0.75, # Trigger reversal close
|
||
protected_mode_threshold=0.80, # Enter protected mode
|
||
|
||
# Profit/Loss (USD)
|
||
min_profit_to_secure=15.0, # Min profit to consider secure
|
||
good_profit_level=25.0, # Good profit
|
||
great_profit_level=40.0, # Take it!
|
||
|
||
# Timing
|
||
trade_cooldown_seconds=300, # 5 menit antar trade
|
||
loop_interval_seconds=30.0, # Main loop interval
|
||
|
||
# Session
|
||
sydney_lot_multiplier=0.5, # Sydney lot reduction
|
||
)
|
||
```
|
||
|
||
### 5. RegimeConfig
|
||
|
||
```python
|
||
RegimeConfig(
|
||
n_regimes=3, # 3 HMM states
|
||
lookback_periods=500, # HMM training lookback
|
||
retrain_frequency=20, # Retrain setiap 20 bar
|
||
)
|
||
```
|
||
|
||
---
|
||
|
||
## Environment Variables (.env)
|
||
|
||
| Variable | Contoh | Wajib | Keterangan |
|
||
|----------|--------|-------|------------|
|
||
| `MT5_LOGIN` | `12345678` | Ya | Akun MT5 |
|
||
| `MT5_PASSWORD` | `p@ssw0rd` | Ya | Password MT5 |
|
||
| `MT5_SERVER` | `BrokerName-Live` | Ya | Server broker |
|
||
| `MT5_PATH` | `C:\...\terminal64.exe` | Tidak | Path MT5 |
|
||
| `CAPITAL` | `5000` | Tidak | Modal ($5000 default) |
|
||
| `SYMBOL` | `XAUUSD` | Tidak | Simbol trading |
|
||
| `RISK_PER_TRADE` | `1.0` | Tidak | Override risk % |
|
||
| `MAX_DAILY_LOSS_PERCENT` | `3.0` | Tidak | Override daily loss |
|
||
| `AI_CONFIDENCE_THRESHOLD` | `0.65` | Tidak | Override ML threshold |
|
||
| `TELEGRAM_BOT_TOKEN` | `123:ABC...` | Tidak | Token Telegram |
|
||
| `TELEGRAM_CHAT_ID` | `-1001234...` | Tidak | Chat ID Telegram |
|
||
| `DB_HOST` | `localhost` | Tidak | PostgreSQL host |
|
||
| `DB_NAME` | `trading_db` | Tidak | Database name |
|
||
|
||
---
|
||
|
||
## Position Sizing (Kelly Criterion)
|
||
|
||
```python
|
||
def calculate_position_size(entry_price, stop_loss_price, balance):
|
||
"""
|
||
Risk-Constrained Kelly Criterion:
|
||
|
||
risk_amount = balance × risk% ($5000 × 1% = $50)
|
||
sl_pips = |entry - SL| / 0.1
|
||
lot = risk_amount / (sl_pips × pip_value)
|
||
lot × 0.5 (Half-Kelly untuk safety)
|
||
|
||
Clamp: min_lot ≤ lot ≤ max_lot
|
||
"""
|
||
```
|
||
|
||
---
|
||
|
||
## Validasi Otomatis
|
||
|
||
```
|
||
Saat TradingConfig dibuat:
|
||
|
|
||
v
|
||
_validate_required_settings():
|
||
├── MT5_LOGIN != 0?
|
||
├── MT5_PASSWORD tidak kosong?
|
||
├── MT5_SERVER tidak kosong?
|
||
└── Capital > 0?
|
||
|
|
||
├── Ada yang gagal → ValueError
|
||
└── Semua OK → _configure_by_capital()
|
||
```
|