💰 Uang siap investasi
Rp
{{ screenerRows.length }} candidates · as of {{ screenerMeta.computed_at }} scanning…
{{ allocError }}
🛒 Daftar belanja saham kamu · dibelanjakan Rp {{ fmt(allocPlan.plan.total_allocated) }} · sisa di dompet Rp {{ fmt(allocPlan.plan.cash_left) }}
{{ p.ticker }} +{{ p.expected_gain_pct }}%
Taruh Rp {{ fmt(p.allocation_idr) }} · {{ p.lots }} lot ({{ p.lots*100 }} lembar)
Beli sekarangRp {{ fmtN(p.entry) }}
Jual kalau untungRp {{ fmtN(p.sell_target) }}
Batas aman 🛡️Rp {{ fmtN(p.stop) }}
Simpan kira-kira{{ p.hold }}
{{ p.reason }}
PLAN {{ allocPlan.plan.rationale }}
✨ Pilihan Guru hari ini saham bagus yang harganya lagi turun — peluang beli di harga diskon
Scanning the IDX universe…
No candidates yet — tap ↻ to scan now (or the cron fills this every 30 min).
# TICKERKode SahamSingkatan nama perusahaan di bursa. Contoh: BBCA = Bank BCA, TLKM = Telkom Indonesia. PERUSAHAAN SEKTOR HARGA HARI INIPerubahan Harga Hari IniNaik/turunnya harga saham dibanding penutupan kemarin. Hijau = naik, merah = turun. TREN 20HRTren 20 HariPerubahan harga dalam 20 hari terakhir. Positif = sedang naik (tren baik), negatif = sedang turun. POSISIPosisi Harga dalam SetahunBar ini menunjukkan posisi harga sekarang vs 52 minggu terakhir. Bar kecil = harga masih rendah (peluang beli bagus!). RSIRSI — Relative Strength IndexAngka 0–100 untuk ukur kondisi saham. Hijau (30–55): zona ideal beli. Merah (>70): sudah terlalu mahal, hati-hati. SKORSkor Pilihan GuruNilai gabungan dari kualitas perusahaan, diskon harga, RSI, dan momentum. Makin tinggi makin menarik untuk dibeli. KUALITASStatus KualitasBERKUALITAS = perusahaan bagus, harga menarik ✓. DISKON = harga lagi turun tapi oke. LEMAH = hindari dulu. AKSI
{{ s.rnk }} {{ s.ticker }} {{ s.company }} {{ s.sector }} {{ fmtN(s.price) }} {{ (s.change_pct??0)>=0?'+':'' }}{{ s.change_pct }}% {{ (s.mom_pct??0)>=0?'+':'' }}{{ s.mom_pct }}%
{{ s.rsi ?? '—' }} {{ Math.round(s.score) }} {{ s.score>=40?'BERKUALITAS':s.score>=27?'DISKON':'LEMAH' }}
PAPER TRADE LOGCatatan Perdagangan SimulasiRekaman percobaan virtual: seolah-olah beli, tapi uang tidak keluar. Berguna untuk menguji apakah strategi Guru berhasil sebelum pakai uang sungguhan. top-5 pilihan screener dicatat otomatis · ditutup setelah 28 hari
{{ paperTrades.stats.total }}
ditutup
{{ (paperTrades.stats.avg_return_pct??0)>=0?'+':'' }}{{ paperTrades.stats.avg_return_pct }}%
avg return
{{ paperTrades.stats.wins && (Number(paperTrades.stats.wins)+Number(paperTrades.stats.losses)) ? Math.round(Number(paperTrades.stats.wins)/(Number(paperTrades.stats.wins)+Number(paperTrades.stats.losses))*100) : 0 }}%
win rate
{{ paperTrades.stats.wins }}W / {{ paperTrades.stats.losses }}L
menang/kalah
POSISI TERBUKASimulasi yang Sedang BerjalanSaham yang sedang "dipegang" dalam simulasi. Akan otomatis ditutup setelah 28 hari dan dihitung hasilnya.
Belum ada — cron auto-log top-5 tiap 30 menit.
SAHAMTGL MASUKHARGA MASUKHARIHari DipegangSudah berapa hari simulasi ini berjalan. Otomatis ditutup di hari ke-28.SKORSkor saat MasukNilai screener waktu saham ini dipilih. Makin tinggi = makin menarik waktu itu.RANK
{{ t.ticker }} {{ t.entry_date }} {{ Number(t.entry_price).toLocaleString('id-ID') }} {{ t.holding_days }}h {{ Math.round(t.entry_score) }} #{{ t.entry_rank }}
RIWAYAT SIMULASIHasil Simulasi yang Sudah DitutupRekap hasil: untung atau rugi setelah 28 hari. Ini menunjukkan seberapa akurat sinyal Guru.
SAHAMTGL MASUKTGL KELUARRETURNHasil (Return)Keuntungan atau kerugian dalam persen. Hijau (+) = untung, merah (-) = rugi.HARI
{{ t.ticker }} {{ t.entry_date }} {{ t.exit_date }} {{ (t.return_pct??0)>=0?'+':'' }}{{ t.return_pct }}% {{ t.holding_days }}h
💼 Total uang kamu
Rp {{ fmt((Number(portfolio.capital)||0) + (holdings && holdings.total_value || 0) - (holdings && holdings.total_cost || 0)) }}
modal Rp {{ fmt(portfolio.capital) }}
📈 Untung berjalan
{{ (holdings && holdings.total_unrealized || 0)>=0?'+':'' }}Rp {{ fmt(Math.abs(holdings && holdings.total_unrealized || 0)) }}
{{ (holdings && holdings.total_unrealized_pct || 0)>=0?'▲':'▼' }} {{ Math.abs(holdings && holdings.total_unrealized_pct || 0) }}% dari modal beli
🛒 Saham kamu
{{ holdings && holdings.count || 0 }} saham
nilai sekarang Rp {{ fmt(holdings && holdings.total_value || 0) }}
🎯 Akurasi Guru
{{ learningStats && learningStats.ai && learningStats.ai.win_rate!=null ? learningStats.ai.win_rate+'%' : '—' }}
{{ learningStats && learningStats.ai ? (learningStats.ai.wins+'/'+(learningStats.ai.wins+learningStats.ai.losses)+' tepat') : 'belum ada data' }}
💰 Investasi kamu tap "Tanya Guru" buat cek kapan jual
🌱
Belum punya saham. Yuk mulai dari pilihan Guru.
{{ h.ticker }}{{ h.sector || '' }}
Rp {{ fmt(h.value) }}
{{ h.lots }} lot · beli Rp {{ fmtN(h.avg_price) }} → kini Rp {{ fmtN(h.price) }}
{{ h.pnl>=0?'▲ +':'▼ -' }}Rp {{ fmt(Math.abs(h.pnl)) }} ({{ h.pnl_pct>=0?'+':'' }}{{ h.pnl_pct }}%)
PORTFOLIO SUMMARY
MODALCapital / ModalTotal uang yang kamu siapkan untuk investasi saham.{{ fmt(portfolio.capital) }}
TOTAL P&LTotal Untung/RugiJumlah keuntungan atau kerugian dari semua transaksi yang sudah ditutup. {{ portfolio.total_pnl >= 0 ? '+' : '' }}{{ fmt(portfolio.total_pnl) }}
P&L %Persentase Untung/RugiHasil investasimu dalam persen. Contoh +5% artinya dari Rp 100 juta, kamu untung Rp 5 juta. {{ portfolio.capital ? ((portfolio.total_pnl/portfolio.capital)*100).toFixed(2) + '%' : '-' }}
TERBUKAPosisi TerbukaJumlah saham yang masih kamu pegang (belum dijual).{{ portfolio.open_trades ?? 0 }}
SELESAITransaksi SelesaiJumlah transaksi yang sudah tuntas (sudah dijual, untung atau rugi sudah terhitung).{{ portfolio.closed_trades ?? 0 }}
MACRO SNAPSHOT WK {{ latestMacro.week_date }}
NO DATA — ADD VIA F3 MACRO
USD/IDRKurs Dolar ke RupiahBerapa Rupiah yang dibutuhkan untuk beli 1 Dollar AS. Naik = Rupiah melemah, bisa pengaruhi harga barang impor dan saham.{{ latestMacro.usd_idr ?? '-' }}
BI RATESuku Bunga Bank IndonesiaBunga acuan resmi dari Bank Indonesia. Naik = tabungan berbunga lebih tinggi, tapi saham bisa tertekan karena biaya pinjam naik.{{ latestMacro.bi_rate != null ? latestMacro.bi_rate + '%' : '-' }}
10Y YIELDBunga Obligasi Pemerintah 10 TahunImbal hasil surat utang negara. Naik = investasi obligasi lebih menarik dari saham, bisa tekan harga saham.{{ latestMacro.bond_yield_10y != null ? latestMacro.bond_yield_10y + '%' : '-' }}
ASINGAliran Dana Investor AsingApakah investor asing sedang beli (+) atau jual (-) saham Indonesia. Hijau (positif) = asing masuk, kabar baik untuk pasar. {{ latestMacro.foreign_flow != null ? (latestMacro.foreign_flow>=0?'+':'') + latestMacro.foreign_flow + 'B' : '-' }}
IHSGIHSG — Indeks Harga Saham GabunganUkuran kesehatan pasar saham Indonesia secara keseluruhan. Naik = pasar sehat, turun = pasar lesu.{{ latestMacro.ihsg_close ?? '-' }}
BATU BARAHarga Batu Bara (USD/ton)Komoditas ekspor utama Indonesia. Harga naik = bagus untuk saham tambang batu bara seperti ITMG, PTBA, ADRO.{{ latestMacro.coal_price ? '$'+latestMacro.coal_price : '-' }}
CPOHarga Minyak Sawit (CPO)Crude Palm Oil — minyak kelapa sawit mentah. Indonesia eksportir terbesar. Naik = bagus untuk saham perkebunan seperti AALI, SIMP.{{ latestMacro.cpo_price ?? '-' }}
NIKELHarga Nikel (USD/ton)Indonesia cadangan nikel terbesar dunia. Penting untuk baterai EV (mobil listrik). Naik = bagus untuk saham nikel seperti INCO, TINS.{{ latestMacro.nickel_price ? '$'+latestMacro.nickel_price : '-' }}
MINYAKHarga Minyak Brent (USD/barrel)Patokan harga minyak dunia. Naik = biaya energi naik, pengaruhi banyak sektor industri.{{ latestMacro.oil_price ? '$'+latestMacro.oil_price : '-' }}
RECENT TRADES
NO TRADES — ADD VIA F2 JOURNAL
TGLSAHAMDIRArah TransaksiBUY = beli saham. SELL = jual saham.ENTRYHarga BeliHarga per lembar saham waktu kamu beli.LOTLotSatuan beli saham di Indonesia. 1 lot = 100 lembar saham.EXITHarga JualHarga per lembar saham waktu kamu jual. Kosong jika masih dipegang.P&LProfit & Loss (Untung/Rugi)Hasil dari transaksi ini. Hijau = untung, merah = rugi.STATUS
{{ t.trade_date }} {{ t.ticker }} {{ t.direction }} {{ fmtN(t.entry_price) }} {{ t.entry_lots }} {{ t.exit_price ? fmtN(t.exit_price) : '-' }} {{ t.pnl != null ? (t.pnl>=0?'+':'') + fmt(t.pnl) : '-' }} {{ t.status.toUpperCase() }}
IDX RISK LIMITS REFERENCE §17.2
RISK ITEMCONSERVATIVE RULE
RISK PER TRADE0.5% – 1.0% OF PORTFOLIO
MAX SINGLE STOCK (LIQUID)5% – 10% OF PORTFOLIO
MAX SECTOR EXPOSURE20% – 30%
MAX ILLIQUID EXPOSURE10% – 15% TOTAL
MAX DAILY LOSSSTOP TRADING AFTER 1.5%–2.0% DRAWDOWN
MAX MONTHLY LOSSREDUCE SIZE AFTER 5% DRAWDOWN
FREE FLOAT MIN (2026)15% — PHASED OVER 1–3 YRS (UP FROM 7.5%)
IHSG — MARKET OVERVIEW {{ ihsgLast.toLocaleString() }} {{ (ihsgChg>=0?'+':'')+ihsgChg }}% · 90D
Loading IHSG composite…
AI SELF-LEARNING — TRACK RECORD scores its own calls · learns from your wins
{{ learningStats.ai.total }}
AI CALLS
{{ learningStats.ai.wins }}
WINS
{{ learningStats.ai.losses }}
LOSSES
{{ learningStats.ai.win_rate != null ? learningStats.ai.win_rate+'%' : '—' }}
WIN RATE
{{ learningStats.ai.pending }}
PENDING
{{ learningStats.ai.avg_pct != null ? learningStats.ai.avg_pct+'%' : '—' }}
AVG/CALL
YOUR EDGE: {{ e.strategy }} {{ (e.pnl??0)>=0?'+':'' }}{{ fmt(e.pnl) }} ({{ e.wins }}/{{ e.n }})
No AI calls tracked yet. Use Ask AI — every recommendation is logged, then auto-scored against real price (target vs stop). The engine recalls past wins/losses on future calls.
P&L EQUITY CURVE {{ trades.length }} TRADES TOTAL {{ (portfolio.total_pnl??0)>=0?'+':'' }}{{ fmt(portfolio.total_pnl??0) }} IDR
NO TRADE DATA — ADD VIA F2 JOURNAL
WIN RATE
NO CLOSED TRADES
■ WIN {{ trades.filter(t=>t.status==='closed'&&(t.pnl??0)>0).length }} ■ LOSS {{ trades.filter(t=>t.status==='closed'&&(t.pnl??0)<=0).length }} ■ OPEN {{ trades.filter(t=>t.status==='open').length }}
SECTOR EXPOSURE
NO OPEN POSITIONS
MACRO TREND LAST {{ Math.min(macroData.length,12) }} WEEKS
NO MACRO DATA — ADD VIA F3 MACRO
■ IHSG ■ USD/IDR (÷100) ■ FOREIGN FLOW
{{ filteredTrades.length }} RECORDS
NO RECORDS FOUND
TGLSAHAMSEKTOR STRATStrategiCara masuk ke saham ini. Contoh: pullback (beli saat harga turun), breakout (beli saat harga tembus level), dll. DIRArahBUY = beli saham. SELL = jual saham. ENTRYHarga BeliHarga per lembar saham waktu masuk transaksi. LOTLotSatuan beli di Indonesia. 1 lot = 100 lembar saham. Beli 2 lot = 200 lembar saham. STOPStop LossHarga batas merah. Kalau harga turun ke sini, jual sahammu untuk batasi kerugian. Disiplin di sini kunci sukses investasi! TARGETTarget HargaHarga yang ingin dicapai. Kalau harga naik ke sini, pertimbangkan jual untuk ambil keuntungan. EXITHarga JualHarga aktual waktu kamu jual. Kosong = masih dipegang. P&LUntung/RugiHasil akhir transaksi ini dalam Rupiah. STATUS FF%Free Float %Persen saham yang bebas diperdagangkan publik. Di bawah 15% = risiko harga mudah dimanipulasi. Aturan BEI 2026: minimal 15%. CHKCek Tanda BahayaApakah kamu sudah cek hal-hal berisiko sebelum beli (laporan keuangan, berita negatif, dll). OK = sudah dicek. AKSI
{{ t.trade_date }} {{ t.ticker }} {{ t.sector ? t.sector.toUpperCase() : '-' }} {{ (t.strategy||'').toUpperCase() }} {{ t.direction }} {{ fmtN(t.entry_price) }} {{ t.entry_lots }} {{ t.stop_price ? fmtN(t.stop_price) : '-' }} {{ t.target_price ? fmtN(t.target_price) : '-' }} {{ t.exit_price ? fmtN(t.exit_price) : '-' }} {{ t.pnl != null ? (t.pnl>=0?'+':'') + fmt(t.pnl) : '-' }} {{ (t.status||'').toUpperCase() }} {{ t.free_float != null ? t.free_float + '%' : '-' }} {{ t.red_flags_checked ? 'OK' : 'NO' }}
MACRO TRACKER — LAST {{ macroData.length }} WEEKS
MACRO WEEKLY ENTRY
NO MACRO DATA — ADD A WEEK ABOVE
WEEKUSD/IDRBI%INFL% 10Y%FOREIGN(B)IHSG COALCPONICKELBRENTNOTESDEL
{{ m.week_date }} {{ m.usd_idr ?? '-' }} {{ m.bi_rate ?? '-' }} {{ m.inflation ?? '-' }} {{ m.bond_yield_10y ?? '-' }} {{ m.foreign_flow != null ? (m.foreign_flow>=0?'+':'') + m.foreign_flow : '-' }} {{ m.ihsg_close ?? '-' }} {{ m.coal_price ?? '-' }} {{ m.cpo_price ?? '-' }} {{ m.nickel_price ?? '-' }} {{ m.oil_price ?? '-' }} {{ m.notes || '-' }}
{{ filteredWatch.length }} STOCKS Signals: {{ scanLastRun }}
NO STOCKS — ADD VIA BUTTON ABOVE
SAHAMPERUSAHAANSEKTOR IDXIndeks BursaLQ45 = 45 saham paling aktif. IDX30 = 30 saham terkuat. IDX80 = 80 perusahaan terbesar. UMA = harga bergerak tidak wajar, BEI sedang awasi. MON = dalam pengawasan khusus BEI. HARGATREN 30HGrafik Tren 30 HariMini grafik pergerakan harga 30 hari terakhir. Naik ke kanan = tren positif. FF%Free Float %Persen saham yang bebas diperdagangkan publik. Di bawah 15% = risiko harga mudah dimanipulasi pemilik besar. KONDISIRegime / Kondisi PasarStatus tren saham ini: BULL/GREEN = sedang naik, BEAR/RED = sedang turun, SIDEWAYS = datar tidak kemana-mana. MOMENTUMKekuatan TrenSeberapa kuat dan konsisten arah gerak harga. STRONG BUY = sinyal beli kuat, STRONG SELL = sinyal jual kuat. NET×Pengali Posisi BersihSkor gabungan semua sinyal dalam satu angka. Di atas 1× = sinyal beli lebih kuat. Di bawah 0.5× = sinyal jual lebih kuat. DIVIDEN 💰Tanggal Ex-DividenTanggal batas untuk berhak dapat dividen (bagi hasil keuntungan). Harus punya saham sebelum tanggal ini. ALARMAlarm HargaTarget harga (🎯) dan stop loss (🚨) yang sudah kamu set. Bot akan kirim notifikasi kalau harga tercapai. PEPrice to Earnings (P/E)Harga saham dibagi laba per saham. Contoh PE 15x = investor bayar 15x lipat laba tahunan. Makin kecil = makin murah. Ideal: 10–20x. PBPrice to Book (P/B)Harga saham dibagi nilai aset bersih perusahaan. Di bawah 1 = harga saham lebih murah dari total aset perusahaan! ROE%Return on EquitySeberapa efisien perusahaan menghasilkan untung dari modal sendiri. Makin tinggi makin bagus. Di atas 15% = perusahaan sehat. DIV%Dividend YieldPersen dividen dari harga saham. Contoh DIV% 5% + harga Rp 1.000 = dapat Rp 50/lembar/tahun. Cocok untuk investasi pasif. RISIKOTanda Bahaya (Red Flags)Jumlah hal berisiko yang ditemukan pada saham ini. Makin banyak = makin hati-hati. Klik EDT untuk lihat detailnya. CATATANAKSI
{{ s.ticker }} {{ s.company_name || '-' }} {{ s.sector ? s.sector.split('/')[0].toUpperCase() : '-' }} LQ45 IDX30 IDX80 UMA MON {{ s.last_price ? fmtN(s.last_price) : '-' }} {{ s.free_float != null ? s.free_float + '%' : '-' }} {{ watchSignals[s.ticker].regime || '—' }} {{ watchSignals[s.ticker].momentum || '—' }} {{ watchSignals[s.ticker].net_mult }}× {{ watchSignals[s.ticker].div_ex_date }} · IDR {{ watchSignals[s.ticker].div_amount }} 🎯 {{ fmt(s.target_price) }} 🚨 {{ fmt(s.stop_price) }} {{ s.pe_ratio ?? '-' }} {{ s.pb_ratio ?? '-' }} {{ s.roe ?? '-' }} {{ s.div_yield != null ? s.div_yield + '%' : '-' }} ⚠ {{ s.red_flags.length }} {{ s.thesis || '-' }}
🧮 KALKULATOR BELI SAHAM Berapa lot yang aman?

Masukkan angka-angka di bawah — kalkulator otomatis hitung berapa lot yang bisa kamu beli tanpa ambil risiko terlalu besar.

Total uang yang kamu siapkan untuk investasi. Ini jadi dasar semua perhitungan.

Rekomendasi: 0.5–1%. Jangan lebih dari 2% — investor berpengalaman pun pakai aturan ini.

Biasanya 5–10%. Lihat grafik saham — taruh di bawah support terdekat.

Harga 1 lembar saham yang mau kamu beli sekarang.

Opsional. Isi kalau mau cek apakah posisimu terlalu besar untuk saham ini.

Opsional. Lihat di broker kamu — biasanya tertulis "volume" atau "nilai transaksi".

📐 Rumus: TOTAL BELI = (Modal × Batas Rugi%) ÷ Jarak Stop%

Contoh: Modal Rp 10 juta, rugi maks 1%, stop 8% → beli Rp 1.250.000 = 12 lot saham Rp 1.000

✅ HASIL PERHITUNGAN
Maks. Rugi DiizinkanMaksimal Rugi yang DiizinkanIni angka sakral — jangan pernah dilampaui! Kalau harga saham turun ke level stop, total kerugianmu tidak akan melebihi angka ini. {{ fmt(calcResults.riskAmount) }}
Total Uang DibelanjakanTotal Posisi BeliBerapa Rupiah total yang kamu keluarkan untuk beli saham ini. Ingat: 1 lot = 100 lembar, jadi kalikan harga × 100 × jumlah lot. {{ fmt(calcResults.positionSize) }}
Jumlah Lembar {{ calcResults.shares.toLocaleString() }} lembar
🛒 Jumlah Lot (BELI INI) {{ calcResults.lots.toLocaleString() }} LOT
Harga Stop LossHarga Jual PaksaKalau harga turun ke angka ini, JUAL segera. Jangan tunggu. Ini yang melindungi modalmu dari kerugian besar. Rp {{ fmtN(calcResults.stopPrice) }}
Batas Likuiditas {{ fmt(calcResults.liquidityMax) }}
Maks Lot (Likuiditas) {{ calcResults.liquidityLots }} LOT
⚠ Posisi terlalu besar untuk volume harian saham ini — kurangi ke {{ calcResults.liquidityLots }} LOT agar mudah dijual
📋 Ringkasan order:
Beli {{ calcResults.lots }} lot saham di harga Rp {{ fmtN(calc.entryPrice) }}
Pasang stop loss di Rp {{ fmtN(calcResults.stopPrice) }}
Maksimal rugi: {{ fmt(calcResults.riskAmount) }}
🚪 KAPAN HARUS JUAL? — 5 JENIS STOP

Stop loss bukan berarti gagal — ini alat pelindung modal. Investor hebat pun pakai ini tiap hari.

1. STOP HARGA
Harga saham turun ke batas stop yang sudah kamu tentukan → jual segera, jangan tunggu.
Contoh: pasang stop di Rp 920, harga turun ke Rp 920 → jual.
2. STOP CERITA
Ada berita besar yang mengubah kondisi perusahaan: ganti direksi mendadak, kasus hukum, kinerja anjlok → jual walau belum rugi.
Alasan beli sudah tidak berlaku → tidak ada gunanya terus pegang.
3. STOP WAKTU
Sudah lama pegang tapi harga diam saja, tidak naik → pindahkan ke saham yang lebih aktif bergerak.
Uang yang terkunci = peluang yang hilang.
4. STOP LIKUIDITAS
Volume jual-beli saham ini mendadak sepi, susah dijual → keluar sebelum makin terjebak.
Saham sepi = risiko harga jatuh tanpa ada yang mau beli.
5. STOP TATA KELOLA
Muncul tanda manajemen tidak jujur, laporan keuangan mencurigakan, atau pemilik tiba-tiba jual besar-besaran → jual sebelum terlambat.
Perusahaan yang tidak bisa dipercaya tidak layak disimpan seberapapun murahnya.
{{ g.firm }} {{ g.aum }}
{{ g.name }}
"{{ g.tagline }}"
STYLE{{ g.style }}
EDGE{{ g.edge }}
CONC.{{ g.concentration }}
RISK{{ g.risk }}
LESSON ▶ {{ g.lesson }}
ACTIONABLE CHECKLIST — PROCESS TO COPY
#PRACTICEWHAT BIG FIRMS DORETAIL VERSION
{{ i+1 }} {{ c.practice }} {{ c.firms }} {{ c.retail }}
PORTFOLIO
OPENROUTER AI — API KEY
GET KEY: openrouter.ai/keys — KEY NEVER SENT TO BROWSER AFTER SAVE | CURRENT: {{ settingsMaskedKey }}
✓ SAVED
TELEGRAM (@PyTradBot) — DUA ARAH
Pilih apa yang boleh lewat Telegram, dan kasih instruksi khusus buat botnya.
{{ (tgInstruction||'').length }}/600 — diikutkan ke setiap jawaban bot.
✓ TERSIMPAN
API ENDPOINTS — ACTIVE
PORTFOLIOapi/portfolio.phpLIVE
TRADESapi/trades.phpLIVE
MACROapi/macro.phpLIVE
WATCHLISTapi/watchlist.phpLIVE
AI PROXYapi/ai.phpLIVE
SETTINGSapi/settings_api.phpLIVE
INTEGRATION MATRIX — PLUG-IN ROADMAP
LAYER ENDPOINT STATUS PLUG IN
LIVE PRICESapi/market_data.php● LIVEYahoo Finance v8 (~15min delay)
FUNDAMENTALSapi/fundamentals_lib.php● LIVEYahoo quoteSummary — PE/PB/ROE + analyst consensus
NEWS FEEDapi/news.php● LIVENewsAPI + Google News RSS
SENTIMENTapi/sentiment.php● LIVEFinBERT (HuggingFace) primary · OpenRouter fallback
PRICE ALERTSapi/alerts.php● LIVETelegram bot (cron push, market hours)
VECTOR DBapi/qdrant.php● LIVEQdrant Cloud (1536-dim)
ORDER JOURNALapi/orders.php◐ MANUALSaves AI picks you acted on; execute in your own broker
● LIVE = working in production · ◐ MANUAL = by design (no IDX API) · ○ STUB = optional, not wired · N/A = not needed
DB TABLES
portfoliosCapital + currency config● LIVE
tradesJournal + auto P&L● LIVE
macro_dataWeekly IDX macro snapshot● LIVE
watchlistStock radar + auto fundamentals● LIVE
app_settingsAPI keys + model config● LIVE
ordersAI picks you acted on (journal)● LIVE
ai_recommendationsEvery AI call → scored by learning loop● LIVE
screener_resultsBuy-Now ranking cache (cron)● LIVE
watchlist_alertsAlert events → Telegram push● LIVE
news_itemsNewsAPI + Google cache + sentiment● LIVE
login_attemptsBrute-force lockout ledger● LIVE
alertsUser alert rules (awaiting rules)◐ READY
sentiment_logSentiment snapshots (awaiting data)◐ READY
RUN: database/schema.sql (fresh install) | database/migrate.sql (existing DB, safe to re-run)
1 INPUT
2 ANALYZE
3 DECIDE
4 EXECUTE
What stock do you want to check?
Getting live price...
{{ flowLivePrice.ticker }} IDR {{ flowLivePrice.last_price?.toLocaleString() }} {{ (flowLivePrice.change_pct??0) >= 0 ? '+' : '' }}{{ flowLivePrice.change_pct }}% today High {{ flowLivePrice.high?.toLocaleString() }} · Low {{ flowLivePrice.low?.toLocaleString() }}
{{ flowLivePrice.ticker }} · PRICE — LAST {{ flowHistory.length }} DAYS candles · ~15min delayed
{{ flowError }}
AUTO-FETCHED CONTEXT ● FETCHING...
PRICE IDR {{ flowLivePrice.last_price?.toLocaleString() }} {{ (flowLivePrice.change_pct??0)>=0?'+':'' }}{{ flowLivePrice.change_pct }}% · VOL {{ flowLivePrice.volume_b }}B TYPE TICKER → AUTO-FETCHES
PORTFOLIO IDR {{ fmt(portfolio.capital) }} · {{ portfolio.open_trades }} open trades
MACRO USD/IDR {{ latestMacro.usd_idr?.toLocaleString() }} · BI {{ latestMacro.bi_rate }}% · IHSG {{ latestMacro.ihsg_close?.toLocaleString() }} None — add via F3 MACRO
SENTIMENT {{ sentiment?.label?.replace('_',' ')?.toUpperCase() || 'N/A' }} · F/G {{ sentiment.fear_greed }}/100
LIVE NEWS ({{ flowLiveNews.length }} headlines)
{{ n.title }}
Analyzing {{ flowTicker }}...
Checking live price, news & market conditions
6 expert AI models are debating right now
This takes 20–40 seconds
{{ flowResult.action==='BUY'?'✅':flowResult.action==='SELL'?'📤':flowResult.action==='AVOID'?'⛔':'⏸' }}
{{ flowResult.action==='BUY'?'Good time to buy':flowResult.action==='SELL'?'Time to sell':flowResult.action==='AVOID'?'Skip this stock':'Wait and watch' }}
{{ flowResult.ticker }}
{{ flowResult.confidence==='HIGH'?'● High confidence':flowResult.confidence==='LOW'?'● Low confidence':'● Medium confidence' }} · {{ flowResult.timeframe }}
1
{{ flowResult.action==='BUY'?'Buy':'Sell' }} {{ (flowResult.lots||0)*100 }} shares at IDR {{ flowResult.entry_price?.toLocaleString()??'—' }} ({{ flowResult.entry_type==='LIMIT'?'set a limit order at this price':'market order' }})
2
Cut loss if price falls to IDR {{ flowResult.stop_loss?.toLocaleString()??'—' }} — sell immediately, no waiting
3
Take profit at IDR {{ flowResult.target_price?.toLocaleString()??'—' }} — sell when price reaches here
💰
Money needed: IDR {{ flowResult.position_idr?(flowResult.position_idr/1e6).toFixed(1)+'M':'—' }}  ·  Max loss: IDR {{ flowResult.risk_idr?(flowResult.risk_idr/1e6).toFixed(2)+'M':'—' }} ({{ flowResult.risk_pct??'—' }}%)
⛔ AI says skip this stock right now — conditions are not right. ⏸ AI says wait — hold off on buying or selling for now.
Why the AI recommends this:
{{ flowResult.reasoning || flowResult.catalyst || '—' }}
⚠ When to change your mind: {{ flowResult.exit_rule }}
👥 {{ Math.round(flowResult.guru_agree*6) }}/6 Guru setuju — panel terbelah, hati-hati
⚠ Risiko utama: {{ flowResult.bear_case }}
🔄 Batal jika: {{ flowResult.invalidation }}
📋 Dasar analisa data {{ flowResult.provenance.present }}/{{ flowResult.provenance.total }} lengkap ({{ flowResult.data_quality }}%)
⚠ {{ flowResult.data_warning }}
Harga{{ flowResult.provenance.price_as_of ? ('per ' + flowResult.provenance.price_as_of + ' · delay ~' + flowResult.provenance.price_delay_min + ' menit') : 'tidak ada' }}
Suasana pasar{{ flowResult.provenance.signals.regime || '—' }} (VIX {{ flowResult.provenance.signals.vix }})
Aliran asing{{ flowResult.provenance.signals.foreign_flow }}
Peringkat sektor{{ flowResult.provenance.signals.sector_rank || '—' }}
Berita yang dipakai ({{ flowResult.provenance.news_used.length }}):
• {{ h }}
Belum ada: {{ flowResult.provenance.missing.join(', ') }} — lengkapi untuk analisa lebih kuat.
LOTS
{{ flowResult.lots ?? '—' }}
× 100 SHARES
ENTRY ({{ flowResult.entry_type }})
{{ flowResult.entry_price ? flowResult.entry_price.toLocaleString() : '—' }}
IDR
STOP LOSS
{{ flowResult.stop_loss ? flowResult.stop_loss.toLocaleString() : '—' }}
IDR
TARGET
{{ flowResult.target_price ? flowResult.target_price.toLocaleString() : '—' }}
IDR
POSITIONIDR {{ flowResult.position_idr ? (flowResult.position_idr/1e6).toFixed(1)+'M' : '—' }}
RISKIDR {{ flowResult.risk_idr ? (flowResult.risk_idr/1e6).toFixed(2)+'M' : '—' }}({{ flowResult.risk_pct ?? '—' }}%)
R/R RATIO{{ flowResult.reward_risk ? flowResult.reward_risk+'×' : '—' }}
TIMEFRAME{{ flowResult.timeframe || '—' }}
ALGO SIGNALS
VOLATILITY REGIME
{{ flowResult.signals.regime?.signal || '—' }}
VIX {{ flowResult.signals.regime.vix?.toFixed(1) }} · SIZE {{ Math.round(flowResult.signals.regime.size_multiplier*100) }}%
FOREIGN FLOW
{{ (flowResult.signals.flow?.signal||'—').replace('_',' ') }}
{{ flowResult.signals.flow.total_flow_t >= 0 ? '+' : '' }}{{ flowResult.signals.flow.total_flow_t }}T IDR · {{ flowResult.signals.flow.consecutive }}W
EARNINGS
-{{ Math.abs(flowResult.signals.earnings.days_away) }}D AGO IN {{ flowResult.signals.earnings.days_away }}D
CLEAR
{{ flowResult.signals.earnings.date }}
SECTOR RANK
#{{ flowResult.signals.momentum.rank }}/{{ flowResult.signals.momentum.total }}
N/A
{{ flowResult.signals.momentum.sector }} · {{ flowResult.signals.momentum.above_50dma?'▲':'▼' }}50D {{ flowResult.signals.momentum.above_200dma?'▲':'▼' }}200D
NET CONSTRAINT {{ flowResult.signals.composite.net_size_multiplier }}× {{ flowResult.signals.composite.conviction }}
{{ v.split(':')[0] }} {{ c.split('→')[0].trim().substring(0,30) }} {{ b.split('(')[0].trim() }} {{ p.split('(')[0].trim() }}
CATALYST
{{ flowResult.catalyst || '—' }}
FULL AI ANALYSIS
{{ flowResult.raw_analysis }}
PORTFOLIO WATCHLIST MACRO SENTIMENT {{ flowResult.context_used.news }} NEWS {{ flowResult.guru.toUpperCase() }} {{ flowResult.model }}
✅ Order saved — ID: {{ flowOrderResult.id }}
{{ flowOrderResult.note || 'Connect your broker in Settings to place live orders.' }}
{{ flowOrderResult.error }}
Saves a draft order. Live execution needs a broker connected in Settings.
Your AI Stock Advisor
Type any Indonesian stock code on the left
and get a clear recommendation with step-by-step instructions.
1. Type a stock code (e.g. BBCA, BBRI, TLKM)
2. Live price & news auto-fetched for you
3. Add notes, or leave blank
4. Click "Get AI Recommendation"
5. Follow the plain-language steps shown
Powered by 6 expert AI frameworks · 4 market signals · Live market data
STOCK ANALYSIS INPUT
{{ currentGuruDef.name }} — KEY CRITERIA
{{ i+1 }} {{ c }}
GRIFFINFactor exposure · data validation · probability-weighted R/R
HOHNDurable moat · FCF quality · 8-year thesis · governance
D.E.SHAWTestable thesis · quant signals · statistical edge
ENGLANDERPre-define loss limit · exit triggers · pod risk budget
CITRONEMacro regime · best instrument · IDR/USD · short hedge
RESNICKSecular vs cyclical · value compounding · sector depth
↳ All 6 debate → panel votes → ONE consensus recommendation
QUICK REFERENCE — IDX §17.2 RISK LIMITS
RISK/TRADE0.5 – 1.0% PORTFOLIO
MAX STOCK5 – 10% (LIQUID)
MAX SECTOR20 – 30%
DAILY STOPSTOP @ 1.5 – 2.0% LOSS
MONTHLY STOPREDUCE SIZE @ 5% LOSS
FREE FLOATMIN 15% (2026 REFORM)
1 LOT100 SHARES
SETTLEMENTT+2
EXAMPLE QUESTIONS
▶ {{ q }}
AI TERMINAL {{ aiModel }} NO MODEL — SET KEY IN F8 SETUP
TradBot AI
⬡ ROUNDTABLE MODE ACTIVE — 6 GURUS DEBATE, 1 WINNER
GRIFFIN · HOHN · D.E.SHAW · ENGLANDER · CITRONE · RESNICK

ENTER TICKER + STOCK DATA → ANALYZE → GET CONSENSUS CALL
OR PICK INDIVIDUAL GURU FOR SINGLE-FRAMEWORK DEEP DIVE
OR SWITCH TO FREE CHAT FOR IDX TRADING QUESTIONS

SET OPENROUTER API KEY IN F10 SETUP TO ACTIVATE.
{{ msg.role==='user' ? 'YOU' : (msg.guru || 'AI') }} >> {{ msg.time }}
{{ currentGuruDef?.short || 'AI' }} >>
▋ PROCESSING...
MARKET SENTIMENT {{ sentiment?.label?.replace('_',' ')?.toUpperCase() || 'LOADING...' }}
FEAR/GREED {{ sentiment?.fear_greed != null ? sentiment.fear_greed : '—' }}
NEWS SIGNAL {{ sentiment?.components?.news_score != null ? (sentiment.components.news_score > 0 ? '+' : '') + (sentiment.components.news_score * 100).toFixed(0) + '%' : '—' }}
FOREIGN FLOW {{ sentiment?.components?.flow_score != null ? (sentiment.components.flow_score > 0 ? 'NET BUY' : 'NET SELL') : '—' }}
BULLISH {{ sentiment?.news_breakdown?.bullish || 0 }}
BEARISH {{ sentiment?.news_breakdown?.bearish || 0 }}
FILTER
{{ filteredNews.length }} ITEMS
NO NEWS CACHED. CLICK "FETCH NEWS" OR CONFIGURE news_provider IN F10 SETUP.
PROVIDERS: newsapi (100req/day) · gnews · rss (implement XML parser)
TIME TICKER CAT SIGNAL HEADLINE SOURCE
{{ n.published_at ? n.published_at.slice(5,16) : '—' }} {{ n.ticker || '—' }} {{ n.category?.toUpperCase() }} {{ n.sentiment?.toUpperCase() || 'UNKNOWN' }} {{ (n.sentiment_score*100).toFixed(0) }}% {{ n.title }} {{ n.title }}
{{ n.summary?.slice(0,120) }}...
{{ n.source }}
SEMANTIC SEARCH — QDRANT
"Find past IDX situations similar to current market"
MATCH {{ i+1 }} SCORE: {{ r.score ? (r.score*100).toFixed(0) : '?' }}%
{{ r.payload?.title || r.payload?.regime_desc || r.payload?.description || r.error }}
{{ r.payload.published_at }}
SETUP: docker run -p 6333:6333 qdrant/qdrant
SET qdrant_url=http://localhost:6333 in app_settings
RUN: POST /api/qdrant.php?action=setup
EMBED: POST /api/qdrant.php?action=embed_batch&type=news
SENTIMENT SOURCES
NEWS SCORINGFinBERT (HuggingFace) · OpenRouter AI
FLOW DATAIDX foreign net buy/sell (macro table)
TECHNICALPrice vs SMA — stub (watchlist)
SOCIALX/Telegram/StockTwits — stub
HF KEYSet huggingface_api_key in SETUP
NEWS PROVIDERS
newsapi100req/day free · set news_api_key
gnews100req/day free · set gnews_api_key
finnhubCompany news by ticker · set finnhub_api_key
rssFree · implement XML parser in api/news.php