Monday, July 13, 2026
Python Saham yfinance

Cara Mengambil Data Harga Saham Indonesia Menggunakan Python dan yfinance

Pendahuluan

Dalam dunia investasi modern, data merupakan aset yang sangat berharga. Hampir semua proses analisis saham, mulai dari analisis teknikal, backtesting strategi, hingga machine learning membutuhkan data historis harga saham.

Untungnya, kita tidak perlu membuat aplikasi crawling sendiri untuk memperoleh data tersebut. Salah satu library Python yang paling populer adalah yfinance. Library ini memungkinkan kita mengambil data harga saham langsung dari Yahoo Finance hanya dengan beberapa baris kode.

Keuntungan menggunakan yfinance antara lain:

  • Gratis digunakan
  • Mudah dipelajari
  • Mendukung ribuan saham di seluruh dunia
  • Mendukung saham Indonesia (BEI)
  • Dapat mengambil data historis bertahun-tahun
  • Mendukung data dividen dan stock split
  • Cocok untuk analisis data maupun backtesting

Pada artikel ini kita akan belajar mulai dari instalasi hingga mengambil data historis saham Indonesia menggunakan Python.


Apa itu yfinance?

yfinance adalah library Python yang digunakan untuk mengakses data Yahoo Finance.

Library ini dikembangkan agar programmer dapat memperoleh informasi seperti:

  • Harga Open
  • Harga High
  • Harga Low
  • Harga Close
  • Adjusted Close
  • Volume
  • Dividen
  • Stock Split
  • Informasi perusahaan
  • Data fundamental sederhana

Karena mudah digunakan, library ini menjadi salah satu pilihan utama bagi data scientist, quant analyst, maupun investor yang ingin melakukan analisis otomatis.


Persiapan

Pastikan Python sudah terpasang.

Cek versi Python:

python --version

atau

python3 --version

Misalnya hasilnya:

Python 3.12.1

Membuat Virtual Environment

Disarankan menggunakan virtual environment agar project tetap rapi.

python -m venv venv

Aktifkan virtual environment.

Linux/Mac

source venv/bin/activate

Windows

venv\Scripts\activate

Install Library

Install library yang diperlukan.

pip install yfinance

Selain itu kita juga akan menggunakan pandas.

pip install pandas

Jika ingin membuat visualisasi nanti:

pip install matplotlib

Install sekaligus:

pip install yfinance pandas matplotlib

Mengenal Ticker Saham Indonesia

Yahoo Finance menggunakan kode khusus.

Formatnya adalah:

KODE.EMITEN + .JK

Contoh:

PerusahaanKode Yahoo
Bank Central AsiaBBCA.JK
Bank Rakyat IndonesiaBBRI.JK
Bank MandiriBMRI.JK
Telkom IndonesiaTLKM.JK
Astra InternationalASII.JK
GoToGOTO.JK
Amman MineralAMMN.JK
BNIBBNI.JK
IndofoodINDF.JK
Unilever IndonesiaUNVR.JK

Suffix .JK menunjukkan bahwa saham tersebut berasal dari Bursa Efek Indonesia (Jakarta Stock Exchange).


Mengambil Data Saham Pertama

Mari kita ambil data saham BBCA.

import yfinance as yf

ticker = yf.Ticker("BBCA.JK")

data = ticker.history(period="1mo")

print(data)

Outputnya kira-kira:

                 Open    High     Low   Close   Volume
Date
2026-05-01     9100    9200    9050    9180   23500000
2026-05-02     9180    9240    9100    9200   18200000
...

Data yang diperoleh berupa DataFrame dari Pandas sehingga mudah diproses lebih lanjut.


Penjelasan Kolom

Secara default kita akan memperoleh beberapa kolom berikut.

Open

Harga pembukaan perdagangan.

Contoh:

9100

Artinya saham dibuka pada harga Rp9.100.


High

Harga tertinggi hari itu.

9250

Low

Harga terendah.

9050

Close

Harga penutupan perdagangan.

9200

Volume

Jumlah saham yang diperdagangkan.

25000000

Semakin besar volume biasanya menunjukkan transaksi yang semakin aktif.


Mengambil Data Selama 5 Tahun

Menggunakan parameter period.

import yfinance as yf

ticker = yf.Ticker("BBCA.JK")

data = ticker.history(period="5y")

print(data)

Pilihan period cukup banyak.

PeriodKeterangan
1d1 Hari
5d5 Hari
1mo1 Bulan
3mo3 Bulan
6mo6 Bulan
1y1 Tahun
2y2 Tahun
5y5 Tahun
10y10 Tahun
maxSemua data

Jika ingin melakukan backtesting, biasanya data 5–10 tahun sudah cukup representatif.


Mengambil Data Berdasarkan Tanggal

Kita juga bisa menentukan tanggal mulai dan selesai.

import yfinance as yf

ticker = yf.Ticker("BBCA.JK")

data = ticker.history(
    start="2024-01-01",
    end="2024-12-31"
)

print(data)

Cara ini lebih fleksibel dibanding menggunakan parameter period.

Contohnya ketika ingin menganalisis performa saham selama tahun 2024 saja atau membandingkan kondisi pasar pada periode tertentu.


Menampilkan 5 Data Pertama

Karena data historis bisa sangat banyak, gunakan fungsi head().

print(data.head())

Sebaliknya, untuk melihat data terakhir gunakan:

print(data.tail())

Fungsi ini sangat membantu saat proses eksplorasi data (Exploratory Data Analysis/EDA).

Mengambil Banyak Saham Sekaligus

Salah satu kelebihan yfinance adalah kemampuannya mengambil data beberapa saham dalam satu kali request. Fitur ini sangat berguna ketika Anda ingin membandingkan performa beberapa emiten sekaligus atau membangun screener saham.

Misalnya kita ingin mengambil data saham perbankan Indonesia.

import yfinance as yf

tickers = [
    "BBCA.JK",
    "BBRI.JK",
    "BMRI.JK",
    "BBNI.JK"
]

data = yf.download(
    tickers=tickers,
    period="1mo",
    group_by="ticker"
)

print(data)

Outputnya akan berbentuk MultiIndex DataFrame, di mana setiap ticker memiliki kolom:

  • Open
  • High
  • Low
  • Close
  • Volume

Contoh mengakses harga penutupan BBCA:

print(data["BBCA.JK"]["Close"])

Sedangkan untuk melihat harga penutupan seluruh saham:

close = data.xs("Close", axis=1, level=1)
print(close)

Mengambil Data Menggunakan Interval

Selain data harian, yfinance juga mendukung interval waktu yang lebih kecil (tergantung ketersediaan data dari Yahoo Finance).

Contoh:

import yfinance as yf

data = yf.download(
    "BBCA.JK",
    period="5d",
    interval="1h"
)

print(data)

Pilihan interval yang tersedia antara lain:

IntervalKeterangan
1m1 Menit
2m2 Menit
5m5 Menit
15m15 Menit
30m30 Menit
60m1 Jam
90m90 Menit
1dHarian
1wkMingguan
1moBulanan

Catatan: Data intraday biasanya hanya tersedia untuk rentang waktu tertentu. Untuk analisis historis jangka panjang, gunakan interval harian (1d).


Menyimpan Data ke CSV

Setelah memperoleh data, langkah berikutnya biasanya adalah menyimpannya agar dapat digunakan kembali tanpa perlu mengunduh ulang.

import yfinance as yf

data = yf.download("BBCA.JK", period="5y")

data.to_csv("bbca.csv")

Hasilnya akan menghasilkan file:

bbca.csv

yang dapat dibuka menggunakan:

  • Microsoft Excel
  • LibreOffice Calc
  • Google Sheets
  • Pandas

Membaca Kembali File CSV

import pandas as pd

df = pd.read_csv("bbca.csv")

print(df.head())

Teknik ini sangat membantu ketika membangun pipeline analisis data.


Menyimpan ke Excel

Jika ingin membagikan data kepada pengguna non-programmer, format Excel sering kali lebih praktis.

data.to_excel("bbca.xlsx")

Pastikan library berikut telah terpasang:

pip install openpyxl

Menampilkan Grafik Harga Saham

Visualisasi merupakan bagian penting dalam analisis data.

Contoh grafik sederhana menggunakan Matplotlib:

import yfinance as yf
import matplotlib.pyplot as plt

data = yf.download("BBCA.JK", period="1y")

plt.figure(figsize=(12,6))
plt.plot(data["Close"])

plt.title("Harga Saham BBCA")
plt.xlabel("Tanggal")
plt.ylabel("Harga")

plt.grid(True)

plt.show()

Grafik tersebut akan memperlihatkan tren harga saham BBCA selama satu tahun terakhir.


Menghitung Moving Average (MA20)

Moving Average merupakan indikator teknikal yang paling sering digunakan.

Menghitung MA20 sangat mudah menggunakan Pandas.

data["MA20"] = data["Close"].rolling(20).mean()

Selanjutnya tampilkan grafik.

plt.figure(figsize=(12,6))

plt.plot(data["Close"], label="Close")
plt.plot(data["MA20"], label="MA20")

plt.legend()

plt.show()

Grafik ini membantu melihat kecenderungan tren harga dengan menghaluskan fluktuasi harian.


Menghitung Dua Moving Average Sekaligus

Strategi populer adalah menggunakan MA20 dan MA50.

data["MA20"] = data["Close"].rolling(20).mean()

data["MA50"] = data["Close"].rolling(50).mean()

Visualisasi:

plt.figure(figsize=(14,6))

plt.plot(data["Close"], label="Close")
plt.plot(data["MA20"], label="MA20")
plt.plot(data["MA50"], label="MA50")

plt.legend()

plt.show()

Strategi ini sering digunakan sebagai dasar untuk mengidentifikasi Golden Cross dan Death Cross.


Mengambil Informasi Perusahaan

Selain data harga, yfinance juga menyediakan informasi dasar perusahaan.

import yfinance as yf

ticker = yf.Ticker("BBCA.JK")

info = ticker.info

print(info)

Beberapa informasi yang dapat diperoleh antara lain:

  • Nama perusahaan
  • Sektor
  • Industri
  • Market Cap
  • Currency
  • Website
  • Jumlah karyawan
  • Ringkasan bisnis

Sebagai contoh:

print(info["longName"])

print(info["sector"])

print(info["industry"])

Data ini berguna untuk memperkaya dashboard analisis atau membuat filter berdasarkan sektor.


Mengambil Data Dividen

Untuk investor jangka panjang, informasi dividen sangat penting.

ticker = yf.Ticker("BBCA.JK")

print(ticker.dividends)

Output akan menampilkan tanggal pembayaran dividen beserta nilai dividen per saham.


Mengambil Data Stock Split

Jika perusahaan pernah melakukan stock split, datanya juga tersedia.

print(ticker.splits)

Informasi ini berguna saat melakukan analisis historis agar perubahan harga dapat dipahami dengan benar.


Mengambil Data Actions

Untuk melihat dividen dan stock split sekaligus:

print(ticker.actions)

Contoh output:

Dividends
Stock Splits

Mengambil Metadata Saham

ticker = yf.Ticker("BBCA.JK")

print(ticker.fast_info)

Biasanya berisi informasi ringkas seperti:

  • Last Price
  • Currency
  • Exchange
  • Time Zone
  • Shares Outstanding

Metode ini lebih cepat dibanding ticker.info untuk kebutuhan tertentu.

Mengambil Daftar Banyak Saham Secara Otomatis

Jika Anda ingin menganalisis banyak saham sekaligus, buat daftar ticker dalam sebuah list.

import yfinance as yf

tickers = [
    "BBCA.JK",
    "BBRI.JK",
    "BMRI.JK",
    "BBNI.JK",
    "TLKM.JK",
    "ASII.JK",
    "INDF.JK",
    "ICBP.JK",
    "GOTO.JK",
    "AMMN.JK"
]

data = yf.download(
    tickers=tickers,
    period="1y",
    group_by="ticker"
)

print(data)

Pendekatan ini cocok untuk membangun aplikasi:

  • Stock Screener
  • Dashboard Portofolio
  • Backtesting
  • Trading Bot
  • Machine Learning

Mengambil Data Seluruh Saham BEI

Secara teori, yfinance dapat mengambil seluruh saham yang tersedia di Yahoo Finance. Namun, library ini tidak menyediakan daftar ticker BEI secara otomatis.

Cara yang umum dilakukan adalah:

  1. Mengunduh daftar emiten dari situs BEI.
  2. Menyimpannya ke file CSV.
  3. Membaca daftar tersebut menggunakan Pandas.
  4. Menambahkan akhiran .JK pada setiap kode saham.

Contoh:

import pandas as pd

df = pd.read_csv("emiten.csv")

tickers = df["Kode"].apply(lambda x: f"{x}.JK").tolist()

print(tickers[:10])

Dengan cara ini Anda dapat memperbarui daftar emiten kapan saja tanpa mengubah kode program.


Membuat Screener Sederhana

Misalnya kita ingin mencari saham yang mengalami kenaikan harga pada hari terakhir.

import yfinance as yf

tickers = [
    "BBCA.JK",
    "BBRI.JK",
    "BMRI.JK",
    "BBNI.JK"
]

for ticker in tickers:

    df = yf.download(
        ticker,
        period="5d",
        progress=False
    )

    if len(df) >= 2:

        last_close = df["Close"].iloc[-1]

        previous_close = df["Close"].iloc[-2]

        if last_close > previous_close:

            print(f"{ticker} naik")

Contoh ini dapat dikembangkan menjadi screener yang lebih kompleks dengan indikator teknikal atau fundamental.


Menghitung Persentase Return

Menghitung return merupakan langkah dasar dalam analisis performa saham.

import yfinance as yf

data = yf.download(
    "BBCA.JK",
    period="1y"
)

return_pct = (
    data["Close"].iloc[-1] -
    data["Close"].iloc[0]
) / data["Close"].iloc[0] * 100

print(f"Return = {return_pct:.2f}%")

Hasilnya memberikan gambaran seberapa besar perubahan harga selama periode tersebut.


Menghitung Return Harian

data["Daily Return"] = data["Close"].pct_change()

Kolom baru ini sering digunakan sebagai dasar untuk:

  • Volatilitas
  • Risk Analysis
  • Machine Learning
  • Backtesting

Menghitung Moving Average 20, 50, dan 200 Hari

Strategi yang umum digunakan investor adalah mengamati tiga garis Moving Average.

data["MA20"] = data["Close"].rolling(20).mean()

data["MA50"] = data["Close"].rolling(50).mean()

data["MA200"] = data["Close"].rolling(200).mean()

Interpretasi sederhananya:

  • MA20 menggambarkan tren jangka pendek.
  • MA50 menggambarkan tren menengah.
  • MA200 menggambarkan tren jangka panjang.

Banyak investor menggunakan kombinasi ini untuk membantu mengidentifikasi arah tren.


Menyimpan Semua Saham ke Folder

Jika ingin menyimpan setiap saham dalam file terpisah:

import os
import yfinance as yf

os.makedirs("data", exist_ok=True)

tickers = [
    "BBCA.JK",
    "BBRI.JK",
    "BMRI.JK"
]

for ticker in tickers:

    df = yf.download(
        ticker,
        period="5y",
        progress=False
    )

    filename = f"data/{ticker}.csv"

    df.to_csv(filename)

    print(f"Saved {filename}")

Struktur folder akan menjadi:

project/

├── data/
│   ├── BBCA.JK.csv
│   ├── BBRI.JK.csv
│   ├── BMRI.JK.csv
│   └── ...

Pendekatan ini memudahkan pengelolaan data historis untuk banyak saham.


Error yang Sering Terjadi

1. Ticker Tidak Ditemukan

Contoh:

No data found

Penyebab:

  • Salah penulisan ticker.
  • Lupa menambahkan .JK.
  • Saham sudah tidak tercatat di Yahoo Finance.

Solusi:

Gunakan ticker yang benar.

Contoh:

BBCA.JK

bukan

BBCA

2. Koneksi Internet Bermasalah

Jika koneksi terputus saat proses download, data tidak akan berhasil diambil.

Solusi:

  • Periksa koneksi internet.
  • Gunakan mekanisme retry pada aplikasi produksi.

3. Data Kosong

Kadang hasil yang diperoleh berupa DataFrame kosong.

Periksa terlebih dahulu:

if data.empty:
    print("Data tidak tersedia")

Langkah ini membantu mencegah error pada proses analisis berikutnya.


4. Yahoo Finance Membatasi Request

Jika mengunduh ratusan ticker dalam waktu singkat, Yahoo Finance dapat membatasi permintaan sementara.

Tips:

  • Beri jeda antar request (time.sleep()).
  • Unduh data secara bertahap.
  • Simpan hasil ke database atau file agar tidak perlu mengunduh ulang.

Tips Optimasi

Beberapa praktik yang saya gunakan saat membangun aplikasi analisis saham:

  • Simpan data ke CSV atau database agar tidak mengunduh berulang kali.
  • Perbarui data secara berkala menggunakan scheduler seperti cron atau Windows Task Scheduler.
  • Gunakan cache untuk mempercepat proses analisis.
  • Pisahkan proses pengambilan data dan proses analisis.
  • Validasi data sebelum diproses lebih lanjut.

Dengan pendekatan ini, aplikasi akan lebih efisien dan mudah dipelihara.


Keterbatasan yfinance

Walaupun sangat praktis, ada beberapa keterbatasan yang perlu diperhatikan:

  • Data berasal dari Yahoo Finance, bukan langsung dari Bursa Efek Indonesia.
  • Tidak ada jaminan ketersediaan data secara permanen.
  • Data intraday memiliki batasan periode.
  • Tidak dirancang untuk aplikasi trading frekuensi tinggi (high-frequency trading).
  • Perubahan pada layanan Yahoo Finance dapat memengaruhi fungsi library.

Untuk aplikasi produksi yang membutuhkan keandalan tinggi, pertimbangkan menggunakan penyedia data resmi atau API berbayar.


Kesimpulan

Library yfinance merupakan salah satu pilihan terbaik bagi siapa saja yang ingin belajar analisis saham menggunakan Python. Dengan beberapa baris kode, kita dapat mengambil data historis saham Indonesia, menyimpannya ke berbagai format, membuat visualisasi, hingga menghitung indikator teknikal sederhana.

Dalam artikel ini kita telah mempelajari:

  • Instalasi yfinance dan library pendukung.
  • Format ticker saham Indonesia dengan akhiran .JK.
  • Mengambil data historis berdasarkan periode atau rentang tanggal.
  • Mengunduh banyak saham sekaligus.
  • Menyimpan data ke CSV dan Excel.
  • Membuat grafik harga saham.
  • Menghitung Moving Average dan return.
  • Mengakses informasi perusahaan, dividen, serta stock split.
  • Menangani error yang umum ditemui.
  • Praktik terbaik untuk mengelola data saham dalam proyek Python.

Setelah menguasai dasar-dasar ini, Anda dapat melangkah ke tahap berikutnya seperti membangun stock screener, melakukan backtesting, membuat dashboard interaktif dengan Streamlit, atau menerapkan machine learning untuk analisis pasar.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *