Masz pytania lub problemy? Napisz w GitHub Discussions.

Endpoint CSV serwisu Frankfurter ładuje się bezpośrednio do DataFrame, co pozwala pobrać kursy jedną linijką kodu. Powodem, dla którego warto wybrać Frankfurter zamiast losowych notowań rynkowych, jest powtarzalność: wskaż konkretne źródło, a Twój notebook pozostanie audytowalny. Kursy historyczne nie podlegają cichym korektom, więc backtest wykonany dzisiaj da identyczny wynik jak rok temu.

Szybki start

Skieruj funkcję read_csv bezpośrednio na endpoint CSV:

import pandas as pd

df = pd.read_csv("https://api.frankfurter.dev/v2/rates.csv?base=usd&quotes=eur,gbp")

Otrzymujesz DataFrame date,base,quote,rate z 1 wierszem na walutę docelową.

Przeliczanie kwoty

Plik CSV zwraca kurs, a nie całkowitą przeliczoną kwotę. Pomnóż swoją kwotę przez kolumnę rate. Dla pojedynczej wartości skalarnej bez pandas odpytaj endpoint pojedynczego kursu za pomocą requests:

import requests

rate = requests.get("https://api.frankfurter.dev/v2/rate/usd/eur").json()["rate"]
total = 100 * rate

Wybór oficjalnego źródła

Domyślnie otrzymujesz kurs uśredniony ze wszystkich źródeł. Dodaj parametr providers, aby przypisać konkretną instytucję, co gwarantuje pełną audytowalność analiz.

df = pd.read_csv("https://api.frankfurter.dev/v2/rates.csv?base=usd&quotes=eur&providers=ecb")
ECB
Kurs referencyjny Europejskiego Banku Centralnego, standard dla podatku VAT i ceł w UE.
NBP
Narodowy Bank Polski. Polskie deklaracje VAT i CIT wymagają przeliczeń według kursu NBP.
CNB
Czeski Bank Narodowy, referencja dla czeskiej księgowości i podatków.
BCB
Banco Central do Brasil PTAX, referencja dla brazylijskich umów i podatków.
BANXICO
Kurs FIX Banco de México do regulowania zobowiązań w dolarach amerykańskich.

Zobacz wszystkie źródła. Wybrana instytucja działa według własnego harmonogramu publikacji, więc jej najnowszy kurs może być opóźniony o jeden dzień względem kursu rynkowego.

Szeregi historyczne

Użyj from dla zakresu dat oraz group=month, aby uzyskać 1 wiersz na miesiąc. Przekształć kolumnę daty, ustaw ją jako indeks i twórz wykresy. Tutaj Frankfurter pokazuje swoją wartość: długie, stabilne szeregi bez późniejszych korekt wstecznych.

df = pd.read_csv(
    "https://api.frankfurter.dev/v2/rates.csv?from=1949-12-01&base=usd&quotes=gbp&providers=bbk&group=month",
    parse_dates=["date"],
    index_col="date",
)
df["rate"].plot()

Pobiera to kurs dolara amerykańskiego do funta brytyjskiego aż do 1949 roku z archiwum Deutsche Bundesbank. Historyczne fixingi Bundesbanku obejmują dolara wobec marki niemieckiej od 1948 roku oraz większość innych kursów dolara od 1949 do 1970 roku. Od 1999 roku kontrolę przejmuje Europejski Bank Centralny; nowoczesne szeregi czasowe korzystają ze standardowego kursu łączonego lub providers=ecb.