Add vlm axis titles and humanized $vlm y-range
parent
e8cad45952
commit
56f9ddb880
139
piker/ui/_fsp.py
139
piker/ui/_fsp.py
|
@ -33,7 +33,9 @@ import pyqtgraph as pg
|
||||||
import trio
|
import trio
|
||||||
from trio_typing import TaskStatus
|
from trio_typing import TaskStatus
|
||||||
|
|
||||||
|
from ._axes import PriceAxis
|
||||||
from .._cacheables import maybe_open_context
|
from .._cacheables import maybe_open_context
|
||||||
|
from ..calc import humanize
|
||||||
from ..data._sharedmem import (
|
from ..data._sharedmem import (
|
||||||
ShmArray,
|
ShmArray,
|
||||||
maybe_open_shm_array,
|
maybe_open_shm_array,
|
||||||
|
@ -661,73 +663,98 @@ async def open_vlm_displays(
|
||||||
# size view to data once at outset
|
# size view to data once at outset
|
||||||
chart.view._set_yrange()
|
chart.view._set_yrange()
|
||||||
|
|
||||||
if not dvlm:
|
# add axis title
|
||||||
return
|
axis = chart.getAxis('right')
|
||||||
|
axis.set_title(' vlm')
|
||||||
|
|
||||||
# spawn and overlay $ vlm on the same subchart
|
if dvlm:
|
||||||
shm, started = await admin.start_engine_task(
|
|
||||||
'dolla_vlm',
|
# spawn and overlay $ vlm on the same subchart
|
||||||
# linked.symbol.front_feed(), # data-feed symbol key
|
shm, started = await admin.start_engine_task(
|
||||||
{ # fsp engine conf
|
'dolla_vlm',
|
||||||
'func_name': 'dolla_vlm',
|
# linked.symbol.front_feed(), # data-feed symbol key
|
||||||
'zero_on_step': True,
|
{ # fsp engine conf
|
||||||
'params': {
|
'func_name': 'dolla_vlm',
|
||||||
'price_func': {
|
'zero_on_step': True,
|
||||||
'default_value': 'chl3',
|
'params': {
|
||||||
|
'price_func': {
|
||||||
|
'default_value': 'chl3',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
# loglevel,
|
||||||
# loglevel,
|
)
|
||||||
)
|
# profiler(f'created shm for fsp actor: {display_name}')
|
||||||
# profiler(f'created shm for fsp actor: {display_name}')
|
|
||||||
|
|
||||||
await started.wait()
|
await started.wait()
|
||||||
|
|
||||||
pi = chart.overlay_plotitem(
|
pi = chart.overlay_plotitem(
|
||||||
'dolla_vlm',
|
'dolla_vlm',
|
||||||
)
|
axis_kwargs={
|
||||||
# add custom auto range handler
|
# 'humanize': True,
|
||||||
pi.vb._maxmin = partial(maxmin, name='dolla_vlm')
|
# 'text': 'dvlm',
|
||||||
|
'typical_max_str': ' 99.9 M ',
|
||||||
|
'formatter': partial(
|
||||||
|
humanize,
|
||||||
|
digits=2,
|
||||||
|
),
|
||||||
|
},
|
||||||
|
|
||||||
curve, _ = chart.draw_curve(
|
)
|
||||||
|
|
||||||
name='dolla_vlm',
|
# add axis title
|
||||||
data=shm.array,
|
raxis = pi.getAxis('right')
|
||||||
|
raxis.set_title(' $vlm', view=pi.getViewBox())
|
||||||
|
|
||||||
array_key='dolla_vlm',
|
# add custom auto range handler
|
||||||
overlay=pi,
|
pi.vb._maxmin = partial(maxmin, name='dolla_vlm')
|
||||||
color='charcoal',
|
|
||||||
step_mode=True,
|
|
||||||
# **conf.get('chart_kwargs', {})
|
|
||||||
)
|
|
||||||
# TODO: is there a way to "sync" the dual axes such that only
|
|
||||||
# one curve is needed?
|
|
||||||
# curve.hide()
|
|
||||||
|
|
||||||
# TODO: we need a better API to do this..
|
curve, _ = chart.draw_curve(
|
||||||
# specially store ref to shm for lookup in display loop
|
|
||||||
# since only a placeholder of `None` is entered in
|
|
||||||
# ``.draw_curve()``.
|
|
||||||
chart._overlays['dolla_vlm'] = shm
|
|
||||||
|
|
||||||
# XXX: old dict-style config before it was moved into the helper task
|
name='dolla_vlm',
|
||||||
# 'dolla_vlm': {
|
data=shm.array,
|
||||||
# '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}
|
|
||||||
# },
|
|
||||||
|
|
||||||
# }
|
array_key='dolla_vlm',
|
||||||
|
overlay=pi,
|
||||||
|
color='charcoal',
|
||||||
|
step_mode=True,
|
||||||
|
# **conf.get('chart_kwargs', {})
|
||||||
|
)
|
||||||
|
# TODO: is there a way to "sync" the dual axes such that only
|
||||||
|
# one curve is needed?
|
||||||
|
# curve.hide()
|
||||||
|
|
||||||
|
# TODO: we need a better API to do this..
|
||||||
|
# specially store ref to shm for lookup in display loop
|
||||||
|
# since only a placeholder of `None` is entered in
|
||||||
|
# ``.draw_curve()``.
|
||||||
|
chart._overlays['dolla_vlm'] = 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}
|
||||||
|
# },
|
||||||
|
|
||||||
|
# }
|
||||||
|
|
||||||
|
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 display_name, conf in {
|
for display_name, conf in {
|
||||||
|
|
Loading…
Reference in New Issue