onesecondtrader 0.18.0__py3-none-any.whl → 0.19.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
onesecondtrader/core.py CHANGED
@@ -34,12 +34,41 @@ class Models:
34
34
  STOP = enum.auto()
35
35
  STOP_LIMIT = enum.auto()
36
36
 
37
+ class OrderRejectionReason(enum.Enum):
38
+ INSUFFICIENT_FUNDS = enum.auto()
39
+ MARKET_CLOSED = enum.auto()
40
+ UNKNOWN = enum.auto()
41
+
42
+ class CancelRejectionReason(enum.Enum):
43
+ ORDER_ALREADY_FILLED = enum.auto()
44
+ ORDER_ALREADY_CANCELLED = enum.auto()
45
+ ORDER_PENDING_EXECUTION = enum.auto()
46
+ MARKET_CLOSED = enum.auto()
47
+ UNKNOWN = enum.auto()
48
+
49
+ class ModifyRejectionReason(enum.Enum):
50
+ ORDER_ALREADY_FILLED = enum.auto()
51
+ ORDER_ALREADY_CANCELLED = enum.auto()
52
+ ORDER_PENDING_EXECUTION = enum.auto()
53
+ ORDER_NOT_FOUND = enum.auto()
54
+ INVALID_PRICE = enum.auto()
55
+ INVALID_QUANTITY = enum.auto()
56
+ MARKET_CLOSED = enum.auto()
57
+ UNKNOWN = enum.auto()
58
+
59
+ class TimeInForce(enum.Enum):
60
+ GTC = enum.auto()
61
+ DAY = enum.auto()
62
+ IOC = enum.auto()
63
+ FOK = enum.auto()
64
+
37
65
 
38
66
  class Events:
39
67
  """
40
68
  Namespace for all events.
41
69
  """
42
70
 
71
+ # BASE EVENT
43
72
  @dataclasses.dataclass(kw_only=True, frozen=True)
44
73
  class BaseEvent:
45
74
  ts_event: pd.Timestamp = dataclasses.field(
@@ -48,12 +77,20 @@ class Events:
48
77
 
49
78
  # SYSTEM EVENTS
50
79
  @dataclasses.dataclass(kw_only=True, frozen=True)
51
- class SystemShutdown(BaseEvent):
80
+ class SystemEvent(BaseEvent):
81
+ pass
82
+
83
+ @dataclasses.dataclass(kw_only=True, frozen=True)
84
+ class SystemShutdown(SystemEvent):
52
85
  pass
53
86
 
54
87
  # MARKET EVENTS
55
88
  @dataclasses.dataclass(kw_only=True, frozen=True)
56
- class IncomingBar(BaseEvent):
89
+ class MarketEvent(BaseEvent):
90
+ pass
91
+
92
+ @dataclasses.dataclass(kw_only=True, frozen=True)
93
+ class IncomingBar(MarketEvent):
57
94
  ts_event: pd.Timestamp
58
95
  symbol: str
59
96
  record_type: Models.RecordType
@@ -63,29 +100,83 @@ class Events:
63
100
  close: float
64
101
  volume: int | None = None
65
102
 
66
- # BROKER REQUEST EVENTS
103
+ # BROKER REQUESTS EVENTS
67
104
  @dataclasses.dataclass(kw_only=True, frozen=True)
68
- class Order(BaseEvent):
69
- order_id: uuid.UUID = dataclasses.field(default_factory=lambda: uuid.uuid4())
105
+ class BrokerRequestEvent(BaseEvent):
106
+ pass
107
+
108
+ @dataclasses.dataclass(kw_only=True, frozen=True)
109
+ class SubmitOrder(BrokerRequestEvent):
110
+ order_id: uuid.UUID = dataclasses.field(default_factory=uuid.uuid4)
70
111
  symbol: str
71
112
  order_type: Models.OrderType
72
113
  side: Models.OrderSide
73
114
  quantity: float
74
115
  limit_price: float | None = None
75
116
  stop_price: float | None = None
117
+ time_in_force: Models.TimeInForce = Models.TimeInForce.GTC
118
+
119
+ @dataclasses.dataclass(kw_only=True, frozen=True)
120
+ class ModifyOrder(BrokerRequestEvent):
121
+ order_id: uuid.UUID
122
+ quantity: float | None = None
123
+ limit_price: float | None = None
124
+ stop_price: float | None = None
125
+
126
+ @dataclasses.dataclass(kw_only=True, frozen=True)
127
+ class CancelOrder(BrokerRequestEvent):
128
+ order_id: uuid.UUID
76
129
 
77
130
  # BROKER RESPONSE EVENTS
78
131
  @dataclasses.dataclass(kw_only=True, frozen=True)
79
- class Fill(BaseEvent):
132
+ class BrokerResponseEvent(BaseEvent):
133
+ ts_broker: pd.Timestamp
134
+
135
+ @dataclasses.dataclass(kw_only=True, frozen=True)
136
+ class OrderSubmitted(BrokerResponseEvent):
137
+ order_id: uuid.UUID
138
+ broker_order_id: str | None = None
139
+
140
+ @dataclasses.dataclass(kw_only=True, frozen=True)
141
+ class OrderModified(BrokerResponseEvent):
142
+ order_id: uuid.UUID
143
+ broker_order_id: str | None = None
144
+
145
+ @dataclasses.dataclass(kw_only=True, frozen=True)
146
+ class Fill(BrokerResponseEvent):
80
147
  fill_id: uuid.UUID = dataclasses.field(default_factory=uuid.uuid4)
81
148
  broker_fill_id: str | None = None
82
149
  associated_order_id: uuid.UUID
150
+ symbol: str
83
151
  side: Models.OrderSide
84
152
  quantity_filled: float
85
153
  fill_price: float
86
154
  commission: float
87
155
  exchange: str = "SIMULATED"
88
156
 
157
+ @dataclasses.dataclass(kw_only=True, frozen=True)
158
+ class OrderRejected(BrokerResponseEvent):
159
+ order_id: uuid.UUID
160
+ reason: Models.OrderRejectionReason
161
+
162
+ @dataclasses.dataclass(kw_only=True, frozen=True)
163
+ class OrderCancelled(BrokerResponseEvent):
164
+ order_id: uuid.UUID
165
+
166
+ @dataclasses.dataclass(kw_only=True, frozen=True)
167
+ class OrderExpired(BrokerResponseEvent):
168
+ order_id: uuid.UUID
169
+
170
+ @dataclasses.dataclass(kw_only=True, frozen=True)
171
+ class CancelRejected(BrokerResponseEvent):
172
+ order_id: uuid.UUID
173
+ reason: Models.CancelRejectionReason
174
+
175
+ @dataclasses.dataclass(kw_only=True, frozen=True)
176
+ class ModifyRejected(BrokerResponseEvent):
177
+ order_id: uuid.UUID
178
+ reason: Models.ModifyRejectionReason
179
+
89
180
 
90
181
  class BaseConsumer(abc.ABC):
91
182
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: onesecondtrader
3
- Version: 0.18.0
3
+ Version: 0.19.0
4
4
  Summary: The Trading Infrastructure Toolkit for Python. Research, simulate, and deploy algorithmic trading strategies — all in one place.
5
5
  License-File: LICENSE
6
6
  Author: Nils P. Kujath
@@ -0,0 +1,7 @@
1
+ onesecondtrader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ onesecondtrader/core.py,sha256=b2vAoMPY8FzKJ3I23CZjualg7FSaQztKb5XIVFsR7sE,6879
3
+ onesecondtrader/indicators.py,sha256=wGn-5v8L1gepMP45KcVrEo-f2ReOCD3r8lva9aEIUnY,3199
4
+ onesecondtrader-0.19.0.dist-info/METADATA,sha256=gbvGvRtyUUMZPg9WmxbiV4_1BCia3G3oAOp8SP5Bv60,9682
5
+ onesecondtrader-0.19.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
6
+ onesecondtrader-0.19.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
7
+ onesecondtrader-0.19.0.dist-info/RECORD,,
@@ -1,7 +0,0 @@
1
- onesecondtrader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- onesecondtrader/core.py,sha256=uMy2eYLtzfSPC_99kjft7L3DL4SRi1ZBnnSYyd_XrIo,3921
3
- onesecondtrader/indicators.py,sha256=wGn-5v8L1gepMP45KcVrEo-f2ReOCD3r8lva9aEIUnY,3199
4
- onesecondtrader-0.18.0.dist-info/METADATA,sha256=48Xk2OPiF57MkcpqFnyAG328SWljqyTEO5XmFS0VDrI,9682
5
- onesecondtrader-0.18.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
6
- onesecondtrader-0.18.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
7
- onesecondtrader-0.18.0.dist-info/RECORD,,