Skip to content

Commit

Permalink
feat(order-map): cancel exit_orders only on active orders
Browse files Browse the repository at this point in the history
  • Loading branch information
yakir4123 committed May 25, 2024
1 parent 69ab4d6 commit 5ed48de
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 2 deletions.
20 changes: 20 additions & 0 deletions jesse/store/state_orders.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,26 @@ def get_exit_orders(self, exchange: str, symbol: str) -> List[Order]:

return exit_orders

def get_active_exit_orders(self, exchange: str, symbol: str) -> List[Order]:
"""
excludes cancel orders but includes executed orders
"""
all_orders = self.get_active_orders(exchange, symbol)
# return empty if no orders
if len(all_orders) == 0:
return []
# return empty if position is not opened yet
p = selectors.get_position(exchange, symbol)
if p.is_close:
return []
else:
exit_orders = [o for o in all_orders if o.side != jh.type_to_side(p.type)]

# exclude cancelled orders
exit_orders = [o for o in exit_orders if not o.is_canceled]

return exit_orders

def update_active_orders(self, exchange: str, symbol: str):
key = f'{exchange}-{symbol}'
active_orders = [
Expand Down
11 changes: 9 additions & 2 deletions jesse/strategies/Strategy.py
Original file line number Diff line number Diff line change
Expand Up @@ -521,7 +521,7 @@ def _detect_and_handle_entry_and_exit_modifications(self) -> None:
temp_current_price = None

# CANCEL previous orders
for o in self.exit_orders:
for o in self.active_exit_orders:
if o.is_take_profit and (o.is_active or o.is_queued):
self.broker.cancel_order(o.id)

Expand Down Expand Up @@ -562,7 +562,7 @@ def _detect_and_handle_entry_and_exit_modifications(self) -> None:
temp_current_price = None

# CANCEL previous orders
for o in self.exit_orders:
for o in self.active_exit_orders:
if o.is_stop_loss and (o.is_active or o.is_queued):
self.broker.cancel_order(o.id)

Expand Down Expand Up @@ -1261,6 +1261,13 @@ def exit_orders(self):
"""
return store.orders.get_exit_orders(self.exchange, self.symbol)

@property
def active_exit_orders(self):
"""
Returns all the exit orders for this position.
"""
return store.orders.get_active_exit_orders(self.exchange, self.symbol)

@property
def exchange_type(self):
return selectors.get_exchange(self.exchange).type
Expand Down

0 comments on commit 5ed48de

Please sign in to comment.