Implied volatility calculation - smile
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:
Strikes
Forward-log-moneyness
Deltas
The calculation methodology leverages space interpolation.
Currently supported assets and exchanges:
BTC, ETH, SOL, and, XRP on Deribit.
BTC, ETH on OKX.
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
https://{eu/us}.market-api.kaiko.io/v2/data/analytics.v2/implied_volatility_smilePath Parameters
region
Yes
Choose between eu and us.
Query Parameters
base
Yes
The desired base as the underlying of the options. See supported assets above.
btc, eth
quote
Yes
The desired quote as the underlying of the options.
usd or usdc
usd
value_time
Yes
The time at which to compute implied volatilities The time t should be smaller than the expiry T
2022-09-20T16:15:00.000Z
expiry
Yes
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.
2022-12-30T08:00:00.000Z
strikes
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
forward_log_moneynesses
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
deltas
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.
exchanges
No
The desired exchange as source of options data. See supported exchanges above.
drbt
Fields
value_time
The time in parameter
2022-09-20T16:15:00.000Z
expiry
The expiry in parameter
2022-12-30T00:00:00.000Z
time_to_expiry
The associated time to expiry in year
0.27580868156450355
implied_volatilities
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}, ... ]
delta
The first derivative of the price with regards to the underlying price.
2.8863019124747424e-7
gamma
The second derivative of the price with regards to the underlying price.
2.416523346501216e-10
current_spot
The underlying spot price at the value timestamp.
71717
interest_rate
The implied interest rate.
0.14954983972466698
Request examples
Use this example to calculate IV using deltas.
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.
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,1Use this example to calculate IV using strikes.
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,90000Use this example to calculate IV using deltas
##### 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)Use this example to calculate IV using forward log moneyness
##### 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)Use this example to calculate IV using forward log moneyness
##### 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
{
"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"
]
}
{
"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
}
]
}
]
}{
"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
Last updated
Was this helpful?
