Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wiseplat
GitHub Repository: wiseplat/python-code
Path: blob/master/ invest-robot-contest_invest-bot-main/trading/trade_results.py
5929 views
1
from dataclasses import dataclass
2
3
from trade_system.signal import Signal
4
5
__all__ = ("TradeOrder")
6
7
8
@dataclass(frozen=False, eq=False, repr=True)
9
class TradeOrder:
10
open_order_id: str
11
signal: Signal
12
close_order_id: str = ""
13
14
15
class TradeResults:
16
"""
17
Keep history of orders by trade day
18
"""
19
def __init__(self) -> None:
20
self.__current_trade_orders: dict[str, TradeOrder] = dict()
21
self.__old_trade_orders: dict[str, list[TradeOrder]] = dict()
22
23
def get_current_open_orders(self) -> dict[str, TradeOrder]:
24
return self.__current_trade_orders
25
26
def get_closed_orders(self) -> dict[str, list[TradeOrder]]:
27
return self.__old_trade_orders
28
29
def get_current_trade_order(self, figi: str) -> TradeOrder:
30
return self.__current_trade_orders.get(figi, None)
31
32
def open_position(
33
self,
34
figi: str,
35
open_order_id: str,
36
signal: Signal
37
) -> TradeOrder:
38
current_trade_order = self.get_current_trade_order(figi)
39
40
if not current_trade_order:
41
current_trade_order = TradeOrder(
42
open_order_id=open_order_id,
43
signal=signal
44
)
45
self.__current_trade_orders[figi] = current_trade_order
46
47
return current_trade_order
48
49
def close_position(
50
self,
51
figi: str,
52
close_order_id: str
53
) -> TradeOrder:
54
current_order = self.__current_trade_orders.pop(figi, None)
55
56
if current_order:
57
current_order.close_order_id = close_order_id
58
(self.__old_trade_orders.setdefault(figi, [])).append(current_order)
59
60
return current_order
61
62