nautilus_ibapi 10.37.2__tar.gz

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.
Files changed (58) hide show
  1. nautilus_ibapi-10.37.2/PKG-INFO +191 -0
  2. nautilus_ibapi-10.37.2/README.md +173 -0
  3. nautilus_ibapi-10.37.2/ibapi/__init__.py +16 -0
  4. nautilus_ibapi-10.37.2/ibapi/account_summary_tags.py +70 -0
  5. nautilus_ibapi-10.37.2/ibapi/client.py +4891 -0
  6. nautilus_ibapi-10.37.2/ibapi/client_utils.py +412 -0
  7. nautilus_ibapi-10.37.2/ibapi/comm.py +100 -0
  8. nautilus_ibapi-10.37.2/ibapi/commission_and_fees_report.py +31 -0
  9. nautilus_ibapi-10.37.2/ibapi/commission_report.py +31 -0
  10. nautilus_ibapi-10.37.2/ibapi/common.py +315 -0
  11. nautilus_ibapi-10.37.2/ibapi/connection.py +126 -0
  12. nautilus_ibapi-10.37.2/ibapi/const.py +12 -0
  13. nautilus_ibapi-10.37.2/ibapi/contract.py +265 -0
  14. nautilus_ibapi-10.37.2/ibapi/decoder.py +1711 -0
  15. nautilus_ibapi-10.37.2/ibapi/decoder_utils.py +420 -0
  16. nautilus_ibapi-10.37.2/ibapi/enum_implem.py +20 -0
  17. nautilus_ibapi-10.37.2/ibapi/errors.py +43 -0
  18. nautilus_ibapi-10.37.2/ibapi/execution.py +95 -0
  19. nautilus_ibapi-10.37.2/ibapi/ibapi.pyproj +56 -0
  20. nautilus_ibapi-10.37.2/ibapi/ineligibility_reason.py +18 -0
  21. nautilus_ibapi-10.37.2/ibapi/message.py +186 -0
  22. nautilus_ibapi-10.37.2/ibapi/news.py +13 -0
  23. nautilus_ibapi-10.37.2/ibapi/object_implem.py +12 -0
  24. nautilus_ibapi-10.37.2/ibapi/order.py +263 -0
  25. nautilus_ibapi-10.37.2/ibapi/order_cancel.py +21 -0
  26. nautilus_ibapi-10.37.2/ibapi/order_condition.py +289 -0
  27. nautilus_ibapi-10.37.2/ibapi/order_state.py +117 -0
  28. nautilus_ibapi-10.37.2/ibapi/orderdecoder.py +539 -0
  29. nautilus_ibapi-10.37.2/ibapi/protobuf/CancelOrderRequest_pb2.py +38 -0
  30. nautilus_ibapi-10.37.2/ibapi/protobuf/ComboLeg_pb2.py +37 -0
  31. nautilus_ibapi-10.37.2/ibapi/protobuf/Contract_pb2.py +39 -0
  32. nautilus_ibapi-10.37.2/ibapi/protobuf/DeltaNeutralContract_pb2.py +37 -0
  33. nautilus_ibapi-10.37.2/ibapi/protobuf/ErrorMessage_pb2.py +37 -0
  34. nautilus_ibapi-10.37.2/ibapi/protobuf/ExecutionDetailsEnd_pb2.py +37 -0
  35. nautilus_ibapi-10.37.2/ibapi/protobuf/ExecutionDetails_pb2.py +39 -0
  36. nautilus_ibapi-10.37.2/ibapi/protobuf/ExecutionFilter_pb2.py +37 -0
  37. nautilus_ibapi-10.37.2/ibapi/protobuf/ExecutionRequest_pb2.py +38 -0
  38. nautilus_ibapi-10.37.2/ibapi/protobuf/Execution_pb2.py +37 -0
  39. nautilus_ibapi-10.37.2/ibapi/protobuf/GlobalCancelRequest_pb2.py +38 -0
  40. nautilus_ibapi-10.37.2/ibapi/protobuf/OpenOrder_pb2.py +40 -0
  41. nautilus_ibapi-10.37.2/ibapi/protobuf/OpenOrdersEnd_pb2.py +37 -0
  42. nautilus_ibapi-10.37.2/ibapi/protobuf/OrderAllocation_pb2.py +37 -0
  43. nautilus_ibapi-10.37.2/ibapi/protobuf/OrderCancel_pb2.py +37 -0
  44. nautilus_ibapi-10.37.2/ibapi/protobuf/OrderCondition_pb2.py +37 -0
  45. nautilus_ibapi-10.37.2/ibapi/protobuf/OrderState_pb2.py +38 -0
  46. nautilus_ibapi-10.37.2/ibapi/protobuf/OrderStatus_pb2.py +37 -0
  47. nautilus_ibapi-10.37.2/ibapi/protobuf/Order_pb2.py +51 -0
  48. nautilus_ibapi-10.37.2/ibapi/protobuf/PlaceOrderRequest_pb2.py +39 -0
  49. nautilus_ibapi-10.37.2/ibapi/protobuf/SoftDollarTier_pb2.py +37 -0
  50. nautilus_ibapi-10.37.2/ibapi/reader.py +49 -0
  51. nautilus_ibapi-10.37.2/ibapi/scanner.py +77 -0
  52. nautilus_ibapi-10.37.2/ibapi/server_versions.py +159 -0
  53. nautilus_ibapi-10.37.2/ibapi/softdollartier.py +16 -0
  54. nautilus_ibapi-10.37.2/ibapi/tag_value.py +22 -0
  55. nautilus_ibapi-10.37.2/ibapi/ticktype.py +117 -0
  56. nautilus_ibapi-10.37.2/ibapi/utils.py +233 -0
  57. nautilus_ibapi-10.37.2/ibapi/wrapper.py +885 -0
  58. nautilus_ibapi-10.37.2/pyproject.toml +17 -0
@@ -0,0 +1,191 @@
1
+ Metadata-Version: 2.3
2
+ Name: nautilus_ibapi
3
+ Version: 10.37.2
4
+ Summary: Python IB API
5
+ License: IB API Non-Commercial License or the IB API Commercial License
6
+ Author: IBG LLC
7
+ Author-email: dnastase@interactivebrokers.com
8
+ Requires-Python: >=3.9
9
+ Classifier: License :: Other/Proprietary License
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.9
12
+ Classifier: Programming Language :: Python :: 3.10
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Project-URL: Repository, https://interactivebrokers.github.io/tws-api
17
+ Description-Content-Type: text/markdown
18
+
19
+ **Installation Guide for TWS API Library**
20
+
21
+ This guide provides step-by-step instructions for setting up the TWS API library, including creating virtual environments using both Anaconda and standard Python, building distributions, and testing the installation.
22
+
23
+ *Please see Understanding Code Organization and Functionality section at the bottom for an explanation of the key terms, conventions, and code organization used.*
24
+
25
+ Step 1: Clone the TWS API repository and set up a virtual environment:
26
+
27
+ - Open a terminal or Anaconda prompt on your Windows laptop.
28
+ - Change to the directory where you want to store the TWS API repository.
29
+ - Clone the TWS API repository from GitHub using git:
30
+
31
+ ```bash
32
+ git clone https://github.com/your_username/tws-api.git
33
+ ```
34
+
35
+ Replace `your_username` with your actual GitHub username.
36
+
37
+ Step 2: Create a new Python virtual environment (using Anaconda):
38
+
39
+ - First, ensure you are within the '\tws-api\source\pythonclient' folder inside the "tws-api" repository:
40
+
41
+ ```Anaconda Prompt
42
+ cd tws-api/source/pythonclient
43
+ ```
44
+
45
+ - Create a new Python virtual environment using Anaconda:
46
+
47
+ ```Anaconda Prompt
48
+ conda create -n tws_env python=3.9
49
+ ```
50
+
51
+ Replace `tws_env` with your desired environment name. Here, we are using Python 3.9 as an example, but you can choose another Python version if needed.
52
+
53
+ - *Alternative: Create a new Python virtual environment without Anaconda:*
54
+
55
+ ```bash
56
+ python3 -m venv tws_env
57
+ ```
58
+
59
+ Replace `tws_env` with your desired environment name.
60
+
61
+ Step 3: Activate the virtual environment:
62
+
63
+ - Activate the newly created virtual environment:
64
+
65
+ ```Anaconda Prompt
66
+ conda activate tws_env
67
+ ```
68
+
69
+ - *Alternative: Activate the virtual environment without Anaconda:*
70
+
71
+ ```bash
72
+ source tws_env/bin/activate
73
+ ```
74
+
75
+ Step 4: Install the TWS API library:
76
+
77
+ - Build the source distribution:
78
+
79
+ ```Anaconda Prompt
80
+ python setup.py sdist
81
+ ```
82
+
83
+ - Build the wheel distribution:
84
+
85
+ ```Anaconda Prompt
86
+ python setup.py bdist_wheel
87
+ ```
88
+
89
+ - Retrieve the wheel distribution file name from the dist folder under the tws-api/source/pythonclient folder:
90
+
91
+ For instance, if the wheel distribution file name is `ibapi-9.76.1-py3-none-any.whl`
92
+
93
+ - Install the wheel distribution using `pip` with the `--user` flag using the following command:
94
+
95
+ ```Anaconda Prompt
96
+ python3 -m pip install --user --upgrade dist/ibapi-9.76.1-py3-none-any.whl
97
+ ```
98
+
99
+ Step 5: Create a new Jupyter kernel with the virtual environment:
100
+
101
+ - Install Jupyter if you haven't already (skip this step if you have Jupyter installed):
102
+
103
+ ```Anaconda Prompt
104
+ conda install jupyter
105
+ ```
106
+
107
+ - Install the ipykernel package to enable creating a Jupyter kernel for the virtual environment:
108
+
109
+ ```Anaconda Prompt
110
+ conda install ipykernel
111
+ ```
112
+
113
+ - Create a new Jupyter kernel for the virtual environment:
114
+
115
+ ```Anaconda Prompt
116
+ python -m ipykernel install --user --name tws_env --display-name "TWS Environment"
117
+ ```
118
+
119
+ Replace `tws_env` with the same environment name used in Step 2.
120
+
121
+ Step 6: Open Jupyter Notebook and select the new kernel:
122
+
123
+ - Launch Jupyter Notebook:
124
+
125
+ ```Anaconda Prompt
126
+ jupyter notebook
127
+ ```
128
+
129
+ Step 7: Create a new Jupyter Notebook and test the TWS API library installed:
130
+
131
+ - In the Jupyter Notebook interface, create a new notebook by clicking on "New" and then selecting "TWS Environment" from the list of available kernels.
132
+
133
+ - Run the following code in the first cell of the notebook to test the TWS API library:
134
+ ```
135
+ import ibapi
136
+
137
+ print("TWS API version:", ibapi.__version__)
138
+ ```
139
+ Congratulations, now you have a new Jupyter Notebook with the TWS API library installed in the virtual environment, and you can start coding and testing your trading strategies using the TWS API.
140
+
141
+
142
+
143
+ **Understanding Code Organization and Functionality**
144
+
145
+ This section provides insights into how the TWS API library is structured, how messages are received and sent, and how to interact with the Wrapper class for handling incoming messages. Understanding these concepts will help you effectively utilize the TWS API for your trading automation needs.
146
+
147
+ A couple of things/definitions/conventions:
148
+ * a *low level message* is some data prefixed with its size
149
+ * a *high level message* is a list of fields separated by the NULL character; the fields are all strings; the message ID is the first field, the come others whose number and semantics depend on the message itself
150
+ * a *request* is a message from client to TWS/IBGW (IB Gateway)
151
+ * an *answer* is a message from TWS/IBGW to client
152
+
153
+
154
+ How the code is organized:
155
+ * *comm* module: has tools that know how to handle (eg: encode/decode) low and high level messages
156
+ * *Connection*: glorified socket
157
+ * *Reader*: thread that uses Connection to read packets, transform to low level messages and put in a Queue
158
+ * *Decoder*: knows how to take a low level message and decode into high level message
159
+ * *Client*:
160
+ + knows to send requests
161
+ + has the message loop which takes low level messages from Queue and uses Decoder to transform into high level message with which it then calls the corresponding Wrapper method
162
+ * *Wrapper*: class that needs to be subclassed by the user so that it can get the incoming messages
163
+
164
+
165
+ The info/data flow is:
166
+
167
+ * receiving:
168
+ + *Connection.recv_msg()* (which is essentially a socket) receives the packets
169
+ - uses *Connection._recv_all_msgs()* which tries to combine smaller packets into bigger ones based on some trivial heuristic
170
+ + *Reader.run()* uses *Connection.recv_msg()* to get a packet and then uses *comm.read_msg()* to try to make it a low level message. If that can't be done yet (size prefix says so) then it waits for more packets
171
+ + if a full low level message is received then it is placed in the Queue (remember this is a standalone thread)
172
+ + the main thread runs the *Client.run()* loop which:
173
+ - gets a low level message from Queue
174
+ - uses *comm.py* to translate into high level message (fields)
175
+ - uses *Decoder.interpret()* to act based on that message
176
+ + *Decoder.interpret()* will translate the fields into function parameters of the correct type and call with the correct/corresponding method of *Wrapper* class
177
+
178
+ * sending:
179
+ + *Client* class has methods that implement the _requests_. The user will call those request methods with the needed parameters and *Client* will send them to the TWS/IBGW.
180
+
181
+
182
+ Implementation notes:
183
+
184
+ * the *Decoder* has two ways of handling a message (essentially decoding the fields)
185
+ + some message very neatly map to a function call; meaning that the number of fields and order are the same as the method parameters. For example: Wrapper.tickSize(). In this case a simple mapping is made between the incoming msg id and the Wrapper method:
186
+
187
+ IN.TICK_SIZE: HandleInfo(wrap=Wrapper.tickSize),
188
+
189
+ + other messages are more complex, depend on version number heavily or need field massaging. In this case the incoming message id is mapped to a processing function that will do all that and call the Wrapper method at the end. For example:
190
+
191
+ IN.TICK_PRICE: HandleInfo(proc=processTickPriceMsg),
@@ -0,0 +1,173 @@
1
+ **Installation Guide for TWS API Library**
2
+
3
+ This guide provides step-by-step instructions for setting up the TWS API library, including creating virtual environments using both Anaconda and standard Python, building distributions, and testing the installation.
4
+
5
+ *Please see Understanding Code Organization and Functionality section at the bottom for an explanation of the key terms, conventions, and code organization used.*
6
+
7
+ Step 1: Clone the TWS API repository and set up a virtual environment:
8
+
9
+ - Open a terminal or Anaconda prompt on your Windows laptop.
10
+ - Change to the directory where you want to store the TWS API repository.
11
+ - Clone the TWS API repository from GitHub using git:
12
+
13
+ ```bash
14
+ git clone https://github.com/your_username/tws-api.git
15
+ ```
16
+
17
+ Replace `your_username` with your actual GitHub username.
18
+
19
+ Step 2: Create a new Python virtual environment (using Anaconda):
20
+
21
+ - First, ensure you are within the '\tws-api\source\pythonclient' folder inside the "tws-api" repository:
22
+
23
+ ```Anaconda Prompt
24
+ cd tws-api/source/pythonclient
25
+ ```
26
+
27
+ - Create a new Python virtual environment using Anaconda:
28
+
29
+ ```Anaconda Prompt
30
+ conda create -n tws_env python=3.9
31
+ ```
32
+
33
+ Replace `tws_env` with your desired environment name. Here, we are using Python 3.9 as an example, but you can choose another Python version if needed.
34
+
35
+ - *Alternative: Create a new Python virtual environment without Anaconda:*
36
+
37
+ ```bash
38
+ python3 -m venv tws_env
39
+ ```
40
+
41
+ Replace `tws_env` with your desired environment name.
42
+
43
+ Step 3: Activate the virtual environment:
44
+
45
+ - Activate the newly created virtual environment:
46
+
47
+ ```Anaconda Prompt
48
+ conda activate tws_env
49
+ ```
50
+
51
+ - *Alternative: Activate the virtual environment without Anaconda:*
52
+
53
+ ```bash
54
+ source tws_env/bin/activate
55
+ ```
56
+
57
+ Step 4: Install the TWS API library:
58
+
59
+ - Build the source distribution:
60
+
61
+ ```Anaconda Prompt
62
+ python setup.py sdist
63
+ ```
64
+
65
+ - Build the wheel distribution:
66
+
67
+ ```Anaconda Prompt
68
+ python setup.py bdist_wheel
69
+ ```
70
+
71
+ - Retrieve the wheel distribution file name from the dist folder under the tws-api/source/pythonclient folder:
72
+
73
+ For instance, if the wheel distribution file name is `ibapi-9.76.1-py3-none-any.whl`
74
+
75
+ - Install the wheel distribution using `pip` with the `--user` flag using the following command:
76
+
77
+ ```Anaconda Prompt
78
+ python3 -m pip install --user --upgrade dist/ibapi-9.76.1-py3-none-any.whl
79
+ ```
80
+
81
+ Step 5: Create a new Jupyter kernel with the virtual environment:
82
+
83
+ - Install Jupyter if you haven't already (skip this step if you have Jupyter installed):
84
+
85
+ ```Anaconda Prompt
86
+ conda install jupyter
87
+ ```
88
+
89
+ - Install the ipykernel package to enable creating a Jupyter kernel for the virtual environment:
90
+
91
+ ```Anaconda Prompt
92
+ conda install ipykernel
93
+ ```
94
+
95
+ - Create a new Jupyter kernel for the virtual environment:
96
+
97
+ ```Anaconda Prompt
98
+ python -m ipykernel install --user --name tws_env --display-name "TWS Environment"
99
+ ```
100
+
101
+ Replace `tws_env` with the same environment name used in Step 2.
102
+
103
+ Step 6: Open Jupyter Notebook and select the new kernel:
104
+
105
+ - Launch Jupyter Notebook:
106
+
107
+ ```Anaconda Prompt
108
+ jupyter notebook
109
+ ```
110
+
111
+ Step 7: Create a new Jupyter Notebook and test the TWS API library installed:
112
+
113
+ - In the Jupyter Notebook interface, create a new notebook by clicking on "New" and then selecting "TWS Environment" from the list of available kernels.
114
+
115
+ - Run the following code in the first cell of the notebook to test the TWS API library:
116
+ ```
117
+ import ibapi
118
+
119
+ print("TWS API version:", ibapi.__version__)
120
+ ```
121
+ Congratulations, now you have a new Jupyter Notebook with the TWS API library installed in the virtual environment, and you can start coding and testing your trading strategies using the TWS API.
122
+
123
+
124
+
125
+ **Understanding Code Organization and Functionality**
126
+
127
+ This section provides insights into how the TWS API library is structured, how messages are received and sent, and how to interact with the Wrapper class for handling incoming messages. Understanding these concepts will help you effectively utilize the TWS API for your trading automation needs.
128
+
129
+ A couple of things/definitions/conventions:
130
+ * a *low level message* is some data prefixed with its size
131
+ * a *high level message* is a list of fields separated by the NULL character; the fields are all strings; the message ID is the first field, the come others whose number and semantics depend on the message itself
132
+ * a *request* is a message from client to TWS/IBGW (IB Gateway)
133
+ * an *answer* is a message from TWS/IBGW to client
134
+
135
+
136
+ How the code is organized:
137
+ * *comm* module: has tools that know how to handle (eg: encode/decode) low and high level messages
138
+ * *Connection*: glorified socket
139
+ * *Reader*: thread that uses Connection to read packets, transform to low level messages and put in a Queue
140
+ * *Decoder*: knows how to take a low level message and decode into high level message
141
+ * *Client*:
142
+ + knows to send requests
143
+ + has the message loop which takes low level messages from Queue and uses Decoder to transform into high level message with which it then calls the corresponding Wrapper method
144
+ * *Wrapper*: class that needs to be subclassed by the user so that it can get the incoming messages
145
+
146
+
147
+ The info/data flow is:
148
+
149
+ * receiving:
150
+ + *Connection.recv_msg()* (which is essentially a socket) receives the packets
151
+ - uses *Connection._recv_all_msgs()* which tries to combine smaller packets into bigger ones based on some trivial heuristic
152
+ + *Reader.run()* uses *Connection.recv_msg()* to get a packet and then uses *comm.read_msg()* to try to make it a low level message. If that can't be done yet (size prefix says so) then it waits for more packets
153
+ + if a full low level message is received then it is placed in the Queue (remember this is a standalone thread)
154
+ + the main thread runs the *Client.run()* loop which:
155
+ - gets a low level message from Queue
156
+ - uses *comm.py* to translate into high level message (fields)
157
+ - uses *Decoder.interpret()* to act based on that message
158
+ + *Decoder.interpret()* will translate the fields into function parameters of the correct type and call with the correct/corresponding method of *Wrapper* class
159
+
160
+ * sending:
161
+ + *Client* class has methods that implement the _requests_. The user will call those request methods with the needed parameters and *Client* will send them to the TWS/IBGW.
162
+
163
+
164
+ Implementation notes:
165
+
166
+ * the *Decoder* has two ways of handling a message (essentially decoding the fields)
167
+ + some message very neatly map to a function call; meaning that the number of fields and order are the same as the method parameters. For example: Wrapper.tickSize(). In this case a simple mapping is made between the incoming msg id and the Wrapper method:
168
+
169
+ IN.TICK_SIZE: HandleInfo(wrap=Wrapper.tickSize),
170
+
171
+ + other messages are more complex, depend on version number heavily or need field massaging. In this case the incoming message id is mapped to a processing function that will do all that and call the Wrapper method at the end. For example:
172
+
173
+ IN.TICK_PRICE: HandleInfo(proc=processTickPriceMsg),
@@ -0,0 +1,16 @@
1
+ """
2
+ Copyright (C) 2023 Interactive Brokers LLC. All rights reserved. This code is subject to the terms
3
+ and conditions of the IB API Non-Commercial License or the IB API Commercial License, as applicable.
4
+ """
5
+
6
+ """ Package implementing the Python API for the TWS/IB Gateway """
7
+
8
+ VERSION = {"major": 10, "minor": 37, "micro": 2}
9
+
10
+
11
+ def get_version_string():
12
+ version = "{major}.{minor}.{micro}".format(**VERSION)
13
+ return version
14
+
15
+
16
+ __version__ = get_version_string()
@@ -0,0 +1,70 @@
1
+ """
2
+ Copyright (C) 2019 Interactive Brokers LLC. All rights reserved. This code is subject to the terms
3
+ and conditions of the IB API Non-Commercial License or the IB API Commercial License, as applicable.
4
+ """
5
+
6
+
7
+ class AccountSummaryTags:
8
+ AccountType = "AccountType"
9
+ NetLiquidation = "NetLiquidation"
10
+ TotalCashValue = "TotalCashValue"
11
+ SettledCash = "SettledCash"
12
+ AccruedCash = "AccruedCash"
13
+ BuyingPower = "BuyingPower"
14
+ EquityWithLoanValue = "EquityWithLoanValue"
15
+ PreviousDayEquityWithLoanValue = "PreviousDayEquityWithLoanValue"
16
+ GrossPositionValue = "GrossPositionValue"
17
+ ReqTEquity = "ReqTEquity"
18
+ ReqTMargin = "ReqTMargin"
19
+ SMA = "SMA"
20
+ InitMarginReq = "InitMarginReq"
21
+ MaintMarginReq = "MaintMarginReq"
22
+ AvailableFunds = "AvailableFunds"
23
+ ExcessLiquidity = "ExcessLiquidity"
24
+ Cushion = "Cushion"
25
+ FullInitMarginReq = "FullInitMarginReq"
26
+ FullMaintMarginReq = "FullMaintMarginReq"
27
+ FullAvailableFunds = "FullAvailableFunds"
28
+ FullExcessLiquidity = "FullExcessLiquidity"
29
+ LookAheadNextChange = "LookAheadNextChange"
30
+ LookAheadInitMarginReq = "LookAheadInitMarginReq"
31
+ LookAheadMaintMarginReq = "LookAheadMaintMarginReq"
32
+ LookAheadAvailableFunds = "LookAheadAvailableFunds"
33
+ LookAheadExcessLiquidity = "LookAheadExcessLiquidity"
34
+ HighestSeverity = "HighestSeverity"
35
+ DayTradesRemaining = "DayTradesRemaining"
36
+ Leverage = "Leverage"
37
+
38
+ AllTags = ",".join(
39
+ (
40
+ AccountType,
41
+ NetLiquidation,
42
+ TotalCashValue,
43
+ SettledCash,
44
+ AccruedCash,
45
+ BuyingPower,
46
+ EquityWithLoanValue,
47
+ PreviousDayEquityWithLoanValue,
48
+ GrossPositionValue,
49
+ ReqTEquity,
50
+ ReqTMargin,
51
+ SMA,
52
+ InitMarginReq,
53
+ MaintMarginReq,
54
+ AvailableFunds,
55
+ ExcessLiquidity,
56
+ Cushion,
57
+ FullInitMarginReq,
58
+ FullMaintMarginReq,
59
+ FullAvailableFunds,
60
+ FullExcessLiquidity,
61
+ LookAheadNextChange,
62
+ LookAheadInitMarginReq,
63
+ LookAheadMaintMarginReq,
64
+ LookAheadAvailableFunds,
65
+ LookAheadExcessLiquidity,
66
+ HighestSeverity,
67
+ DayTradesRemaining,
68
+ Leverage,
69
+ )
70
+ )