pandas
FrankfurterのCSVエンドポイントはDataFrameに直接読み込めるため、1行でレートを取得できます。任意の市場レートではなくFrankfurterを使う理由は再現性にあります。公的機関を固定すれば、ノートブックの検証可能性と監査性が維持されます。過去データが後から修正されないため、今日実行したバックテストは1年前と全く同じ結果になります。
クイックスタート
read_csvでCSVエンドポイントを直接指定します:
import pandas as pd
df = pd.read_csv("https://api.frankfurter.dev/v2/rates.csv?base=usd"es=eur,gbp")対象通貨ごとに1行のdate,base,quote,rateを持つDataFrameが返されます。
金額の換算
CSV出力は換算後の総額ではなく為替レートを返します。金額にrate列を掛け合わせてください。pandasを使わずに単一の値を取得する場合は、requestsを使用してレート用エンドポイントを呼び出します:
import requests
rate = requests.get("https://api.frankfurter.dev/v2/rate/usd/eur").json()["rate"]
total = 100 * rate特定の公的機関を指定
デフォルトでは全提供元を組み合わせた合成レートが返されます。監査性を保つために特定の機関を指定するにはprovidersを追加します。税務や会計では自国の中央銀行レートが必要とされることが多いためです。
df = pd.read_csv("https://api.frankfurter.dev/v2/rates.csv?base=usd"es=eur&providers=ecb")ECB- 欧州中央銀行の基準レート。EUのVATおよび関税の公式基準。
NBP- ポーランド国立銀行。ポーランドの税務申告で使用。
CNB- チェコ国立銀行。チェコの会計および税務の公式基準。
BCB- ブラジル中央銀行PTAX。ブラジルの契約および税務の公式基準。
BANXICO- メキシコ銀行の米ドル債務決済用FIXレート。
すべての提供元を確認できます。特定の提供元を指定した場合、その機関の公表スケジュールに従うため、最新レートが合成レートより1日遅れる場合があります。
過去の推移データ
期間指定にはfromを使用し、group=monthで月ごとに集約します。日付列をパースしてインデックスに設定し、可視化に利用します。過去データが後から修正されないため、分析の再現性が保たれます。
df = pd.read_csv(
"https://api.frankfurter.dev/v2/rates.csv?from=1949-12-01&base=usd"es=gbp&providers=bbk&group=month",
parse_dates=["date"],
index_col="date",
)
df["rate"].plot() これはドイツ連邦銀行(ブンデスバンク)のアーカイブから1949年以降の米ドル対英ポンドのレートを取得します。連邦銀行のFixingデータは、1948年からの米ドル対ドイツマルク、および1949年から1970年までの主要通貨レートを網羅しています。1999年以降は欧州中央銀行が引き継いでおり、現代の連続した時系列には標準の合成レートまたはproviders=ecbを使用します。