Skip to content

Commit 9a38ff5

Browse files
committed
wip
1 parent 3a2c24e commit 9a38ff5

File tree

5 files changed

+37
-6
lines changed

5 files changed

+37
-6
lines changed

octobot_trading/personal_data/orders/active_order_swap_strategies/active_order_swap_strategy.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,13 @@ async def apply_inactive_orders(self, orders: list):
4848
order_util.create_order_price_trigger(order, trigger_price, order.trigger_above)
4949
)
5050

51+
def on_order_update(self, order, update_time):
52+
if order.active_trigger:
53+
order.active_trigger.update(
54+
trigger_price=self._get_trigger_price(order), min_trigger_time=update_time,
55+
update_event=order.is_synchronization_enabled()
56+
)
57+
5158
def _get_trigger_price(self, order) -> decimal.Decimal:
5259
if self.trigger_price_configuration == enums.ActiveOrderSwapTriggerPriceConfiguration.FILLING_PRICE.value:
5360
return order.get_filling_price()

octobot_trading/personal_data/orders/order.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,9 @@ def update(
202202
if price and self.origin_price != price:
203203
previous_price = self.origin_price
204204
self.origin_price = price
205-
self._on_origin_price_change(previous_price,
206-
self.exchange_manager.exchange.get_exchange_current_time())
205+
self._on_origin_price_change(
206+
previous_price, self.exchange_manager.exchange.get_exchange_current_time()
207+
)
207208
changed = True
208209
should_update_total_cost = True
209210

@@ -342,6 +343,8 @@ def _on_origin_price_change(self, previous_price, price_time):
342343
:param previous_price: the previous origin_price
343344
:param price_time: time starting from when the price should be considered
344345
"""
346+
if self.order_group and self.order_group.active_order_swap_strategy:
347+
self.order_group.active_order_swap_strategy.on_order_update(self, price_time)
345348

346349
def add_chained_order(self, chained_order):
347350
"""

octobot_trading/personal_data/orders/triggers/base_trigger.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ def __init__(self, on_trigger_callback: typing.Callable, on_trigger_callback_arg
2525
self._trigger_event: asyncio.Event = None # will be set when the trigger is hit
2626
self._trigger_task: asyncio.Task = None
2727

28+
def triggers(self, *args) -> bool:
29+
raise NotImplementedError("triggers is not implemented")
30+
2831
def triggered(self) -> bool:
2932
return self._trigger_event is not None and self._trigger_event.is_set()
3033

@@ -34,6 +37,9 @@ def is_pending(self) -> bool:
3437
def update_from_other_trigger(self, other_trigger):
3538
raise NotImplementedError("update_from_other_trigger is not implemented")
3639

40+
def update(self, **kwargs):
41+
raise NotImplementedError("update is not implemented")
42+
3743
def __str__(self):
3844
return f"{self.__class__.__name__}({self.on_trigger_callback.__name__ if self.on_trigger_callback else None})"
3945

octobot_trading/personal_data/orders/triggers/price_trigger.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,33 @@ def update_from_other_trigger(self, other_trigger):
4343
self.trigger_price = other_trigger.trigger_price
4444
self.trigger_above = other_trigger.trigger_above
4545

46+
def update(self, trigger_price=None, min_trigger_time=None, update_event=True, **kwargs):
47+
if self.trigger_price != trigger_price:
48+
self.trigger_price = trigger_price
49+
if update_event:
50+
# replace event
51+
self._clear_event()
52+
self._create_event(min_trigger_time)
53+
4654
def clear(self):
4755
super().clear()
56+
self._clear_event()
57+
self._exchange_manager = None
58+
59+
def _create_event(self, min_trigger_time: float):
60+
self._trigger_event = self._exchange_manager.exchange_symbols_data.\
61+
get_exchange_symbol_data(self._symbol).price_events_manager.\
62+
new_event(self.trigger_price, min_trigger_time, self.trigger_above, False)
63+
64+
def _clear_event(self):
4865
if self._trigger_event is not None and self._exchange_manager is not None:
4966
self._exchange_manager.exchange_symbols_data. \
5067
get_exchange_symbol_data(self._symbol).price_events_manager.remove_event(self._trigger_event)
51-
self._exchange_manager = None
5268

5369
def __str__(self):
5470
return f"{super().__str__()}: trigger_price={self.trigger_price}, trigger_above={self.trigger_above}"
5571

5672
def _create_trigger_event(self, exchange_manager, symbol: str, min_trigger_time: float):
5773
self._exchange_manager = exchange_manager
5874
self._symbol = symbol
59-
self._trigger_event = self._exchange_manager.exchange_symbols_data.\
60-
get_exchange_symbol_data(self._symbol).price_events_manager.\
61-
new_event(self.trigger_price, min_trigger_time, self.trigger_above, False)
75+
self._create_event(min_trigger_time)

octobot_trading/personal_data/orders/types/limit/limit_order.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ async def update_order_status(self, force_refresh=False):
7575
self._create_hit_task()
7676

7777
def _on_origin_price_change(self, previous_price, price_time):
78+
super()._on_origin_price_change(previous_price, price_time)
7879
if previous_price is not constants.ZERO:
7980
# no need to reset events if previous price was 0 (unset)
8081
self._reset_events(price_time)

0 commit comments

Comments
 (0)