Case Study

IHSG Market Database
& Risk Analytics (SQL)

31 Tahun Data Pasar Modal Indonesia - Dianalisis Murni Menggunakan SQL, dari Query Dasar sampai Window Functions untuk Mengukur Risiko & Volatilitas

SQL POSTGRESQL DATA MANAGEMENT WINDOW FUNCTIONS DATA QUALITY

Sebuah project menelusuri 7.681 hari perdagangan Indeks Harga Saham Gabungan (IHSG) sepanjang 31 tahun (1995–2026), menggunakan bahasa database bernama SQL (Structured Query Language - cara "bertanya" ke database dan menyaring jutaan baris data jadi jawaban yang ringkas). Semua database-nya dikelola di PostgreSQL (salah satu sistem database yang paling umum dipakai di dunia). Seluruh temuan di halaman ini didapat langsung dari hasil bertanya ke data - bukan tebakan atau data yang diketik manual.

31 Tahun Data (1995–2026)
7.681 Hari Perdagangan (data historis IHSG)
3 Krisis Besar (Moneter 1998, Finansial Global 2008, Covid-19 2020)
5 Pertanyaan Riset (dijawab di halaman ini)

Identifikasi & penamaan krisis merujuk pada Laporan Bank Indonesia dan Arsip Nasional RI; penentuan titik krisis pada data historis IHSG adalah hasil analisis penulis.

Problem Statement

Pertanyaan yang ingin dijawab

Bagaimana pola pertumbuhan, momen krisis, dan karakteristik data IHSG selama periode 1995–2026 dapat diidentifikasi dan divalidasi murni menggunakan query SQL bertingkat - dari agregasi dasar sampai window functions (fungsi SQL yang bisa "melihat" baris-baris data lain di sekitarnya, misalnya harga tertinggi sejauh ini, tanpa harus meringkas datanya jadi satu angka saja)?

Pertanyaan besar itu dipecah jadi 5 pertanyaan riset yang lebih spesifik di bawah - masing-masing dijawab langsung dari hasil query ke tabel ihsg_daily, tanpa alat analisis statistik atau bahasa pemrograman lain di luar SQL.

Tentang Dataset

Data apa yang dianalisis?

Sebelum masuk ke query, penting memahami dulu bentuk data mentahnya - supaya semua angka di halaman ini punya konteks yang jelas.

7.681 Baris (hari perdagangan)
6 Kolom asli
1995–2026 Rentang waktu

Data mentah harga harian IHSG (format file CSV) dimasukkan ke sebuah tabel database bernama ihsg_daily. Ada juga satu tabel kecil kedua, market_events, isinya empat momen paling ekstrem sepanjang sejarah data (kenaikan/penurunan harian terbesar, harga tertinggi/terendah) - semuanya ditemukan lewat query ke data itu sendiri, bukan tanggal yang diketik dari hafalan atau internet, supaya bisa sepenuhnya dipertanggungjawabkan.

Nama KolomIsinya Apa
trade_dateTanggal bursa saham buka dan ada transaksi.
open_pricePosisi IHSG saat pasar resmi dibuka di pagi hari.
high_priceTitik tertinggi yang dicapai IHSG sepanjang hari itu.
low_priceTitik terendah yang disentuh IHSG sepanjang hari itu.
close_priceNilai akhir IHSG saat pasar tutup - kolom yang paling sering dipakai di halaman ini karena paling mencerminkan "harga resmi" hari itu.
volumeTotal lembar saham yang diperjualbelikan pada hari itu - makin besar, makin ramai aktivitas pasar.
Seberapa bersih datanya? Ditemukan 109 baris (1,4% dari total) yang volume-nya tercatat 0, kebanyakan dari tahun 1995 - kemungkinan besar karena pencatatan jumlah transaksi belum konsisten di masa awal bursa Indonesia. Tidak ditemukan satu pun baris yang datanya "mustahil" secara logika (misalnya harga tertinggi hari itu lebih rendah dari harga terendahnya) - jadi data ini bisa dipercaya untuk dianalisis.

Data Validation & Cleaning (VIEW ihsg_clean)

Sebelum analisis dilakukan, data melewati proses validasi otomatis untuk memastikan kualitasnya:

  • 0 Data Mustahil: Tidak ada anomali logika harga (High < Low).
  • 109 Baris Volume Nol (1,4%): Terdapat hari tanpa aktivitas transaksi pasar.
  • 41 Jeda Tanggal: Seluruh gap tanggal terverifikasi sebagai kalender libur nasional, bukan data hilang (missing data).

Analysis Approach

Alur pengerjaan

Prosesnya bertahap, mulai dari pertanyaan paling sederhana sampai yang butuh logika lebih rumit - semua tercatat rapi di file queries_postgres.sql supaya bisa ditelusuri ulang.

Level 1 - Query Dasar

Perintah SQL paling fundamental: memilih kolom, menyaring baris, mengurutkan, dan membatasi jumlah hasil. Contoh: harga tertinggi/terendah sepanjang sejarah, 10 baris data paling awal dan akhir.

Level 2 - Aggregation & GROUP BY

Meringkas ribuan baris data harian jadi angka per kelompok: rata-rata, tertinggi, dan terendah close per tahun (fondasi Q1), STDDEV() return harian yang dikelompokkan per dekade untuk mengukur volatilitas (Q3), agregasi per bulan lewat GROUP BY bulan untuk melihat pola musiman (Q4), serta CORR() untuk mengukur korelasi antar variabel (Q5). Level ini jadi landasan teknik untuk tiga dari lima pertanyaan riset.

Level 3 - JOIN, Subquery, CTE

Menggabungkan tabel harga harian dengan tabel event pasar penting, plus subquery (query di dalam query) dan CTE (Common Table Expression, cara menyusun query bertahap yang lebih rapi) untuk melihat konteks di sekitar tanggal-tanggal penting - salah satunya dipakai untuk menggabungkan data market events pada eksplorasi lanjutan di luar 5 Pertanyaan Riset utama.

Level 4 - Window Functions

Bagian paling teknis: menghitung nilai berbasis baris lain tanpa meringkas jumlah baris. Dipakai untuk cumulative return sejak awal data (Q1), serta drawdown terbesar dan lama pemulihan pasca krisis (Q2), lewat fungsi seperti MAX() OVER (ROWS UNBOUNDED PRECEDING).

Level 5 - Data Quality & Views

Memvalidasi kualitas data (baris aneh, gap tanggal, harga tidak masuk akal), lalu membungkus query yang sering dipakai ulang ke dalam VIEW (tabel virtual yang menyimpan definisi query, bukan data itu sendiri) - hasil validasinya ditampilkan di bagian Data Preparation sebagai VIEW ihsg_clean.

PostgreSQL (sistem database) pgAdmin (aplikasi buat mengelolanya) SQL murni (tanpa tools tambahan)

Key Findings

The Four Headline Numbers

Empat angka utama yang merangkum keseluruhan hasil analisis — masing-masing menjawab poin krusial dari riset: tingkat pertumbuhan, seberapa dalam krisis terjadi, berapa lama waktu pemulihannya, hingga bagaimana tingkat kestabilan pasar dari dekade ke dekade.

Untuk menghindari penyajian data yang berlebihan (cognitive overload) bagi pembaca atau recruiter, ratusan baris hasil dari 23 kueri SQL telah dievaluasi, dibandingkan, dan disaring secara ketat menggunakan 3 kriteria: Relevansi (langsung menjawab problem statement), Robustness (dihitung dari keseluruhan populasi data, bukan titik tunggal/outlier), dan Magnitude (dampak atau signifikansi angka).

Hasilnya, terpilihlah 4 Kartu Utama yang secara harfiah merepresentasikan 3 pilar utama dari Problem Statement riset (pertumbuhan, volatilitas, dan siklus krisis-pemulihan):

  • Total Kumulatif Return (+1.226%): Mewakili pilar pertumbuhan jangka panjang yang dihitung dari seluruh riwayat perdagangan.
  • Max Drawdown (-65,33%): Mewakili tingkat keparahan risiko atau kedalaman krisis.
  • Lama Pemulihan (1.936 hari): Mewakili durasi waktu yang dibutuhkan pasar untuk rebound, melengkapi siklus krisis.
  • Penurunan Volatilitas (33,5% ke 16,5%): Mewakili tren perbandingan volatilitas antar dekade yang membuktikan kematangan pasar (market maturity).
13.26x Cumulative Growth

(nilai IHSG sekarang dibanding awal 1995)

Angka ini menunjukkan betapa tangguhnya pasar saham kita dalam jangka panjang. Dari posisi awal di angka 470 poin pada Januari 1995, IHSG melompat naik hingga mencapai 6.234 poin pada data terakhir (Agustus 2026). Jika dihitung secara keseluruhan, ini adalah pertumbuhan kumulatif sebesar +1.226% atau setara dengan kenaikan lebih dari 13 kali lipat.

-65.33% Deepest Drawdown

(penurunan dari puncak tertinggi ke titik terendah berikut)

Ini adalah rekor penurunan terparah (paling dalam) yang pernah tercatat dalam sejarah 31 tahun data bursa kita. Pasar sempat berada di puncak kejayaannya pada angka 740,80 poin, sebelum akhirnya mengalami hantaman telak dan terjun bebas ke titik terendah di level 256,82 poin pada tanggal 21 September 1998 akibat krisis ekonomi.

1,936 days Longest Recovery

(waktu yang dibutuhkan untuk pulih kembali ke level sebelum krisis)

Membutuhkan waktu yang sangat panjang bagi pasar untuk bisa bangkit kembali dari keterpurukan. Dari titik terendah krisis 1998 tersebut, IHSG butuh waktu sekitar 5,3 tahun (atau tepatnya 1.936 hari) untuk benar-benar pulih dan menyentuh kembali posisi tertingginya sebelum krisis, yaitu pada 9 Januari 2004.

33.50% → 16.52% Volatility Decline

(fluktuasi harian antar dekade)

Berdasarkan hasil pengolahan data menggunakan SQL, tingkat fluktuasi harian dikelompokkan per dekade dan menunjukkan pola penurunan konsisten dari 33,50% di era 1990-an menjadi 16,52% di era 2010-an. Dinamakan Volatility Decline karena data membuktikan pasar keuangan Indonesia kini jauh lebih matang, stabil, dan tidak seseram masa krisis di awal sejarah.

Seluruh angka di atas bersumber langsung dari "query" data menggunakan SQL murni — tidak ditarik dari artikel, uji statistik terpisah, atau sumber luar.

5 Pertanyaan Riset

Pertanyaan yang dijawab langsung dari data

Problem statement di atas dipecah jadi 5 pertanyaan konkret. Semua angka di bawah dihitung murni pakai SQL (PostgreSQL) - window functions, STDDEV(), dan CORR() - bukan uji statistik formal, bukan Python/pandas/scipy.

Q1 - Bagaimana pertumbuhan IHSG dari 1995–2026, dan tahun mana paling ekstrem naik/turun?

Dijawab lewat query SQL: "Rata-rata, Tertinggi, Terendah Close per Tahun" dan "Cumulative Return Sejak Awal Data" (menjumlahkan return harian sejak hari pertama data untuk melihat total pertumbuhan sampai hari terakhir).

Data harian diringkas jadi rata-rata per tahun, lalu dibandingkan tahun demi tahun untuk melihat lonjakan dan penurunan paling mencolok.

MetrikNilai (dalam poin indeks IHSG, kecuali disebutkan lain)
Cumulative return (total pertumbuhan sejak awal data)+1.226% (13,26x lipat)
Rata-rata Close tertinggi2025 (7.449,72 poin)
Rata-rata Close terendah2001 (404,42 poin), lebih rendah dari 1998 (416,81 poin)
Lonjakan tahunan terbesar2010 (+1.074,88 poin), pemulihan pasca krisis 2008
Penurunan tahunan terbesar2020 (-1.047,11 poin), dampak COVID-19
Insight: Tahun dengan rata-rata harga paling rendah ternyata bukan 1998 (tahun krisis moneter yang paling dikenal orang), melainkan 2001. Lonjakan tahunan terbesar (2010) dan penurunan tahunan terbesar (2020) sama-sama muncul tepat setelah krisis besar (2008 dan awal COVID-19) - pola yang sama, arah berlawanan.

Q2 - Seberapa dalam drawdown krisis terbesar, dan berapa lama pemulihannya?

Dijawab lewat query SQL: "Drawdown Terbesar Sepanjang Sejarah Data" dan "Tanggal Pemulihan Penuh Setelah Drawdown Terbesar" (melacak titik tertinggi yang pernah dicapai, lalu mencari selisih terbesar ke titik terendah sesudahnya).

Dihitung pakai window function MAX() OVER (ROWS UNBOUNDED PRECEDING) (fungsi yang melacak harga tertinggi yang pernah dicapai sampai hari itu - disebut "running peak" atau puncak berjalan) untuk membandingkan tiap harga penutupan dengan puncak tertingginya sejauh itu, lalu mencari titik yang selisihnya paling besar.

MetrikNilai (dalam poin indeks IHSG, kecuali disebutkan lain)
Puncak sebelum jatuh740,80 poin
Titik terendah256,82 poin (21 September 1998)
Drawdown terdalam (persentase penurunan dari puncak ke titik terendah)-65,33%
Tanggal pemulihan penuh (harga kembali menyamai puncak sebelumnya)9 Januari 2004
Lama pemulihan1.936 hari (~5,3 tahun)
Insight: Butuh lebih dari 5 tahun bagi IHSG untuk kembali ke level sebelum krisis 1997–1998 - jauh lebih lama dari drop-nya sendiri, yang menegaskan bahwa krisis moneter itu bukan cuma penurunan tajam sesaat, tapi luka yang butuh waktu sangat panjang untuk pulih.

Q3 - Apakah volatilitas berubah dari dekade ke dekade?

Dijawab lewat query SQL: "Volatilitas Antar Dekade" (standar deviasi return harian dikelompokkan per dekade, lalu disetahunkan supaya bisa dibandingkan antar dekade).

Volatilitas (seberapa besar dan sering harga naik-turun - makin tinggi, makin "liar" pergerakannya) dihitung pakai STDDEV() dari return harian tiap dekade, lalu disetahunkan.

DekadeVolatilitas HarianVolatilitas Tahunan
1990-an2,11%33,50%
2000-an1,55%24,55%
2010-an1,04%16,52%
2020-an1,16%18,47%
Insight: Volatilitas menurun tajam dari 1990-an ke 2010-an, lalu naik lagi sedikit di 2020-an - kemungkinan efek COVID-19 dan gejolak pasar global.

Q4 - Adakah pola musiman yang konsisten setiap tahun?

Dijawab lewat query SQL: "Rata-rata Return Harian per Bulan" (return harian dari seluruh tahun digabung lalu dikelompokkan per bulan, untuk melihat bulan mana yang secara historis cenderung naik atau turun).

Return harian dikelompokkan per bulan (digabung dari semua tahun), lalu dirata-ratakan untuk melihat bulan mana yang secara historis cenderung naik atau turun.

BulanRata-rata Return Harian
Desember+0,2015% (tertinggi)
Agustus-0,1545% (terendah, satu-satunya bulan negatif)
Insight: Desember konsisten jadi bulan dengan rata-rata return harian tertinggi, mengindikasikan pola rally akhir tahun - sementara Agustus jadi satu-satunya bulan dengan rata-rata negatif.

Q5 - Apakah volume perdagangan berkaitan dengan besaran pergerakan harga?

Dijawab lewat query SQL: "Korelasi Volume terhadap Besaran Pergerakan Harga" (mengukur seberapa erat volume transaksi bergerak bersamaan dengan besar-kecilnya perubahan harga harian).

Dihitung korelasi (CORR() - angka antara -1 sampai 1 yang menunjukkan seberapa erat dua hal bergerak bersamaan; makin dekat ke 0, makin tidak berkaitan) antara volume harian dan besaran perubahan harga hari itu (nilai absolut).

MetrikNilai
Korelasi volume vs besaran pergerakan harga harian-0,0183
Insight: Angka -0,0183 sangat lemah, mendekati nol - artinya volume transaksi tidak berkaitan secara berarti dengan seberapa besar harga bergerak hari itu. Hari dengan transaksi ramai belum tentu hari dengan pergerakan harga yang besar, begitu juga sebaliknya.

Business Insights

Rekomendasi yang bisa ditindaklanjuti

Lima temuan di atas bukan sekadar angka statistik - masing-masing punya implikasi konkret untuk bagaimana query semacam ini bisa dipakai di sistem nyata.

  1. Adopsi strategi investasi jangka panjang (buy and hold) berdasarkan cumulative growth. Mengingat pertumbuhan kumulatif IHSG mencapai 13,26x (+1.226%) sejak 1995, imbal hasil optimal hanya bisa terealisasi lewat holding period puluhan tahun, bukan trading jangka pendek.
  2. Gunakan pendekatan dynamic forecasting dibanding rata-rata statis. Karena pertumbuhan historis terbukti tidak terdistribusi merata dan didominasi oleh lonjakan pasca-krisis (seperti 2010 dan 2020), ekspektasi return wajib disesuaikan dengan fase siklus pasar.
  3. Terapkan sistem monitoring drawdown berbasis running peak secara real-time. Karena drawdown dapat mencapai -65,33%, kalkulasi running peak (MAX() OVER (ROWS UNBOUNDED PRECEDING)) perlu dijadikan trigger alert otomatis untuk mengantisipasi penurunan tajam portofolio.
  4. Siapkan buffer likuiditas berbasis durasi pemulihan pasar (recovery period). Mengingat pemulihan dari drawdown terdalam membutuhkan waktu hingga 1.936 hari (~5,3 tahun), alokasi dana darurat atau instrumen berisiko rendah perlu disesuaikan agar modal tidak terkunci dalam jangka panjang.
  5. Gunakan logika validasi VIEW ihsg_clean sebagai standar pipeline data harga. Pengecekan volume nol, anomali logika harga, dan gap tanggal pada VIEW ihsg_clean berfungsi sebagai pola validasi dasar (Data Quality framework) yang reusable untuk ingestion dataset aset lainnya.

Penasaran dengan kodenya?

Untuk pembaca yang lebih teknis: seluruh 20+ pertanyaan SQL di atas - dari yang paling sederhana sampai paling kompleks - didokumentasikan lengkap dengan penjelasan di repository GitHub berikut, beserta struktur database dan langkah setup-nya.

View Source Code on GitHub ↗