The Messy Business of Building a Futures Security Master

Before a systematic trading system buys or sells, it needs to know what it is trading and which price data to trust. These details live in a security master: a catalogue of the markets and contracts the system uses. Mine is a spreadsheet. Adding a market takes one row. Getting that row right can swallow a week. I open it up to show how missing data and changing contracts complicate that work—and why seemingly small mistakes can distort a strategy’s results or lead to costly trading errors.



The fig­ures below are the inter­ac­tive ver­sions of the fig­ures in the arti­cle, in the arti­cle’s order and under the arti­cle’s num­bers. Hov­er a series for its val­ues, drag across a chart to zoom and dou­ble-click to reset, and click a leg­end entry to hide or iso­late a series.


The security master connects broker instruments to signal and cost data.

Fig­ure 1. The secu­ri­ty mas­ter con­nects bro­ker instru­ments to sig­nal and cost data.

Note: CSI and Nor­gate sup­ply dai­ly price his­to­ries; Data­ben­to and Inter­ac­tive Bro­kers sup­ply bid/ask quotes for esti­mat­ing spread costs.

Fig­ure 2. Of 684 work­book entries, 301 pass the sta­t­ic fil­ters and rep­re­sent 243 dis­tinct mar­kets.

Note: Octo­ber 2026 snap­shot. Each entry is removed at its first applic­a­ble fil­ter. Retired and back­fill his­to­ries remain avail­able for back­tests. The final bar groups the remain­ing con­tract-size vari­ants; dai­ly trad­abil­i­ty checks still apply.

Fig­ure 3. Exam­ples of back­filled his­to­ries.

Note: Octo­ber 2026 snap­shot of stored dai­ly clos­es. Bars show the extend­ed his­to­ries, some­times by decades.

Three examples of backfilling. Some histories only need an extension, others a little arithmetic.

Fig­ure 4. Three exam­ples of back­fill­ing. Some his­to­ries only need an exten­sion, oth­ers a lit­tle arith­metic.

Note: A joins con­tracts by expiry, the price his­to­ries can over­lap in cal­en­dar time. B scales dol­lars to cents. C adds 0.32138 to CAD3M prices before join­ing them to CORRA3.

Fig­ure 5. The futures retire­ment home still has plen­ty of sto­ries to tell.

Note: Octo­ber 2026 snap­shot of 55 retained his­to­ries, includ­ing asso­ci­at­ed back­fills. Read down the left pan­el, then the right. Dots mark the first and last stored dai­ly close; con­nect­ing lines show the span, which may con­tain gaps. Retire­ment includes loss of bro­ker or provider access, not just exchange delist­ing.

Fig­ure 6. Retired con­tracts add obser­va­tions where his­to­ry is thin.

Note: Octo­ber 2026 snap­shot. Counts cov­er all 55 instru­ments in Fig­ure 5 with at least one data point dur­ing the year.

Similar prices, different jobs: an instrument earns its place through execution.

Fig­ure 7. Sim­i­lar prices, dif­fer­ent jobs: an instru­ment earns its place through exe­cu­tion.

Note: Select­ed AUD/USD entries from the Octo­ber 2026 secu­ri­ty mas­ter. Labels use the Instru­ment names. Sizes, reten­tion and the exclu­sion rea­son come from Mul­ti­pli­er, Black­list and Com­ment. A$ denotes Aus­tralian dol­lars. The retained instru­ments share mar­ket expo­sure but need not have iden­ti­cal prices.

An instrument can remain part of the model even when it is excluded from trading.

Fig­ure 8. An instru­ment can remain part of the mod­el even when it is exclud­ed from trad­ing.

Note: Black­list stops price-his­to­ry load­ing and sig­nal gen­er­a­tion. For an instru­ment that is not black­list­ed, DoNot­Trade allows both steps to con­tin­ue but forces the final posi­tion to zero. DoNot­Trade also stops spread col­lec­tion because the bro­ker rejects mar­ket data requests.

Detecting a trading restriction does not automatically change the security master.

Fig­ure 9. Detect­ing a trad­ing restric­tion does not auto­mat­i­cal­ly change the secu­ri­ty mas­ter.

Note: In this exam­ple, the bro­ker blocks open­ing trades and the sys­tem stores that sta­tus. The DoNot­Trade flag is then man­u­al­ly set to 1 in the work­book.

Fig­ure 10. Being kept in the dataset does not mean being avail­able to the port­fo­lio every day.

Note: Dai­ly obser­va­tions, Jan­u­ary 2021–13 Octo­ber 2026. Vol­ume is the cur­rent­ly trad­ed expiration’s indi­vid­ual vol­ume, aver­aged over 20 trad­ing days. Dashed lines mark the thresh­olds, which must both be exceed­ed. In the bot­tom pan­el, 1 means trad­able and 0 means exclud­ed.

Fig­ure 11. Small­er con­tracts and low­er dol­lar fees do not nec­es­sar­i­ly mean low­er costs.

Note: Snap­shot Octo­ber 2026. The bars show the one-way cost bur­den for sched­uled rolls, as a per­cent­age of annu­alised con­tract risk. They do not include strat­e­gy turnover. AEX Mini uses full-size AEX mar­ket data with its own con­tract con­fig­u­ra­tion. The dashed line marks the 10% ceil­ing.

Fig­ure 12. Five Fri­day expiries walk into one month-based iden­ti­fi­er.

Note: Schemat­ic using Octo­ber 2026. GAS-US-WEEKLY expires every Fri­day. A year-and-month key maps all five con­tracts to 2026-10.

Fig­ure 13. The trad­able uni­verse expand­ed at dif­fer­ent speeds across asset class­es.

Note: March 1975–October 2026. Lines show the 150-day aver­age num­ber of instru­ments pass­ing both the fil­ters in Fig­ure 2 and the dai­ly IsTrad­able checks. In Octo­ber 2026, 278 instru­ments passed: 123 equi­ty, 37 rates, 37 FX, 36 agri­cul­ture, 23 met­als, 19 ener­gy, and 3 volatil­i­ty.

From three catalogs to an updated universe and recalibrated strategies.

Fig­ure 14. From three cat­a­logs to an updat­ed uni­verse and recal­i­brat­ed strate­gies.

Note: Approved edits feed the data rebuild; failed checks return to review.

Full textRead the com­plete arti­cle online · Fig­ures omit­ted

Letter from the editor

If I want my auto­mat­ed trad­ing sys­tem to start trad­ing some­thing new—cocoa, for example—I begin with one row in a spread­sheet. Get­ting that row right can swal­low an entire week.

The past five weeks have been full of this kind of work. Once a year, I review and update my trad­ing system’s futures uni­verse. This year, I got the order a lit­tle mixed up: I recal­i­brat­ed the strate­gies first, as described in my last arti­cle. That work fol­lowed the method­ol­o­gy improve­ments intro­duced in Craft­ing a Trad­ing Strat­e­gy.

Research has a habit of dis­rupt­ing estab­lished rou­tines. Updat­ing the uni­verse after cal­i­bra­tion meant recal­i­brat­ing the strate­gies again. The extra work did have a ben­e­fit: it gave me more con­fi­dence in the new cal­i­bra­tion pro­ce­dure. It han­dled the expand­ed trad­ing uni­verse as intend­ed, with­out requir­ing fur­ther changes to the method­ol­o­gy.

The annu­al update also prompt­ed automa­tion to sup­port my deci­sions. Auto­mat­i­cal­ly extract­ing the broker’s avail­able futures saves me work­ing through its cat­a­log by hand and helps me decide which mar­kets to inves­ti­gate. My annu­al spread­sheet update had qui­et­ly become a soft­ware project.

Those tools helped gath­er the answers, but I still had to check them. Con­tract details and price his­to­ries need­ed a clos­er look, and every excep­tion need­ed doc­u­ment­ing. Do enough of this and you start to sound like your Uncle Fred at the Ger­man tax office: “that’s prob­a­bly right” means the paper­work is com­ing straight back. This arti­cle is about that work. And about your inner Fred.

The Question

What belongs in a futures secu­ri­ty mas­ter, and how do you keep it reli­able?

Behind the scenes

Instru­ment def­i­n­i­tions, delist­ings, con­flict­ing data sources, chang­ing mul­ti­pli­ers, bro­ken histories—and the checks a new mar­ket must pass before join­ing the port­fo­lio.

The takeaway

A secu­ri­ty mas­ter records the deci­sions and assump­tions your entire trad­ing sys­tem depends on. Get­ting those details right is an ongo­ing job.

  • 301 instru­ments
  • 51 years of data
  • 4 data providers

A futures secu­ri­ty mas­ter tells the trad­ing sys­tem what each instru­ment is, how to inter­pret its prices, and whether it may be trad­ed. These def­i­n­i­tions con­nect his­tor­i­cal research to live exe­cu­tion.

A market’s sym­bol is only part of its iden­ti­ty. The sys­tem also needs the con­tract size, price units and deliv­ery month. Get those details wrong and a sound trad­ing rule can pro­duce a posi­tion you nev­er intend­ed to take.

The data uni­verse and the trad­ing uni­verse serve dif­fer­ent pur­pos­es. A full-size con­tract may sup­ply his­to­ry for a small­er con­tract, while a delist­ed future can remain use­ful in his­tor­i­cal back­tests. The secu­ri­ty mas­ter records those rela­tion­ships.

Before adding an instru­ment, we there­fore need to set­tle two ques­tions: can we trade it, and which data should rep­re­sent it?

Data sources

Con­nect­ing trad­able mar­kets to the right data.

It is eas­i­er to explain a secu­ri­ty mas­ter with a real one in front of you. You can down­load mine here. Yes, it is an Excel work­book. I real­ize you may have expect­ed some­thing more sophis­ti­cat­ed.

In 20 years as a quant, I have yet to vis­it a finan­cial insti­tu­tion that did not use Excel. Appar­ent­ly, suc­cess in finance requires at least one spread­sheet. That’s why my trad­ing sys­tem uses one.

In prac­tice, Excel gives me a con­ve­nient way to edit the con­fig­u­ra­tion. The trad­ing sys­tem reads the work­book and val­i­dates its con­tents before using them. Excel is the inter­face. The checks live in the code.

Before fill­ing in the rows, though, we need to estab­lish which con­tracts belong there.

For live trad­ing, the bro­ker sets the first con­straint: it must offer the con­tract and allow your account to trade it. A prod­uct can appear in its cat­a­log and still be unavail­able to you, for exam­ple because of restric­tions in your juris­dic­tion.

I use Inter­ac­tive Bro­kers for exe­cu­tion, so its futures cat­a­log is my start­ing point. The workbook’s IBSym­bol col­umn records the broker’s sym­bol for each instru­ment.

Exchanges and data providers have their own nam­ing schemes. To keep track of the same mar­ket across them, I give each instru­ment a mem­o­rable name and an icon, such as 🐷 LEANHOG.

The pair appears on dash­boards, in logs and through­out the system’s oth­er out­put. A pig is eas­i­er to spot than anoth­er cryp­tic con­tract code.

As a sys­tem­at­ic retail trad­er, you are also the main user of your own soft­ware. Make life easy for the per­son read­ing its logs at the end of a long day. That per­son is usu­al­ly you.

Once an instru­ment has a place in the work­book, it needs data. Fig­ure 1 shows how the secu­ri­ty mas­ter con­nects the broker’s instru­ment def­i­n­i­tions to two kinds of input: dai­ly prices for gen­er­at­ing sig­nals and bid/ask quotes for esti­mat­ing spread costs. The jobs are dif­fer­ent, even when one provider sup­plies both.

I pay for ded­i­cat­ed data main­ly to save time, even where the bro­ker could sup­ply it. I col­lect and store some his­to­ries myself, such as stock bor­row rebate rates, but avoid tak­ing on anoth­er data-main­te­nance job unless I need to.

For­mats change, his­to­ries need to remain con­sis­tent, and back­ups need look­ing after. Down­load­ing the prices is the easy part.

Bro­ker data is not nec­es­sar­i­ly free either: exchange sub­scrip­tions can add up. I there­fore weigh the sub­scrip­tion bill against the work of col­lect­ing and main­tain­ing the his­to­ry.

Signal data

The cur­rent strate­gies gen­er­ate sig­nals from dai­ly prices for futures (Con­tract­Type col­umn). Han­dling stocks and ETFs is already sup­port­ed but will be the top­ic of anoth­er arti­cle.

The sys­tem stitch­es his­to­ries for indi­vid­ual futures con­tracts into back-adjust­ed series for sig­nal cal­cu­la­tions and back­tests.

CSI and Nor­gate togeth­er cov­er more mar­kets than either pro­vides on its own. Both have pro­vid­ed excel­lent sup­port and cor­rect­ed data after I report­ed incon­sis­ten­cies. That is a good rea­son to build your own qual­i­ty checks, even when you are pay­ing some­one else to do theirs.

The Provider col­umn selects the extrac­tor used to load an instrument’s dai­ly data. One provider may have sev­er­al extrac­tors, such as Nor­gate and Nor­gate-Delist­ed. The lat­ter runs only when rebuild­ing the his­to­ry from scratch.

Delist­ed mar­kets have no new dai­ly prices, so their his­to­ries can sit out the dai­ly down­load.

The Provider­Sym­bol col­umn records the instrument’s sym­bol at the select­ed provider. When his­tor­i­cal data is unavail­able, it con­tains NA and the miss­ing cov­er­age is doc­u­ment­ed in Com­ment. That makes the gap explic­it rather than leav­ing an emp­ty cell for the read­er, or the code, to inter­pret. Start­Date records the date the sys­tem has his­toric data for an instru­ment.

Bid/ask data

Bid and ask quotes allow the sys­tem to esti­mate spread costs and mea­sure slip­page by com­par­ing exe­cu­tion prices with the quotes pre­vail­ing imme­di­ate­ly before order place­ment.

While delayed bid/ask data at rel­a­tive­ly coarse inter­vals is usu­al­ly avail­able free of charge from the bro­ker, real-time feeds gen­er­al­ly require a paid sub­scrip­tion.

To keep costs down, I esti­mate spread costs using free bro­ker data wher­ev­er pos­si­ble. To mea­sure slip­page in live trad­ing, I use real-time feeds from exchanges with afford­able sub­scrip­tions. For exchanges with more expen­sive real-time feeds, such as CME and ICE, I use Data­ben­to instead.

Data­ben­to pro­vides his­tor­i­cal trade and quote data. I use the record­ed order-place­ment time­stamp to retrieve the bid and ask quotes imme­di­ate­ly before sub­mis­sion, then com­pare them with the exe­cu­tion price.

The Intra­dayProvider col­umn spec­i­fies the provider used to mea­sure slip­page, while Intra­dayI­den­ti­fi­er iden­ti­fies the instru­ment at that provider.

For exchanges that do not have a con­fig­ured provider, spread costs can only be esti­mat­ed using delayed data.

If you are start­ing out, you do not need a ded­i­cat­ed quote-data feed. An ini­tial spread esti­mate can also be obtained from observ­ing quotes in your broker’s trad­ing plat­form. With a hand­ful of mar­kets, that is man­age­able. Across a large uni­verse, you have qui­et­ly acquired a sec­ond job.

Key Take­aways

  • Bal­ance cov­er­age, sub­scrip­tion costs and main­te­nance. Paid data still needs qual­i­ty checks.

  • Dai­ly prices dri­ve sig­nals and back­tests while bid/ask quotes mea­sure spreads and slip­page.

Building the universe

Build­ing reli­able his­to­ries, select­ing trad­able mar­kets, and get­ting the con­tract details right.

A row in the work­book is not a promise to trade. Some rows pre­serve old price his­to­ries. Oth­ers record mar­kets that failed an ear­li­er check.

This is where Uncle Fred pulls up a chair and reach­es for his stamp. Is the price his­to­ry usable? Will the bro­ker accept the order? Is there enough liq­uid­i­ty, and how much will it cost to trade?

“It looked good in the back­test” is unlike­ly to get the appli­ca­tion approved.

His fil­ing habits are use­ful here. Keep­ing exclud­ed mar­kets in the work­book pre­serves the rea­son for each deci­sion. Oth­er­wise, the same attrac­tive con­tract can turn up at the next annu­al review, ready to waste anoth­er after­noon. The Com­ment col­umn is where Fred leaves his objec­tions for future ref­er­ence. A new data feed or bet­ter liq­uid­i­ty may change the ver­dict, but there should be a rea­son for reopen­ing the file.

Fig­ure 2 shows how these checks nar­row the list. Each entry is count­ed under the first applic­a­ble fil­ter, even if sev­er­al rea­sons would rule it out.

The chart is a snap­shot, not a per­ma­nent ver­dict. Costs and liq­uid­i­ty change, and bro­ker access can dis­ap­pear even when an exchange still lists the con­tract. An instru­ment that pass­es these checks is eli­gi­ble for trad­ing. Sig­nal strength, avail­able cap­i­tal and port­fo­lio con­struc­tion deter­mine whether it reach­es the book.

The fol­low­ing sec­tions walk through the selec­tion process step by step, skip­ping those that are self-explana­to­ry.

Piecing together the past

The “back­fill” step uses rows from the spread­sheet to sup­ply the price his­to­ry for anoth­er instru­ment. They remain use­ful for back­test­ing, but do not rep­re­sent addi­tion­al instru­ments to trade.

Take 🍫️COCOA: the CSI his­to­ry used here starts in June 1975, while the stored Nor­gate his­to­ry begins in Decem­ber 1979. Com­bin­ing them adds about four and a half years with­out requir­ing ongo­ing down­loads from both providers.

My CSI sub­scrip­tion allows 150 mar­kets to be updat­ed at a time, so each slot is valu­able. The old­er CSI prices are down­loaded once, archived under 🍫️COCOA_backfill, and read by the CSI-Delist­ed extrac­tor. That frees the CSI slot while Nor­gate sup­plies new data for COCOA.

The same approach works across con­tract sizes. The his­to­ry of 🇺🇸SP500_micro, for exam­ple, is extend­ed with data from the larg­er E‑mini con­tract, 🇺🇸SP500. That his­to­ry is extend­ed in turn with the orig­i­nal full-size con­tract, 🇺🇸SP500ORG. The chain reach­es back to 1982.

Some­times the larg­er con­tract rep­re­sents the entire his­to­ry: 🇨🇦TSE60_mini uses the stan­dard contract’s data because the providers do not cov­er the small­er ver­sion. These cas­es are marked “uses full size data” in the Com­ment col­umn and are only pos­si­ble if small-size vari­ants of the con­tract are always liq­uid enough.

Where the small­er con­tract is suf­fi­cient­ly liq­uid, using the larg­er contract’s data can also save a provider slot, as with 🌽️CORN-W_mi­cro. Fig­ure 3 shows how much his­to­ry this recov­ers in three exam­ples.

“Wait a minute,” you might say. “The S&P 500 Micro did not exist in 1982. How can it appear in a back­test that goes back that far?”

For the years before the Micro exist­ed, the back­test uses the old­er S&P 500 contract’s price his­to­ry and cal­cu­lates posi­tions using the Micro’s small­er con­tract size. This recon­structs how a small­er posi­tion would have behaved over that peri­od.

The full-size, E‑mini and Micro con­tracts there­fore have very sim­i­lar his­to­ries. My sys­tem groups them when allo­cat­ing risk, so adding anoth­er con­tract size does not auto­mat­i­cal­ly give the S&P 500 more weight in the port­fo­lio. Small­er con­tracts still serve a pur­pose: they allow posi­tions to be adjust­ed in small­er steps.

I will return to the details of risk allo­ca­tion in a sep­a­rate arti­cle on port­fo­lio con­struc­tion.

Recov­er­ing the his­to­ry of instru­ments is only half the job. The con­tracts need a clear han­dover, and their prices need to speak the same lan­guage.

Fig­ure 4 shows three ways of com­bin­ing price his­to­ries.

For COCOA, the back­fill Inac­tive­Con­tract is the Decem­ber 1981 con­tract tak­en from CSI. Lat­er con­tracts come from Nor­gate. The han­dover fol­lows con­tract expiry rather than a sin­gle cal­en­dar-date cut­off across all price series.

Price con­ven­tions also need to agree. CSI quotes 🌾WHEAT_micro in dol­lars, while the bro­ker quotes it in cents. There­fore, its prices are mul­ti­plied by 100 before they are com­bined with the old­er wheat con­tracts.

Oth­er migra­tions need a fixed off­set. After the mar­ket closed on April 26, 2024, Mon­tréal Exchange con­vert­ed the out­stand­ing BAX con­tracts expir­ing after June 2024 into three-month CORRA futures1. In the work­book, these are 🇨🇦CAD3M and 🇨🇦CORRA3. The con­ver­sion spread was 32.138 basis points. Because these futures are quot­ed as 100 minus the inter­est rate, putting the old BAX prices on the CORRA basis requires adding 0.32138 price points. The back­fill applies that adjust­ment to the pre­de­ces­sor con­tracts before join­ing the his­to­ries.

If you are now tempt­ed to aban­don futures trad­ing alto­geth­er, I sym­pa­thize. You can lose months untan­gling this mess before you have test­ed a sin­gle trad­ing idea. With equi­ties, at least a good data provider takes the bur­den of splits and oth­er cor­po­rate actions off your shoul­ders. Nor­gate does this well.

And just when the his­to­ries seem com­plete, cur­ren­cies add anoth­er com­pli­ca­tion. The back­test needs exchange-rate his­to­ries to express non-dol­lar posi­tions and prof­its in US dol­lars. Some price his­to­ries, like 🇫🇷️CAC, use euros even for years before the euro exist­ed.

To cov­er those years, I had to recon­struct a euro proxy from the his­tor­i­cal cur­ren­cy bas­ket behind the Euro­pean Cur­ren­cy Unit (ECU).

Adding a futures mar­ket takes one row in a spread­sheet. Get­ting that row right can swal­low an entire week.

Gone, but still in the backtest

An instru­ment can leave today’s trad­ing uni­verse and still be part of the back­test. Build­ing a back­test strict­ly from today’s sur­vivors is prob­lem­at­ic, as is easy to see in equi­ties: omit the com­pa­nies that went bank­rupt, and some expen­sive mis­takes dis­ap­pear from the back­test. That is called sur­vivor­ship bias, and keep­ing delist­ed instru­ments helps address it. The secu­ri­ty mas­ter must there­fore record both what can be trad­ed today and what was avail­able to the strat­e­gy in each ear­li­er peri­od.

Retired mar­kets also add data where it is most wel­come: in the ear­ly years, when far few­er instru­ments exist­ed. Keep­ing them broad­ens the set of mar­kets avail­able in those years and lets a strat­e­gy face more mar­ket con­di­tions. Relat­ed mar­kets still share risks, so every extra instru­ment is not an inde­pen­dent time series, but the broad­er sam­ple makes the back­test more rep­re­sen­ta­tive.

Futures mar­kets can dis­ap­pear for dif­fer­ent rea­sons. Hedg­ing needs change, liq­uid­i­ty dries up, or a replace­ment con­tract attracts more busi­ness. The com­mod­i­ty itself need not have become worth­less. Take 🐖PORKBELLIES, which had their moment of Hol­ly­wood fame in Trad­ing Places (1983)2. CME delist­ed frozen pork bel­ly futures in July 20113 after a pro­longed lack of trad­ing vol­ume. Bacon had not gone out of fash­ion, but trad­ing that par­tic­u­lar futures con­tract had.

Uncle Fred there­fore stamps the file “Retired” and puts it back in the cab­i­net. The trades it gen­er­at­ed, includ­ing the bad ones, still belong in the back­test. Fred may enjoy a tidy desk, but that is no excuse to put the losers through the shred­der.

A more recent exam­ple comes from my bro­ker. Inter­ac­tive Bro­kers will stop trad­ing its Lon­don Met­al Exchange looka­likes in Novem­ber 2026. These are over-the-counter con­tracts that ref­er­ence LME futures4, giv­ing access to met­als such as alu­minum, cop­per and tin. The under­ly­ing LME mar­kets con­tin­ue to exist, but this route to trad­ing them is clos­ing. Their his­to­ries remain use­ful even after they leave the live uni­verse. Here, “retired” describes their sta­tus in the sys­tem. It does not mean the exchange has delist­ed the under­ly­ing mar­ket.

The Inac­tive­Con­tract col­umn records where the retained con­tract his­to­ry ends. It con­tains a con­tract iden­ti­fi­er, rather than a cal­en­dar date. For 🟠️COPPER-LME, for exam­ple, 1763CAM-2026M iden­ti­fies the June 2026 con­tract. Lat­er con­tracts are exclud­ed when build­ing the his­to­ry, and an instru­ment with this field filled in is omit­ted from the live con­fig­u­ra­tion. That June cut­off is sep­a­rate from IB’s Novem­ber with­draw­al. The final sim­u­lat­ed trade also depends on the roll sched­ule and the data it needs.

The same col­umn serves two pur­pos­es. A back­fill entry sup­plies old­er con­tracts to anoth­er instru­ment, as in the cocoa exam­ple above. A retired instru­ment keeps its own his­tor­i­cal iden­ti­ty and can remain in the back­test.

Fig­ure 5 shows the 55 retired instru­ments with stored price his­to­ries. The retire­ment cab­i­net holds rather more than a few curiosi­ties.

Fig­ure 6 counts the his­to­ries avail­able in each year. Togeth­er, these retired instru­ments con­tribute ten his­to­ries in 1980 and 27 in 1990, reach­ing a peak of 39. The retire­ment cab­i­net is doing use­ful work long before many of today’s con­tracts enter the pic­ture.

Keep­ing a delist­ed instru­ment does not auto­mat­i­cal­ly make it eli­gi­ble every day in the his­toric back­test: The instru­ment still needs usable data and enough liq­uid­i­ty dur­ing the peri­od being test­ed. The aim is to include mar­kets that could real­is­ti­cal­ly have been trad­ed then, with the infor­ma­tion avail­able then.

One market, several contracts

Uncle Fred has bare­ly put his stamp down when the Aus­tralian dol­lar returns to his desk wear­ing a dif­fer­ent exchange badge.

“New tick­er” it announces. “More diver­si­fi­ca­tion”. Fred looks over his glass­es. “I have three stamps that say ‘Reject­ed’. That doesn’t make them three inde­pen­dent instru­ments.”

The same expo­sure can come in sev­er­al con­tract sizes or trade on com­pet­ing exchanges. The work­book excludes 🇦🇺AUD-ICE in favor of AUD, for exam­ple, and 🇪🇺ESTR-CME in favor of ESTR. In both cas­es, the Com­ment col­umn doc­u­ments a cheap­er, more liq­uid alter­na­tive. Fred points to it with the expres­sion of a man who sus­pects you have come all this way with­out read­ing the form.

Each can­di­date still deserves a prop­er exam­i­na­tion. Whether two con­tracts count as dupli­cates is a case-by-case deci­sion. I treat 🍫COCOA-LDN and COCOA as dis­tinct mar­kets: Lon­don cocoa is priced in ster­ling for deliv­ery in Europe, while New York cocoa is priced in US dol­lars for deliv­ery in the US5. Cur­ren­cy move­ments and local sup­ply-and-demand con­di­tions can there­fore dri­ve their prices apart. Even Fred accepts that “both involve choco­late” is an inad­e­quate basis for a rejec­tion.

For the back­test, anoth­er high­ly cor­re­lat­ed instru­ment may add no diver­si­fi­ca­tion at all. Pho­to­copy­ing the same wit­ness state­ment does not give you ten wit­ness­es. Count­ing each ver­sion as a sep­a­rate mar­ket can also give the under­ly­ing expo­sure more weight sim­ply because an exchange offers anoth­er way to pack­age it. Ten wrap­pers around the same mar­ket do not make a diver­si­fied port­fo­lio.

The addi­tion­al con­tract also needs a use­ful job. If the pre­ferred con­tract pro­vides the desired expo­sure more cheap­ly and with bet­ter liq­uid­i­ty, its rival may nev­er reach the port­fo­lio. Fred com­pares costs for equiv­a­lent expo­sure. A low­er com­mis­sion per con­tract is less impres­sive when you need ten of them. The Black­list flag records the exclu­sion, and Com­ment explains the deci­sion, sav­ing the reject­ed appli­cant from return­ing next year with a fresh hair­cut and the same spread.

Then 🇦🇺AUD_micro arrives. Fred checks the con­tract size: A$10,000, against AUD’s A$100,000. “You appear to have lost a zero.” In this case, that is the point. A small­er con­tract allows fin­er posi­tion siz­ing when posi­tions must be round­ed to whole con­tracts, espe­cial­ly in a small­er account. The S&P 500 vari­ants dis­cussed ear­li­er serve the same pur­pose. Fred puts down the rejec­tion stamp. “Approved. But your larg­er rel­a­tive has already claimed the diver­si­fi­ca­tion allowance.”

Cor­re­la­tion weight­ing pre­vents retained vari­ants from each receiv­ing the allo­ca­tion of an inde­pen­dent mar­ket. Port­fo­lio con­struc­tion then decides how to express the expo­sure. High cor­re­la­tion alone there­fore does not set­tle the appli­ca­tion: the “high­ly cor­re­lat­ed” step in Fig­ure 2 removes alter­na­tives that offer no com­pelling exe­cu­tion advan­tage, while the final “unique mar­kets” bar groups the retained size vari­ants.

Fig­ure 7 shows the ver­dict for one exam­ple: keep the stan­dard and micro con­tracts at CME, and exclude the ICE alter­na­tive. Three appli­ca­tions, two approvals, one AUD/USD mar­ket. Fred has earned a bis­cuit. He breaks it in half and briefly con­sid­ers record­ing two.

Broker access

Fred has approved the paper­work. Unfor­tu­nate­ly, the bro­ker has its own rejec­tion stamp, and unlike Fred, it does not stop work­ing at five.

An instru­ment can have a use­ful price his­to­ry and still be unavail­able to trade. The DoNot­Trade col­umn lets me keep that dis­tinc­tion in the sys­tem. With the flag set to 1, an instru­ment will still gen­er­ate a trad­ing sig­nal and receive a the­o­ret­i­cal posi­tion in the opti­mal port­fo­lio, where frac­tion­al con­tracts are allowed. Dur­ing port­fo­lio con­struc­tion, how­ev­er, its posi­tion lim­it is set to zero. It may con­tribute infor­ma­tion, but the result­ing port­fo­lio holds no con­tracts in it.

This assumes the instru­ment is not black­list­ed. With Black­list set to 1, its price his­to­ry is not loaded and no trad­ing sig­nal is gen­er­at­ed. The sys­tem still checks its bid/ask spreads if DoNot­Trade is 0. Fig­ure 8 com­pares these paths through the sys­tem.

I typ­i­cal­ly refrain from hav­ing too many instru­ments in the uni­verse that gen­er­ate sig­nals but are not trad­able because sev­er­al exper­i­ments have shown that when an instru­ment gen­er­ates a sig­nal but is not trad­able, the final port­fo­lio does not improve.

Some trad­abil­i­ty restric­tions arise from reg­u­la­tion. The work­book flags some US sec­tor futures such as 💻US-TECH because of restric­tions asso­ci­at­ed with sec­tion 871(m) of the US tax code with regard to non-US investors6.

Oth­er obsta­cles are more mun­dane. The bro­ker may not sup­port the prod­uct for the account, or may not make it avail­able for mar­gin trad­ing. Restric­tions can also be tem­po­rary. The bro­ker may tem­porar­i­ly block trades that open or increase a posi­tion. The mar­ket can remain open, with prices arriv­ing nor­mal­ly, while my route into it is blocked. DoNot­Trade is a blunt con­trol: it impos­es a zero posi­tion lim­it rather than rep­re­sent­ing every vari­a­tion of those rules. The Com­ment col­umn records the rea­son, and a tem­po­rary restric­tion needs revis­it­ing when the bro­ker changes its pol­i­cy.

There­fore, bro­ker access is an ongo­ing main­te­nance job. Fig­ure 9 shows the cur­rent process: the sys­tem auto­mat­i­cal­ly records whether the bro­ker allows each instru­ment to be trad­ed, but I update DoNot­Trade man­u­al­ly in the secu­ri­ty mas­ter. Once enough trad­abil­i­ty his­to­ry has accu­mu­lat­ed, I plan to feed it auto­mat­i­cal­ly into the back­test, with the option of man­u­al over­rides.

Anyone on the other side?

Fred has the broker’s approval. He calls out, “Next, please.” Noth­ing hap­pens. He tries again. For the first time in his career, the emp­ty wait­ing room is a prob­lem.

Mar­kets with vir­tu­al­ly no activ­i­ty usu­al­ly go on my Black­list. Thin­ly trad­ed mar­kets can stay in the dataset because liq­uid­i­ty changes. The eli­gi­bil­i­ty is reassessed each day with­in the sys­tem with its own flag IsTrad­able.

This dai­ly liq­uid­i­ty check has two parts. Aver­age dai­ly vol­ume over the pre­vi­ous 20 trad­ing days must exceed 50 con­tracts. Risk vol­ume must also exceed USD 100,000. This mea­sure mul­ti­plies aver­age con­tract vol­ume by the contract’s val­ue in US dol­lars and its esti­mat­ed annu­alised volatil­i­ty. The result puts dif­fer­ent­ly sized con­tracts on a com­mon risk scale.

Fig­ure 10 illus­trates these checks using 🇪🇺MSCIEU, an MSCI Europe equi­ty-index future. It remains eli­gi­ble through­out 2021, becomes inter­mit­tent as activ­i­ty weak­ens, spends much of the sec­ond half of 2024 out­side the trad­able uni­verse, and qual­i­fies for most of 2025. In 2026, it moves in and out again as the two liq­uid­i­ty mea­sures cross their thresh­olds.

IsTrad­able also checks min­i­mum volatil­i­ty and esti­mat­ed hold­ing costs. Those tests pass through­out this exam­ple. To avoid con­stant­ly switch­ing eli­gi­bil­i­ty on and off, a pass­ing result is car­ried for­ward for up to 30 trad­ing days. The flag can there­fore remain 1 after liq­uid­i­ty falls below a thresh­old. An eli­gi­ble instru­ment can thus be includ­ed in the live port­fo­lio.

The mar­ket can qual­i­fy again when activ­i­ty returns. At the end of the chart, both liq­uid­i­ty mea­sures have slipped below their thresh­olds, but the flag remains 1 because the last pass­ing obser­va­tion is still inside the 30-day grace peri­od. Fred approves of the dai­ly review. An appli­ca­tion that can be reopened every morn­ing is prac­ti­cal­ly a pen­sion plan.

Cost configuration

Trad­ing involves two main vari­able costs: bro­ker com­mis­sions and bid–ask spreads.

These costs arise when­ev­er a posi­tion is opened or closed, includ­ing when it is rolled from one con­tract expiry to the next. Depend­ing on the rolling method, this may involve clos­ing the exist­ing posi­tion and open­ing a new one, or trad­ing the cal­en­dar spread direct­ly.

The tim­ing and method of each roll can mate­ri­al­ly affect the trad­ing system’s total costs. Automat­ing this process prop­er­ly is a top­ic in its own right.

In brief, PriceRoll­Cy­cle defines the con­tracts used for each instru­ment, while Hol­dRoll­Cy­cle spec­i­fies the expiries that the sys­tem may hold. RollOff­set­Days sets how many trad­ing days before expiry a roll may occur, while Car­ry­Off­set deter­mines whether the sys­tem cal­cu­lates an instrument’s car­ry using the next or the pre­vi­ous con­tract.

The work­book also spec­i­fies a Spread­Cost for each instru­ment. Expressed in the con­tract cur­ren­cy, this val­ue rep­re­sents half of the instrument’s typ­i­cal bid–ask spread. The sys­tem uses it as an ini­tial esti­mate when reli­able his­tor­i­cal spread data are not yet avail­able. Once enough obser­va­tions and actu­al fills have been col­lect­ed to esti­mate the spread cost, the field is no longer used.

You may have noticed that the work­book does not spec­i­fy bro­ker fees for each instru­ment. My sys­tem retrieves the cur­rent com­mis­sion from the bro­ker auto­mat­i­cal­ly and main­tains a his­to­ry of each instrument’s fees.

Fig­ure 11 applies the dai­ly cost fil­ter to five live instru­ments and the black­list­ed AEX Mini. For each instru­ment, it adds the one-way com­mis­sion to the esti­mat­ed half-spread, divides that cost by the cur­rent annu­alised risk of one con­tract, and then mul­ti­plies the result by the num­ber of sched­uled rolls per year. This com­mon scale reveals what dol­lar fees can hide: the Nas­daq Nano has a low­er dol­lar fee than its larg­er rel­a­tives, but a much high­er cost rel­a­tive to the risk it car­ries. Sim­i­lar­ly, month­ly rolls can push an appar­ent­ly mod­est trad­ing cost above the screen­ing thresh­old.

As Fig­ure 11 shows, the AEX Mini exceeds the 10% ceil­ing and is there­fore marked “too expen­sive” in the work­book. Pass­ing this cost screen does not by itself make an instru­ment trad­able: the liq­uid­i­ty and volatil­i­ty checks apply inde­pen­dent­ly, and each strat­e­gy also decides which instru­ments it can trade based part­ly on its turnover.

Com­mis­sions change over time, and real­is­tic esti­mates are essen­tial for a mean­ing­ful back­test. Because the price his­to­ries of some instru­ments extend back to the 1970s, the cost his­to­ry must include at least rea­son­able prox­ies for the bro­ker fees charged at the time. In the 1970s, com­mis­sions could be as high as USD 30 per trans­ac­tion!

I will cov­er how these set­tings work togeth­er, how to auto­mate rolls effi­cient­ly and how to esti­mate costs for the ear­li­er part of the back­test in a sep­a­rate arti­cle.

Contract quirks

Fred likes the phrase “stan­dard­ised con­tracts”. It sounds as though some­one has already done the dif­fi­cult work. He opens the secu­ri­ty mas­ter expect­ing a qui­et after­noon and finds a pet­ting zoo.

The first ani­mal is 🔥GAS-US-WEEKLY, which expires every Fri­day7. Fred’s fil­ing sys­tem iden­ti­fies a futures con­tract only by year and month. This works beau­ti­ful­ly until a month con­tains five Fri­days. “Which Fri­day?” asks Fred. The spread­sheet main­tains a dig­ni­fied silence (see Fig­ure 12). This instru­ment is black­list­ed because the required his­to­ry is unavail­able, but the prob­lem of week­ly expiries would remain even if the data became avail­able.

Then comes Euro­pean nat­ur­al gas along: It changes its size with­out ask­ing per­mis­sion. The con­tract sizes of Dutch TTF 🔥GAS-W-NL8 and UK NBP 🔥GAS-W-UK9 depend on the num­ber of days in the deliv­ery month, so a March con­tract is larg­er than a Feb­ru­ary con­tract. TTF also counts the deliv­ery hours, where day­light-sav­ing time occa­sion­al­ly adds or removes an hour.

My solu­tion is to hold only Decem­ber expiries (hence the suf­fix ‑W for Win­ter). Decem­ber reli­ably sup­plies 31 days, giv­ing fixed con­fig­ured mul­ti­pli­ers of 744 MWh for TTF and 31,000 therms for NBP. It is less a tri­umph of finan­cial engi­neer­ing than a strate­gic alliance with the cal­en­dar.

Fred is just begin­ning to admire this solu­tion when ICE announces a min­i­mum trad­ing size of five lots for both prod­ucts. Order­ing one gas con­tract is not on the menu: The small­est serv­ing feeds a fam­i­ly of five. Fred marks both rows DoNot­Trade, stamps the appli­ca­tion closed and con­grat­u­lates him­self on anoth­er job well done.

Trad­ing on exchanges around the world brings plen­ty of local pecu­liar­i­ties. Aus­tralia is a par­tic­u­lar­ly gen­er­ous con­trib­u­tor. Until June 2025, ASX cash equi­ties opened in five groups ordered by secu­ri­ty code10. Trad­ing start­ed in alpha­bet­i­cal batch­es: A–B first, C–F next, and every­one from S–Z wait­ing at the back. ASX now uses a sin­gle open­ing auc­tion, but its bond futures still keep Fred employed.

The Aus­tralian bond futures have a fixed face val­ue of AUD 100,000, yet their prices are quot­ed as 100 minus the annu­al yield. Con­se­quent­ly, the dol­lar val­ue of the same yield move varies with the lev­el of inter­est rates11. The exact con­ver­sion is non­lin­ear.

My sys­tem uses a fixed aver­age mul­ti­pli­er instead. This will not win a prize in numer­i­cal analy­sis, but the vari­a­tion is small enough for the job and Com­ment records the approx­i­ma­tion for the next per­son who won­ders why the mul­ti­pli­er looks sus­pi­cious­ly hand-craft­ed.

Hong Kong sup­plied anoth­er les­son when I first trad­ed equi­ties there. At noon, the reg­u­lar morn­ing ses­sion end­ed. I checked the logs, the inter­net con­nec­tion, and, briefly, my san­i­ty. Noth­ing was bro­ken: the after­noon ses­sion begins at 1 p.m. Even an elec­tron­ic mar­ket can put up a sign say­ing, “Back after lunch.”

Final­ly, expiry sched­ules can change dur­ing the life­time of an instru­ment. For 🌾MILLWHEAT, Com­ment records a cycle change and says that the usable sequence begins with the March 2015 con­tract, 2015H. The cur­rent cycle com­pris­es March, May, Sep­tem­ber and Decem­ber12. Unfor­tu­nate­ly, a com­ment is doc­u­men­ta­tion, not an exe­cutable instruc­tion. Writ­ing “start here” in a spread­sheet does not make the loader start there, just as Fred’s note say­ing “please work” does not repair the office print­er.

These odd­i­ties point to the same engi­neer­ing rule: a futures iden­ti­fi­er is part of the data mod­el, not just a label. If an excep­tion changes prices, posi­tion size, trad­ing access or con­tract selec­tion, the rule belongs in code and tests. Com­ment should explain the excep­tion, not be the only place where it exists.

Fred adds “stan­dard­ised” to his list of words that should require sup­port­ing evi­dence.

Key Take­aways

  • A secu­ri­ty mas­ter is not a list of things to buy. Of 684 entries, 301 result in trad­able instru­ments, and those rep­re­sent 243 mar­ket expo­sures. Dai­ly checks can nar­row the live uni­verse fur­ther.

  • Back­fill and retired rows are his­tor­i­cal infra­struc­ture, not clut­ter. Con­tract han­dovers, price units and con­ver­sion off­sets must all agree before his­to­ries can be joined.

  • Black­list, DoNot­Trade and IsTrad­able answer dif­fer­ent ques­tions: whether to load the his­to­ry, whether the port­fo­lio may hold the instru­ment, and whether it pass­es dai­ly liq­uid­i­ty, volatil­i­ty and cost tests.

  • Con­tract vari­ants earn a place through cheap­er exe­cu­tion or posi­tion siz­ing, not by pre­tend­ing to be inde­pen­dent mar­kets. Group cor­re­lat­ed vari­ants before allo­cat­ing risk to them.

  • Doc­u­men­ta­tion is essen­tial: it records what is unusu­al, why an excep­tion exists, and how it should be han­dled.

Classification system

How instru­ments become risk buck­ets.

The secu­ri­ty mas­ter uses three clas­si­fi­ca­tion lev­els. Asset­Class divides the uni­verse into sev­en top-lev­el groups: agri­cul­ture, ener­gy, equi­ty, for­eign exchange, met­als, rates, and volatil­i­ty. Each class is sub­di­vid­ed at two fur­ther lev­els. The aim is to group instru­ments by eco­nom­ic expo­sure. For exam­ple, the rates class sep­a­rates short-term inter­est rates (STIR) from longer-term bonds (Bonds). The third lev­el usu­al­ly adds a region or a nar­row­er prod­uct fam­i­ly. An equi­ty con­tract might there­fore be clas­si­fied as Equi­ty / Index / EMEA, and a wheat future as Ags / Grain / Wheat.

This hier­ar­chy sup­ports the risk allo­ca­tion mod­el. Each top-lev­el group receives the same risk allo­ca­tion, except volatil­i­ty, which receives less. The same prin­ci­ple applies at the low­er lev­els. Cor­re­la­tion group­ing fur­ther reduces the influ­ence of con­tracts that rep­re­sent sub­stan­tial­ly the same mar­ket. Togeth­er, the instru­ments in Equi­ty / Index receive the same cap­i­tal allo­ca­tion as those in Ener­gy / Coal.

The con­se­quence is easy to miss. Adding a thir­ti­eth equi­ty-index future does not give equi­ties thir­ty times the risk allo­ca­tion of a sin­gle ener­gy con­tract. It main­ly divides the exist­ing equi­ty allo­ca­tion into small­er pieces.

Fig­ure 13 shows the num­ber of trad­able instru­ments in each asset class over time. The 150-day aver­age smooths out the effects of local hol­i­days and brief drops in liq­uid­i­ty. The equi­ty class has grown fastest, par­tic­u­lar­ly since 2000. Agri­cul­ture and rates have much longer his­to­ries but have expand­ed more slow­ly. Volatil­i­ty remains delib­er­ate­ly small.

Some clas­si­fi­ca­tions are fac­tu­al. A Japan­ese yen future is FX / Devel­oped / ASIA. Oth­ers reflect choic­es about how the port­fo­lio should treat an expo­sure.

The work­book places cryp­to futures under Met­als / Cryp­to / None. This does not mean that Bit­coin is a met­al. It pre­vents a still-small group from acquir­ing its own top-lev­el risk bud­get mere­ly because it does not fit the tra­di­tion­al labels. The word None at the third lev­el is also inten­tion­al: geog­ra­phy adds lit­tle to that group­ing.

🌐MSCIWORLD is anoth­er judg­ment call. Its bench­mark is glob­al, but the work­book assigns it to the US branch because the index is heav­i­ly weight­ed toward US equi­ties.

The labels need not be philo­soph­i­cal­ly per­fect. Sev­er­al clas­si­fi­ca­tions can be rea­son­able. The scheme must be inter­nal­ly con­sis­tent and doc­u­ment­ed, and changes to it must be treat­ed as mod­el changes. Reclas­si­fy­ing an instru­ment can alter his­tor­i­cal group counts, port­fo­lio weights, and any cross-sec­tion­al sig­nal built from its peers.

Process automation

Soft­ware assem­bles the work — with a human in the loop.

The annu­al update begins with three prod­uct lists and ends with a revised secu­ri­ty mas­ter and recal­i­brat­ed strate­gies. In between lies the tedious work: find­ing what has changed, decid­ing what deserves a clos­er look, and check­ing that the result­ing data can sup­port research and trad­ing. Automa­tion turns a tour of sev­er­al hun­dred spread­sheet rows into a short­er list of deci­sions. Fig­ure 14 shows the process.

Collect, compare, reconcile

The process starts with three auto­mat­ed steps: retriev­ing the futures uni­verse from Inter­ac­tive Bro­kers, col­lect­ing CSI’s prod­uct cat­a­log, and obtain­ing Norgate’s futures sym­bols. Each source pro­vides a dif­fer­ent part of the pic­ture. The bro­ker lists prod­ucts that may be avail­able to trade. The providers list the his­to­ries they cov­er.

Next comes match­ing. Auto­mat­ed helpers com­pare the bro­ker cat­a­log with the sym­bols already record­ed in the secu­ri­ty mas­ter. They flag new prod­ucts to con­fig­ure and exist­ing sym­bols that no longer appear in the broker’s cat­a­log. Resolv­ing these gaps is still a man­u­al process. The descrip­tion, exchange, cur­ren­cy, con­tract size, and set­tle­ment terms help estab­lish whether a bro­ker prod­uct match­es a provider’s his­to­ry. Sim­i­lar names are use­ful clues, but they are not proof.

From candidates to decisions

Once the sources are rec­on­ciled, the review pro­ceeds through sev­er­al fil­ters and pro­pos­al lists. The first pass removes prod­ucts out­side the intend­ed scope: sin­gle-stock and spot-quot­ed futures, along with mar­kets the sys­tem can­not access. The remain­ing can­di­dates need usable his­to­ries and a way to esti­mate trad­ing costs.

The next pass revis­its ear­li­er exclu­sions. Has a pre­vi­ous­ly illiq­uid con­tract attract­ed vol­ume? Has a short his­to­ry become long enough? Is bid/ask data now avail­able? Have mea­sured spreads fall­en below the cost esti­mate that kept the instru­ment out? The note­book iden­ti­fies these can­di­dates using provider sta­tis­tics, stored his­to­ries, and col­lect­ed spreads. Where evi­dence is miss­ing, the work list may point back to the exchange for a man­u­al liq­uid­i­ty check.

Exist­ing instru­ments need atten­tion too. Miss­ing bro­ker sym­bols and sus­tained zero vol­ume can sig­nal dete­ri­o­rat­ing access or liq­uid­i­ty. Oth­er reports com­pare high­ly cor­re­lat­ed con­tracts and sug­gest shar­ing his­to­ries across sizes. These pro­pos­als need review: units and set­tle­ment terms can dif­fer. Using a larg­er contract’s his­to­ry also omits the small­er contract’s own vol­ume and open-inter­est data, which can affect roll deci­sions.

The review ends with a deci­sion for each can­di­date: add it, revise its con­fig­u­ra­tion, retain it only for his­tor­i­cal research, or leave it exclud­ed. The work­book records the deci­sion and its rea­son, so next year’s review can ques­tion an assump­tion rather than recon­struct it.

The reports iden­ti­fy can­di­dates — I make the changes. Fred’s REVIEWED stamp is only use­ful if next year’s review­er can tell what he checked.

Rebuild, check, repeat

After the work­book changes, the data pipeline reloads the def­i­n­i­tions, updates the con­tract his­to­ries, applies migra­tions and back­fills, cre­ates roll cal­en­dars, and assem­bles the back-adjust­ed series. This is where a plau­si­ble spread­sheet row has to pro­duce usable data.

Auto­mat­ed data qual­i­ty checks sup­port each step, as out­lined below. A fail­ure sends the rel­e­vant def­i­n­i­tion or source data back for inves­ti­ga­tion.

Data qual­i­ty checks

  • Spread­sheet: com­plete, con­sis­tent instru­ment def­i­n­i­tions, iden­ti­fiers, units, and doc­u­ment­ed exclu­sions.

  • Con­tract data: expect­ed his­to­ries and dates, cur­rent obser­va­tions, sen­si­ble prices and vol­umes, and miss­ing data flagged for review.

  • Migra­tions and back­fills: com­pat­i­ble con­tracts, cor­rect unit con­ver­sions, and joins that pre­serve the intend­ed expo­sure.

  • Roll cal­en­dars: con­tracts avail­able for the con­fig­ured hold­ing and pric­ing sched­ules, includ­ing those need­ed for upcom­ing rolls and car­ry cal­cu­la­tions.

  • Back-adjust­ed series: con­tin­u­ous his­to­ries with plau­si­ble returns, sup­port­ed by the required cur­ren­cy data.

  • Exe­cu­tion feed­back: bro­ker access, col­lect­ed spreads, and exe­cu­tion prices checked for dis­crep­an­cies that war­rant anoth­er look.

The updat­ed mas­ter then feeds into strat­e­gy recal­i­bra­tion. New mar­kets and longer his­to­ries can change sig­nal mag­ni­tudes and cor­re­la­tions. The sys­tem re-esti­mates fore­cast scal­ing and diver­si­fi­ca­tion adjust­ments, then reruns the port­fo­lio back­test after costs and pro­duces a recal­i­bra­tion report.

The annu­al review revis­its the whole uni­verse. Dai­ly auto­mat­ed checks and mon­i­tor­ing may prompt an ad hoc review. A new prod­uct or a bro­ker restric­tion (as in the LME exam­ple above) can there­fore restart the rel­e­vant part of the process. The aim is to make each update small­er and eas­i­er to explain, rather than save a year’s sur­pris­es for one hero­ic spread­sheet ses­sion.

Key Take­aways

  • Auto­mat­ed checks flag new prod­ucts, miss­ing sym­bols, and chang­ing mar­ket con­di­tions for review. Revis­it ear­li­er exclu­sions when the evi­dence changes.

  • Con­tract match­ing and inclu­sion deci­sions still need human judg­ment.

  • Val­i­date what the revised work­book pro­duces: con­tract data, migra­tions, roll cal­en­dars, and back-adjust­ed his­to­ries. Failed checks send the rel­e­vant def­i­n­i­tions or data back for review.

Conclusion

Small gains, earned the tedious way.

Suc­cess­ful sys­tem­at­ic trad­ing depends less on bril­liant strate­gies than on get­ting a great many dull things right. The secu­ri­ty mas­ter is part of that work: it keeps the uni­verse used for research con­nect­ed to the mar­kets avail­able for trad­ing. Neglect it, and a promis­ing back­test may rely on trades you could nev­er have made.

So far, every arti­cle in this series has involved grind­ing out anoth­er small improve­ment. These gains add up. The cumu­la­tive result comes from patient atten­tion to details that are easy to over­look and rarely excit­ing to fix.

The lat­est secu­ri­ty mas­ter update raised my back­test­ed Sharpe ratio by 0.1 over the peri­od since the 2008 finan­cial cri­sis. Much of that improve­ment came from exclud­ing illiq­uid instru­ments and mar­kets I could not trade. Chas­ing max­i­mum diver­si­fi­ca­tion with­out get­ting the details right had not helped. Being more selec­tive did.

Uncle Fred sur­veys the reject­ed appli­ca­tions, straight­ens the sur­viv­ing files, and rais­es his stamp for a thun­der­ous APPROVED. His con­tri­bu­tion to quan­ti­ta­tive finance is com­plete for this year. He has earned a sec­ond bis­cuit. Some­where out­side, a genius is wait­ing to explain a rev­o­lu­tion­ary strat­e­gy. Fred calls through the door: “Take a num­ber. And bring the paper­work.”

Appendix A: Definitions and Methodology

Cap­i­tal and risk tar­get
Results assume no com­pound­ing, an ini­tial nor­mal­ized cap­i­tal of 1, and a 25% volatil­i­ty tar­get. The base cur­ren­cy is USD and all prices of futures con­tracts are con­vert­ed to their USD val­ue using the respec­tive end-of-day exchange rate.
Costs
All per­for­mance fig­ures are stat­ed after esti­mat­ed trad­ing costs unless stat­ed oth­er­wise.
Sharpe ratio
Annu­al­ized from dai­ly returns, after esti­mat­ed trad­ing costs, with­out geo­met­ric com­pound­ing, and assum­ing a risk-free rate of 0%. No excess-return adjust­ment is applied, so the fig­ure is a return-to-risk ratio rather than a risk-pre­mi­um ratio and is not direct­ly com­pa­ra­ble to pub­lished Sharpe ratios that sub­tract a cash rate.
Draw­down
Max­i­mum and aver­age draw­down are report­ed as per­cent­ages of cap­i­tal. Draw­down dura­tion is report­ed in trad­ing days and mea­sures the time from a peak until that peak is regained.
Cor­re­la­tions
Cal­cu­lat­ed from strat­e­gy returns after esti­mat­ed trad­ing costs.
Month­ly skew­ness
Skew­ness of month­ly returns, where a month’s return is the sum of its dai­ly returns with­out com­pound­ing. Com­put­ed as the third stan­dard­ized moment of the month­ly dis­tri­b­u­tion (pop­u­la­tion form, no sam­ple cor­rec­tion). Pos­i­tive val­ues indi­cate occa­sion­al large gains against many small loss­es, neg­a­tive val­ues the reverse. Month­ly rather than dai­ly returns are used because dai­ly skew­ness is dom­i­nat­ed by sin­gle-day noise.
Low­er and upper tail
Tail ratios of dai­ly returns after esti­mat­ed trad­ing costs, with the mean removed. The low­er tail is the 1st per­centile divid­ed by the 30th per­centile, the upper tail the 99th per­centile divid­ed by the 70th, each divid­ed by 4.43, the cor­re­spond­ing ratio of a nor­mal dis­tri­b­u­tion. A val­ue of 1 means the tail is as heavy as a nor­mal distribution’s; val­ues above 1 mean fat­ter tails, val­ues below 1 thin­ner tails. The ratios are scale-free, so they can be com­pared across strate­gies with dif­fer­ent volatil­i­ties.
Instru­ment
A futures con­tract on a par­tic­u­lar under­ly­ing asset. The same asset may be trad­ed as two dif­fer­ent instru­ments — for exam­ple two con­tract sizes on the same under­ly­ing, such as mini and micro con­tracts.
Data sources
Dai­ly data for indi­vid­ual futures con­tracts come from Nor­gate Data and Com­mod­i­ty Sys­tems Inc. (CSI). Bid/ask quotes used to esti­mate spread costs come from Inter­ac­tive Bro­kers and Data­ben­to, sub­ject to mar­ket cov­er­age.
Trad­able uni­verse
Eli­gi­bil­i­ty depends on data qual­i­ty, liq­uid­i­ty, volatil­i­ty, esti­mat­ed costs and the restric­tions record­ed in the secu­ri­ty mas­ter. The uni­verse changes over time, for the con­struc­tion and main­te­nance of the uni­verse, see Build­ing a Futures Secu­ri­ty Mas­ter and the accom­pa­ny­ing secu­ri­ty mas­ter.
Burn-in
Sig­nal cal­cu­la­tions require an ini­tial­iza­tion peri­od before an instru­ment becomes eli­gi­ble to trade. Obser­va­tions dur­ing burn-in are neu­tral and do not cre­ate sig­nals that will be trad­ed on.
Liq­uid­i­ty quin­tiles
Instru­ments are assigned to quin­tiles using their most recent 20-day aver­age risk vol­ume in USD. Quin­tile 1 con­tains the most liq­uid instru­ments.
Strat­e­gy fam­i­ly
A strat­e­gy fam­i­ly groups strate­gies with sim­i­lar behav­ior. There are cur­rent­ly two fam­i­lies: diver­gent and con­ver­gent. Diver­gent strate­gies seek to prof­it from per­sis­tent price move­ments, while con­ver­gent strate­gies seek to prof­it from prices revert­ing toward an equi­lib­ri­um lev­el.
Strat­e­gy
Sev­er­al para­me­ters are com­bined into an ensem­ble, which reduces depen­dence on any one para­me­ter esti­mate. This ensem­ble of para­me­ters is called a strat­e­gy and also pro­vides some diver­si­fi­ca­tion. Each ver­sion of the strat­e­gy using a par­tic­u­lar para­me­ter val­ue (or look­back) is called a strat­e­gy vari­ant.
Para­me­ter
A para­me­ter refers to a spe­cif­ic look­back peri­od used to cal­cu­late a trad­ing sig­nal.

Appendix B: Research and Publication Conventions

Result sta­tus
Unless explic­it­ly stat­ed oth­er­wise, the strat­e­gy results pre­sent­ed are based on hypo­thet­i­cal his­tor­i­cal sim­u­la­tions and do not rep­re­sent the results of actu­al trad­ing. His­tor­i­cal sim­u­la­tion can­not ful­ly repro­duce the effects of live exe­cu­tion, liq­uid­i­ty, fund­ing, mar­ket impact, capac­i­ty con­straints, oper­a­tional events, or chang­ing mar­ket struc­ture.
Inter­pre­ta­tion
His­tor­i­cal per­for­mance is used as diag­nos­tic evi­dence with­in the research process, not as proof that a strat­e­gy will remain prof­itable. Mar­kets are non-sta­tion­ary, sam­ples are finite, and esti­mat­ed rela­tion­ships may change over time.
Trad­ing risk
Futures trad­ing may involve lever­age and sub­stan­tial loss­es. Diver­si­fi­ca­tion and volatil­i­ty tar­get­ing may alter the dis­tri­b­u­tion of risk but do not elim­i­nate the pos­si­bil­i­ty of loss.
Research pur­pose
This arti­cle is pro­vid­ed for infor­ma­tion­al and research pur­pos­es only. It does not con­sti­tute invest­ment, legal, or tax advice, a rec­om­men­da­tion, or an offer or solic­i­ta­tion to buy or sell any finan­cial instru­ment or strat­e­gy.
Default con­ven­tions
Unless a fig­ure or table states oth­er­wise, the def­i­n­i­tions, per­for­mance con­ven­tions, cost assump­tions, and cal­cu­la­tion meth­ods in the pre­ced­ing appen­dix apply through­out the arti­cle. Cap­tions there­fore state only infor­ma­tion need­ed to inter­pret the spe­cif­ic exhib­it or an excep­tion to the default con­ven­tions.
Sources and cal­cu­la­tions
Unless oth­er­wise stat­ed, mar­ket-data sources are those list­ed in Appen­dix A. Data trans­for­ma­tions, strat­e­gy sim­u­la­tions, cal­cu­la­tions, tables and fig­ures are pro­duced by Dr. Sebas­t­ian Schmidt. Ref­er­ences to third-par­ty providers iden­ti­fy the source and do not imply endorse­ment.
Sam­ple peri­ods
The applic­a­ble sam­ple peri­od is stat­ed in the sur­round­ing text, fig­ure, or table where nec­es­sary. Effec­tive sam­ples may dif­fer across instru­ments because of incep­tion dates, data avail­abil­i­ty, liq­uid­i­ty require­ments, and burn-in peri­ods.
Round­ing
Report­ed val­ues may be round­ed for read­abil­i­ty. Cal­cu­la­tions and com­par­isons are based on the under­ly­ing unround­ed val­ues unless stat­ed oth­er­wise. Appar­ent dif­fer­ences caused sole­ly by round­ing are not eco­nom­i­cal­ly mean­ing­ful.
Excep­tions
Fig­ure- or table-spe­cif­ic notes over­ride these default con­ven­tions where they dif­fer. Method­olog­i­cal excep­tions that mate­ri­al­ly affect inter­pre­ta­tion are stat­ed with the rel­e­vant exhib­it.
Doc­u­ment iden­ti­fi­ca­tion
The pub­li­ca­tion month, issue num­ber, and author shown on the cov­er iden­ti­fy the arti­cle. A mate­ri­al­ly revised pub­li­ca­tion should be issued with an updat­ed date, issue, or ver­sion iden­ti­fi­er so that the research state can be dis­tin­guished from ear­li­er releas­es.
Ter­mi­nol­o­gy
Defined terms are used con­sis­tent­ly through­out the arti­cle. Where a term has a strat­e­gy-spe­cif­ic mean­ing, the def­i­n­i­tion in the pre­ced­ing appen­dix gov­erns unless the text explic­it­ly states oth­er­wise.
Repro­duc­tion and attri­bu­tion
Third-par­ty data remain sub­ject to the terms of the respec­tive data providers. Repro­duc­tion of arti­cle con­tent should pre­serve rel­e­vant source attri­bu­tion and iden­ti­fy Dr. Sebas­t­ian Schmidt as the author of its cal­cu­la­tions and research.
·

,
  • Strategy Recalibration Breakout

    This report evaluates the Breakout strategy through signal diagnostics, parameter selection, robustness testing, and portfolio integration. It examines whether historical performance holds up under recent conditions and whether the strategy adds value to the portfolio. Despite strong results over the… Read more.

,
  • Crafting a Trading Strategy

    Developing a systematic trading strategy rarely begins with a perfect idea. Instead, it is an iterative process of forming hypotheses,… Read more.

,