webull-openapi-python-sdk 2.0.7__tar.gz → 2.0.9__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 (294) hide show
  1. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/PKG-INFO +1 -1
  2. webull_openapi_python_sdk-2.0.9/samples/__init__.py +1 -0
  3. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/data/data_client.py +19 -0
  4. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/trade/trade_client_v3.py +328 -0
  5. webull_openapi_python_sdk-2.0.9/webull/__init__.py +1 -0
  6. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/__init__.py +1 -1
  7. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/common/region.py +4 -0
  8. webull_openapi_python_sdk-2.0.9/webull/core/data/endpoints.json +46 -0
  9. webull_openapi_python_sdk-2.0.9/webull/data/__init__.py +3 -0
  10. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/data_client.py +2 -0
  11. webull_openapi_python_sdk-2.0.9/webull/data/quotes/option_market_data.py +71 -0
  12. webull_openapi_python_sdk-2.0.9/webull/data/request/get_option_bars_request.py +73 -0
  13. webull_openapi_python_sdk-2.0.9/webull/data/request/get_option_snapshot_request.py +48 -0
  14. webull_openapi_python_sdk-2.0.9/webull/data/request/get_option_tick_request.py +52 -0
  15. webull_openapi_python_sdk-2.0.9/webull/trade/__init__.py +1 -0
  16. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/trade/v2/account_info_v2.py +3 -3
  17. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/trade/v3/order_opration_v3.py +7 -7
  18. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull_openapi_python_sdk.egg-info/PKG-INFO +1 -1
  19. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull_openapi_python_sdk.egg-info/SOURCES.txt +4 -0
  20. webull_openapi_python_sdk-2.0.7/samples/__init__.py +0 -1
  21. webull_openapi_python_sdk-2.0.7/webull/__init__.py +0 -1
  22. webull_openapi_python_sdk-2.0.7/webull/core/data/endpoints.json +0 -27
  23. webull_openapi_python_sdk-2.0.7/webull/data/__init__.py +0 -3
  24. webull_openapi_python_sdk-2.0.7/webull/trade/__init__.py +0 -1
  25. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/ChangeLog.txt +0 -0
  26. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/LICENSE +0 -0
  27. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/MANIFEST.in +0 -0
  28. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/NOTICE +0 -0
  29. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/README.rst +0 -0
  30. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/account/__init__.py +0 -0
  31. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/account/account_client.py +0 -0
  32. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/assets/__init__.py +0 -0
  33. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/assets/assets_client.py +0 -0
  34. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/data/__init__.py +0 -0
  35. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/data/data_client_event.py +0 -0
  36. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/data/data_streaming_client.py +0 -0
  37. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/data/data_streaming_client_async.py +0 -0
  38. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/data/data_streaming_client_event.py +0 -0
  39. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/order/__init__.py +0 -0
  40. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/order/order_option_client.py +0 -0
  41. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/order/order_stock_client.py +0 -0
  42. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/screener/__init__.py +0 -0
  43. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/screener/screener_client.py +0 -0
  44. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/trade/__init__.py +0 -0
  45. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/trade/trade_client.py +0 -0
  46. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/trade/trade_client_v2.py +0 -0
  47. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/trade/trade_client_v3_event.py +0 -0
  48. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/trade/trade_event_client.py +0 -0
  49. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/watchlist/__init__.py +0 -0
  50. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/samples/watchlist/watchlist_client.py +0 -0
  51. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/setup.cfg +0 -0
  52. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/setup.py +0 -0
  53. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/auth/__init__.py +0 -0
  54. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/auth/algorithm/__init__.py +0 -0
  55. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/auth/algorithm/sha_hmac1.py +0 -0
  56. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/auth/algorithm/sha_hmac256.py +0 -0
  57. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/auth/algorithm/sha_hmac256_new.py +0 -0
  58. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/auth/composer/__init__.py +0 -0
  59. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/auth/composer/default_signature_composer.py +0 -0
  60. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/auth/credentials.py +0 -0
  61. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/auth/signers/__init__.py +0 -0
  62. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/auth/signers/app_key_signer.py +0 -0
  63. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/auth/signers/signer.py +0 -0
  64. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/auth/signers/signer_factory.py +0 -0
  65. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/cache/__init__.py +0 -0
  66. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/client.py +0 -0
  67. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/common/__init__.py +0 -0
  68. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/common/api_type.py +0 -0
  69. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/common/easy_enum.py +0 -0
  70. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/compat.py +0 -0
  71. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/context/__init__.py +0 -0
  72. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/context/request_context_holder.py +0 -0
  73. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/data/retry_config.json +0 -0
  74. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/endpoint/__init__.py +0 -0
  75. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/endpoint/chained_endpoint_resolver.py +0 -0
  76. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/endpoint/default_endpoint_resolver.py +0 -0
  77. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/endpoint/local_config_regional_endpoint_resolver.py +0 -0
  78. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/endpoint/resolver_endpoint_request.py +0 -0
  79. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/endpoint/user_customized_endpoint_resolver.py +0 -0
  80. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/exception/__init__.py +0 -0
  81. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/exception/error_code.py +0 -0
  82. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/exception/error_msg.py +0 -0
  83. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/exception/exceptions.py +0 -0
  84. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/headers.py +0 -0
  85. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/__init__.py +0 -0
  86. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/initializer/__init__.py +0 -0
  87. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/initializer/client_initializer.py +0 -0
  88. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/initializer/config/__init__.py +0 -0
  89. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/initializer/config/bean/__init__.py +0 -0
  90. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/initializer/config/bean/query_config_request.py +0 -0
  91. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/initializer/config/config_operation.py +0 -0
  92. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/initializer/token/__init__.py +0 -0
  93. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/initializer/token/bean/__init__.py +0 -0
  94. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/initializer/token/bean/access_token.py +0 -0
  95. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/initializer/token/bean/check_token_request.py +0 -0
  96. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/initializer/token/bean/create_token_request.py +0 -0
  97. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/initializer/token/bean/refresh_token_request.py +0 -0
  98. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/initializer/token/token_manager.py +0 -0
  99. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/initializer/token/token_operation.py +0 -0
  100. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/initializer/token/token_storage.py +0 -0
  101. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/method_type.py +0 -0
  102. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/protocol_type.py +0 -0
  103. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/request.py +0 -0
  104. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/http/response.py +0 -0
  105. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/request.py +0 -0
  106. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/retry/__init__.py +0 -0
  107. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/retry/backoff_strategy.py +0 -0
  108. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/retry/retry_condition.py +0 -0
  109. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/retry/retry_policy.py +0 -0
  110. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/retry/retry_policy_context.py +0 -0
  111. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/utils/__init__.py +0 -0
  112. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/utils/common.py +0 -0
  113. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/utils/data.py +0 -0
  114. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/utils/desensitize.py +0 -0
  115. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/core/utils/validation.py +0 -0
  116. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/common/__init__.py +0 -0
  117. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/common/category.py +0 -0
  118. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/common/connect_ack.py +0 -0
  119. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/common/contract_type.py +0 -0
  120. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/common/direction.py +0 -0
  121. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/common/exchange_code.py +0 -0
  122. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/common/exercise_style.py +0 -0
  123. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/common/expiration_cycle.py +0 -0
  124. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/common/instrument_status.py +0 -0
  125. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/common/option_type.py +0 -0
  126. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/common/subscribe_type.py +0 -0
  127. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/common/timespan.py +0 -0
  128. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/data_streaming_client.py +0 -0
  129. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/internal/__init__.py +0 -0
  130. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/internal/default_retry_policy.py +0 -0
  131. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/internal/exceptions.py +0 -0
  132. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/internal/quotes_client.py +0 -0
  133. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/internal/quotes_decoder.py +0 -0
  134. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/internal/quotes_payload_decoder.py +0 -0
  135. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/internal/quotes_topic.py +0 -0
  136. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/__init__.py +0 -0
  137. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/crypto_market_data.py +0 -0
  138. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/event_market_data.py +0 -0
  139. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/futures_market_data.py +0 -0
  140. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/instrument.py +0 -0
  141. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/market_data.py +0 -0
  142. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/market_streaming_data.py +0 -0
  143. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/screener.py +0 -0
  144. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/__init__.py +0 -0
  145. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/ask_bid_result.py +0 -0
  146. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/basic_result.py +0 -0
  147. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/broker_result.py +0 -0
  148. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/event_depth_decoder.py +0 -0
  149. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/event_depth_result.py +0 -0
  150. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/event_snapshot_decoder.py +0 -0
  151. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/event_snapshot_result.py +0 -0
  152. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/event_tick_decoder.py +0 -0
  153. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/event_tick_result.py +0 -0
  154. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/message_pb2.py +0 -0
  155. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/order_result.py +0 -0
  156. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/payload_type.py +0 -0
  157. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/quote_decoder.py +0 -0
  158. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/quote_result.py +0 -0
  159. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/snapshot_decoder.py +0 -0
  160. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/snapshot_result.py +0 -0
  161. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/tick_decoder.py +0 -0
  162. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/subscribe/tick_result.py +0 -0
  163. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/quotes/watchlist.py +0 -0
  164. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/__init__.py +0 -0
  165. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_analyst_rating_request.py +0 -0
  166. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_analyst_target_price_request.py +0 -0
  167. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_batch_historical_bars_request.py +0 -0
  168. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_company_profile_request.py +0 -0
  169. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_corp_action_request.py +0 -0
  170. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_crypto_historical_bars_request.py +0 -0
  171. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_crypto_instruments_request.py +0 -0
  172. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_crypto_snapshot_request.py +0 -0
  173. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_eod_bars_request.py +0 -0
  174. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_event_bars_request.py +0 -0
  175. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_event_depth_request.py +0 -0
  176. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_event_events_request.py +0 -0
  177. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_event_instrument_request.py +0 -0
  178. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_event_series_categories.py +0 -0
  179. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_event_series_request.py +0 -0
  180. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_event_snapshot_request.py +0 -0
  181. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_event_tick_request.py +0 -0
  182. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_footprint_request.py +0 -0
  183. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_futures_depth_request.py +0 -0
  184. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_futures_footprint_request.py +0 -0
  185. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_futures_historical_bars_request.py +0 -0
  186. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_futures_instruments_by_code_request.py +0 -0
  187. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_futures_instruments_request.py +0 -0
  188. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_futures_product_class.py +0 -0
  189. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_futures_products_request.py +0 -0
  190. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_futures_snapshot_request.py +0 -0
  191. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_futures_tick_request.py +0 -0
  192. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_historical_bars_request.py +0 -0
  193. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_instruments_request.py +0 -0
  194. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_noii_bars_request.py +0 -0
  195. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_noii_snapshot_request.py +0 -0
  196. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_quotes_request.py +0 -0
  197. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_snapshot_request.py +0 -0
  198. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/get_tick_request.py +0 -0
  199. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/screener/__init__.py +0 -0
  200. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/screener/get_gainers_losers_request.py +0 -0
  201. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/screener/get_most_active_request.py +0 -0
  202. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/subscribe_request.py +0 -0
  203. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/unsubscribe_request.py +0 -0
  204. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/watchlist/__init__.py +0 -0
  205. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/watchlist/add_watchlist_instruments_request.py +0 -0
  206. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/watchlist/create_watchlist_request.py +0 -0
  207. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/watchlist/delete_watchlist_request.py +0 -0
  208. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/watchlist/get_watchlist_instruments_request.py +0 -0
  209. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/watchlist/get_watchlist_request.py +0 -0
  210. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/watchlist/remove_watchlist_instruments_request.py +0 -0
  211. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/watchlist/update_watchlist_instruments_request.py +0 -0
  212. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/data/request/watchlist/update_watchlist_request.py +0 -0
  213. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/common/__init__.py +0 -0
  214. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/common/account_type.py +0 -0
  215. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/common/category.py +0 -0
  216. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/common/combo_ticker_type.py +0 -0
  217. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/common/combo_type.py +0 -0
  218. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/common/currency.py +0 -0
  219. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/common/forbid_reason.py +0 -0
  220. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/common/instrument_type.py +0 -0
  221. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/common/markets.py +0 -0
  222. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/common/order_entrust_type.py +0 -0
  223. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/common/order_side.py +0 -0
  224. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/common/order_status.py +0 -0
  225. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/common/order_tif.py +0 -0
  226. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/common/order_type.py +0 -0
  227. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/common/position_intent.py +0 -0
  228. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/common/trade_policy.py +0 -0
  229. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/common/trading_date_type.py +0 -0
  230. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/common/trailing_type.py +0 -0
  231. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/events/__init__.py +0 -0
  232. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/events/default_retry_policy.py +0 -0
  233. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/events/events_pb2.py +0 -0
  234. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/events/events_pb2_grpc.py +0 -0
  235. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/events/signature_composer.py +0 -0
  236. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/events/types.py +0 -0
  237. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/__init__.py +0 -0
  238. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/cancel_order_request.py +0 -0
  239. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/get_account_balance_request.py +0 -0
  240. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/get_account_positions_request.py +0 -0
  241. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/get_account_profile_request.py +0 -0
  242. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/get_app_subscriptions.py +0 -0
  243. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/get_open_orders_request.py +0 -0
  244. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/get_order_detail_request.py +0 -0
  245. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/get_today_orders_request.py +0 -0
  246. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/get_trade_calendar_request.py +0 -0
  247. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/get_trade_instrument_detail_request.py +0 -0
  248. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/get_trade_security_detail_request.py +0 -0
  249. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/get_tradeable_instruments_request.py +0 -0
  250. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/palce_order_request.py +0 -0
  251. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/place_order_request.py +0 -0
  252. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/place_order_request_v2.py +0 -0
  253. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/replace_order_request.py +0 -0
  254. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/replace_order_request_v2.py +0 -0
  255. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v2/__init__.py +0 -0
  256. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v2/cancel_option_request.py +0 -0
  257. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v2/cancel_order_request.py +0 -0
  258. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v2/get_account_balance_request.py +0 -0
  259. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v2/get_account_list.py +0 -0
  260. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v2/get_account_list_request.py +0 -0
  261. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v2/get_account_position_details_request.py +0 -0
  262. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v2/get_account_positions_request.py +0 -0
  263. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v2/get_order_detail_request.py +0 -0
  264. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v2/get_order_history_request.py +0 -0
  265. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v2/get_order_open_request.py +0 -0
  266. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v2/palce_order_request.py +0 -0
  267. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v2/place_option_request.py +0 -0
  268. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v2/place_order_request.py +0 -0
  269. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v2/preview_option_request.py +0 -0
  270. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v2/preview_order_request.py +0 -0
  271. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v2/replace_option_request.py +0 -0
  272. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v2/replace_order_request.py +0 -0
  273. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v3/__init__.py +0 -0
  274. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v3/batch_place_order_request.py +0 -0
  275. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v3/cancel_order_request.py +0 -0
  276. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v3/get_order_detail_request.py +0 -0
  277. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v3/get_order_history_request.py +0 -0
  278. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v3/get_order_open_request.py +0 -0
  279. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v3/place_order_request.py +0 -0
  280. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v3/preview_order_request.py +0 -0
  281. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/request/v3/replace_order_request.py +0 -0
  282. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/trade/__init__.py +0 -0
  283. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/trade/account_info.py +0 -0
  284. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/trade/order_operation.py +0 -0
  285. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/trade/trade_calendar.py +0 -0
  286. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/trade/trade_instrument.py +0 -0
  287. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/trade/v2/__init__.py +0 -0
  288. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/trade/v2/order_operation_v2.py +0 -0
  289. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/trade/v3/__init__.py +0 -0
  290. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/trade_client.py +0 -0
  291. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull/trade/trade_events_client.py +0 -0
  292. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull_openapi_python_sdk.egg-info/dependency_links.txt +0 -0
  293. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/webull_openapi_python_sdk.egg-info/requires.txt +0 -0
  294. {webull_openapi_python_sdk-2.0.7 → webull_openapi_python_sdk-2.0.9}/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.7
3
+ Version: 2.0.9
4
4
  Summary: Webull Python SDK.
5
5
  Home-page:
6
6
  Author: Webull
@@ -0,0 +1 @@
1
+ __version__ = '2.0.9'
@@ -24,6 +24,7 @@ optional_api_endpoint = "<api_endpoint>"
24
24
  your_app_key = "<your_app_key>"
25
25
  your_app_secret = "<your_app_secret>"
26
26
  region_id = "<region_id>"
27
+
27
28
  # 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
29
  # 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
30
  # 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.
@@ -145,3 +146,21 @@ if __name__ == '__main__':
145
146
  res = data_client.market_data.get_noii_snapshot("AAPL", Category.US_STOCK.name, "PRE_CLOSE")
146
147
  if res.status_code == 200:
147
148
  print('get_noii_snapshot (closing):', res.json())
149
+
150
+ # Option market data - Historical bars
151
+ # Rate limit: 1 request per second per App Key
152
+ res = data_client.option_market_data.get_option_history_bars('AAPL260522C00300000', Category.US_OPTION.name, Timespan.M1.name)
153
+ if res.status_code == 200:
154
+ print('get_option_history_bars:', res.json())
155
+
156
+ # Option market data - Tick
157
+ # Rate limit: 60 requests per minute
158
+ res = data_client.option_market_data.get_option_tick("AAPL260522C00300000", Category.US_OPTION.name, count=30)
159
+ if res.status_code == 200:
160
+ print('get_option_tick:', res.json())
161
+
162
+ # Option market data - Snapshot
163
+ # Rate limit: 60 requests per minute
164
+ res = data_client.option_market_data.get_option_snapshot("AAPL260522C00300000", Category.US_OPTION.name)
165
+ if res.status_code == 200:
166
+ print('get_option_snapshot:', res.json())
@@ -529,3 +529,331 @@ if __name__ == '__main__':
529
529
  res = trade_client.order_v3.get_order_detail(account_id, alog_client_order_id)
530
530
  if res.status_code == 200:
531
531
  print('get order detail res:', res.json())
532
+
533
+ # ============================================================
534
+ # Stop Loss Order Example (HK Market)
535
+ # ============================================================
536
+ stop_loss_client_order_id = uuid.uuid4().hex
537
+ print('stop loss client order id:', stop_loss_client_order_id)
538
+ new_stop_loss_orders = [
539
+ {
540
+ "combo_type": "NORMAL",
541
+ "client_order_id": stop_loss_client_order_id,
542
+ "symbol": "00700",
543
+ "instrument_type": "EQUITY",
544
+ "market": "HK",
545
+ "order_type": "STOP_LOSS",
546
+ "quantity": "200",
547
+ "stop_price": "560.35",
548
+ "support_trading_session": "CORE",
549
+ "side": "BUY",
550
+ "time_in_force": "DAY",
551
+ "entrust_type": "QTY",
552
+ "trigger_price_type": "PRICE"
553
+ }
554
+ ]
555
+
556
+ res = trade_client.order_v3.place_order(account_id, new_stop_loss_orders)
557
+ if res.status_code == 200:
558
+ print('place stop loss order res:', res.json())
559
+ sleep(5)
560
+
561
+ replace_stop_loss_orders = [
562
+ {
563
+ "client_order_id": stop_loss_client_order_id,
564
+ "stop_price": "560.37",
565
+ "quantity": "200"
566
+ }
567
+ ]
568
+ res = trade_client.order_v3.replace_order(account_id, replace_stop_loss_orders)
569
+ if res.status_code == 200:
570
+ print('replace stop loss order res:', res.json())
571
+ sleep(5)
572
+
573
+ res = trade_client.order_v3.cancel_order(account_id, stop_loss_client_order_id)
574
+ if res.status_code == 200:
575
+ print('cancel stop loss order res:', res.json())
576
+
577
+ res = trade_client.order_v3.get_order_history(account_id)
578
+ if res.status_code == 200:
579
+ print('get order history res:', res.json())
580
+
581
+ res = trade_client.order_v3.get_order_detail(account_id, stop_loss_client_order_id)
582
+ if res.status_code == 200:
583
+ print('get stop loss order detail res:', res.json())
584
+
585
+ # ============================================================
586
+ # Stop Loss Limit Order Example (HK Market)
587
+ # ============================================================
588
+ stop_loss_limit_client_order_id = uuid.uuid4().hex
589
+ print('stop loss limit client order id:', stop_loss_limit_client_order_id)
590
+ new_stop_loss_limit_orders = [
591
+ {
592
+ "combo_type": "NORMAL",
593
+ "client_order_id": stop_loss_limit_client_order_id,
594
+ "symbol": "00700",
595
+ "instrument_type": "EQUITY",
596
+ "market": "HK",
597
+ "order_type": "STOP_LOSS_LIMIT",
598
+ "quantity": "200",
599
+ "stop_price": "560.35",
600
+ "limit_price": "562.21",
601
+ "support_trading_session": "CORE",
602
+ "side": "BUY",
603
+ "time_in_force": "DAY",
604
+ "entrust_type": "QTY",
605
+ "trigger_price_type": "PRICE"
606
+ }
607
+ ]
608
+
609
+ res = trade_client.order_v3.place_order(account_id, new_stop_loss_limit_orders)
610
+ if res.status_code == 200:
611
+ print('place stop loss limit order res:', res.json())
612
+ sleep(5)
613
+
614
+ replace_stop_loss_limit_orders = [
615
+ {
616
+ "client_order_id": stop_loss_limit_client_order_id,
617
+ "stop_price": "560.39",
618
+ "limit_price": "562.69",
619
+ "quantity": "200"
620
+ }
621
+ ]
622
+ res = trade_client.order_v3.replace_order(account_id, replace_stop_loss_limit_orders)
623
+ if res.status_code == 200:
624
+ print('replace stop loss limit order res:', res.json())
625
+ sleep(5)
626
+
627
+ res = trade_client.order_v3.cancel_order(account_id, stop_loss_limit_client_order_id)
628
+ if res.status_code == 200:
629
+ print('cancel stop loss limit order res:', res.json())
630
+
631
+ res = trade_client.order_v3.get_order_history(account_id)
632
+ if res.status_code == 200:
633
+ print('get order history res:', res.json())
634
+
635
+ res = trade_client.order_v3.get_order_detail(account_id, stop_loss_limit_client_order_id)
636
+ if res.status_code == 200:
637
+ print('get stop loss limit order detail res:', res.json())
638
+
639
+ # ============================================================
640
+ # Touch (Market) Order Example (HK Market)
641
+ # ============================================================
642
+ touch_mkt_client_order_id = uuid.uuid4().hex
643
+ print('touch mkt client order id:', touch_mkt_client_order_id)
644
+ new_touch_mkt_orders = [
645
+ {
646
+ "combo_type": "NORMAL",
647
+ "client_order_id": touch_mkt_client_order_id,
648
+ "symbol": "00700",
649
+ "instrument_type": "EQUITY",
650
+ "market": "HK",
651
+ "order_type": "TOUCH_MKT",
652
+ "quantity": "200",
653
+ "stop_price": "540.35",
654
+ "support_trading_session": "CORE",
655
+ "side": "BUY",
656
+ "time_in_force": "DAY",
657
+ "entrust_type": "QTY",
658
+ "trigger_price_type": "PRICE"
659
+ }
660
+ ]
661
+
662
+ res = trade_client.order_v3.place_order(account_id, new_touch_mkt_orders)
663
+ if res.status_code == 200:
664
+ print('place touch mkt order res:', res.json())
665
+ sleep(5)
666
+
667
+ replace_touch_mkt_orders = [
668
+ {
669
+ "client_order_id": touch_mkt_client_order_id,
670
+ "stop_price": "540.67",
671
+ "quantity": "200",
672
+ "trigger_price_type": "PRICE"
673
+ }
674
+ ]
675
+ res = trade_client.order_v3.replace_order(account_id, replace_touch_mkt_orders)
676
+ if res.status_code == 200:
677
+ print('replace touch mkt order res:', res.json())
678
+ sleep(5)
679
+
680
+ res = trade_client.order_v3.cancel_order(account_id, touch_mkt_client_order_id)
681
+ if res.status_code == 200:
682
+ print('cancel touch mkt order res:', res.json())
683
+
684
+ res = trade_client.order_v3.get_order_history(account_id)
685
+ if res.status_code == 200:
686
+ print('get order history res:', res.json())
687
+
688
+ res = trade_client.order_v3.get_order_detail(account_id, touch_mkt_client_order_id)
689
+ if res.status_code == 200:
690
+ print('get touch mkt order detail res:', res.json())
691
+
692
+ # ============================================================
693
+ # Touch Limit Order Example (HK Market)
694
+ # ============================================================
695
+ touch_limit_client_order_id = uuid.uuid4().hex
696
+ print('touch limit client order id:', touch_limit_client_order_id)
697
+ new_touch_limit_orders = [
698
+ {
699
+ "combo_type": "NORMAL",
700
+ "client_order_id": touch_limit_client_order_id,
701
+ "symbol": "00700",
702
+ "instrument_type": "EQUITY",
703
+ "market": "HK",
704
+ "order_type": "TOUCH_MKT",
705
+ "quantity": "200",
706
+ "stop_price": "540.35",
707
+ "limit_price": "535.35",
708
+ "support_trading_session": "CORE",
709
+ "side": "BUY",
710
+ "time_in_force": "DAY",
711
+ "entrust_type": "QTY",
712
+ "trigger_price_type": "PRICE"
713
+ }
714
+ ]
715
+
716
+ res = trade_client.order_v3.place_order(account_id, new_touch_limit_orders)
717
+ if res.status_code == 200:
718
+ print('place touch limit order res:', res.json())
719
+ sleep(5)
720
+
721
+ replace_touch_limit_orders = [
722
+ {
723
+ "client_order_id": touch_limit_client_order_id,
724
+ "stop_price": "540.67",
725
+ "limit_price": "536.67",
726
+ "quantity": "200",
727
+ "trigger_price_type": "PRICE"
728
+ }
729
+ ]
730
+ res = trade_client.order_v3.replace_order(account_id, replace_touch_limit_orders)
731
+ if res.status_code == 200:
732
+ print('replace touch limit order res:', res.json())
733
+ sleep(5)
734
+
735
+ res = trade_client.order_v3.cancel_order(account_id, touch_limit_client_order_id)
736
+ if res.status_code == 200:
737
+ print('cancel touch limit order res:', res.json())
738
+
739
+ res = trade_client.order_v3.get_order_history(account_id)
740
+ if res.status_code == 200:
741
+ print('get order history res:', res.json())
742
+
743
+ res = trade_client.order_v3.get_order_detail(account_id, touch_limit_client_order_id)
744
+ if res.status_code == 200:
745
+ print('get touch limit order detail res:', res.json())
746
+
747
+ # ============================================================
748
+ # Trailing Stop Loss Order Example (HK Market)
749
+ # ============================================================
750
+ trailing_stop_loss_client_order_id = uuid.uuid4().hex
751
+ print('trailing stop loss client order id:', trailing_stop_loss_client_order_id)
752
+ new_trailing_stop_loss_orders = [
753
+ {
754
+ "combo_type": "NORMAL",
755
+ "client_order_id": trailing_stop_loss_client_order_id,
756
+ "symbol": "00700",
757
+ "instrument_type": "EQUITY",
758
+ "market": "HK",
759
+ "order_type": "TRAILING_STOP_LOSS",
760
+ "quantity": "200",
761
+ "trailing_stop_step": "0.1",
762
+ "trailing_type": "PERCENTAGE",
763
+ "support_trading_session": "CORE",
764
+ "side": "BUY",
765
+ "time_in_force": "DAY",
766
+ "entrust_type": "QTY",
767
+ "trigger_price_type": "PRICE"
768
+ }
769
+ ]
770
+
771
+ res = trade_client.order_v3.place_order(account_id, new_trailing_stop_loss_orders)
772
+ if res.status_code == 200:
773
+ print('place trailing stop loss order res:', res.json())
774
+ sleep(5)
775
+
776
+ replace_trailing_stop_loss_orders = [
777
+ {
778
+ "client_order_id": trailing_stop_loss_client_order_id,
779
+ "stop_price": "560.47",
780
+ "quantity": "200",
781
+ "trailing_stop_step": "0.15",
782
+ "trailing_type": "PERCENTAGE",
783
+ "trigger_price_type": "PRICE"
784
+ }
785
+ ]
786
+ res = trade_client.order_v3.replace_order(account_id, replace_trailing_stop_loss_orders)
787
+ if res.status_code == 200:
788
+ print('replace trailing stop loss order res:', res.json())
789
+ sleep(5)
790
+
791
+ res = trade_client.order_v3.cancel_order(account_id, trailing_stop_loss_client_order_id)
792
+ if res.status_code == 200:
793
+ print('cancel trailing stop loss order res:', res.json())
794
+
795
+ res = trade_client.order_v3.get_order_history(account_id)
796
+ if res.status_code == 200:
797
+ print('get order history res:', res.json())
798
+
799
+ res = trade_client.order_v3.get_order_detail(account_id, trailing_stop_loss_client_order_id)
800
+ if res.status_code == 200:
801
+ print('get trailing stop loss order detail res:', res.json())
802
+
803
+ # ============================================================
804
+ # Trailing Stop Loss Limit Order Example (HK Market)
805
+ # ============================================================
806
+ trailing_stop_loss_limit_client_order_id = uuid.uuid4().hex
807
+ print('trailing stop loss limit client order id:', trailing_stop_loss_limit_client_order_id)
808
+ new_trailing_stop_loss_limit_orders = [
809
+ {
810
+ "combo_type": "NORMAL",
811
+ "client_order_id": trailing_stop_loss_limit_client_order_id,
812
+ "symbol": "00700",
813
+ "instrument_type": "EQUITY",
814
+ "market": "HK",
815
+ "order_type": "TRAILING_STOP_LOSS_LIMIT",
816
+ "quantity": "200",
817
+ "trailing_stop_step": "0.1",
818
+ "trailing_limit_price": "580",
819
+ "trailing_type": "PERCENTAGE",
820
+ "support_trading_session": "CORE",
821
+ "side": "BUY",
822
+ "time_in_force": "DAY",
823
+ "entrust_type": "QTY",
824
+ "trigger_price_type": "PRICE"
825
+ }
826
+ ]
827
+
828
+ res = trade_client.order_v3.place_order(account_id, new_trailing_stop_loss_limit_orders)
829
+ if res.status_code == 200:
830
+ print('place trailing stop loss limit order res:', res.json())
831
+ sleep(5)
832
+
833
+ replace_trailing_stop_loss_limit_orders = [
834
+ {
835
+ "client_order_id": trailing_stop_loss_limit_client_order_id,
836
+ "stop_price": "560.77",
837
+ "quantity": "200",
838
+ "trailing_stop_step": "0.15",
839
+ "trailing_limit_price": "581",
840
+ "trailing_type": "PERCENTAGE",
841
+ "trigger_price_type": "PRICE"
842
+ }
843
+ ]
844
+ res = trade_client.order_v3.replace_order(account_id, replace_trailing_stop_loss_limit_orders)
845
+ if res.status_code == 200:
846
+ print('replace trailing stop loss limit order res:', res.json())
847
+ sleep(5)
848
+
849
+ res = trade_client.order_v3.cancel_order(account_id, trailing_stop_loss_limit_client_order_id)
850
+ if res.status_code == 200:
851
+ print('cancel trailing stop loss limit order res:', res.json())
852
+
853
+ res = trade_client.order_v3.get_order_history(account_id)
854
+ if res.status_code == 200:
855
+ print('get order history res:', res.json())
856
+
857
+ res = trade_client.order_v3.get_order_detail(account_id, trailing_stop_loss_limit_client_order_id)
858
+ if res.status_code == 200:
859
+ print('get trailing stop loss limit order detail res:', res.json())
@@ -0,0 +1 @@
1
+ __version__ = '2.0.9'
@@ -1,4 +1,4 @@
1
- __version__ = '2.0.7'
1
+ __version__ = '2.0.9'
2
2
 
3
3
  import logging
4
4
 
@@ -6,3 +6,7 @@ class Region(Enum):
6
6
  HK = 'hk'
7
7
  JP = 'jp'
8
8
  SG = 'sg'
9
+ TH = 'th'
10
+ AU = 'au'
11
+ MY = 'my'
12
+ UK = 'uk'
@@ -0,0 +1,46 @@
1
+ {
2
+ "default_region": "us",
3
+ "regions": ["us", "hk", "jp", "sg", "th", "au", "my", "uk"],
4
+ "region_mapping": {
5
+ "us": {
6
+ "api": "api.webull.com",
7
+ "quotes-api": "data-api.webull.com",
8
+ "events-api": "events-api.webull.com"
9
+ },
10
+ "hk": {
11
+ "api": "api.webull.hk",
12
+ "quotes-api": "data-api.webull.hk",
13
+ "events-api": "events-api.webull.hk"
14
+ },
15
+ "jp": {
16
+ "api": "api.webull.co.jp",
17
+ "quotes-api": "data-api.webull.co.jp",
18
+ "events-api": "events-api.webull.co.jp"
19
+ },
20
+ "sg": {
21
+ "api": "api.webull.com.sg",
22
+ "quotes-api": "data-api.webull.com.sg",
23
+ "events-api": "events-api.webull.com.sg"
24
+ },
25
+ "th": {
26
+ "api": "api.webull.co.th",
27
+ "quotes-api": "data-api.webull.co.th",
28
+ "events-api": "events-api.webull.co.th"
29
+ },
30
+ "au": {
31
+ "api": "api.webull.com.au",
32
+ "quotes-api": "data-api.webull.com.au",
33
+ "events-api": "events-api.webull.com.au"
34
+ },
35
+ "my": {
36
+ "api": "api.webull.com.my",
37
+ "quotes-api": "data-api.webull.com.my",
38
+ "events-api": "events-api.webull.com.my"
39
+ },
40
+ "uk": {
41
+ "api": "api.webull-uk.com",
42
+ "quotes-api": "data-api.webull-uk.com",
43
+ "events-api": "events-api.webull-uk.com"
44
+ }
45
+ }
46
+ }
@@ -0,0 +1,3 @@
1
+ # coding=utf-8
2
+
3
+ __version__ = '2.0.9'
@@ -23,6 +23,7 @@ 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.option_market_data import OptionMarketData
26
27
  from webull.data.quotes.screener import Screener
27
28
  from webull.data.quotes.watchlist import Watchlist
28
29
 
@@ -35,6 +36,7 @@ class DataClient:
35
36
  self.market_data = MarketData(api_client)
36
37
  self.crypto_market_data = CryptoMarketData(api_client)
37
38
  self.futures_market_data = FuturesMarketData(api_client)
39
+ self.option_market_data = OptionMarketData(api_client)
38
40
  self.event_market_data = EventMarketData(api_client)
39
41
  self.screener = Screener(api_client)
40
42
  self.watchlist = Watchlist(api_client)
@@ -0,0 +1,71 @@
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
+ from webull.data.request.get_option_bars_request import GetOptionBarsRequest
16
+ from webull.data.request.get_option_snapshot_request import GetOptionSnapshotRequest
17
+ from webull.data.request.get_option_tick_request import GetOptionTickRequest
18
+
19
+
20
+ class OptionMarketData:
21
+ def __init__(self, api_client):
22
+ self.client = api_client
23
+
24
+ def get_option_history_bars(self, symbols, category, timespan, count='200', real_time_required=None):
25
+ """
26
+ Batch query K-line data for multiple option symbols, returning aggregated data within the window.
27
+ According to the last N K-lines of the option code, it supports various granularity K-lines such as m1 and m5.
28
+
29
+ :param symbols: List of option security codes
30
+ :param category: Security type, enumeration
31
+ :param timespan: K-line interval
32
+ :param count: Number of K-lines to return, default is 200, maximum is 1200
33
+ :param real_time_required: Returns the latest trade quote data. By default, the most recent market data is returned.
34
+ """
35
+ history_bar_request = GetOptionBarsRequest()
36
+ history_bar_request.set_symbols(symbols)
37
+ history_bar_request.set_category(category)
38
+ history_bar_request.set_timespan(timespan)
39
+ history_bar_request.set_count(count)
40
+ history_bar_request.set_real_time_required(real_time_required)
41
+ response = self.client.get_response(history_bar_request)
42
+ return response
43
+
44
+ def get_option_tick(self, symbol, category, count='30'):
45
+ """
46
+ Query tick-by-tick transaction of options according to the option code list.
47
+
48
+ :param symbol: Option securities code
49
+ :param category: Security type, enumeration.
50
+ :param count: The number of lines: the default is 30, and the maximum limit is 1200
51
+ """
52
+ tick_request = GetOptionTickRequest()
53
+ tick_request.set_symbol(symbol)
54
+ tick_request.set_category(category)
55
+ tick_request.set_count(count)
56
+ response = self.client.get_response(tick_request)
57
+ return response
58
+
59
+ def get_option_snapshot(self, symbols, category):
60
+ """
61
+ Query the latest option market snapshots in batches according to the option code list.
62
+
63
+ :param symbols: List of option security codes; for example: single: AAPL260522C00300000 multiple: AAPL260522C00300000,TSLA251219C00450000;
64
+ For each request,up to 20 symbols can be subscribed
65
+ :param category: Security type, enumeration.
66
+ """
67
+ snapshot_request = GetOptionSnapshotRequest()
68
+ snapshot_request.set_symbols(symbols)
69
+ snapshot_request.set_category(category)
70
+ response = self.client.get_response(snapshot_request)
71
+ return response
@@ -0,0 +1,73 @@
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.request import ApiRequest
18
+
19
+
20
+ class GetOptionBarsRequest(ApiRequest):
21
+ """
22
+ Request class for querying historical bars for options.
23
+ Batch query interface to retrieve the last N bars based on option codes,
24
+ time granularity, and type. Supports various granularities like M1, M5, etc.
25
+ """
26
+
27
+ def __init__(self):
28
+ ApiRequest.__init__(self, "/openapi/market-data/option/bars", version='v2', method="GET", query_params={})
29
+
30
+ def set_symbols(self, symbols):
31
+ """
32
+ Set option symbols.
33
+
34
+ :param symbols: List of option symbols, separated by commas; maximum 20 symbols per query.
35
+ Example: "AAPL,TSLA" or ["AAPL", "TSLA"]
36
+ """
37
+ if isinstance(symbols, str):
38
+ self.add_query_param("symbols", symbols)
39
+ elif isinstance(symbols, list):
40
+ self.add_query_param("symbols", ",".join(symbols))
41
+
42
+ def set_category(self, category):
43
+ """
44
+ Set security type.
45
+
46
+ :param category: Security type. Currently only US_OPTION is supported.
47
+ """
48
+ self.add_query_param("category", category)
49
+
50
+ def set_timespan(self, timespan):
51
+ """
52
+ Set bar time granularity.
53
+
54
+ :param timespan: Bar time granularity, e.g., M1, M5, M15, M30, M60, M120, M240, D, W, M, Y
55
+ """
56
+ self.add_query_param("timespan", timespan)
57
+
58
+ def set_count(self, count='200'):
59
+ """
60
+ Set number of bars to return.
61
+
62
+ :param count: Number of bars, default is 200, maximum is 1200.
63
+ """
64
+ self.add_query_param("count", count)
65
+
66
+ def set_real_time_required(self, real_time_required):
67
+ """
68
+ Set whether to include the latest data.
69
+
70
+ :param real_time_required: Whether to include the latest data, default is false.
71
+ """
72
+ if real_time_required is not None:
73
+ self.add_query_param("real_time_required", real_time_required)
@@ -0,0 +1,48 @@
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.request import ApiRequest
18
+
19
+
20
+ class GetOptionSnapshotRequest(ApiRequest):
21
+ """
22
+ Request class for querying real-time quote snapshots for options.
23
+ Returns key market indicators for specified options, including the latest price,
24
+ price change percentage, trading volume, turnover rate, and best bid/ask quotes.
25
+ """
26
+
27
+ def __init__(self):
28
+ ApiRequest.__init__(self, "/openapi/market-data/option/snapshot", version='v2', method="GET", query_params={})
29
+
30
+ def set_symbols(self, symbols):
31
+ """
32
+ Set option symbols.
33
+
34
+ :param symbols: List of option symbols, separated by commas; maximum 20 symbols per query.
35
+ Example: "AAPL260522C00300000,TSLA251219C00450000" or ["AAPL260522C00300000", "TSLA251219C00450000"]
36
+ """
37
+ if isinstance(symbols, str):
38
+ self.add_query_param("symbols", symbols)
39
+ elif isinstance(symbols, list):
40
+ self.add_query_param("symbols", ",".join(symbols))
41
+
42
+ def set_category(self, category):
43
+ """
44
+ Set security type.
45
+
46
+ :param category: Security type. Currently only US_OPTION is supported.
47
+ """
48
+ self.add_query_param("category", category)