Skip to content

Fix Feeder Cattle (GF) tick size in symbol-properties-database#9493

Open
AlexCatarino wants to merge 1 commit into
QuantConnect:masterfrom
AlexCatarino:bug-9492-feeder-cattle-tick-size
Open

Fix Feeder Cattle (GF) tick size in symbol-properties-database#9493
AlexCatarino wants to merge 1 commit into
QuantConnect:masterfrom
AlexCatarino:bug-9492-feeder-cattle-tick-size

Conversation

@AlexCatarino
Copy link
Copy Markdown
Member

Description

Corrects the minimum_price_variation for CME Feeder Cattle (GF) futures in Data/symbol-properties/symbol-properties-database.csv from 0.025 to 0.00025:

-cme,GF,future,Feeder Cattle Futures,USD,50000.0,0.025,1.0,,1,100
+cme,GF,future,Feeder Cattle Futures,USD,50000.0,0.00025,1.0,,1,100

This aligns GF with the per-pound dollar convention used by the other livestock contracts (LE, HE) and with the official CME contract specifications.

Related Issue

Fixes #9492

Motivation and Context

The Feeder Cattle row was using cents-per-pound (0.025) while every other livestock row uses dollars-per-pound (0.00025 for LE / HE). The CME contract specs define the minimum price fluctuation as $0.00025 per pound and the tick value as $12.50 on the 50,000 lb contract.

With price_magnifier = 100 correctly set, the prior 0.025 value produced an effective tick value of 0.025 × 50,000 = $1,250 per contract, vs. the actual exchange tick value of $12.50 — off by a factor of 100. Any algorithm that rounds target / stop / limit prices to Symbol.Properties.MinimumPriceVariation on GF landed on a price grid 100× coarser than the exchange grid, producing orders at unreachable prices or broker rejections. Issue surfaced in TradeStation live trading; sibling contracts (LE, HE, JPY futures) behaved correctly.

References:

Requires Documentation Change

No.

How Has This Been Tested?

Reproduction (against master prior to this fix):

from QuantConnect import *
from QuantConnect.Securities.Future import Futures

algo = QCAlgorithm()
gf = algo.add_future(Futures.Meats.FEEDER_CATTLE).symbol
le = algo.add_future(Futures.Meats.LIVE_CATTLE).symbol
he = algo.add_future(Futures.Meats.LEAN_HOGS).symbol
for s in (gf, le, he):
    p = algo.securities[s].symbol_properties
    print(s.id.symbol, p.minimum_price_variation, p.minimum_price_variation * p.contract_multiplier)
# GF 0.025  1250.00   <-- wrong
# LE 0.00025  10.00
# HE 0.00025  10.00

After the fix, GF reports 0.00025 and a per-contract tick value of $12.50, matching the exchange.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • Refactor (non-breaking change which improves implementation)
  • Performance (non-breaking change which improves performance. Please add associated performance test and results)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Non-functional change (xml comments/documentation/etc)

Checklist:

  • My code follows the code style of this project.
  • I have read the CONTRIBUTING document.
  • I have added tests to cover my changes.
  • All new and existing tests passed.
  • My branch follows the naming convention bug-<issue#>-<description>

GF's minimum_price_variation in the symbol-properties database was
0.025 (cents per pound), inconsistent with every other livestock entry
which uses dollars per pound. CME's official spec is $0.00025/lb
($12.50/tick on 50,000 lb), matching LE and HE.

With price_magnifier=100 the prior value produced an effective per-
contract tick value of $1,250 instead of $12.50, putting algorithm-
rounded prices on a grid 100x coarser than the exchange grid and
causing rejected/unreachable orders on GF.

https://www.cmegroup.com/markets/agriculture/livestock/feeder-cattle.contractSpecs.html
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feeder Cattle (GF) futures tick size is 100x too large in symbol-properties-database

1 participant