Fed Foreign Exchange Rates
AvailableDaily noon buying rates in New York for 24 currencies, arriving with the Fed's weekly release.
The Federal Reserve's H.10 release: the noon buying rate in New York for 24 currencies, one row per business day. Each pair is named by market convention, so EURUSD is dollars per euro and USDJPY is yen per dollar.
The Fed publishes H.10 once a week, so a rate reaches your algorithm up to a week after it was set. Use these for slower signals, and the euro reference rates when you need a rate the same day. These are not prices you can trade.
How the data works
- Pairs are AUDUSD, EURUSD, GBPUSD, NZDUSD, and USD plus BRL, CAD, CHF, CNY, DKK, GRD, HKD, INR, JPY, KRW, LKR, MXN, MYR, NOK, SEK, SGD, THB, TWD, VES or ZAR.
- H.10 comes out on Mondays at 16:15, or the next business day when Monday is a federal holiday. The week's rows arrive one minute apart, oldest first, so each reaches on_data separately. Use r.date for the day a rate was set, because self.time is when it was released.
- The Fed paused the weekly release from May 2006 to January 2009. The same Monday rule is used for those years, so the arrival times there may differ from when rates became public.
- There's no row on days the Fed has no data, such as US holidays.
- With daily forex bars, trade when the bar arrives rather than on the rate's row, as the example does. An order placed on the row fills at the previous bar's price, which flatters results.
- USDVES has been restated for Venezuela's redenominations and still jumps at later devaluations, such as February and August 2018. USDGRD ends in December 2000, when Greece joined the euro.
- Rates are as published, including the odd bad print: USDDKK on 27 November 2000 looks like a typo.
- This dataset is a snapshot to 23 October 2026, and doesn't update yet.
Fields
3 columns| Field | Description |
|---|---|
| available_time | When the row becomes visible to an algorithm: the Fed's next weekly release |
| date | Day the rate was set |
| rate | Units of the second currency per unit of the first. Also the row's value |
Example algorithm
# region imports
from AlgorithmImports import *
# endregion
from lean_platform_data import FedFxRate
class SterlingTrendAlgorithm(QCAlgorithm):
def initialize(self):
self.set_start_date(2008, 1, 1)
self.set_end_date(2018, 12, 1)
self.set_cash(100000)
self.gbpusd = self.add_forex("GBPUSD", Resolution.DAILY, Market.OANDA).symbol
# A week's rows arrive a minute apart from 16:15 New York time on the next Monday.
self.rate = self.add_data(FedFxRate, "GBPUSD").symbol
self.average = SimpleMovingAverage(100)
self.latest = None
def on_data(self, slice):
if self.rate in slice:
self.latest = slice[self.rate].rate
self.average.update(self.time, self.latest)
# Trade on the forex bar, which closes after the release, not on the rate's own row:
# an order placed then would fill at the previous bar's price.
bar = slice.quote_bars.get(self.gbpusd)
if bar is None or bar.is_fill_forward or not self.average.is_ready:
return
# Hold sterling while the Fed's rate is above its 100-day average.
above = self.latest > self.average.current.value
if above and not self.portfolio.invested:
self.set_holdings(self.gbpusd, 1)
elif not above and self.portfolio.invested:
self.liquidate(self.gbpusd)
Public data from the Board of Governors of the Federal Reserve System.