architect-py 5.1.4rc1__py3-none-any.whl → 5.1.6__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.
- architect_py/__init__.py +24 -4
- architect_py/async_client.py +121 -67
- architect_py/client.pyi +16 -37
- architect_py/grpc/models/Accounts/ResetPaperAccountRequest.py +59 -0
- architect_py/grpc/models/Accounts/ResetPaperAccountResponse.py +20 -0
- architect_py/grpc/models/Boss/OptionsTransactionsRequest.py +42 -0
- architect_py/grpc/models/Boss/OptionsTransactionsResponse.py +27 -0
- architect_py/grpc/models/Core/ConfigResponse.py +7 -2
- architect_py/grpc/models/Folio/AccountSummary.py +7 -1
- architect_py/grpc/models/Marketdata/Candle.py +6 -0
- architect_py/grpc/models/Marketdata/L1BookSnapshot.py +6 -0
- architect_py/grpc/models/Marketdata/L2BookSnapshot.py +6 -0
- architect_py/grpc/models/Marketdata/Liquidation.py +6 -0
- architect_py/grpc/models/Marketdata/Ticker.py +6 -0
- architect_py/grpc/models/Marketdata/Trade.py +6 -0
- architect_py/grpc/models/OptionsMarketdata/OptionsChain.py +5 -5
- architect_py/grpc/models/OptionsMarketdata/OptionsChainGreeks.py +5 -5
- architect_py/grpc/models/OptionsMarketdata/OptionsChainGreeksRequest.py +5 -1
- architect_py/grpc/models/OptionsMarketdata/OptionsChainRequest.py +5 -1
- architect_py/grpc/models/OptionsMarketdata/OptionsContract.py +45 -0
- architect_py/grpc/models/OptionsMarketdata/OptionsContractGreeksRequest.py +40 -0
- architect_py/grpc/models/OptionsMarketdata/OptionsContractRequest.py +40 -0
- architect_py/grpc/models/OptionsMarketdata/OptionsExpirations.py +4 -1
- architect_py/grpc/models/OptionsMarketdata/OptionsExpirationsRequest.py +8 -1
- architect_py/grpc/models/OptionsMarketdata/OptionsGreeks.py +58 -0
- architect_py/grpc/models/OptionsMarketdata/OptionsWraps.py +28 -0
- architect_py/grpc/models/OptionsMarketdata/OptionsWrapsRequest.py +40 -0
- architect_py/grpc/models/__init__.py +11 -1
- architect_py/grpc/models/definitions.py +57 -86
- architect_py/grpc/orderflow.py +3 -7
- architect_py/grpc/server.py +1 -3
- architect_py/tests/test_order_entry.py +120 -1
- architect_py/tests/test_positions.py +364 -0
- architect_py/tests/test_rounding.py +28 -28
- architect_py/utils/pandas.py +50 -1
- {architect_py-5.1.4rc1.dist-info → architect_py-5.1.6.dist-info}/METADATA +1 -1
- {architect_py-5.1.4rc1.dist-info → architect_py-5.1.6.dist-info}/RECORD +49 -38
- examples/external_cpty.py +2 -1
- examples/funding_rate_mean_reversion_algo.py +4 -4
- examples/order_sending.py +3 -3
- examples/orderflow_channel.py +75 -56
- examples/stream_l1_marketdata.py +3 -1
- examples/stream_l2_marketdata.py +3 -1
- examples/tutorial_async.py +3 -2
- examples/tutorial_sync.py +4 -3
- scripts/generate_functions_md.py +2 -1
- {architect_py-5.1.4rc1.dist-info → architect_py-5.1.6.dist-info}/WHEEL +0 -0
- {architect_py-5.1.4rc1.dist-info → architect_py-5.1.6.dist-info}/licenses/LICENSE +0 -0
- {architect_py-5.1.4rc1.dist-info → architect_py-5.1.6.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,7 @@
|
|
1
|
-
architect_py/__init__.py,sha256=
|
2
|
-
architect_py/async_client.py,sha256
|
1
|
+
architect_py/__init__.py,sha256=mDbb3T4q4aa1yVWg8pjOgE7xsBUbwTLxR9RjaTWNpcw,17760
|
2
|
+
architect_py/async_client.py,sha256=-8SotKjmDwDaM5yVw7PF4NT8lKk9A1DAnN5gywwehWc,66378
|
3
3
|
architect_py/client.py,sha256=y8w17ZLo_Y2-knH-46qqVGlSJyQHB9qwOPodI9pzN-Q,5192
|
4
|
-
architect_py/client.pyi,sha256=
|
4
|
+
architect_py/client.pyi,sha256=9GFL2Ei4Q6YUf-en6Z7kWJhdO-ayeKfT4VS_Yt2W4lA,25093
|
5
5
|
architect_py/common_types/__init__.py,sha256=fzOdIlKGWVN9V2Onc5z1v2bpvtZ4H9RSFA9ymJcBi3k,197
|
6
6
|
architect_py/common_types/order_dir.py,sha256=ebyWTcXzJWrotkc2D9wNGc6JXbE5I3NLLuAz3I7FTZ8,2191
|
7
7
|
architect_py/common_types/time_in_force.py,sha256=gEDYcNp014Eeb98zJDytiV0hGxHu_QsQndeM6Hk0Wa8,3132
|
@@ -24,14 +24,16 @@ architect_py/graphql_client/search_symbols_query.py,sha256=hbGa6gF-gMWtRYQm2vlCT
|
|
24
24
|
architect_py/graphql_client/user_id_query.py,sha256=tWKJJLgEINzd8e7rYlGklQCnwcwHzYFpCGQvhxQGX20,334
|
25
25
|
architect_py/grpc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
26
26
|
architect_py/grpc/client.py,sha256=qoH-bb-sDjoDlYYmByQVbzYBbCimFY_AmoOLEBDxEtA,4096
|
27
|
-
architect_py/grpc/orderflow.py,sha256=
|
27
|
+
architect_py/grpc/orderflow.py,sha256=4ZvJeiFsD9We8pmiWcGYp003NKapcyhr0KbYCBxSX38,4732
|
28
28
|
architect_py/grpc/resolve_endpoint.py,sha256=r_PBWANIJJ47N5uyPcnefZ21ZE1-mzgACfCBfQpekg8,2621
|
29
|
-
architect_py/grpc/server.py,sha256=
|
29
|
+
architect_py/grpc/server.py,sha256=f-LOSFry40U1a8iHUEAb2JOgIk7NorGC3UbbRk4MUe0,1888
|
30
30
|
architect_py/grpc/utils.py,sha256=5sykLExUNZbcQHcxLCCM9DdOOiJJZcpputGrDtaMifY,667
|
31
|
-
architect_py/grpc/models/__init__.py,sha256=
|
32
|
-
architect_py/grpc/models/definitions.py,sha256=
|
31
|
+
architect_py/grpc/models/__init__.py,sha256=mhtKrrIgjgLZu6JdcgXRNwS4BURm9tWcq9FB_BbIW0U,10325
|
32
|
+
architect_py/grpc/models/definitions.py,sha256=pT1S_f6nO3-OE9Lp6L5hT3w7PFf4yJOgiHq1Yu_v7oU,81615
|
33
33
|
architect_py/grpc/models/Accounts/AccountsRequest.py,sha256=1a88cltSebOb53EdJ0hKEGR7FlmBiibrCtGzLTKqDBY,1524
|
34
34
|
architect_py/grpc/models/Accounts/AccountsResponse.py,sha256=DlXbkd3UbRybblBAfokw-K6nRvLNZgqz7cc0EKiW1zI,636
|
35
|
+
architect_py/grpc/models/Accounts/ResetPaperAccountRequest.py,sha256=PmoU9SPYWSwnD-hEOE3rkJeiRZyQ2k7LT4JYn5Fl6dM,1544
|
36
|
+
architect_py/grpc/models/Accounts/ResetPaperAccountResponse.py,sha256=-49so1Qxl-9QIRByiZ9gj-md3mt-S5oyiuy3vgolCZY,449
|
35
37
|
architect_py/grpc/models/Accounts/__init__.py,sha256=sIyaEvJdP-VmGTGPPqZuRjKn4bc7NUClJ76Gd5uq-5s,57
|
36
38
|
architect_py/grpc/models/Algo/AlgoOrder.py,sha256=ugkS9xU4ujHW3PcZpCKThw76NNkUDNakCVMf3ZnmPMw,3892
|
37
39
|
architect_py/grpc/models/Algo/AlgoOrderRequest.py,sha256=uDqxNv6vKxtkrXyO_8l1kOtVkqEsppq-wCupawmEde8,1022
|
@@ -54,6 +56,8 @@ architect_py/grpc/models/Auth/CreateJwtResponse.py,sha256=G1rsG7f4gMiWK4WVxTZMzF
|
|
54
56
|
architect_py/grpc/models/Auth/__init__.py,sha256=sIyaEvJdP-VmGTGPPqZuRjKn4bc7NUClJ76Gd5uq-5s,57
|
55
57
|
architect_py/grpc/models/Boss/DepositsRequest.py,sha256=DFf4InRz52RQt4tGrbHsDyb_9iyCNFFbQYJL922nNs4,922
|
56
58
|
architect_py/grpc/models/Boss/DepositsResponse.py,sha256=_qJvMEu9MAw-mreuRpUkbHMo7D_vSVJru_HZV2BYPmA,602
|
59
|
+
architect_py/grpc/models/Boss/OptionsTransactionsRequest.py,sha256=liTzqt4kPqZuaK4ajytdWjrWBYPGCyDyX8sbLIz1Z1k,1019
|
60
|
+
architect_py/grpc/models/Boss/OptionsTransactionsResponse.py,sha256=SKVi8OiGJyAWM-wsI3yStBTrGIh2DpwfyI6J5xAolCI,717
|
57
61
|
architect_py/grpc/models/Boss/RqdAccountStatisticsRequest.py,sha256=gp51kcbU-9Iv_7TG-jcIN2owg9NIJDxFl755TJVk2TM,1027
|
58
62
|
architect_py/grpc/models/Boss/RqdAccountStatisticsResponse.py,sha256=6eXUsphh7MwLrGsIq3nt2jRaIrGNozbZy22Fr5uRvww,697
|
59
63
|
architect_py/grpc/models/Boss/StatementUrlRequest.py,sha256=ffOWj7p_lMX9X7s3uB8PnH6hxFUnsHnjoQqu0hchnn8,974
|
@@ -64,7 +68,7 @@ architect_py/grpc/models/Boss/WithdrawalsRequest.py,sha256=876d2gsGbSTPZ74wCoe0n
|
|
64
68
|
architect_py/grpc/models/Boss/WithdrawalsResponse.py,sha256=th6r28rjNBUuMBs95lwf9pxaxFtrwKJ_VAq7egwMVM8,632
|
65
69
|
architect_py/grpc/models/Boss/__init__.py,sha256=sIyaEvJdP-VmGTGPPqZuRjKn4bc7NUClJ76Gd5uq-5s,57
|
66
70
|
architect_py/grpc/models/Core/ConfigRequest.py,sha256=9taH97J4b-_Co7d-o_zHOPg_vckc_InvnADXYpd_MlM,809
|
67
|
-
architect_py/grpc/models/Core/ConfigResponse.py,sha256=
|
71
|
+
architect_py/grpc/models/Core/ConfigResponse.py,sha256=fjOEuwTyawepSaVGfLXqhmo_1ssDsDbyYkxje_SwBlU,717
|
68
72
|
architect_py/grpc/models/Core/RestartCptyRequest.py,sha256=Hl_uSGkMFE9yPonClcNE24neeib8LP3fHH6UwpI_WSQ,916
|
69
73
|
architect_py/grpc/models/Core/RestartCptyResponse.py,sha256=aCyJfucfFGHieGURjEejeT9HPoaKJ2xCGPVqw5pcCJs,427
|
70
74
|
architect_py/grpc/models/Core/__init__.py,sha256=sIyaEvJdP-VmGTGPPqZuRjKn4bc7NUClJ76Gd5uq-5s,57
|
@@ -79,7 +83,7 @@ architect_py/grpc/models/Folio/AccountHistoryRequest.py,sha256=62zM93rALjckq8y5s
|
|
79
83
|
architect_py/grpc/models/Folio/AccountHistoryResponse.py,sha256=3CUKPrqbUpH1MRYFZi2Q4dfN-nzcM6OxM_FA5pA_OyQ,622
|
80
84
|
architect_py/grpc/models/Folio/AccountSummariesRequest.py,sha256=epYjLFc1cMblp04li_WSCIcl4bFJEjDedJNO9D2x1bg,1595
|
81
85
|
architect_py/grpc/models/Folio/AccountSummariesResponse.py,sha256=YoJddUl0TB1pkoI7C_avt94RSL9ZCf2u8_kOYpewRGI,678
|
82
|
-
architect_py/grpc/models/Folio/AccountSummary.py,sha256=
|
86
|
+
architect_py/grpc/models/Folio/AccountSummary.py,sha256=2upTyjDCpkxIXZ40DjUmZFaBBnmIbhF1htijOoCc2D4,3816
|
83
87
|
architect_py/grpc/models/Folio/AccountSummaryRequest.py,sha256=qu9f-liMEOqxq8LM2h9EosCj2vtTJwduUKjiwYO8GTo,1002
|
84
88
|
architect_py/grpc/models/Folio/HistoricalFillsRequest.py,sha256=ybd6vIO1xkiovUW9Q-Pl4K21kfmFX8uMOoE7LZqsOLU,2241
|
85
89
|
architect_py/grpc/models/Folio/HistoricalFillsResponse.py,sha256=MmHFvt-FuLgw93fHN8lfcyMsG2qHys1gUD0gq0QZGyM,775
|
@@ -90,16 +94,16 @@ architect_py/grpc/models/Health/HealthCheckRequest.py,sha256=uKxA8HbItw-MF-LfHk7
|
|
90
94
|
architect_py/grpc/models/Health/HealthCheckResponse.py,sha256=0yh75XgiyrJdNet4xx5_u7gyW6Qx8fwTPO9h6E_HVWU,755
|
91
95
|
architect_py/grpc/models/Health/__init__.py,sha256=sIyaEvJdP-VmGTGPPqZuRjKn4bc7NUClJ76Gd5uq-5s,57
|
92
96
|
architect_py/grpc/models/Marketdata/ArrayOfL1BookSnapshot.py,sha256=Os13kKncZgwoCqrorTspvcj8EO7u4Xr3fNQV8mWONFM,329
|
93
|
-
architect_py/grpc/models/Marketdata/Candle.py,sha256=
|
97
|
+
architect_py/grpc/models/Marketdata/Candle.py,sha256=GIidzpVm9CwxbkIS3cJiRB_WaWQ3vwoGr_g6dSaDl9I,8472
|
94
98
|
architect_py/grpc/models/Marketdata/HistoricalCandlesRequest.py,sha256=uJvsHOn2gXD9w4ybk1iXu4Z1LJ4g5g89y_DIwAMUChY,1587
|
95
99
|
architect_py/grpc/models/Marketdata/HistoricalCandlesResponse.py,sha256=_LGtTw6dVMtF0U6N7l68IbxDDMcooOEW7YsJaoLtniY,604
|
96
|
-
architect_py/grpc/models/Marketdata/L1BookSnapshot.py,sha256=
|
100
|
+
architect_py/grpc/models/Marketdata/L1BookSnapshot.py,sha256=tM-2KEhy3M8hxwfDpPLDmNYIh_cfblWZkRVk_A1k6Ww,3874
|
97
101
|
architect_py/grpc/models/Marketdata/L1BookSnapshotRequest.py,sha256=9TxfqAivsmZgmIuIemmX6A9bTvMvVU6rWYDGi86gZZg,1072
|
98
102
|
architect_py/grpc/models/Marketdata/L1BookSnapshotsRequest.py,sha256=TFGnuPfTcHMSO849WnEPj1a52RsVReAEWqQ9Fb3La1g,1189
|
99
|
-
architect_py/grpc/models/Marketdata/L2BookSnapshot.py,sha256=
|
103
|
+
architect_py/grpc/models/Marketdata/L2BookSnapshot.py,sha256=bvJJPfXMhS68J8M2U6Yb-yvLJuCLy_dUF_viG0udBWM,2785
|
100
104
|
architect_py/grpc/models/Marketdata/L2BookSnapshotRequest.py,sha256=9qRKbwY2KLtW2F-40XOvRfT73kVPTymL0Q3JCR2EbtU,1072
|
101
105
|
architect_py/grpc/models/Marketdata/L2BookUpdate.py,sha256=i-kWdJZvAoYEI280TfC3sTH46VIpMoj8N2UxWAkTDLs,2602
|
102
|
-
architect_py/grpc/models/Marketdata/Liquidation.py,sha256=
|
106
|
+
architect_py/grpc/models/Marketdata/Liquidation.py,sha256=QFco-zA3xUKstAbFkJ4qn_uluQ8XK6yDApvQULsSl3Y,2633
|
103
107
|
architect_py/grpc/models/Marketdata/MarketStatus.py,sha256=4Kt2z16t7dpjpiELWshJyyH1b-D07YdQchjGMvZkSRM,977
|
104
108
|
architect_py/grpc/models/Marketdata/MarketStatusRequest.py,sha256=ajyI4UlvFusyM0743dukT4KFZTlp9iUh0lTGWl6n7nw,1056
|
105
109
|
architect_py/grpc/models/Marketdata/SubscribeCandlesRequest.py,sha256=ck5pQx54uymlpR-jxFpxcW0LPDLU7R8GvqLqF-7GmoU,1508
|
@@ -110,12 +114,12 @@ architect_py/grpc/models/Marketdata/SubscribeLiquidationsRequest.py,sha256=6BhC4
|
|
110
114
|
architect_py/grpc/models/Marketdata/SubscribeManyCandlesRequest.py,sha256=pel2GGysDsJXjPY7rkyqqyGS3MPl13YezJS7apihiFc,1512
|
111
115
|
architect_py/grpc/models/Marketdata/SubscribeTickersRequest.py,sha256=7g2LBAYd97OJ9FrxpUvZKO7hSMng-K4KfnsN08O4XSM,1437
|
112
116
|
architect_py/grpc/models/Marketdata/SubscribeTradesRequest.py,sha256=7P8FyNx6wijNUBGry0vaMhaEKuG1ik8kTibJBvdol2k,1299
|
113
|
-
architect_py/grpc/models/Marketdata/Ticker.py,sha256=
|
117
|
+
architect_py/grpc/models/Marketdata/Ticker.py,sha256=ti8Z3HEePBGk66DUwgZjKMpBhHrimT_Rv4VYaC7f3rs,11805
|
114
118
|
architect_py/grpc/models/Marketdata/TickerRequest.py,sha256=Ay--5JKgCfdvlVWD2H6YSa_66NC3Dt6c-XK8JkbWhus,1008
|
115
119
|
architect_py/grpc/models/Marketdata/TickerUpdate.py,sha256=sJ4wvCeGckMV30HwAcAsEMQbCzjN31OxF19q70jdxok,437
|
116
120
|
architect_py/grpc/models/Marketdata/TickersRequest.py,sha256=x6UlQdAisnXgs3vbghQY3nuiFccSU3ueU0YJVAKaKUs,2359
|
117
121
|
architect_py/grpc/models/Marketdata/TickersResponse.py,sha256=CLzKx-ItwH9-Qq8YruFhXh7TmtHwzNRMEOPJ9LQD9co,574
|
118
|
-
architect_py/grpc/models/Marketdata/Trade.py,sha256=
|
122
|
+
architect_py/grpc/models/Marketdata/Trade.py,sha256=NZ-pM4MUNzQvq5RwYOS0_xgmDI17AxdM4t8NKdPnGu8,2689
|
119
123
|
architect_py/grpc/models/Marketdata/__init__.py,sha256=sIyaEvJdP-VmGTGPPqZuRjKn4bc7NUClJ76Gd5uq-5s,57
|
120
124
|
architect_py/grpc/models/Oms/Cancel.py,sha256=P550abgbBqVbC3UE7YaOaEytF__DsTYWsepNvkHaAQE,2357
|
121
125
|
architect_py/grpc/models/Oms/CancelAllOrdersRequest.py,sha256=oCRbluj6nyoDCHQszPDRIBt4ygFyO7QHZhCf8T8-fYM,1474
|
@@ -128,12 +132,18 @@ architect_py/grpc/models/Oms/PendingCancelsRequest.py,sha256=jdbBOpCHBlZFAZfF6ur
|
|
128
132
|
architect_py/grpc/models/Oms/PendingCancelsResponse.py,sha256=mWRNRDa489Vdg-r7dJMOmfOO8l57yg8lBMynBDcY60A,628
|
129
133
|
architect_py/grpc/models/Oms/PlaceOrderRequest.py,sha256=DDMkKgsqWVlMhUeidxTlVDHyNdeuPLu29PUwOTd0ijo,9320
|
130
134
|
architect_py/grpc/models/Oms/__init__.py,sha256=sIyaEvJdP-VmGTGPPqZuRjKn4bc7NUClJ76Gd5uq-5s,57
|
131
|
-
architect_py/grpc/models/OptionsMarketdata/OptionsChain.py,sha256=
|
132
|
-
architect_py/grpc/models/OptionsMarketdata/OptionsChainGreeks.py,sha256=
|
133
|
-
architect_py/grpc/models/OptionsMarketdata/OptionsChainGreeksRequest.py,sha256=
|
134
|
-
architect_py/grpc/models/OptionsMarketdata/OptionsChainRequest.py,sha256=
|
135
|
-
architect_py/grpc/models/OptionsMarketdata/
|
136
|
-
architect_py/grpc/models/OptionsMarketdata/
|
135
|
+
architect_py/grpc/models/OptionsMarketdata/OptionsChain.py,sha256=r9vvRUjxNaWz1fIn2ysTQ7A6tLVfetCLuQfrBLqWZY8,702
|
136
|
+
architect_py/grpc/models/OptionsMarketdata/OptionsChainGreeks.py,sha256=Nkn6dgzQAjU6ADgb-yUGDDn_oeD_pj82mV-KBvtwYMM,708
|
137
|
+
architect_py/grpc/models/OptionsMarketdata/OptionsChainGreeksRequest.py,sha256=uhJ4mSniTdyaC5KkrltIVu0BzMFrBu5qTzIIiOY5Lhs,1275
|
138
|
+
architect_py/grpc/models/OptionsMarketdata/OptionsChainRequest.py,sha256=iHbFPyhQMeW92Thcp_zU9ycI3rf4J62YktHfj_pC6hU,1218
|
139
|
+
architect_py/grpc/models/OptionsMarketdata/OptionsContract.py,sha256=umqW3PZV5jj5oNxtNxP3AV5r4iCNJWf5RVZ5bC-CrAg,1228
|
140
|
+
architect_py/grpc/models/OptionsMarketdata/OptionsContractGreeksRequest.py,sha256=lBGX7qJGCrpVffHrRLid40BkvL_adK7R0EHwuH2vtWo,1031
|
141
|
+
architect_py/grpc/models/OptionsMarketdata/OptionsContractRequest.py,sha256=LvrzB4nzkqncNGw2srSoWLw7STFvsZpl6EBd5_5Ilag,1015
|
142
|
+
architect_py/grpc/models/OptionsMarketdata/OptionsExpirations.py,sha256=zNnkv5n7sv57HOGmonf5K32aUE_GSBT_fOOZj1JkIcg,770
|
143
|
+
architect_py/grpc/models/OptionsMarketdata/OptionsExpirationsRequest.py,sha256=KDy9y_ibfzJndz8ZRYvxTcTP7bsgBBJyWeWaqTJMc4w,1173
|
144
|
+
architect_py/grpc/models/OptionsMarketdata/OptionsGreeks.py,sha256=Po3KRAtw7l8BwH1-HNs28vq8vMRaX_ekHN-SgfEXzp8,1541
|
145
|
+
architect_py/grpc/models/OptionsMarketdata/OptionsWraps.py,sha256=24ik_f_CQVv8tRohAd-XDyOllXftCByw9erprnkN-zE,626
|
146
|
+
architect_py/grpc/models/OptionsMarketdata/OptionsWrapsRequest.py,sha256=anfBQxFEtEIYehr7ektSZVUKH7ZyNeLPD6yt9nTp3p0,961
|
137
147
|
architect_py/grpc/models/OptionsMarketdata/__init__.py,sha256=sIyaEvJdP-VmGTGPPqZuRjKn4bc7NUClJ76Gd5uq-5s,57
|
138
148
|
architect_py/grpc/models/Orderflow/Dropcopy.py,sha256=hjcGXX1V-pWJNjirLW2a2-oLbb9WUw_h1nhFh-hPthM,621
|
139
149
|
architect_py/grpc/models/Orderflow/DropcopyRequest.py,sha256=LPJgD2wj4a7p1s8O32q6w7lU_pm4I2lqriPdLqyimUM,1831
|
@@ -163,43 +173,44 @@ architect_py/tests/conftest.py,sha256=XCeq44muZi6i9CxOe9lH7rCmt5pQViWJ_25gSowrLP
|
|
163
173
|
architect_py/tests/test_book_building.py,sha256=biqs8X9bw1YSb6mrCDS-ELesdD-P5F6bE3MYXP0BeQ4,1236
|
164
174
|
architect_py/tests/test_encoding.py,sha256=J61Lk2CDIqgdcsj0-KYBZweYh5EQ4XAXsRyM0fdMqfU,1085
|
165
175
|
architect_py/tests/test_marketdata.py,sha256=W26OrL51ONAclBjBcm7trS1QPXtLLjdgnsbDR2kqtIw,4963
|
166
|
-
architect_py/tests/test_order_entry.py,sha256=
|
176
|
+
architect_py/tests/test_order_entry.py,sha256=Jhot92d8nOg7gq-W99hKlABIBBbFJ7OIYSGYyiogfto,5069
|
167
177
|
architect_py/tests/test_orderflow.py,sha256=b4iohhs7YUoJMevlUfLQyIoVqjam7pl0BPs0dSfZhqM,3951
|
168
178
|
architect_py/tests/test_portfolio_management.py,sha256=Q4pburTDJ53hrq2_aRbNAOG3nwbCEsgZQGbI_AMHLxE,709
|
169
|
-
architect_py/tests/
|
179
|
+
architect_py/tests/test_positions.py,sha256=fXtFs9xYJoS_BIRBfq4V_DZDYq3zANLfEQS0jY_EiEo,12551
|
180
|
+
architect_py/tests/test_rounding.py,sha256=qjuPIdX6TbfPtfrzotZx6-Aodf4et7j3AswgQ7DQtm4,1363
|
170
181
|
architect_py/tests/test_symbology.py,sha256=74fbUgoycuViMHHnurE2Dnfao75wWu_cmQMyU5XQcdY,3436
|
171
182
|
architect_py/tests/test_sync_client.py,sha256=teaHrp-CMpKIDsGPdnyxvmuW_a3hgFftnsnPsFHz9Tw,946
|
172
183
|
architect_py/utils/nearest_tick.py,sha256=i1cCGMSi-sP4Grbp0RCwEsoLzMWN9iC6gPMBm2daDWM,4810
|
173
184
|
architect_py/utils/nearest_tick_2.py,sha256=f-o6b73Mo8epCIaOYBS9F0k_6UHUDSVG1N_VWg7iFBU,3641
|
174
185
|
architect_py/utils/orderbook.py,sha256=JM02NhHbmK3sNaS2Ara8FBY4TvKvtMIzJW1oVd8KC3s,1004
|
175
|
-
architect_py/utils/pandas.py,sha256=
|
186
|
+
architect_py/utils/pandas.py,sha256=Jyiimf6Y5FbTLotUhSIgOnRHMGz7ZvAqNSCHEwZ9eQU,2599
|
176
187
|
architect_py/utils/price_bands.py,sha256=j7ioSA3dx025CD5E2Vg7XQvmjPvxQb-gzQBfQTovpTw,21874
|
177
188
|
architect_py/utils/symbol_parsing.py,sha256=OjJzk2c6QU2s0aJMSyVEzlWD5Vy-RlakJVW7jNHVDJk,845
|
178
|
-
architect_py-5.1.
|
189
|
+
architect_py-5.1.6.dist-info/licenses/LICENSE,sha256=6P0_5gYN8iPWPZeqA9nxiO3tRQmcSA1ijAVR7C8j1SI,11362
|
179
190
|
examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
180
191
|
examples/book_subscription.py,sha256=1WFQN_QCE8cRS_CIv2k0NxqpK37fA9-Ja2Kfxs8vsb8,1461
|
181
192
|
examples/candles.py,sha256=T71TsxbfXCT6mrJZmTgdTKesJFdQhYP_4AsiNK-8KyQ,756
|
182
193
|
examples/config.py,sha256=rv6x7QYJO6ckvpRcwghyJbkL_lTBPnK0u6nKgkYTvxQ,1858
|
183
|
-
examples/external_cpty.py,sha256=
|
184
|
-
examples/funding_rate_mean_reversion_algo.py,sha256=
|
185
|
-
examples/order_sending.py,sha256=
|
186
|
-
examples/orderflow_channel.py,sha256=
|
194
|
+
examples/external_cpty.py,sha256=x2VzR6Z14NqYku4l75o0hTvkAsOMUTtRWL37XUjJQyY,2576
|
195
|
+
examples/funding_rate_mean_reversion_algo.py,sha256=ZAr16v_sP2egcRx1jzl2DxKa66XTgopl8ot30rDx4gc,5650
|
196
|
+
examples/order_sending.py,sha256=kHeXPDyWSjakGYT6ldO8aCw02Kzh6WG_bdHzeAUBUyE,3302
|
197
|
+
examples/orderflow_channel.py,sha256=nAvF1T12wpm2pDvdCQ2QtLWGQiBv3_uBSi97CfC0AzY,2270
|
187
198
|
examples/orderflow_streaming.py,sha256=BtVwCYWBCpytaAFN9u2WPgGCugyNMsGa6nA1dPWuVLs,1300
|
188
|
-
examples/stream_l1_marketdata.py,sha256=
|
189
|
-
examples/stream_l2_marketdata.py,sha256=
|
199
|
+
examples/stream_l1_marketdata.py,sha256=Ojbk0q7A2daPnwqTWSypVoLep9B_eumXuwEH4PbA-fA,781
|
200
|
+
examples/stream_l2_marketdata.py,sha256=lVZsLUJYAPYUpp0voryye2WFZkCzYWVLfb-T4XQ0_Bs,1144
|
190
201
|
examples/termutils.py,sha256=ZZrky5Ftn4UoLPKGffGvUl1Z8CtvDoNjEtUH4S1a_KY,1133
|
191
202
|
examples/trades.py,sha256=0OzWQVTuIrC0KlisY0Tc-3pmWNP0m0-eCSntCV6Qdh8,561
|
192
|
-
examples/tutorial_async.py,sha256=
|
193
|
-
examples/tutorial_sync.py,sha256=
|
203
|
+
examples/tutorial_async.py,sha256=CB_VOOqeYp4Q9vJpmtZeaalQdLgm8yfFu9309P1QnX8,2684
|
204
|
+
examples/tutorial_sync.py,sha256=SAUhpR8z1sqjs6q7sse7X0trjdS3-SqhHyrIutcWRsY,2889
|
194
205
|
scripts/add_imports_to_inits.py,sha256=bryhz6RpKAJsSieVMnXnRyLp8evNkpOsNUkBUPkk1WQ,4518
|
195
206
|
scripts/correct_sync_interface.py,sha256=gTSJLDAT8s-ayN_JqgKbeM6c3DYZOapduS_GIqrvD-A,4134
|
196
|
-
scripts/generate_functions_md.py,sha256
|
207
|
+
scripts/generate_functions_md.py,sha256=X0eS3Htbn3V15qJb6kT19bVHDZaUSGOzXi38k7dazDQ,6261
|
197
208
|
scripts/postprocess_grpc.py,sha256=1A8HCMG3aBAJaORlBTaYyADow8LOcm2EVeRm0xlF0Gc,23606
|
198
209
|
scripts/preprocess_grpc_schema.py,sha256=p9LdoMZzixBSsVx7Dy3_8uJzOy_QwCoVMkAABQKUsBA,22894
|
199
210
|
scripts/prune_graphql_schema.py,sha256=hmfw5FD_iKGKMFkq6H1neZiXXtljFFrOwi2fiusTWE4,6210
|
200
211
|
templates/exceptions.py,sha256=tIHbiO5Q114h9nPwJXsgHvW_bERLwxuNp9Oj41p6t3A,2379
|
201
212
|
templates/juniper_base_client.py,sha256=B8QF4IFSwqBK5UY2aFPbSdYnX9bcwnlxLK4ojPRaW0E,12705
|
202
|
-
architect_py-5.1.
|
203
|
-
architect_py-5.1.
|
204
|
-
architect_py-5.1.
|
205
|
-
architect_py-5.1.
|
213
|
+
architect_py-5.1.6.dist-info/METADATA,sha256=ALcL23Bc3hkkg7Cf6T4cXSUng_ADZ1CCKjTUJv-DQeA,2638
|
214
|
+
architect_py-5.1.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
215
|
+
architect_py-5.1.6.dist-info/top_level.txt,sha256=UjtO97OACFQ9z5MzS-X2wBlt5Ovk1vxakQPKfokI454,40
|
216
|
+
architect_py-5.1.6.dist-info/RECORD,,
|
examples/external_cpty.py
CHANGED
@@ -58,7 +58,8 @@ class MockCptyServicer(CptyServicer, OrderflowServicer):
|
|
58
58
|
def SubscribeOrderflow(self, request, context):
|
59
59
|
context.set_code(grpc.StatusCode.OK)
|
60
60
|
context.send_initial_metadata({})
|
61
|
-
|
61
|
+
print("client subscribed to orderflow")
|
62
|
+
time.sleep(1000)
|
62
63
|
|
63
64
|
|
64
65
|
def serve():
|
@@ -151,14 +151,14 @@ async def print_info(c: AsyncClient):
|
|
151
151
|
async def main():
|
152
152
|
c = await connect_async_client()
|
153
153
|
|
154
|
-
|
155
|
-
await
|
154
|
+
orderflow_channel = await c.orderflow()
|
155
|
+
await orderflow_channel.start()
|
156
156
|
|
157
157
|
await asyncio.gather(
|
158
158
|
update_marketdata(c),
|
159
|
-
step_to_target_position(c,
|
159
|
+
step_to_target_position(c, orderflow_channel),
|
160
160
|
print_info(c),
|
161
|
-
subscribe_and_print_orderflow(c,
|
161
|
+
subscribe_and_print_orderflow(c, orderflow_channel),
|
162
162
|
)
|
163
163
|
await c.close()
|
164
164
|
|
examples/order_sending.py
CHANGED
@@ -22,7 +22,7 @@ async def search_symbol(c: AsyncClient) -> tuple[str, TradableProduct]:
|
|
22
22
|
async def test_send_order(client: AsyncClient, account: str):
|
23
23
|
venue, symbol = await search_symbol(client)
|
24
24
|
|
25
|
-
snapshot = await client.
|
25
|
+
snapshot = await client.get_l1_book_snapshot(symbol=symbol, venue=venue)
|
26
26
|
if snapshot is None:
|
27
27
|
return ValueError(f"Market snapshot for {symbol} is None")
|
28
28
|
|
@@ -34,7 +34,7 @@ async def test_send_order(client: AsyncClient, account: str):
|
|
34
34
|
d = datetime.now(tz=timezone.utc) + timedelta(days=1)
|
35
35
|
gtd = TimeInForce.GTD(d)
|
36
36
|
|
37
|
-
order = await client.
|
37
|
+
order = await client.place_order(
|
38
38
|
symbol=symbol,
|
39
39
|
dir=OrderDir.BUY,
|
40
40
|
quantity=best_bid_quantity,
|
@@ -82,7 +82,7 @@ async def send_NQ_buy_for_mid(client: AsyncClient, account: str):
|
|
82
82
|
if snapshot is None or snapshot.best_ask is None or snapshot.best_bid is None:
|
83
83
|
return ValueError(f"Market snapshot for {NQ_lead_future} is None")
|
84
84
|
|
85
|
-
order = await client.
|
85
|
+
order = await client.place_order(
|
86
86
|
symbol=NQ_lead_future,
|
87
87
|
dir=OrderDir.BUY,
|
88
88
|
quantity=Decimal(1),
|
examples/orderflow_channel.py
CHANGED
@@ -1,56 +1,75 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
#
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
1
|
+
"""
|
2
|
+
Example of using a bidirectional orderflow channel with the Architect OEMS.
|
3
|
+
|
4
|
+
This connection style is ~equivalent to having a websocket.
|
5
|
+
|
6
|
+
This code example sends a series of orders to Architect while concurrently
|
7
|
+
listening to orderflow events. Compare to `examples/orderflow_streaming.py`,
|
8
|
+
which accomplishes the same thing but using a separate asyncio task.
|
9
|
+
|
10
|
+
|
11
|
+
See funding_rate_mean_reversion_algo.py for a more complete example of
|
12
|
+
using the orderflow channel to implement a trading strategy.
|
13
|
+
"""
|
14
|
+
|
15
|
+
import asyncio
|
16
|
+
from decimal import Decimal
|
17
|
+
|
18
|
+
from architect_py import (
|
19
|
+
AsyncClient,
|
20
|
+
OrderDir,
|
21
|
+
OrderType,
|
22
|
+
TimeInForce,
|
23
|
+
)
|
24
|
+
from architect_py.grpc.orderflow import OrderflowChannel, PlaceOrder
|
25
|
+
|
26
|
+
from .config import connect_async_client
|
27
|
+
|
28
|
+
|
29
|
+
async def send_orders(client: AsyncClient, orderflow_channel: OrderflowChannel):
|
30
|
+
symbol = await client.get_front_future("ES CME Futures")
|
31
|
+
print(f"symbol={symbol}")
|
32
|
+
|
33
|
+
while True:
|
34
|
+
await asyncio.sleep(1)
|
35
|
+
snap = await client.get_l1_book_snapshot(symbol, "CME")
|
36
|
+
if snap.best_ask is not None:
|
37
|
+
limit_price = snap.best_ask[0]
|
38
|
+
print(f"\nPlacing buy order at {limit_price}\n")
|
39
|
+
try:
|
40
|
+
# can also CancelOrder
|
41
|
+
req = PlaceOrder.new(
|
42
|
+
symbol=symbol,
|
43
|
+
execution_venue="CME",
|
44
|
+
dir=OrderDir.BUY,
|
45
|
+
quantity=Decimal(1),
|
46
|
+
limit_price=limit_price,
|
47
|
+
post_only=True,
|
48
|
+
time_in_force=TimeInForce.DAY,
|
49
|
+
order_type=OrderType.LIMIT,
|
50
|
+
)
|
51
|
+
print(f"req={req}")
|
52
|
+
await orderflow_channel.send(req)
|
53
|
+
except Exception as e:
|
54
|
+
print(f"Error placing order: {e}")
|
55
|
+
else:
|
56
|
+
print("\nNo ask price from snapshot, doing nothing\n")
|
57
|
+
|
58
|
+
|
59
|
+
async def read_events(orderflow_channel: OrderflowChannel):
|
60
|
+
async for event in orderflow_channel:
|
61
|
+
print(f" --> {event}")
|
62
|
+
|
63
|
+
|
64
|
+
async def main():
|
65
|
+
client = await connect_async_client()
|
66
|
+
|
67
|
+
orderflow_channel = await client.orderflow()
|
68
|
+
|
69
|
+
await asyncio.gather(
|
70
|
+
send_orders(client, orderflow_channel),
|
71
|
+
read_events(orderflow_channel),
|
72
|
+
)
|
73
|
+
|
74
|
+
|
75
|
+
asyncio.run(main())
|
examples/stream_l1_marketdata.py
CHANGED
@@ -8,8 +8,10 @@ from .config import connect_async_client
|
|
8
8
|
async def main():
|
9
9
|
c: AsyncClient = await connect_async_client()
|
10
10
|
|
11
|
+
ES_front_future = await c.get_front_future("ES CME Futures")
|
12
|
+
|
11
13
|
async for snap in c.stream_l1_book_snapshots(
|
12
|
-
symbols=[TradableProduct(
|
14
|
+
symbols=[TradableProduct(ES_front_future)],
|
13
15
|
venue="CME",
|
14
16
|
):
|
15
17
|
best_bid_s = "<no bid>"
|
examples/stream_l2_marketdata.py
CHANGED
@@ -29,7 +29,9 @@ async def print_l2_book(c: AsyncClient, symbol: TradableProduct, venue: str):
|
|
29
29
|
|
30
30
|
async def main():
|
31
31
|
c: AsyncClient = await connect_async_client()
|
32
|
-
|
32
|
+
|
33
|
+
ES_front_future = await c.get_front_future("ES CME Futures")
|
34
|
+
market_symbol = TradableProduct(ES_front_future)
|
33
35
|
venue = "CME"
|
34
36
|
await print_l2_book(c, market_symbol, venue=venue)
|
35
37
|
|
examples/tutorial_async.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import asyncio
|
2
2
|
from decimal import Decimal
|
3
3
|
|
4
|
-
from architect_py import OrderDir, OrderStatus, TradableProduct
|
4
|
+
from architect_py import OrderDir, OrderStatus, OrderType, TradableProduct
|
5
5
|
|
6
6
|
from .config import connect_async_client
|
7
7
|
|
@@ -47,10 +47,11 @@ async def main():
|
|
47
47
|
)
|
48
48
|
== "y"
|
49
49
|
):
|
50
|
-
order = await c.
|
50
|
+
order = await c.place_order(
|
51
51
|
symbol=market,
|
52
52
|
execution_venue=execution_venue,
|
53
53
|
dir=OrderDir.BUY,
|
54
|
+
order_type=OrderType.LIMIT,
|
54
55
|
quantity=quantity,
|
55
56
|
limit_price=limit_price,
|
56
57
|
account=str(account_id),
|
examples/tutorial_sync.py
CHANGED
@@ -2,7 +2,7 @@ import pprint
|
|
2
2
|
import time
|
3
3
|
from decimal import Decimal
|
4
4
|
|
5
|
-
from architect_py import OrderDir, OrderStatus
|
5
|
+
from architect_py import OrderDir, OrderStatus, OrderType
|
6
6
|
from architect_py.utils.nearest_tick import TickRoundMethod
|
7
7
|
|
8
8
|
from .config import connect_client
|
@@ -32,7 +32,7 @@ pprint.pp(product_info)
|
|
32
32
|
# and other ticker info for the given symbol.
|
33
33
|
# this function is an alias for get_l1_book_snapshot
|
34
34
|
print(f"\nMarket snapshot for {product_info.symbol}:")
|
35
|
-
market_snapshot = c.
|
35
|
+
market_snapshot = c.get_l1_book_snapshot(symbol=symbol, venue=venue)
|
36
36
|
|
37
37
|
pprint.pp(market_snapshot)
|
38
38
|
|
@@ -66,10 +66,11 @@ order = None
|
|
66
66
|
if confirm(
|
67
67
|
f"Place a limit order to BUY 1 {symbol} LIMIT {limit_price} on account {account.account.name}?"
|
68
68
|
):
|
69
|
-
order = c.
|
69
|
+
order = c.place_order(
|
70
70
|
symbol=symbol,
|
71
71
|
execution_venue=venue,
|
72
72
|
dir=OrderDir.BUY,
|
73
|
+
order_type=OrderType.LIMIT,
|
73
74
|
quantity=best_bid_quantity,
|
74
75
|
limit_price=limit_price,
|
75
76
|
account=account.account.name,
|
scripts/generate_functions_md.py
CHANGED
@@ -129,6 +129,7 @@ def main(filename):
|
|
129
129
|
)
|
130
130
|
# Alternatively, sort by section name alphabetically:
|
131
131
|
# sorted_sections = sorted(grouped.items())
|
132
|
+
print("# Client Methods")
|
132
133
|
for section, funcs in sorted_sections:
|
133
134
|
emoji = emoji_dict.get(section, "")
|
134
135
|
if emoji == "":
|
@@ -138,7 +139,7 @@ def main(filename):
|
|
138
139
|
# Sort functions by their line number
|
139
140
|
for name, summary, lineno in sorted(funcs, key=lambda x: x[2]):
|
140
141
|
# Exclude private methods
|
141
|
-
if name.startswith("
|
142
|
+
if name.startswith("_"):
|
142
143
|
continue
|
143
144
|
# Only output if summary is non-empty
|
144
145
|
if summary:
|
File without changes
|
File without changes
|
File without changes
|