TwinScales

Agent TwinScales

Autonomous AI Agent untuk screening saham IDX menggunakan metode Bandarmology. Scraping data broker summary & market movers, scoring otomatis, analisa AI, running trade realtime, dan full Telegram bot untuk monitoring & paper trading swing trading 2-5 hari.

Features

Phase 1 — Screening & AI

Phase 2 — Running Trade Realtime

Phase 3 — Paper Trading

Phase 4 — Realtime Price Monitor

Kondisi Action
+3% s/d +5% 🟢🔜TP — “Siap-siap keputusan”
+5% TP hit Fetch RT → Buyer kuat = 🚀 HOLD/partial | Seller dominan = JUAL
+8% (setelah hold) 🚀 TERBANG — trailing stop, naikkan SL ke +5%
-2% s/d -3% Fetch RT → Seller dominan = ⚠️ cut sebelum -3% | Buyer oke = jangan panik
-3% SL hit Fetch RT → Seller = ⛔ CUT SEKARANG | Buyer = ada support

Phase 5 — Validation & AI Learning

Alur Kerja Harian

🔍 Scan Pagi — 10:00 WIB

1. Tarik market movers dari Stockbit:
   → foreign_buy, top_volume, top_value, top_gainer
   → Gabung jadi satu pool unik

2. Filter ketat:
   → Harga >= Rp 50
   → Value harian >= Rp 3 Miliar (liquid untuk swing exit)
   → Cek market regime: kalau >60% pool merah = flag BEARISH

3. Deep dive broker summary 5 hari per saham:
   → Akumulasi/distribusi bandar (accdist)
   → Foreign net buy streak
   → Broker konsistensi (broker yang sama muncul berhari-hari)
   → Sarang semut (harga sideways ketat, range <2%)
   → Buyer/seller dominance ratio
   → Muncul di berapa mover list sekaligus

4. Scoring 0-100 poin per saham (9 komponen + risk filters)
   → Market cap filter: micro cap <500B = -10pts, small cap tanpa foreign = -8pts
   → Top1 broker distribusi: -6 s/d -18pts
   → Pump detection: +8%=-8, +10%=-15, +15%=-25, +25%=-35pts (SKIP)
   → Cross-session penalty: saham yang muncul antar sesi tapi harga turun

5. RT Confirmation (untuk score >= 65, hanya setelah jam 09:30):
   → Fetch running trade Stockbit
   → Buyer dominan (>60%) = +20 pts ✅ (gate utama entry)
   → Seller dominan (<40%) = -25 pts 🔴 warning
   → Semua RT gagal? → Telegram alert: "Stockbit token expired!"

6. Ranking & filter: hanya yang score >= 50 lolos
   → Top Tier (>=85): detail + entry/TP/SL
   → Mid Tier (65-84): compact + pantau
   → Low Tier (50-64): one liner

7. Kirim ke Telegram (3 pesan terpisah per tier)

8. Volume Anomaly + Smart Money (untuk semua score >= 65):
   → Fetch 1 bulan historis Yahoo Finance → hitung ratio vs avg 20 hari
   → Label: 🔥 SPIKE (≥3x) | 📈 HIGH (≥2x) | Normal | 📉 LOW
   → Deteksi broker institusi asing/lokal di top buyers 5 hari
   → Data ini TIDAK masuk skor — dikirim ke AI sebagai konteks tambahan

9. AI Second Opinion:
   → Top + Mid Tier + volume anomaly + smart money dikirim ke AI
   → AI output: TICKER — Entry: X | TP: Y (+5%) | SL: Z (-3%)
   → Max 5 picks, skip yang seller dominan RT
   → AI bisa gunakan: "Volume spike + UBS masuk + akumulasi = high conviction"

💰 Price Monitor — Tiap 5 Menit (09:00–16:00 WIB)

Tiap 5 menit, cek harga semua top picks + portfolio via Yahoo Finance

Per saham, hitung PnL dari harga screening/avg beli:

  +3% → 5%   🟢 Pre-TP  : siap-siap ambil keputusan
  +5%         🎯 TP HIT  : fetch RT → buyer kuat = hold/partial | seller = jual
  +8%         🚀 Terbang : trailing stop, naikkan SL ke +5%
  -2% → -3%  ⚠️ Pre-SL  : fetch RT → seller dominan = warning cut
  -3%         ⛔ SL HIT  : fetch RT → seller = CUT SEKARANG | buyer = ada support

Anti-spam:
  → Harga tidak berubah >0.5% dari cek sebelumnya = skip Telegram
  → Alert yang sama hanya dikirim 1x per ticker per hari
  → Heartbeat 1x/jam (menit 00-04) meski harga flat

Setiap snapshot disimpan ke price_log.json (30 hari):
  → Untuk analisa pola intraday (/pricelog)
  → Untuk AI learning: kapan sering recovery, kapan lanjut turun

Alert TP/SL untuk posisi portfolio dilengkapi inline buttons:

  Pre-TP (+3% → +5%):
    [ 📊 Partial X lot @ harga ]  [ ✅ Jual semua X lot ]  [ ⏳ Hold dulu ]

  TP Hit (+5%):
    [ ✅ Jual X lot @ harga ]  [ ⏳ Hold dulu ]

  Flying (+8%, sudah hold melewati TP):
    [ 📊 Partial X lot @ harga ]  [ ✅ Jual semua X lot ]  [ ⏳ Hold dulu ]

  Pre-SL (-2% → -3%):
    [ ✅ Cut X lot @ harga ]  [ ⏳ Hold dulu ]

  SL Hit (-3%):
    [ ✅ Cut X lot @ harga ]  [ ⏳ Hold dulu ]

  Tap ✅ → langsung eksekusi paper trade
  Tap ⏳ → agent tetap monitor, tidak kirim alert lagi untuk kondisi ini

🔄 RT Re-check — 13:30 WIB

Setelah istirahat bursa (11:30–13:30), cek ulang sinyal pagi:

→ Ambil top picks dari screening terakhir + semua posisi portfolio
→ Fetch running trade Stockbit per ticker
→ Bandingkan sinyal pagi vs kondisi sekarang:
   - Buyer pagi masih dominan? → hold konfirmasi
   - Balik jadi seller? → warning, pertimbangkan cut
→ Sarang semut detection: broker beli 3x+ dalam satu sesi
→ Kirim summary ke Telegram

🤖 Portfolio Review AI — 15:30 WIB

30 menit sebelum closing, AI review semua posisi:

→ Ambil portfolio + harga sekarang
→ Feed ke AI dengan context history
→ AI output per posisi:
   - ✅ TP — target harga + alasan
   - 🔄 HOLD — alasan kenapa masih worth
   - ❌ CUT LOSS — di harga berapa + alasan
→ Kirim ke Telegram sebagai panduan keputusan closing

📊 Scan Penutupan — 16:30 WIB

Sama persis dengan scan pagi (step 1-8 di atas), dengan konteks:
→ Harga closing hari ini
→ Cross-session context: saham yang muncul di scan pagi juga,
  track perubahan harga (naik konsisten = bonus, turun = penalty)
→ Validasi otomatis: cek harga picks dari scan pagi vs closing
→ Kirim report akurasi: berapa % yang naik dari screening

Hasil scan closing = data base untuk scan esok pagi (cross-session)

🏖 Hari Libur / Weekend — 09:00 WIB

1. Notifikasi: "Bursa tutup hari ini — [nama hari libur]"

2. Weekly Report (Sabtu):
   → Semua saham yang di-pick minggu ini
   → Win rate, avg return, best/worst pick
   → Breakdown RT Confirmation accuracy:
     "Saham RT-confirmed: win rate X% vs tanpa RT: Y%"
   → Konsistensi kings: saham yang muncul 3x+ dan masih naik

3. AI Evaluasi & Game Plan (3 tugas eksplisit):
   → Tugas 1: Evaluasi SETIAP pick — detect pattern (pump trap, foreign reliable, dll)
   → Tugas 2: Portfolio review + game plan Senin (watchlist, yang harus dihindari)
   → Tugas 3: Kalibrasi weights — output JSON bobot baru berdasarkan data
   → Format compact: 1 pick = 1 baris (score, phase, RT, foreign, komponen breakdown)
   → Semua sesi, semua picks score ≥65 dikirim — AI perlu full data untuk cross-session pattern

4. Kalibrasi Weights:
   → AI analisa dan output JSON bobot baru
   → Telegram kirim diff: mana yang naik, turun, baru
   → User review dan apply manual (atau discard)
   → Kalau data belum cukup → AI bilang "DATA BELUM CUKUP", skip

Auto Schedule

Waktu Aksi
10:00 WIB Scan pagi + RT confirmation top picks
09:00-16:00 WIB Price monitor tiap 5 menit
13:30 WIB RT re-check — konfirmasi sinyal pagi masih hold
15:30 WIB AI portfolio review (TP/hold/cut loss)
16:30 WIB Scan closing + validasi picks pagi
09:00 (libur) AI evaluasi + weekly report + kalibrasi weights

Telegram Commands

Screening | Command | Deskripsi | |—|—| | /scan | Manual trigger screening | | /result | Lihat hasil scan terakhir + harga sekarang | | /validation | Cek akurasi picks screening terakhir | | /pricelog [TICKER\|HARI] | Analisa pola harga intraday dari price log |

Paper Trading | Command | Deskripsi | |—|—| | /buy TICKER LOT | Beli saham (harga auto Yahoo Finance + konfirmasi) | | /sell TICKER LOT | Jual saham (harga auto Yahoo Finance + konfirmasi) | | /close TICKER | Close seluruh posisi satu ticker | | /portfolio | Lihat posisi + unrealized P&L realtime | | /history | Riwayat trade + win rate + realized P&L | | /trade TICKER | Lihat running trade realtime satu ticker | | /rtcheck | RT re-check semua top picks + portfolio |

Analisa & Review | Command | Deskripsi | |—|—| | /weekly | Rekap performa mingguan + RT accuracy breakdown | | /review | AI review portfolio (TP/hold/cut loss) | | /note [teks] | Catat manual ke AI history (outcome picks, observasi) |

Screener Settings | Command | Deskripsi | |—|—| | /weights | Lihat bobot scoring screener aktif | | /resetweights | Reset bobot ke nilai default |

AI & Config | Command | Deskripsi | |—|—| | /ai local | Switch ke local AI (middleware) | | /ai anthropic | Switch ke Anthropic API | | /ai model sonnet\|opus\|haiku | Ganti model Anthropic | | /ai status | Lihat AI mode + model aktif | | /ai clear | Reset AI conversation history | | /settoken <jwt> | Update Stockbit JWT token | | /status | Status bot, market, token expiry, jadwal | | /help | Bantuan lengkap + inline buttons |

Tech Stack

Project Structure

Agent-Bandarmology/
├── main.py                  # Entry point, scheduler, price monitor, Telegram handler
├── requirements.txt
├── .env                     # Config (tokens, API keys) — JANGAN di-commit
├── src/
│   ├── screener.py          # Scoring engine bandarmology (baca weights dari file)
│   ├── stockbit_client.py   # Scraping broker summary + running trade client
│   ├── ai_client.py         # AI dual mode + conversation history
│   ├── telegram.py          # Telegram bot + formatting + inline buttons
│   ├── holidays.py          # Kalender libur bursa IDX 2026
│   ├── paper_trading.py     # Paper trading portfolio & history
│   ├── screening_tracker.py # Validation, weekly report, cross-session tracking, AI eval context
│   ├── price_logger.py      # Price snapshot tiap 5 menit, pattern analysis
│   └── yahoo_client.py      # Yahoo Finance: harga, volume anomaly, market cap
└── data/                    # JANGAN di-commit (gitignored)
    ├── ai_history.json      # AI conversation history (max 20 entries)
    ├── ai_config.json       # AI mode & model config
    ├── portfolio.json       # Paper trading positions
    ├── trade_history.json   # Trade history
    ├── cash.json            # Saldo paper trading
    ├── screening_log.json   # Screening results + scores/reasons per saham per sesi
    ├── price_log.json       # Price snapshots tiap 5 menit (30 hari)
    └── weights.json         # Bobot scoring screener (edit langsung, no restart)

Setup

# Clone & setup
git clone <repo-url>
cd Agent-Bandarmology
python -m venv venv
venv\Scripts\activate        # Windows
source venv/bin/activate     # Linux/Mac/Termux

# Install dependencies
pip install -r requirements.txt

# Config
cp .env.example .env
# Edit .env — isi token & API keys

Usage

# Screening sekali (+ AI + Telegram)
python main.py

# Screening tanpa AI
python main.py --no-ai

# Tanpa Telegram
python main.py --no-telegram

# History 10 hari (default 5)
python main.py --days 10

# Full agent — scheduler + price monitor + Telegram commands
python main.py --schedule

Environment Variables

# Stockbit (wajib untuk screening & running trade)
STOCKBIT_TOKEN=<jwt_token>

# AI Config
AI_MODE=local                          # local atau anthropic
AI_CHAT_URL=http://localhost:3000/chat  # Local AI endpoint
LOCAL_AI_API_KEY=<api_key>             # x-api-key untuk local AI
ANTHROPIC_API_KEY=<api_key>            # Untuk mode anthropic

# Telegram
TELEGRAM_BOT_TOKEN=<bot_token>
TELEGRAM_CHAT_ID=<chat_id>

Deployment

Agent berjalan optimal di Termux (Android) — residential IP tidak diblok Stockbit. VPS/datacenter IP biasanya diblok oleh Stockbit (403 error).

# Termux setup
pkg install python git
pip install -r requirements.txt
cp .env.example .env && nano .env

# Run
python main.py --schedule

Metodologi: Bandarmology IS + Data-Driven Calibration

Framework dasar tetap Bandarmology Insinyur Saham — akumulasi/distribusi cycle, sarang semut, broker konsistensi, foreign flow. Yang berubah adalah bobot relatif tiap komponen, dikalibrasi dari data screening real.

Temuan dari 173 picks pertama (akurasi 18%):

Komponen Teori IS Realita Data Aksi
Akumulasi Faktor utama Tanpa foreign = sering trap Bobot turun 25→18
Foreign Flow Pelengkap Paling prediktif — semua top winner punya ini Bobot naik 20→25
Sarang Semut Sinyal kuat Ada di hampir semua pick, tidak diskriminatif Bobot turun 15→5
RT Confirmation Konfirmasi Akurasi ~100% — seller selalu turun, buyer minimal flat Bobot naik 8→20
Broker Consistency Penting Ada di winner DAN loser, tidak membedakan Bobot turun 20→12
Market Cap Tidak dibahas Small cap score 90 = trap (WBSA -41%, ASPR -41%) Penalty baru -10pts
Pump Detection Hati-hati 0/10 saham naik >10% lanjut naik Penalty diperberat

Prinsip: Fondasi bandarmology IS tetap, bobot dioptimasi via data. Framework = Insinyur Saham, execution = AI-calibrated.

Disclaimer

Project ini adalah learning project untuk eksplorasi AI Agent di domain pasar saham. Bukan financial advice. Selalu lakukan riset mandiri sebelum mengambil keputusan investasi. Past performance does not guarantee future results.