ForHosting KIT · Finance & money

Forward premium calculator

A spot rate of 1.20 and a 90-day forward of 1.23 differ by 0.025, which annualizes to a forward premium of 0.10, or 10% a year on a 360-day basis. A forward below spot shows as a discount. Free in your browser.

  • Free
  • Runs in your browser
  • No sign-up
  • Your data stays on your device
Use it from WebAPIEmailTelegramApp soon
If you enter
Spot rate
1.2
Forward rate
1.23
Days
90
You get
Year basis
360
Raw premium
0.025
Premium
0.1
Premium percent
10

The annualized forward premium (or discount) measures how far a forward foreign-exchange rate sits above or below the matching spot rate, scaled to a 360-day money-market year so tenors of different length can be compared. Treasurers, FX desks, and exam candidates need that figure as a decimal they can drop into a model, not a percent they have to remember to divide by one hundred. This forward premium calculator accepts a finite spot rate, a finite forward rate, and a positive contract tenor in days, then returns p equals (F minus S) over S times 360 over days. When the spot rate is zero the identity is undefined; when days is not positive there is no tenor to annualize.

What the annualized forward premium means and how the 360-day formula works

The annualized forward premium is the money-market way to quote how much a forward foreign-exchange rate differs from the spot rate on a comparable yearly basis. A ninety-day forward that sits two and a half percent above spot is not a two-and-a-half percent annual premium: it is a ten percent annualized premium because that two-and-a-half percent would accrue four times in a 360-day year.

The identity this calculator evaluates is p equals (F minus S) divided by S, times 360 divided by days, where F is the outright forward, S is the spot, and days is the remaining contract tenor. The 360-day year is the FX and money-market convention used in CFA-style forward-premium questions and on most dealer blotters; it is not a 365-day calendar year and it is not an actual-over-actual day-count.

A positive p means the forward is above spot (a forward premium); a negative p means the forward is below spot (a forward discount); a zero p means the two rates are equal (par). The result is a decimal, so 0.10 is ten percent per year, matching how interest rates enter a spreadsheet. This page does not imply covered-interest parity, does not interpolate a forward curve, and does not convert pips into an outright; it only annualizes the simple relative gap (F minus S) over S.

Where a forward premium calculator earns its keep

FX desks and corporate treasuries use a forward premium calculator when they need a single annualized number to compare a one-month outright with a three-month outright, or to explain why a quoted forward is at a premium or a discount versus spot. Exam-prep generators and CFA-style homework need a deterministic oracle that rejects a zero spot and a non-positive tenor instead of silently showing Infinity that a buggy grader might treat as success.

Keep requests small, pin rounded premium in tests, and you get reproducible forward-premium figures for worksheets, LMS plugins, and edge workers without standing up a spreadsheet service of your own. When you later need a discount rate from present and future value, switch to that identity rather than stretching this three-field FX contract.

Compare outrights of different tenor on one annualized scale

Turn a spot, a forward, and remaining days into a signed decimal premium so a 30-day outright and a 90-day outright can be ranked on the same 360-day year.

Classroom and CFA-style answer keys

Generate reproducible p = ((F − S) / S) × (360 / days) keys that reject a zero spot and a non-positive tenor instead of printing Infinity.

How is the annualized forward premium calculated?

The identity is p = ((F − S) / S) × (360 / days), where F is the outright forward, S is the spot, and days is the contract tenor.

Why does it use a 360-day year?

It is the money-market convention used for FX forwards on most dealer blotters and in CFA-style questions. It is not a 365-day calendar year or an actual-over-actual day count, so results match how desks quote.

What does a negative result mean?

The forward is below spot, so it trades at a forward discount. A positive result is a forward premium, and zero means the two rates are equal, which is called par.

Do I enter the contract length in days or years?

In calendar days left to settlement. A 90-day forward is entered as 90, not as 0.25 years. The tenor must be greater than zero, otherwise there is nothing to annualize.

Does it apply interest rate parity?

No. It only annualizes the simple relative gap between forward and spot. It does not imply covered interest parity, build a forward curve or convert pips into an outright rate.

Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.

POSThttps://api.kit.forhosting.com/fin/forward-premium

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.

curl -X POST https://api.kit.forhosting.com/fin/forward-premium \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"spot_rate":1.2,"forward_rate":1.23,"days":90}'
{
  "spot_rate": 1.2,
  "forward_rate": 1.23,
  "days": 90
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "fin.forward_premium",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.

Per request$0.002

Published price — no tokens, no invented credits. A failed task is never charged.

HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

Those cases fail with invalid_input and are not billed.

Input contract, zero spot, non-positive days, and the response shape

The two contracted domain errors are a spot rate of zero and a tenor that is not positive. Finite negative forwards are allowed: the formula is a relative gap, and a negative premium is a discount, not an error. Failed validation does not consume balance. POST a JSON body with three required finite numbers. spot_rate is the current outright spot (aliases spot, S, and spot_price). forward_rate is the outright forward for the contract tenor (aliases forward, F, fwd, and forward_price). days is the contract tenor in calendar days remaining to settlement (aliases contract_days, tenor_days, n, and days_to_maturity) and must be strictly greater than zero; a ninety-day forward uses 90, not 0.25 years. Each field may arrive as a JSON number or a numeric string; missing fields, empty strings, infinities, and non-numeric values fail with invalid_input naming the field and are not billed. On success the body echoes the three inputs, reports year_basis as 360, returns raw_premium as the unannualized (F minus S) over S, premium as the annualized decimal, premium_percent as that decimal times one hundred, kind as premium, discount, or par, and a formula string restating the identity. Example: spot 1.20, forward 1.23, days 90 yields raw_premium 0.025 and premium 0.10.

Where a forward premium calculator earns its keep

Product teams wire the same contract into onboarding demos so a user who types 1.20, 1.23, and 90 sees the identical premium the API will later return in production tests.

Product demos and CI fixtures

Seed comparison widgets and automated tests with deterministic premium values that match the free browser widget byte-for-byte.

Is the result a percent or a decimal?

A decimal. A premium of 0.10 means a ten percent annualized forward premium, not ten percent written as the integer ten. premium_percent is the same figure times one hundred for display.

What happens if the spot rate is zero?

The task fails with invalid_input. When the spot rate is zero, (F − S) / S is undefined, so the identity cannot be evaluated and the call is not billed.

What if the contract days are zero or negative?

The task fails with invalid_input. days must be a finite number greater than zero; a zero or negative tenor cannot be annualized onto a 360-day year and is not billed.

What does the forward premium calculator cost?

The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.

Read the full KIT documentation →