Centaur_Quant_Architecture/00_CONCEPT/PROJECT_REPORT.md

180 lines
14 KiB
Markdown
Raw Permalink Normal View History

# LAPORAN PROYEK — CENTAUR QUANT ARCHITECTURE
**Periode:** Inception (CENTAUR_CHARTER.md) → v2.8.0 (Multi-Agent Fuzzy Fusion Engine)
**Tanggal laporan:** 2026-08-13 · **Kode sesi:** CHIRON
**Status saat laporan:** 17/17 workstream · build 0E/0W · rilis PUBLISHED di Algo Forge · LLM Gemini LIVE
---
## 1. RINGKASAN EKSEKUTIF
Centaur Quant Architecture adalah sistem trading kuantitatif hybrid tiga-agen:
**Executor (MQL5/SMC)** + **Probability Analyst (LLM)** + **Data Harvest Core (Python+DB)**.
Dari charter yang diratifikasi hingga v2.8.0, proyek berkembang dari fondasi 8 modul MQL5
menjadi sistem lengkap: transport SDP non-blocking, telemetri menyeluruh, LLM live via file bridge,
ops VPS unattended, rilis Algo Forge, dan — terakhir — **mesin keputusan fusi fuzzy multi-agen
dengan bobot tertimbang dinamis**.
Pencapaian utama: LLM Gemini **terbukti live** (skor nyata, fallback=False), integrasi
end-to-end berjalan, backtest teknikal PASS konsisten, dan arsitektur keputusan telah dirombak
dari *single structural confidence* menjadi *konsensus fuzzy 5 agen*.
**Isu paling penting yang masih terbuka:** scanner OB+FVG menghasilkan **0 setup dalam 6 bulan**
backtest — strategi terlalu ketat; fusi fuzzy belum pernah teruji dengan trade nyata.
---
## 2. KRONOLOGI PROYEK
| Tanggal | Sesi / Milestone | Hasil Kunci | Versi/Commit |
|---------|------------------|-------------|--------------|
| (awal) | **CENTAUR_CHARTER.md diratifikasi** | 5 tenet non-negotiable + SDP v1.0 + layout kanonik | v1.0.0 |
| 2026-08-12 | **MQL5 Layer** | 8 modul (Core/Network/Data/Execution) + composition root | v2.0.0 `d7e4a18` |
| 2026-08-12 | **Python Router** | `main.py` — reassembly frame, dispatch, mock→live AI advisory | smoke ✅ |
| 2026-08-12 | **Track A "The Brain"** | `MarketAnalyzer` — prompt SMC, OpenAI/Google, fallback 40.0, timeout 1.5s | smoke ✅ |
| 2026-08-12 | **Track B "The Memory"** | `TelemetryDB` — SQLite thread-safe WAL | 201/201 ✅ |
| 2026-08-12 | **System Finalization** | CHistoryTracker, QA harness 3/3, DDL prod (v_feedback) | 3/3 OK |
| 2026-08-12 | **Riset LLM Integration** | AI Assistant MT5 (Inferdeck) **tidak callable** — 26× `LLMCreate` err, 403; evolusi kanal → file bridge | riset ✅ |
| 2026-08-13 | **LLM LIVE (Gemini)** | Bukti live `score=35.0 fallback=False`; model aktif `gemini-3.1-flash-lite`; silent bugs P1–P4 & S1–S6 diperbaiki | `f200110` `c63bf31` `cbd0d2d` |
| 2026-08-13 | **DRP Resync + Inventory Fix** | 16/16→17/17 (CLLMClient ditemukan di disk) | v2.3.0 |
| 2026-08-13 | **VPS Unattended + Ops** | AutoLogon, `start_centaur_services.bat`, schtasks, env registry | — |
| 2026-08-13 | **SocketSend API Fix + SDP Fix + Live Verify** | `4003` = signature API berubah (buffer_len); `sdp_version` tanpa kutip → JSON invalid; `FileTruncate` tak ada; telemetri TCP mengalir | v2.4.0 |
| 2026-08-13 | **Live Verification Penuh + Resilient Ops** | Log spam 97,2% → throttle 1/10 dtk; journal = DISK (UTF-16); guard koneksi ganda; `clean_old_logs.bat` + Task Scheduler; Algo Forge 21+ commit; **handoff BACKTEST** | v2.5.0 |
| 2026-08-13 | **DRP Resync v2 + Inventory Docs** (CHIRON) | 17/17 terverifikasi; inventori auxiliary files; koreksi §6 16/16→17/17 | v2.6.0 |
| 2026-08-13 | **SMOKE Backtest + Fix Tester-Mode** (CHIRON) | Backtest #1 PASS 4:12 tapi **0 setup/0 trade**; Bug P1 (socket 4014 di tester) & P2 (throttle TimeCurrent) diperbaiki; backtest #2 PASS 4:01.7, log 167 MB→37 baris | v2.7.0 |
| 2026-08-13 | **Multi-Agent Fuzzy Fusion Engine** (CHIRON) | `CFuzzyFusion.mqh` — 5 agen, fuzzy logic, bobot dinamis adaptif, gate threshold; unit test + backtest #3 PASS 4:00.1 | v2.8.0 `79275b1` |
**Evolusi kanal AI (penting untuk dipahami):**
EA→OpenAI langsung → MCP bridge (Rute 2a/2b) → MCP-only single source → **file bridge periodik**
(`ai_request.json``assistant_bridge.py` ⇄ MarketAnalyzer → LLM) — hemat token, sederhana, race-safe.
---
## 3. ARSITEKTUR & PRINSIP INTI
### 3.1 Lima Tenet Non-Negotiable (dari charter)
1. **Centaur System** — Executor + Probability Analyst + Data Harvest Core (yang terakhir = *true core*).
2. **Anti-Veto** — skor AI hanya memengaruhi sizing/manajemen, TIDAK PERNAH memblokir eksekusi.
3. **SDP** — satu envelope JSON; `CSDPEncoder` satu-satunya serializer MQL5; raw JSON dilarang.
4. **Normalisasi Dinamis** — nol buffer per-symbol hardcoded; semua jarak dari `SymbolInfo*()` + ATR runtime.
5. **Non-Blocking** — semua I/O punya timeout eksplisit; OnTimer/OnTick tidak boleh hang.
### 3.2 Skema SDP v1.0
Envelope wajib: `sdp_version`, `timestamp`, `symbol`, `timeframe`, `action_type` (+ `algorithmic_confidence_score`, `payload`).
Aksi: `Heartbeat`, `Tick_Harvest`, `Setup_Detected`, `Trade_Opened`, `Trade_Closed`.
### 3.3 Arsitektur Keputusan v2.8.0 (baru)
```
Scanner OB+FVG (penyedia setup: arah + level)
┌───────────────────────── Multi-Agent Fuzzy Fusion ─────────────────────────┐
│ Agen: Struktur(SMC) · Trend(EMA50/200) · Momentum(RSI14) · Vol(ATR14/50) │
│ · AI(LLM) │
│ Fuzzifikasi (lemah/sedang/kuat) → agregasi BOBOT DINAMIS → defuzzifikasi │
│ centroid → fused 0..100 │
└─────────────────────────────────┬──────────────────────────────────────────┘
fused ≥ InpFuzzyThreshold (55)?
├─ ya → eksekusi (sizing pakai fused; anti-veto)
└─ tidak → setup dilewati (keputusan kolektif)
```
Bobot dinamis diperbarui online dari outcome trade (win/loss via R-multiple): agen akurat
naik bobot, agen salah turun (clamp 0.05–0.60, normalisasi, persistensi file).
---
## 4. TEMUAN-TEMUAN KUNCI
1. **AI Assistant MT5 tidak dapat dipanggil secara programatik**`LLMCreate` error (build 6090), docs 404, Inferdeck 403. Forum: Web API key hanya untuk validasi status akun. → Solusi: file bridge ke MarketAnalyzer (single source of truth).
2. **`SocketSend` signature MQL5 berubah** — parameter ke-3 adalah `buffer_len`, bukan `max_wait_ms`; semua send lama dikirim dengan nilai timeout sebagai panjang buffer → `4003 ERR_INVALID_PARAMETER`. Bukan masalah lingkungan, murni bug call-site.
3. **Journal expert ternyata DISK, bukan memori**`MQL5\logs\YYYYMMDD.log` (UTF-16); 97,2% isinya spam; pertumbuhan 23,8 MB/hari.
4. **Socket dilarang di Strategy Tester**`SocketCreate()``4014 ERR_FUNCTION_NOT_ALLOWED`; retry tiap 5 dtk membanjiri log.
5. **Throttle berbasis `TimeCurrent()` tidak efektif di tester** — waktu simulated melaju cepat → 167 MB log dalam 4 menit.
6. **0 setup dalam 6 bulan (XAUUSD M15)** — kombinasi unmitigated ketat + proksimitas 0,25 ATR + depth 200 + expansion_min 1.2 terlalu konservatif untuk memicu trade.
7. **Kredensial git forge kedaluwarsa + Git Credential Manager rusak** (`credential.helper=manager-core` tanpa binary) → push gagal sampai GCM 2.9.1 diinstall (kredensial ternyata masih tersimpan di Windows Credential Manager).
8. **Sampah disk: 44 GB** di `Tester\logs\20260812.log` — di luar cakupan `clean_old_logs.bat`.
9. **Model Gemini berubah cepat**`2.0-flash` pensiun (404), `2.5-flash-lite` tak tersedia untuk user baru → default aktif `gemini-3.1-flash-lite` ($0.25/$1.50 per 1M; biaya ≈ $0.00005/setup).
10. **Fuzzy fusion matematik valid** — unit test mirror: all-strong=80, all-weak=25.7, konflik=49.2<mixed, netral=50; bobot teradaptasi (struktur/AI naik saat akurat).
---
## 5. KESALAHAN & MITIGASI
| # | Masalah | Akar Penyebab | Dampak | Mitigasi | Status |
|---|---------|---------------|--------|----------|--------|
| 1 | `SocketSend` gagal `4003` | Signature API MQL5: param ke-3 = `buffer_len` | Telemetri TCP mati | `SocketSend(sock, buf, ArraySize(buf))` | ✅ fixed v2.4.0 |
| 2 | SDP frame `Malformed JSON dropped` | `"sdp_version":1.0.0` tanpa kutip | Router buang frame tiap detik | Tambah kutip: `"1.0.0"` | ✅ fixed |
| 3 | Kompilasi gagal `FileTruncate` | Fungsi tidak ada di MQL5 | Fallback file telemetri | Pola `FileClose+FileDelete+reopen` | ✅ fixed |
| 4 | Spam log 97,2% (23,8 MB/hari) | Log "no OB+FVG" tanpa throttle efektif | Disk & journal penuh | Throttle 1 pesan/10 dtk | ✅ fixed |
| 5 | `SocketCreate()` 4014 di tester | Socket dilarang sandbox tester | Log error tiap 5 dtk; telemetri TCP mati | Guard `MQL_TESTER` + fallback file telemetri | ✅ fixed v2.7.0 |
| 6 | Log 167 MB di tester | Throttle pakai `TimeCurrent()` (simulated) | Log membengkak, test melambat | Throttle `GetTickCount64()` (wall-clock) | ✅ fixed v2.7.0 |
| 7 | 0 trade / 6 bulan | Scanner terlalu ketat | Strategi tidak menghasilkan sinyal | **Belum** — kandidat kalibrasi (proksimitas/depth) | ⏳ terbuka |
| 8 | Push forge gagal | GCM tak terinstall; kredensial kedaluwarsa | Kode tak bisa dirilis | Install GCM 2.9.1; helper `manager`; WinCred tersimpan | ✅ fixed |
| 9 | Disk 44 GB | Log tester sesi lama | Kapasitas disk | Perlu hapus manual / perluas `clean_old_logs.bat` ke `Tester\logs` | ⏳ manual |
| 10 | MCP bridge boros token & kompleks | LLM via MCP tiap setup | Biaya & latency | **Di-retire** → file bridge periodik | ✅ solved |
| 11 | `LLMCreate`/Inferdeck 403 | AI Assistant MT5 tidak API-callable | Jalur AI buntu | Kanal: file bridge → MarketAnalyzer (single source) | ✅ solved |
| 12 | Model Gemini 404 | `2.0-flash` pensiun; `2.5-flash-lite` tak tersedia | LLM mati | Default chain → `3.1-flash-lite` | ✅ solved |
| 13 | Race kondisi bridge (P1–P4) | `os.replace` race; log request rusak | Skor salah/id ganda | try/except + retry id sama (RACE_SAFE_OK); timeout 6s < 15s EA | ✅ fixed `f200110` |
| 14 | Silent bugs EA (S1–S6) | Zona basi; pending ganda; request non-atomik | Eksekusi salah/skor salah | `ZoneStillValid`, zona fresh ganti pending, `FileMove` atomik, skor hanya saat sukses, id unik | ✅ fixed `cbd0d2d` |
| 15 | Fallback LLM timeout | Bridge lambat / LLM down | Setup tanpa skor | Fallback **40.0 = quarter-risk** (anti-veto), tetap eksekusi | ✅ desain |
| 16 | Guard koneksi ganda | Internet/broker putus | Entry harga basi / spam retcode | `TERMINAL_CONNECTED` + stale >120s blokir entry; `ManagePositions` skip offline | ✅ fixed |
| 17 | Tooling: edit multi-line CRLF gagal | `replace_text_in_file` normalisasi LF vs file CRLF | Patch tidak cocok | Patch byte-exact via Python; verifikasi pasca-edit | ✅ workaround |
| 18 | Edit tidak sengaja 2× (EnsureConnection) | Anchor `g_sock.Connect` match ganda | Kode redundan (tapi benar) | Verifikasi ulang + format + cleanup | ✅ caught |
| 19 | `ai_response.json` stale | File sisa sesi lama | Skor basi | Id-mismatch menanganinya; hapus bila bersih | ✅ handled |
**Pelajaran umum:** (a) selalulu verifikasi output tiap edit (kompilasi + baca ulang); (b) uji di tester ≠ live — sandbox tester punya batasan sendiri (socket); (c) throttle log harus berbasis wall-clock, bukan simulated time; (d) kredensial & tooling git adalah bagian dari "operasional" yang bisa jadi single-point-of-failure.
---
## 6. PELUANG YANG BISA DI-EXPLORE
### Prioritas Tinggi (P0) — prapersyarat validasi strategi
1. **Kalibrasi scanner OB+FVG** — longgarkan proksimitas (0,25→0,5 ATR) dan/atau depth (200→400), atau relaksasi kriteria unmitigated/expansion → tujuannya memunculkan setup di backtest sehingga **fusi fuzzy benar-benar teruji**.
2. **Verifikasi live v2.8.0 di demo** — attach EA `InpEnableLLM=true`: siklus penuh Setup→FUSION→Open→Close→DB + adaptasi bobot dinamis dari trade nyata.
### Prioritas Menengah (P1)
3. **Perluas `clean_old_logs.bat` ke `Tester\logs`** — hapus otomatis log agent/tester >30 hari (temuan 44 GB).
4. **Kalibrasi `v_feedback`** — regresi skor→R-multiple di Python begitu telemetri berisi (butuh trade nyata/backtest dengan setup).
5. **Persistensi bobot dinamis ke telemetry DB** — ganti file `centaur_weights.txt` dengan tabel di Data Harvest Core (selaras tenet "data = true core").
### Prioritas Lanjutan (P2/P3)
6. **Per-agen score masuk SDP payload** — kirim breakdown 5 agen + bobot di `Setup_Detected`/`Trade_Opened` → data training lebih kaya untuk ML.
7. **Agen konteks multi-timeframe (HTF bias)** — bias arah dari H1/H4 sebagai agen ke-6.
8. **Deploy multi-symbol** — arsitektur sudah instrument-agnostic (charter): XAUUSD + EURUSD + indeks, masing-masing dengan bobot fuzzy terpisah.
9. **Risk dinamis**`InpRiskPercent` statis → sizing adaptif: fraksi risiko ∝ fused score & drawdown berjalan.
10. **Backtest "every tick" (Model=0)** — validasi fill lebih realistis vs OHLC 1 menit.
11. **Upgrade transport ZMQ** (charter §3.1) bila volume telemetri naik.
12. **MQL5 native LLM API** — begitu MetaEditor di-update (jalur AI tanpa bridge).
13. **Optimasi parameter fuzzy** — walk-forward optimization untuk membership/threshold/bobot dasar.
14. **Ensemble LLM** — chain fallback multi-model (Gemini → OpenAI → lokal) untuk skor lebih stabil.
---
## 7. STATUS SAAT INI & HANDOFF BERIKUTNYA
**Status:**
- 17/17 workstream @ 100% · build MQL5 0E/0W · QA Python 3/3 · LLM Gemini LIVE · rilis Algo Forge.
- Commit terakhir: `79275b1` (v2.8.0) — ter-push ke `forge main`.
- Backtest SMOKE: PASS konsisten (4:12 → 4:01.7 → 4:00.1) — stabil secara teknis.
- **Belum ada trade** (0 setup/6 bulan) → telemetry DB masih kosong.
**Handoff sesi berikutnya (prioritas):**
1. Kalibrasi scanner (P0) → backtest ulang sampai muncul setup → uji fusi fuzzy + adaptasi bobot.
2. Verifikasi live demo v2.8.0.
3. Kalibrasi `v_feedback` setelah data telemetri terisi.
4. Disk hygiene: hapus `Tester\logs\20260812.log` (44 GB) + perluas script cleanup.
---
## 8. REFERENSI
- `00_CONCEPT/CENTAUR_CHARTER.md` — charter & 5 tenet (v1.0.0, RATIFIED).
- `00_CONCEPT/BOOTSTRAP.md` — DRP v1.0.0 (protokol resinkronisasi sesi AI).
- `00_CONCEPT/PROGRESS.md` — log progres & telemetri (v2.8.0).
- `MQL5/Include/Models/CFuzzyFusion.mqh` — mesin fusi fuzzy multi-agen (baru).
- `MQL5/Experts/CentaurQuant.mq5` — composition root (alur keputusan v2.8.0).
- `Database/schema.sql` — DDL prod (PostgreSQL, `v_feedback`).
- `Python/*` — router, analyzer (MarketAnalyzer), telemetry.py, assistant_bridge.py, ingest_telemetry.py, publish_forge.py.
*Laporan disusun otomatis oleh MetaTrader Assistant (sesi CHIRON, nonce Qz4m) — data dari PROGRESS.md v2.8.0 + verifikasi langsung di disk & tester.*