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% Broker summary 25% Likuiditas + Index 20%

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
FATABroksum 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.

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 Minggu pukul 23.59 WIB. Harga eksekusi memakai closing Jumat, dan posisi baru berlaku sejak pembukaan Senin.

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 per minggu

Satu aksi = satu ticker yang masuk, keluar, atau berubah bobotnya.

  • Jual habis A lalu beli B = 2 aksi
  • 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 = 2 aksi

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.

Yang masih perlu diputuskan

Empat hal berikut belum punya aturan dan sebaiknya disepakati sebelum musim berjalan, karena keempatnya sudah relevan dengan portofolio yang ada sekarang.

  • Papan Pemantauan Khusus. Enam saham yang dipilih ada di papan ini. Perdagangannya memakai mekanisme full call auction dengan batas harga berbeda, sehingga harga closing tidak selalu bisa dieksekusi di dunia nyata dan bid-ask spread-nya lebar. Perlu diputuskan: dilarang, dibolehkan, atau dibatasi bobotnya.
  • Minimum likuiditas. Ada holding dengan nilai transaksi hanya sekitar Rp 6 miliar per hari. Untuk akun Rp 100 juta ini masih aman, tetapi kalau nominalnya dinaikkan, posisi seperti itu tidak akan bisa dilikuidasi dalam sehari. Usulan: minimum Rp 10 miliar per hari.
  • Corporate action. Perlu aturan eksplisit untuk stock split, dividen, dan rights issue. Usulan: harga dan jumlah lot disesuaikan otomatis untuk split; dividen tunai masuk ke cash pada tanggal ex-date; rights issue tidak diambil dan posisi terdilusi apa adanya.
  • Suspensi dan ARA/ARB. Kalau saham disuspend, posisi dibekukan pada harga terakhir dan tidak dihitung sebagai aksi sampai perdagangan dibuka lagi. Kalau saham ARA atau ARB sehingga harga acuan tidak bisa disentuh, perlu disepakati apakah eksekusi dibatalkan atau tetap dipaksakan di harga closing.

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/Broksum/Likuiditas/Index, 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.

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,25×Broker + 0,10×Likuiditas + 0,10×Index

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.

Broker summary — 25%

Arah net foreign flow selama sekitar 10 hari bursa terakhir, digabung dengan konsentrasi broker di sisi beli dibanding sisi jual. Skor 50 berarti netral. Akumulasi yang terkonsentrasi di sedikit broker dinilai lebih tinggi daripada pembelian yang tersebar, karena menandakan ada pihak yang sengaja mengumpulkan.

Likuiditas — 10% dan Index — 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. Skor index dihitung dari keanggotaan IDX30, LQ45, atau KOMPAS100 ditambah jumlah index yang diikuti.

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 Minggu 23.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.