Where today’s exchange rates come from
Every day your organisation trades in more than one currency, it needs a rate for each of them. A rate can arrive in one of two ways: a file your rate provider sends, or a number someone keys on the rate matrix.
The rate a day is priced at
A rate arrives provisional. Anything posted during the day converts at that provisional rate, and each posting remembers that it did.
At end of day the provisional rates become final, and anything posted against a provisional rate is restated to the final one. The difference is posted as a correction, so the day closes on the rate your provider actually published rather than the one you opened with.
If no new rate arrives, yesterday’s final rate carries into today as today’s provisional rate. Nothing stops, and nobody has to key anything.
stateDiagram-v2
[*] --> Provisional: a file arrives, or someone keys a rate
Provisional --> Final: end of day
Final --> Provisional: carried into tomorrow
Reading a file from your rate provider
When a rate feed is set up, end of day reads the file that arrived for that business date and sets each currency’s provisional rate from it.
Each line names a currency by its three-letter ISO 4217 code — EUR, USD, GBP. A line for a currency your organisation does not hold stops the day and names the line, rather than being ignored quietly.
The file’s own date is read but not used. A rate is stored against the business date the file was uploaded for, so uploading Tuesday’s file against Tuesday prices Tuesday whatever date the file itself carries.
What a fed rate means
Rate providers do not agree on which way round to quote. Your organisation tells the platform which convention its provider uses, on the Rate feed panel above the rate matrix.
| Setting | What a line saying 1.0734 means |
|---|---|
| Currency units per one base unit | 1.0734 of that currency buys one base unit |
| Base units per one currency unit | 1.0734 base units buy one of that currency |
Set this once, when the feed is set up. Set it wrongly and every rate is stored upside down, which shows on the rate matrix straight away.
When a currency is missing from the file
Your organisation also chooses what happens when a file does not price every currency.
- Require every active currency. A file missing one stops the day and names what is missing. Use this when the provider is contracted to price your whole book, and a gap means something went wrong upstream.
- Do not require every currency. A missing rate carries yesterday’s forward. Use this when the provider prices only some of what you hold.
Only currencies that are switched on are counted. Switching a currency off stops it holding up tomorrow’s file.
If you require every currency, key a rate on the matrix for any new currency before its first end of day. Otherwise the first file that omits it will stop the day.
When no file arrives
| When | What happens |
|---|---|
| The first day of a run, and no file | The day stops. Upload the file, then start again. |
| A later day of a run, and no file | That day is skipped, and yesterday’s rates carry forward. |
| No feed is set up at all | The step is skipped and says so. Rates come from the matrix. |
| The feed is switched off | The step is skipped and says so. |
The last two read differently on purpose: one sends you to the feeds page to set a feed up, the other to switch the one you have back on. Either way you can see on the day’s run why no file was read.
A worked example
Your organisation’s base currency is EUR and its provider quotes currency units per one base unit.
Tuesday opens with USD carried forward at 1.0700. A receipt of USD 10,000 is posted during the day, and converts at that provisional rate to EUR 9,345.79.
Tuesday’s file then delivers USD 1.0734. At end of day the rate becomes final and the receipt is restated to EUR 9,316.19 — a correction of EUR 29.60 against the day.
Rehearsing a day without a provider
A demonstration or training environment has no rate provider sending files. On those environments end of day writes a file of its own before reading one: it takes each currency’s carried rate, moves it by up to one percent, and delivers the result as a file in exactly the format the provider would have sent.
The file is written in the provider’s own convention, so a rehearsal exercises the same reading your live environment does. It is named so you can tell it apart from a real one, and it is kept, so you can always see what a rehearsed day was priced off.
A currency that has never had a rate is not rehearsed — there is nothing to move, and inventing a starting rate would price the day off a number nobody published. Key its first rate on the matrix.
If a file is already there for that date, nothing is rehearsed. A file someone uploaded always wins.
Related
- Changing a rate — interest rates on an account, which are a different thing from exchange rates.
- Market data feeds — describing the shape of a provider’s file.