retreive open orders from orders list, not from db

This commit is contained in:
axel
2023-06-19 12:28:55 -04:00
parent b031470979
commit a98e8ef201
+11 -62
View File
@@ -9,7 +9,6 @@ from typing import Any, ClassVar, Dict, List, Optional, Sequence, cast
from sqlalchemy import (Enum, Float, ForeignKey, Integer, ScalarResult, Select, String, from sqlalchemy import (Enum, Float, ForeignKey, Integer, ScalarResult, Select, String,
UniqueConstraint, desc, func, select) UniqueConstraint, desc, func, select)
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.orm import Mapped, lazyload, mapped_column, relationship, validates from sqlalchemy.orm import Mapped, lazyload, mapped_column, relationship, validates
from freqtrade.constants import (CUSTOM_TAG_MAX_LENGTH, DATETIME_PRINT_FORMAT, MATH_CLOSE_PREC, from freqtrade.constants import (CUSTOM_TAG_MAX_LENGTH, DATETIME_PRINT_FORMAT, MATH_CLOSE_PREC,
@@ -472,9 +471,9 @@ class LocalTrade():
@property @property
def has_open_orders(self) -> int: def has_open_orders(self) -> int:
open_orders_wo_sl = [] open_orders_wo_sl = []
for oo in self.open_orders: for o in self.orders:
if (oo.ft_order_side not in ['stoploss']): if (o.ft_order_side not in ['stoploss']) & (o.ft_is_open):
open_orders_wo_sl.append(oo) open_orders_wo_sl.append(o)
return (len(open_orders_wo_sl) > 0) return (len(open_orders_wo_sl) > 0)
@@ -1327,55 +1326,24 @@ class Trade(ModelBase, LocalTrade):
funding_fees: Mapped[Optional[float]] = mapped_column( funding_fees: Mapped[Optional[float]] = mapped_column(
Float(), nullable=True, default=None) # type: ignore Float(), nullable=True, default=None) # type: ignore
@hybrid_property @property
def open_orders(self): def open_orders(self):
return [order for order in self.orders if order.ft_is_open] return [order for order in self.orders if order.ft_is_open]
@open_orders.expression @property
def open_orders(cls):
return (
select(Order).where(Order.ft_is_open is True)
.where(
Order.order_id.in_(
select(Order.order_id)
.where(Order.ft_trade_id == cls.id)
)
)
)
@hybrid_property
def has_open_orders(self) -> int: def has_open_orders(self) -> int:
open_orders_wo_sl = [] open_orders_wo_sl = []
for oo in self.open_orders: for o in self.orders:
if (oo.ft_order_side not in ['stoploss']): if (o.ft_order_side not in ['stoploss']) & (o.ft_is_open):
open_orders_wo_sl.append(oo) open_orders_wo_sl.append(o)
return (len(open_orders_wo_sl) > 0) return (len(open_orders_wo_sl) > 0)
@has_open_orders.expression @property
def has_open_orders(cls) -> int:
return (
select(func.exists())
.where(Order.ft_is_open.is_(True))
.where(Order.ft_order_side != "stoploss")
.where(Order.ft_trade_id == cls.id)
.as_scalar()
)
@hybrid_property
def open_orders_count(self) -> int: def open_orders_count(self) -> int:
return len(self.open_orders) return len(self.open_orders)
@open_orders_count.expression @property
def open_orders_count(cls):
return (
select(func.count(Order.order_id))
.where(Order.ft_is_open is True)
.where(Order.ft_trade_id == cls.id)
.subquery()
)
@hybrid_property
def open_entry_or_exit_orders_count(self) -> int: def open_entry_or_exit_orders_count(self) -> int:
open_buy_or_sell_orders = [] open_buy_or_sell_orders = []
for oo in self.open_orders: for oo in self.open_orders:
@@ -1384,16 +1352,7 @@ class Trade(ModelBase, LocalTrade):
return len(open_buy_or_sell_orders) return len(open_buy_or_sell_orders)
@open_entry_or_exit_orders_count.expression @property
def open_entry_or_exit_orders_count(cls):
return (
select(func.count(Order.order_id))
.where(Order.ft_order_side.contains(['buy', 'sell']))
.where(Order.ft_trade_id == cls.id)
.subquery()
)
@hybrid_property
def open_orders_ids(self) -> list: def open_orders_ids(self) -> list:
open_orders_ids_wo_sl = [] open_orders_ids_wo_sl = []
for oo in self.open_orders: for oo in self.open_orders:
@@ -1401,16 +1360,6 @@ class Trade(ModelBase, LocalTrade):
open_orders_ids_wo_sl.append(oo.order_id) open_orders_ids_wo_sl.append(oo.order_id)
return open_orders_ids_wo_sl return open_orders_ids_wo_sl
@open_orders_ids.expression
def open_orders_ids(cls):
return (
select(Order.order_id)
.where(Order.ft_is_open is True)
.where(Order.ft_order_side != "stoploss")
.where(Order.ft_trade_id == cls.id)
.subquery()
)
def __init__(self, **kwargs): def __init__(self, **kwargs):
super().__init__(**kwargs) super().__init__(**kwargs)
self.realized_profit = 0 self.realized_profit = 0