Yield history `dict`s, add a `flow_rates` fsp
parent
1aae40cdeb
commit
dfe4473c9a
|
@ -108,7 +108,6 @@ async def tina_vwap(
|
||||||
|
|
||||||
@fsp(
|
@fsp(
|
||||||
outputs=('dolla_vlm', 'dark_vlm'),
|
outputs=('dolla_vlm', 'dark_vlm'),
|
||||||
ohlc=False,
|
|
||||||
curve_style='step',
|
curve_style='step',
|
||||||
)
|
)
|
||||||
async def dolla_vlm(
|
async def dolla_vlm(
|
||||||
|
@ -132,14 +131,24 @@ async def dolla_vlm(
|
||||||
v = a['volume']
|
v = a['volume']
|
||||||
|
|
||||||
# on first iteration yield history
|
# on first iteration yield history
|
||||||
yield chl3 * v
|
yield {
|
||||||
|
'dolla_vlm': chl3 * v,
|
||||||
|
'dark_vlm': None,
|
||||||
|
}
|
||||||
|
|
||||||
i = ohlcv.index
|
i = ohlcv.index
|
||||||
output = vlm = 0
|
output = vlm = 0
|
||||||
dvlm = 0
|
dvlm = 0
|
||||||
|
|
||||||
async for quote in source:
|
async for quote in source:
|
||||||
for tick in iterticks(quote):
|
for tick in iterticks(
|
||||||
|
quote,
|
||||||
|
types=(
|
||||||
|
'trade',
|
||||||
|
'dark_trade',
|
||||||
|
),
|
||||||
|
deduplicate_darks=True,
|
||||||
|
):
|
||||||
|
|
||||||
# this computes tick-by-tick weightings from here forward
|
# this computes tick-by-tick weightings from here forward
|
||||||
size = tick['size']
|
size = tick['size']
|
||||||
|
@ -156,13 +165,15 @@ async def dolla_vlm(
|
||||||
# is reported in the sym info.
|
# is reported in the sym info.
|
||||||
|
|
||||||
ttype = tick.get('type')
|
ttype = tick.get('type')
|
||||||
|
|
||||||
if ttype == 'dark_trade':
|
if ttype == 'dark_trade':
|
||||||
print(f'dark_trade: {tick}')
|
# print(f'dark_trade: {tick}')
|
||||||
key = 'dark_vlm'
|
key = 'dark_vlm'
|
||||||
dvlm += price * size
|
dvlm += price * size
|
||||||
output = dvlm
|
output = dvlm
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
# print(f'vlm: {tick}')
|
||||||
key = 'dolla_vlm'
|
key = 'dolla_vlm'
|
||||||
vlm += price * size
|
vlm += price * size
|
||||||
output = vlm
|
output = vlm
|
||||||
|
@ -175,3 +186,41 @@ async def dolla_vlm(
|
||||||
# print(f' tinal vlm: {tina_lvlm}')
|
# print(f' tinal vlm: {tina_lvlm}')
|
||||||
|
|
||||||
yield key, output
|
yield key, output
|
||||||
|
|
||||||
|
|
||||||
|
@fsp(
|
||||||
|
outputs=(
|
||||||
|
'1m_trade_rate',
|
||||||
|
'1m_vlm_rate',
|
||||||
|
),
|
||||||
|
curve_style='step',
|
||||||
|
)
|
||||||
|
async def flow_rates(
|
||||||
|
source: AsyncReceiver[dict],
|
||||||
|
ohlcv: ShmArray, # OHLC sampled history
|
||||||
|
|
||||||
|
) -> AsyncIterator[
|
||||||
|
tuple[str, Union[np.ndarray, float]],
|
||||||
|
]:
|
||||||
|
# generally no history available prior to real-time calcs
|
||||||
|
yield {
|
||||||
|
'1m_trade_rate': None,
|
||||||
|
'1m_vlm_rate': None,
|
||||||
|
}
|
||||||
|
|
||||||
|
ltr = 0
|
||||||
|
lvr = 0
|
||||||
|
async for quote in source:
|
||||||
|
if quote:
|
||||||
|
|
||||||
|
tr = quote['tradeRate'],
|
||||||
|
if tr != ltr:
|
||||||
|
print(f'trade rate: {tr}')
|
||||||
|
yield '1m_trade_rate', tr
|
||||||
|
ltr = tr
|
||||||
|
|
||||||
|
vr = quote['volumeRate'],
|
||||||
|
if vr != lvr:
|
||||||
|
print(f'vlm rate: {tr}')
|
||||||
|
yield '1m_vlm_rate', tr
|
||||||
|
ltr = tr
|
||||||
|
|
Loading…
Reference in New Issue