Calculate the co-kurtosis of each asset with the benchmark: how the asset’s return moves with the cubed moves of the market, i.e. how much it shares the market’s extreme moves. An asset with a high co-kurtosis adds to the fat tails of a market portfolio, and Dittmar (2002) shows that investors who dislike kurtosis demand a higher return for holding it.

The formulas are as follows:

\[\text{"standardized":}\;\; \text{Co-Kurtosis} = E \left[(r_{i} - \mu_{i}) (r_{m} - \mu_{m}) ^{3}\right] / (\sigma_{i} \cdot \sigma_{m} ^{3})\] \[\text{"residual":}\;\; E \left[\epsilon_{i} \cdot \epsilon_{m} ^{3}\right] / (\sqrt{E \left[\epsilon_{i} ^{2}\right]} \cdot E \left[\epsilon_{m} ^{2}\right] ^{3 / 2})\]

Where r_i is the asset return, r_m the benchmark return, ε_m = r_m − μ_m and ε_i the residual of the regression r_i = α + β·r_m + ε_i, the residual form Harvey and Siddique (2000) use for co-skewness. For the benchmark itself the standardized co-kurtosis is the benchmark’s non-excess kurtosis (3 for normal returns); for an asset with a correlation ρ to normally distributed market returns it is 3ρ.

By default one value is reported per period, computed from the daily returns within that period on the dates both the asset and the benchmark have a return. The expectations are population moments (1 / n), so σ_i and σ_m use 1 / n as well.

For more information about the method, see the following papers:

  • Dittmar, R.F. (2002). “Nonlinear Pricing Kernels, Kurtosis Preference, and Evidence from the Cross Section of Equity Returns.” Journal of Finance, 57(1), 369-403.
  • Harvey, C.R., & Siddique, A. (2000). “Conditional Skewness in Asset Pricing Tests.” Journal of Finance, 55(3), 1263-1295.

Also known as: cokurtosis, systematic kurtosis, co-kurtosis beta.

Cokurtosis in Python or via the MCP

Install the Finance Toolkit with:

pip install financetoolkit -U

Then call get_cokurtosis as shown below.

from financetoolkit import Toolkit

toolkit = Toolkit(
    ["AAPL", "MSFT", "TLT", "GLD"],
    api_key="FINANCIAL_MODELING_PREP_KEY",
    start_date="2021-01-01",
    end_date="2025-12-31",
)

toolkit.performance.get_cokurtosis()

Or, after setting up the Finance Toolkit MCP, ask:

What was the cokurtosis of Apple, Microsoft, TLT and gold (GLD) with the S&P 500 in each year from 2021 to 2025?

Which returns:

Date AAPL MSFT TLT GLD
2021 2.3149 2.4305 -0.3616 0.761
2022 3.0324 2.9407 0.6437 1.1731
2023 2.0735 1.5943 0.3763 0.0201
2024 2.5064 3.5367 -0.2675 1.2651
2025 22.5236 18.9645 1.749 7.2913

Parameters

get_cokurtosis accepts the following parameters.

ParameterTypeDescriptionExample
periodstrThe period to use for the calculation. Defaults to “quarterly” if the Toolkit is initialised with quarterly=True, otherwise “yearly”."weekly"
methodstr“standardized” or “residual”, as described above. Defaults to “standardized”."standardized"
roundingint | NoneThe number of decimals to round the results to. Defaults to None, which uses the rounding of the Toolkit (4 unless set otherwise).2
growthboolWhether to calculate the growth of the values. Defaults to False.True
lagint | list[int]The lag to use for the growth calculation. Defaults to 1.4
standardizeboolWhether to standardize (Z-Score) the result. When combined with growth=True, standardizes the growth values instead of the raw values. Defaults to False.True
Share