Skip to main content

Python package for Swiss financial data

Project description

swiss-finance-data

Python package for Swiss financial data — official sources, clean API

PyPI version Tests Coverage License Python Downloads


Why swiss-finance-data?

Accessing Swiss financial data in Python is fragmented. Existing tools focus on US/global markets and provide limited support for Swiss-specific datasets.

swiss-finance-data aims to provide:

  • A unified, clean API for Swiss financial data
  • Official government data sources — no scraping
  • Extensible provider architecture
  • Long-term maintainability

Scope

swiss-finance-data focuses on:

  • Official and legally reusable data sources
  • Clean abstraction over data providers
  • Stability and long-term maintainability
  • Swiss-specific financial datasets

It does not aim to replace global data providers such as yfinance, but to complement them for Swiss markets.


Features

v0.4.0 — Available now:

  • SNB Policy Rate — Current and historical Swiss National Bank policy rates
  • SARON — Monthly average and daily fixing, the CHF risk-free reference rate (replaces LIBOR)
  • CHF FX Rates — EUR, USD, GBP, JPY, CAD, AUD, SEK, NOK, DKK vs CHF
  • Swiss CPI — Consumer Price Index and YoY inflation rate (data since 1921)
  • SMI Equities — All 20 Swiss Market Index constituents, prices and returns
  • Provider Architecture — Extensible system for multiple data sources
  • Tested & documented — 84% unit test coverage, 74 tests
  • Reliable — Official Swiss government data sources, no scraping
  • Robust error handling — Clear messages for invalid date ranges and future dates

Installation

pip install swiss-finance-data

Requirements: Python 3.10+

Requires internet access — data is fetched live from official sources.


Quick Start

from swiss_finance import SNB, FX, CPI, SMI

# SNB Policy Rate
rate = SNB.get_policy_rate()
print(f"SNB Policy Rate: {rate}%")

# SARON — CHF risk-free rate (monthly and daily)
saron = SNB.get_saron()
rf_daily = SNB.get_saron_daily() / 100 / 252  # daily risk-free rate
print(f"SARON: {saron}%")

# CHF Exchange Rates
eur_chf = FX.get_rate("EUR")
print(f"EUR/CHF: {eur_chf}")

# Swiss CPI and inflation
inflation = CPI.get_inflation_yoy()
print(f"Inflation YoY: {inflation.iloc[-1, 0]:.2f}%")

# SMI equities
prices = SMI.get_prices()           # current prices for all 20 constituents
returns = SMI.get_returns(period="1y")  # daily returns
hist = SMI.get_historical_prices(
    tickers=["NESN.SW", "ROG.SW", "NOVN.SW"],
    start="2023-01-01"
)

API Documentation

SNB Policy Rate

SNB.get_policy_rate(provider='snb_official') -> float
SNB.get_historical_rates(start='YYYY-MM', end='YYYY-MM') -> pd.DataFrame
SNB.list_providers() -> list

SARON

SNB.get_saron() -> float                                        # monthly average
SNB.get_historical_saron(start='YYYY-MM', end='YYYY-MM') -> pd.DataFrame
SNB.get_saron_daily() -> float                                  # latest daily fixing
SNB.get_historical_saron_daily(start='YYYY-MM-DD', end='YYYY-MM-DD') -> pd.DataFrame

FX — CHF Exchange Rates

Supported currencies: EUR, USD, GBP, JPY, CAD, AUD, SEK, NOK, DKK

FX.get_rate(currency='EUR') -> float
FX.get_historical_rates(currency='EUR', start='YYYY-MM', end='YYYY-MM') -> pd.DataFrame
FX.list_currencies() -> list

CPI — Swiss Consumer Price Index

CPI.get_current() -> float                                      # latest index value
CPI.get_historical(start='YYYY-MM', end='YYYY-MM') -> pd.DataFrame
CPI.get_inflation_yoy(start='YYYY-MM', end='YYYY-MM') -> pd.DataFrame

SMI — Swiss Market Index Equities

SMI.get_constituents() -> dict                                  # {ticker: company_name}
SMI.get_prices() -> pd.DataFrame                                # current prices, all 20
SMI.get_historical_prices(
    tickers=['NESN.SW', 'ROG.SW'],  # optional, default: all 20
    period='1y',                     # ignored if start/end provided
    start='YYYY-MM-DD',
    end='YYYY-MM-DD'
) -> pd.DataFrame
SMI.get_returns(tickers=None, period='1y', start=None, end=None) -> pd.DataFrame

SMI constituents: NESN, ROG, NOVN, UBSG, ZURN, ABBN, SREN, GIVN, LONN, SIKA, GEBN, SLHN, SCMN, HOLN, PGHN, CFR, ALC, SDZ, STMN, VACN

Error handling

from swiss_finance import SNB, FX, CPI, SMI, SNBAPIError, DataValidationError

try:
    rate = SNB.get_policy_rate()
except SNBAPIError as e:
    print(f"Failed to fetch data: {e}")

try:
    rates = SNB.get_historical_rates(start='2030-01')
except DataValidationError as e:
    print(f"Invalid date range: {e}")

Data Sources

Source Dataset License
Swiss National Bank SNB Policy Rate SNB Open Data terms
Swiss National Bank SARON monthly avg (2009+) SNB Open Data terms
Swiss National Bank SARON daily fixing (2009+) SNB Open Data terms
Swiss National Bank CHF FX Rates (monthly, 1999+) SNB Open Data terms
Swiss National Bank Swiss CPI (monthly, 1921+) SNB Open Data terms
Yahoo Finance SMI equities (via yfinance) Yahoo Finance ToS

Development

Setup

git clone https://github.com/EMen11/swiss-finance-data.git
cd swiss-finance-data
pip install -e .[dev]

Run tests

pytest --cov=swiss_finance tests/

API Stability

  • v0.x — API may evolve based on feedback
  • v1.0+ — Stable public API with backward compatibility guaranteed
  • Versioning follows Semantic Versioning (SemVer).

Roadmap

  • v0.1.0 — SNB policy rates
  • v0.1.1 — Improved error handling and date validation
  • v0.2.0 — SARON monthly + CHF FX rates
  • v0.3.0 — SARON daily + Swiss CPI + inflation
  • v0.4.0 — SMI equities (20 constituents, prices, returns)
  • v0.5.0 — Swiss government bonds
  • v1.0.0 — Stable API, full documentation

Changelog

See CHANGELOG.md for full version history.


License

MIT License — see LICENSE for details.


Author

Elie Menassa

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

swiss_finance_data-0.4.0.tar.gz (20.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

swiss_finance_data-0.4.0-py3-none-any.whl (20.6 kB view details)

Uploaded Python 3

File details

Details for the file swiss_finance_data-0.4.0.tar.gz.

File metadata

  • Download URL: swiss_finance_data-0.4.0.tar.gz
  • Upload date:
  • Size: 20.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for swiss_finance_data-0.4.0.tar.gz
Algorithm Hash digest
SHA256 d4e4c4f720dab40f3aaa6504e0b3a949b7d486c359390c667779addc87564cf1
MD5 c5b97092afff6f1722173fb7a4c9d771
BLAKE2b-256 b090723a15ab38aad496ea92ae4d79849fbd331d16772b96a57697c355ee0163

See more details on using hashes here.

File details

Details for the file swiss_finance_data-0.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for swiss_finance_data-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 489f6715bf55030ebde21dca7cd622d1b8e05e915ea0d02b2f8e824f4e0c3372
MD5 6862053f10c6f7dab323842b2dda5052
BLAKE2b-256 55467b954d9723364709a24fcdfab6e4739a38d706275fb2ff8a9381bc278424

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page