Leaderboard

Modal awal Rp 100.000.000 per peserta. Harga masuk memakai closing hari bursa sebelumnya. Ranking uang memakai return; Skor Kualitas dinilai terpisah dan tidak memengaruhi ranking uang.

Klasemen

Poin Liga = 25% return (relatif lapangan) + 15% winrate + 25% kualitas + 15% hold/efisiensi + 20% resiliensi (eksposur index & bebas PPK) — rincian di Metodologi; hover angka Poin untuk breakdown per peserta. Hari pertama, harga belum bergerak. Return yang terlihat murni biaya beli 0,18% — urutannya sekarang hanya mencerminkan siapa yang paling sedikit membelanjakan modal, bukan siapa yang memilih paling baik. Kolom Kualitas yang lebih informatif hari ini.

#Peserta Poin EkuitasReturn Belum terealisasiTerealisasi SahamCashPPK Kualitas

Komposisi skor kualitas

Fundamental 30% Teknikal 25% Index 35% Likuiditas 10%

Panjang batang = kontribusi tiap komponen. Angka di ujung = skor total. Dibobot dengan nilai rupiah tiap posisi; cash tidak dihitung.

Simulasi 1 minggu terakhir

Ilustrasi kalau bobot ini sudah dipegang seminggu lalu — bukan hasil kompetisi. Berguna untuk melihat siapa yang mengejar saham yang sudah lari.

Kualitas index yang dipegang

IDX30 LQ45 Index lain Non-index Cash

Angka merah = porsi di Papan Pemantauan Khusus, bisa tumpang tindih dengan bucket index.

Portofolio

Alokasi lot dihitung dari harga closing acuan, dibulatkan ke bawah ke lot penuh — selisihnya masuk cash. Diurutkan dari skor kualitas tertinggi.

Universe saham

Semua ticker yang sedang dipegang peserta, dengan skor komponennya. Klik judul kolom untuk mengurutkan; arahkan kursor ke baris untuk detail valuasi dan aliran broker.

KodeNamaIndex Harga 1 mgg1 bln Likuiditas
Rp M/hari
FATAIndex KualitasDipilih

Submit rebalance

Isi komposisi untuk periode berikutnya. Sistem memvalidasi batas 5 saham, total bobot ≤100%, dan maksimal 2 aksi terhadap posisi berjalan. Harga eksekusi memakai closing Jumat.

📖 Panduan submit — baca sekali sebelum pertama kali (klik untuk buka)
Sekali saja (identitas):
1. Buka tab Peserta → pilih kodemu → isi nama, email kantor, dan buat PIN 6 digit → Klaim & buat PIN.
2. Konfirmasi portofolio pra-isi milikmu (satu klik). Lupa PIN? Hubungi panitia untuk reset klaim.

Setiap mau rebalance (maks 2 aksi/minggu):
3. Masuk (kode + PIN) → buka tab Submit Rebalance — form otomatis terkunci ke kodemu.
4. Klik Muat posisi berjalan supaya mulai dari komposisi aktifmu — jangan mengetik ulang dari nol.
5. Maksimal 2 aksi — 1 aksi = 1 rebalance; tukar saham (jual A, beli B) = 1 aksi, jadi boleh jual 2 & beli 2. Drift harga bukan aksi — posisi yang tidak kamu sentuh tidak dihitung.
6. Perhatikan panel validasi: semua baris harus ✓ hijau. Aturan yang sering menolak: total bobot >100%, >2 aksi, saham Papan Pemantauan Khusus >20%, saham dengan likuiditas < Rp 10 M/hari (beli baru), dana tidak cukup setelah biaya.
7. Klik Simpan usulan → tunggu toast "✓ tersimpan di server". Kalau muncul "✕ GAGAL", baca alasannya — usulan BELUM tersimpan.

Jadwal & sifat usulan: window submit Jumat setelah closing s/d Senin 07.59 WIB (bila Senin libur bursa: mundur ke hari bursa berikutnya, 07.59 WIB); di luar itu server menolak. Usulanmu tersegel (peserta lain tak bisa melihat isinya) sampai dieksekusi Senin di harga closing Jumat. Boleh direvisi berkali-kali selama window — yang terakhir yang dipakai. Tidak submit = komposisi berjalan dilanjutkan, jatah aksi tidak menumpuk ke minggu berikutnya.

Komposisi usulan


Total bobot saham0%
Target cash100%

Posisi & dana berjalan

Bobot target dihitung dari ekuitas berjalan di baris paling bawah, bukan dari modal awal Rp 100 juta. Kalau portofolio sedang minus, dana yang dialokasikan ikut mengecil.

Uji skenario harga

Untuk menguji apa yang terjadi kalau posisi dilikuidasi dalam keadaan minus. Mode simulasi hanya mengubah tampilan — usulan yang disimpan tetap dieksekusi di harga closing resmi.

Validasi

Rencana eksekusi

Aliran dana

Aksi terhadap posisi berjalan

Usulan tersimpan

Tersimpan di browser ini saja. Export JSON kalau mau dipindah ke perangkat lain — file yang sama nanti jadi seed data waktu dihubungkan ke backend hpquant.

Peserta & identitas

Setiap kode peserta diklaim satu kali dengan identitas (nama, email, PIN). Setelah diklaim, hanya pemilik identitas itu yang bisa mengubah portofolionya lewat Submit Rebalance. Portofolio awal yang sudah masuk berstatus pra-isi sampai pemiliknya masuk dan mengonfirmasi.

Masuk / klaim kode

Tambah peserta baru

Peserta baru mulai dengan Rp 100 jt cash penuh dan langsung bisa mengisi komposisi lewat Submit Rebalance. Ia muncul di klasemen setelah data EOD berikutnya di-build.

Daftar peserta

Identitas & PIN disimpan lewat layer API (sementara localStorage perangkat ini; PIN di-hash SHA-256). Penegakan sesungguhnya terjadi saat layer ini dipindah ke server (Prioritas 1 di halaman Integrasi) — halaman ini menyiapkan alur dan bentuk datanya supaya migrasi tinggal mengganti isi fungsi API.

Aturan

Aturan lengkap kompetisi, termasuk hal-hal yang masih perlu diputuskan bersama sebelum musim berjalan.

Modal dan batas posisi

Setiap peserta mulai dengan Rp 100.000.000. Maksimal 5 ticker dalam portofolio. Total bobot boleh kurang dari 100% — sisanya otomatis jadi cash dengan return 0% dan tanpa bunga. Cash adalah posisi yang sah, bukan kekurangan.

Pembulatan lot. 1 lot = 100 lembar. Bobot target dibulatkan ke bawah ke lot penuh, dan selisihnya masuk cash. Karena itu bobot riil selalu sedikit di bawah bobot target — peserta yang menulis 0% cash tetap bisa punya sisa beberapa ratus ribu rupiah. Ini bukan pelanggaran.

Jadwal rebalance

Jumat EOD, efektif Senin. Window submit dibuka Jumat setelah closing dan tutup Senin pukul 07.59 WIB (sebelum bursa buka). Harga eksekusi memakai closing Jumat, dan posisi baru berlaku sejak pembukaan Senin.

Senin libur bursa (aturan 17 Agu 2026): deadline submit dan eksekusi mundur ke hari bursa berikutnya — window tetap terbuka sepanjang hari libur dan tutup pukul 07.59 WIB pada hari eksekusi baru (mis. Senin 17 Agu libur HUT RI → deadline Selasa 18 Agu 07.59, eksekusi Selasa). Harga eksekusi tetap closing Jumat.

Jumat libur bursa: harga eksekusi memakai closing hari bursa terakhir sebelumnya (Kamis), dan window submit dibuka sejak closing hari itu. Prinsipnya simetris: harga selalu closing hari bursa terakhir sebelum akhir pekan, eksekusi selalu hari bursa pertama sesudahnya. Kalender libur mengikuti pengumuman BEI dan ditanam di server.

Alasan memilih hari, bukan tanggal: peserta punya akhir pekan penuh untuk riset tanpa tekanan intraday, dan periode return jadi sejajar Senin–Jumat untuk semua orang. Basis tanggal seperti tanggal 1 dan 15 jatuh di hari libur atau akhir pekan, sehingga jumlah hari bursa per periode berbeda-beda dan hasil antar peserta tidak setara.

Kalau Senin adalah libur bursa, eksekusi bergeser ke hari bursa pertama berikutnya, tetapi harga acuan tetap closing Jumat.

Maksimal 2 aksi (rebalance) per minggu

Revisi 18 Agustus 2026. Satu aksi = satu rebalance: mengganti, menambah, atau mengubah satu saham. Menukar saham (jual A, beli B) dihitung 1 aksi — karena itu dengan 2 aksi peserta boleh menjual 2 saham dan membeli 2 saham. Rumus penghitungan: aksi = maks(jumlah ticker yang dijual/dikurangi, jumlah ticker yang dibeli/ditambah).

  • Jual habis A lalu beli B = 1 aksi (tukar)
  • Jual A dan C, beli B dan D = 2 aksi — batas maksimal
  • Ubah bobot A dari 20% jadi 30% = 1 aksi
  • Jual habis A dan sisanya jadi cash = 1 aksi
  • Menaikkan bobot A sekaligus menurunkan bobot B = 1 aksi (geser bobot antar dua saham)
  • Jual A, B, C sekaligus (3 ticker keluar) = 3 aksi — ditolak

Perubahan bobot riil yang murni akibat pergerakan harga tidak dihitung sebagai aksi — yang dihitung adalah perubahan bobot target yang disengaja.

Bobot dihitung dari ekuitas berjalan

Ini yang paling sering disalahpahami. Bobot target tidak dihitung dari modal awal Rp 100 juta, melainkan dari ekuitas berjalan — nilai pasar semua posisi ditambah cash pada saat rebalance.

Contohnya: portofolio turun jadi Rp 93,5 juta. Kalau peserta minta bobot 20% untuk satu saham, yang dialokasikan adalah 20% × Rp 93,5 juta = Rp 18,7 juta, bukan Rp 20 juta. Kalau dihitung dari modal awal, total pembelian akan melebihi dana yang benar-benar ada.

Menjual merealisasi untung atau rugi. Selama posisi masih dipegang, untung dan rugi hanya di atas kertas. Begitu dijual, selisihnya jadi nyata dan langsung masuk ke cash. Menjual saham yang minus menghasilkan cash lebih sedikit daripada modal yang dulu dipakai membelinya, sehingga dana untuk pembelian berikutnya ikut mengecil. Sistem menghitung ini otomatis dan menolak usulan yang pembeliannya melebihi dana tersedia.

Pergerakan harga tidak memicu transaksi. Kalau harga bergerak dan bobot riil bergeser dari bobot target, tidak ada apa pun yang dijual atau dibeli. Portofolio dibiarkan melayang. Hanya ticker yang bobot targetnya memang diubah peserta yang di-resize — dan itulah yang dihitung sebagai aksi.

Biaya transaksi

Memakai tarif default HP Sekuritas: 0,18% untuk beli dan 0,28% untuk jual (sudah termasuk pajak final 0,1% atas nilai penjualan).

Konsekuensinya perlu dipahami sejak awal:

  • Biaya beli masuk ke harga masuk efektif. Posisi otomatis minus tipis sejak hari pertama — return awal semua peserta berada di kisaran −0,11% sampai −0,18%, tergantung berapa persen modal yang benar-benar dibelanjakan. Peserta yang memegang banyak cash kena biaya lebih kecil.
  • Biaya jual dipotong dari hasil penjualan dan ikut masuk ke untung/rugi terealisasi.
  • Ekuitas tidak kekal melintasi rebalance — turun persis sebesar total biaya. Setiap aksi punya ongkos, jadi menukar posisi bolak-balik akan menggerus modal walaupun harga tidak bergerak sama sekali.
  • Dengan modal Rp 100 juta, satu putaran jual-beli penuh berbiaya sekitar Rp 460 ribu, atau 0,46% dari modal. Jatah 2 aksi per minggu jadi punya harga nyata — itu memang tujuannya.

Harga acuan

Setiap input saham memakai harga closing hari bursa sebelumnya. Tidak ada eksekusi intraday dan tidak ada harga limit. Nilai portofolio di-mark-to-market setiap EOD memakai closing hari itu.

Penilaian

Leaderboard uang diurutkan berdasarkan return sejak awal musim. Selain itu dicatat winrate (berapa persen posisi yang ditutup atau dipegang dengan untung), bobot stockpick (keanggotaan index, likuiditas, papan perdagangan), dan Skor Kualitas yang menggabungkan analisa fundamental, teknikal, dan broker summary. Skor Kualitas menilai proses dan tidak memengaruhi ranking uang.

Aturan tambahan — disahkan 7 Agustus 2026

  • Usulan disegel sampai efektif. Usulan rebalance yang masuk selama window (Jumat close – Senin 07.59) tidak terlihat peserta lain sampai dieksekusi Senin. Hanya pemilik dan admin yang bisa melihat isinya; peserta lain hanya melihat bahwa sebuah usulan sudah masuk. Anti meniru posisi di detik akhir.
  • Papan Pemantauan Khusus dibatasi 20% per nama. PPK berdagang full call auction — harga closing belum tentu bisa dieksekusi dan spread-nya lebar. Boleh dipegang, maksimal 20% bobot per nama. Posisi lama di atas batas tidak dipaksa jual (grandfathered) tetapi tidak boleh dinaikkan. Daftar PPK mengikuti papan resmi IDX (saat ini dari universe liga: SINI).
  • Minimum likuiditas Rp 10 miliar/hari untuk pembelian baru. Saham dengan nilai transaksi harian di bawah Rp 10 M tidak boleh dibeli baru atau dinaikkan bobotnya; posisi lama boleh dipertahankan atau dikurangi. (Saat ini terkena: HRUM ±Rp 6 M/hari — posisi HW di-grandfather pada bobot 15%.)
  • Corporate action. Stock split: harga & jumlah lot disesuaikan otomatis. Dividen tunai: masuk ke cash pada ex-date. Rights issue: tidak ditebus, posisi terdilusi apa adanya. Semuanya bukan aksi.
  • Suspensi & ARA/ARB. Saham suspend: posisi dibekukan di harga terakhir, tidak dihitung sebagai aksi. Bila eksekusi Senin terhalang ARA/ARB penuh (harga acuan tak tersentuh), eksekusi ticker itu batal dan jatah aksinya dikembalikan.

Metodologi

Bagaimana Skor Kualitas dihitung, apa saja sumber datanya, dan apa keterbatasannya.

Poin Liga — dasar klasemen

Klasemen diurutkan dengan Poin Liga (0–1000), komposit yang menilai hasil sekaligus prosesnya — supaya juara bukan sekadar yang beruntung satu saham meledak, tapi yang return-nya baik, pilihannya berkualitas, eksekusinya disiplin, dan keyakinannya teruji waktu. Return murni tetap ditampilkan di kolomnya sendiri.

Poin = 0,25×Return + 0,15×Winrate + 0,25×Kualitas + 0,15×Hold/Efisiensi + 0,20×Resiliensi   (tiap komponen 0–100, ×10)

Return (25%) — dinormalkan terhadap lapangan musim ini (min–max seluruh peserta): yang teratas 100, terbawah 0. Relatif, bukan absolut, supaya adil di pasar naik maupun turun. Bobotnya sengaja bukan yang terbesar sendirian — liga ini menilai portofolio yang tahan banting, bukan sekadar yang paling cepat.

Winrate (15%) — persentase posisi yang profit: posisi terbuka yang di atas harga masuk efektif, ditambah posisi yang ditutup dengan untung begitu riwayat eksekusi terbentuk. Menghargai konsistensi memilih, bukan satu home-run.

Resiliensi (20%) — 70% eksposur ke saham anggota index (punya penopang likuiditas & aliran institusional saat pasar stres) + 30% bebas Papan Pemantauan Khusus (100 − eksposur PPK; PPK berdagang full call auction sehingga keluar-masuk saat krisis tidak terjamin). Portofolio yang resilient tetap bisa dieksekusi justru pada hari-hari terburuk.

Kualitas (25%) — Skor Kualitas portofolio (FA/TA/Index/Likuiditas, rumus di bawah). Mengukur proses pemilihan, bukan hasil.

Hold / Efisiensi (15%) — dua sub-komponen: conviction (60%: umur rata-rata posisi dibanding umur musim — yang yakin pada pilihannya dan tidak bongkar-pasang mendapat nilai penuh) dan efisiensi aksi (40%: hemat jatah 2 aksi/minggu — setiap aksi yang dipakai harus sepadan). Di pekan-pekan awal komponen ini sama untuk semua dan mulai membedakan begitu ada riwayat rebalance.

Privasi portofolio

Peserta boleh menyembunyikan detail portofolionya selama periode berjalan (tombol di halaman Peserta, setelah masuk). Yang tersembunyi hanya rinciannya — komposisi saham, bobot, dan sektor; klasemen, poin, return, dan skor kualitas tetap tampil agar kompetisi tetap akuntabel. Detail terbuka otomatis untuk semua pada hari evaluasi: tanggal 1 tiap bulan, lalu boleh disembunyikan lagi. Tujuannya mencegah saling meniru posisi di tengah periode tanpa mengorbankan evaluasi bersama. Panitia (superadmin) selalu dapat melihat seluruh portofolio untuk kebutuhan pengawasan.

Arahkan kursor ke angka Poin di klasemen untuk melihat rincian keempat komponen per peserta.

Skor Kualitas

Skor 0–100 per saham, lalu dibobot dengan nilai rupiah tiap posisi untuk mendapat skor portofolio. Cash tidak dihitung, jadi portofolio dengan cash besar dinilai dari kualitas saham yang benar-benar dipegang, bukan dihukum karena memegang cash.

Skor = 0,30×Fundamental + 0,25×Teknikal + 0,35×Index + 0,10×Likuiditas

Revisi 10 Agu 2026: komponen broker summary (25%) dikeluarkan dari Skor Kualitas — aliran broker adalah sinyal jangka pendek yang berisik, bukan ukuran kualitas proses pemilihan; bobotnya dialihkan ke keanggotaan index. Data broker tetap tampil sebagai catatan di kartu portofolio.

Fundamental — 30%

Mulai dari basis 50, lalu disesuaikan dengan PER, PBV, dan margin of safety terhadap nilai intrinsik model Sectors. PER di bawah 10x menambah poin, di atas 45x memotong. PBV di bawah 1,2x menambah, di atas 10x memotong. Nilai intrinsik negatif memotong poin karena model DCF-nya tidak bisa dipakai. Saham di Papan Pemantauan Khusus dipotong 12 poin.

Teknikal — 25%

Momentum 1 minggu dibobot 1,6× dan momentum 1 bulan dibobot 0,55×, dari basis 50. Kenaikan di atas 60% dalam sebulan kena penalti parabolik, karena momentum sekuat itu lebih sering menandakan titik masuk yang telat daripada tren sehat.

Index — 35%

Kedalaman keanggotaan index: IDX30 tertinggi, lalu LQ45, KOMPAS100, dan index tematik (JII70, IDXG30, dst); saham non-index mendapat skor dasar rendah. Keanggotaan index berarti saham telah lolos saringan likuiditas, free float, dan kapitalisasi bursa — penopang struktural yang membuat portofolio tetap bisa dieksekusi dalam kondisi pasar buruk. Konsisten dengan komponen Resiliensi pada Poin Liga.

Catatan: broker summary (net foreign flow & konsentrasi akumulasi) tidak lagi menjadi komponen skor — ia sinyal taktis harian, bukan kualitas proses — tetapi tetap ditampilkan sebagai catatan per saham di kartu portofolio dan Universe.

Likuiditas — 10%

Likuiditas memakai skala logaritmik dari nilai transaksi harian rata-rata, sehingga selisih antara Rp 5 M dan Rp 50 M per hari jauh lebih berarti daripada selisih antara Rp 500 M dan Rp 550 M.

Keterbatasan

Skor ini model buatan sendiri, bukan rekomendasi beli atau jual. Bobot komponennya dipilih berdasarkan pertimbangan, bukan hasil optimasi terhadap data historis, jadi jangan diperlakukan seolah sudah teruji. Komponen fundamental sangat bergantung pada nilai intrinsik model Sectors, yang untuk banyak saham siklikal dan holding company menghasilkan angka negatif dan karena itu kurang informatif. Komponen teknikal murni momentum dan tidak melihat struktur harga, level support, atau volume profile.

Sumber data

Seluruh angka pasar berasal dari Sectors.app: harga EOD, volume dan nilai transaksi, market cap, keanggotaan index, rasio valuasi, dan broker summary. Data papan perdagangan berasal dari tag perusahaan di sumber yang sama. Dashboard memperbarui posisi setiap EOD memakai harga closing hari itu.

Integrasi hpquant

Semua akses data di halaman ini lewat satu objek API. Untuk pindah ke backend hpquant, ganti isi objek itu — sisa aplikasi tidak perlu disentuh.

Titik ganti

Di bagian atas <script> ada blok bertanda /* ==== API LAYER ==== */. Implementasi sekarang memakai localStorage untuk usulan rebalance dan data harga yang ditanam di file. Bentuk yang perlu disediakan backend:

API.getSeason()   → {season, week, capital, asof, priceDate, lockAt, effectiveAt}
API.getPrices()   → {BBCA: {px, w1, m1, adv, mcap, idx[], sector, pe, pb, board, fa, ta, brok, quality}, ...}
API.getPortfolios() → [{code, holdings:{BBCA:20, ...}, week}]
API.getProposals()  → [{code, week, holdings, submittedAt}]
API.saveProposal(code, holdings) → {ok, id}
API.deleteProposals() → {ok}

Semua fungsi mengembalikan Promise, jadi versi fetch bisa langsung menggantikan versi lokal tanpa mengubah pemanggilnya.

Aturan yang ikut pindah

Validasi form ada di fungsi validate() dan hanya bergantung pada tiga konstanta: MAX_HOLDINGS, MAX_ACTIONS, dan LOT. Backend sebaiknya menjalankan validasi yang sama di sisi server — validasi di browser gampang dilewati, dan aturan 2 aksi per minggu hanya berarti kalau ditegakkan di tempat yang tidak bisa disentuh peserta.

Yang perlu disiapkan backend

  • Job EOD yang menarik closing dari Sectors setiap sore bursa, menyimpannya sebagai time series, lalu menghitung ulang nilai portofolio setiap peserta. Ini yang membuat kurva return terbentuk.
  • Kunci window submit di sisi server: tolak usulan yang masuk di luar rentang Jumat close sampai Senin 07.59 WIB.
  • Snapshot mingguan posisi tiap peserta, supaya perhitungan 2 aksi punya titik banding yang pasti dan riwayat rebalance bisa diaudit.
  • Identitas peserta — sekarang masih kode dua huruf. Perlu dipetakan ke akun hpquant supaya tiap orang hanya bisa mengubah portofolionya sendiri.

Format export

Tombol Export JSON di halaman Submit menghasilkan file dengan bentuk yang sama seperti yang diharapkan API.getProposals(), jadi file itu bisa langsung dipakai sebagai seed data waktu backend pertama kali dinyalakan.