LME Futures

Environment

Setting up your environment takes three steps:

  • Import the relevant internal and external libraries

  • Configure the environment parameters

  • Initialise the environment

import sigtech.framework as sig

import datetime as dtm
import pandas as pd
import numpy as np
import seaborn as sns

sns.set(rc={'figure.figsize': (18, 6)})
sig.config.init()

LME Futures 'forwards'

Metal futures on LME work slightly differently to a traditional future.

Although LME instruments are exchange traded and referred as futures these contracts are closer to a forward contract.

While traditional futures have fixed listing schedule, for instance monthly or quarterly, LME Futures issues a new 3M expiry contract each day, 6M expiry each week and 10 years expiry each month.

In the example below we are creating a LME forward for Zinc expiring 3rd Wednesday May-21. The history output is the present value of the said contract.

lme_future = sig.LMEFuture(underlying_ticker='LX',
                           future_ticker='K21',
                           strike=0)

lme_future.history().plot(title='LME Zinc Froward Present Value')

To query the fair forward strike at any point in time the method .fair_strike() is used:

lme_future.fair_strike(d=dtm.date(2021, 1, 23))

To query the fair strike for the duration of the forward the .history() with argument FairStrike is used:

lme_future.history('FairStrike')

Replicating Standard Futures with LME Forwards

To replicate a similar behaviour of a traditional quarterly future contract, without entering into the new forward listed every day, LME forwards trade as spreads between the 3M forward and any of the outstanding future contracts.

The spreads are defined as a contract to take, or make, delivery of the 3M forward and make, or take, delivery of a given future contract. The price is equal toP3MforwardPfuturei\mathrm{{P}_{3M forward} - {Pfuture}_i}

In the example below LMESpreadContract simultaneously buys a 3M forward May-21 expiry and sells a 3M expiry forward:

lme_spread = sig.LMESpreadContract(underlying_ticker='LX',
                                   start_date=lme_future.history_start_date(),
                                   future_ticker='K21')

lme_spread.history().plot(title='LME Zinc 3M Forward Spread')

Last updated

© 2023 SIG Technologies Limited