mns-common 1.3.2.2__tar.gz → 1.3.2.3__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.

Potentially problematic release.


This version of mns-common might be problematic. Click here for more details.

Files changed (145) hide show
  1. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/PKG-INFO +1 -1
  2. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/em/east_money_etf_api.py +7 -3
  3. mns_common-1.3.2.3/mns_common/api/k_line/__init__.py +11 -0
  4. mns_common-1.3.2.3/mns_common/api/k_line/stock_k_line_data_api.py +106 -0
  5. mns_common-1.3.2.3/mns_common/api/k_line/stock_minute_data_api.py +145 -0
  6. mns_common-1.3.2.3/mns_common/api/qmt/qmt_minunte_tick_data.py +82 -0
  7. mns_common-1.3.2.3/mns_common/component/tfp/__init__.py +7 -0
  8. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/constant/db_name_constant.py +21 -0
  9. mns_common-1.3.2.3/mns_common/db/v2/MongodbUtilV2.py +320 -0
  10. mns_common-1.3.2.3/mns_common/db/v2/__init__.py +7 -0
  11. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common.egg-info/PKG-INFO +1 -1
  12. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common.egg-info/SOURCES.txt +7 -0
  13. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/setup.py +1 -1
  14. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/README.md +0 -0
  15. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/__init__.py +0 -0
  16. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/__init__.py +0 -0
  17. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/akshare/__init__.py +0 -0
  18. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/akshare/k_line_api.py +0 -0
  19. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/akshare/stock_bid_ask_api.py +0 -0
  20. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/akshare/stock_dt_pool.py +0 -0
  21. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/akshare/stock_zb_pool.py +0 -0
  22. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/akshare/stock_zt_pool_api.py +0 -0
  23. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/akshare/yjyg_sync_api.py +0 -0
  24. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/em/__init__.py +0 -0
  25. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/em/east_money_debt_api.py +0 -0
  26. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/em/east_money_stock_api.py +0 -0
  27. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/em/east_money_stock_api_develop.py +0 -0
  28. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/em/east_money_stock_gdfx_free_top_10_api.py +0 -0
  29. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/em/east_money_stock_hk_api.py +0 -0
  30. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/em/east_money_stock_v2_api.py +0 -0
  31. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/em/em_concept_index_api.py +0 -0
  32. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/em/self_choose/__init__.py +0 -0
  33. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/hk/__init__.py +0 -0
  34. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/hk/ths_hk_company_info_api.py +0 -0
  35. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/kpl/__init__.py +0 -0
  36. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/kpl/common/__init__.py +0 -0
  37. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/kpl/common/kpl_common_api.py +0 -0
  38. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/kpl/common/kpl_common_field_constant.py +0 -0
  39. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/kpl/concept/__init__.py +0 -0
  40. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/kpl/concept/kpl_concept_api.py +0 -0
  41. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/kpl/constant/__init__.py +0 -0
  42. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/kpl/constant/kpl_constant.py +0 -0
  43. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/kpl/industry/__init__.py +0 -0
  44. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/kpl/industry/kpl_industry_api.py +0 -0
  45. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/kpl/selection/__init__.py +0 -0
  46. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/kpl/selection/kpl_selection_plate_api.py +0 -0
  47. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/kpl/symbol/__init__.py +0 -0
  48. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/kpl/symbol/kpl_real_time_quotes_api.py +0 -0
  49. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/kpl/symbol/kpl_symbol_common_field_constant.py +0 -0
  50. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/kpl/symbol/symbol_his_quotes_api.py +0 -0
  51. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/msg/__init__.py +0 -0
  52. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/msg/push_msg_api.py +0 -0
  53. {mns_common-1.3.2.2/mns_common/api/ths/company → mns_common-1.3.2.3/mns_common/api/qmt}/__init__.py +0 -0
  54. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/__init__.py +0 -0
  55. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/big_deal/__init__.py +0 -0
  56. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/big_deal/ths_big_deal_api.py +0 -0
  57. {mns_common-1.3.2.2/mns_common/api/us → mns_common-1.3.2.3/mns_common/api/ths/company}/__init__.py +0 -0
  58. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/company/ths_company_announce_api.py +0 -0
  59. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/company/ths_company_info_api.py +0 -0
  60. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/concept/__init__.py +0 -0
  61. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/concept/app/__init__.py +0 -0
  62. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/concept/app/ths_concept_detail_app.py +0 -0
  63. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/concept/app/ths_concept_index_app.py +0 -0
  64. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/concept/web/__init__.py +0 -0
  65. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/concept/web/ths_common_js_api.py +0 -0
  66. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/concept/web/ths_company_info_web.py +0 -0
  67. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/concept/web/ths_concept_detail_web.py +0 -0
  68. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/concept/web/ths_concept_index_web.py +0 -0
  69. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/self_choose/__init__.py +0 -0
  70. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/self_choose/ths_self_choose_api.py +0 -0
  71. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/wen_cai/__init__.py +0 -0
  72. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/wen_cai/ths_wen_cai_api.py +0 -0
  73. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/zt/__init__.py +0 -0
  74. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/zt/ths_stock_zt_pool_api.py +0 -0
  75. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/ths/zt/ths_stock_zt_pool_v2_api.py +0 -0
  76. {mns_common-1.3.2.2/mns_common/component/classify → mns_common-1.3.2.3/mns_common/api/us}/__init__.py +0 -0
  77. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/api/us/ths_us_company_info_api.py +0 -0
  78. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/__init__.py +0 -0
  79. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/cache/__init__.py +0 -0
  80. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/cache/cache_service.py +0 -0
  81. {mns_common-1.3.2.2/mns_common/component/cookie → mns_common-1.3.2.3/mns_common/component/classify}/__init__.py +0 -0
  82. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/classify/symbol_classify_api.py +0 -0
  83. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/classify/symbol_classify_param.py +0 -0
  84. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/common_service_fun_api.py +0 -0
  85. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/company/__init__.py +0 -0
  86. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/company/company_common_service_api.py +0 -0
  87. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/company/company_common_service_new_api.py +0 -0
  88. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/concept/__init__.py +0 -0
  89. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/concept/kpl_concept_common_service_api.py +0 -0
  90. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/concept/ths_concept_common_service_api.py +0 -0
  91. {mns_common-1.3.2.2/mns_common/component/deal → mns_common-1.3.2.3/mns_common/component/cookie}/__init__.py +0 -0
  92. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/cookie/cookie_info_service.py +0 -0
  93. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/data/__init__.py +0 -0
  94. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/data/data_init_api.py +0 -0
  95. {mns_common-1.3.2.2/mns_common/component/hk → mns_common-1.3.2.3/mns_common/component/deal}/__init__.py +0 -0
  96. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/deal/deal_service_api.py +0 -0
  97. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/deal/terminal_enum.py +0 -0
  98. {mns_common-1.3.2.2/mns_common/component/price → mns_common-1.3.2.3/mns_common/component/hk}/__init__.py +0 -0
  99. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/hk/company_hk_service_api.py +0 -0
  100. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/industry/__init__.py +0 -0
  101. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/industry/ths_industry_index_api.py +0 -0
  102. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/k_line/__init__.py +0 -0
  103. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/k_line/clean/__init__.py +0 -0
  104. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/k_line/clean/k_line_param.py +0 -0
  105. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/k_line/clean/sh_small_normal_zt_k_line_check_api.py +0 -0
  106. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/k_line/common/__init__.py +0 -0
  107. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/k_line/common/k_line_common_service_api.py +0 -0
  108. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/k_line/patterns/__init__.py +0 -0
  109. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/k_line/patterns/k_line_patterns_service_api.py +0 -0
  110. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/k_line/patterns/pattern_Enum.py +0 -0
  111. {mns_common-1.3.2.2/mns_common/component/qmt → mns_common-1.3.2.3/mns_common/component/price}/__init__.py +0 -0
  112. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/price/trade_price_service_api.py +0 -0
  113. {mns_common-1.3.2.2/mns_common/component/redis_msg → mns_common-1.3.2.3/mns_common/component/qmt}/__init__.py +0 -0
  114. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/qmt/qmt_buy_service.py +0 -0
  115. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/real_time/__init__.py +0 -0
  116. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/real_time/real_time_common_service_api.py +0 -0
  117. {mns_common-1.3.2.2/mns_common/component/self_choose → mns_common-1.3.2.3/mns_common/component/redis_msg}/__init__.py +0 -0
  118. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/redis_msg/redis_msg_publish_service.py +0 -0
  119. {mns_common-1.3.2.2/mns_common/component/tfp → mns_common-1.3.2.3/mns_common/component/self_choose}/__init__.py +0 -0
  120. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/self_choose/black_list_service_api.py +0 -0
  121. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/self_choose/self_choose_service_api.py +0 -0
  122. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/tfp/stock_tfp_api.py +0 -0
  123. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/trade_date/__init__.py +0 -0
  124. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/trade_date/trade_date_common_service_api.py +0 -0
  125. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/zt/__init__.py +0 -0
  126. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/component/zt/zt_common_service_api.py +0 -0
  127. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/constant/__init__.py +0 -0
  128. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/constant/black_list_classify_enum.py +0 -0
  129. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/constant/price_enum.py +0 -0
  130. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/constant/redis_msg_constant.py +0 -0
  131. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/constant/self_choose_constant.py +0 -0
  132. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/db/MongodbUtil.py +0 -0
  133. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/db/MongodbUtilLocal.py +0 -0
  134. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/db/__init__.py +0 -0
  135. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/utils/__init__.py +0 -0
  136. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/utils/async_fun.py +0 -0
  137. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/utils/cmd_util.py +0 -0
  138. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/utils/data_frame_util.py +0 -0
  139. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/utils/date_handle_util.py +0 -0
  140. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/utils/db_util.py +0 -0
  141. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/utils/file_util.py +0 -0
  142. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common/utils/ip_util.py +0 -0
  143. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common.egg-info/dependency_links.txt +0 -0
  144. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/mns_common.egg-info/top_level.txt +0 -0
  145. {mns_common-1.3.2.2 → mns_common-1.3.2.3}/setup.cfg +0 -0
@@ -1,3 +1,3 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns_common
3
- Version: 1.3.2.2
3
+ Version: 1.3.2.3
@@ -33,7 +33,7 @@ def fund_etf_spot_em() -> pd.DataFrame:
33
33
  "fields": (
34
34
  "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,"
35
35
  "f12,f13,f14,f15,f16,f17,f18,f20,f21,"
36
- "f23,f24,f25,f22,f11,f30,f31,f32,f33,"
36
+ "f23,f24,f25,f26,f22,f11,f30,f31,f32,f33,"
37
37
  "f34,f35,f38,f62,f63,f64,f65,f66,f69,"
38
38
  "f72,f75,f78,f81,f84,f87,f115,f124,f128,"
39
39
  "f136,f152,f184,f297,f402,f441"
@@ -45,6 +45,7 @@ def fund_etf_spot_em() -> pd.DataFrame:
45
45
  temp_df = pd.DataFrame(data_json["data"]["diff"])
46
46
  temp_df.rename(
47
47
  columns={
48
+ "f26": "上市时间",
48
49
  "f12": "代码",
49
50
  "f14": "名称",
50
51
  "f2": "最新价",
@@ -125,7 +126,8 @@ def fund_etf_spot_em() -> pd.DataFrame:
125
126
  "总市值",
126
127
  "数据日期",
127
128
  "更新时间",
128
- "market"
129
+ "market",
130
+ "上市时间"
129
131
  ]
130
132
  ]
131
133
  temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
@@ -196,6 +198,7 @@ def fund_etf_spot_em() -> pd.DataFrame:
196
198
  def get_etf_real_time_quotes():
197
199
  fund_etf_spot_em_df = fund_etf_spot_em()
198
200
  fund_etf_spot_em_df = fund_etf_spot_em_df.rename(columns={
201
+ "上市时间": "list_date",
199
202
  "最新价": "now_price",
200
203
  "涨跌幅": "chg",
201
204
  "基金折价率": "fund_discount_rate",
@@ -262,7 +265,8 @@ def get_etf_real_time_quotes():
262
265
  "latest_share",
263
266
  "data_time",
264
267
  "update_time",
265
- "market"
268
+ "market",
269
+ 'list_date'
266
270
  ]]
267
271
 
268
272
  fund_etf_spot_em_df['disk_ratio'] = round(
@@ -0,0 +1,11 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+ import akshare as ak
9
+
10
+ stock_zh_a_hist_df = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20170301", end_date='20240528', adjust="")
11
+ print(stock_zh_a_hist_df)
@@ -0,0 +1,106 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+ import pandas as pd
9
+ import requests
10
+
11
+
12
+ def stock_k_line_hist(
13
+ symbol: str = "000001",
14
+ period: str = "daily",
15
+ start_date: str = "19700101",
16
+ end_date: str = "20500101",
17
+ adjust: str = "",
18
+ timeout: float = None,
19
+ ) -> pd.DataFrame:
20
+ """
21
+ 东方财富网-行情首页-沪深京 A 股-每日行情
22
+ https://quote.eastmoney.com/concept/sh603777.html?from=classic
23
+ :param symbol: 股票代码
24
+ :type symbol: str
25
+ :param period: choice of {'daily', 'weekly', 'monthly'}
26
+ :type period: str
27
+ :param start_date: 开始date
28
+ :type start_date: str
29
+ :param end_date: 结束date
30
+ :type end_date: str
31
+ :param adjust: choice of {"qfq": "前复权", "hfq": "后复权", "": "不复权"}
32
+ :type adjust: str
33
+ :param timeout: choice of None or a positive float number
34
+ :type timeout: float
35
+ :return: 每日行情
36
+ :rtype: pandas.DataFrame
37
+ """
38
+ adjust_dict = {"qfq": "1", "hfq": "2", "": "0"}
39
+ period_dict = {"daily": "101", "weekly": "102", "monthly": "103"}
40
+ url = "https://push2his.eastmoney.com/api/qt/stock/kline/get"
41
+ params = {
42
+ "fields1": "f1,f2,f3,f4,f5,f6",
43
+ "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f116",
44
+ "ut": "7eea3edcaed734bea9cbfc24409ed989",
45
+ "klt": period_dict[period],
46
+ "fqt": adjust_dict[adjust],
47
+ "secid": symbol,
48
+ "beg": start_date,
49
+ "end": end_date,
50
+ "_": "1623766962675",
51
+ }
52
+ r = requests.get(url, params=params, timeout=timeout)
53
+ data_json = r.json()
54
+ if not (data_json["data"] and data_json["data"]["klines"]):
55
+ return pd.DataFrame()
56
+ temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]["klines"]])
57
+ temp_df.columns = [
58
+ "date",
59
+ "open",
60
+ "close",
61
+ "high",
62
+ "low",
63
+ "volume",
64
+ "amount",
65
+ "pct_chg",
66
+ "chg",
67
+ "change_price",
68
+ "exchange",
69
+ ]
70
+ temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
71
+ temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
72
+ temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
73
+ temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
74
+ temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
75
+ temp_df["volume"] = pd.to_numeric(temp_df["volume"], errors="coerce")
76
+ temp_df["amount"] = pd.to_numeric(temp_df["amount"], errors="coerce")
77
+ temp_df["pct_chg"] = pd.to_numeric(temp_df["pct_chg"], errors="coerce")
78
+ temp_df["chg"] = pd.to_numeric(temp_df["chg"], errors="coerce")
79
+ temp_df["change_price"] = pd.to_numeric(temp_df["change_price"], errors="coerce")
80
+ temp_df["exchange"] = pd.to_numeric(temp_df["exchange"], errors="coerce")
81
+ temp_df = temp_df[
82
+ [
83
+ "date",
84
+ "open",
85
+ "close",
86
+ "high",
87
+ "low",
88
+ "volume",
89
+ "amount",
90
+ "pct_chg",
91
+ "chg",
92
+ "change_price",
93
+ "exchange",
94
+ ]
95
+ ]
96
+ return temp_df
97
+
98
+
99
+ if __name__ == '__main__':
100
+ stock_k_line_hist(
101
+ "1.513180",
102
+ "daily",
103
+ "19700101",
104
+ "20500101",
105
+ "",
106
+ None)
@@ -0,0 +1,145 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+ import pandas as pd
9
+ import requests
10
+
11
+ # symbol 代码
12
+ # 北交所:0 深圳:0 上海:1
13
+ """
14
+ 获取分钟数据
15
+ """
16
+
17
+
18
+ def get_minute_data(symbol, start_date, end_date, period,
19
+ adjust) -> pd.DataFrame:
20
+ """
21
+ 东方财富网-行情首页-沪深京 A 股-每日分时行情
22
+ https://quote.eastmoney.com/concept/sh603777.html?from=classic
23
+ :param symbol: 股票代码
24
+ :type symbol: str
25
+ :param start_date: 开始日期
26
+ :type start_date: str
27
+ :param end_date: 结束日期
28
+ :type end_date: str
29
+ :param period: choice of {'1', '5', '15', '30', '60'}
30
+ :type period: str
31
+ :param adjust: choice of {'', 'qfq', 'hfq'}
32
+ :type adjust: str
33
+ :return: 每日分时行情
34
+ :rtype: pandas.DataFrame
35
+ """
36
+ adjust_map = {
37
+ "": "0",
38
+ "qfq": "1",
39
+ "hfq": "2",
40
+ }
41
+ if period == "1":
42
+ url = "https://push2his.eastmoney.com/api/qt/stock/trends2/get"
43
+ params = {
44
+ "fields1": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",
45
+ "fields2": "f51,f52,f53,f54,f55,f56,f57,f58",
46
+ "ut": "7eea3edcaed734bea9cbfc24409ed989",
47
+ "ndays": "5",
48
+ "iscr": "0",
49
+ "secid": symbol,
50
+ "_": "1623766962675",
51
+ }
52
+ r = requests.get(url, timeout=15, params=params)
53
+ data_json = r.json()
54
+ temp_df = pd.DataFrame(
55
+ [item.split(",") for item in data_json["data"]["trends"]]
56
+ )
57
+ temp_df.columns = [
58
+ "time",
59
+ "open",
60
+ "close",
61
+ "high",
62
+ "low",
63
+ "amount",
64
+ "volume",
65
+ "ava_price",
66
+ ]
67
+ temp_df.index = pd.to_datetime(temp_df["time"])
68
+ temp_df = temp_df[start_date:end_date]
69
+ temp_df.reset_index(drop=True, inplace=True)
70
+ temp_df["volume"] = pd.to_numeric(temp_df["volume"], errors="coerce")
71
+ temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
72
+ temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
73
+ temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
74
+ temp_df["amount"] = pd.to_numeric(temp_df["amount"], errors="coerce")
75
+ temp_df["volume"] = pd.to_numeric(temp_df["volume"], errors="coerce")
76
+ temp_df["ava_price"] = pd.to_numeric(temp_df["ava_price"], errors="coerce")
77
+ temp_df["time"] = pd.to_datetime(temp_df["time"]).astype(str)
78
+ return temp_df
79
+ else:
80
+ url = "https://push2his.eastmoney.com/api/qt/stock/kline/get"
81
+ params = {
82
+ "fields1": "f1,f2,f3,f4,f5,f6",
83
+ "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",
84
+ "ut": "7eea3edcaed734bea9cbfc24409ed989",
85
+ "klt": period,
86
+ "fqt": adjust_map[adjust],
87
+ "secid": symbol,
88
+ "beg": "0",
89
+ "end": "20500000",
90
+ "_": "1630930917857",
91
+ }
92
+ r = requests.get(url, timeout=15, params=params)
93
+ data_json = r.json()
94
+ temp_df = pd.DataFrame(
95
+ [item.split(",") for item in data_json["data"]["klines"]]
96
+ )
97
+ temp_df.columns = [
98
+ "time",
99
+ "open",
100
+ "close",
101
+ "high",
102
+ "low",
103
+ "amount",
104
+ "volume",
105
+ "pct_chg",
106
+ "chg",
107
+ "change",
108
+ "exchange",
109
+ ]
110
+ temp_df.index = pd.to_datetime(temp_df["time"])
111
+ temp_df = temp_df[start_date:end_date]
112
+ temp_df.reset_index(drop=True, inplace=True)
113
+ temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
114
+ temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
115
+ temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
116
+ temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
117
+ temp_df["amount"] = pd.to_numeric(temp_df["amount"], errors="coerce")
118
+ temp_df["volume"] = pd.to_numeric(temp_df["volume"], errors="coerce")
119
+ temp_df["pct_chg"] = pd.to_numeric(temp_df["pct_chg"], errors="coerce")
120
+ temp_df["chg"] = pd.to_numeric(temp_df["chg"], errors="coerce")
121
+ temp_df["change"] = pd.to_numeric(temp_df["change"], errors="coerce")
122
+ temp_df["exchange"] = pd.to_numeric(temp_df["exchange"], errors="coerce")
123
+ temp_df["time"] = pd.to_datetime(temp_df["time"]).astype(str)
124
+ temp_df = temp_df[
125
+ [
126
+ "time",
127
+ "volume",
128
+ "close",
129
+ "high",
130
+ "low",
131
+ "chg",
132
+ "change",
133
+ "amount",
134
+ "volume",
135
+ "pct_chg",
136
+ "exchange",
137
+ ]
138
+ ]
139
+ return temp_df
140
+
141
+
142
+ if __name__ == '__main__':
143
+ test_df = get_minute_data('0.899050', start_date="2025-03-03 09:30:00",
144
+ end_date="2025-03-07 15:00:00", period="1", adjust="")
145
+ print(test_df)
@@ -0,0 +1,82 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+
9
+ from xtquant import xtdata
10
+ import time
11
+
12
+
13
+ def my_download(stock_list: list, period: str, start_date='', end_date=''):
14
+ '''
15
+ 用于显示下载进度
16
+ '''
17
+ import string
18
+
19
+ if [i for i in ["d", "w", "mon", "q", "y", ] if i in period]:
20
+ period = "1d"
21
+ elif "m" in period:
22
+ numb = period.translate(str.maketrans("", "", string.ascii_letters))
23
+ if int(numb) < 5:
24
+ period = "1m"
25
+ else:
26
+ period = "5m"
27
+ elif "tick" == period:
28
+ pass
29
+ else:
30
+ raise KeyboardInterrupt("周期传入错误")
31
+
32
+ n = 1
33
+ num = len(stock_list)
34
+ for i in stock_list:
35
+ print(f"当前正在下载 {period} {n}/{num}")
36
+
37
+ xtdata.download_history_data(i, period, start_date, end_date)
38
+ n += 1
39
+ print("下载任务结束")
40
+
41
+
42
+ def do_subscribe_quote(stock_list: list, period: str):
43
+ for i in stock_list:
44
+ xtdata.subscribe_quote(i, period=period)
45
+ time.sleep(1) # 等待订阅完成
46
+
47
+
48
+ if __name__ == "__main__":
49
+
50
+ start_date = '20220101' # 格式"YYYYMMDD",开始下载的日期,date = ""时全量下载
51
+ end_date = ""
52
+ period = "1m"
53
+
54
+ need_download = 1 # 取数据是空值时,将need_download赋值为1,确保正确下载了历史数据
55
+
56
+ code_list = ["588000.SH", "600519.SH"] # 股票列表
57
+
58
+ if need_download: # 判断要不要下载数据, gmd系列函数都是从本地读取历史数据,从服务器订阅获取最新数据
59
+ my_download(code_list, period, start_date, end_date)
60
+
61
+ ############ 仅获取历史行情 #####################
62
+ count = -1 # 设置count参数,使gmd_ex返回全部数据
63
+ data1 = xtdata.get_market_data_ex([], code_list, period=period, start_time=start_date, end_time=end_date)
64
+
65
+ ############ 仅获取最新行情 #####################
66
+ do_subscribe_quote(code_list, period) # 设置订阅参数,使gmd_ex取到最新行情
67
+ count = 1 # 设置count参数,使gmd_ex仅返回最新行情数据
68
+ data2 = xtdata.get_market_data_ex([], code_list, period=period, start_time=start_date, end_time=end_date,
69
+ count=1) # count 设置为1,使返回值只包含最新行情
70
+
71
+ ############ 获取历史行情+最新行情 #####################
72
+ do_subscribe_quote(code_list, period) # 设置订阅参数,使gmd_ex取到最新行情
73
+ count = -1 # 设置count参数,使gmd_ex返回全部数据
74
+ data3 = xtdata.get_market_data_ex([], code_list, period=period, start_time=start_date, end_time=end_date,
75
+ count=-1) # count 设置为1,使返回值只包含最新行情
76
+
77
+ print(data1[code_list[0]].tail()) # 行情数据查看
78
+ print(data2[code_list[0]].tail())
79
+ print(data3[code_list[0]].tail())
80
+
81
+
82
+
@@ -0,0 +1,7 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
@@ -161,3 +161,24 @@ THS_INDUSTRY_LIST = 'ths_industry_list'
161
161
 
162
162
  # 同花顺行业股票详情
163
163
  THS_STOCK_INDUSTRY_DETAIL = 'ths_stock_industry_detail'
164
+
165
+ # 创业板分钟集合数据
166
+ ONE_MINUTE_K_LINE_BFQ_C = 'one_minute_k_line_bfq_c'
167
+
168
+ # 北交所分钟集合数据
169
+ ONE_MINUTE_K_LINE_BFQ_BJ = 'one_minute_k_line_bfq_bj'
170
+
171
+ # 上海主板分钟集合数据
172
+ ONE_MINUTE_K_LINE_BFQ_H = 'one_minute_k_line_bfq_h'
173
+
174
+ # 科创板分钟集合数据
175
+ ONE_MINUTE_K_LINE_BFQ_K = 'one_minute_k_line_bfq_k'
176
+
177
+ # 深圳主板分钟集合数据
178
+ ONE_MINUTE_K_LINE_BFQ_K = 'one_minute_k_line_bfq_s'
179
+
180
+ # 可转债分钟集合数据
181
+ ONE_MINUTE_K_LINE_BFQ_KZZ = 'one_minute_k_line_bfq_kzz'
182
+
183
+ # ETF分钟集合数据
184
+ ONE_MINUTE_K_LINE_BFQ_ETF = 'one_minute_k_line_bfq_etf'