OctoBot-Trading 2.3.34__cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl → 2.3.35__cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.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.
- {OctoBot_Trading-2.3.34.dist-info → OctoBot_Trading-2.3.35.dist-info}/METADATA +2 -2
- {OctoBot_Trading-2.3.34.dist-info → OctoBot_Trading-2.3.35.dist-info}/RECORD +36 -36
- octobot_trading/__init__.py +1 -1
- octobot_trading/constants.py +1 -0
- octobot_trading/enums.py +12 -0
- octobot_trading/exchanges/connectors/ccxt/ccxt_connector.cpython-38-aarch64-linux-gnu.so +0 -0
- octobot_trading/exchanges/connectors/ccxt/ccxt_connector.pxd +6 -3
- octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +8 -0
- octobot_trading/exchanges/exchange_builder.cpython-38-aarch64-linux-gnu.so +0 -0
- octobot_trading/exchanges/exchange_factory.cpython-38-aarch64-linux-gnu.so +0 -0
- octobot_trading/exchanges/exchange_websocket_factory.cpython-38-aarch64-linux-gnu.so +0 -0
- octobot_trading/exchanges/traders/trader.cpython-38-aarch64-linux-gnu.so +0 -0
- octobot_trading/exchanges/traders/trader.py +4 -0
- octobot_trading/modes/channel/abstract_mode_consumer.cpython-38-aarch64-linux-gnu.so +0 -0
- octobot_trading/modes/channel/abstract_mode_producer.cpython-38-aarch64-linux-gnu.so +0 -0
- octobot_trading/personal_data/exchange_personal_data.cpython-38-aarch64-linux-gnu.so +0 -0
- octobot_trading/personal_data/exchange_personal_data.py +8 -7
- octobot_trading/personal_data/orders/channel/orders.cpython-38-aarch64-linux-gnu.so +0 -0
- octobot_trading/personal_data/orders/channel/orders.py +21 -15
- octobot_trading/personal_data/orders/orders_manager.cpython-38-aarch64-linux-gnu.so +0 -0
- octobot_trading/personal_data/orders/states/cancel_order_state.cpython-38-aarch64-linux-gnu.so +0 -0
- octobot_trading/personal_data/orders/states/cancel_order_state.py +3 -2
- octobot_trading/personal_data/orders/states/fill_order_state.cpython-38-aarch64-linux-gnu.so +0 -0
- octobot_trading/personal_data/orders/states/fill_order_state.py +2 -1
- octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.cpython-38-aarch64-linux-gnu.so +0 -0
- octobot_trading/personal_data/portfolios/portfolio_factory.cpython-38-aarch64-linux-gnu.so +0 -0
- octobot_trading/personal_data/portfolios/portfolio_manager.cpython-38-aarch64-linux-gnu.so +0 -0
- octobot_trading/personal_data/portfolios/portfolio_profitability.cpython-38-aarch64-linux-gnu.so +0 -0
- octobot_trading/personal_data/portfolios/portfolio_value_holder.cpython-38-aarch64-linux-gnu.so +0 -0
- octobot_trading/personal_data/portfolios/value_converter.cpython-38-aarch64-linux-gnu.so +0 -0
- octobot_trading/storage/orders_storage.py +54 -1
- octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +1 -1
- tests/api/test_channels.py +1 -1
- {OctoBot_Trading-2.3.34.dist-info → OctoBot_Trading-2.3.35.dist-info}/LICENSE +0 -0
- {OctoBot_Trading-2.3.34.dist-info → OctoBot_Trading-2.3.35.dist-info}/WHEEL +0 -0
- {OctoBot_Trading-2.3.34.dist-info → OctoBot_Trading-2.3.35.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: OctoBot-Trading
|
3
|
-
Version: 2.3.
|
3
|
+
Version: 2.3.35
|
4
4
|
Summary: OctoBot project trading package
|
5
5
|
Home-page: https://github.com/Drakkar-Software/OctoBot-Trading
|
6
6
|
Author: Drakkar-Software
|
@@ -28,7 +28,7 @@ Requires-Dist: cryptography
|
|
28
28
|
Requires-Dist: sortedcontainers (==2.4.0)
|
29
29
|
Requires-Dist: tinydb (==4.5.2)
|
30
30
|
|
31
|
-
# OctoBot-Trading [2.3.
|
31
|
+
# OctoBot-Trading [2.3.35](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
|
32
32
|
[](https://app.codacy.com/gh/Drakkar-Software/OctoBot-Trading?utm_source=github.com&utm_medium=referral&utm_content=Drakkar-Software/OctoBot-Trading&utm_campaign=Badge_Grade_Dashboard)
|
33
33
|
[](https://pypi.python.org/pypi/OctoBot-Trading/)
|
34
34
|
[](https://coveralls.io/github/Drakkar-Software/OctoBot-Trading?branch=master)
|
@@ -1,8 +1,13 @@
|
|
1
|
+
OctoBot_Trading-2.3.35.dist-info/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
|
2
|
+
OctoBot_Trading-2.3.35.dist-info/WHEEL,sha256=oCBNUxcpJIObB7qxTwklMZvZV19pJGv6x0IkRXaUM7w,150
|
3
|
+
OctoBot_Trading-2.3.35.dist-info/top_level.txt,sha256=EWslZXCzarlfXX-Z5_2qiJ28t-1TykzGYqpXESZP0H0,39
|
4
|
+
OctoBot_Trading-2.3.35.dist-info/RECORD,,
|
5
|
+
OctoBot_Trading-2.3.35.dist-info/METADATA,sha256=H2zckNpzB0u9MO8T4HeLgTI4XT81diFNFjhTrNDMPZY,2285
|
1
6
|
octobot_trading/errors.py,sha256=nDpLJ5OSKyVehbCaevg9M6pL6Xztz2UC-IVmOm7DyPY,5292
|
2
|
-
octobot_trading/constants.py,sha256=
|
7
|
+
octobot_trading/constants.py,sha256=SwCh4qT9RLeZQOrvZPiAzPWYSH_LcSgElX6Hm9DjzeQ,7779
|
3
8
|
octobot_trading/octobot_channel_consumer.cpython-38-aarch64-linux-gnu.so,sha256=w2xjVoqdlbOHE8KeBJYk5VrodHKi4YroJTBEz_La0PM,959032
|
4
|
-
octobot_trading/enums.py,sha256=
|
5
|
-
octobot_trading/__init__.py,sha256=
|
9
|
+
octobot_trading/enums.py,sha256=Hx2icRPKw-mOKzsZokfY19-318udJNCA8Fe3IWCh5Jo,14826
|
10
|
+
octobot_trading/__init__.py,sha256=GD-ex0qJwY5UGj5-IPgPYITwdmCioNdHV_cDHkFTDsY,793
|
6
11
|
octobot_trading/octobot_channel_consumer.py,sha256=XE7nay4TqK1YQ24ly_nK3gcgKEK-Btr_Al34oGIOr90,5364
|
7
12
|
octobot_trading/octobot_channel_consumer.pxd,sha256=fTc7VH30Hrfftfov27PDO3gnGDaT_XgpYfXkhI3b3zM,834
|
8
13
|
octobot_trading/exchange_channel.cpython-38-aarch64-linux-gnu.so,sha256=N0a19jKTUX8O80yylTh8ZCCblbFwp9IpG3EK1wbMQ5g,2138736
|
@@ -21,14 +26,14 @@ octobot_trading/modes/mode_config.py,sha256=3E-fLK5NYqGa3naRrbOVUpIg53fcYg3mUhun
|
|
21
26
|
octobot_trading/modes/modes_factory.pxd,sha256=1MTpnlTncPZx3WmCLE7LblSefxye50oLytptXQ17SnI,1249
|
22
27
|
octobot_trading/modes/channel/mode.pxd,sha256=Bd08rJ-nuOUDOZHUk_fzkyMsoIspcx-zrMLiXUdfz0w,1222
|
23
28
|
octobot_trading/modes/channel/abstract_mode_producer.py,sha256=iqUo8FCDsHwktdx1F9SJQdk2w2IzN2HzS3BnvQ8H3PQ,21943
|
24
|
-
octobot_trading/modes/channel/abstract_mode_producer.cpython-38-aarch64-linux-gnu.so,sha256=
|
29
|
+
octobot_trading/modes/channel/abstract_mode_producer.cpython-38-aarch64-linux-gnu.so,sha256=5JLS7MDApAIGun_r0ujdHS9K3QZulplO1Lxe92TnSaQ,3105368
|
25
30
|
octobot_trading/modes/channel/mode.py,sha256=4ez1hqq2xXiXiO_viVtX0xAzjZE6T0mlfWZ3_ogONtY,5567
|
26
31
|
octobot_trading/modes/channel/__init__.py,sha256=E6fT8Pvg_VcZlVjnsSL07pMzrHkFhkmWYJLXypgSCk4,1414
|
27
32
|
octobot_trading/modes/channel/abstract_mode_consumer.pxd,sha256=kG2s4zwm5LaIBvjf0R_FGKoRYz0B_psDXYx9wqnZ620,1105
|
28
33
|
octobot_trading/modes/channel/abstract_mode_consumer.py,sha256=TGl3yz-ScFwl2ag3V1U9MupR7Gu-8G0OVtzwhgxQZjI,10133
|
29
34
|
octobot_trading/modes/channel/abstract_mode_producer.pxd,sha256=PQb1MH3Biif6pBAPE5O1onuGzBxZAnjCnIqvHcqaI6M,1494
|
30
35
|
octobot_trading/modes/channel/__init__.pxd,sha256=m4kKmGWJugvlOPEBIqTf8tLr_ThT8VoA77syujxgFs8,1380
|
31
|
-
octobot_trading/modes/channel/abstract_mode_consumer.cpython-38-aarch64-linux-gnu.so,sha256=
|
36
|
+
octobot_trading/modes/channel/abstract_mode_consumer.cpython-38-aarch64-linux-gnu.so,sha256=ibeNledE6z_ktZsOsLdOBgZYBdkoXc_J0N22AQxomDU,1821328
|
32
37
|
octobot_trading/modes/channel/mode.cpython-38-aarch64-linux-gnu.so,sha256=g0uICalNdfLhH1YBG1S9bsAE0RdUzkCvBW9AqMDhQAc,1149208
|
33
38
|
octobot_trading/modes/script_keywords/__init__.py,sha256=E_KgXz1HK7f56TK9mCIzVJdxHHa_R7zmYFelocNwgx4,2395
|
34
39
|
octobot_trading/modes/script_keywords/context_management.py,sha256=xVovC6waycw72SeuBD4y5erLWsZg_RgkArc1LE5rgx8,25906
|
@@ -58,13 +63,13 @@ octobot_trading/util/__init__.py,sha256=evLMJmcecR8p5fhKMbJda_kmkyogcQa0mb44Json
|
|
58
63
|
octobot_trading/util/simulator_updater_utils.py,sha256=O_cealYwFROh6uDVi1DKx35OLykAwKNp0bdtfbeiYIw,1983
|
59
64
|
octobot_trading/util/config_util.cpython-38-aarch64-linux-gnu.so,sha256=6_u-MptgEqamE5HIrs2AiYq8HUPGONypex6AI5qJYZc,847400
|
60
65
|
octobot_trading/util/__init__.pxd,sha256=amvu39DTFlQ-Xv5lCKgDq4tsvzP_ui5TOTm5ehgpDek,1561
|
61
|
-
octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py,sha256=
|
66
|
+
octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py,sha256=qJ5b4cy9GKf6eJ1OMbteS1rEta_2qDPci32n4lXJopI,6672
|
62
67
|
octobot_trading/util/test_tools/__init__.py,sha256=SZ1jl_Iee73IYok4awKPJ5YOA5LXBWRfvov17hmqqF8,715
|
63
68
|
octobot_trading/util/test_tools/exchanges_test_tools.py,sha256=tOztZrOk6OkWiyJR6dzuFpyAhZ5-iWCrZbqws3W4dzk,2421
|
64
69
|
octobot_trading/util/test_tools/websocket_test_tools.py,sha256=aaOz4dRm6CrWl7h6UOF4HlLmwJA5h03wPoWJugS9HFw,3809
|
65
|
-
octobot_trading/exchanges/exchange_builder.cpython-38-aarch64-linux-gnu.so,sha256=
|
70
|
+
octobot_trading/exchanges/exchange_builder.cpython-38-aarch64-linux-gnu.so,sha256=iS0bcSclWeghh9cJK6hH04uw6akAB-SjwukxLMj8wLI,1564800
|
66
71
|
octobot_trading/exchanges/abstract_exchange.py,sha256=jxbx1rfeWYVC5N_yhxZsVDeRg7NYnqIHRuLs6X9Bm4w,25123
|
67
|
-
octobot_trading/exchanges/exchange_websocket_factory.cpython-38-aarch64-linux-gnu.so,sha256=
|
72
|
+
octobot_trading/exchanges/exchange_websocket_factory.cpython-38-aarch64-linux-gnu.so,sha256=fAPwvYDmKv3edtYex2XZsUp42Ov7e0Q45L5BNB4eIGQ,827360
|
68
73
|
octobot_trading/exchanges/exchange_factory.py,sha256=dLZtl2Bg6t8p8StGusX-Eq6iTYWmLJNV0srTd3ErCS4,8701
|
69
74
|
octobot_trading/exchanges/abstract_exchange.pxd,sha256=OVMqU5KsZnyBu-KVIMFAXpikxNfZzl3CeKE5Lt5W1XQ,3752
|
70
75
|
octobot_trading/exchanges/abstract_websocket_exchange.cpython-38-aarch64-linux-gnu.so,sha256=6tppKXMRJjBahvO-MlsLdTSWr-Gp1AUyv_7PugfaMWU,1568296
|
@@ -85,7 +90,7 @@ octobot_trading/exchanges/exchanges.pxd,sha256=FseAaQPfA3OntMfRq_Tw4OcRldh43JrvE
|
|
85
90
|
octobot_trading/exchanges/exchange_channels.py,sha256=7EamxILSyq18zeo3-ZnYXKudWEKXqQ4VwZ9V01T2tsY,7805
|
86
91
|
octobot_trading/exchanges/exchange_builder.pxd,sha256=_qCYBUNK8QFjiVwOhrbYOlyQcFPbTo48v24VLHh0s7U,2399
|
87
92
|
octobot_trading/exchanges/exchange_channels.pxd,sha256=WyjKsHpjEejNNs5fjsKfyD7rN5p9SqvJeLO72YcxMvo,1114
|
88
|
-
octobot_trading/exchanges/exchange_factory.cpython-38-aarch64-linux-gnu.so,sha256=
|
93
|
+
octobot_trading/exchanges/exchange_factory.cpython-38-aarch64-linux-gnu.so,sha256=V-zlZ0HKVadTIDMNBaiPROI0ZNRc9BZIFKUvYLHwuuY,1065472
|
89
94
|
octobot_trading/exchanges/__init__.pxd,sha256=5C0_Tx8TX5qS--c8YrAmtoreKf3DmqBs18hVlFmXHsk,3877
|
90
95
|
octobot_trading/exchanges/basic_exchange_wrapper.pxd,sha256=BCROGJhradjlEddupiO8lOOUC1bht5Fmq86jtAwbEic,981
|
91
96
|
octobot_trading/exchanges/basic_exchange_wrapper.cpython-38-aarch64-linux-gnu.so,sha256=spwXdKTQW8_-kYwP3FZA1zRoHc_Wwq3L4864PdLGMys,878360
|
@@ -94,11 +99,11 @@ octobot_trading/exchanges/exchange_manager.py,sha256=CQXANkTqcUlGPyVW3HQOjg8J6Oh
|
|
94
99
|
octobot_trading/exchanges/connectors/__init__.py,sha256=bEM3pYx1JZT3e3C_zy5E8cWWKsmfBr6YSFRw6TOPTb8,1229
|
95
100
|
octobot_trading/exchanges/connectors/__init__.pxd,sha256=S-BuBm1bmQVA87yiXCd89Vt_REf-LxVwTmKpupsVZ7s,1134
|
96
101
|
octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py,sha256=ADbegEFdLlE6IZTQhgHjboulZgM_VbL-rxeIVJB8tOo,7153
|
97
|
-
octobot_trading/exchanges/connectors/ccxt/ccxt_connector.cpython-38-aarch64-linux-gnu.so,sha256=
|
102
|
+
octobot_trading/exchanges/connectors/ccxt/ccxt_connector.cpython-38-aarch64-linux-gnu.so,sha256=LDkqxSZ5hwJrROViup7XXft34ipgfEnmJTeTnk81LwQ,6358152
|
98
103
|
octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.cpython-38-aarch64-linux-gnu.so,sha256=ssgE7sWcVjRQWVvdV1TORgCepO-Afz43_psge8-ik4o,4036368
|
99
104
|
octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py,sha256=fsYNatyEC1-HwvBgJcQ2rWmsDVdMFRCPDcjqSot6Bjs,17945
|
100
105
|
octobot_trading/exchanges/connectors/ccxt/constants.py,sha256=kvd4I9JgzjxFfdInGxSHmeMKYv1x8ReDmQyNuytHrX0,761
|
101
|
-
octobot_trading/exchanges/connectors/ccxt/ccxt_connector.pxd,sha256=
|
106
|
+
octobot_trading/exchanges/connectors/ccxt/ccxt_connector.pxd,sha256=4daa-KsNpKYzOtjUCrZsi7ISOyHcx8uDArRD6LVk1S4,1980
|
102
107
|
octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py,sha256=fRPalldg1DNDguUJFdL1NqmfMc172b1u2nwj7GcVadw,43051
|
103
108
|
octobot_trading/exchanges/connectors/ccxt/enums.py,sha256=fOpmMmvfxHDlqA-wqBQE3M6ujbB4kDlXDr5-TrYMh_0,3390
|
104
109
|
octobot_trading/exchanges/connectors/ccxt/__init__.py,sha256=vBelwZG9S0b-wCX-5IBg_N1DN5T7Znfjslqi-Tf6IrY,1309
|
@@ -106,7 +111,7 @@ octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.pxd,sha256=h7
|
|
106
111
|
octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.cpython-38-aarch64-linux-gnu.so,sha256=QvHzIY5sv45jbyTpV5Daw8A5Fc8MVi7ZCaaV1y_4SCY,1015624
|
107
112
|
octobot_trading/exchanges/connectors/ccxt/__init__.pxd,sha256=h-_KWW0mhJikmMRy-t3GezWM8X4LJK6vH_jjlSLf-_0,1138
|
108
113
|
octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.pxd,sha256=-J-ujT_N1vV4ujKWNJn8ObqZps7jtZN0HZyY8eLOzWw,1912
|
109
|
-
octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py,sha256=
|
114
|
+
octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py,sha256=PWsOQPKCkWPSR3UY0X21BFFu5GKdWUoRhqMEKL_4TmM,36174
|
110
115
|
octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.cpython-38-aarch64-linux-gnu.so,sha256=r-KO3X4kcUSS14b-SM5Jm2VN9ZgHjOh13IjXiyBPk9c,1987768
|
111
116
|
octobot_trading/exchanges/connectors/simulator/__init__.py,sha256=-86JVBUObRQ4CbelhQKGS7mi39I1pPATNfHDInv8RaE,1216
|
112
117
|
octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py,sha256=vNCBh6OyaNMQFpE9RcbE8Uji9ZwtQS9uCLMMJc8V7jY,11814
|
@@ -147,9 +152,9 @@ octobot_trading/exchanges/adapters/abstract_adapter.py,sha256=_AtpVz6lg2_moS9D1m
|
|
147
152
|
octobot_trading/exchanges/adapters/__init__.py,sha256=aeqBi9gM8THRt7m2gbFqBSwfz6_bQUSLzKkl_bgzVMU,909
|
148
153
|
octobot_trading/exchanges/traders/trader_simulator.pxd,sha256=ZEbvN8_XZl8S6NbraEZG5PByOaNISgpt3vVpiVsVBnE,849
|
149
154
|
octobot_trading/exchanges/traders/trader_simulator.py,sha256=7tt7GX_RH-Ebr9CXamChbo47xWgegndFc9zi-5CgC0M,1684
|
150
|
-
octobot_trading/exchanges/traders/trader.py,sha256=
|
155
|
+
octobot_trading/exchanges/traders/trader.py,sha256=jMi8SSYyzUZmkTHLaqPr9hjcVcTkaRTv6EowDMFlIiY,42539
|
151
156
|
octobot_trading/exchanges/traders/trader_simulator.cpython-38-aarch64-linux-gnu.so,sha256=U7bYo6-VeRdGIXgtPbu9lZwW44pl9ou4OZvQLcJSL5c,494296
|
152
|
-
octobot_trading/exchanges/traders/trader.cpython-38-aarch64-linux-gnu.so,sha256=
|
157
|
+
octobot_trading/exchanges/traders/trader.cpython-38-aarch64-linux-gnu.so,sha256=DM0GtHbefkOb3Z8mzOEaimHQrDANGMZ7zkCcEIMtSbM,4050544
|
153
158
|
octobot_trading/exchanges/traders/__init__.py,sha256=oQg6oA6Q0fyQeiJBwHCUuwPZsipSaOfSJpKRROVV_0I,1042
|
154
159
|
octobot_trading/exchanges/traders/__init__.pxd,sha256=tGxOQj8t3SysC98JkTUns3p6igAjPzWFvfnY-F2WrtA,1047
|
155
160
|
octobot_trading/exchanges/traders/trader.pxd,sha256=tZslPCFE1ATwClephjBtHHDshgR0eUJteS0pnK_9OZM,1427
|
@@ -313,7 +318,7 @@ octobot_trading/exchange_data/recent_trades/channel/recent_trade.cpython-38-aarc
|
|
313
318
|
octobot_trading/exchange_data/recent_trades/channel/__init__.pxd,sha256=wKRQOFs-m32kAjFs22w5sgUd6joaQzAfRp_VPNSrAOU,1599
|
314
319
|
octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.pxd,sha256=CcJedsfvuhJxJ4LdYAEoMsbniX56OEphre03op-BRmU,941
|
315
320
|
octobot_trading/storage/candles_storage.py,sha256=lz01ISSrwa3sAnTSXArjuDZRkf8AHMl0gqUW0hTVG2o,4385
|
316
|
-
octobot_trading/storage/orders_storage.py,sha256
|
321
|
+
octobot_trading/storage/orders_storage.py,sha256=TVpLDCQ0e0O4MQXGGZ69wZkTcqSrQYVHgdOvcxHwZg0,9604
|
317
322
|
octobot_trading/storage/portfolio_storage.py,sha256=S9HkeKGZDhW8GlPqEyc603pImlGkefCCZWlXX6fonW8,5071
|
318
323
|
octobot_trading/storage/trades_storage.py,sha256=ux7DrNr1jz_WRNy2O7ybzv_2Jlo3QVLrkD5qADqzIdw,8274
|
319
324
|
octobot_trading/storage/__init__.py,sha256=Ukdo2_VX9FpVm2Zs23vB6pXhbJ2uONAOcr9eAzfs6Ss,2159
|
@@ -325,8 +330,8 @@ octobot_trading/personal_data/state.py,sha256=kUPh60h_rD0XlZaRRgEbPGMVIqAmDGfKAk
|
|
325
330
|
octobot_trading/personal_data/exchange_personal_data.pxd,sha256=GNO8Yb4tBMh_SAEjDNZ2PcKs3L6MdNOII4lBq3N7Jqw,1904
|
326
331
|
octobot_trading/personal_data/__init__.py,sha256=OA4Bree2GYL5z4O5p9CVjKNWu2H0483m2t2OZQBe0bo,11980
|
327
332
|
octobot_trading/personal_data/state.pxd,sha256=UhylOYwxnbgWz98a3JBbod0kpXvidXhRKc5vrdP38lU,1548
|
328
|
-
octobot_trading/personal_data/exchange_personal_data.cpython-38-aarch64-linux-gnu.so,sha256=
|
329
|
-
octobot_trading/personal_data/exchange_personal_data.py,sha256=
|
333
|
+
octobot_trading/personal_data/exchange_personal_data.cpython-38-aarch64-linux-gnu.so,sha256=hWT5CPai56bOyQvmzUSAEPgTbS7wQ-Z-zaundnW-9Ps,2981312
|
334
|
+
octobot_trading/personal_data/exchange_personal_data.py,sha256=rLAlditGZbqGptz3-z83nXv9LM2IC_DtscG-EaBO6UA,19003
|
330
335
|
octobot_trading/personal_data/__init__.pxd,sha256=pWCQsf28NYvdu1un3-Pr1yPZ-INMWXPy7jm-NVNGbD0,5451
|
331
336
|
octobot_trading/personal_data/state.cpython-38-aarch64-linux-gnu.so,sha256=caJD3qT4E8McJu-RgVGJNDiwtcyzE34X6EhWEUJYxj0,1686416
|
332
337
|
octobot_trading/personal_data/trades/trades_manager.cpython-38-aarch64-linux-gnu.so,sha256=igfxqeDibzmKvc1dF38_QZznmsC8Vseu_B3JBem1LZQ,1353104
|
@@ -356,7 +361,7 @@ octobot_trading/personal_data/orders/order_util.py,sha256=LLa5dIYeVaqKHMFi2sF_UA
|
|
356
361
|
octobot_trading/personal_data/orders/order_adapter.py,sha256=kjmcmQnkI0I5SDou1pNX73hWkBEVKgW0v4yGjSdJShk,10764
|
357
362
|
octobot_trading/personal_data/orders/order_adapter.pxd,sha256=b-JMLMZ9COO0dWa_tG1IGGYQM2wGXiXNx5vUUlffNmY,1559
|
358
363
|
octobot_trading/personal_data/orders/order_factory.pxd,sha256=UNIi-CsVIwshXWn9kr84JEoL1CRKe6GE90zPsbr4GKA,2569
|
359
|
-
octobot_trading/personal_data/orders/orders_manager.cpython-38-aarch64-linux-gnu.so,sha256=
|
364
|
+
octobot_trading/personal_data/orders/orders_manager.cpython-38-aarch64-linux-gnu.so,sha256=ab2CDfalVbeJyuMiTLDXc793GSz8mIp5U8XP_afmK8k,1975352
|
360
365
|
octobot_trading/personal_data/orders/order_group.cpython-38-aarch64-linux-gnu.so,sha256=CuZ742lcMaz0WpuprH_x82jOFK4WW3-LYGO3kB8uR9Q,739544
|
361
366
|
octobot_trading/personal_data/orders/__init__.py,sha256=L0b39bLFcrUs_yDuLGgH6M7pMRC70p5aWcT0irmOh_g,7174
|
362
367
|
octobot_trading/personal_data/orders/orders_manager.py,sha256=t9SgN-vSog0UlXxIfHYAflqAGecOPNr-_FCK8GvRif0,10764
|
@@ -386,14 +391,14 @@ octobot_trading/personal_data/orders/states/open_order_state.cpython-38-aarch64-
|
|
386
391
|
octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.pxd,sha256=BHdS0fpBXZ9jomt5TYXQ74tm3UZsAc3_fqSmP5t0xtQ,967
|
387
392
|
octobot_trading/personal_data/orders/states/order_state_factory.cpython-38-aarch64-linux-gnu.so,sha256=qNE9edErvHWXYKRW9PWnKC5eNCwlTpco9sHmbWkuT_o,456256
|
388
393
|
octobot_trading/personal_data/orders/states/__init__.py,sha256=rGjbh1aqxa1L3GJmg6xvtI2O-wxaQ04g3-tDFzefxJ8,2133
|
389
|
-
octobot_trading/personal_data/orders/states/cancel_order_state.py,sha256=
|
394
|
+
octobot_trading/personal_data/orders/states/cancel_order_state.py,sha256=H65gbux2Q26e2r75lIgEVbpnM_9WdOPCzoee-_6InGY,5371
|
390
395
|
octobot_trading/personal_data/orders/states/close_order_state.py,sha256=lav5WjmUv0b8cHVvzyOZYUp5ZkXIuLbvHTYgf3ESw8w,2600
|
391
|
-
octobot_trading/personal_data/orders/states/fill_order_state.cpython-38-aarch64-linux-gnu.so,sha256=
|
392
|
-
octobot_trading/personal_data/orders/states/cancel_order_state.cpython-38-aarch64-linux-gnu.so,sha256=
|
396
|
+
octobot_trading/personal_data/orders/states/fill_order_state.cpython-38-aarch64-linux-gnu.so,sha256=4LjRUViI58B1rEjmfrqjA4sY7KDrBboaDX68vXIMdgs,1102384
|
397
|
+
octobot_trading/personal_data/orders/states/cancel_order_state.cpython-38-aarch64-linux-gnu.so,sha256=Yo4gLe5mSFt0A-LGUa57Eqo6KVZpxdFJl_o4uILDOU8,1069952
|
393
398
|
octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py,sha256=xXVK6LQ0__QV56d5_1KEvBZ70YgVJR330XzT00xr5-A,1166
|
394
399
|
octobot_trading/personal_data/orders/states/pending_creation_order_state.cpython-38-aarch64-linux-gnu.so,sha256=7GegmBZgT03fpN-NA08ZNjsxeHD_3-VnpUaqMy0oKAE,695056
|
395
400
|
octobot_trading/personal_data/orders/states/open_order_state.py,sha256=lZJuo_TpUgeVmnMOtrT9-B-xbCGBWL4kA30QywhSsx4,4835
|
396
|
-
octobot_trading/personal_data/orders/states/fill_order_state.py,sha256=
|
401
|
+
octobot_trading/personal_data/orders/states/fill_order_state.py,sha256=JTTQ1uxoH18sQQQKtV6FIN4_ecOdt_w_zC0VEnksDKA,5419
|
397
402
|
octobot_trading/personal_data/orders/states/pending_creation_order_state.py,sha256=9JFMK-zA6txpqOw5TakcOOOzQGgvNDb5pldd3aGaX9w,1674
|
398
403
|
octobot_trading/personal_data/orders/states/__init__.pxd,sha256=cPRfXU_i9gX7_k5hX0baBDM_HzfluRrJXLU55zpr98o,2030
|
399
404
|
octobot_trading/personal_data/orders/states/pending_creation_order_state.pxd,sha256=jCug7dbE3wTItfbQ3gu5Hjnfv80z7MgoeFhElEBiuQA,887
|
@@ -401,9 +406,9 @@ octobot_trading/personal_data/orders/states/open_order_state.pxd,sha256=JKPBEm1i
|
|
401
406
|
octobot_trading/personal_data/orders/states/cancel_order_state.pxd,sha256=Ay5fr1gzQyrkPELSP0kkctHbp9jYJHyqFDSCh4wDGa0,947
|
402
407
|
octobot_trading/personal_data/orders/states/order_state_factory.py,sha256=U3eYUJ9AJRg2JspI5XXipY2k3-zcXSl4qkB2pFSeCTI,1775
|
403
408
|
octobot_trading/personal_data/orders/channel/orders_updater.cpython-38-aarch64-linux-gnu.so,sha256=lQvalGyPcUKR6JIfTmoTkg7MYyZOWQZ_WSLZJyntz0Y,1393272
|
404
|
-
octobot_trading/personal_data/orders/channel/orders.py,sha256=
|
409
|
+
octobot_trading/personal_data/orders/channel/orders.py,sha256=7IYspXpv1_veixV2VdBzm5xZ9mp2XThKXL3gpPqtGu4,13853
|
405
410
|
octobot_trading/personal_data/orders/channel/orders_updater.pxd,sha256=AW8WD6VtCekuYblfWt-oEmUeF_VR6PNsRDemxYqgMqM,1103
|
406
|
-
octobot_trading/personal_data/orders/channel/orders.cpython-38-aarch64-linux-gnu.so,sha256=
|
411
|
+
octobot_trading/personal_data/orders/channel/orders.cpython-38-aarch64-linux-gnu.so,sha256=KY2Rw9QtiIX9vjtLycrFydRF_NCnSO6rjg13e0f8x74,1813136
|
407
412
|
octobot_trading/personal_data/orders/channel/orders.pxd,sha256=QApCnVm5X8MfUzSwNV2d6WMuuOtUFTY3QYV9dGrru9Q,956
|
408
413
|
octobot_trading/personal_data/orders/channel/__init__.py,sha256=BGcr4UWfJYVZQEqjjpvi92OSC4o-qJzRf42ayUJKIBY,1361
|
409
414
|
octobot_trading/personal_data/orders/channel/orders_updater_simulator.pxd,sha256=nxTYeFPIvhkkOBeLRFa1rHrqM9ASW8BQC3VcQWshkug,904
|
@@ -547,15 +552,15 @@ octobot_trading/personal_data/positions/types/linear_position.cpython-38-aarch64
|
|
547
552
|
octobot_trading/personal_data/positions/types/inverse_position.pxd,sha256=agBGmN7p5-g6I47XGCboLxTB7C5iCo5id8OvjMcu9aE,881
|
548
553
|
octobot_trading/personal_data/portfolios/portfolio_profitability.pxd,sha256=d9NZ6ac_s0syRvx_rvOo5yziG-D_xytpCdn32zU38qA,1970
|
549
554
|
octobot_trading/personal_data/portfolios/portfolio_value_holder.py,sha256=f8hAwyvt7ira3rEgTNIZ77_fFzts2wPj84_MWrabU7w,16679
|
550
|
-
octobot_trading/personal_data/portfolios/portfolio_manager.cpython-38-aarch64-linux-gnu.so,sha256=
|
555
|
+
octobot_trading/personal_data/portfolios/portfolio_manager.cpython-38-aarch64-linux-gnu.so,sha256=siWmpPnW3JSyuGRYadEufgYsf2wr36HFN8lVvtJ5n28,2116888
|
551
556
|
octobot_trading/personal_data/portfolios/sub_portfolio.py,sha256=YNdK8DccBPXaoaxMjSTwbU32_tdie-vExnSSbyfy-OU,3270
|
552
557
|
octobot_trading/personal_data/portfolios/portfolio_util.py,sha256=cEphcqwuRz5-eBQl-0K1H46tP_61EfdwBoBA3RFP1OY,9056
|
553
558
|
octobot_trading/personal_data/portfolios/sub_portfolio.pxd,sha256=suCzqU4K3j2wrf_1RLLLLIPiBwZiXp4_eRgen56fpj0,1339
|
554
559
|
octobot_trading/personal_data/portfolios/__init__.py,sha256=Vu33e0iUSahxYyUh3ggOtPymE3i-GX7jqOR5Tl0P404,4168
|
555
560
|
octobot_trading/personal_data/portfolios/portfolio.py,sha256=XS_I7hLN9BgCpzz8EgHJZy7q9vbQCYzCb8ipOQL_S_I,14495
|
556
561
|
octobot_trading/personal_data/portfolios/portfolio_value_holder.pxd,sha256=vFnh13oLE2nJpq2c47PjGXkEfHjIC_5JULpwoOQ7Xqs,3572
|
557
|
-
octobot_trading/personal_data/portfolios/portfolio_factory.cpython-38-aarch64-linux-gnu.so,sha256=
|
558
|
-
octobot_trading/personal_data/portfolios/portfolio_value_holder.cpython-38-aarch64-linux-gnu.so,sha256=
|
562
|
+
octobot_trading/personal_data/portfolios/portfolio_factory.cpython-38-aarch64-linux-gnu.so,sha256=uTSA_E3LATeCxuYtdVIaiZcZ7C2vDdGFwH1MgZ_yXOM,322792
|
563
|
+
octobot_trading/personal_data/portfolios/portfolio_value_holder.cpython-38-aarch64-linux-gnu.so,sha256=smG3VufsGXu_q1Rvt-qkCv55Om3TCTbfKipf-q-pKHg,1293864
|
559
564
|
octobot_trading/personal_data/portfolios/value_converter.pxd,sha256=3lAiOSbz1NEFsLYXHRbVNM6r3sQHSTlugdHEX0_nyzg,2817
|
560
565
|
octobot_trading/personal_data/portfolios/portfolio_manager.py,sha256=zo0Z_27_U-9XRGJzukxL0rZIu1dZzsBEe6StyHSh_-8,14643
|
561
566
|
octobot_trading/personal_data/portfolios/asset.cpython-38-aarch64-linux-gnu.so,sha256=KZKTAuYlbW3nUen_tsBhwvRQ8qn9SGSyWAMZYu_J1Y4,904048
|
@@ -563,12 +568,12 @@ octobot_trading/personal_data/portfolios/portfolio_util.cpython-38-aarch64-linux
|
|
563
568
|
octobot_trading/personal_data/portfolios/portfolio_util.pxd,sha256=_D86zqSs3xoIrgeOsBEAlUJij75gdLeR-oZpa41_5fI,940
|
564
569
|
octobot_trading/personal_data/portfolios/asset.pxd,sha256=6zwtz13xrTvz9TW4NKnLlHWvFR2jzV6o-T9zC6-ZF0A,1305
|
565
570
|
octobot_trading/personal_data/portfolios/portfolio_manager.pxd,sha256=fgPAVuaR87vDa01zk1GdJrO6f58SVs47jKH3zJIybZA,2606
|
566
|
-
octobot_trading/personal_data/portfolios/portfolio_profitability.cpython-38-aarch64-linux-gnu.so,sha256=
|
571
|
+
octobot_trading/personal_data/portfolios/portfolio_profitability.cpython-38-aarch64-linux-gnu.so,sha256=uDJAfX79oS2XzKecSEcfkD3h3P1COXLipQ6xyWPuG28,1051632
|
567
572
|
octobot_trading/personal_data/portfolios/value_converter.py,sha256=mrmno_voKBluIpqOVucAgSbbXM9QVeOkKXMQsgSDWEY,17489
|
568
573
|
octobot_trading/personal_data/portfolios/portfolio.pxd,sha256=ScWgO1SeIsQo2ILr33LfTIJOfta31aNpdBVehZjRhLw,3174
|
569
574
|
octobot_trading/personal_data/portfolios/portfolio_factory.py,sha256=H2kSV_LjQFYevF0-biSg-W7YJ5yDmIdy3LkKQQPt1-c,1368
|
570
575
|
octobot_trading/personal_data/portfolios/__init__.pxd,sha256=hw3qH1yZRT0TqzNr-dB8A6KB5LlaEkCAZMBz3XAcAyc,3758
|
571
|
-
octobot_trading/personal_data/portfolios/value_converter.cpython-38-aarch64-linux-gnu.so,sha256=
|
576
|
+
octobot_trading/personal_data/portfolios/value_converter.cpython-38-aarch64-linux-gnu.so,sha256=hEuYlZpSxJK_jPT15juXNnNx-0tTZSnSC0T8rTotgrs,1908112
|
572
577
|
octobot_trading/personal_data/portfolios/portfolio.cpython-38-aarch64-linux-gnu.so,sha256=AavSKYUCQAtGh4XtaiDwufyLlrMg1_hWkDDM9wJrZGg,1465768
|
573
578
|
octobot_trading/personal_data/portfolios/asset.py,sha256=v8mj4OShmjcsBSkoNUTLWiZZVrFLP0BHCgDw_MEgmCE,4783
|
574
579
|
octobot_trading/personal_data/portfolios/sub_portfolio.cpython-38-aarch64-linux-gnu.so,sha256=TVLuOwC6Iu3GhyzO9bvpfqeyjhHloz6mq2JISxpuHUk,696456
|
@@ -584,7 +589,7 @@ octobot_trading/personal_data/portfolios/history/historical_asset_value.py,sha25
|
|
584
589
|
octobot_trading/personal_data/portfolios/history/__init__.pxd,sha256=B-nwpWvSdL2L8fwTpsZsTY6j-iPPoIR2I_cHsAuG5VE,1541
|
585
590
|
octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.pxd,sha256=rbKXL5FsqCP24t83Pj3pguwoqGBqkTuupkr1bqYqJJo,855
|
586
591
|
octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py,sha256=6JnBXTeJisnlC04w97jscYnGLH_OwtymFAS9HcbjESc,17719
|
587
|
-
octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.cpython-38-aarch64-linux-gnu.so,sha256=
|
592
|
+
octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.cpython-38-aarch64-linux-gnu.so,sha256=fA-pTUT1bF1up1jZ5VcFFyVKBbbzvtkuL7_etfKQrYE,2179104
|
588
593
|
octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.cpython-38-aarch64-linux-gnu.so,sha256=uf3J5PB24AKKcYTUc-AleNMrQW5gOkxS-Jj7GjGhKn0,509032
|
589
594
|
octobot_trading/personal_data/portfolios/channel/balance_updater.cpython-38-aarch64-linux-gnu.so,sha256=8pa73wXLJuJHs09A1CScNAZEg7pF7_LhXer6vWBZARA,1360736
|
590
595
|
octobot_trading/personal_data/portfolios/channel/balance.cpython-38-aarch64-linux-gnu.so,sha256=zy8mZ_mbOc5nV44cMht7l4BZnK9Tq2SoSZbnZpJ9u6E,1515568
|
@@ -662,7 +667,7 @@ tests/exchanges/traders/test_trader.py,sha256=srrcQQv1uQOzH3Ctifys4H_AtgTRDsYrNe
|
|
662
667
|
tests/exchanges/types/__init__.py,sha256=YsUz9-zgsheTifsGc7O1Xt2PSwcnc6Od0IBU7_LAu3o,716
|
663
668
|
tests/exchanges/types/test_websocket_exchange.py,sha256=rcl9dNBLcv4hHsAm9X_b1etkTKOqyetIPqeCMXOP9Qo,1496
|
664
669
|
tests/api/test_exchange.py,sha256=omqI04fWyDP4M7ZjflA7zqLYXEb6lLA685TuYNTO_4w,2148
|
665
|
-
tests/api/test_channels.py,sha256=
|
670
|
+
tests/api/test_channels.py,sha256=uSphqXYYx_gckOeWmN-LhHy1uvJOCsYxzv8txWN7RkM,1854
|
666
671
|
tests/api/__init__.py,sha256=YsUz9-zgsheTifsGc7O1Xt2PSwcnc6Od0IBU7_LAu3o,716
|
667
672
|
tests/api/test_symbol_data.py,sha256=X9ZrbkFYPKMggoZE70x5-N-O262UZJzpiryj8EUygWo,814
|
668
673
|
tests/api/test_modes.py,sha256=X9ZrbkFYPKMggoZE70x5-N-O262UZJzpiryj8EUygWo,814
|
@@ -803,8 +808,3 @@ tests_additional/real_exchanges/test_phemex.py,sha256=RfweUAjb9xTWlKQ88xiw8VN9vM
|
|
803
808
|
tests_additional/real_exchanges/test_bitget.py,sha256=S4oS8tzbEv3zLwzuuLFyUhMS95RNcbJzRabY_a3D3tM,7938
|
804
809
|
tests_additional/real_exchanges/test_coinex.py,sha256=-aHIh-kYfuacBwopN06RSXQ5ZHCzW7QuJRewpV4tA2I,7180
|
805
810
|
tests_additional/real_exchanges/test_kucoin.py,sha256=8iedpNDq7WdMaSlD0VYown6WyLb8ouP1GkJGKNlfoB0,7593
|
806
|
-
OctoBot_Trading-2.3.34.dist-info/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
|
807
|
-
OctoBot_Trading-2.3.34.dist-info/WHEEL,sha256=oCBNUxcpJIObB7qxTwklMZvZV19pJGv6x0IkRXaUM7w,150
|
808
|
-
OctoBot_Trading-2.3.34.dist-info/top_level.txt,sha256=EWslZXCzarlfXX-Z5_2qiJ28t-1TykzGYqpXESZP0H0,39
|
809
|
-
OctoBot_Trading-2.3.34.dist-info/RECORD,,
|
810
|
-
OctoBot_Trading-2.3.34.dist-info/METADATA,sha256=o312uAmPpztKEwXhCHr8GzT9U99ati6NeQ7hYp70pqU,2285
|
octobot_trading/__init__.py
CHANGED
octobot_trading/constants.py
CHANGED
@@ -60,6 +60,7 @@ ENABLE_CCXT_VERBOSE = os_util.parse_boolean_environment_var("ENABLE_CCXT_VERBOSE
|
|
60
60
|
ENABLE_CCXT_RATE_LIMIT = os_util.parse_boolean_environment_var("ENABLE_CCXT_RATE_LIMIT", "True")
|
61
61
|
THROTTLED_WS_UPDATES = float(os.getenv("THROTTLED_WS_UPDATES", "0.1")) # avoid spamming CPU
|
62
62
|
ENABLE_LIVE_CANDLES_STORAGE = os_util.parse_boolean_environment_var("ENABLE_LIVE_CANDLES_STORAGE", "False")
|
63
|
+
ENABLE_HISTORICAL_ORDERS_UPDATES_STORAGE = os_util.parse_boolean_environment_var("ENABLE_HISTORICAL_ORDERS_UPDATES_STORAGE", "False")
|
63
64
|
|
64
65
|
# Decimal default values (decimals are immutable, can be stored as constant)
|
65
66
|
ZERO = decimal.Decimal(0)
|
octobot_trading/enums.py
CHANGED
@@ -545,3 +545,15 @@ class StoredOrdersAttr(enum.Enum):
|
|
545
545
|
SHARED_SIGNAL_ORDER_ID = "ssoi"
|
546
546
|
HAS_BEEN_BUNDLED = "hbb"
|
547
547
|
ENTRIES = "en"
|
548
|
+
UPDATE_TIME = "ut"
|
549
|
+
UPDATE_TYPE = "uty"
|
550
|
+
ORDER_ID = "oid"
|
551
|
+
ORDER_STATUS = "s"
|
552
|
+
ORDER_DETAILS = "d"
|
553
|
+
|
554
|
+
|
555
|
+
class OrderUpdateType(enum.Enum):
|
556
|
+
NEW = "new"
|
557
|
+
CLOSED = "closed"
|
558
|
+
EDIT = "edit"
|
559
|
+
STATE_CHANGE = "state_transition"
|
Binary file
|
@@ -25,17 +25,17 @@ cdef class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
25
25
|
cdef public bint is_authenticated
|
26
26
|
cdef public str rest_name
|
27
27
|
|
28
|
+
cdef public dict saved_data
|
29
|
+
|
28
30
|
cdef object additional_config
|
29
31
|
cdef dict options
|
30
32
|
cdef dict headers
|
31
33
|
|
32
34
|
|
33
|
-
# private
|
34
|
-
cdef object _create_client(self)
|
35
|
-
|
36
35
|
# @staticmethod waiting for a future version of cython
|
37
36
|
# cdef bint _ensure_order_details_completeness(object order, list order_required_fields=*)
|
38
37
|
|
38
|
+
cpdef object _create_client(self) # public to call and override in non cython subclasses
|
39
39
|
cpdef object get_adapter_class(self, object adapter_class)
|
40
40
|
cpdef void add_headers(self, dict headers_dict)
|
41
41
|
cpdef void add_options(self, dict options_dict)
|
@@ -45,3 +45,6 @@ cdef class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
45
45
|
cpdef object unauthenticated_exchange_fallback(self, object err)
|
46
46
|
|
47
47
|
cdef bint _should_authenticate(self)
|
48
|
+
|
49
|
+
cpdef object get_saved_data(self, object key)
|
50
|
+
cpdef object set_saved_data(self, object key, object value)
|
@@ -56,6 +56,9 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
56
56
|
self.is_authenticated = False
|
57
57
|
self.rest_name = rest_name or self.exchange_manager.exchange_class_string
|
58
58
|
|
59
|
+
# used to save exchange local elements in subclasses
|
60
|
+
self.saved_data = {}
|
61
|
+
|
59
62
|
self.additional_config = additional_config
|
60
63
|
self.headers = {}
|
61
64
|
self.options = {}
|
@@ -678,6 +681,11 @@ class CCXTConnector(abstract_exchange.AbstractExchange):
|
|
678
681
|
self.client.safe_value(self.client.markets, pair, {}), property_name, def_value
|
679
682
|
)
|
680
683
|
|
684
|
+
def get_saved_data(self, key):
|
685
|
+
return self.saved_data[key]
|
686
|
+
|
687
|
+
def set_saved_data(self, key, value):
|
688
|
+
self.saved_data[key] = value
|
681
689
|
|
682
690
|
"""
|
683
691
|
Parsers todo: remove all parsers
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -215,6 +215,10 @@ class Trader(util.Initializable):
|
|
215
215
|
self.exchange_manager.exchange_personal_data.portfolio_manager.portfolio.update_portfolio_available(
|
216
216
|
order, is_new_order=True
|
217
217
|
)
|
218
|
+
# push order edit into orders channel as edit update
|
219
|
+
await self.exchange_manager.exchange_personal_data.handle_order_update_notification(
|
220
|
+
order, enums.OrderUpdateType.EDIT
|
221
|
+
)
|
218
222
|
self.logger.info(f"Edited order: {order}")
|
219
223
|
return changed
|
220
224
|
finally:
|
Binary file
|
Binary file
|
Binary file
|
@@ -208,7 +208,8 @@ class ExchangePersonalData(util.Initializable):
|
|
208
208
|
asyncio.create_task(order.state.on_refresh_successful())
|
209
209
|
|
210
210
|
if should_notify:
|
211
|
-
|
211
|
+
update_type = enums.OrderUpdateType.NEW if is_new_order else enums.OrderUpdateType.STATE_CHANGE
|
212
|
+
await self.handle_order_update_notification(order, update_type)
|
212
213
|
return order.state is not None
|
213
214
|
|
214
215
|
def _is_out_of_sync_order(self, order_id) -> bool:
|
@@ -225,11 +226,11 @@ class ExchangePersonalData(util.Initializable):
|
|
225
226
|
self.logger.exception(e, True, f"Failed to update order instance : {e}")
|
226
227
|
return False
|
227
228
|
|
228
|
-
async def handle_order_update_notification(self, order,
|
229
|
+
async def handle_order_update_notification(self, order, update_type: enums.OrderUpdateType):
|
229
230
|
"""
|
230
231
|
Notify Orders channel for Order update
|
231
232
|
:param order: the updated order
|
232
|
-
:param
|
233
|
+
:param update_type: the type of update as enums.OrderUpdateType
|
233
234
|
"""
|
234
235
|
try:
|
235
236
|
orders_chan = exchange_channel.get_chan(constants.ORDERS_CHANNEL, self.exchange_manager.id)
|
@@ -237,11 +238,11 @@ class ExchangePersonalData(util.Initializable):
|
|
237
238
|
# avoid other computations if no consumer
|
238
239
|
return
|
239
240
|
await orders_chan.get_internal_producer().send(
|
240
|
-
|
241
|
-
|
242
|
-
order
|
241
|
+
self.exchange_manager.exchange.get_pair_cryptocurrency(order.symbol),
|
242
|
+
order.symbol,
|
243
|
+
order.to_dict(),
|
243
244
|
is_from_bot=order.is_from_this_octobot,
|
244
|
-
|
245
|
+
update_type=update_type,
|
245
246
|
is_closed=order.is_closed()
|
246
247
|
)
|
247
248
|
except ValueError as e:
|
Binary file
|
@@ -19,6 +19,7 @@ import octobot_trading.exchange_channel as exchanges_channel
|
|
19
19
|
import octobot_trading.exchanges as exchanges
|
20
20
|
import octobot_trading.constants as constants
|
21
21
|
import octobot_trading.errors as errors
|
22
|
+
import octobot_trading.enums as enums
|
22
23
|
import octobot_trading.personal_data.orders.orders_storage_operations as orders_storage_operations
|
23
24
|
|
24
25
|
|
@@ -105,12 +106,14 @@ class OrdersProducer(exchanges_channel.ExchangeChannelProducer):
|
|
105
106
|
)
|
106
107
|
except Exception as err:
|
107
108
|
self.logger.exception(err, True, f"Error when completing order with stored data: {err}")
|
108
|
-
await self.send(
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
109
|
+
await self.send(
|
110
|
+
self.channel.exchange_manager.exchange.get_pair_cryptocurrency(symbol),
|
111
|
+
symbol,
|
112
|
+
order,
|
113
|
+
is_from_bot=is_from_bot,
|
114
|
+
update_type=enums.OrderUpdateType.NEW if is_new_order else enums.OrderUpdateType.STATE_CHANGE,
|
115
|
+
is_closed=False
|
116
|
+
)
|
114
117
|
|
115
118
|
async def _complete_open_order_init(self, orders, is_from_bot):
|
116
119
|
"""
|
@@ -119,12 +122,14 @@ class OrdersProducer(exchanges_channel.ExchangeChannelProducer):
|
|
119
122
|
for order in orders:
|
120
123
|
self.logger.debug(f"Completing order init for order: {order}")
|
121
124
|
await self.channel.exchange_manager.exchange_personal_data.on_order_refresh_success(order, False, False)
|
122
|
-
await self.send(
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
125
|
+
await self.send(
|
126
|
+
self.channel.exchange_manager.exchange.get_pair_cryptocurrency(order.symbol),
|
127
|
+
order.symbol,
|
128
|
+
order.to_dict(),
|
129
|
+
is_from_bot=is_from_bot,
|
130
|
+
update_type=enums.OrderUpdateType.NEW,
|
131
|
+
is_closed=False
|
132
|
+
)
|
128
133
|
|
129
134
|
async def _handle_close_order_update(self, order_id, order):
|
130
135
|
"""
|
@@ -230,8 +235,9 @@ class OrdersProducer(exchanges_channel.ExchangeChannelProducer):
|
|
230
235
|
self.logger.error(f"Order with id {missing_order_id} could not be synchronized")
|
231
236
|
await asyncio.gather(*synchronize_tasks)
|
232
237
|
|
233
|
-
async def send(self, cryptocurrency, symbol, order, is_from_bot=True,
|
234
|
-
|
238
|
+
async def send(self, cryptocurrency, symbol, order, is_from_bot=True,
|
239
|
+
update_type=enums.OrderUpdateType.STATE_CHANGE, is_closed=False):
|
240
|
+
if is_closed or update_type is enums.OrderUpdateType.CLOSED:
|
235
241
|
# do not push closed orders
|
236
242
|
return
|
237
243
|
for consumer in self.channel.get_filtered_consumers(symbol=symbol):
|
@@ -241,7 +247,7 @@ class OrdersProducer(exchanges_channel.ExchangeChannelProducer):
|
|
241
247
|
"cryptocurrency": cryptocurrency,
|
242
248
|
"symbol": symbol,
|
243
249
|
"order": order,
|
244
|
-
"
|
250
|
+
"update_type": update_type.value,
|
245
251
|
"is_from_bot": is_from_bot
|
246
252
|
})
|
247
253
|
|
Binary file
|
octobot_trading/personal_data/orders/states/cancel_order_state.cpython-38-aarch64-linux-gnu.so
CHANGED
Binary file
|
@@ -103,8 +103,9 @@ class CancelOrderState(order_state.OrderState):
|
|
103
103
|
False)
|
104
104
|
|
105
105
|
# notify order cancelled
|
106
|
-
await self.order.exchange_manager.exchange_personal_data.handle_order_update_notification(
|
107
|
-
|
106
|
+
await self.order.exchange_manager.exchange_personal_data.handle_order_update_notification(
|
107
|
+
self.order, enums.OrderUpdateType.STATE_CHANGE
|
108
|
+
)
|
108
109
|
|
109
110
|
# set close state
|
110
111
|
await self.order.on_close(force_close=True) # TODO force ?
|
octobot_trading/personal_data/orders/states/fill_order_state.cpython-38-aarch64-linux-gnu.so
CHANGED
Binary file
|
@@ -110,7 +110,8 @@ class FillOrderState(order_state.OrderState):
|
|
110
110
|
|
111
111
|
# notify order filled
|
112
112
|
await self.order.exchange_manager.exchange_personal_data.handle_order_update_notification(
|
113
|
-
self.order,
|
113
|
+
self.order, enums.OrderUpdateType.STATE_CHANGE
|
114
|
+
)
|
114
115
|
|
115
116
|
# call order on_filled callback
|
116
117
|
await self.order.on_filled()
|
Binary file
|
Binary file
|
Binary file
|
octobot_trading/personal_data/portfolios/portfolio_profitability.cpython-38-aarch64-linux-gnu.so
CHANGED
Binary file
|
octobot_trading/personal_data/portfolios/portfolio_value_holder.cpython-38-aarch64-linux-gnu.so
CHANGED
Binary file
|
Binary file
|
@@ -15,6 +15,7 @@
|
|
15
15
|
# License along with this library
|
16
16
|
import copy
|
17
17
|
import decimal
|
18
|
+
import time
|
18
19
|
|
19
20
|
import octobot_commons.channels_name as channels_name
|
20
21
|
import octobot_commons.enums as commons_enums
|
@@ -22,6 +23,7 @@ import octobot_commons.databases as commons_databases
|
|
22
23
|
import octobot_commons.logging as commons_logging
|
23
24
|
|
24
25
|
import octobot_trading.enums as enums
|
26
|
+
import octobot_trading.constants as constants
|
25
27
|
import octobot_trading.storage.abstract_storage as abstract_storage
|
26
28
|
import octobot_trading.storage.util as storage_util
|
27
29
|
|
@@ -29,7 +31,9 @@ import octobot_trading.storage.util as storage_util
|
|
29
31
|
class OrdersStorage(abstract_storage.AbstractStorage):
|
30
32
|
LIVE_CHANNEL = channels_name.OctoBotTradingChannelsName.ORDERS_CHANNEL.value
|
31
33
|
HISTORY_TABLE = commons_enums.DBTables.ORDERS.value
|
34
|
+
HISTORICAL_OPEN_ORDERS_TABLE = commons_enums.DBTables.HISTORICAL_ORDERS_UPDATES.value
|
32
35
|
IS_HISTORICAL = False
|
36
|
+
ENABLE_HISTORICAL_ORDER_UPDATES_STORAGE = constants.ENABLE_HISTORICAL_ORDERS_UPDATES_STORAGE
|
33
37
|
|
34
38
|
def __init__(self, exchange_manager, use_live_consumer_in_backtesting=None, is_historical=None):
|
35
39
|
super().__init__(exchange_manager, plot_settings=None,
|
@@ -54,11 +58,13 @@ class OrdersStorage(abstract_storage.AbstractStorage):
|
|
54
58
|
cryptocurrency: str,
|
55
59
|
symbol: str,
|
56
60
|
order: dict,
|
57
|
-
|
61
|
+
update_type: str,
|
58
62
|
is_from_bot: bool,
|
59
63
|
):
|
60
64
|
# only store the current snapshot of open orders when order updates are received
|
61
65
|
await self._update_history()
|
66
|
+
if self.ENABLE_HISTORICAL_ORDER_UPDATES_STORAGE:
|
67
|
+
await self._add_historical_open_orders(order, update_type)
|
62
68
|
await self.trigger_debounced_flush()
|
63
69
|
|
64
70
|
async def _update_history(self):
|
@@ -71,6 +77,14 @@ class OrdersStorage(abstract_storage.AbstractStorage):
|
|
71
77
|
cache=False,
|
72
78
|
)
|
73
79
|
|
80
|
+
async def _add_historical_open_orders(self, order_dict: dict, update_type: str):
|
81
|
+
update_time = time.time()
|
82
|
+
await self._get_db().log(
|
83
|
+
self.HISTORICAL_OPEN_ORDERS_TABLE,
|
84
|
+
_format_order_update(self.exchange_manager, order_dict, update_type, update_time),
|
85
|
+
cache=False,
|
86
|
+
)
|
87
|
+
|
74
88
|
async def _store_history(self):
|
75
89
|
await self._update_history()
|
76
90
|
await self._get_db().flush()
|
@@ -82,6 +96,9 @@ class OrdersStorage(abstract_storage.AbstractStorage):
|
|
82
96
|
self.exchange_manager.exchange_name,
|
83
97
|
)
|
84
98
|
|
99
|
+
async def get_historical_orders_updates(self):
|
100
|
+
return copy.deepcopy(await self._get_db().all(self.HISTORICAL_OPEN_ORDERS_TABLE))
|
101
|
+
|
85
102
|
async def get_startup_order_details(self, order_id):
|
86
103
|
return self.startup_orders.get(order_id, None)
|
87
104
|
|
@@ -128,6 +145,14 @@ class OrdersStorage(abstract_storage.AbstractStorage):
|
|
128
145
|
)
|
129
146
|
return order_dict
|
130
147
|
|
148
|
+
@classmethod
|
149
|
+
async def clear_database_history(cls, database, flush=True):
|
150
|
+
await super().clear_database_history(database, flush=False)
|
151
|
+
if cls.ENABLE_HISTORICAL_ORDER_UPDATES_STORAGE:
|
152
|
+
await database.delete(cls.HISTORICAL_OPEN_ORDERS_TABLE, None)
|
153
|
+
if flush:
|
154
|
+
await database.flush()
|
155
|
+
|
131
156
|
|
132
157
|
def _get_group_dict(order):
|
133
158
|
if not order.order_group:
|
@@ -168,3 +193,31 @@ def _format_order(order, exchange_manager):
|
|
168
193
|
except Exception as err:
|
169
194
|
commons_logging.get_logger(OrdersStorage.__name__).exception(err, True, f"Error when formatting order: {err}")
|
170
195
|
return {}
|
196
|
+
|
197
|
+
|
198
|
+
def _format_order_update(exchange_manager, order_dict, update_type, update_time):
|
199
|
+
order_id = order_dict[enums.ExchangeConstantsOrderColumns.ID.value]
|
200
|
+
status = order_dict[enums.ExchangeConstantsOrderColumns.STATUS.value]
|
201
|
+
order_update = {
|
202
|
+
enums.StoredOrdersAttr.ORDER_ID.value: order_id,
|
203
|
+
enums.StoredOrdersAttr.ORDER_STATUS.value: status,
|
204
|
+
enums.StoredOrdersAttr.UPDATE_TIME.value: update_time,
|
205
|
+
enums.StoredOrdersAttr.UPDATE_TYPE.value: update_type,
|
206
|
+
}
|
207
|
+
details = None
|
208
|
+
try:
|
209
|
+
details = _format_order(
|
210
|
+
exchange_manager.exchange_personal_data.orders_manager.get_order(
|
211
|
+
order_dict[enums.ExchangeConstantsOrderColumns.ID.value]
|
212
|
+
),
|
213
|
+
exchange_manager
|
214
|
+
)
|
215
|
+
except KeyError:
|
216
|
+
if status == enums.OrderStatus.OPEN.value:
|
217
|
+
# ensure order details are present in open orders
|
218
|
+
details = {
|
219
|
+
OrdersStorage.ORIGIN_VALUE_KEY: OrdersStorage.sanitize_for_storage(order_dict),
|
220
|
+
}
|
221
|
+
order_update[enums.StoredOrdersAttr.ORDER_DETAILS.value] = details
|
222
|
+
return order_update
|
223
|
+
|
@@ -130,7 +130,7 @@ class SpotRestExchangeTests:
|
|
130
130
|
cryptocurrency: str,
|
131
131
|
symbol: str,
|
132
132
|
order: dict,
|
133
|
-
|
133
|
+
update_type: str,
|
134
134
|
is_from_bot: bool,
|
135
135
|
):
|
136
136
|
self.channel_callbacks_triggered[channels_name.OctoBotTradingChannelsName.ORDERS_CHANNEL.value] = True
|
tests/api/test_channels.py
CHANGED
@@ -40,7 +40,7 @@ async def trades_callback(exchange: str, exchange_id: str, cryptocurrency: str,
|
|
40
40
|
pass
|
41
41
|
|
42
42
|
|
43
|
-
async def order_callback(self, exchange, exchange_id, cryptocurrency, symbol, order,
|
43
|
+
async def order_callback(self, exchange, exchange_id, cryptocurrency, symbol, order, update_type, is_from_bot):
|
44
44
|
pass
|
45
45
|
|
46
46
|
|
File without changes
|
File without changes
|
File without changes
|