← Back to list

Analisa Data Saham dengan yfinance dan Python

Sumber data saham gratis untuk algoritmik trading

Wima S.Y · 2026-03-09 09:02 · 0 claps · 5.6 min read
#bahasa-indonesia #indonesia #saham #yfinance
Open on Medium ↗

Analisa Data Saham dengan yfinance dan Python

Sumber data saham gratis untuk algoritmik trading

Photo by Logan Voss on Unsplash

Photo by Logan Voss on Unsplash

Yahoo Finance, adalah layanan dari Yahoo yang menyediakan data finansial, seperti saham dan crypto.

Awalnya Yahoo menyediakan API gratis, tapi sejak 2017 layanan API tersebut dihentikan. Saat ini Yahoo Finance hanya tersedia dalam bentuk web saja.

Pengambilan data historis masih bisa dilakukan, tapi dengan cara browsing download dan save. File yang di download dalam bentuk CSV.

Ran Arrousi, seorang developer open source, membuat library yfinance untuk bisa melakukan akses data-data yang tersedia di Yahoo Finance, secara gratis.

yfinance adalah proyek library python open source untuk mengambil data-data historis dari Yahoo Finance, yang mudah digunakan dan mempunyai granularitas data yang cukup baik. Data pasar bisa didapatkan dengan periode 1 menit, hingga 3 bulan.

yFinance sesuai untuk digunakan keperluan riset pribadi skala kecil atau untuk belajar trading algoritmik dan analisa finansial.

yfinance API

yfinance banyak dipakai dalam finansial kuantitatif, algoritmik trading, dan riset-riset finansial lain, karena selain gratis, data-data keuangan seperti harga saham, kripto, etf, index, fundamental perusahaan dapat dengan mudah diambil untuk kemudian diolah dengan librari Python.

Python menjadi bahasa pemrograman yang sangat populer untuk analisa finansial, dan yfinance dapat dengan mudah diintegrasikan library python seperti pandas, numpy, matplotlib, scikit-learn.

Penggunaan

Sama seperti library python lain, yfinance perlu di install menggunakan paket manager, setelah itu, modul library perlu di import untuk dipakai.

pip install yfinance
import yfinance as yf

Ticker

Ticker adalah kode pendek, atau simbol yang digunakan untuk identifikasi aset. yfinance menggunakan ticker untuk identifikasi aset yang akan diambil datanya.

Contoh ticker seperti TSLA AAPL MSFT, sedangkan untuk saham-saham IHSG, diakhiri oleh tanda .JK, seperti BBCA.JK, BMRI.JK, BBRI.JK.

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

Untuk mengambil data beberapa saham sekaligus, digunakan Tickers.

data = yf.Ticker("BBCA.JK BMRI.JK BBRI.JK")

Data finansial

yfinance menyediakan class yang akan menampilkan data-data finansial umum. Penamaan class cukup jelas, dan mewakili fungsinya.

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

#info emiten
data.info

# data dividends, splits
data.actions

# data dividen
data.dividends

# data finansial
data.financials
data.quarterly_financials

# data neraca
data.balance_sheet
data.quarterly_balance_sheet

Berita

Yahoo Finance menyediakan berita-berita terkait emiten saham. Walaupun mungkin untuk saham-saham Indonesia, berita ini sangat terbatas, tapi mungkin bisa dimanfaatkan.

data=yf.Ticker("BMRI.JK")
news=data.news

for item in news:
    title = item.get('content')['title']
    print(title)

Ini hanya akan menampilkan judul berita saja, nantinya bisa langsung dicari di Yahoo Finance.

Target

Yahoo Finance menyediakan informasi target harga dan rekomendasi dari analis untuk saham tertentu.

import yfinance as yf

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

target = data.analyst_price_targets

high_target = target['high']
low_target = target['low']
mean_target = target['mean']

print("High target: ", high_target)
print("Mean target: ", mean_target)
print("Low target: ", low_target)

Untuk rekomendasi analis :

ratings = data.recommendations

strong_buy = ratings['strongBuy'].iloc[0]
buy = ratings['buy'].iloc[0]
hold = ratings['hold'].iloc[0]
sell = ratings['sell'].iloc[0]
strong_sell = ratings['strongSell'].iloc[0]

print("Strong Buy :", strong_buy)
print("Buy: ", buy)
print("Hold: ", hold)
print("Sell: ", sell)

yfinance dapat dengan mudah diintegrasikan dengan library yang lain. Misalkan, rekomendasi analis akan di visualisasikan dalam bentuk stacked bar chart.

import matplotlib.pyplot as plt

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

ratings = data.recommendations

period = ratings.iloc[0][['strongBuy', 'buy', 'hold', 'sell', 'strongSell']]

labels = period.index
values = period.values.astype(int) 
colors = ['skyblue', 'lightgreen', 'orange', 'salmon', 'darkred']

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

bottom = 0

for i in range(len(labels)):
    plt.bar('Period 0', values[i], bottom=bottom, color=colors[i], label=labels[i])
    bottom += values[i]

plt.title('Rekomendasi Analis')
plt.xlabel('Periode')
plt.ylabel('Jumlah Rekomendasi')
plt.xticks(rotation=0)
plt.legend(title='Rekomendasi')
plt.tight_layout()
plt.show()

Stacked Chart untuk rekomendasi analis

Stacked Chart untuk rekomendasi analis

Download

Ini adalah class utama dari yfinance, mengambil data harga CHLOV (Close High Low Open Volume).

Untuk pengambilan data, disediakan beberapa pilihan, mode periode, mode interval dan range waktu.

Mode periode, tersedia dalam 1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max. ytd adalah year to date, artinya diambil mulai awal tahun sampai tanggal pengambilan data, dan max adalah data maksimal yang tersedia pada yahoo finance.

Interval adalah jarak data atau granulasi, tersedia dalam interval 1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo

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

Data periode 1 tahun

Data periode 1 tahun

dengan interval :

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

Data periode 1 tahun interval 1 minggu

Data periode 1 tahun interval 1 minggu

Range

Mode range adalah pengambilan data dari periode tertentu sesuai dengan kebutuhan. Mode ini ditentukan dengan parameter start dan end.

data=yf.download("BBCA.JK",start="2025-01-01",end="2025-02-01")

Data dengan menggunakan start end

Data dengan menggunakan start end

Parameter interval juga bisa digunakan untuk dalam mode range.

data=yf.download("BBCA.JK",start="2025-01-01",end="2025-02-01", interval="1wk")

Data start end dengan interval

Data start end dengan interval

Pengolahan lanjutan

yfinance menghasilkan keluaran array, masing-masing elemen, Close, High, Low, Open dan Volume bisa kita manfaatkan dengan fleksibel.

print(data['Close'])

Data Close

Data Close

Begitu juga jika diambil beberapa saham sekaligus.

data=yf.download("BBCA.JK BBRI.JK BMRI.JK",start="2025-01-01",end="2025-02-01")

Untuk mendapatkan harga salah satu saham :

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

Visualisasi

Data yang didapat dari yfinance, dapat dengan mudah di visualisasikan dengan menggunakan matplotlib

Misalkan akan dibuat visualisasi harga close BBCA.JK dalam satu tahun.

import matplotlib.pyplot as plt

data=yf.download("BBCA.JK",start="2025-01-01",end="2025-12-31")
close_prices = data['Close']

plt.figure(figsize=(12, 6))
plt.plot(close_prices)
plt.title('Close BBCA.JK')
plt.xlabel('Date')
plt.ylabel('Close Price')
plt.grid(True)
plt.tight_layout()
plt.show()

Chart dengan data Close

Chart dengan data Close

Untuk beberapa saham, dapat dengan mudah ditampilkan dalam satu chart yang sama, misalkan digunakan untuk memperbandingkan.

import matplotlib.pyplot as plt
data=yf.download("BBCA.JK BMRI.JK BBRI.JK BBTN.JK",start="2025-01-01",end="2025-12-31")

close_data = data['Close']
plt.figure(figsize=(14, 8))
close_data.plot(ax=plt.gca())

plt.title('Closing Prices for Multiple Tickers')
plt.xlabel('Date')
plt.ylabel('Close Price')
plt.grid(True)
plt.legend(title='Ticker')
plt.tight_layout()
plt.show()

Chart Close beberapa saham

Chart Close beberapa saham

Pandas

Berikutnya, data dari yfinance akan diolah dengan menggunakan pandas dataframe.

Dalam contoh akan dihitung moving average dari saham, dan akan di visualisasikan.

Untuk menghitung moving average digunakan fasilitas dari pandas, yaitu meotde rolling(), dan diikuti dengan mean(). Pandas akan secara otomatis melakukan perhitungan rata-rata pada periode tertentu dengan data point yang berpindah atau rolling pada data.

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

Dalam contoh digunakan rolling window 20, artinya moving average atau rata rata dihitung setiap pada periode 20 hari.

import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt

data = yf.download("BMRI.JK", start="2023-01-01", end="2026-01-01")

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

plt.figure(figsize=(10,5))
plt.plot(data["Close"], label="Close Price")
plt.plot(data["MA20"], label="MA 20", linestyle="--")
plt.title("BMRI - 20-day Moving Average")
plt.legend()
plt.show()

Chart Close saham dengan MA 20

Chart Close saham dengan MA 20

Keterbatasan yfinance

yfinance adalah proyek opensource dan bukan merupakan API resmi dari Yahoo. Sehingga tidak cocok digunakan untuk keperluan profesional.

yfinance sebenarnya adalah sebuah web scrapper yang mengambil data dari website Yahoo Finance, data yang dihasilkan bisa jadi bukan data real time.

Jika ada perubahan sewaktu-waktu pada website Yahoo, akan memungkinkan terjadi kesalahan, dan untuk perbaikannya biasanya menunggu maintainer.

Selain itu penggunaan yfinance juga ada resiko request kita terblocking, jika request dilakukan frekuensi cukup tinggi dan volume yang besar. Ini biasanya karena ada rate limit yang dilakukan oleh server Yahoo.

Yang paling penting adalah, yfinance tidak mendapatkan support resmi dari Yahoo, jadi ketika terjadi kesalahan data, error dan masalah lain, kita tidak bisa komplain ke Yahoo.

Untuk keperluan profesional, disarankan menggunakan API berbayar.

Penutup

yfinance adalah library python yang sangat berguna untuk mendapatkan data keuangan suatu saham secara otomatis.

Untuk menggunakannya diperlukan pengetahuan tentang programming python, terutama untuk menangani data tabel dua dimensi.

yfinance dapat dengan mudah diintegrasikan dengan library yang lain, sehingga jika dibuat sebuah pipeline trading algoritmik seperti :

Data saham — indikator — signal — backtest — strategi — visualisasi.

Dapat dengan mudah diimplementasikan dengan yfinance, pandas, numpy, matplotlib

Untuk penggunaan machine learning bisa ditambahkan scikit-learn pada pipeline, atau alur kerja.

yfinance sesuai untuk keperluan prototipe dan personal saja. Kelengkapan dan akurasi data tidak ada yang menjamin.

Untuk produksi profesional, disarankan tetap menggunakan sumber data berbayar yang resmi.


메타데이터
post_id
937829d1ca4d
slug
analisa-data-saham-dengan-yfinance-dan-python-937829d1ca4d
url
https://medium.com/@wimasy/analisa-data-saham-dengan-yfinance-dan-python-937829d1ca4d
canonical_url
https://medium.com/@wimasy/analisa-data-saham-dengan-yfinance-dan-python-937829d1ca4d
author_url
https://medium.com/@wimasy
status
ok
fetched_at
2026-07-11 05:10:20