Plot the vlm rate (per min) taken verbatim from ib

windows_fixes_yo
Tyler Goodlet 2022-02-02 08:08:04 -05:00
parent 97c2f86092
commit 0b5250d5e3
1 changed files with 86 additions and 35 deletions

View File

@ -50,8 +50,13 @@ from ._forms import (
) )
from ..fsp._api import maybe_mk_fsp_shm, Fsp from ..fsp._api import maybe_mk_fsp_shm, Fsp
from ..fsp import cascade from ..fsp import cascade
from ..fsp._volume import tina_vwap, dolla_vlm from ..fsp._volume import (
tina_vwap,
dolla_vlm,
flow_rates,
)
from ..log import get_logger from ..log import get_logger
from ._style import hcolor
log = get_logger(__name__) log = get_logger(__name__)
@ -440,7 +445,7 @@ class FspAdmin:
# allocate an output shm array # allocate an output shm array
dst_shm, opened = maybe_mk_fsp_shm( dst_shm, opened = maybe_mk_fsp_shm(
fqsn, '.'.join(fqsn),
target=target, target=target,
readonly=True, readonly=True,
) )
@ -648,8 +653,9 @@ async def open_vlm_displays(
if dvlm: if dvlm:
tasks_ready = []
# spawn and overlay $ vlm on the same subchart # spawn and overlay $ vlm on the same subchart
shm, started = await admin.start_engine_task( dvlm_shm, started = await admin.start_engine_task(
dolla_vlm, dolla_vlm,
{ # fsp engine conf { # fsp engine conf
@ -663,11 +669,36 @@ async def open_vlm_displays(
}, },
# loglevel, # loglevel,
) )
tasks_ready.append(started)
# FIXME: we should error on starting the same fsp right
# since it might collide with existing shm.. or wait we
# had this before??
# dolla_vlm,
# spawn and overlay $ vlm on the same subchart
fr_shm, started = await admin.start_engine_task(
flow_rates,
{ # fsp engine conf
'func_name': 'flow_rates',
# 'zero_on_step': True,
# 'params': {
# 'price_func': {
# 'default_value': 'chl3',
# },
# },
},
# loglevel,
)
tasks_ready.append(started)
# profiler(f'created shm for fsp actor: {display_name}') # profiler(f'created shm for fsp actor: {display_name}')
await started.wait() # wait for all engine tasks to startup
async with trio.open_nursery() as n:
for event in tasks_ready:
n.start_soon(event.wait)
pi = chart.overlay_plotitem( dvlm_pi = chart.overlay_plotitem(
'dolla_vlm', 'dolla_vlm',
index=0, # place axis on inside (nearest to chart) index=0, # place axis on inside (nearest to chart)
axis_title=' $vlm', axis_title=' $vlm',
@ -683,7 +714,7 @@ async def open_vlm_displays(
) )
# add custom auto range handler # add custom auto range handler
pi.vb._maxmin = partial( dvlm_pi.vb._maxmin = partial(
maxmin, maxmin,
# keep both regular and dark vlm in view # keep both regular and dark vlm in view
names=['dolla_vlm', 'dark_vlm'], names=['dolla_vlm', 'dark_vlm'],
@ -691,9 +722,9 @@ async def open_vlm_displays(
curve, _ = chart.draw_curve( curve, _ = chart.draw_curve(
name='dolla_vlm', name='dolla_vlm',
data=shm.array, data=dvlm_shm.array,
array_key='dolla_vlm', array_key='dolla_vlm',
overlay=pi, overlay=dvlm_pi,
step_mode=True, step_mode=True,
# **conf.get('chart_kwargs', {}) # **conf.get('chart_kwargs', {})
) )
@ -708,44 +739,64 @@ async def open_vlm_displays(
# specially store ref to shm for lookup in display loop # specially store ref to shm for lookup in display loop
# since only a placeholder of `None` is entered in # since only a placeholder of `None` is entered in
# ``.draw_curve()``. # ``.draw_curve()``.
chart._overlays['dolla_vlm'] = shm chart._overlays['dolla_vlm'] = dvlm_shm
curve, _ = chart.draw_curve( curve, _ = chart.draw_curve(
name='dark_vlm', name='dark_vlm',
data=shm.array, data=dvlm_shm.array,
array_key='dark_vlm', array_key='dark_vlm',
overlay=pi, overlay=dvlm_pi,
color='charcoal', # darker theme hue color='charcoal', # darker theme hue
step_mode=True, step_mode=True,
# **conf.get('chart_kwargs', {}) # **conf.get('chart_kwargs', {})
) )
chart._overlays['dark_vlm'] = shm chart._overlays['dark_vlm'] = dvlm_shm
# XXX: old dict-style config before it was moved into the
# helper task
# 'dolla_vlm': {
# 'func_name': 'dolla_vlm',
# 'zero_on_step': True,
# 'overlay': 'volume',
# 'separate_axes': True,
# 'params': {
# 'price_func': {
# 'default_value': 'chl3',
# # tell target ``Edit`` widget to not allow
# # edits for now.
# 'widget_kwargs': {'readonly': True},
# },
# },
# 'chart_kwargs': {'step_mode': True}
# },
# } # add flow rate curves
rate_color = 'default_light'
fr_pi = chart.overlay_plotitem(
'flow_rates',
index=0, # place axis on inside (nearest to chart)
axis_title=' vlm/m',
axis_side='left',
axis_kwargs={
'typical_max_str': ' 100.0 M ',
'formatter': partial(
humanize,
digits=2,
),
# 'textPen': pg.mkPen(hcolor(vlmr_color)),
'text_color': rate_color,
},
for name, axis_info in pi.axes.items(): )
# lol this sux XD # add custom auto range handler
axis = axis_info['item'] fr_pi.vb._maxmin = partial(
if isinstance(axis, PriceAxis): maxmin,
axis.size_to_values() # keep both regular and dark vlm in view
names=[
# '1m_trade_rate',
'1m_vlm_rate',
],
)
curve, _ = chart.draw_curve(
name='1m_vlm_rate',
data=fr_shm.array,
array_key='1m_vlm_rate',
overlay=fr_pi,
color=rate_color,
# **conf.get('chart_kwargs', {})
)
chart._overlays['1m_vlm_rate'] = fr_shm
for pi in (dvlm_pi, fr_pi):
for name, axis_info in pi.axes.items():
# lol this sux XD
axis = axis_info['item']
if isinstance(axis, PriceAxis):
axis.size_to_values()
# built-in vlm fsps # built-in vlm fsps
for target, conf in { for target, conf in {