Files
GifariKemal e8355b3f62 feat: add 5 dashboard features — dark mode, trade history, backtests, model insights, alerts
- Dark mode: class-based theme toggle with localStorage persistence and flash prevention
- Trade History (/trades): paginated table, stats cards, equity curve chart with DB API endpoints
- Backtest Viewer (/backtests): log parser for 35 backtest results, sidebar + detail + comparison tabs
- Model Insights: dashboard card + dialog showing feature importance, regime distribution, training history
- Alert/Signal Log (/alerts): signal stats, filterable table with execution tracking
- API: 8 new endpoints with psycopg2 DB connection pool
- Dark mode sweep across books page, about dialog, and all dashboard components
- Architecture docs rewritten with Mermaid diagrams (23 docs)
- README and FEATURES.md rewritten bilingual (Indonesian + English)
- main_live.py: write model_metrics.json on startup and retrain

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 05:46:54 +07:00

4.3 KiB

Session Filter — Filter Sesi Perdagangan

File: src/session_filter.py Class: SessionFilter Zona Waktu: WIB (Waktu Indonesia Barat / GMT+7)


Apa Itu Session Filter?

Session Filter mengontrol kapan bot boleh trading berdasarkan sesi pasar global. Setiap sesi memiliki karakteristik volatilitas yang berbeda — bot memilih sesi terbaik untuk memaksimalkan peluang.


Peta Sesi Trading (WIB)

gantt
    title Sesi Trading dalam WIB (GMT+7)
    dateFormat HH:mm
    axisFormat %H:%M

    section Sesi
    Sydney (Low Vol)        :06:00, 13:00
    Tokyo (Medium Vol)      :07:00, 16:00
    London (High Vol)       :15:00, 23:59
    New York (Extreme Vol)  :20:00, 23:59

    section Overlap
    Tokyo-London DIBLOKIR   :crit, 15:00, 16:00
    London-NY GOLDEN        :active, 20:00, 23:59

    section Bahaya
    Dead Zone               :crit, 00:00, 04:00
    Rollover                :crit, 04:00, 06:00

Konfigurasi Sesi (Terkini)

Sesi Jam WIB Volatilitas Trading Lot Multiplier Catatan
Sydney 06:00 - 13:00 Low Ya 0.5x Backtest membuktikan profit $5.934
Tokyo 07:00 - 16:00 Medium Ya 0.7x Volume cukup
Tokyo-London Overlap 15:00 - 16:00 High Tidak 0.0x #24B: Backtest +$345 tanpa sesi ini
London 15:00 - 23:59 High Ya 1.0x Sesi utama Eropa
London-NY Overlap 20:00 - 23:59 Extreme Ya 1.2x Waktu emas — volatilitas tertinggi
New York 20:00 - 23:59 Extreme Ya 1.0x Sesi utama AS
Off Hours Lainnya Low Tidak 0.0x Di luar semua sesi

Zona Bahaya

Zona Jam WIB Alasan Aksi
Dead Zone 00:00 - 04:00 Likuiditas rendah, spread tinggi Blokir trading
Rollover 04:00 - 06:00 Spread sangat lebar saat rollover Blokir trading
Jumat Close Sabtu 04:30+ Mendekati tutup weekend Blokir entry baru
Weekend Sabtu - Minggu Pasar tutup Blokir sepenuhnya

Jam Skip Khusus (#34A)

Selain filter sesi, ada filter waktu tambahan dari optimasi backtest:

# main_live.py — Filter #34A
# Skip jam 9 dan 21 WIB — backtest menambah +$356 profit
wib_hour = datetime.now(ZoneInfo("Asia/Jakarta")).hour
if wib_hour in (9, 21):
    return  # Jam transisi — volatilitas tidak optimal

Cara Kerja

def can_trade(self) -> Tuple[bool, str, float]:
    """
    Returns:
        can_trade: Boleh trading atau tidak
        reason: Alasan dalam bahasa Indonesia
        multiplier: Pengali lot size (0.0 - 1.2)
    """
    # 1. Cek weekend
    if self.is_weekend():
        return False, "Market tutup (weekend)", 0.0

    # 2. Cek Friday close
    if self.is_friday_close():
        return False, "Mendekati penutupan Jumat", 0.0

    # 3. Cek zona bahaya
    if self.is_danger_zone():
        return False, "Zona bahaya: spread melebar", 0.0

    # 4. Cek sesi saat ini
    session, config = self.get_current_session()
    if not config.allow_trading:
        return False, f"Trading tidak diizinkan saat {config.name}", 0.0

    return True, f"Trading OK - {config.name}", config.position_size_multiplier

Pengaruh pada Position Sizing

Session multiplier langsung mengubah ukuran lot:

# main_live.py
safe_lot = smart_risk.calculate_lot_size(...)
safe_lot = max(0.01, safe_lot * session_multiplier)

# Contoh (akun $5.000):
# London-NY Overlap: 0.02 * 1.2 = 0.024 → 0.02 lot (setelah rounding)
# Sydney:           0.02 * 0.5 = 0.010 → 0.01 lot (half size)
# Tokyo:            0.02 * 0.7 = 0.014 → 0.01 lot

Waktu Berita Dampak Tinggi

Bot juga memiliki daftar waktu berita ekonomi penting:

Berita Jam WIB Buffer Sebelum Buffer Setelah
NFP (Non-Farm Payrolls) 19:30 15 menit 30 menit
FOMC (Federal Reserve) 01:00 15 menit 45 menit
CPI (Consumer Price Index) 19:30 15 menit 30 menit

Catatan: News Agent saat ini nonaktif (main_live.py baris 64). Filter berita direncanakan untuk diaktifkan kembali di versi mendatang.