mns-scheduler 1.2.9.6__py3-none-any.whl → 1.4.2.5__py3-none-any.whl

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-scheduler might be problematic. Click here for more details.

Files changed (135) hide show
  1. mns_scheduler/company_info/announce/__init__.py +1 -1
  2. mns_scheduler/company_info/announce/company_announce_sync_service.py +11 -6
  3. mns_scheduler/company_info/base/__init__.py +1 -1
  4. mns_scheduler/company_info/base/sync_company_base_info_api.py +164 -74
  5. mns_scheduler/company_info/base/sync_company_hold_info_api.py +3 -6
  6. mns_scheduler/company_info/base/sync_company_product_area_industry.py +161 -0
  7. mns_scheduler/company_info/clean/__init__.py +1 -1
  8. mns_scheduler/company_info/clean/company_info_clean_api.py +2 -2
  9. mns_scheduler/company_info/constant/__init__.py +1 -1
  10. mns_scheduler/company_info/constant/company_constant_data.py +4 -0
  11. mns_scheduler/company_info/de_list_stock/__init__.py +1 -1
  12. mns_scheduler/company_info/de_list_stock/de_list_stock_service.py +1 -1
  13. mns_scheduler/company_info/em_stock_info/__init__.py +1 -1
  14. mns_scheduler/company_info/em_stock_info/sync_em_stock_info_sync.py +44 -33
  15. mns_scheduler/company_info/remark/__init__.py +1 -1
  16. mns_scheduler/company_info/remark/company_remark_info_sync.py +1 -1
  17. mns_scheduler/concept/clean/kpl_concept_clean_api.py +1 -1
  18. mns_scheduler/concept/clean/ths_concept_clean_api.py +3 -6
  19. mns_scheduler/db/script/__init__.py +1 -1
  20. mns_scheduler/db/script/col_move_script.py +1 -1
  21. mns_scheduler/db/script/db_move/__init__.py +1 -1
  22. mns_scheduler/db/script/db_move/col_move_one_service.py +1 -1
  23. mns_scheduler/db/script/sync/__init__.py +1 -1
  24. mns_scheduler/db/script/sync/remote_data_sync_to_local.py +39 -9
  25. mns_scheduler/db/script/sync/sync_hui_ce_test_data.py +35 -24
  26. mns_scheduler/db/script/sync/sync_hui_ce_test_data_01.py +23 -23
  27. mns_scheduler/db/script/update/__init__.py +1 -1
  28. mns_scheduler/db/script/update/update_col_field.py +1 -1
  29. mns_scheduler/finance/__init__.py +1 -1
  30. mns_scheduler/finance/{em_financial_asset_liability_sync_service_api.py → em/em_financial_asset_liability_sync_service_api.py} +2 -2
  31. mns_scheduler/finance/{em_financial_profit_sync_service_api.py → em/em_financial_profit_sync_service_api.py} +6 -4
  32. mns_scheduler/finance/{finance_common_api.py → em/finance_common_api.py} +1 -1
  33. mns_scheduler/finance/{sync_financial_report_service_api.py → sync_financial_report_service_task.py} +80 -27
  34. mns_scheduler/finance/xue_qiu/down_load_xueqiu_report_api.py +77 -0
  35. mns_scheduler/finance/xue_qiu/sync_xue_qiu_fiance_data.py +161 -0
  36. mns_scheduler/hk/__init__.py +1 -1
  37. mns_scheduler/hk/hk_company_info_sync_service_api.py +2 -1
  38. mns_scheduler/hk/hk_industry_info_sync_service_api.py +1 -1
  39. mns_scheduler/industry/__init__.py +1 -1
  40. mns_scheduler/industry/ths/__init__.py +1 -1
  41. mns_scheduler/industry/ths/ths_industry_index_service.py +1 -1
  42. mns_scheduler/industry/ths/ths_industry_sync_service.py +1 -1
  43. mns_scheduler/irm/__init__.py +1 -1
  44. mns_scheduler/irm/api/__init__.py +1 -1
  45. mns_scheduler/irm/api/sh_stock_sns_sse_info_api.py +1 -1
  46. mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py +1 -1
  47. mns_scheduler/irm/stock_irm_cninfo_service.py +10 -6
  48. mns_scheduler/k_line/clean/daily/__init__.py +1 -1
  49. mns_scheduler/k_line/clean/daily/daily_k_line_clean_common_service.py +1 -1
  50. mns_scheduler/k_line/clean/daily/daily_k_line_service.py +1 -1
  51. mns_scheduler/k_line/clean/k_line_info_clean_task.py +7 -2
  52. mns_scheduler/k_line/clean/week_month/__init__.py +1 -1
  53. mns_scheduler/k_line/clean/week_month/normal_week_month_k_line_service.py +1 -1
  54. mns_scheduler/k_line/clean/week_month/sub_new_week_month_k_line_service.py +1 -1
  55. mns_scheduler/{extraIncome/one_minute → k_line}/common/__init__.py +1 -1
  56. mns_scheduler/k_line/common/k_line_common_api.py +188 -0
  57. mns_scheduler/k_line/hot_stocks/__init__.py +1 -1
  58. mns_scheduler/k_line/hot_stocks/recent_hot_stocks_clean_service.py +1 -1
  59. mns_scheduler/k_line/month_week_daily/bfq_k_line_sync.py +12 -32
  60. mns_scheduler/k_line/month_week_daily/daily_week_month_line_sync.py +6 -13
  61. mns_scheduler/k_line/sync_status/k_line_sync_status_check.py +54 -0
  62. mns_scheduler/k_line/test/__init__.py +1 -1
  63. mns_scheduler/k_line/test/k_line_info_clean_his_data.py +1 -1
  64. mns_scheduler/k_line/year_quarter/__init__.py +1 -1
  65. mns_scheduler/k_line/year_quarter/year_quarter_line_sync.py +17 -10
  66. mns_scheduler/kpl/selection/symbol/sync_best_choose_symbol.py +1 -2
  67. mns_scheduler/kpl/selection/symbol/sync_kpl_concept_symbol_choose_reason_api.py +108 -0
  68. mns_scheduler/kpl/selection/total/sync_kpl_best_total_sync_api.py +5 -0
  69. mns_scheduler/lhb/__init__.py +1 -1
  70. mns_scheduler/lhb/stock_lhb_sync_service.py +1 -1
  71. mns_scheduler/open/__init__.py +1 -1
  72. mns_scheduler/open/sync_one_day_open_data_to_db_service.py +1 -1
  73. mns_scheduler/risk/__init__.py +1 -1
  74. mns_scheduler/risk/compliance/undisclosed_annual_report_api.py +4 -2
  75. mns_scheduler/risk/financial/annual_report_audit_check_api.py +1 -1
  76. mns_scheduler/risk/financial/profit_income_check_api.py +1 -2
  77. mns_scheduler/risk/financial_report_risk_check_api.py +1 -1
  78. mns_scheduler/risk/major_violations/register_and_investigate_stock_sync_api.py +1 -1
  79. mns_scheduler/risk/self/wei_pan_stock_api.py +1 -1
  80. mns_scheduler/risk/test/__init__.py +1 -1
  81. mns_scheduler/risk/test/fix_blask_list.py +2 -2
  82. mns_scheduler/risk/transactions/transactions_check_api.py +2 -2
  83. mns_scheduler/self_choose/__init__.py +1 -1
  84. mns_scheduler/self_choose/ths_self_choose_service.py +37 -28
  85. mns_scheduler/trade/auto_login/trader_auto_service.py +6 -4
  86. mns_scheduler/trade/auto_sell_service_api.py +2 -2
  87. mns_scheduler/trade/balance/__init__.py +1 -1
  88. mns_scheduler/trade/balance/ths_account_balance_service.py +1 -1
  89. mns_scheduler/trade/sync_position_api.py +1 -1
  90. mns_scheduler/trade/task/trader_task_service.py +26 -9
  91. mns_scheduler/trade/tfp/__init__.py +1 -1
  92. mns_scheduler/trade/tfp/stock_tfp_info_sync.py +5 -2
  93. mns_scheduler/zt/script/__init__.py +1 -1
  94. mns_scheduler/zt/script/fix_error_deal_day.py +1 -1
  95. mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py +2 -2
  96. mns_scheduler/zt/script/sync_high_chg_pool_his_data.py +2 -2
  97. mns_scheduler/zt/script/sync_now_higt_chg_zt.py +5 -4
  98. mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py +44 -17
  99. mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py +33 -80
  100. mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py +18 -5
  101. mns_scheduler/zz_task/compensation/__init__.py +0 -0
  102. mns_scheduler/zz_task/compensation/compensate_task.py +161 -0
  103. mns_scheduler/zz_task/compensation/compensate_task_one_day.py +142 -0
  104. mns_scheduler/zz_task/data_sync_task.py +64 -60
  105. {mns_scheduler-1.2.9.6.dist-info → mns_scheduler-1.4.2.5.dist-info}/METADATA +1 -1
  106. mns_scheduler-1.4.2.5.dist-info/RECORD +169 -0
  107. mns_scheduler/big_deal/__init__.py +0 -7
  108. mns_scheduler/big_deal/ths_big_deal_sync.py +0 -98
  109. mns_scheduler/debt/kzz_bond_info_sync.py +0 -33
  110. mns_scheduler/extraIncome/one_minute/common/db_create_index.py +0 -9
  111. mns_scheduler/extraIncome/one_minute/common/symbol_handle_util.py +0 -41
  112. mns_scheduler/extraIncome/one_minute/etf/__init__.py +0 -7
  113. mns_scheduler/extraIncome/one_minute/etf/etf_one_minute_sync_task.py +0 -87
  114. mns_scheduler/extraIncome/one_minute/index/__init__.py +0 -7
  115. mns_scheduler/extraIncome/one_minute/index/main_index_sync_task.py +0 -74
  116. mns_scheduler/extraIncome/one_minute/kzz/__init__.py +0 -7
  117. mns_scheduler/extraIncome/one_minute/kzz/kzz_one_minute_sync_task.py +0 -87
  118. mns_scheduler/extraIncome/one_minute/one_minute_sync_task.py +0 -34
  119. mns_scheduler/extraIncome/one_minute/stock/__init__.py +0 -7
  120. mns_scheduler/extraIncome/one_minute/stock/stock_one_minute_sync_task.py +0 -89
  121. mns_scheduler/extraIncome/temp/__init__.py +0 -7
  122. mns_scheduler/extraIncome/temp/tu_share_data_etf_sync.py +0 -103
  123. mns_scheduler/extraIncome/temp/tu_share_data_kzz_sync.py +0 -113
  124. mns_scheduler/extraIncome/temp/tu_share_data_stock_sync.py +0 -137
  125. mns_scheduler/extraIncome/temp/tu_share_zhi_shu_sync_api.py +0 -107
  126. mns_scheduler/us/__init__.py +0 -7
  127. mns_scheduler/us/baidu_yun_pan_handle_service.py +0 -131
  128. mns_scheduler/us/k_line.py +0 -91
  129. mns_scheduler/us/us_company_info_sync_service_api.py +0 -39
  130. mns_scheduler-1.2.9.6.dist-info/RECORD +0 -183
  131. /mns_scheduler/{debt → finance/em}/__init__.py +0 -0
  132. /mns_scheduler/{extraIncome → finance/xue_qiu}/__init__.py +0 -0
  133. /mns_scheduler/{extraIncome/one_minute → k_line/sync_status}/__init__.py +0 -0
  134. {mns_scheduler-1.2.9.6.dist-info → mns_scheduler-1.4.2.5.dist-info}/WHEEL +0 -0
  135. {mns_scheduler-1.2.9.6.dist-info → mns_scheduler-1.4.2.5.dist-info}/top_level.txt +0 -0
@@ -16,11 +16,11 @@ import mns_common.component.common_service_fun_api as common_service_fun_api
16
16
  import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
17
17
  import mns_common.api.ths.zt.ths_stock_zt_pool_v2_api as ths_stock_zt_pool_v2_api
18
18
  import mns_common.component.zt.zt_common_service_api as zt_common_service_api
19
- import mns_common.component.em.em_stock_info_api as em_stock_info_api
20
19
  import mns_common.component.em.em_real_time_quotes_api as em_real_time_quotes_api
21
20
  from datetime import datetime
22
21
  import mns_common.api.ths.company.ths_company_info_api as ths_company_info_api
23
22
  import mns_common.component.cookie.cookie_info_service as cookie_info_service
23
+ import mns_common.api.ths.zt.ths_stock_zt_pool_api as ths_stock_zt_pool_api
24
24
 
25
25
  '''
26
26
  东方财富涨停池
@@ -45,7 +45,7 @@ ZT_FIELD = ['_id', 'symbol', 'name', 'now_price', 'chg', 'first_closure_time',
45
45
  'list_date',
46
46
  'exchange', 'flow_mv', 'total_mv',
47
47
  'classification', 'flow_mv_sp', 'total_mv_sp', 'flow_mv_level',
48
- 'amount_level', 'new_stock', 'list_date_01', 'index', 'str_day', 'main_line']
48
+ 'amount_level', 'new_stock', 'list_date_01', 'index', 'str_day', 'main_line', 'sub_main_line']
49
49
 
50
50
 
51
51
  def save_zt_info(str_day):
@@ -56,16 +56,18 @@ def save_zt_info(str_day):
56
56
  date_handle_util.no_slash_date(str_day))
57
57
 
58
58
  # fix 涨停池没有的股票
59
- stock_em_zt_pool_df_data = sync_miss_zt_data(stock_em_zt_pool_df_data, str_day)
59
+ stock_em_zt_pool_df_data = sync_miss_zt_data(stock_em_zt_pool_df_data.copy(), str_day)
60
60
 
61
- stock_em_zt_pool_df_data = common_service_fun_api.total_mv_classification(stock_em_zt_pool_df_data)
61
+ stock_em_zt_pool_df_data = common_service_fun_api.total_mv_classification(stock_em_zt_pool_df_data.copy())
62
62
 
63
- stock_em_zt_pool_df_data = common_service_fun_api.classify_symbol(stock_em_zt_pool_df_data)
63
+ stock_em_zt_pool_df_data = common_service_fun_api.classify_symbol(stock_em_zt_pool_df_data.copy())
64
64
 
65
- stock_em_zt_pool_df_data = common_service_fun_api.symbol_amount_simple(stock_em_zt_pool_df_data)
66
-
67
- stock_em_zt_pool_df_data = company_common_service_api.amendment_industry(stock_em_zt_pool_df_data)
65
+ stock_em_zt_pool_df_data = common_service_fun_api.symbol_amount_simple(stock_em_zt_pool_df_data.copy())
68
66
 
67
+ stock_em_zt_pool_df_data = company_common_service_api.amendment_industry(stock_em_zt_pool_df_data.copy())
68
+ # 主线标记 复盘用
69
+ stock_em_zt_pool_df_data['main_line'] = '无'
70
+ stock_em_zt_pool_df_data['sub_main_line'] = '无'
69
71
  # 上个交易交易日涨停股票
70
72
  last_trade_day_zt_df = zt_common_service_api.get_last_trade_day_zt(str_day)
71
73
 
@@ -79,8 +81,8 @@ def save_zt_info(str_day):
79
81
  try:
80
82
 
81
83
  # 设置连板数目
82
- stock_em_zt_pool_df_data = set_connected_boards_numbers(stock_em_zt_pool_df_data,
83
- stock_one.symbol, last_trade_day_zt_df)
84
+ stock_em_zt_pool_df_data = set_connected_boards_numbers(stock_em_zt_pool_df_data.copy(),
85
+ stock_one.symbol, last_trade_day_zt_df.copy())
84
86
 
85
87
  ths_zt_pool_one_df = ths_zt_pool_df_data.loc[ths_zt_pool_df_data['symbol'] == stock_one.symbol]
86
88
  if data_frame_util.is_empty(ths_zt_pool_one_df):
@@ -97,6 +99,9 @@ def save_zt_info(str_day):
97
99
 
98
100
  zt_analysis = ths_company_info_api.get_company_hot_info(stock_one.symbol,
99
101
  cookie_info_service.get_ths_cookie())
102
+ if zt_analysis == '':
103
+ zt_analysis = ths_stock_zt_pool_api.zt_analyse(stock_one.symbol)
104
+
100
105
  stock_em_zt_pool_df_data.loc[
101
106
  stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'zt_analysis'] = zt_analysis
102
107
 
@@ -130,8 +135,6 @@ def save_zt_info(str_day):
130
135
 
131
136
  stock_em_zt_pool_df_data['str_day'] = str_day
132
137
  stock_em_zt_pool_df_data['_id'] = stock_em_zt_pool_df_data['symbol'] + "_" + str_day
133
- # 主线标记 复盘用
134
- stock_em_zt_pool_df_data['main_line'] = '无'
135
138
 
136
139
  stock_em_zt_pool_df_data = stock_em_zt_pool_df_data[ZT_FIELD]
137
140
 
@@ -153,16 +156,24 @@ def save_zt_info(str_day):
153
156
 
154
157
  # 设置连板数目
155
158
  def set_connected_boards_numbers(stock_em_zt_pool_df_data, symbol, last_trade_day_zt_df):
156
- connected_boards_df = last_trade_day_zt_df.loc[
159
+ connected_boards_df_copy = last_trade_day_zt_df.loc[
157
160
  last_trade_day_zt_df['symbol'].isin(stock_em_zt_pool_df_data['symbol'])]
158
-
161
+ connected_boards_df = connected_boards_df_copy.copy()
159
162
  connected_boards_df['connected_boards_numbers'] = connected_boards_df['connected_boards_numbers'] + 1
160
163
 
161
164
  connected_boards_df_one = connected_boards_df.loc[connected_boards_df['symbol'] == symbol]
162
165
  if data_frame_util.is_not_empty(connected_boards_df_one):
163
- connected_boards_df_one.loc[connected_boards_df_one['symbol'] == symbol, 'connected_boards_numbers'] = \
166
+ stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == symbol, 'connected_boards_numbers'] = \
164
167
  list(connected_boards_df_one['connected_boards_numbers'])[0]
165
168
 
169
+ if 'main_line' in connected_boards_df_one.columns:
170
+ stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == symbol, 'main_line'] = \
171
+ list(connected_boards_df_one['main_line'])[0]
172
+
173
+ if 'sub_main_line' in connected_boards_df_one.columns:
174
+ stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == symbol, 'sub_main_line'] = \
175
+ list(connected_boards_df_one['sub_main_line'])[0]
176
+
166
177
  return stock_em_zt_pool_df_data
167
178
 
168
179
 
@@ -171,15 +182,31 @@ def sync_miss_zt_data(stock_em_zt_pool_df_data, str_day):
171
182
  now_day = now_date.strftime('%Y-%m-%d')
172
183
  if now_day == str_day:
173
184
  real_time_quotes_all_stocks_df = em_real_time_quotes_api.get_real_time_quotes_now(None, None)
185
+ if data_frame_util.is_empty(real_time_quotes_all_stocks_df):
186
+ return stock_em_zt_pool_df_data
174
187
  real_time_quotes_all_stocks_df = real_time_quotes_all_stocks_df.loc[
175
188
  (real_time_quotes_all_stocks_df['wei_bi'] == 100) & (real_time_quotes_all_stocks_df['chg'] >= 9)]
176
- miss_zt_data_df = real_time_quotes_all_stocks_df.loc[~(
189
+ miss_zt_data_df_copy = real_time_quotes_all_stocks_df.loc[~(
177
190
  real_time_quotes_all_stocks_df['symbol'].isin(stock_em_zt_pool_df_data['symbol']))]
191
+ miss_zt_data_df = miss_zt_data_df_copy.copy()
178
192
  if data_frame_util.is_not_empty(miss_zt_data_df):
179
193
  miss_zt_data_df['buy_1_num'] = miss_zt_data_df['buy_1_num'].astype(float)
180
194
  miss_zt_data_df['now_price'] = miss_zt_data_df['now_price'].astype(float)
181
195
  miss_zt_data_df['closure_funds'] = round(miss_zt_data_df['buy_1_num'] * 100 * miss_zt_data_df['now_price'],
182
196
  2)
197
+
198
+ company_info_industry_df = company_common_service_api.get_company_info_name()
199
+ company_info_industry_df = company_info_industry_df.loc[
200
+ company_info_industry_df['_id'].isin(miss_zt_data_df['symbol'])]
201
+
202
+ company_info_industry_df = company_info_industry_df[['_id', 'industry', 'name']]
203
+
204
+ company_info_industry_df = company_info_industry_df.set_index(['_id'], drop=True)
205
+ miss_zt_data_df = miss_zt_data_df.set_index(['symbol'], drop=False)
206
+
207
+ miss_zt_data_df = pd.merge(miss_zt_data_df, company_info_industry_df, how='outer',
208
+ left_index=True, right_index=True)
209
+
183
210
  miss_zt_data_df = miss_zt_data_df[[
184
211
  'symbol',
185
212
  'name',
@@ -207,7 +234,7 @@ def sync_miss_zt_data(stock_em_zt_pool_df_data, str_day):
207
234
 
208
235
 
209
236
  if __name__ == '__main__':
210
- save_zt_info('2025-04-18')
237
+ save_zt_info('2025-11-04')
211
238
  # from datetime import datetime
212
239
  #
213
240
  # if __name__ == '__main__':
@@ -9,15 +9,13 @@ import mns_common.api.ths.zt.ths_stock_zt_pool_api as ths_stock_zt_pool_api
9
9
  from datetime import datetime
10
10
  import mns_common.utils.data_frame_util as data_frame_util
11
11
  import pandas as pd
12
- import mns_common.component.em.em_stock_info_api as em_stock_info_api
13
12
  import mns_common.component.company.company_common_service_new_api as company_common_service_new_api
14
13
  import mns_common.component.common_service_fun_api as common_service_fun_api
15
14
  from loguru import logger
16
- import mns_common.api.akshare.k_line_api as k_line_api
17
15
  import mns_common.utils.date_handle_util as date_handle_util
18
16
  from mns_common.db.MongodbUtil import MongodbUtil
19
17
  import mns_common.constant.db_name_constant as db_name_constant
20
- import time
18
+ import mns_scheduler.k_line.common.k_line_common_api as k_line_common_api
21
19
 
22
20
  mongodb_util = MongodbUtil('27017')
23
21
 
@@ -32,56 +30,14 @@ def ths_zt_pool(str_day, real_time_quotes_all_stocks):
32
30
  now_date = datetime.now()
33
31
  now_day_str_day = now_date.strftime('%Y-%m-%d')
34
32
  ths_zt_pool_df = ths_stock_zt_pool_api.get_zt_reason(str_day)
35
- if data_frame_util.is_empty(ths_zt_pool_df):
33
+ ths_zt_pool_df_copy = ths_zt_pool_df.copy()
34
+
35
+ if data_frame_util.is_empty(ths_zt_pool_df_copy):
36
36
  return pd.DataFrame()
37
37
  if str_day == now_day_str_day:
38
- ths_zt_pool_df = merge_now_day_zt_info(ths_zt_pool_df, real_time_quotes_all_stocks)
38
+ ths_zt_pool_df = merge_his_day_zt_info(ths_zt_pool_df_copy, str_day)
39
39
  else:
40
- ths_zt_pool_df = merge_his_day_zt_info(ths_zt_pool_df, str_day)
41
-
42
- return ths_zt_pool_df
43
-
44
-
45
- def merge_now_day_zt_info(ths_zt_pool_df, real_time_quotes_all_stocks):
46
- if real_time_quotes_all_stocks is None:
47
- real_time_quotes_all_stocks = em_stock_info_api.get_a_stock_info()
48
- real_time_quotes_all_stocks = real_time_quotes_all_stocks[['symbol', 'amount',
49
- 'exchange', 'flow_mv', 'total_mv']]
50
- real_time_quotes_all_stocks_zt = real_time_quotes_all_stocks.loc[
51
- real_time_quotes_all_stocks['symbol'].isin(ths_zt_pool_df['symbol'])]
52
-
53
- query_field = {
54
- "ths_concept_name": 1,
55
- "ths_concept_code": 1,
56
- "ths_concept_sync_day": 1,
57
- "company_type": 1,
58
- "concept_create_day": 1,
59
- "first_sw_industry": 1,
60
- "third_sw_industry": 1,
61
- "industry": 1,
62
- "list_date": 1,
63
- }
64
- query_field_key = str(query_field)
65
- query_key = str({'symbol': {"$in": list(ths_zt_pool_df['symbol'])}})
66
- company_df_zt = company_common_service_new_api.get_company_info_by_field(query_key, query_field_key)
67
-
68
- company_df_zt = company_df_zt.set_index(['_id'], drop=True)
69
- real_time_quotes_all_stocks_zt = real_time_quotes_all_stocks_zt.set_index(['symbol'], drop=True)
70
- ths_zt_pool_df = ths_zt_pool_df.set_index(['symbol'], drop=False)
71
-
72
- ths_zt_pool_df = pd.merge(ths_zt_pool_df, company_df_zt, how='outer',
73
- left_index=True, right_index=True)
74
-
75
- ths_zt_pool_df = pd.merge(ths_zt_pool_df, real_time_quotes_all_stocks_zt, how='outer',
76
- left_index=True, right_index=True)
77
- ths_zt_pool_df['amount_level'] = round(ths_zt_pool_df['amount'] / common_service_fun_api.HUNDRED_MILLION, 2)
78
- ths_zt_pool_df = common_service_fun_api.classify_symbol(ths_zt_pool_df)
79
- ths_zt_pool_df = common_service_fun_api.total_mv_classification(ths_zt_pool_df)
80
- ths_zt_pool_df.fillna('', inplace=True)
81
- if 'zt_flag' in ths_zt_pool_df.columns:
82
- del ths_zt_pool_df['zt_flag']
83
- if 'zt_tag' in ths_zt_pool_df.columns:
84
- del ths_zt_pool_df['zt_tag']
40
+ ths_zt_pool_df = merge_his_day_zt_info(ths_zt_pool_df_copy, str_day)
85
41
 
86
42
  return ths_zt_pool_df
87
43
 
@@ -142,40 +98,37 @@ def merge_his_day_zt_info(ths_zt_pool_df, str_day):
142
98
  def get_bfq_daily_line(ths_zt_pool_df, str_day):
143
99
  query_k_line = {'symbol': {"$in": list(ths_zt_pool_df['symbol'])}, 'date': date_handle_util.no_slash_date(str_day)}
144
100
  bfq_daily_line_df = mongodb_util.find_query_data('stock_bfq_daily', query_k_line)
145
- if data_frame_util.is_not_empty(bfq_daily_line_df):
101
+ if bfq_daily_line_df.shape[0] >= ths_zt_pool_df.shape[0]:
146
102
  bfq_daily_line_df = bfq_daily_line_df[['amount', 'chg', 'close', 'exchange',
147
103
  'symbol', 'amount_level',
148
104
  'flow_mv', 'flow_mv_sp'
149
105
  ]]
150
106
  bfq_daily_line_df = bfq_daily_line_df.rename(columns={"close": 'now_price'})
151
107
  return bfq_daily_line_df
152
-
153
- bfq_k_line_df = pd.DataFrame()
154
- for zt_one in ths_zt_pool_df.itertuples():
155
- try:
108
+ else:
109
+ bfq_k_line_result_df = pd.DataFrame()
110
+ for zt_one in ths_zt_pool_df.itertuples():
156
111
  symbol = zt_one.symbol
157
- # 检查symbol是否以'6'开头
158
- if symbol.startswith('6'):
159
- symbol_a = '1.' + symbol
160
- else:
161
- symbol_a = '0.' + symbol
162
- bfq_daily_line_df = k_line_api.stock_zh_a_hist(symbol_a,
163
- 'daily',
164
- date_handle_util.no_slash_date(str_day),
165
- date_handle_util.no_slash_date(str_day),
166
- '')
167
- if data_frame_util.is_empty(bfq_daily_line_df):
168
- continue
169
- bfq_daily_line_df = bfq_daily_line_df[['amount', 'chg', 'close', 'exchange',
170
- 'symbol', 'amount_level',
171
- 'flow_mv', 'flow_mv_sp'
172
- ]]
173
- bfq_daily_line_df = bfq_daily_line_df.rename(columns={"close": 'now_price'})
174
- bfq_k_line_df = pd.concat([bfq_k_line_df, bfq_daily_line_df])
175
- except BaseException as e:
176
- logger.warning("同步不复权k线异常:{},{}", symbol, e)
177
-
178
- return bfq_k_line_df
112
+ try:
113
+
114
+ bfq_daily_line_df = k_line_common_api.get_k_line_common_adapter(symbol, 'daily', '', str_day)
115
+
116
+ if data_frame_util.is_empty(bfq_daily_line_df):
117
+ continue
118
+
119
+ bfq_daily_line_df_one = bfq_daily_line_df.loc[
120
+ bfq_daily_line_df['date'] == date_handle_util.no_slash_date(str_day)]
121
+
122
+ bfq_daily_line_df_one = bfq_daily_line_df_one[['amount', 'chg', 'close', 'exchange',
123
+ 'symbol', 'amount_level',
124
+ 'flow_mv', 'flow_mv_sp'
125
+ ]]
126
+ bfq_daily_line_df_one = bfq_daily_line_df_one.rename(columns={"close": 'now_price'})
127
+ bfq_k_line_result_df = pd.concat([bfq_k_line_result_df, bfq_daily_line_df_one])
128
+ except BaseException as e:
129
+ logger.warning("同步不复权k线异常:{},{}", symbol, e)
130
+
131
+ return bfq_k_line_result_df
179
132
 
180
133
 
181
134
  def save_ths_zt_pool(ths_zt_pool_df, str_day):
@@ -235,6 +188,6 @@ if __name__ == '__main__':
235
188
  # trade_date = '2024-08-01'
236
189
  # zt_df = ths_zt_pool(trade_date, None)
237
190
  # save_ths_zt_pool(zt_df, trade_date)
238
- trade_date = '2025-04-18'
239
- ths_zt_pool_df = ths_zt_pool(trade_date, None)
240
- save_ths_zt_pool(ths_zt_pool_df, trade_date)
191
+ trade_date = '2025-09-05'
192
+ ths_zt_pool_df_test = ths_zt_pool(trade_date, None)
193
+ save_ths_zt_pool(ths_zt_pool_df_test, trade_date)
@@ -2,7 +2,7 @@ import sys
2
2
  import os
3
3
 
4
4
  file_path = os.path.abspath(__file__)
5
- end = file_path.index('mns') + 16
5
+ end = file_path.index('mns') + 17
6
6
  project_path = file_path[0:end]
7
7
  sys.path.append(project_path)
8
8
  from mns_common.db.MongodbUtil import MongodbUtil
@@ -14,9 +14,15 @@ from loguru import logger
14
14
 
15
15
 
16
16
  def update_null_zt_reason(str_day):
17
- query = {"str_day": str_day, "$or": [{"zt_reason": "0", },
17
+ query = {"str_day": str_day, "$or": [{"zt_reason": "0"},
18
18
  {"zt_reason": ""},
19
- {"zt_reason": float('nan')}]}
19
+ {"zt_reason": float('nan')},
20
+
21
+ {"zt_analysis": "0"},
22
+ {"zt_analysis": ""},
23
+ {"zt_analysis": float('nan')},
24
+
25
+ ]}
20
26
  stock_zt_pool_df_null_zt_reason = mongodb_util.find_query_data('stock_zt_pool', query)
21
27
  if data_frame_util.is_empty(stock_zt_pool_df_null_zt_reason):
22
28
  return None
@@ -30,11 +36,18 @@ def update_null_zt_reason(str_day):
30
36
  ths_pool_zt_reason_one_df = ths_zt_pool_df_data.loc[
31
37
  ths_zt_pool_df_data['symbol'] == stock_zt_one.symbol]
32
38
  if data_frame_util.is_not_empty(ths_pool_zt_reason_one_df):
39
+ # 涨停原因
33
40
  stock_zt_pool_df_one_df = stock_zt_pool_df_null_zt_reason.loc[
34
41
  stock_zt_pool_df_null_zt_reason['symbol'] == stock_zt_one.symbol]
35
42
  stock_zt_pool_df_one_df['zt_reason'] = list(ths_pool_zt_reason_one_df['zt_reason'])[0]
43
+
44
+ # 涨停分析
45
+ zt_analysis = ths_stock_zt_pool_api.zt_analyse(stock_zt_one.symbol)
46
+ stock_zt_pool_df_one_df['zt_analysis'] = zt_analysis
47
+
36
48
  mongodb_util.save_mongo(stock_zt_pool_df_one_df, 'stock_zt_pool')
37
- no_reason_list.remove(stock_zt_one.symbol)
49
+ if stock_zt_one.symbol in no_reason_list:
50
+ no_reason_list.remove(stock_zt_one.symbol)
38
51
  except BaseException as e:
39
52
  logger.error("出现异常:{},{}", stock_zt_one.symbol, e)
40
53
  continue
@@ -44,4 +57,4 @@ def update_null_zt_reason(str_day):
44
57
 
45
58
 
46
59
  if __name__ == '__main__':
47
- update_null_zt_reason('2024-12-12')
60
+ update_null_zt_reason('2025-11-03')
File without changes
@@ -0,0 +1,161 @@
1
+
2
+ import warnings
3
+ # 忽略所有警告
4
+ warnings.filterwarnings("ignore")
5
+ from loguru import logger
6
+ from datetime import datetime
7
+ import mns_scheduler.dt.stock_dt_pool_sync as stock_dt_pool_sync_api
8
+ import mns_scheduler.zb.stock_zb_pool_sync as stock_zb_pool_sync_api
9
+ import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
10
+ import mns_scheduler.k_line.month_week_daily.daily_week_month_line_sync as daily_week_month_line_sync_api
11
+ import mns_scheduler.db.col_move_service as col_move_service
12
+ import mns_scheduler.zt.open_data.kcx_high_chg_open_data_sync as kcx_high_chg_open_data_sync
13
+ import mns_scheduler.zt.export.export_kcx_high_chg_open_data_to_excel as export_kcx_high_chg_open_data_to_excel
14
+ import mns_scheduler.zt.connected_boards.zt_five_boards_sync_api as zt_five_boards_sync_api
15
+ import mns_scheduler.zt.zt_pool.em_zt_pool_sync_api as em_zt_pool_sync_api
16
+ import mns_scheduler.k_line.clean.k_line_info_clean_task as k_line_info_clean_service
17
+
18
+ import mns_scheduler.open.sync_one_day_open_data_to_db_service as sync_one_day_open_data_to_db_service
19
+ import mns_scheduler.zt.high_chg.sync_high_chg_pool_service as sync_high_chg_pool_service
20
+ import mns_scheduler.zt.high_chg.sync_high_chg_real_time_quotes_service as sync_high_chg_real_time_quotes_service
21
+ import mns_scheduler.zt.zt_pool.ths_zt_pool_sync_api as ths_zt_pool_sync_api
22
+ import mns_scheduler.trade.tfp.stock_tfp_info_sync as stock_tfp_info_sync
23
+
24
+
25
+ # 定时同步每日交易行情数据(前复权)
26
+ def stock_daily_sync_qfq():
27
+ now_date = datetime.now()
28
+ str_now_date = now_date.strftime('%Y-%m-%d')
29
+ logger.info('同步每日行情数据(前复权):' + str_now_date)
30
+ daily_week_month_line_sync_api.sync_all_daily_data('daily',
31
+ 'qfq', 'stock_qfq_daily', str_now_date)
32
+
33
+
34
+ # 同步当日k c x 高涨幅数据
35
+ def realtime_quotes_now_zt_kc_data_sync():
36
+ now_date = datetime.now()
37
+ str_day = now_date.strftime('%Y-%m-%d')
38
+ if trade_date_common_service_api.is_trade_day(str_day):
39
+ # 同步当日kcx 高涨幅 当天交易数据和开盘数据
40
+ kcx_high_chg_open_data_sync.sync_all_kc_zt_data(str_day, None)
41
+ # 同步当日开盘数据
42
+ sync_one_day_open_data_to_db_service.sync_one_day_open_data(str_day)
43
+ # 涨停数据同步到excel
44
+ export_kcx_high_chg_open_data_to_excel.export_kc_zt_data(str_day)
45
+
46
+
47
+ # 同步涨停池
48
+ def sync_stock_zt_pool():
49
+ now_date = datetime.now()
50
+ str_day = now_date.strftime('%Y-%m-%d')
51
+ if trade_date_common_service_api.is_trade_day(str_day):
52
+ logger.info('同步当天涨停池股开始')
53
+ em_stock_zt_pool = em_zt_pool_sync_api.save_zt_info(str_day)
54
+ zt_five_boards_sync_api.update_five_connected_boards_task(em_stock_zt_pool)
55
+ logger.info('同步ths股票涨停池')
56
+ ths_zt_pool_df = ths_zt_pool_sync_api.ths_zt_pool(str_day, None)
57
+ ths_zt_pool_sync_api.save_ths_zt_pool(ths_zt_pool_df, str_day)
58
+ logger.info('同步当天涨停池股票完成')
59
+
60
+
61
+ # 保存今天高涨幅数据
62
+ def sync_toady_stock_zt_pool():
63
+ logger.info('同步今天涨幅大于9.5的symbol')
64
+ now_date = datetime.now()
65
+ str_day = now_date.strftime('%Y-%m-%d')
66
+ # 同步高涨幅实时行情
67
+ sync_high_chg_real_time_quotes_service.sync_high_chg_real_time_quotes(str_day)
68
+ # 同步高涨幅列表
69
+ sync_high_chg_pool_service.sync_stock_high_chg_pool_list(str_day, None)
70
+
71
+
72
+ # 计算下一个交易日k线数据
73
+ def generate_new_day_k_line_info():
74
+ now_date = datetime.now()
75
+ str_day = now_date.strftime('%Y-%m-%d')
76
+ # 生成下一个交易日日期k线数据 number=2 获取下一个交易日 日期
77
+ if trade_date_common_service_api.is_trade_day(str_day):
78
+ dis_number = 2
79
+ else:
80
+ dis_number = 1
81
+ next_trade_day = trade_date_common_service_api.get_further_trade_date(str_day, dis_number)
82
+ k_line_info_clean_service.sync_k_line_info_task(next_trade_day)
83
+ logger.info('计算当日k线信息完成:{}', str_day)
84
+
85
+
86
+ # 同步一天k线 涨停 数据
87
+ def sync_daily_data_info():
88
+ # 同步k线数据
89
+ try:
90
+ stock_daily_sync_qfq()
91
+ except BaseException as e:
92
+ logger.error("同步当日k线数据异常:{}", e)
93
+
94
+ # 同步当日k c x 高涨幅数据
95
+ try:
96
+ realtime_quotes_now_zt_kc_data_sync()
97
+ except BaseException as e:
98
+ logger.error("同步当日kcx高涨幅数据异常:{}", e)
99
+
100
+ # 同步涨停池数据信息
101
+ try:
102
+ sync_stock_zt_pool()
103
+ except BaseException as e:
104
+ logger.error("同步涨停数据信息异常:{}", e)
105
+
106
+ # 同步今日高涨幅数据 依赖涨停股票池的数据
107
+ try:
108
+ sync_toady_stock_zt_pool()
109
+ except BaseException as e:
110
+ logger.error("同步今日高涨幅数据异常:{}", e)
111
+
112
+ # 计算当日k线数据
113
+ try:
114
+ generate_new_day_k_line_info()
115
+ except BaseException as e:
116
+ logger.error("计算当日k线数据异常:{}", e)
117
+
118
+ # 跌停信息
119
+ def sync_stock_dt_pool():
120
+ now_date = datetime.now()
121
+ str_now_day = now_date.strftime('%Y-%m-%d')
122
+ if trade_date_common_service_api.is_trade_day(str_now_day):
123
+ stock_dt_pool_sync_api.sync_stock_dt_pool(str_now_day)
124
+ logger.info("同步跌停信息任务执行成功:{}", str_now_day)
125
+
126
+
127
+ # 炸板信息
128
+ def sync_stock_zb_pool():
129
+ now_date = datetime.now()
130
+ str_now_day = now_date.strftime('%Y-%m-%d')
131
+ if trade_date_common_service_api.is_trade_day(str_now_day):
132
+ stock_zb_pool_sync_api.sync_stock_zb_pool(str_now_day)
133
+ logger.info("同步炸板信息任务执行成功:{}", str_now_day)
134
+ # 同步停复牌信息
135
+ sync_stock_tfp()
136
+
137
+
138
+ # 同步停复牌信息
139
+ def sync_stock_tfp():
140
+ now_date = datetime.now()
141
+ str_day = now_date.strftime('%Y-%m-%d')
142
+ stock_tfp_info_sync.sync_stock_tfp(str_day)
143
+
144
+
145
+
146
+
147
+ # 当天实时数据备份
148
+ def col_data_move():
149
+ now_date = datetime.now()
150
+ str_day = now_date.strftime('%Y-%m-%d')
151
+ logger.info('当天实时数据备份:{}', str_day)
152
+ if trade_date_common_service_api.is_trade_day(str_day):
153
+ col_move_service.sync_col_move(str_day)
154
+
155
+ if __name__ == '__main__':
156
+ col_data_move()
157
+ sync_daily_data_info()
158
+ sync_stock_zt_pool()
159
+ sync_stock_dt_pool()
160
+ sync_stock_zb_pool()
161
+
@@ -0,0 +1,142 @@
1
+ import warnings
2
+
3
+ # 忽略所有警告
4
+ warnings.filterwarnings("ignore")
5
+ from loguru import logger
6
+ import mns_scheduler.dt.stock_dt_pool_sync as stock_dt_pool_sync_api
7
+ import mns_scheduler.zb.stock_zb_pool_sync as stock_zb_pool_sync_api
8
+ import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
9
+ import mns_scheduler.k_line.month_week_daily.daily_week_month_line_sync as daily_week_month_line_sync_api
10
+ import mns_scheduler.db.col_move_service as col_move_service
11
+ import mns_scheduler.zt.open_data.kcx_high_chg_open_data_sync as kcx_high_chg_open_data_sync
12
+ import mns_scheduler.zt.export.export_kcx_high_chg_open_data_to_excel as export_kcx_high_chg_open_data_to_excel
13
+ import mns_scheduler.zt.connected_boards.zt_five_boards_sync_api as zt_five_boards_sync_api
14
+ import mns_scheduler.zt.zt_pool.em_zt_pool_sync_api as em_zt_pool_sync_api
15
+ import mns_scheduler.k_line.clean.k_line_info_clean_task as k_line_info_clean_service
16
+ import mns_scheduler.open.sync_one_day_open_data_to_db_service as sync_one_day_open_data_to_db_service
17
+ import mns_scheduler.zt.high_chg.sync_high_chg_pool_service as sync_high_chg_pool_service
18
+ import mns_scheduler.zt.high_chg.sync_high_chg_real_time_quotes_service as sync_high_chg_real_time_quotes_service
19
+ import mns_scheduler.zt.zt_pool.ths_zt_pool_sync_api as ths_zt_pool_sync_api
20
+ import mns_scheduler.trade.tfp.stock_tfp_info_sync as stock_tfp_info_sync
21
+
22
+
23
+ # 定时同步每日交易行情数据(前复权)
24
+ def stock_daily_sync_qfq():
25
+ logger.info('同步每日行情数据(前复权):' + str_day)
26
+ daily_week_month_line_sync_api.sync_all_daily_data('daily',
27
+ 'qfq', 'stock_qfq_daily', str_day)
28
+
29
+
30
+ # 同步当日k c x 高涨幅数据
31
+ def realtime_quotes_now_zt_kc_data_sync():
32
+ if trade_date_common_service_api.is_trade_day(str_day):
33
+ # 同步当日kcx 高涨幅 当天交易数据和开盘数据
34
+ kcx_high_chg_open_data_sync.sync_all_kc_zt_data(str_day, None)
35
+ # 同步当日开盘数据
36
+ sync_one_day_open_data_to_db_service.sync_one_day_open_data(str_day)
37
+ # 涨停数据同步到excel
38
+ export_kcx_high_chg_open_data_to_excel.export_kc_zt_data(str_day)
39
+
40
+
41
+ # 同步涨停池
42
+ def sync_stock_zt_pool():
43
+ if trade_date_common_service_api.is_trade_day(str_day):
44
+ logger.info('同步当天涨停池股开始')
45
+ em_stock_zt_pool = em_zt_pool_sync_api.save_zt_info(str_day)
46
+ zt_five_boards_sync_api.update_five_connected_boards_task(em_stock_zt_pool)
47
+ logger.info('同步ths股票涨停池')
48
+ ths_zt_pool_df = ths_zt_pool_sync_api.ths_zt_pool(str_day, None)
49
+ ths_zt_pool_sync_api.save_ths_zt_pool(ths_zt_pool_df, str_day)
50
+ logger.info('同步当天涨停池股票完成')
51
+
52
+
53
+ # 保存今天高涨幅数据
54
+ def sync_toady_stock_zt_pool():
55
+ logger.info('同步今天涨幅大于9.5的symbol')
56
+ # 同步高涨幅实时行情
57
+ sync_high_chg_real_time_quotes_service.sync_high_chg_real_time_quotes(str_day)
58
+ # 同步高涨幅列表
59
+ sync_high_chg_pool_service.sync_stock_high_chg_pool_list(str_day, None)
60
+
61
+
62
+ # 计算下一个交易日k线数据
63
+ def generate_new_day_k_line_info():
64
+ # 生成下一个交易日日期k线数据 number=2 获取下一个交易日 日期
65
+ if trade_date_common_service_api.is_trade_day(str_day):
66
+ dis_number = 2
67
+ else:
68
+ dis_number = 1
69
+ next_trade_day = trade_date_common_service_api.get_further_trade_date(str_day, dis_number)
70
+ k_line_info_clean_service.sync_k_line_info_task(next_trade_day)
71
+ logger.info('计算当日k线信息完成:{}', str_day)
72
+
73
+
74
+ # 同步一天k线 涨停 数据
75
+ def sync_daily_data_info():
76
+ # 同步k线数据
77
+ try:
78
+ stock_daily_sync_qfq()
79
+ except BaseException as e:
80
+ logger.error("同步当日k线数据异常:{}", e)
81
+
82
+ # 同步当日k c x 高涨幅数据
83
+ try:
84
+ realtime_quotes_now_zt_kc_data_sync()
85
+ except BaseException as e:
86
+ logger.error("同步当日kcx高涨幅数据异常:{}", e)
87
+
88
+ # 同步涨停池数据信息
89
+ try:
90
+ sync_stock_zt_pool()
91
+ except BaseException as e:
92
+ logger.error("同步涨停数据信息异常:{}", e)
93
+
94
+ # 同步今日高涨幅数据 依赖涨停股票池的数据
95
+ try:
96
+ sync_toady_stock_zt_pool()
97
+ except BaseException as e:
98
+ logger.error("同步今日高涨幅数据异常:{}", e)
99
+
100
+ # 计算当日k线数据
101
+ try:
102
+ generate_new_day_k_line_info()
103
+ except BaseException as e:
104
+ logger.error("计算当日k线数据异常:{}", e)
105
+
106
+
107
+ # 跌停信息
108
+ def sync_stock_dt_pool():
109
+ if trade_date_common_service_api.is_trade_day(str_day):
110
+ stock_dt_pool_sync_api.sync_stock_dt_pool(str_day)
111
+ logger.info("同步跌停信息任务执行成功:{}", str_day)
112
+
113
+
114
+ # 炸板信息
115
+ def sync_stock_zb_pool():
116
+ if trade_date_common_service_api.is_trade_day(str_day):
117
+ stock_zb_pool_sync_api.sync_stock_zb_pool(str_day)
118
+ logger.info("同步炸板信息任务执行成功:{}", str_day)
119
+ # 同步停复牌信息
120
+ sync_stock_tfp()
121
+
122
+
123
+ # 同步停复牌信息
124
+ def sync_stock_tfp():
125
+ stock_tfp_info_sync.sync_stock_tfp(str_day)
126
+
127
+
128
+ # 当天实时数据备份
129
+ def col_data_move():
130
+ logger.info('当天实时数据备份:{}', str_day)
131
+ if trade_date_common_service_api.is_trade_day(str_day):
132
+ col_move_service.sync_col_move(str_day)
133
+
134
+
135
+ if __name__ == '__main__':
136
+ # todo 修改日期
137
+ str_day = '2025-11-11'
138
+ # col_data_move()
139
+ sync_daily_data_info()
140
+ sync_stock_zt_pool()
141
+ sync_stock_dt_pool()
142
+ sync_stock_zb_pool()