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()
|
|||
|
|
```
|