Skip to content

Commit

Permalink
upd
Browse files Browse the repository at this point in the history
  • Loading branch information
m5l14i11 committed Sep 18, 2024
1 parent 9e6d85c commit b198403
Show file tree
Hide file tree
Showing 14 changed files with 47 additions and 52 deletions.
2 changes: 1 addition & 1 deletion core/interfaces/abstract_executor_actor_factory.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from abc import ABC, abstractmethod

from core.interfaces.abstract_market_repository import AbstractMarketRepository
from core.models.order import OrderType
from core.models.order_type import OrderType
from core.models.symbol import Symbol
from core.models.timeframe import Timeframe

Expand Down
40 changes: 15 additions & 25 deletions core/models/entity/base.py → core/models/entity/_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,10 @@ def to_dict(self) -> Dict[str, Any]:
result = {**field_dict, **property_dict}

for key, value in result.items():
if isinstance(value, Enum):
result[key] = str(value)

elif hasattr(value, "to_dict") and callable(value.to_dict):
if hasattr(value, "to_dict") and callable(value.to_dict):
result[key] = value.to_dict()

elif isinstance(value, Enum):
result[key] = str(value)
elif isinstance(value, list):
result[key] = [
v.to_dict() if hasattr(v, "to_dict") and callable(v.to_dict) else v
Expand All @@ -32,16 +30,15 @@ def to_dict(self) -> Dict[str, Any]:
return result

def to_json(self) -> str:
return json.dumps(self.to_dict())
return json.dumps(self.to_dict(), default=str)

@classmethod
def from_dict(cls, data: Dict[str, Any]) -> "Entity":
return cls(**data)

@classmethod
def from_json(cls, json_str: str) -> "Entity":
data = json.loads(json_str)
return cls.from_dict(data)
return cls.from_dict(json.loads(json_str))

@classmethod
def from_list(cls, values: List[Any]) -> "Entity":
Expand All @@ -55,8 +52,11 @@ def from_list(cls, values: List[Any]) -> "Entity":
return cls.from_dict(data)

def __str__(self) -> str:
field_dict = self.to_dict()
field_strings = []
field_dict = {
key: value
for key, value in self.to_dict().items()
if not key.startswith("_")
}

def format_value(value):
if isinstance(value, dict):
Expand All @@ -69,23 +69,13 @@ def format_value(value):
return f"{value:.8f}"
return str(value)

for key, value in field_dict.items():
if value is not None:
formatted_value = format_value(value)
field_strings.append(f"{key}={formatted_value}")
else:
field_strings.append(f"{key}=NA")

return ", ".join(field_strings)
return ", ".join(
f"{key}={format_value(value)}" if value is not None else f"{key}=NA"
for key, value in field_dict.items()
)

def __repr__(self) -> str:
return f"{self.__class__.__name__}({self.__str__()})"

def __format__(self, format_spec: str) -> str:
if format_spec == "":
return self.__str__()

if format_spec == "json":
return self.to_json()

return self.__str__()
return self.to_json() if format_spec == "json" else self.__str__()
2 changes: 1 addition & 1 deletion core/models/entity/bar.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from dataclasses import dataclass

from .base import Entity
from ._base import Entity
from .ohlcv import OHLCV


Expand Down
2 changes: 1 addition & 1 deletion core/models/entity/ohlcv.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from core.models.candle_type import CandleType

from .base import Entity
from ._base import Entity


@dataclass(frozen=True)
Expand Down
20 changes: 4 additions & 16 deletions core/models/order.py → core/models/entity/order.py
Original file line number Diff line number Diff line change
@@ -1,30 +1,18 @@
import uuid
from dataclasses import asdict, dataclass, field
from dataclasses import dataclass, field
from datetime import datetime
from enum import Enum, auto

from core.models.order_type import OrderStatus, OrderType

class OrderStatus(Enum):
PENDING = "pending"
EXECUTED = "executed"
FAILED = "failed"
CLOSED = "closed"


class OrderType(Enum):
MARKET = auto()
PAPER = auto()
from ._base import Entity


@dataclass(frozen=True)
class Order:
class Order(Entity):
status: OrderStatus
price: float
size: float
type: OrderType = field(default=OrderType.MARKET)
id: str = field(default_factory=lambda: str(uuid.uuid4()))
timestamp: float = field(default_factory=lambda: int(datetime.now().timestamp()))
fee: float = field(default_factory=lambda: 0.0)

def to_dict(self):
return asdict(self)
13 changes: 13 additions & 0 deletions core/models/order_type.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from enum import Enum, auto


class OrderStatus(Enum):
PENDING = "pending"
EXECUTED = "executed"
FAILED = "failed"
CLOSED = "closed"


class OrderType(Enum):
MARKET = auto()
PAPER = auto()
3 changes: 2 additions & 1 deletion core/models/position.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
import numpy as np

from .entity.ohlcv import OHLCV
from .order import Order, OrderStatus
from .entity.order import Order
from .order_type import OrderStatus
from .position_risk import PositionRisk
from .profit_target import ProfitTarget
from .risk_type import PositionRiskType, SessionRiskType, SignalRiskType
Expand Down
2 changes: 1 addition & 1 deletion core/queries/position.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from dataclasses import dataclass, field

from core.events.base import EventMeta
from core.models.order import Order
from core.models.entity.order import Order
from core.models.position import Position
from core.queries.base import Query, QueryGroup

Expand Down
2 changes: 1 addition & 1 deletion executor/_factory.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from core.interfaces.abstract_actor import AbstractActor
from core.interfaces.abstract_executor_actor_factory import AbstractExecutorActorFactory
from core.models.order import OrderType
from core.models.order_type import OrderType
from core.models.symbol import Symbol
from core.models.timeframe import Timeframe

Expand Down
3 changes: 2 additions & 1 deletion executor/_paper_actor.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
)
from core.mixins import EventHandlerMixin
from core.models.entity.ohlcv import OHLCV
from core.models.order import Order, OrderStatus, OrderType
from core.models.entity.order import Order
from core.models.order_type import OrderStatus, OrderType
from core.models.position import Position
from core.models.side import PositionSide
from core.models.symbol import Symbol
Expand Down
1 change: 0 additions & 1 deletion feed/_historical.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
from core.models.timeframe import Timeframe



class AsyncHistoricalData:
def __init__(
self,
Expand Down
5 changes: 4 additions & 1 deletion sor/_router.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@
from core.interfaces.abstract_config import AbstractConfig
from core.interfaces.abstract_event_manager import AbstractEventManager
from core.interfaces.abstract_exhange_factory import AbstractExchangeFactory
from core.models.entity.order import Order
from core.models.exchange import ExchangeType
from core.models.order import Order, OrderStatus
from core.models.order_type import OrderStatus
from core.models.side import PositionSide
from core.queries.account import GetBalance
from core.queries.broker import GetSymbol, GetSymbols, HasPosition
Expand Down Expand Up @@ -65,6 +66,8 @@ def get_close_position(self, query: GetClosePosition):
self.config["max_order_slice"],
)

print(trade)

if not trade:
return Order(status=OrderStatus.FAILED, price=0, size=0)

Expand Down
2 changes: 1 addition & 1 deletion system/backtest.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from core.models.feed import FeedType
from core.models.lookback import Lookback
from core.models.optimizer import Optimizer
from core.models.order import OrderType
from core.models.order_type import OrderType
from core.models.strategy import Strategy
from core.models.symbol import Symbol
from core.models.timeframe import Timeframe
Expand Down
2 changes: 1 addition & 1 deletion system/trading.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
from core.models.exchange import ExchangeType
from core.models.feed import FeedType
from core.models.lookback import Lookback
from core.models.order import OrderType
from core.models.order_type import OrderType

logger = logging.getLogger(__name__)

Expand Down

0 comments on commit b198403

Please sign in to comment.