Commodity future volatility #

This category group includes measures of realized return volatility for commodity futures. It also includes related generic leverage ratios for volatility targets.

Commodity future volatility #

Ticker : COXRxEASD_NSA

Label : Estimated annualized standard deviation of commodity future return.

Definition : Annualized standard deviation of commodity front future return, % of notional, based on exponential moving average of daily returns.

Notes :

  • The standard deviation has been calculated based on an exponential moving average of daily returns with a half-life of 11 active trading days.

  • The return is simply the % change in the front futures price. The return calculation assumes rolling futures (from front to second) on the first day of the month when the contract is due to expire. Not all commodities have monthly contracts.

  • For information on the components comprising each commodity group, see Appendix 1 .

Leverage ratio of vol-targeted commodity future position #

Ticker : COXRxLEV10_NSA

Label : Leverage ratio of commodity future position for 10% annualized vol target.

Definition : Commodity future leverage for a 10% annualized vol target, as ratio of contract notional relative to risk capital on which the return is calculated.

Notes :

  • This serves as the leverage ratio for a 10% annualized vol target and is inversely proportional to the estimated annualized standard deviation of the return on a USD1 notional position. The leverage can be viewed as indicative for positioning and endogenous market risk.

  • See also related important notes on “Commodity future volatility” ( COXRxEASD_NSA ).

Imports #

Only the standard Python data science packages and the specialized macrosynergy package are needed.

import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import math

import json
import yaml

import macrosynergy.management as msm
import macrosynergy.panel as msp
import macrosynergy.signal as mss
import macrosynergy.pnl as msn


from macrosynergy.download import JPMaQSDownload

from timeit import default_timer as timer
from datetime import timedelta, date, datetime

import warnings

warnings.simplefilter("ignore")

The JPMaQS indicators we consider are downloaded using the J.P. Morgan Dataquery API interface within the macrosynergy package. This is done by specifying ticker strings , formed by appending an indicator category code <category> to a currency area code <cross_section> . These constitute the main part of a full quantamental indicator ticker, taking the form DB(JPMAQS,<cross_section>_<category>,<info>) , where <info> denotes the time series of information for the given cross-section and category. The following types of information are available:

  • value giving the latest available values for the indicator

  • eop_lag referring to days elapsed since the end of the observation period

  • mop_lag referring to the number of days elapsed since the mean observation period

  • grade denoting a grade of the observation, giving a metric of real time information quality.

After instantiating the JPMaQSDownload class within the macrosynergy.download module, one can use the download(tickers,start_date,metrics) method to easily download the necessary data, where tickers is an array of ticker strings, start_date is the first collection date to be considered and metrics is an array comprising the times series information to be downloaded.

cids_nfm = ["GLD", "SIV", "PAL", "PLT"]
cids_fme = ["ALM", "CPR", "LED", "NIC", "TIN", "ZNC","SIO","SRR"]
cids_ene = ["BRT", "WTI", "NGS", "GSO", "HOL","EUA"]
cids_sta = ["COR", "WHT", "SOY", "CTN","SOO","SOM","KKW"]
cids_liv = ["CAT", "HOG","CFD"]
cids_mis = ["CFE", "SGR", "NJO", "CLB","CAO"]

cids = cids_nfm + cids_fme + cids_ene + cids_sta + cids_liv + cids_mis
main = ["COXRxEASD_NSA", "COXRxLEV10_NSA"]
econ = []  # economic context
mark = ["COCRY_NSA", "COCRY_VT10", "COXR_NSA",  "COXR_VT10"]  # market links

xcats = main + econ + mark
# Download series from J.P. Morgan DataQuery by tickers

start_date = "1990-01-01"
tickers = [cid + "_" + xcat for cid in cids for xcat in xcats]
print(f"Maximum number of tickers is {len(tickers)}")

# Retrieve credentials

client_id: str = os.getenv("DQ_CLIENT_ID")
client_secret: str = os.getenv("DQ_CLIENT_SECRET")

# Download from DataQuery

with JPMaQSDownload(client_id=client_id, client_secret=client_secret) as downloader:
    start = timer()
    df = downloader.download(
        tickers=tickers,
        start_date=start_date,
        metrics=["value", "eop_lag", "mop_lag", "grading"],
        suppress_warning=True,
        show_progress=True,
    )
    end = timer()

dfd = df

print("Download time from DQ: " + str(timedelta(seconds=end - start)))
Maximum number of tickers is 198
Downloading data from JPMaQS.
Timestamp UTC:  2025-08-04 16:38:57
Connection successful!
Requesting data: 100%|█████████████████████████████████████████████████████████████████| 40/40 [00:08<00:00,  4.66it/s]
Downloading data: 100%|████████████████████████████████████████████████████████████████| 40/40 [00:34<00:00,  1.16it/s]
Download time from DQ: 0:00:50.129285

Availability #

cids_exp = cids
msm.missing_in_df(dfd, xcats=main, cids=cids_exp)
No missing XCATs across DataFrame.
Missing cids for COXRxEASD_NSA:   []
Missing cids for COXRxLEV10_NSA:  []

Most of commodities indicators are available from the early 1990s. Only a few energy products start in the 2000s: Brent, gasoline and natural gas.

For the explanation of currency symbols, which are related to currency areas or countries for which categories are available, please view Appendix 1 .

xcatx = main
cidx = cids_exp

dfx = msm.reduce_df(dfd, xcats=xcatx, cids=cidx)
dfs = msm.check_startyears(
    dfx,
)
msm.visual_paneldates(dfs, size=(20, 3))

print("Last updated:", date.today())
https://macrosynergy.com/notebooks.build/themes/shock-and-risk-measures/_images/567ea8640678e0c85fee4f39297558f5735860f316cfa77389336c34d99a599b.png
Last updated: 2025-08-04
msp.heatmap_grades(dfd, xcats=main, cids=cids_exp, start="2000-01-10", size=(16, 1))
https://macrosynergy.com/notebooks.build/themes/shock-and-risk-measures/_images/cfd98b6a4186428106eac774e891beaa866ed9af74df8fe42befabf07371a6b6.png

History #

Commodity future volatility #

Average annualized volatility across commodities since 2000 have ranged from over 40% (natural gas) to near 15% (live cattle).

xcatx = ["COXRxEASD_NSA"]
cidx = cids_exp

msp.view_ranges(
    dfd,
    xcats=xcatx,
    cids=cidx,
    sort_cids_by="mean",
    start="2000-01-01",
    title="Means and standard deviations of commodity future volatility, since 2000",
    kind="bar",
    size=(16, 8),
)
https://macrosynergy.com/notebooks.build/themes/shock-and-risk-measures/_images/c6cfc85e6fff74235bde94124adb2c774ec3475cba2f9288ce75fa8348b2a994.png
xcatx = ["COXRxEASD_NSA"]
cidx = cids_exp

msp.view_timelines(
    dfd,
    xcats=xcatx,
    cids=cidx,
    start="2000-01-01",
    title="Commodity future volatility, exponential lookback, 11-day half-life, % ar",
    title_adj=1.03,
    title_fontsize=27,
    title_xadj=0.52,
    cumsum=False,
    ncol=4,
    same_y=True,
    size=(12, 7),
    aspect=1.7,
    all_xticks=True,
)
https://macrosynergy.com/notebooks.build/themes/shock-and-risk-measures/_images/d0711f2a6f50331d669450c604e847f1230accf6d11950147f9cc117afaf7c85.png

Realized volatility has mostly been positively correlated across commodities. But unlike in the equity space positive correlation has been quite weak and has not been universal. Coffee and livestock volatility have displayed little correlation with other commodities.

msp.correl_matrix(
    dfd, xcats="COXRxEASD_NSA", cids=cids_exp, size=(20, 14), cluster=True
)
https://macrosynergy.com/notebooks.build/themes/shock-and-risk-measures/_images/311326397b217c4d4ba4b495e7e3e5840b56746d3ee07cb937924895b5967eb1.png

Leverage ratio of vol-targeted commodity future position #

Since volatility of commodity returns is higher than for other asset clasess, leverage differences for equal volatility targets across markets have been low, between 0.2 and 0.75.

xcatx = ["COXRxLEV10_NSA"]
cidx = cids_exp
msp.view_ranges(
    dfd,
    xcats=xcatx,
    cids=cidx,
    sort_cids_by="mean",
    start="2000-01-01",
    title="Means and standard deviations of vol-targeted commodity future position leverage ratios",
    kind="bar",
    size=(16, 8),
)
https://macrosynergy.com/notebooks.build/themes/shock-and-risk-measures/_images/b72a06b3d0a5c8bbab146c6974e79007236fd161dde22066d9160087259f2e42.png
xcatx = ["COXRxLEV10_NSA"]
cidx = cids_exp

msp.view_timelines(
    dfd,
    xcats=xcatx,
    cids=cidx,
    start="2000-01-01",
    title="Leverage ratios of vol-targeted commodity future positions",
    title_adj=1.02,
    title_fontsize=27,
    title_xadj=0.5,
    cumsum=False,
    ncol=4,
    same_y=True,
    size=(12, 7),
    aspect=1.7,
    all_xticks=True,
)
https://macrosynergy.com/notebooks.build/themes/shock-and-risk-measures/_images/8a028c6428c42ba03d9d93df302a516b2badd34aef90612642b69aa1346ace05.png

Importance #

Relevant research #

“Analysing volatility for the aggregate commodity market and for various commodity groups we find that factors associated with macroeconomic and financial market uncertainty explain subsequent volatility of commodity returns. Variables motivated by commodity pricing theories, such as the futures basis and hedging pressure, are also significant. Economic uncertainty measures based on differences in beliefs of economic agents extracted from survey data provide additional information to that contained in volatility series of current economic fundamentals. Finally, we find evidence of a strong bi-directional causal link between inflation uncertainty and commodity return volatility.” Prokopczuk and Symeonidis

“Volatility risk premia – differences between options-implied and actual volatility – are valid predictors for risky asset returns. High premia typically indicate high surcharges for the risk of changes in volatility, which are paid by investors with strong preference for more stable returns. For commodities volatility risk premia should have become a greater factor as consequence of their ‘financialization’. New evidence suggests that indeed volatility risk premia on commodity currencies have predictive power for subsequent commodity returns, while crude and gold premia have predictive power for other asset classes in accordance with the nature of these commodities. Since estimation of these premia takes some skill and judgment this points to opportunities for macro trading with econometric support” Macrosynergy

Empirical clues #

There has been a tendency for periods or commodities with higher volatility to predict higher subsequent returns.

cr = msp.CategoryRelations(
    dfd,
    xcats=["COXRxEASD_NSA", "COXR_NSA"],
    cids=cids_exp,
    freq="Q",
    lag=1,
    xcat_aggs=["last", "sum"],
    start="2000-01-01",
)
cr.reg_scatter(
    title="Commodity futures volatility and subsequent quarterly returns (32 commodities, since 2000)",
    labels=False,
    coef_box="upper right",
    xlab="Historic commodity futures return volatility (11-day half-time, end of quarter)",
    ylab="Commodity future return (next quarter)",
)
https://macrosynergy.com/notebooks.build/themes/shock-and-risk-measures/_images/d7e9ec6e204258d37bbbb7b6c1f27d153a2bdb00403b48ad3b89fc9d7b4a8be3.png

Appendices #

Appendix 1: Commodity group definitions and symbols #

The commodity groups considered are: energy, base metals, precious metals, agricultural commodities and livestock.

  • The energy commodity group contains:

    • BRT : ICE Brent crude (IPE Brent crude before 2003), futures contracts for Brent crude oil sourced from the North Sea traded on the intercontinetal exchange (ICE).

    • WTI : NYMEX WTI light crude, futures contracts for West Texas Intermediate (WTI) crude, primarily sourced from Texas and surronding states, traded on the New York Mercantile Exchange (NYMEX).

    • NGS : NYMEX natural gas, Henry Hub, the global benchmark for natural gas pricing in North America based on delivery at the Henry Hub in Louisiana, traded on the New York Mercantile Exchange (NYMEX).

    • GSO : NYMEX RBOB Gasoline, futures contracts for Reformulated Gasoline Blendstock for Oxygenate Blending, the primary benchmark for wholesale U.S. gasoline prices, traded on the New York Mercantile Exchange (NYMEX).

    • HOL : NYMEX Heating oil, New York Harbor ULSD, futures contracts for ultra-low sulfur distillate fuel oil, traded on the New York Mercantile Exchange (NYMEX).

    • EUA : EEX EU Allowance; a carbon permit traded on the European Energy Exchange (EEX).

  • The base metals group contains:

    • ALM : London Metal Exchange aluminium, is the standardized aluminium futures contract traded on the London Metal Exchange (LME).

    • CPR : Comex copper, is the standardized copper futures contract traded on the Commodity Exchange (COMEX).

    • LED : London Metal Exchange Lead, is the standardized lead futures contract traded on the London Metal Exchange (LME).

    • NIC : London Metal Exchange Nickel, is the standardized nickel futures contract traded on the London Metal Exchange (LME).

    • TIN : London Metal Exchange Tin, is the standardized tin futures contract traded on the London Metal Exchange (LME).

    • ZNC : London Metal Exchange Zinc, is the standardized zinc futures contract traded on the London Metal Exchange (LME).

    • SIO : SGX TSI Iron ore CFR, the world’s primary benchmark for seaborne iron ore prices sent to China mainly, traded on the Singapore Exchange (SGX).

    • SRR : Shanghai Futures Exchange Steel Rebar, the primary benchmark for rebar pricing in China traded on the Shanghai Futures Exchange (SHFE).

  • The precious metals group contains:

    • GLD : COMEX gold 100 Ounce, futures contract for gold traded on the Commodity Exchange (COMEX), one of the primary benchmarks for gold, trading 100 troy ounces of gold.

    • SIV : COMEX silver 5000 Ounce, futures contract for silver traded on the Commodity Exchange (COMEX), one of the primary benchmarks for silver, trading 5000 troy ounces of silver.

    • PAL : NYMEX palladium, futures contract for palladium traded on the New York metal exchange (NYMEX), one of the primary benchmarks for palladium.

    • PLT : NYMEX platinum, futures contract for platinum traded on the New York metal exchange (NYMEX), one of the primary benchmarks for platinum.

  • The agricultural commodity group contains:

    • COR : Chicago Board of Trade corn composite, the global benchmark futures contract for trading corn on the Chicago Board of Trade (CBOT).

    • WHT : Chicago Board of Trade wheat composite, the global benchmark futures contract for trading soft red winter wheat on the Chicago Board of Trade (CBOT).

    • SOY : Chicago Board of Trade soybeans composite, the global benchmark futures contract for trading soybeans on the Chicago Board of Trade (CBOT).

    • SOO : Chicago Board of Trade soybean oil composite, the global benchmark futures contract for trading soybean meal on the Chicago Board of Trade (CBOT).

    • SOM : Chicago Board of Trade soybean meal composite, the global benchmark futures contract for trading soybean oil, used for animal feed, on the Chicago Board of Trade (CBOT).

    • CTN : NYBOT / ICE cotton #2, the global benchmark futures contract for trading raw cotton, traded on the Intercontinental Exchange (ICE).

    • CFE : NYBOT / ICE coffee ‘C’ Arabica, the global benchmark futures contract for trading arabica coffee beans, traded on the Intercontinental Exchange (ICE).

    • SGR : NYBOT / ICE raw cane sugar #11, the global benchmark futures contract for trading raw cane sugar, traded on the Intercontinental Exchange (ICE).

    • NJO : NYBOT / NYCE FCOJ frozen orange juice concentrate, the global benchmark for global orange juice prices, traded on the Chicago Mercantile Exchange (CME).

    • CLB : Chicago Mercantile Exchange random length lumber, a key benchmark for softwood lumber prices from North America, traded on the Chicago Mercantile Exchange (CME).

    • KKW : Kansas City Board of Trade HRW Wheat composite, benchmark price for futures of hard red winter wheat grown primarily in the Great Plains (Kansas, Oklahoma, Texas, Colorado, Nebraska), traded on the Chicago Mercantile Exchange (CME).

    • CAO : ICE Cocoa, the global benchmark futures contract for trading raw cocoa beans, traded on the Intercontinental Exchange (ICE).

  • The (U.S.) livestock commodity group contains:

    • CAT : Chicago Mercantile Exchange live cattle composite, primary benchmark for trading live-fed cattle traded on the Chicago Mercantile Exchange (CME).

    • HOG : Chicago Mercantile Exchange lean hogs composite, primary benchmark for trading hogs ready for slaughter traded on the Chicago Mercantile Exchange (CME).

    • CFD : Chicago Mercantile Exchange feeder cattle composite, primary benchmark for trading young lightweight cattle entering US feedlots traded on the Chicago Mercantile Exchange (CME).