Handle "adjusted contract" chains per root

kivy_mainline_and_py3.8
Tyler Goodlet 2018-12-26 13:30:50 -05:00
parent fb876f3770
commit dc581d0bdc
1 changed files with 22 additions and 11 deletions
piker/brokers

View File

@ -315,17 +315,28 @@ class Client:
contracts.items(),
key=lambda item: item[0].expiry
):
by_key[
ContractsKey(
key.symbol,
key.id,
# converting back - maybe just do this initially?
key.expiry.isoformat(timespec='microseconds'),
)
] = {
item['strikePrice']: item for item in
byroot['chainPerRoot'][0]['chainPerStrikePrice']
}
for chain in byroot['chainPerRoot']:
optroot = chain['optionRoot']
suffix = ''
# handle QTs "adjusted contracts" (aka adjusted for
# the underlying in some way; usually has a '(1)' in
# the expiry key in their UI)
adjusted_contracts = optroot != key.symbol
if adjusted_contracts:
suffix = '(' + optroot[len(key.symbol):] + ')'
by_key[
ContractsKey(
key.symbol + suffix,
key.id,
# converting back - maybe just do this initially?
key.expiry.isoformat(timespec='microseconds'),
)
] = {
item['strikePrice']: item for item in
chain['chainPerStrikePrice']
}
# fill out contract id to strike expiry map
for tup, bystrikes in by_key.items():