mns-common 1.2.4.5__tar.gz → 1.2.4.7__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 (122) hide show
  1. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/PKG-INFO +1 -1
  2. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/ths/zt/ths_stock_zt_pool_api.py +1 -6
  3. mns_common-1.2.4.7/mns_common/api/ths/zt/ths_stock_zt_pool_v2_api.py +369 -0
  4. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/zt/zt_common_service_api.py +4 -4
  5. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common.egg-info/PKG-INFO +1 -1
  6. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common.egg-info/SOURCES.txt +1 -0
  7. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/setup.py +1 -1
  8. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/README.md +0 -0
  9. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/__init__.py +0 -0
  10. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/__init__.py +0 -0
  11. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/akshare/__init__.py +0 -0
  12. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/akshare/k_line_api.py +0 -0
  13. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/akshare/stock_bid_ask_api.py +0 -0
  14. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/akshare/stock_dt_pool.py +0 -0
  15. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/akshare/stock_zb_pool.py +0 -0
  16. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/akshare/stock_zt_pool_api.py +0 -0
  17. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/akshare/yjyg_sync_api.py +0 -0
  18. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/em/__init__.py +0 -0
  19. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/em/east_money_debt_api.py +0 -0
  20. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/em/east_money_etf_api.py +0 -0
  21. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/em/east_money_stock_api.py +0 -0
  22. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/em/east_money_stock_gdfx_free_top_10_api.py +0 -0
  23. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/em/east_money_stock_hk_api.py +0 -0
  24. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/em/east_money_stock_v2_api.py +0 -0
  25. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/em/em_concept_index_api.py +0 -0
  26. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/kpl/__init__.py +0 -0
  27. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/kpl/common/__init__.py +0 -0
  28. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/kpl/common/kpl_common_api.py +0 -0
  29. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/kpl/concept/__init__.py +0 -0
  30. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/kpl/concept/kpl_concept_api.py +0 -0
  31. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/kpl/constant/__init__.py +0 -0
  32. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/kpl/constant/kpl_constant.py +0 -0
  33. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/kpl/industry/__init__.py +0 -0
  34. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/kpl/industry/kpl_industry_api.py +0 -0
  35. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/kpl/selection/__init__.py +0 -0
  36. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/kpl/selection/kpl_selection_plate_api.py +0 -0
  37. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/kpl/symbol/__init__.py +0 -0
  38. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/kpl/symbol/kpl_real_time_quotes_api.py +0 -0
  39. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/kpl/symbol/kpl_symbol_common_field_constant.py +0 -0
  40. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/kpl/symbol/symbol_his_quotes_api.py +0 -0
  41. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/msg/__init__.py +0 -0
  42. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/msg/push_msg_api.py +0 -0
  43. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/ths/__init__.py +0 -0
  44. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/ths/big_deal/__init__.py +0 -0
  45. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/ths/big_deal/ths_big_deal_api.py +0 -0
  46. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/ths/concept/__init__.py +0 -0
  47. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/ths/concept/app/__init__.py +0 -0
  48. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/ths/concept/app/ths_concept_detail_app.py +0 -0
  49. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/ths/concept/app/ths_concept_index_app.py +0 -0
  50. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/ths/concept/web/__init__.py +0 -0
  51. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/ths/concept/web/ths_common_js_api.py +0 -0
  52. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/ths/concept/web/ths_company_info_web.py +0 -0
  53. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/ths/concept/web/ths_concept_detail_web.py +0 -0
  54. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/ths/concept/web/ths_concept_index_web.py +0 -0
  55. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/ths/self_choose/__init__.py +0 -0
  56. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/ths/self_choose/ths_self_choose_api.py +0 -0
  57. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/ths/wen_cai/__init__.py +0 -0
  58. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/ths/wen_cai/ths_wen_cai_api.py +0 -0
  59. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/api/ths/zt/__init__.py +0 -0
  60. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/__init__.py +0 -0
  61. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/cache/__init__.py +0 -0
  62. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/cache/cache_service.py +0 -0
  63. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/classify/__init__.py +0 -0
  64. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/classify/symbol_classify_api.py +0 -0
  65. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/classify/symbol_classify_param.py +0 -0
  66. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/common_service_fun_api.py +0 -0
  67. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/company/__init__.py +0 -0
  68. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/company/company_common_service_api.py +0 -0
  69. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/company/company_common_service_new_api.py +0 -0
  70. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/concept/__init__.py +0 -0
  71. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/concept/kpl_concept_common_service_api.py +0 -0
  72. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/concept/ths_concept_common_service_api.py +0 -0
  73. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/data/__init__.py +0 -0
  74. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/data/data_init_api.py +0 -0
  75. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/deal/__init__.py +0 -0
  76. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/deal/deal_service_api.py +0 -0
  77. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/deal/terminal_enum.py +0 -0
  78. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/industry/__init__.py +0 -0
  79. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/industry/ths_industry_index_api.py +0 -0
  80. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/k_line/__init__.py +0 -0
  81. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/k_line/clean/__init__.py +0 -0
  82. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/k_line/clean/k_line_param.py +0 -0
  83. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/k_line/clean/sh_small_normal_zt_k_line_check_api.py +0 -0
  84. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/k_line/common/__init__.py +0 -0
  85. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/k_line/common/k_line_common_service_api.py +0 -0
  86. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/k_line/patterns/__init__.py +0 -0
  87. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/k_line/patterns/k_line_patterns_service_api.py +0 -0
  88. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/k_line/patterns/pattern_Enum.py +0 -0
  89. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/price/__init__.py +0 -0
  90. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/price/trade_price_service_api.py +0 -0
  91. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/qmt/__init__.py +0 -0
  92. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/qmt/qmt_buy_service.py +0 -0
  93. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/real_time/__init__.py +0 -0
  94. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/real_time/real_time_common_service_api.py +0 -0
  95. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/redis_msg/__init__.py +0 -0
  96. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/redis_msg/redis_msg_publish_service.py +0 -0
  97. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/self_choose/__init__.py +0 -0
  98. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/self_choose/black_list_service_api.py +0 -0
  99. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/self_choose/self_choose_service_api.py +0 -0
  100. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/trade_date/__init__.py +0 -0
  101. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/trade_date/trade_date_common_service_api.py +0 -0
  102. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/component/zt/__init__.py +0 -0
  103. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/constant/__init__.py +0 -0
  104. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/constant/black_list_classify_enum.py +0 -0
  105. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/constant/db_name_constant.py +0 -0
  106. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/constant/price_enum.py +0 -0
  107. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/constant/redis_msg_constant.py +0 -0
  108. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/constant/self_choose_constant.py +0 -0
  109. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/db/MongodbUtil.py +0 -0
  110. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/db/MongodbUtilLocal.py +0 -0
  111. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/db/__init__.py +0 -0
  112. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/utils/__init__.py +0 -0
  113. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/utils/async_fun.py +0 -0
  114. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/utils/cmd_util.py +0 -0
  115. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/utils/data_frame_util.py +0 -0
  116. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/utils/date_handle_util.py +0 -0
  117. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/utils/db_util.py +0 -0
  118. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/utils/file_util.py +0 -0
  119. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common/utils/ip_util.py +0 -0
  120. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common.egg-info/dependency_links.txt +0 -0
  121. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/mns_common.egg-info/top_level.txt +0 -0
  122. {mns_common-1.2.4.5 → mns_common-1.2.4.7}/setup.cfg +0 -0
@@ -1,3 +1,3 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns_common
3
- Version: 1.2.4.5
3
+ Version: 1.2.4.7
@@ -277,9 +277,4 @@ def zt_reason_group(zt_pool_df):
277
277
  import mns_common.api.ths.self_choose.ths_self_choose_api as ths_self_choose_api
278
278
 
279
279
  if __name__ == '__main__':
280
- cookie_test = "searchGuide=sg; skin_color=white; Hm_lvt_78c58f01938e4d85eaf619eae71b4ed1=1721641603,1721715758,1721752612,1721755151; historystock=688037%7C*%7C600272%7C*%7C603939%7C*%7C601607%7C*%7C002670; log=; Hm_lvt_722143063e4892925903024537075d0d=1720407580,1720593398,1721195153,1721780857; HMACCOUNT=53655417BE159764; Hm_lvt_929f8b362150b1f77b477230541dbbc2=1720407580,1720593398,1721195153,1721780857; u_ukey=A10702B8689642C6BE607730E11E6E4A; u_uver=1.0.0; u_dpass=alFQbk%2FO8c9WqN3Z4WkYGuoYg0Z6SiiU4OnEchI5ynMcu0H9Wl0vit1Uov34KlrNHi80LrSsTFH9a%2B6rtRvqGg%3D%3D; u_did=756121025AC347DABE0B7B9BFCDC0511; u_ttype=WEB; ttype=WEB; user=MDq%2BsNDQcE06Ok5vbmU6NTAwOjYxMzk4NTQ0ODo3LDExMTExMTExMTExLDQwOzQ0LDExLDQwOzYsMSw0MDs1LDEsNDA7MSwxMDEsNDA7MiwxLDQwOzMsMSw0MDs1LDEsNDA7OCwwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSw0MDsxMDIsMSw0MDoyNzo6OjYwMzk4NTQ0ODoxNzIxNzgwODg1Ojo6MTYzNDU2Njk4MDo2MDQ4MDA6MDoxNzNiNDhmZjI2NmM1MzE3ZDgwYmUwYmZiMDQzMDhiZTY6ZGVmYXVsdF80OjE%3D; userid=603985448; u_name=%BE%B0%D0%D0pM; escapename=%25u666f%25u884cpM; ticket=8a8e55aeb05c9160e88dab69492aa048; user_status=0; utk=6420dd34039fbeb3d1f4bffe699ec7e4; Hm_lpvt_722143063e4892925903024537075d0d=1721780886; Hm_lpvt_929f8b362150b1f77b477230541dbbc2=1721780887; Hm_lpvt_78c58f01938e4d85eaf619eae71b4ed1=1721780896; Hm_lvt_da7579fd91e2c6fa5aeb9d1620a9b333=1721780896; Hm_lpvt_da7579fd91e2c6fa5aeb9d1620a9b333=1721780896; v=A2kO-7xJKzhydheMMbjLkzbIeB7GNlqaxy6B_wte4BOPXIdAU4ZtOFd6kcGY"
281
-
282
- res = get_zt_reason(None)
283
- res = res.loc[res['connected_boards_numbers'] > 1]
284
- for stock_one in res.itertuples():
285
- ths_self_choose_api.add_stock_to_account(stock_one.symbol, cookie_test)
280
+ get_real_time_zt_info()
@@ -0,0 +1,369 @@
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
+ import sys
10
+ import os
11
+
12
+ file_path = os.path.abspath(__file__)
13
+ end = file_path.index('mns') + 14
14
+ project_path = file_path[0:end]
15
+ sys.path.append(project_path)
16
+ import re
17
+ import mns_common.component.company.company_common_service_api as company_common_service_api
18
+ import mns_common.component.zt.zt_common_service_api as zt_common_service_api
19
+ from loguru import logger
20
+ # question
21
+ # 必填,查询问句
22
+ #
23
+ # sort_key
24
+ # 非必填,指定用于排序的字段,值为返回结果的列名
25
+ #
26
+ # sort_order
27
+ # 非必填,排序规则,至为asc(升序)或desc(降序)
28
+ #
29
+ # page
30
+ # 非必填,查询的页号,默认为1
31
+ #
32
+ # perpage
33
+ # 非必填,每页数据条数,默认值100,由于问财做了数据限制,最大值为100,指定大于100的数值无效。
34
+ #
35
+ # loop
36
+ # 非必填,是否循环分页,返回多页合并数据。默认值为False,可以设置为True或具体数值。
37
+ #
38
+ # 当设置为True时,程序会一直循环到最后一页,返回全部数据。
39
+ #
40
+ # 当设置具体数值n时,循环请求n页,返回n页合并数据。
41
+
42
+
43
+ import mns_common.api.em.east_money_stock_api as east_money_stock_api
44
+ from mns_common.db.MongodbUtil import MongodbUtil
45
+ import pandas as pd
46
+ import mns_common.component.common_service_fun_api as common_service_fun_api
47
+ import mns_common.api.ths.wen_cai.ths_wen_cai_api as ths_wen_cai_api
48
+ import mns_common.utils.data_frame_util as data_frame_util
49
+ import mns_common.utils.date_handle_util as date_handle_util
50
+ import mns_common.api.akshare.stock_zt_pool_api as stock_zt_pool_api
51
+ import mns_common.component.cache.cache_service as cache_service
52
+
53
+ mongodb_util = MongodbUtil('27017')
54
+
55
+ # 缓存key
56
+ THS_NOW_ZT_POOL = 'ths_now_zt_pool'
57
+ # 缓存过期时间
58
+ CACHE_TIME_OUT_TIME = 60
59
+
60
+
61
+ # 频繁调用容易被封
62
+ def get_ths_stock_zt_reason_with_cache(str_day):
63
+ stock_zt_reason = cache_service.get_cache(THS_NOW_ZT_POOL)
64
+ if data_frame_util.is_empty(stock_zt_reason):
65
+ stock_zt_reason = get_zt_reason(str_day)
66
+ # time_out 为秒
67
+ cache_service.set_cache_time_out(THS_NOW_ZT_POOL, stock_zt_reason, CACHE_TIME_OUT_TIME)
68
+ return stock_zt_reason
69
+ else:
70
+ return stock_zt_reason
71
+
72
+
73
+ def get_zt_reason(str_day):
74
+ if data_frame_util.is_string_not_empty(str_day):
75
+ key_word = str_day + '涨停'
76
+ else:
77
+ key_word = '涨停'
78
+ zt_df = ths_wen_cai_api.wen_cai_api(key_word, 'stock')
79
+ if data_frame_util.is_empty(zt_df):
80
+ return None
81
+ zt_df.fillna('', inplace=True)
82
+ no_slash_day = date_handle_util.no_slash_date(str_day)
83
+ no_slash_day = "[" + no_slash_day + "]"
84
+ zt_df = zt_df.rename(columns={
85
+ "股票代码": "code",
86
+ "股票简称": "name",
87
+ "涨停" + no_slash_day: "zt_tag",
88
+ "首次涨停时间" + no_slash_day: "first_closure_time",
89
+ "最终涨停时间" + no_slash_day: "last_closure_time",
90
+ "涨停明细数据" + no_slash_day: "zt_detail",
91
+ "连续涨停天数" + no_slash_day: "connected_boards_numbers",
92
+ "涨停原因类别" + no_slash_day: "zt_reason",
93
+ "涨停封单量" + no_slash_day: "closure_volume",
94
+ "涨停封单额" + no_slash_day: "closure_funds",
95
+ "涨停封单量占成交量比" + no_slash_day: "closure_funds_per_amount",
96
+ "涨停封单量占流通a股比" + no_slash_day: "closure_funds_per_flow_mv",
97
+ "涨停开板次数" + no_slash_day: "frying_plates_numbers",
98
+ "a股市值(不含限售股)" + no_slash_day: "flow_mv",
99
+ "几天几板" + no_slash_day: "statistics_detail",
100
+ "涨停类型" + no_slash_day: "zt_type",
101
+ "code": "symbol",
102
+ "最新价": "now_price",
103
+ "最新涨跌幅": "chg",
104
+
105
+ })
106
+ zt_df['symbol'] = zt_df['symbol'].astype(str)
107
+ if 'statistics_detail' in zt_df.columns:
108
+ zt_df['statistics'] = zt_df['statistics_detail'].apply(convert_statistics)
109
+ if 'code' in zt_df.columns:
110
+ del zt_df['code']
111
+ if 'flow_mv' in zt_df.columns:
112
+ del zt_df['flow_mv']
113
+ zt_df['zt_flag'] = True
114
+ zt_df['str_day'] = str_day
115
+ zt_df = zt_df.fillna('')
116
+ return zt_df
117
+
118
+
119
+ # 定义一个函数,用于将统计数据转换成相应的格式
120
+ def convert_statistics(stat):
121
+ try:
122
+ if stat is None:
123
+ return '1/1'
124
+ match = re.match(r'(\d+)天(\d+)板', stat)
125
+ if match:
126
+ n, m = map(int, match.groups())
127
+ return f'{n}/{m}'
128
+ elif stat == '首板涨停':
129
+ return '1/1'
130
+ else:
131
+ return stat
132
+ except BaseException as e:
133
+ logger.error("转换出现异常:{},{}", e, stat)
134
+ return '1/1'
135
+
136
+
137
+ # 获取实时行情涨停列表
138
+ def get_real_time_zt_info():
139
+ real_time_df = east_money_stock_api.get_real_time_quotes_all_stocks()
140
+ real_time_df_zt = real_time_df.loc[real_time_df['chg'] > common_service_fun_api.ZT_CHG]
141
+ if data_frame_util.is_empty(real_time_df_zt):
142
+ return pd.DataFrame()
143
+ real_time_df_zt = real_time_df_zt[[
144
+ 'symbol',
145
+ 'name',
146
+ 'chg',
147
+ 'amount',
148
+ 'quantity_ratio',
149
+ 'now_price',
150
+ 'high',
151
+ 'low',
152
+ 'open',
153
+ 'list_date',
154
+ 'exchange',
155
+ 'wei_bi',
156
+ 'flow_mv',
157
+ 'total_mv',
158
+ 'buy_1_num'
159
+ ]]
160
+ company_df = company_common_service_api.get_company_info_industry()
161
+ company_df = company_df[[
162
+ '_id',
163
+ "industry",
164
+ "first_sw_industry",
165
+ "second_sw_industry",
166
+ "third_sw_industry",
167
+ "ths_concept_name",
168
+ "ths_concept_code",
169
+ "ths_concept_sync_day",
170
+ "em_industry",
171
+ "company_type",
172
+ "mv_circulation_ratio",
173
+ "ths_concept_list_info",
174
+ "kpl_plate_name",
175
+ "kpl_plate_list_info",
176
+ "diff_days"
177
+ ]]
178
+ company_df = company_df.loc[company_df['_id'].isin(real_time_df_zt['symbol'])]
179
+ company_df = company_df.set_index(['_id'], drop=True)
180
+ real_time_df_zt = real_time_df_zt.set_index(['symbol'], drop=False)
181
+ real_time_df_zt = pd.merge(real_time_df_zt, company_df, how='outer',
182
+ left_index=True, right_index=True)
183
+ real_time_df_zt = common_service_fun_api.classify_symbol(real_time_df_zt)
184
+ real_time_df_zt = common_service_fun_api.total_mv_classification(real_time_df_zt)
185
+ real_time_df_zt = common_service_fun_api.symbol_amount_simple(real_time_df_zt)
186
+ real_time_df_zt = common_service_fun_api.exclude_new_stock(real_time_df_zt)
187
+ real_time_df_zt.fillna(0, inplace=True)
188
+ real_time_df_zt['chg'] = real_time_df_zt['chg'].astype(float)
189
+ real_time_df_zt['chg'] = round(
190
+ real_time_df_zt['chg'], 2)
191
+ real_time_df_zt = real_time_df_zt.sort_values(by=['chg'], ascending=False)
192
+ return real_time_df_zt
193
+
194
+
195
+ def get_now_zt_pool_with_reason(str_day):
196
+ # 实时行情涨停信息
197
+ real_time_zt_df = get_real_time_zt_info()
198
+ # 昨日涨停列表
199
+ last_trade_zt = zt_common_service_api.get_last_trade_day_zt(str_day)
200
+ # 东方财富涨停列表
201
+ em_now_zt_pool = stock_zt_pool_api.stock_em_zt_pool_df(date_handle_util.no_slash_date(str_day))
202
+ if data_frame_util.is_not_empty(em_now_zt_pool):
203
+ real_time_zt_df_wei_bi_100 = real_time_zt_df.loc[real_time_zt_df['symbol'].isin(em_now_zt_pool['symbol'])]
204
+ real_time_zt_df_high_chg = real_time_zt_df.loc[~(real_time_zt_df['symbol'].isin(em_now_zt_pool['symbol']))]
205
+ else:
206
+ real_time_zt_df_high_chg = real_time_zt_df
207
+
208
+ em_now_zt_pool = em_now_zt_pool[
209
+ ['symbol', 'connected_boards_numbers',
210
+ 'statistics', 'closure_funds', 'first_closure_time',
211
+ 'last_closure_time', 'frying_plates_numbers']]
212
+
213
+ em_now_zt_pool = em_now_zt_pool.set_index(['symbol'], drop=True)
214
+ real_time_zt_df_wei_bi_100 = real_time_zt_df_wei_bi_100.set_index(['symbol'], drop=False)
215
+ real_time_zt_df_wei_bi_100 = pd.merge(real_time_zt_df_wei_bi_100, em_now_zt_pool, how='outer',
216
+ left_index=True, right_index=True)
217
+
218
+ # 初始化数据
219
+ real_time_zt_df_high_chg['closure_funds'] = 0
220
+ real_time_zt_df_high_chg['first_closure_time'] = '153000'
221
+ real_time_zt_df_high_chg['last_closure_time'] = '153000'
222
+ real_time_zt_df_high_chg['frying_plates_numbers'] = 0
223
+
224
+ real_time_zt_df_high_chg_last_trade_zt = real_time_zt_df_high_chg.loc[
225
+ real_time_zt_df_high_chg['symbol'].isin(last_trade_zt['symbol'])]
226
+ real_time_zt_df_high_chg_last_trade_no_zt = real_time_zt_df_high_chg.loc[
227
+ ~(real_time_zt_df_high_chg['symbol'].isin(last_trade_zt['symbol']))]
228
+
229
+ last_trade_zt_copy_today_high_chg = last_trade_zt.loc[
230
+ last_trade_zt['symbol'].isin(real_time_zt_df_high_chg_last_trade_zt['symbol'])]
231
+ last_trade_zt_copy_today_high_chg = last_trade_zt_copy_today_high_chg[
232
+ ['symbol', 'connected_boards_numbers', 'statistics']]
233
+ last_trade_zt_copy_today_high_chg['connected_boards_numbers'] = last_trade_zt_copy_today_high_chg[
234
+ 'connected_boards_numbers'] + 1
235
+
236
+ last_trade_zt_copy_today_high_chg = last_trade_zt_copy_today_high_chg.set_index(['symbol'], drop=True)
237
+ real_time_zt_df_high_chg_last_trade_zt = real_time_zt_df_high_chg_last_trade_zt.set_index(['symbol'], drop=False)
238
+ real_time_zt_df_high_chg_last_trade_zt = pd.merge(real_time_zt_df_high_chg_last_trade_zt,
239
+ last_trade_zt_copy_today_high_chg, how='outer',
240
+ left_index=True, right_index=True)
241
+
242
+ real_time_zt_df_high_chg_last_trade_no_zt['connected_boards_numbers'] = 1
243
+ real_time_zt_df_high_chg_last_trade_no_zt['statistics'] = '1/1'
244
+ real_time_zt_df_high_chg_last_trade_zt['statistics'] = real_time_zt_df_high_chg_last_trade_zt['statistics'].apply(
245
+ add_one_to_each_side)
246
+ now_zt_pool_df = pd.concat([real_time_zt_df_wei_bi_100,
247
+ real_time_zt_df_high_chg_last_trade_zt,
248
+ real_time_zt_df_high_chg_last_trade_no_zt])
249
+
250
+ now_zt_pool_df = merge_zt_reason(now_zt_pool_df, str_day, last_trade_zt)
251
+
252
+ result_first = now_zt_pool_df.loc[now_zt_pool_df['connected_boards_numbers'] == 1]
253
+ result_connected_boards = now_zt_pool_df.loc[now_zt_pool_df['connected_boards_numbers'] > 1]
254
+ result_connected_boards = result_connected_boards.sort_values(by=['connected_boards_numbers'], ascending=False)
255
+ result_first = result_first.sort_values(by=['first_closure_time'], ascending=True)
256
+
257
+ now_zt_pool_df = pd.concat([result_connected_boards,
258
+ result_first])
259
+ now_zt_pool_df = now_zt_pool_df.fillna('未知数据')
260
+ now_zt_pool_df.drop_duplicates('symbol', keep='last', inplace=True)
261
+ return now_zt_pool_df
262
+
263
+
264
+ def merge_zt_reason(now_zt_pool_df, str_day, last_trade_zt):
265
+ try:
266
+ zt_reason_df = get_ths_stock_zt_reason_with_cache(str_day)
267
+ except BaseException as e:
268
+ zt_reason_df = None
269
+ logger.error("获取涨停原因异常:{}", e)
270
+
271
+ last_trade_zt_copy = last_trade_zt.copy()
272
+ last_trade_zt_copy = last_trade_zt_copy[['symbol', 'zt_reason']]
273
+
274
+ if data_frame_util.is_empty(zt_reason_df):
275
+ now_zt_pool_df['zt_reason'] = '暂无'
276
+
277
+ last_trade_zt_copy = last_trade_zt_copy.set_index(['symbol'], drop=True)
278
+ now_zt_pool_df = now_zt_pool_df.set_index(['symbol'], drop=False)
279
+ now_zt_pool_df = pd.merge(now_zt_pool_df, last_trade_zt_copy, how='outer',
280
+ left_index=True, right_index=True)
281
+ now_zt_pool_df.dropna(subset=['symbol'], inplace=True)
282
+ return now_zt_pool_df
283
+ zt_reason_df = zt_reason_df[['symbol', 'zt_reason']]
284
+
285
+ zt_reason_df = zt_reason_df.set_index(['symbol'], drop=True)
286
+ now_zt_pool_df = now_zt_pool_df.set_index(['symbol'], drop=False)
287
+ result_zt_df = pd.merge(now_zt_pool_df, zt_reason_df, how='outer',
288
+ left_index=True, right_index=True)
289
+
290
+ # 找出 'symbol' 列中为 NaN 值的数据
291
+ zt_reason_na = result_zt_df[result_zt_df['zt_reason'].isna()]
292
+ zt_reason_not_na = result_zt_df[result_zt_df['zt_reason'].notna()]
293
+
294
+ last_trade_zt_copy = last_trade_zt_copy.set_index(['symbol'], drop=True)
295
+ del zt_reason_na['zt_reason']
296
+ zt_reason_na = zt_reason_na.set_index(['symbol'], drop=False)
297
+ zt_reason_na = pd.merge(zt_reason_na, last_trade_zt_copy, how='outer',
298
+ left_index=True, right_index=True)
299
+ zt_reason_na['zt_reason'] = zt_reason_na['zt_reason'].fillna('未有')
300
+
301
+ # 删除昨日涨停 今日未涨停的
302
+ zt_reason_na.dropna(subset=['symbol'], inplace=True)
303
+
304
+ result = pd.concat([zt_reason_na,
305
+ zt_reason_not_na])
306
+
307
+ result.dropna(subset=['symbol'], inplace=True)
308
+ result.drop_duplicates('symbol', keep='last', inplace=True)
309
+
310
+ result['zt_reason'] = result['zt_reason'].replace({0: '其他',
311
+ '': '其他',
312
+ '0': '其他', })
313
+
314
+ return result
315
+
316
+
317
+ # 定义一个函数来处理字符串 涨停统计加1
318
+ def add_one_to_each_side(s):
319
+ left, right = s.split('/')
320
+ new_left = str(int(left) + 1)
321
+ new_right = str(int(right) + 1)
322
+ return f"{new_left}/{new_right}"
323
+
324
+
325
+ def zt_reason_group(zt_pool_df):
326
+ if data_frame_util.is_empty(zt_pool_df):
327
+ return pd.DataFrame()
328
+
329
+ zt_pool_df = common_service_fun_api.exclude_st_symbol(zt_pool_df)
330
+ if data_frame_util.is_empty(zt_pool_df):
331
+ return pd.DataFrame()
332
+
333
+ zt_pool_df['symbol'] = zt_pool_df['symbol'].astype(str)
334
+ result_group_df = None
335
+ for zt_stock_one in zt_pool_df.itertuples():
336
+ try:
337
+ zt_reason = zt_stock_one.zt_reason
338
+ if data_frame_util.is_string_empty(zt_reason):
339
+ continue
340
+ zt_reason_list = zt_reason.split("+")
341
+ if len(zt_reason_list) > 0:
342
+ for zt_reason_one in zt_reason_list:
343
+ zt_reason_dict = {'zt_reason_name': zt_reason_one,
344
+ 'number': 1
345
+ }
346
+ zt_reason_df_new = pd.DataFrame(zt_reason_dict, index=[0])
347
+ if result_group_df is None:
348
+ result_group_df = zt_reason_df_new
349
+ else:
350
+ exist_zt_reason = result_group_df.loc[result_group_df['zt_reason_name'] == zt_reason_one]
351
+ if data_frame_util.is_not_empty(exist_zt_reason):
352
+ result_group_df.loc[result_group_df['zt_reason_name'] == zt_reason_one, "number"] = \
353
+ exist_zt_reason['number'] + 1
354
+ else:
355
+ result_group_df = pd.concat([result_group_df, zt_reason_df_new])
356
+
357
+ except BaseException as e:
358
+ logger.error("涨停原因分组出现异常:{},{}", zt_stock_one.symbol, e)
359
+ if data_frame_util.is_not_empty(result_group_df):
360
+ result_group_df = result_group_df.sort_values(by=['number'], ascending=False)
361
+
362
+ return result_group_df
363
+
364
+
365
+ if __name__ == '__main__':
366
+ while True:
367
+ result_zt_df_test = get_now_zt_pool_with_reason('2024-09-27')
368
+ zt_reason_group(result_zt_df_test)
369
+ logger.info(1)
@@ -23,10 +23,10 @@ from loguru import logger
23
23
  def get_last_trade_day_zt(str_day):
24
24
  last_trade_day = trade_date_common_service_api.get_last_trade_day(str_day)
25
25
  query = {'str_day': last_trade_day}
26
- db_stock_zt_pool = mongodb_util.find_query_data(db_name_constant.STOCK_ZT_POOL, query)
27
- if db_stock_zt_pool is None or db_stock_zt_pool.shape[0] == 0:
28
- db_stock_zt_pool = stock_zt_pool_api.stock_em_zt_pool_df(date_handle_util.no_slash_date(last_trade_day))
29
- return db_stock_zt_pool
26
+ last_trade_day_zt = mongodb_util.find_query_data(db_name_constant.STOCK_ZT_POOL, query)
27
+ if last_trade_day_zt is None or last_trade_day_zt.shape[0] == 0:
28
+ last_trade_day_zt = stock_zt_pool_api.stock_em_zt_pool_df(date_handle_util.no_slash_date(last_trade_day))
29
+ return last_trade_day_zt
30
30
 
31
31
 
32
32
  # 按照字段分组
@@ -1,3 +1,3 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns_common
3
- Version: 1.2.4.5
3
+ Version: 1.2.4.7
@@ -56,6 +56,7 @@ mns_common/api/ths/wen_cai/__init__.py
56
56
  mns_common/api/ths/wen_cai/ths_wen_cai_api.py
57
57
  mns_common/api/ths/zt/__init__.py
58
58
  mns_common/api/ths/zt/ths_stock_zt_pool_api.py
59
+ mns_common/api/ths/zt/ths_stock_zt_pool_v2_api.py
59
60
  mns_common/component/__init__.py
60
61
  mns_common/component/common_service_fun_api.py
61
62
  mns_common/component/cache/__init__.py
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name='mns_common',
5
- version='1.2.4.5',
5
+ version='1.2.4.7',
6
6
  # packages=["mns_common", "mns_common.api",
7
7
  # "mns_common.api.akshare",
8
8
  # "mns_common.api.em",
File without changes
File without changes