webull-openapi-python-sdk 2.0.5__tar.gz → 2.0.6__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 (289) hide show
  1. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/PKG-INFO +1 -1
  2. webull_openapi_python_sdk-2.0.6/samples/__init__.py +1 -0
  3. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/data/data_client.py +33 -1
  4. webull_openapi_python_sdk-2.0.6/samples/screener/__init__.py +15 -0
  5. webull_openapi_python_sdk-2.0.6/samples/screener/screener_client.py +118 -0
  6. webull_openapi_python_sdk-2.0.6/samples/watchlist/__init__.py +13 -0
  7. webull_openapi_python_sdk-2.0.6/samples/watchlist/watchlist_client.py +87 -0
  8. webull_openapi_python_sdk-2.0.6/webull/__init__.py +1 -0
  9. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/__init__.py +1 -1
  10. webull_openapi_python_sdk-2.0.6/webull/data/__init__.py +3 -0
  11. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/data_client.py +4 -0
  12. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/instrument.py +77 -4
  13. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/market_data.py +65 -3
  14. webull_openapi_python_sdk-2.0.6/webull/data/quotes/screener.py +116 -0
  15. webull_openapi_python_sdk-2.0.6/webull/data/quotes/watchlist.py +148 -0
  16. webull_openapi_python_sdk-2.0.6/webull/data/request/get_analyst_rating_request.py +38 -0
  17. webull_openapi_python_sdk-2.0.6/webull/data/request/get_analyst_target_price_request.py +38 -0
  18. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_batch_historical_bars_request.py +19 -1
  19. webull_openapi_python_sdk-2.0.6/webull/data/request/get_company_profile_request.py +38 -0
  20. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_futures_instruments_request.py +6 -0
  21. webull_openapi_python_sdk-2.0.6/webull/data/request/get_futures_product_class.py +24 -0
  22. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_futures_products_request.py +3 -0
  23. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_historical_bars_request.py +18 -0
  24. webull_openapi_python_sdk-2.0.6/webull/data/request/get_noii_bars_request.py +55 -0
  25. webull_openapi_python_sdk-2.0.6/webull/data/request/get_noii_snapshot_request.py +59 -0
  26. webull_openapi_python_sdk-2.0.6/webull/data/request/screener/__init__.py +15 -0
  27. webull_openapi_python_sdk-2.0.6/webull/data/request/screener/get_gainers_losers_request.py +109 -0
  28. webull_openapi_python_sdk-2.0.6/webull/data/request/screener/get_most_active_request.py +110 -0
  29. webull_openapi_python_sdk-2.0.6/webull/data/request/watchlist/__init__.py +13 -0
  30. webull_openapi_python_sdk-2.0.6/webull/data/request/watchlist/add_watchlist_instruments_request.py +41 -0
  31. webull_openapi_python_sdk-2.0.6/webull/data/request/watchlist/create_watchlist_request.py +39 -0
  32. webull_openapi_python_sdk-2.0.6/webull/data/request/watchlist/delete_watchlist_request.py +30 -0
  33. webull_openapi_python_sdk-2.0.6/webull/data/request/watchlist/get_watchlist_instruments_request.py +30 -0
  34. webull_openapi_python_sdk-2.0.6/webull/data/request/watchlist/get_watchlist_request.py +22 -0
  35. webull_openapi_python_sdk-2.0.6/webull/data/request/watchlist/remove_watchlist_instruments_request.py +40 -0
  36. webull_openapi_python_sdk-2.0.6/webull/data/request/watchlist/update_watchlist_instruments_request.py +41 -0
  37. webull_openapi_python_sdk-2.0.6/webull/data/request/watchlist/update_watchlist_request.py +48 -0
  38. webull_openapi_python_sdk-2.0.6/webull/trade/__init__.py +1 -0
  39. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull_openapi_python_sdk.egg-info/PKG-INFO +1 -1
  40. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull_openapi_python_sdk.egg-info/SOURCES.txt +24 -0
  41. webull_openapi_python_sdk-2.0.5/samples/__init__.py +0 -1
  42. webull_openapi_python_sdk-2.0.5/webull/__init__.py +0 -1
  43. webull_openapi_python_sdk-2.0.5/webull/data/__init__.py +0 -3
  44. webull_openapi_python_sdk-2.0.5/webull/trade/__init__.py +0 -1
  45. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/ChangeLog.txt +0 -0
  46. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/LICENSE +0 -0
  47. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/MANIFEST.in +0 -0
  48. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/NOTICE +0 -0
  49. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/README.rst +0 -0
  50. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/account/__init__.py +0 -0
  51. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/account/account_client.py +0 -0
  52. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/assets/__init__.py +0 -0
  53. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/assets/assets_client.py +0 -0
  54. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/data/__init__.py +0 -0
  55. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/data/data_client_event.py +0 -0
  56. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/data/data_streaming_client.py +0 -0
  57. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/data/data_streaming_client_async.py +0 -0
  58. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/data/data_streaming_client_event.py +0 -0
  59. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/order/__init__.py +0 -0
  60. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/order/order_option_client.py +0 -0
  61. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/order/order_stock_client.py +0 -0
  62. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/trade/__init__.py +0 -0
  63. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/trade/trade_client.py +0 -0
  64. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/trade/trade_client_v2.py +0 -0
  65. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/trade/trade_client_v3.py +0 -0
  66. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/trade/trade_client_v3_event.py +0 -0
  67. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/samples/trade/trade_event_client.py +0 -0
  68. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/setup.cfg +0 -0
  69. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/setup.py +0 -0
  70. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/auth/__init__.py +0 -0
  71. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/auth/algorithm/__init__.py +0 -0
  72. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/auth/algorithm/sha_hmac1.py +0 -0
  73. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/auth/algorithm/sha_hmac256.py +0 -0
  74. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/auth/algorithm/sha_hmac256_new.py +0 -0
  75. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/auth/composer/__init__.py +0 -0
  76. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/auth/composer/default_signature_composer.py +0 -0
  77. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/auth/credentials.py +0 -0
  78. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/auth/signers/__init__.py +0 -0
  79. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/auth/signers/app_key_signer.py +0 -0
  80. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/auth/signers/signer.py +0 -0
  81. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/auth/signers/signer_factory.py +0 -0
  82. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/cache/__init__.py +0 -0
  83. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/client.py +0 -0
  84. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/common/__init__.py +0 -0
  85. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/common/api_type.py +0 -0
  86. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/common/easy_enum.py +0 -0
  87. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/common/region.py +0 -0
  88. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/compat.py +0 -0
  89. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/context/__init__.py +0 -0
  90. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/context/request_context_holder.py +0 -0
  91. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/data/endpoints.json +0 -0
  92. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/data/retry_config.json +0 -0
  93. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/endpoint/__init__.py +0 -0
  94. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/endpoint/chained_endpoint_resolver.py +0 -0
  95. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/endpoint/default_endpoint_resolver.py +0 -0
  96. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/endpoint/local_config_regional_endpoint_resolver.py +0 -0
  97. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/endpoint/resolver_endpoint_request.py +0 -0
  98. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/endpoint/user_customized_endpoint_resolver.py +0 -0
  99. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/exception/__init__.py +0 -0
  100. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/exception/error_code.py +0 -0
  101. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/exception/error_msg.py +0 -0
  102. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/exception/exceptions.py +0 -0
  103. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/headers.py +0 -0
  104. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/__init__.py +0 -0
  105. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/initializer/__init__.py +0 -0
  106. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/initializer/client_initializer.py +0 -0
  107. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/initializer/config/__init__.py +0 -0
  108. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/initializer/config/bean/__init__.py +0 -0
  109. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/initializer/config/bean/query_config_request.py +0 -0
  110. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/initializer/config/config_operation.py +0 -0
  111. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/initializer/token/__init__.py +0 -0
  112. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/initializer/token/bean/__init__.py +0 -0
  113. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/initializer/token/bean/access_token.py +0 -0
  114. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/initializer/token/bean/check_token_request.py +0 -0
  115. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/initializer/token/bean/create_token_request.py +0 -0
  116. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/initializer/token/bean/refresh_token_request.py +0 -0
  117. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/initializer/token/token_manager.py +0 -0
  118. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/initializer/token/token_operation.py +0 -0
  119. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/initializer/token/token_storage.py +0 -0
  120. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/method_type.py +0 -0
  121. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/protocol_type.py +0 -0
  122. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/request.py +0 -0
  123. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/http/response.py +0 -0
  124. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/request.py +0 -0
  125. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/retry/__init__.py +0 -0
  126. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/retry/backoff_strategy.py +0 -0
  127. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/retry/retry_condition.py +0 -0
  128. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/retry/retry_policy.py +0 -0
  129. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/retry/retry_policy_context.py +0 -0
  130. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/utils/__init__.py +0 -0
  131. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/utils/common.py +0 -0
  132. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/utils/data.py +0 -0
  133. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/utils/desensitize.py +0 -0
  134. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/core/utils/validation.py +0 -0
  135. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/common/__init__.py +0 -0
  136. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/common/category.py +0 -0
  137. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/common/connect_ack.py +0 -0
  138. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/common/contract_type.py +0 -0
  139. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/common/direction.py +0 -0
  140. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/common/exchange_code.py +0 -0
  141. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/common/exercise_style.py +0 -0
  142. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/common/expiration_cycle.py +0 -0
  143. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/common/instrument_status.py +0 -0
  144. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/common/option_type.py +0 -0
  145. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/common/subscribe_type.py +0 -0
  146. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/common/timespan.py +0 -0
  147. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/data_streaming_client.py +0 -0
  148. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/internal/__init__.py +0 -0
  149. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/internal/default_retry_policy.py +0 -0
  150. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/internal/exceptions.py +0 -0
  151. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/internal/quotes_client.py +0 -0
  152. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/internal/quotes_decoder.py +0 -0
  153. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/internal/quotes_payload_decoder.py +0 -0
  154. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/internal/quotes_topic.py +0 -0
  155. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/__init__.py +0 -0
  156. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/crypto_market_data.py +0 -0
  157. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/event_market_data.py +0 -0
  158. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/futures_market_data.py +0 -0
  159. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/market_streaming_data.py +0 -0
  160. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/__init__.py +0 -0
  161. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/ask_bid_result.py +0 -0
  162. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/basic_result.py +0 -0
  163. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/broker_result.py +0 -0
  164. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/event_depth_decoder.py +0 -0
  165. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/event_depth_result.py +0 -0
  166. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/event_snapshot_decoder.py +0 -0
  167. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/event_snapshot_result.py +0 -0
  168. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/event_tick_decoder.py +0 -0
  169. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/event_tick_result.py +0 -0
  170. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/message_pb2.py +0 -0
  171. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/order_result.py +0 -0
  172. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/payload_type.py +0 -0
  173. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/quote_decoder.py +0 -0
  174. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/quote_result.py +0 -0
  175. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/snapshot_decoder.py +0 -0
  176. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/snapshot_result.py +0 -0
  177. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/tick_decoder.py +0 -0
  178. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/quotes/subscribe/tick_result.py +0 -0
  179. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/__init__.py +0 -0
  180. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_corp_action_request.py +0 -0
  181. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_crypto_historical_bars_request.py +0 -0
  182. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_crypto_instruments_request.py +0 -0
  183. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_crypto_snapshot_request.py +0 -0
  184. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_eod_bars_request.py +0 -0
  185. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_event_bars_request.py +0 -0
  186. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_event_depth_request.py +0 -0
  187. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_event_events_request.py +0 -0
  188. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_event_instrument_request.py +0 -0
  189. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_event_series_categories.py +0 -0
  190. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_event_series_request.py +0 -0
  191. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_event_snapshot_request.py +0 -0
  192. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_event_tick_request.py +0 -0
  193. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_footprint_request.py +0 -0
  194. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_futures_depth_request.py +0 -0
  195. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_futures_footprint_request.py +0 -0
  196. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_futures_historical_bars_request.py +0 -0
  197. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_futures_instruments_by_code_request.py +0 -0
  198. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_futures_snapshot_request.py +0 -0
  199. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_futures_tick_request.py +0 -0
  200. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_instruments_request.py +0 -0
  201. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_quotes_request.py +0 -0
  202. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_snapshot_request.py +0 -0
  203. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/get_tick_request.py +0 -0
  204. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/subscribe_request.py +0 -0
  205. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/data/request/unsubscribe_request.py +0 -0
  206. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/common/__init__.py +0 -0
  207. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/common/account_type.py +0 -0
  208. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/common/category.py +0 -0
  209. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/common/combo_ticker_type.py +0 -0
  210. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/common/combo_type.py +0 -0
  211. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/common/currency.py +0 -0
  212. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/common/forbid_reason.py +0 -0
  213. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/common/instrument_type.py +0 -0
  214. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/common/markets.py +0 -0
  215. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/common/order_entrust_type.py +0 -0
  216. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/common/order_side.py +0 -0
  217. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/common/order_status.py +0 -0
  218. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/common/order_tif.py +0 -0
  219. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/common/order_type.py +0 -0
  220. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/common/position_intent.py +0 -0
  221. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/common/trade_policy.py +0 -0
  222. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/common/trading_date_type.py +0 -0
  223. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/common/trailing_type.py +0 -0
  224. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/events/__init__.py +0 -0
  225. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/events/default_retry_policy.py +0 -0
  226. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/events/events_pb2.py +0 -0
  227. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/events/events_pb2_grpc.py +0 -0
  228. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/events/signature_composer.py +0 -0
  229. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/events/types.py +0 -0
  230. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/__init__.py +0 -0
  231. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/cancel_order_request.py +0 -0
  232. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/get_account_balance_request.py +0 -0
  233. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/get_account_positions_request.py +0 -0
  234. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/get_account_profile_request.py +0 -0
  235. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/get_app_subscriptions.py +0 -0
  236. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/get_open_orders_request.py +0 -0
  237. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/get_order_detail_request.py +0 -0
  238. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/get_today_orders_request.py +0 -0
  239. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/get_trade_calendar_request.py +0 -0
  240. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/get_trade_instrument_detail_request.py +0 -0
  241. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/get_trade_security_detail_request.py +0 -0
  242. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/get_tradeable_instruments_request.py +0 -0
  243. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/palce_order_request.py +0 -0
  244. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/place_order_request.py +0 -0
  245. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/place_order_request_v2.py +0 -0
  246. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/replace_order_request.py +0 -0
  247. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/replace_order_request_v2.py +0 -0
  248. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v2/__init__.py +0 -0
  249. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v2/cancel_option_request.py +0 -0
  250. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v2/cancel_order_request.py +0 -0
  251. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v2/get_account_balance_request.py +0 -0
  252. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v2/get_account_list.py +0 -0
  253. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v2/get_account_list_request.py +0 -0
  254. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v2/get_account_position_details_request.py +0 -0
  255. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v2/get_account_positions_request.py +0 -0
  256. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v2/get_order_detail_request.py +0 -0
  257. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v2/get_order_history_request.py +0 -0
  258. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v2/get_order_open_request.py +0 -0
  259. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v2/palce_order_request.py +0 -0
  260. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v2/place_option_request.py +0 -0
  261. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v2/place_order_request.py +0 -0
  262. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v2/preview_option_request.py +0 -0
  263. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v2/preview_order_request.py +0 -0
  264. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v2/replace_option_request.py +0 -0
  265. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v2/replace_order_request.py +0 -0
  266. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v3/__init__.py +0 -0
  267. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v3/batch_place_order_request.py +0 -0
  268. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v3/cancel_order_request.py +0 -0
  269. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v3/get_order_detail_request.py +0 -0
  270. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v3/get_order_history_request.py +0 -0
  271. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v3/get_order_open_request.py +0 -0
  272. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v3/place_order_request.py +0 -0
  273. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v3/preview_order_request.py +0 -0
  274. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/request/v3/replace_order_request.py +0 -0
  275. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/trade/__init__.py +0 -0
  276. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/trade/account_info.py +0 -0
  277. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/trade/order_operation.py +0 -0
  278. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/trade/trade_calendar.py +0 -0
  279. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/trade/trade_instrument.py +0 -0
  280. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/trade/v2/__init__.py +0 -0
  281. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/trade/v2/account_info_v2.py +0 -0
  282. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/trade/v2/order_operation_v2.py +0 -0
  283. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/trade/v3/__init__.py +0 -0
  284. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/trade/v3/order_opration_v3.py +0 -0
  285. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/trade_client.py +0 -0
  286. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull/trade/trade_events_client.py +0 -0
  287. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull_openapi_python_sdk.egg-info/dependency_links.txt +0 -0
  288. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/webull_openapi_python_sdk.egg-info/requires.txt +0 -0
  289. {webull_openapi_python_sdk-2.0.5 → webull_openapi_python_sdk-2.0.6}/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: 2.0.5
3
+ Version: 2.0.6
4
4
  Summary: Webull Python SDK.
5
5
  Home-page:
6
6
  Author: Webull
@@ -0,0 +1 @@
1
+ __version__ = '2.0.6'
@@ -112,4 +112,36 @@ if __name__ == '__main__':
112
112
 
113
113
  res = data_client.instrument.get_futures_instrument_by_code("ES", Category.US_FUTURES.name, ContractType.MONTHLY.name)
114
114
  if res.status_code == 200:
115
- print('get_futures_instrument_by_code:', res.json())
115
+ print('get_futures_instrument_by_code:', res.json())
116
+
117
+ res = data_client.instrument.get_company_profile("AAPL", Category.US_STOCK.name)
118
+ if res.status_code == 200:
119
+ print('get_company_profile:', res.json())
120
+
121
+ res = data_client.instrument.get_analyst_target_price("AAPL", Category.US_STOCK.name)
122
+ if res.status_code == 200:
123
+ print('get_analyst_target_price:', res.json())
124
+
125
+ res = data_client.instrument.get_analyst_rating("AAPL", Category.US_STOCK.name)
126
+ if res.status_code == 200:
127
+ print('get_analyst_rating:', res.json())
128
+
129
+ # NOII (Net Order Imbalance Indicator) - Opening imbalance bars
130
+ res = data_client.market_data.get_noii_bars("AAPL", Category.US_STOCK.name, "PRE_OPEN")
131
+ if res.status_code == 200:
132
+ print('get_noii_bars (opening):', res.json())
133
+
134
+ # NOII - Closing imbalance bars
135
+ res = data_client.market_data.get_noii_bars("AAPL", Category.US_STOCK.name, "PRE_CLOSE")
136
+ if res.status_code == 200:
137
+ print('get_noii_bars (closing):', res.json())
138
+
139
+ # NOII Snapshot - Opening imbalance
140
+ res = data_client.market_data.get_noii_snapshot("AAPL", Category.US_STOCK.name, "PRE_OPEN")
141
+ if res.status_code == 200:
142
+ print('get_noii_snapshot (opening):', res.json())
143
+
144
+ # NOII Snapshot - Closing imbalance
145
+ res = data_client.market_data.get_noii_snapshot("AAPL", Category.US_STOCK.name, "PRE_CLOSE")
146
+ if res.status_code == 200:
147
+ print('get_noii_snapshot (closing):', res.json())
@@ -0,0 +1,15 @@
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
@@ -0,0 +1,118 @@
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.core.client import ApiClient
18
+ from webull.data.data_client import DataClient
19
+
20
+ optional_api_endpoint = "<api_endpoint>"
21
+ your_app_key = "<your_app_key>"
22
+ your_app_secret = "<your_app_secret>"
23
+ region_id = "<region_id>"
24
+
25
+ api_client = ApiClient(your_app_key, your_app_secret, region_id)
26
+ api_client.add_endpoint(region_id, optional_api_endpoint)
27
+
28
+
29
+ if __name__ == '__main__':
30
+ data_client = DataClient(api_client)
31
+
32
+ # Get top gainers for today (stocks with highest price increase)
33
+ res = data_client.screener.get_gainers_losers(
34
+ rank_type="DAY_1",
35
+ category="US_STOCK",
36
+ sort_by="CHANGE_RATIO",
37
+ direction="DESC",
38
+ page_size=10
39
+ )
40
+ if res.status_code == 200:
41
+ print('get_gainers (day):', res.json())
42
+
43
+ # Get top losers for today (stocks with highest price decrease)
44
+ res = data_client.screener.get_gainers_losers(
45
+ rank_type="DAY_1",
46
+ category="US_STOCK",
47
+ sort_by="CHANGE_RATIO",
48
+ direction="ASC",
49
+ page_size=10
50
+ )
51
+ if res.status_code == 200:
52
+ print('get_losers (day):', res.json())
53
+
54
+ # Get pre-market movers
55
+ res = data_client.screener.get_gainers_losers(
56
+ rank_type="PRE_MARKET",
57
+ category="US_STOCK",
58
+ sort_by="CHANGE_RATIO",
59
+ direction="DESC",
60
+ page_size=20
61
+ )
62
+ if res.status_code == 200:
63
+ print('get_pre_market_movers:', res.json())
64
+
65
+ # Get 52-week top performers
66
+ res = data_client.screener.get_gainers_losers(
67
+ rank_type="WEEK_52",
68
+ category="US_STOCK",
69
+ sort_by="CHANGE_RATIO",
70
+ direction="DESC",
71
+ page_size=10
72
+ )
73
+ if res.status_code == 200:
74
+ print('get_52_week_top_performers:', res.json())
75
+
76
+ # Get most active stocks by volume
77
+ res = data_client.screener.get_most_active(
78
+ category="US_STOCK",
79
+ rank_type="VOLUME",
80
+ sort_by="VOLUME",
81
+ direction="DESC",
82
+ page_size=10
83
+ )
84
+ if res.status_code == 200:
85
+ print('get_most_active_by_volume:', res.json())
86
+
87
+ # Get stocks with unusual trading activity (high relative volume)
88
+ res = data_client.screener.get_most_active(
89
+ category="US_STOCK",
90
+ rank_type="RELATIVE_VOLUME_10D",
91
+ sort_by="RELATIVE_VOLUME_10D",
92
+ direction="DESC",
93
+ page_size=10
94
+ )
95
+ if res.status_code == 200:
96
+ print('get_unusual_volume_activity:', res.json())
97
+
98
+ # Get most active stocks by turnover amount
99
+ res = data_client.screener.get_most_active(
100
+ category="US_STOCK",
101
+ rank_type="TURNOVER",
102
+ sort_by="TURNOVER",
103
+ direction="DESC",
104
+ page_size=10
105
+ )
106
+ if res.status_code == 200:
107
+ print('get_most_active_by_turnover:', res.json())
108
+
109
+ # Get stocks with high price amplitude
110
+ res = data_client.screener.get_most_active(
111
+ category="US_STOCK",
112
+ rank_type="AMPLITUDE",
113
+ sort_by="AMPLITUDE",
114
+ direction="DESC",
115
+ page_size=10
116
+ )
117
+ if res.status_code == 200:
118
+ print('get_high_amplitude_stocks:', res.json())
@@ -0,0 +1,13 @@
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.
@@ -0,0 +1,87 @@
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.core.client import ApiClient
18
+ from webull.data.data_client import DataClient
19
+
20
+ optional_api_endpoint = "<api_endpoint>"
21
+ your_app_key = "<your_app_key>"
22
+ your_app_secret = "<your_app_secret>"
23
+ region_id = "<region_id>"
24
+
25
+ api_client = ApiClient(your_app_key, your_app_secret, region_id)
26
+ api_client.add_endpoint(region_id, optional_api_endpoint)
27
+
28
+
29
+ if __name__ == '__main__':
30
+ data_client = DataClient(api_client)
31
+
32
+ # Get all watchlists
33
+ res = data_client.watchlist.get_watchlist()
34
+ if res.status_code == 200:
35
+ print('get_watchlist:', res.json())
36
+
37
+ # Create a new watchlist (max 20 watchlists, shared with retail)
38
+ res = data_client.watchlist.create_watchlist(name="Tech Stocks", sort=1)
39
+ if res.status_code == 200:
40
+ print('create_watchlist:', res.json())
41
+ watchlist_id = res.json().get("watchlist_id")
42
+
43
+ # Update the watchlist
44
+ res = data_client.watchlist.update_watchlist(
45
+ watchlist_id=watchlist_id,
46
+ name="My Favorites",
47
+ sort=2
48
+ )
49
+ if res.status_code == 200:
50
+ print('update_watchlist:', res.json())
51
+
52
+ # Add instruments to the watchlist (max 1000 instruments total)
53
+ instruments = [
54
+ {"symbol": "AAPL", "category": "US_STOCK", "sort": 1},
55
+ {"symbol": "TSLA", "category": "US_STOCK", "sort": 2}
56
+ ]
57
+ res = data_client.watchlist.add_instruments(watchlist_id, instruments)
58
+ if res.status_code == 200:
59
+ print('add_instruments:', res.json())
60
+
61
+ # Get instruments in the watchlist
62
+ res = data_client.watchlist.get_instruments(watchlist_id)
63
+ if res.status_code == 200:
64
+ print('get_instruments:', res.json())
65
+
66
+ # Update instruments sort order
67
+ instruments = [
68
+ {"symbol": "AAPL", "category": "US_STOCK", "sort": 3},
69
+ {"symbol": "TSLA", "category": "US_STOCK", "sort": 1}
70
+ ]
71
+ res = data_client.watchlist.update_instruments(watchlist_id, instruments)
72
+ if res.status_code == 200:
73
+ print('update_instruments:', res.json())
74
+
75
+ # Remove instruments from the watchlist
76
+ instruments = [
77
+ {"symbol": "AAPL", "category": "US_STOCK"},
78
+ {"symbol": "TSLA", "category": "US_STOCK"}
79
+ ]
80
+ res = data_client.watchlist.remove_instruments(watchlist_id, instruments)
81
+ if res.status_code == 200:
82
+ print('remove_instruments:', res.json())
83
+
84
+ # Delete the watchlist (irreversible)
85
+ res = data_client.watchlist.delete_watchlist(watchlist_id)
86
+ if res.status_code == 200:
87
+ print('delete_watchlist:', res.json())
@@ -0,0 +1 @@
1
+ __version__ = '2.0.6'
@@ -1,4 +1,4 @@
1
- __version__ = '2.0.5'
1
+ __version__ = '2.0.6'
2
2
 
3
3
  import logging
4
4
 
@@ -0,0 +1,3 @@
1
+ # coding=utf-8
2
+
3
+ __version__ = '2.0.6'
@@ -23,6 +23,8 @@ from webull.data.quotes.event_market_data import EventMarketData
23
23
  from webull.data.quotes.futures_market_data import FuturesMarketData
24
24
  from webull.data.quotes.instrument import Instrument
25
25
  from webull.data.quotes.market_data import MarketData
26
+ from webull.data.quotes.screener import Screener
27
+ from webull.data.quotes.watchlist import Watchlist
26
28
 
27
29
 
28
30
  class DataClient:
@@ -34,6 +36,8 @@ class DataClient:
34
36
  self.crypto_market_data = CryptoMarketData(api_client)
35
37
  self.futures_market_data = FuturesMarketData(api_client)
36
38
  self.event_market_data = EventMarketData(api_client)
39
+ self.screener = Screener(api_client)
40
+ self.watchlist = Watchlist(api_client)
37
41
 
38
42
  def _init_logger(self, api_client):
39
43
  # No logger configured, using default console and local file logging.
@@ -12,6 +12,9 @@
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_analyst_rating_request import GetAnalystRatingRequest
16
+ from webull.data.request.get_analyst_target_price_request import GetAnalystTargetPriceRequest
17
+ from webull.data.request.get_company_profile_request import GetCompanyProfileRequest
15
18
  from webull.data.request.get_event_events_request import GetEventEventsRequest
16
19
  from webull.data.request.get_event_instrument_request import GetEventInstrumentRequest
17
20
  from webull.data.request.get_event_series_categories import GetEventCategoriesRequest
@@ -21,6 +24,7 @@ from webull.data.request.get_crypto_instruments_request import GetCryptoInstrume
21
24
  from webull.data.request.get_futures_instruments_request import GetFuturesInstrumentsRequest
22
25
  from webull.data.request.get_futures_products_request import GetFuturesProductsRequest
23
26
  from webull.data.request.get_futures_instruments_by_code_request import GetFuturesInstrumentsByCodeRequest
27
+ from webull.data.request.get_futures_product_class import GetFuturesProductClassRequest
24
28
 
25
29
 
26
30
  class Instrument:
@@ -68,32 +72,45 @@ class Instrument:
68
72
  response = self.client.get_response(crypto_instruments_request)
69
73
  return response
70
74
 
71
- def get_futures_instrument(self, symbols, category):
75
+ def get_futures_instrument(self, symbols=None, category=Category.US_STOCK.name, code=None, status=None):
72
76
  """
73
77
  Query the futures instrument information based on the futures contract symbol.
74
78
 
75
- :param symbols: Futures contract symbol, such as: ESmain,ESM5.
76
79
  :param category: Security type, enumeration.
80
+ :param symbols: Futures contract symbol, such as: ESmain,ESM5.
81
+ :param code: Futures contract code, such as: ES.
82
+ :param status: Tradable status.
77
83
  """
78
84
 
79
85
  futures_instrument_request = GetFuturesInstrumentsRequest()
80
- futures_instrument_request.set_symbols(symbols)
81
86
  futures_instrument_request.set_category(category)
87
+ if symbols:
88
+ futures_instrument_request.set_symbols(symbols)
89
+ if code:
90
+ futures_instrument_request.set_code(code)
91
+ if status:
92
+ futures_instrument_request.set_status(status)
82
93
  response = self.client.get_response(futures_instrument_request)
83
94
  return response
84
95
 
85
- def get_futures_products(self, category):
96
+ def get_futures_products(self, category, product_class_id=None):
86
97
  """
87
98
  Query futures contract codes in batches based on security types.
88
99
 
89
100
  :param category: Security type, enumeration.
101
+ :param product_class_id: Asset classification code, used to filter products of specific categories
90
102
  """
91
103
 
92
104
  batch_futures_products_request = GetFuturesProductsRequest()
93
105
  batch_futures_products_request.set_category(category)
106
+ if product_class_id:
107
+ batch_futures_products_request.set_product_class_id(product_class_id)
94
108
  response = self.client.get_response(batch_futures_products_request)
95
109
  return response
96
110
 
111
+ """
112
+ Deprecated: This endpoint is deprecated, please use the get_futures_instrument endpoint
113
+ """
97
114
  def get_futures_instrument_by_code(self, code, category, contract_type=None):
98
115
  """
99
116
  Query futures instrument information based on futures contract code.
@@ -113,6 +130,18 @@ class Instrument:
113
130
  response = self.client.get_response(futures_instrument_request)
114
131
  return response
115
132
 
133
+ def get_futures_product_class(self, category):
134
+ """
135
+ Query futures product classes based on security types.
136
+
137
+ :param category: Security type, enumeration.
138
+ """
139
+
140
+ futures_product_class_request = GetFuturesProductClassRequest()
141
+ futures_product_class_request.set_category(category)
142
+ response = self.client.get_response(futures_product_class_request)
143
+ return response
144
+
116
145
  def get_event_categories(self):
117
146
  """
118
147
  Query event contract categories
@@ -187,4 +216,48 @@ class Instrument:
187
216
  event_instrument_request.set_last_instrument_id(last_instrument_id)
188
217
  event_instrument_request.set_page_size(page_size)
189
218
  response = self.client.get_response(event_instrument_request)
219
+ return response
220
+
221
+ def get_company_profile(self, symbol, category=Category.US_STOCK.name):
222
+ """
223
+ Get company profile for one instrument.
224
+
225
+ :param symbol: Security symbol, e.g., AAPL
226
+ :param category: Security type. Possible values: US_STOCK. Default is US_STOCK.
227
+ :return: Company profile including company name, establish date, CEO, employees,
228
+ address, profile description, industries, etc.
229
+ """
230
+ request = GetCompanyProfileRequest()
231
+ request.set_symbol(symbol)
232
+ request.set_category(category)
233
+ response = self.client.get_response(request)
234
+ return response
235
+
236
+ def get_analyst_target_price(self, symbol, category=Category.US_STOCK.name):
237
+ """
238
+ Get analyst target price for one instrument.
239
+
240
+ :param symbol: Security symbol, e.g., AAPL
241
+ :param category: Security type. Possible values: US_STOCK. Default is US_STOCK.
242
+ :return: Analyst target price including mean, low, high, median price and currency.
243
+ """
244
+ request = GetAnalystTargetPriceRequest()
245
+ request.set_symbol(symbol)
246
+ request.set_category(category)
247
+ response = self.client.get_response(request)
248
+ return response
249
+
250
+ def get_analyst_rating(self, symbol, category=Category.US_STOCK.name):
251
+ """
252
+ Get analyst rating for one instrument.
253
+
254
+ :param symbol: Security symbol, e.g., AAPL
255
+ :param category: Security type. Possible values: US_STOCK. Default is US_STOCK.
256
+ :return: Analyst rating including total number of analysts, buy/sell/hold counts,
257
+ strong buy count, under perform count, etc.
258
+ """
259
+ request = GetAnalystRatingRequest()
260
+ request.set_symbol(symbol)
261
+ request.set_category(category)
262
+ response = self.client.get_response(request)
190
263
  return response
@@ -11,12 +11,13 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
- from webull.data.common.category import Category
15
14
  from webull.data.request.get_batch_historical_bars_request import BatchHistoricalBarsRequest
16
15
  from webull.data.request.get_corp_action_request import GetCorpActionRequest
17
16
  from webull.data.request.get_eod_bars_request import GetEodBarsRequest
18
17
  from webull.data.request.get_footprint_request import GetFootprintRequest
19
18
  from webull.data.request.get_historical_bars_request import GetHistoricalBarsRequest
19
+ from webull.data.request.get_noii_bars_request import GetNoiiBarsRequest
20
+ from webull.data.request.get_noii_snapshot_request import GetNoiiSnapshotRequest
20
21
  from webull.data.request.get_quotes_request import GetQuotesRequest
21
22
  from webull.data.request.get_snapshot_request import GetSnapshotRequest
22
23
  from webull.data.request.get_tick_request import GetTickRequest
@@ -26,7 +27,7 @@ class MarketData:
26
27
  def __init__(self, api_client):
27
28
  self.client = api_client
28
29
 
29
- def get_history_bar(self, symbol, category, timespan, count='200', real_time_required=None, trading_sessions=None):
30
+ def get_history_bar(self, symbol, category, timespan, count='200', real_time_required=None, trading_sessions=None, start_time=None, end_time=None):
30
31
  """
31
32
  Returns to Instrument in the window aggregated data.
32
33
  According to the last N K-lines of the stock code, it supports various granularity K-lines such as m1 and m5.
@@ -40,6 +41,8 @@ class MarketData:
40
41
  :param real_time_required: Returns the latest trade quote data. By default, the most recent market data is returned.
41
42
  :param trading_sessions: Specify trading session, multiple selections are allowed
42
43
  By default, only intraday candlestick data is returned.
44
+ :param start_time: Start timestamp in milliseconds (Long). Optional.
45
+ :param end_time: End timestamp in milliseconds (Long). Delayed permission will auto-offset time. Optional.
43
46
  """
44
47
  history_bar_request = GetHistoricalBarsRequest()
45
48
  history_bar_request.set_symbol(symbol)
@@ -48,10 +51,12 @@ class MarketData:
48
51
  history_bar_request.set_count(count)
49
52
  history_bar_request.set_real_time_required(real_time_required)
50
53
  history_bar_request.set_trading_sessions(trading_sessions)
54
+ history_bar_request.set_start_time(start_time)
55
+ history_bar_request.set_end_time(end_time)
51
56
  response = self.client.get_response(history_bar_request)
52
57
  return response
53
58
 
54
- def get_batch_history_bar(self, symbols, category, timespan, count='200', real_time_required=None, trading_sessions=None):
59
+ def get_batch_history_bar(self, symbols, category, timespan, count='200', real_time_required=None, trading_sessions=None, start_time=None, end_time=None):
55
60
  """
56
61
  Batch query K-line data for multiple symbols, returning aggregated data within the window.
57
62
  According to the last N K-lines of the stock code, it supports various granularity K-lines such as m1 and m5.
@@ -65,6 +70,8 @@ class MarketData:
65
70
  :param real_time_required: Returns the latest trade quote data. By default, the most recent market data is returned.
66
71
  :param trading_sessions: Specify trading session, multiple selections are allowed
67
72
  By default, only intraday candlestick data is returned.
73
+ :param start_time: Start timestamp in milliseconds (Long). Optional.
74
+ :param end_time: End timestamp in milliseconds (Long). Delayed permission will auto-offset time. Optional.
68
75
  """
69
76
  history_bar_request = BatchHistoricalBarsRequest()
70
77
  history_bar_request.set_symbols(symbols)
@@ -73,6 +80,8 @@ class MarketData:
73
80
  history_bar_request.set_count(count)
74
81
  history_bar_request.set_real_time_required(real_time_required)
75
82
  history_bar_request.set_trading_sessions(trading_sessions)
83
+ history_bar_request.set_start_time(start_time)
84
+ history_bar_request.set_end_time(end_time)
76
85
  response = self.client.get_response(history_bar_request)
77
86
  return response
78
87
 
@@ -207,3 +216,56 @@ class MarketData:
207
216
  footprint_request.set_trading_sessions(trading_sessions)
208
217
  response = self.client.get_response(footprint_request)
209
218
  return response
219
+
220
+ def get_noii_bars(self, symbol, category, imbalance_action_type):
221
+ """
222
+ Query NOII (Net Order Imbalance Indicator) K-line data for a stock.
223
+
224
+ NOII data provides insight into market supply and demand during NASDAQ
225
+ opening and closing auctions, acting as a leading indicator for potential
226
+ price movements at key trading moments.
227
+
228
+ :param symbol: Security symbol, e.g., AAPL. Only single symbol query is supported.
229
+ :param category: Security category. Currently only US_STOCK is supported.
230
+ :param imbalance_action_type: Imbalance action type.
231
+ - PRE_OPEN: Opening imbalance
232
+ - PRE_CLOSE: Closing imbalance
233
+ :return: Response containing a list of NOII bar data with:
234
+ instrument_id, symbol, imbalance_time, imbalance_ref_price,
235
+ imbalance_near_price, imbalance_far_price, imbalance_action_type.
236
+ """
237
+ request = GetNoiiBarsRequest()
238
+ request.set_symbol(symbol)
239
+ request.set_category(category)
240
+ request.set_imbalance_action_type(imbalance_action_type)
241
+ response = self.client.get_response(request)
242
+ return response
243
+
244
+ def get_noii_snapshot(self, symbol, category, imbalance_action_type):
245
+ """
246
+ Query the latest NOII (Net Order Imbalance Indicator) snapshot for a stock.
247
+
248
+ Provides real-time NOII snapshot during US stock call auction phases to
249
+ determine market supply-demand relationship and expected match price.
250
+
251
+ NOII data is published only during call auction periods, updating every 5 seconds:
252
+ - Opening auction: 9:28 - 9:30 AM ET (2 minutes)
253
+ - Closing auction: 3:50 - 4:00 PM ET (10 minutes)
254
+ Outside these periods, historical data is returned.
255
+
256
+ :param symbol: Security symbol, e.g., AAPL. Only single symbol query is supported.
257
+ :param category: Security category. Currently only US_STOCK is supported.
258
+ :param imbalance_action_type: Imbalance action type.
259
+ - PRE_OPEN: Opening imbalance
260
+ - PRE_CLOSE: Closing imbalance
261
+ :return: Response containing NOII snapshot data with:
262
+ instrument_id, symbol, paired_shares, imbalance_shares, imbalance_side,
263
+ imbalance_ref_price, imbalance_near_price, imbalance_far_price,
264
+ imbalance_act_tp, imbalance_time, imbalance_var_indicator.
265
+ """
266
+ request = GetNoiiSnapshotRequest()
267
+ request.set_symbol(symbol)
268
+ request.set_category(category)
269
+ request.set_imbalance_action_type(imbalance_action_type)
270
+ response = self.client.get_response(request)
271
+ return response