Skip to content

Commit 57b9624

Browse files
committed
[TrailingStopOrder] Fix filled actions
1 parent e33967e commit 57b9624

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,10 @@ def _create_hit_events(self, price_events_manager, new_price, new_price_time):
6767
:param price_events_manager: the price events manager to use
6868
:param new_price: the new trailing price
6969
"""
70+
self.origin_stop_price = self._calculate_stop_price(new_price)
7071
if self.trailing_stop_price_hit_event is None:
7172
self.trailing_stop_price_hit_event = price_events_manager.new_event(
72-
self._calculate_stop_price(new_price), new_price_time,
73+
self.origin_stop_price, new_price_time,
7374
self.side is enums.TradeOrderSide.BUY, self.allow_instant_fill)
7475
if self.trailing_price_hit_event is None:
7576
# don't allow instant fill since this event should only be triggered by next recent trades and prices
@@ -143,17 +144,24 @@ async def _on_price_hit(self):
143144
f"replacing stop...")
144145
await self._reset_events(decimal.Decimal(str(prices_manager.mark_price)), prices_manager.mark_price_set_time)
145146

147+
def on_fill_actions(self):
148+
self.filled_price = self.origin_stop_price
149+
self.filled_quantity = self.origin_quantity
150+
order_class.Order._update_total_cost(self)
151+
order_class.Order.on_fill_actions(self)
152+
146153
async def on_filled(self):
147154
"""
148155
Create an artificial when trailing stop is filled
149156
"""
150157
await order_class.Order.on_filled(self)
151-
# TODO replace with chained order ?
152-
await self.trader.create_artificial_order(enums.TraderOrderType.SELL_MARKET
153-
if self.side is enums.TradeOrderSide.SELL
154-
else enums.TraderOrderType.BUY_MARKET,
155-
self.symbol, self.origin_stop_price,
156-
self.origin_quantity, self.origin_stop_price)
158+
if not self.trader.simulate and self.is_self_managed():
159+
# TODO replace with chained order ?
160+
await self.trader.create_artificial_order(enums.TraderOrderType.SELL_MARKET
161+
if self.side is enums.TradeOrderSide.SELL
162+
else enums.TraderOrderType.BUY_MARKET,
163+
self.symbol, self.origin_stop_price,
164+
self.origin_quantity, self.origin_stop_price)
157165

158166
def _clear_event_and_tasks(self):
159167
"""

0 commit comments

Comments
 (0)