Implied volatility calculation - smile
If you need implied volatilities for expiry dates that are not listed, you can use the "implied volatility surface" endpoint to calculate this.
What is this endpoint for?
The IV Smile endpoint lets you calculate volatility on a minute-by-minute basis from options market prices. The endpoint returns a volatility curve for a specific expiry date.
You can get volatility estimates by providing the following information:
The calculation methodology leverages space interpolation.
Currently supported assets and exchanges:
BTC, ETH, SOL, MATIC, XRP on Deribit.
BTC, ETH on Deribit & OKX (aggregated).
If you need data from other exchanges, we can add them on request.
Short listed-maturities (e.g. 7 days time-to-maturity) are only available for individual exchanges.
Endpoint
Copy https://{eu/us}.market-api.kaiko.io/v2/data/analytics.v2/implied_volatility_smile
Path Parameters
Parameter
Required?
Example
Choose between eu
and us
.
Query Parameters
Parameter
Required
Description
Example
The desired base as the underlying of the options.
See supported assets above.
The desired quote as the underlying of the options.
usd
or usdc
The time at which to compute implied volatilities
The time t should be smaller than the expiry T
The expiry for which the implied volatilities are to be computed
Must be an existing expiry on the selected exchange and tradable at the time of the computation.
Yes, if neither forward_log_moneynesses
nor deltas
parameters are used.
The strike prices for which the implied volatilities are to be computed. Strike prices can be existing or non-existing ones (space interpolation included)
Either strikes
or forward_log_moneynesses
or deltas should be filled.
singular: 10000
plural: 10000,15000,20000
Yes, if neither strikes
nor deltas
parameters are used.
The forward log moneyness for which the implied volatilities are to be computed.
Either strikes, forward_log_moneynesses
or deltas
should be filled.
singular: 1
plural: -1,-0.5,0,0.5,1
Yes, if neither forward_log_moneynesses
nor strikes
parameters are used.
The delta levels (of a Call option) for which the implied volatilities are to be computed.
Either strikes, forward_log_moneynesses
or deltas
should be filled.
The desired exchange as source of options data.
See supported exchanges above.
Fields
The associated time to expiry in year
The list of requested implied volatilities
[{"strike": 40000,
"forward_log_moneyness": 0.7348555803648208,
"implied_volatility": 0.7341747093260883,
"delta": 0.04334612697660922,
"gamma": 0.000012437991693543254},
{"strike": 20000,
"forward_log_moneyness": 0.041708399804875465,
"implied_volatility": 0.6670092468551713,
"delta": 0.5223606946028295,
"gamma": 0.00005929353471794603}, ... ]
The first derivative of the price with regards to the underlying price.
The second derivative of the price with regards to the underlying price.
The underlying spot price at the value timestamp.
The implied interest rate.
Request examples
cURL
Use this example to calculate IV using deltas.
Copy curl --compressed -H 'Accept: application/json' -H 'X-Api-Key: <client-api-key>' \
'https://us.market-api.kaiko.io/v2/data/analytics.v2/implied_volatility_smile?base=btc"e=usd&value_time=2024-06-07T12:00:00.000Z&expiry=2024-06-28T00:00:00.000Z&exchanges=drbt&deltas=0.25,0.5,0.75'
Use this example to calculate IV using forward log moneyness.
Copy https://us.market-api.kaiko.io/v2/data/analytics.v2/implied_volatility_smile?base=btc"e=usd&exchanges=drbt,okex&value_time=2024-09-12T10:00:00.000Z&expiry=2024-09-27T08:00:00.000Z&forward_log_moneynesses=-1,-0.5,0,0.5,1
Use this example to calculate IV using strikes.
Copy https://us.market-api.kaiko.io/v2/data/analytics.v2/implied_volatility_smile?base=btc"e=usd&exchanges=drbt&value_time=2024-09-12T10:00:00.000Z&expiry=2024-09-27T08:00:00.000Z&strikes=30000,50000,60000,70000,90000
Python (Deltas)
Use this example to calculate IV using deltas
Copy ##### 1. Import dependencies #####
import requests
import pandas as pd
##### 2. Choose the value of the query's parameters #####
# ---- Required parameters ---- #
base = "btc"
quote = "usd"
value_time = "2024-06-07T12:00:00.000Z"
expiry = "2024-06-28T00:00:00.000Z"
deltas = "0.25,0.5,0.75"
# ---- Optional parameters ---- #
exchanges = "drbt"
# ---- API key configuration ---- #
api_key = "YOUR_API_KEY"
##### 3. Get the data #####
# ---- Function to run an API call ---- #
# Get the data in a dataframe --------- #
def get_kaiko_data(api_key: str, base: str, quote: str, value_time: str, expiry: str, deltas: str, exchanges: str = None):
headers = {'Accept': 'application/json', 'X-Api-Key': api_key}
url = f'https://us.market-api.kaiko.io/v2/data/analytics.v2/implied_volatility_smile'
params = {
"base": base,
"quote": quote,
"value_time": value_time,
"expiry": expiry,
"deltas": deltas,
"exchanges": exchanges
}
try:
res = requests.get(url, headers=headers, params=params)
res.raise_for_status()
data = res.json()
if 'data' not in data:
print("No data returned.")
return pd.DataFrame()
df = pd.DataFrame(data['data'])
# Handle pagination with continuation token
while 'next_url' in data:
next_url = data['next_url']
if next_url is None:
break
res = requests.get(next_url, headers=headers)
res.raise_for_status()
data = res.json()
if 'data' in data:
df = pd.concat([df, pd.DataFrame(data['data'])], ignore_index=True)
return df
except requests.exceptions.RequestException as e:
print(f"API request error: {e}")
return pd.DataFrame()
# ---- Get the data ---- #
df = get_kaiko_data(api_key=api_key, base=base, quote=quote, value_time=value_time, expiry=expiry, deltas=deltas, exchanges=exchanges)
print (df)
Python (Forward log moneyness)
Use this example to calculate IV using forward log moneyness
Copy ##### 1. Import dependencies #####
import requests
import pandas as pd
##### 2. Choose the value of the query's parameters #####
# ---- Required parameters ---- #
base = "btc"
quote = "usd"
value_time = "2022-09-20T16:15:00.000Z"
expiry = "2022-12-30T08:00:00.000Z"
forward_log_moneynesses = "-1,-0.5,0,0.5,1"
# ---- Optional parameters ---- #
exchanges = "drbt"
# ---- API key configuration ---- #
api_key = "YOUR_API_KEY"
##### 3. Get the data #####
# ---- Function to run an API call ---- #
# Get the data in a dataframe --------- #
def get_kaiko_data(api_key: str, base: str, quote: str, value_time: str, expiry: str, forward_log_moneynesses: str, exchanges: str = None):
headers = {'Accept': 'application/json', 'X-Api-Key': api_key}
url = f'https://us.market-api.kaiko.io/v2/data/analytics.v2/implied_volatility_smile'
params = {
"base": base,
"quote": quote,
"value_time": value_time,
"expiry": expiry,
"forward_log_moneynesses": forward_log_moneynesses,
"exchanges": exchanges
}
try:
res = requests.get(url, headers=headers, params=params)
res.raise_for_status()
data = res.json()
if 'data' not in data:
print("No data returned.")
return pd.DataFrame()
df = pd.DataFrame(data['data'])
# Handle pagination with continuation token
while 'next_url' in data:
next_url = data['next_url']
if next_url is None:
break
res = requests.get(next_url, headers=headers)
res.raise_for_status()
data = res.json()
if 'data' in data:
df = pd.concat([df, pd.DataFrame(data['data'])], ignore_index=True)
return df
except requests.exceptions.RequestException as e:
print(f"API request error: {e}")
return pd.DataFrame()
# ---- Get the data ---- #
df = get_kaiko_data(api_key=api_key, base=base, quote=quote, value_time=value_time, expiry=expiry, forward_log_moneynesses=forward_log_moneynesses, exchanges=exchanges)
print (df)
Python (Strikes)
Use this example to calculate IV using forward log moneyness
Copy ##### 1. Import dependencies #####
import requests
import pandas as pd
##### 2. Choose the value of the query's parameters #####
# ---- Required parameters ---- #
base = "btc"
quote = "usd"
value_time = "2022-09-20T16:15:00.000Z"
expiry = "2022-12-30T08:00:00.000Z"
strikes = "10000,15000,20000"
# ---- Optional parameters ---- #
exchanges = "drbt"
# ---- API key configuration ---- #
api_key = "YOUR_API_KEY"
##### 3. Get the data #####
# ---- Function to run an API call ---- #
# Get the data in a dataframe --------- #
def get_kaiko_data(api_key: str, base: str, quote: str, value_time: str, expiry: str, strikes: str, exchanges: str = None):
headers = {'Accept': 'application/json', 'X-Api-Key': api_key}
url = f'https://us.market-api.kaiko.io/v2/data/analytics.v2/implied_volatility_smile'
params = {
"base": base,
"quote": quote,
"value_time": value_time,
"expiry": expiry,
"strikes": strikes,
"exchanges": exchanges
}
try:
res = requests.get(url, headers=headers, params=params)
res.raise_for_status()
data = res.json()
if 'data' not in data:
print("No data returned.")
return pd.DataFrame()
df = pd.DataFrame(data['data'])
# Handle pagination with continuation token
while 'next_url' in data:
next_url = data['next_url']
if next_url is None:
break
res = requests.get(next_url, headers=headers)
res.raise_for_status()
data = res.json()
if 'data' in data:
df = pd.concat([df, pd.DataFrame(data['data'])], ignore_index=True)
return df
except requests.exceptions.RequestException as e:
print(f"API request error: {e}")
return pd.DataFrame()
# ---- Get the data ---- #
df = get_kaiko_data(api_key=api_key, base=base, quote=quote, value_time=value_time, expiry=expiry, strikes=strikes, exchanges=exchanges)
print (df)
Response examples
Deltas
Copy {
"query": {
"base": "btc",
"quote": "usd",
"exchanges": [
"drbt",
"okex"
],
"value_time": "2024-06-07T12:00:00.000Z",
"expiry": "2024-06-28T00:00:00.000Z",
"data_version": "v2",
"commodity": "analytics",
"request_time": "2024-06-24T12:30:09.700Z",
"sources": "false"
},
"time": "2024-06-24T12:30:10.147Z",
"data": [
{
"value_time": "2024-06-07T12:00:00.000Z",
"expiry": "2024-06-28T00:00:00.000Z",
"time_to_expiry": 0.056164383561643834,
"implied_volatilities": [
{
"strike": 72853.3324003775,
"forward_log_moneyness": 0.007321081822738051,
"implied_volatility": 0.5105897940662363,
"delta": 0.5,
"gamma": 0.000045971145294598765,
"current_spot": 71717,
"interest_rate": 0.14954983972466698
},
{
"strike": 79392.23132701412,
"forward_log_moneyness": 0.09327332815155387,
"implied_volatility": 0.5335098490669691,
"delta": 0.25,
"gamma": 0.00003504506121504308,
"current_spot": 71717,
"interest_rate": 0.14954983972466698
},
{
"strike": 67169.33106494324,
"forward_log_moneyness": -0.07391043269308284,
"implied_volatility": 0.5076566142080143,
"delta": 0.75,
"gamma": 0.000036829787686483384,
"current_spot": 71717,
"interest_rate": 0.14954983972466698
}
]
}
],
"exchanges": [
"drbt",
"okex"
]
}
Forward log moneyness
Copy {
"query": {
"base": "btc",
"quote": "usd",
"exchanges": [
"drbt",
"okex"
],
"value_time": "2024-09-12T10:00:00.000Z",
"expiry": "2024-09-27T08:00:00.000Z",
"data_version": "v2",
"commodity": "analytics",
"request_time": "2024-09-16T10:08:13.297Z",
"sources": "false"
},
"time": "2024-09-16T10:08:13.510Z",
"data": [
{
"value_time": "2024-09-12T10:00:00.000Z",
"expiry": "2024-09-27T00:00:00.000Z",
"time_to_expiry": 0.03995433789954338,
"implied_volatilities": [
{
"strike": 21393.433382294108,
"forward_log_moneyness": -1,
"implied_volatility": 1.333640363610205,
"delta": 0.9999487436462999,
"gamma": 1.3636212810241294E-8,
"current_spot": 58033.01112255454,
"interest_rate": 0.051859643540835755
},
{
"strike": 35271.80867069449,
"forward_log_moneyness": -0.5,
"implied_volatility": 0.9596570717413877,
"delta": 0.9965589532046168,
"gamma": 9.298329941261203E-7,
"current_spot": 58033.01112255454,
"interest_rate": 0.051859643540835755
},
{
"strike": 58153.381211439206,
"forward_log_moneyness": 0,
"implied_volatility": 0.5101368982713104,
"delta": 0.5203310896967671,
"gamma": 6.732894295644585E-5,
"current_spot": 58033.01112255454,
"interest_rate": 0.051859643540835755
},
{
"strike": 95878.71656643301,
"forward_log_moneyness": 0.5,
"implied_volatility": 0.8386751286583922,
"delta": 0.0018731164887705876,
"gamma": 6.140349526013891E-7,
"current_spot": 58033.01112255454,
"interest_rate": 0.051859643540835755
},
{
"strike": 158077.27941050686,
"forward_log_moneyness": 1,
"implied_volatility": 1.1585659255535645,
"delta": 1.3207614779298105E-5,
"gamma": 4.342680303635139E-9,
"current_spot": 58033.01112255454,
"interest_rate": 0.051859643540835755
}
]
}
]
}
Strikes
Copy {
"query": {
"base": "btc",
"quote": "usd",
"exchanges": [
"drbt"
],
"value_time": "2024-09-12T10:00:00.000Z",
"expiry": "2024-09-27T08:00:00.000Z",
"data_version": "v2",
"commodity": "analytics",
"request_time": "2024-09-16T10:16:06.767Z",
"sources": "false"
},
"time": "2024-09-16T10:16:07.109Z",
"data": [
{
"value_time": "2024-09-12T10:00:00.000Z",
"expiry": "2024-09-27T08:00:00.000Z",
"time_to_expiry": 0.0408675799086758,
"implied_volatilities": [
{
"strike": 30000,
"forward_log_moneyness": -0.6621439523959698,
"implied_volatility": 1.0918347265102102,
"delta": 0.999065374274305,
"gamma": 2.470728795941105E-7,
"current_spot": 58026.01780838792,
"interest_rate": 0.0599458347465653
},
{
"strike": 50000,
"forward_log_moneyness": -0.15131832862997915,
"implied_volatility": 0.6151097548518855,
"delta": 0.8995619045026346,
"gamma": 2.4400231724112595E-5,
"current_spot": 58026.01780838792,
"interest_rate": 0.0599458347465653
},
{
"strike": 60000,
"forward_log_moneyness": 0.031003228163975546,
"implied_volatility": 0.5087453039141314,
"delta": 0.40128287640417803,
"gamma": 6.479219462479912E-5,
"current_spot": 58026.01780838792,
"interest_rate": 0.0599458347465653
},
{
"strike": 70000,
"forward_log_moneyness": 0.18515390799123382,
"implied_volatility": 0.5834792805075438,
"delta": 0.06542894780360681,
"gamma": 1.861991887220773E-5,
"current_spot": 58026.01780838792,
"interest_rate": 0.0599458347465653
},
{
"strike": 90000,
"forward_log_moneyness": 0.4364683362721398,
"implied_volatility": 0.7752384746098042,
"delta": 0.0033982150399509137,
"gamma": 1.125492902360329E-6,
"current_spot": 58026.01780838792,
"interest_rate": 0.0599458347465653
}
]
}
]
}
Shared in