webull-openapi-python-sdk 1.0.9__tar.gz → 1.1.0__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 (360) hide show
  1. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/PKG-INFO +1 -1
  2. webull_openapi_python_sdk-1.1.0/samples/data/data_client_event.py +52 -0
  3. webull_openapi_python_sdk-1.1.0/samples/data/data_streaming_client_event.py +66 -0
  4. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/samples/trade/trade_client_v3.py +64 -1
  5. webull_openapi_python_sdk-1.1.0/samples/trade/trade_client_v3_event.py +102 -0
  6. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/samples/trade/trade_event_client.py +4 -1
  7. webull_openapi_python_sdk-1.1.0/webull/__init__.py +1 -0
  8. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/__init__.py +1 -1
  9. webull_openapi_python_sdk-1.1.0/webull/data/__init__.py +3 -0
  10. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/common/category.py +1 -0
  11. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/data_client.py +2 -0
  12. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/data_streaming_client.py +6 -1
  13. webull_openapi_python_sdk-1.1.0/webull/data/quotes/event_market_data.py +50 -0
  14. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/instrument.py +43 -0
  15. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/subscribe/ask_bid_result.py +9 -3
  16. webull_openapi_python_sdk-1.1.0/webull/data/quotes/subscribe/event_depth_decoder.py +27 -0
  17. webull_openapi_python_sdk-1.1.0/webull/data/quotes/subscribe/event_depth_result.py +46 -0
  18. webull_openapi_python_sdk-1.1.0/webull/data/quotes/subscribe/event_snapshot_decoder.py +29 -0
  19. webull_openapi_python_sdk-1.1.0/webull/data/quotes/subscribe/event_snapshot_result.py +85 -0
  20. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/subscribe/message_pb2.py +25 -19
  21. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/subscribe/payload_type.py +3 -1
  22. webull_openapi_python_sdk-1.1.0/webull/data/request/get_event_depth_request.py +32 -0
  23. webull_openapi_python_sdk-1.1.0/webull/data/request/get_event_instrument_request.py +33 -0
  24. webull_openapi_python_sdk-1.1.0/webull/data/request/get_event_series_request.py +30 -0
  25. webull_openapi_python_sdk-1.1.0/webull/data/request/get_event_snapshot_request.py +31 -0
  26. webull_openapi_python_sdk-1.1.0/webull/trade/__init__.py +1 -0
  27. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/events/types.py +1 -1
  28. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/trade_events_client.py +1 -1
  29. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull_openapi_python_sdk.egg-info/PKG-INFO +1 -1
  30. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull_openapi_python_sdk.egg-info/SOURCES.txt +12 -0
  31. webull_openapi_python_sdk-1.0.9/webull/__init__.py +0 -1
  32. webull_openapi_python_sdk-1.0.9/webull/data/__init__.py +0 -3
  33. webull_openapi_python_sdk-1.0.9/webull/trade/__init__.py +0 -1
  34. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/ChangeLog.txt +0 -0
  35. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/LICENSE +0 -0
  36. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/MANIFEST.in +0 -0
  37. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/NOTICE +0 -0
  38. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/README.rst +0 -0
  39. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/samples/__init__.py +0 -0
  40. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/samples/account/__init__.py +0 -0
  41. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/samples/account/account_client.py +0 -0
  42. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/samples/assets/__init__.py +0 -0
  43. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/samples/assets/assets_client.py +0 -0
  44. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/samples/data/__init__.py +0 -0
  45. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/samples/data/data_client.py +0 -0
  46. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/samples/data/data_streaming_client.py +0 -0
  47. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/samples/data/data_streaming_client_async.py +0 -0
  48. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/samples/order/__init__.py +0 -0
  49. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/samples/order/order_option_client.py +0 -0
  50. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/samples/order/order_stock_client.py +0 -0
  51. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/samples/trade/__init__.py +0 -0
  52. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/samples/trade/trade_client.py +0 -0
  53. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/samples/trade/trade_client_v2.py +0 -0
  54. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/setup.cfg +0 -0
  55. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/setup.py +0 -0
  56. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/auth/__init__.py +0 -0
  57. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/auth/algorithm/__init__.py +0 -0
  58. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/auth/algorithm/sha_hmac1.py +0 -0
  59. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/auth/algorithm/sha_hmac256.py +0 -0
  60. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/auth/composer/__init__.py +0 -0
  61. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/auth/composer/default_signature_composer.py +0 -0
  62. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/auth/credentials.py +0 -0
  63. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/auth/signers/__init__.py +0 -0
  64. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/auth/signers/app_key_signer.py +0 -0
  65. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/auth/signers/signer.py +0 -0
  66. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/auth/signers/signer_factory.py +0 -0
  67. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/cache/__init__.py +0 -0
  68. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/client.py +0 -0
  69. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/common/__init__.py +0 -0
  70. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/common/api_type.py +0 -0
  71. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/common/easy_enum.py +0 -0
  72. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/common/region.py +0 -0
  73. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/compat.py +0 -0
  74. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/context/__init__.py +0 -0
  75. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/context/request_context_holder.py +0 -0
  76. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/data/endpoints.json +0 -0
  77. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/data/retry_config.json +0 -0
  78. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/endpoint/__init__.py +0 -0
  79. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/endpoint/chained_endpoint_resolver.py +0 -0
  80. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/endpoint/default_endpoint_resolver.py +0 -0
  81. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/endpoint/local_config_regional_endpoint_resolver.py +0 -0
  82. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/endpoint/resolver_endpoint_request.py +0 -0
  83. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/endpoint/user_customized_endpoint_resolver.py +0 -0
  84. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/exception/__init__.py +0 -0
  85. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/exception/error_code.py +0 -0
  86. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/exception/error_msg.py +0 -0
  87. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/exception/exceptions.py +0 -0
  88. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/headers.py +0 -0
  89. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/__init__.py +0 -0
  90. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/initializer/__init__.py +0 -0
  91. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/initializer/client_initializer.py +0 -0
  92. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/initializer/config/__init__.py +0 -0
  93. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/initializer/config/bean/__init__.py +0 -0
  94. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/initializer/config/bean/query_config_request.py +0 -0
  95. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/initializer/config/config_operation.py +0 -0
  96. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/initializer/token/__init__.py +0 -0
  97. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/initializer/token/bean/__init__.py +0 -0
  98. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/initializer/token/bean/access_token.py +0 -0
  99. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/initializer/token/bean/check_token_request.py +0 -0
  100. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/initializer/token/bean/create_token_request.py +0 -0
  101. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/initializer/token/bean/refresh_token_request.py +0 -0
  102. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/initializer/token/token_manager.py +0 -0
  103. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/initializer/token/token_operation.py +0 -0
  104. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/initializer/token/token_storage.py +0 -0
  105. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/method_type.py +0 -0
  106. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/protocol_type.py +0 -0
  107. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/request.py +0 -0
  108. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/http/response.py +0 -0
  109. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/request.py +0 -0
  110. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/retry/__init__.py +0 -0
  111. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/retry/backoff_strategy.py +0 -0
  112. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/retry/retry_condition.py +0 -0
  113. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/retry/retry_policy.py +0 -0
  114. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/retry/retry_policy_context.py +0 -0
  115. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/utils/__init__.py +0 -0
  116. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/utils/common.py +0 -0
  117. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/utils/data.py +0 -0
  118. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/utils/desensitize.py +0 -0
  119. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/utils/validation.py +0 -0
  120. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/__init__.py +0 -0
  121. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/__init__.py +0 -0
  122. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/__version__.py +0 -0
  123. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/_internal_utils.py +0 -0
  124. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/adapters.py +0 -0
  125. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/api.py +0 -0
  126. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/auth.py +0 -0
  127. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/certs.py +0 -0
  128. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/compat.py +0 -0
  129. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/cookies.py +0 -0
  130. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/exceptions.py +0 -0
  131. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/help.py +0 -0
  132. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/hooks.py +0 -0
  133. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/models.py +0 -0
  134. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/__init__.py +0 -0
  135. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/certifi/__init__.py +0 -0
  136. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/certifi/__main__.py +0 -0
  137. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/certifi/cacert.pem +0 -0
  138. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/certifi/core.py +0 -0
  139. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/__init__.py +0 -0
  140. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/big5freq.py +0 -0
  141. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/big5prober.py +0 -0
  142. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/chardistribution.py +0 -0
  143. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/charsetgroupprober.py +0 -0
  144. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/charsetprober.py +0 -0
  145. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/cli/__init__.py +0 -0
  146. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/cli/chardetect.py +0 -0
  147. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/codingstatemachine.py +0 -0
  148. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/compat.py +0 -0
  149. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/cp949prober.py +0 -0
  150. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/enums.py +0 -0
  151. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/escprober.py +0 -0
  152. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/escsm.py +0 -0
  153. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/eucjpprober.py +0 -0
  154. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/euckrfreq.py +0 -0
  155. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/euckrprober.py +0 -0
  156. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/euctwfreq.py +0 -0
  157. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/euctwprober.py +0 -0
  158. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/gb2312freq.py +0 -0
  159. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/gb2312prober.py +0 -0
  160. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/hebrewprober.py +0 -0
  161. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/jisfreq.py +0 -0
  162. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/jpcntx.py +0 -0
  163. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/langbulgarianmodel.py +0 -0
  164. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/langcyrillicmodel.py +0 -0
  165. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/langgreekmodel.py +0 -0
  166. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/langhebrewmodel.py +0 -0
  167. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/langhungarianmodel.py +0 -0
  168. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/langthaimodel.py +0 -0
  169. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/langturkishmodel.py +0 -0
  170. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/latin1prober.py +0 -0
  171. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/mbcharsetprober.py +0 -0
  172. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/mbcsgroupprober.py +0 -0
  173. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/mbcssm.py +0 -0
  174. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/sbcharsetprober.py +0 -0
  175. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/sbcsgroupprober.py +0 -0
  176. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/sjisprober.py +0 -0
  177. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/universaldetector.py +0 -0
  178. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/utf8prober.py +0 -0
  179. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/chardet/version.py +0 -0
  180. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/__init__.py +0 -0
  181. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/_collections.py +0 -0
  182. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/connection.py +0 -0
  183. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/connectionpool.py +0 -0
  184. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/contrib/__init__.py +0 -0
  185. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/contrib/_appengine_environ.py +0 -0
  186. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/contrib/_securetransport/__init__.py +0 -0
  187. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/contrib/_securetransport/bindings.py +0 -0
  188. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/contrib/_securetransport/low_level.py +0 -0
  189. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/contrib/appengine.py +0 -0
  190. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/contrib/ntlmpool.py +0 -0
  191. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/contrib/pyopenssl.py +0 -0
  192. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/contrib/securetransport.py +0 -0
  193. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/contrib/socks.py +0 -0
  194. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/exceptions.py +0 -0
  195. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/fields.py +0 -0
  196. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/filepost.py +0 -0
  197. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/packages/__init__.py +0 -0
  198. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/packages/backports/__init__.py +0 -0
  199. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/packages/backports/makefile.py +0 -0
  200. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/packages/ordered_dict.py +0 -0
  201. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/packages/six.py +0 -0
  202. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/packages/socks.py +0 -0
  203. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py +0 -0
  204. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py +0 -0
  205. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/poolmanager.py +0 -0
  206. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/request.py +0 -0
  207. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/response.py +0 -0
  208. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/util/__init__.py +0 -0
  209. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/util/connection.py +0 -0
  210. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/util/queue.py +0 -0
  211. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/util/request.py +0 -0
  212. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/util/response.py +0 -0
  213. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/util/retry.py +0 -0
  214. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/util/selectors.py +0 -0
  215. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/util/ssl_.py +0 -0
  216. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/util/timeout.py +0 -0
  217. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/util/url.py +0 -0
  218. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages/urllib3/util/wait.py +0 -0
  219. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/packages.py +0 -0
  220. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/sessions.py +0 -0
  221. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/status_codes.py +0 -0
  222. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/structures.py +0 -0
  223. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/requests/utils.py +0 -0
  224. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/core/vendored/six.py +0 -0
  225. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/common/__init__.py +0 -0
  226. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/common/connect_ack.py +0 -0
  227. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/common/contract_type.py +0 -0
  228. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/common/direction.py +0 -0
  229. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/common/exchange_code.py +0 -0
  230. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/common/exercise_style.py +0 -0
  231. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/common/expiration_cycle.py +0 -0
  232. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/common/instrument_status.py +0 -0
  233. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/common/option_type.py +0 -0
  234. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/common/subscribe_type.py +0 -0
  235. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/common/timespan.py +0 -0
  236. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/internal/__init__.py +0 -0
  237. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/internal/default_retry_policy.py +0 -0
  238. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/internal/exceptions.py +0 -0
  239. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/internal/quotes_client.py +0 -0
  240. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/internal/quotes_decoder.py +0 -0
  241. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/internal/quotes_payload_decoder.py +0 -0
  242. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/internal/quotes_topic.py +0 -0
  243. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/__init__.py +0 -0
  244. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/crypto_market_data.py +0 -0
  245. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/futures_market_data.py +0 -0
  246. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/market_data.py +0 -0
  247. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/market_streaming_data.py +0 -0
  248. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/subscribe/__init__.py +0 -0
  249. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/subscribe/basic_result.py +0 -0
  250. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/subscribe/broker_result.py +0 -0
  251. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/subscribe/order_result.py +0 -0
  252. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/subscribe/quote_decoder.py +0 -0
  253. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/subscribe/quote_result.py +0 -0
  254. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/subscribe/snapshot_decoder.py +0 -0
  255. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/subscribe/snapshot_result.py +0 -0
  256. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/subscribe/tick_decoder.py +0 -0
  257. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/quotes/subscribe/tick_result.py +0 -0
  258. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/__init__.py +0 -0
  259. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_batch_historical_bars_request.py +0 -0
  260. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_corp_action_request.py +0 -0
  261. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_crypto_historical_bars_request.py +0 -0
  262. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_crypto_instruments_request.py +0 -0
  263. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_crypto_snapshot_request.py +0 -0
  264. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_eod_bars_request.py +0 -0
  265. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_footprint_request.py +0 -0
  266. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_futures_depth_request.py +0 -0
  267. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_futures_footprint_request.py +0 -0
  268. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_futures_historical_bars_request.py +0 -0
  269. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_futures_instruments_by_code_request.py +0 -0
  270. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_futures_instruments_request.py +0 -0
  271. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_futures_products_request.py +0 -0
  272. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_futures_snapshot_request.py +0 -0
  273. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_futures_tick_request.py +0 -0
  274. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_historical_bars_request.py +0 -0
  275. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_instruments_request.py +0 -0
  276. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_quotes_request.py +0 -0
  277. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_snapshot_request.py +0 -0
  278. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/get_tick_request.py +0 -0
  279. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/subscribe_request.py +0 -0
  280. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/data/request/unsubscribe_request.py +0 -0
  281. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/common/__init__.py +0 -0
  282. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/common/account_type.py +0 -0
  283. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/common/category.py +0 -0
  284. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/common/combo_ticker_type.py +0 -0
  285. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/common/combo_type.py +0 -0
  286. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/common/currency.py +0 -0
  287. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/common/forbid_reason.py +0 -0
  288. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/common/instrument_type.py +0 -0
  289. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/common/markets.py +0 -0
  290. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/common/order_entrust_type.py +0 -0
  291. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/common/order_side.py +0 -0
  292. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/common/order_status.py +0 -0
  293. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/common/order_tif.py +0 -0
  294. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/common/order_type.py +0 -0
  295. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/common/trade_policy.py +0 -0
  296. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/common/trading_date_type.py +0 -0
  297. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/common/trailing_type.py +0 -0
  298. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/events/__init__.py +0 -0
  299. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/events/default_retry_policy.py +0 -0
  300. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/events/events_pb2.py +0 -0
  301. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/events/events_pb2_grpc.py +0 -0
  302. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/events/signature_composer.py +0 -0
  303. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/__init__.py +0 -0
  304. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/cancel_order_request.py +0 -0
  305. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/get_account_balance_request.py +0 -0
  306. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/get_account_positions_request.py +0 -0
  307. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/get_account_profile_request.py +0 -0
  308. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/get_app_subscriptions.py +0 -0
  309. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/get_open_orders_request.py +0 -0
  310. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/get_order_detail_request.py +0 -0
  311. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/get_today_orders_request.py +0 -0
  312. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/get_trade_calendar_request.py +0 -0
  313. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/get_trade_instrument_detail_request.py +0 -0
  314. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/get_trade_security_detail_request.py +0 -0
  315. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/get_tradeable_instruments_request.py +0 -0
  316. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/palce_order_request.py +0 -0
  317. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/place_order_request.py +0 -0
  318. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/place_order_request_v2.py +0 -0
  319. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/replace_order_request.py +0 -0
  320. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/replace_order_request_v2.py +0 -0
  321. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v2/__init__.py +0 -0
  322. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v2/cancel_option_request.py +0 -0
  323. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v2/cancel_order_request.py +0 -0
  324. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v2/get_account_balance_request.py +0 -0
  325. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v2/get_account_list.py +0 -0
  326. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v2/get_account_list_request.py +0 -0
  327. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v2/get_account_positions_request.py +0 -0
  328. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v2/get_order_detail_request.py +0 -0
  329. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v2/get_order_history_request.py +0 -0
  330. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v2/get_order_open_request.py +0 -0
  331. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v2/palce_order_request.py +0 -0
  332. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v2/place_option_request.py +0 -0
  333. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v2/place_order_request.py +0 -0
  334. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v2/preview_option_request.py +0 -0
  335. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v2/preview_order_request.py +0 -0
  336. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v2/replace_option_request.py +0 -0
  337. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v2/replace_order_request.py +0 -0
  338. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v3/__init__.py +0 -0
  339. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v3/batch_place_order_request.py +0 -0
  340. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v3/cancel_order_request.py +0 -0
  341. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v3/get_order_detail_request.py +0 -0
  342. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v3/get_order_history_request.py +0 -0
  343. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v3/get_order_open_request.py +0 -0
  344. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v3/place_order_request.py +0 -0
  345. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v3/preview_order_request.py +0 -0
  346. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/request/v3/replace_order_request.py +0 -0
  347. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/trade/__init__.py +0 -0
  348. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/trade/account_info.py +0 -0
  349. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/trade/order_operation.py +0 -0
  350. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/trade/trade_calendar.py +0 -0
  351. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/trade/trade_instrument.py +0 -0
  352. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/trade/v2/__init__.py +0 -0
  353. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/trade/v2/account_info_v2.py +0 -0
  354. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/trade/v2/order_operation_v2.py +0 -0
  355. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/trade/v3/__init__.py +0 -0
  356. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/trade/v3/order_opration_v3.py +0 -0
  357. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull/trade/trade_client.py +0 -0
  358. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull_openapi_python_sdk.egg-info/dependency_links.txt +0 -0
  359. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull_openapi_python_sdk.egg-info/requires.txt +0 -0
  360. {webull_openapi_python_sdk-1.0.9 → webull_openapi_python_sdk-1.1.0}/webull_openapi_python_sdk.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: webull-openapi-python-sdk
3
- Version: 1.0.9
3
+ Version: 1.1.0
4
4
  Summary: Webull Python SDK.
5
5
  Home-page:
6
6
  Author: Webull
@@ -0,0 +1,52 @@
1
+ # Copyright 2022 Webull
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ # coding=utf-8
16
+
17
+ from webull.data.common.category import Category
18
+ from webull.core.client import ApiClient
19
+ from webull.data.data_client import DataClient
20
+
21
+ optional_api_endpoint = "<api_endpoint>"
22
+ your_app_key = "<your_app_key>"
23
+ your_app_secret = "<your_app_secret>"
24
+ region_id = "<region_id>"
25
+ # The token_dir parameter can be used to specify the directory for storing the 2FA token. Both absolute and relative paths are supported and this option has the highest priority.
26
+ # Alternatively, the storage directory can be configured via an environment variable with the key WEBULL_OPENAPI_TOKEN_DIR, which also supports both absolute and relative paths.
27
+ # If neither is specified, the default configuration will be used, and the token will be stored at conf/token.txt under the current working directory.
28
+ # token_dir = "<your_token_dir>"
29
+ # api_client.set_token_dir(token_dir)
30
+
31
+ api_client = ApiClient(your_app_key, your_app_secret, region_id)
32
+ api_client.add_endpoint(region_id, optional_api_endpoint)
33
+
34
+
35
+ if __name__ == '__main__':
36
+ data_client = DataClient(api_client)
37
+
38
+ res = data_client.instrument.get_event_series("ECONOMICS")
39
+ if res.status_code == 200:
40
+ print('get_event_series:', res.json())
41
+
42
+ res = data_client.instrument.get_event_instrument("KXGDP")
43
+ if res.status_code == 200:
44
+ print('get_event_instrument:', res.json())
45
+
46
+ res = data_client.event_market_data.get_event_snapshot("KXRATECUTCOUNT-25DEC31-T10", Category.US_EVENT.name)
47
+ if res.status_code == 200:
48
+ print('get_event_snapshot:', res.json())
49
+
50
+ res = data_client.event_market_data.get_event_depth("KXRATECUTCOUNT-25DEC31-T10", Category.US_EVENT.name)
51
+ if res.status_code == 200:
52
+ print('get_event_depth:', res.json())
@@ -0,0 +1,66 @@
1
+ # Copyright 2022 Webull
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ # coding=utf-8
16
+
17
+ import logging
18
+ import uuid
19
+ from logging.handlers import TimedRotatingFileHandler
20
+
21
+ from webull.data.common.category import Category
22
+ from webull.data.common.subscribe_type import SubscribeType
23
+ from webull.data.data_streaming_client import DataStreamingClient
24
+
25
+ your_app_key = "</your_app_key>"
26
+ your_app_secret = "</your_app_secret>"
27
+ optional_api_endpoint = "</optional_quotes_endpoint>"
28
+ optional_quotes_endpoint = "</optional_quotes_endpoint>"
29
+ region_id = '<region_id>'
30
+ # The token_dir parameter can be used to specify the directory for storing the 2FA token. Both absolute and relative paths are supported and this option has the highest priority.
31
+ # Alternatively, the storage directory can be configured via an environment variable with the key WEBULL_OPENAPI_TOKEN_DIR, which also supports both absolute and relative paths.
32
+ # If neither is specified, the default configuration will be used, and the token will be stored at conf/token.txt under the current working directory.
33
+ # token_dir = "<your_token_dir>"
34
+ # data_streaming_client.set_token_dir(token_dir)
35
+
36
+ session_id = uuid.uuid4().hex
37
+ data_streaming_client = DataStreamingClient(your_app_key, your_app_secret, region_id, session_id,
38
+ http_host=optional_api_endpoint,
39
+ mqtt_host=optional_quotes_endpoint)
40
+
41
+ if __name__ == '__main__':
42
+ def my_connect_success_func(client, api_client, quotes_session_id):
43
+ print("connect success with session_id:%s" % quotes_session_id)
44
+ # subscribe
45
+ symbols = ['KXNHLGAME-26JAN21ANACOL-ANA', 'KXNBAGAME-26JAN20LACCHI-LAC']
46
+ sub_types = [SubscribeType.QUOTE.name, SubscribeType.SNAPSHOT.name]
47
+ client.subscribe(symbols, Category.US_EVENT.name, sub_types)
48
+
49
+ def my_quotes_message_func(client, topic, quotes):
50
+ print("receive message: topic:%s, quotes:%s" % (topic, quotes))
51
+
52
+ def my_subscribe_success_func(client, api_client, quotes_session_id):
53
+ print("subscribe success with session_id:%s" % quotes_session_id)
54
+
55
+
56
+ # set connect success callback func
57
+ data_streaming_client.on_connect_success = my_connect_success_func
58
+ # set quotes receiving callback func
59
+ data_streaming_client.on_quotes_message = my_quotes_message_func
60
+ # set subscribe success callback func
61
+ data_streaming_client.on_subscribe_success = my_subscribe_success_func
62
+
63
+ # the sync mode, blocking in current thread
64
+ data_streaming_client.connect_and_loop_forever()
65
+
66
+
@@ -454,4 +454,67 @@ if __name__ == '__main__':
454
454
  # get futures order history
455
455
  res = trade_client.order_v3.get_order_history(account_id, page_size=10)
456
456
  if res.status_code == 200:
457
- print('get order history res:', res.json())
457
+ print('get order history res:', res.json())
458
+
459
+ # ============================================================
460
+ # Algo Order Example
461
+ # ============================================================
462
+ alog_client_order_id = uuid.uuid4().hex
463
+ print('client order id:', alog_client_order_id)
464
+ new_normal_equity_orders = [
465
+ {
466
+ "combo_type": "NORMAL",
467
+ "client_order_id": alog_client_order_id,
468
+ "symbol": "AAPL",
469
+ "instrument_type": "EQUITY",
470
+ "market": "US",
471
+ "order_type": "LIMIT",
472
+ "limit_price": "188",
473
+ "quantity": "1",
474
+ "support_trading_session": "N",
475
+ "side": "BUY",
476
+ "time_in_force": "DAY",
477
+ "entrust_type": "QTY",
478
+ "algo_start_time": "16:00:00",
479
+ "algo_end_time": "23:00:00",
480
+ "target_vol_percent": "10",
481
+ "algo_type": "POV"
482
+ }
483
+ ]
484
+
485
+ res = trade_client.order_v3.preview_order(account_id, new_normal_equity_orders)
486
+ if res.status_code == 200:
487
+ print('preview algo order res:', res.json())
488
+
489
+ res = trade_client.order_v3.place_order(account_id, new_normal_equity_orders)
490
+ if res.status_code == 200:
491
+ print('place algo order res:', res.json())
492
+ sleep(3)
493
+
494
+ replace_normal_equity_orders = [
495
+ {
496
+ "client_order_id": alog_client_order_id,
497
+ "quantity": "100",
498
+ "limit_price": "200"
499
+ }
500
+ ]
501
+ res = trade_client.order_v3.replace_order(account_id, replace_normal_equity_orders)
502
+ if res.status_code == 200:
503
+ print('replace algo order res:', res.json())
504
+ sleep(3)
505
+
506
+ res = trade_client.order_v3.cancel_order(account_id, alog_client_order_id)
507
+ if res.status_code == 200:
508
+ print('cancel algo order res:', res.json())
509
+
510
+ res = trade_client.order_v3.get_order_open(account_id=account_id)
511
+ if res.status_code == 200:
512
+ print("order_open_res=" + json.dumps(res.json(), indent=4))
513
+
514
+ res = trade_client.order_v3.get_order_history(account_id)
515
+ if res.status_code == 200:
516
+ print('get order history res:', res.json())
517
+
518
+ res = trade_client.order_v3.get_order_detail(account_id, alog_client_order_id)
519
+ if res.status_code == 200:
520
+ print('get order detail res:', res.json())
@@ -0,0 +1,102 @@
1
+ # Copyright 2022 Webull
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ import json
16
+ import uuid
17
+ from time import sleep
18
+
19
+ from webull.core.client import ApiClient
20
+ from webull.trade.trade_client import TradeClient
21
+
22
+ optional_api_endpoint = "<api_endpoint>"
23
+ your_app_key = "<your_app_key>"
24
+ your_app_secret = "<your_app_secret>"
25
+ region_id = "<region_id>"
26
+ account_id = "<your_account_id>"
27
+ # The token_dir parameter can be used to specify the directory for storing the 2FA token. Both absolute and relative paths are supported and this option has the highest priority.
28
+ # Alternatively, the storage directory can be configured via an environment variable with the key WEBULL_OPENAPI_TOKEN_DIR, which also supports both absolute and relative paths.
29
+ # If neither is specified, the default configuration will be used, and the token will be stored at conf/token.txt under the current working directory.
30
+ # token_dir = "<your_token_dir>"
31
+ # api_client.set_token_dir(token_dir)
32
+
33
+ api_client = ApiClient(your_app_key, your_app_secret, region_id)
34
+ api_client.add_endpoint(region_id, optional_api_endpoint)
35
+
36
+
37
+ if __name__ == '__main__':
38
+ trade_client = TradeClient(api_client)
39
+
40
+ res = trade_client.account_v2.get_account_list()
41
+ if res.status_code == 200:
42
+ print('get account list:', res.json())
43
+
44
+ res = trade_client.account_v2.get_account_balance(account_id)
45
+ if res.status_code == 200:
46
+ print('get account balance res:', res.json())
47
+
48
+ res = trade_client.account_v2.get_account_position(account_id)
49
+ if res.status_code == 200:
50
+ print('get account position res:', res.json())
51
+
52
+ # normal event order
53
+ normal_event_client_order_id = uuid.uuid4().hex
54
+ print('event client order id:', normal_event_client_order_id)
55
+ new_normal_event_orders = [
56
+ {
57
+ "combo_type": "NORMAL",
58
+ "client_order_id": normal_event_client_order_id,
59
+ "instrument_type": "EVENT",
60
+ "market": "US",
61
+ "symbol": "KXRATECUTCOUNT-25DEC31-T9",
62
+ "order_type": "LIMIT",
63
+ "entrust_type": "QTY",
64
+ "time_in_force": "DAY",
65
+ "side": "BUY",
66
+ "quantity": "1",
67
+ "limit_price": "0.1",
68
+ "event_outcome": "yes"
69
+ }
70
+ ]
71
+
72
+ res = trade_client.order_v3.preview_order(account_id, new_normal_event_orders)
73
+ if res.status_code == 200:
74
+ print('preview normal event order res:', res.json())
75
+
76
+ res = trade_client.order_v3.place_order(account_id, new_normal_event_orders)
77
+ if res.status_code == 200:
78
+ print('place normal event order res:', res.json())
79
+ sleep(3)
80
+
81
+ # normal event order replace
82
+ replace_normal_event_orders = [
83
+ {
84
+ "client_order_id": normal_event_client_order_id,
85
+ "quantity": "10",
86
+ "limit_price": "0.1"
87
+ }
88
+ ]
89
+ res = trade_client.order_v3.replace_order(account_id, replace_normal_event_orders)
90
+ if res.status_code == 200:
91
+ print('replace normal event order res:', res.json())
92
+ sleep(3)
93
+
94
+ # normal event order cancel
95
+ res = trade_client.order_v3.cancel_order(account_id, normal_event_client_order_id)
96
+ if res.status_code == 200:
97
+ print('cancel normal event order res:', res.json())
98
+
99
+ # get event order detail
100
+ res = trade_client.order_v3.get_order_detail(account_id, normal_event_client_order_id)
101
+ if res.status_code == 200:
102
+ print('get event order detail res:', res.json())
@@ -14,7 +14,8 @@
14
14
 
15
15
  import logging
16
16
 
17
- from webull.trade.events.types import ORDER_STATUS_CHANGED, EVENT_TYPE_ORDER
17
+ from webull.trade.events.types import ORDER_STATUS_CHANGED, EVENT_TYPE_ORDER, EVENT_TYPE_POSITION, \
18
+ POSITION_STATUS_CHANGED
18
19
  from webull.trade.trade_events_client import TradeEventsClient
19
20
 
20
21
  your_app_key = "<your_app_key>"
@@ -32,6 +33,8 @@ def my_on_events_message(event_type, subscribe_type, payload, raw_message):
32
33
  if EVENT_TYPE_ORDER == event_type and ORDER_STATUS_CHANGED == subscribe_type:
33
34
  print('----request_id:%s----' % payload['request_id'])
34
35
  print(payload)
36
+ if EVENT_TYPE_POSITION == event_type and POSITION_STATUS_CHANGED == subscribe_type:
37
+ print('event payload:%s' % payload)
35
38
 
36
39
  if __name__ == '__main__':
37
40
 
@@ -0,0 +1 @@
1
+ __version__ = '1.1.0'
@@ -1,4 +1,4 @@
1
- __version__ = '1.0.9'
1
+ __version__ = '1.1.0'
2
2
 
3
3
  import logging
4
4
 
@@ -0,0 +1,3 @@
1
+ # coding=utf-8
2
+
3
+ __version__ = '1.1.0'
@@ -25,3 +25,4 @@ class Category(EasyEnum):
25
25
  CN_STOCK = (7, "CN STOCK")
26
26
  US_CRYPTO = (8, "US CRYPTO")
27
27
  US_FUTURES = (12, "US FUTURES")
28
+ US_EVENT = (13, "US EVENT")
@@ -19,6 +19,7 @@ import sys
19
19
 
20
20
  from webull.core.http.initializer.client_initializer import ClientInitializer
21
21
  from webull.data.quotes.crypto_market_data import CryptoMarketData
22
+ from webull.data.quotes.event_market_data import EventMarketData
22
23
  from webull.data.quotes.futures_market_data import FuturesMarketData
23
24
  from webull.data.quotes.instrument import Instrument
24
25
  from webull.data.quotes.market_data import MarketData
@@ -32,6 +33,7 @@ class DataClient:
32
33
  self.market_data = MarketData(api_client)
33
34
  self.crypto_market_data = CryptoMarketData(api_client)
34
35
  self.futures_market_data = FuturesMarketData(api_client)
36
+ self.event_market_data = EventMarketData(api_client)
35
37
 
36
38
  def _init_logger(self, api_client):
37
39
  # No logger configured, using default console and local file logging.
@@ -16,7 +16,10 @@
16
16
 
17
17
  from webull.data.internal.quotes_client import QuotesClient, LOG_ERR
18
18
  from webull.data.quotes.market_streaming_data import MarketDataStreaming
19
- from webull.data.quotes.subscribe.payload_type import PAYLOAD_TYPE_QUOTE, PAYLOAD_TYPE_SHAPSHOT, PAYLOAD_TYPE_TICK
19
+ from webull.data.quotes.subscribe.event_depth_decoder import EventDepthDecoder
20
+ from webull.data.quotes.subscribe.event_snapshot_decoder import EventSnapshotDecoder
21
+ from webull.data.quotes.subscribe.payload_type import PAYLOAD_TYPE_QUOTE, PAYLOAD_TYPE_SHAPSHOT, PAYLOAD_TYPE_TICK, \
22
+ PAYLOAD_TYPE_EVENT_SHAPSHOT, PAYLOAD_TYPE_EVENT_DEPTH
20
23
  from webull.data.quotes.subscribe.quote_decoder import QuoteDecoder
21
24
  from webull.data.quotes.subscribe.snapshot_decoder import SnapshotDecoder
22
25
  from webull.data.quotes.subscribe.tick_decoder import TickDecoder
@@ -39,6 +42,8 @@ class DataStreamingClient(QuotesClient):
39
42
  self.register_payload_decoder(PAYLOAD_TYPE_QUOTE, QuoteDecoder())
40
43
  self.register_payload_decoder(PAYLOAD_TYPE_SHAPSHOT, SnapshotDecoder())
41
44
  self.register_payload_decoder(PAYLOAD_TYPE_TICK, TickDecoder())
45
+ self.register_payload_decoder(PAYLOAD_TYPE_EVENT_DEPTH, EventDepthDecoder())
46
+ self.register_payload_decoder(PAYLOAD_TYPE_EVENT_SHAPSHOT, EventSnapshotDecoder())
42
47
 
43
48
  @property
44
49
  def on_connect_success(self):
@@ -0,0 +1,50 @@
1
+ # Copyright 2022 Webull
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ from webull.data.common.category import Category
15
+ from webull.data.request.get_event_depth_request import GetEventDepthRequest
16
+ from webull.data.request.get_event_snapshot_request import GetEventSnapshotRequest
17
+
18
+ class EventMarketData:
19
+ def __init__(self, api_client):
20
+ self.client = api_client
21
+
22
+ def get_event_snapshot(self, symbols, category=Category.US_EVENT.name):
23
+ """
24
+ Get real-time market snapshot data for a event instrument. Price unit is based on usd_cent.
25
+
26
+ :param symbols: Symbol of the event market, supports JSON array format, multiple symbols separated by commas; maximum 100 symbols per query.
27
+ :param category: default is US_EVENT, currently only US_EVENT is supported.
28
+ """
29
+ snapshot_request = GetEventSnapshotRequest()
30
+ snapshot_request.set_symbols(symbols)
31
+ snapshot_request.set_category(category)
32
+ response = self.client.get_response(snapshot_request)
33
+ return response
34
+
35
+ def get_event_depth(self, symbol, category=Category.US_EVENT.name, depth=10):
36
+ """
37
+ Get the current order book for a specific event instrument.
38
+ The order book shows all active bid orders for both yes and no sides of a binary market.
39
+ It returns yes bids and no bids only (no asks are returned). Price unit is based on usd_cent.
40
+
41
+ :param symbol:Symbol of the event market.
42
+ :param category: default is US_EVENT, currently only US_EVENT is supported.
43
+ :param depth: Depth of buying and selling orders, default 10 levels, etc.
44
+ """
45
+ quote_request = GetEventDepthRequest()
46
+ quote_request.set_symbol(symbol)
47
+ quote_request.set_category(category)
48
+ quote_request.set_depth(depth)
49
+ response = self.client.get_response(quote_request)
50
+ return response
@@ -12,6 +12,8 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  from webull.data.common.category import Category
15
+ from webull.data.request.get_event_instrument_request import GetEventInstrumentRequest
16
+ from webull.data.request.get_event_series_request import GetEventSeriesRequest
15
17
  from webull.data.request.get_instruments_request import GetInstrumentsRequest
16
18
  from webull.data.request.get_crypto_instruments_request import GetCryptoInstrumentsRequest
17
19
  from webull.data.request.get_futures_instruments_request import GetFuturesInstrumentsRequest
@@ -108,3 +110,44 @@ class Instrument:
108
110
  futures_instrument_request.set_contract_type(contract_type)
109
111
  response = self.client.get_response(futures_instrument_request)
110
112
  return response
113
+
114
+ def get_event_series(self, category, last_instrument_id=None, page_size=500):
115
+ """
116
+ Retrieve multiple series with specified filters.
117
+ A series represents a template for recurring events that follow the same format and rules (e.g., “Monthly Jobs Report” ).
118
+ This endpoint allows you to browse and discover available series templates by category.
119
+
120
+ :param category: The category which this series belongs to.Allowed values:
121
+ ECONOMICS, FINANCIALS, POLITICS, ENTERTAINMENT, SCIENCE_TECHNOLOGY,
122
+ CLIMATE_WEATHER, TRANSPORTATION, CRYPTO, SPORTS
123
+ :param last_instrument_id: Last series id for pagination.
124
+ :param page_size: Page size, default 500.
125
+ """
126
+
127
+ event_series_request = GetEventSeriesRequest()
128
+ event_series_request.set_category(category)
129
+ if last_instrument_id:
130
+ event_series_request.set_last_instrument_id(last_instrument_id)
131
+ event_series_request.set_page_size(page_size)
132
+ response = self.client.get_response(event_series_request)
133
+ return response
134
+
135
+ def get_event_instrument(self, series_symbol, expiration_date_after=None, last_instrument_id=None, page_size=500):
136
+ """
137
+ Retrieve profile information for event contract markets based on the series symbol.
138
+
139
+ :param series_symbol: Symbol that identifies this series.
140
+ :param expiration_date_after: Used to filter items whose expiration date is later than a specified date; the default selection is the current day (inclusive).
141
+ :param last_instrument_id: Last series id for pagination.
142
+ :param page_size: Page size, default 500.
143
+ """
144
+
145
+ event_instrument_request = GetEventInstrumentRequest()
146
+ event_instrument_request.set_series_symbol(series_symbol)
147
+ if expiration_date_after:
148
+ event_instrument_request.set_expiration_date_after(expiration_date_after)
149
+ if last_instrument_id:
150
+ event_instrument_request.set_last_instrument_id(last_instrument_id)
151
+ event_instrument_request.set_page_size(page_size)
152
+ response = self.client.get_response(event_instrument_request)
153
+ return response
@@ -22,11 +22,11 @@ class AskBidResult:
22
22
  self.price = Decimal(ask_bid.price) if ask_bid.price else None
23
23
  self.size = ask_bid.size
24
24
  self.order = []
25
- if ask_bid.order:
25
+ if hasattr(ask_bid, 'order') and ask_bid.order:
26
26
  for order in ask_bid.order:
27
27
  self.order.append(Order(order))
28
28
  self.broker = []
29
- if ask_bid.broker:
29
+ if hasattr(ask_bid, 'broker') and ask_bid.broker:
30
30
  for broker in ask_bid.broker:
31
31
  self.broker.append(Broker(broker))
32
32
 
@@ -43,7 +43,13 @@ class AskBidResult:
43
43
  return self.broker
44
44
 
45
45
  def __repr__(self):
46
- return "price:%s,size:%s,order:%s,broker:%s" % (self.price, self.size, self.order, self.broker)
46
+ result = f"price:{self.price},size:{self.size}"
47
+ # 可选字段
48
+ if self.order:
49
+ result += f",order:{str(self.order)}"
50
+ if self.broker:
51
+ result += f",broker:{str(self.broker)}"
52
+ return result
47
53
 
48
54
  def __str__(self):
49
55
  return self.__repr__()
@@ -0,0 +1,27 @@
1
+ # Copyright 2022 Webull
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # coding=utf-8
15
+
16
+ from webull.data.quotes.subscribe.message_pb2 import EventQuote
17
+ from webull.data.quotes.subscribe.event_depth_result import EventDepthResult
18
+ from webull.data.internal.quotes_payload_decoder import BaseQuotesPayloadDecoder
19
+
20
+ class EventDepthDecoder(BaseQuotesPayloadDecoder):
21
+ def __init__(self):
22
+ super().__init__()
23
+
24
+ def parse(self, payload):
25
+ eventQuote = EventQuote()
26
+ eventQuote.ParseFromString(payload)
27
+ return EventDepthResult(eventQuote)
@@ -0,0 +1,46 @@
1
+ # Copyright 2022 Webull
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ # coding=utf-8
16
+
17
+ from webull.data.quotes.subscribe.basic_result import BasicResult
18
+ from webull.data.quotes.subscribe.ask_bid_result import AskBidResult
19
+
20
+
21
+ class EventDepthResult:
22
+ def __init__(self, pb_event_depth):
23
+ self.basic = BasicResult(pb_event_depth.basic)
24
+ self.yes_bids = []
25
+ if pb_event_depth.yes_bids:
26
+ for bid in pb_event_depth.yes_bids:
27
+ self.yes_bids.append(AskBidResult(bid))
28
+ self.no_bids = []
29
+ if pb_event_depth.no_bids:
30
+ for bid in pb_event_depth.no_bids:
31
+ self.no_bids.append(AskBidResult(bid))
32
+
33
+ def get_basic(self):
34
+ return self.basic
35
+
36
+ def get_yes_bids(self):
37
+ return self.yes_bids
38
+
39
+ def get_no_bids(self):
40
+ return self.no_bids
41
+
42
+ def __repr__(self):
43
+ return "basic: %s,yes_bids:%s,no_bids:%s" % (self.basic, self.yes_bids, self.no_bids)
44
+
45
+ def __str__(self):
46
+ return self.__repr__()
@@ -0,0 +1,29 @@
1
+ # Copyright 2022 Webull
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # coding=utf-8
15
+
16
+ from webull.data.quotes.subscribe.message_pb2 import EventSnapshot
17
+ from webull.data.quotes.subscribe.event_snapshot_result import EventSnapshotResult
18
+ from webull.data.internal.quotes_payload_decoder import BaseQuotesPayloadDecoder
19
+
20
+
21
+
22
+ class EventSnapshotDecoder(BaseQuotesPayloadDecoder):
23
+ def __init__(self):
24
+ super().__init__()
25
+
26
+ def parse(self, payload):
27
+ eventSnapshot = EventSnapshot()
28
+ eventSnapshot.ParseFromString(payload)
29
+ return EventSnapshotResult(eventSnapshot)