Add `Allocator.slots_used()` helper calc method
parent
abc5c382ae
commit
fd982df7a9
|
@ -215,6 +215,28 @@ class Allocator(BaseModel):
|
||||||
'size_digits': ld
|
'size_digits': ld
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def slots_used(
|
||||||
|
self,
|
||||||
|
pp: Position,
|
||||||
|
|
||||||
|
) -> float:
|
||||||
|
|
||||||
|
# alloc = self.alloc
|
||||||
|
# live_pp = self.tracker.live_pp
|
||||||
|
# live_pp_size = abs(live_pp.size)
|
||||||
|
abs_pp_size = abs(pp.size)
|
||||||
|
|
||||||
|
if self.size_unit == 'currency':
|
||||||
|
# live_currency_size = size or (abs_pp_size * pp.avg_price)
|
||||||
|
live_currency_size = abs_pp_size * pp.avg_price
|
||||||
|
prop = live_currency_size / self.currency_limit
|
||||||
|
|
||||||
|
else:
|
||||||
|
# return (size or abs_pp_size) / alloc.units_limit
|
||||||
|
prop = abs_pp_size / self.units_limit
|
||||||
|
|
||||||
|
return ceil(prop * self.slots)
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class SettingsPane:
|
class SettingsPane:
|
||||||
|
@ -383,18 +405,8 @@ class SettingsPane:
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|
||||||
alloc = self.alloc
|
alloc = self.alloc
|
||||||
live_pp = self.tracker.live_pp
|
|
||||||
live_pp_size = abs(live_pp.size)
|
|
||||||
slots = alloc.slots
|
slots = alloc.slots
|
||||||
|
used = alloc.slots_used(self.tracker.live_pp)
|
||||||
if alloc.size_unit == 'currency':
|
|
||||||
live_currency_size = size or (
|
|
||||||
live_pp_size * live_pp.avg_price
|
|
||||||
)
|
|
||||||
prop = live_currency_size / alloc.currency_limit
|
|
||||||
|
|
||||||
else:
|
|
||||||
prop = (size or live_pp_size) / alloc.units_limit
|
|
||||||
|
|
||||||
# calculate proportion of position size limit
|
# calculate proportion of position size limit
|
||||||
# that exists and display in fill bar
|
# that exists and display in fill bar
|
||||||
|
@ -404,7 +416,7 @@ class SettingsPane:
|
||||||
|
|
||||||
# TODO: how to show "partial" slots?
|
# TODO: how to show "partial" slots?
|
||||||
# min(round(prop * slots), slots)
|
# min(round(prop * slots), slots)
|
||||||
min(ceil(prop * slots), slots)
|
min(used, slots)
|
||||||
)
|
)
|
||||||
|
|
||||||
def on_level_change_update_next_order_info(
|
def on_level_change_update_next_order_info(
|
||||||
|
@ -503,6 +515,7 @@ class PositionTracker:
|
||||||
'''
|
'''
|
||||||
# inputs
|
# inputs
|
||||||
chart: 'ChartPlotWidget' # noqa
|
chart: 'ChartPlotWidget' # noqa
|
||||||
|
alloc: Allocator
|
||||||
|
|
||||||
# allocated
|
# allocated
|
||||||
startup_pp: Position
|
startup_pp: Position
|
||||||
|
@ -516,10 +529,12 @@ class PositionTracker:
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
chart: 'ChartPlotWidget', # noqa
|
chart: 'ChartPlotWidget', # noqa
|
||||||
|
alloc: Allocator,
|
||||||
|
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|
||||||
self.chart = chart
|
self.chart = chart
|
||||||
|
self.alloc = alloc
|
||||||
self.live_pp = Position(
|
self.live_pp = Position(
|
||||||
symbol=chart.linked.symbol,
|
symbol=chart.linked.symbol,
|
||||||
size=0,
|
size=0,
|
||||||
|
@ -557,11 +572,11 @@ class PositionTracker:
|
||||||
# this is "static" label
|
# this is "static" label
|
||||||
# update_on_range_change=False,
|
# update_on_range_change=False,
|
||||||
fmt_str='\n'.join((
|
fmt_str='\n'.join((
|
||||||
':{entry_size:.{size_digits}f}x',
|
':{slots_used:.1f}x',
|
||||||
)),
|
)),
|
||||||
|
|
||||||
fields={
|
fields={
|
||||||
'entry_size': 0,
|
'slots_used': 0,
|
||||||
'size_digits': nsize
|
'size_digits': nsize
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -641,7 +656,9 @@ class PositionTracker:
|
||||||
self.update_line(avg_price, size)
|
self.update_line(avg_price, size)
|
||||||
|
|
||||||
# label updates
|
# label updates
|
||||||
self.size_label.fields['entry_size'] = size
|
# self.size_label.fields['slots_used'] = size
|
||||||
|
self.size_label.fields['slots_used'] = round(
|
||||||
|
self.alloc.slots_used(pp), ndigits=1)
|
||||||
self.size_label.render()
|
self.size_label.render()
|
||||||
|
|
||||||
if size == 0:
|
if size == 0:
|
||||||
|
|
Loading…
Reference in New Issue