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
@@ -1,41 +0,0 @@
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 mns_common.constant.extra_income_db_name as extra_income_db_name
9
- import pandas as pd
10
- from mns_common.db.v2.MongodbUtilV2 import MongodbUtilV2
11
-
12
- mongodbUtilV2_27019 = MongodbUtilV2('27019', extra_income_db_name.EXTRA_INCOME)
13
-
14
-
15
- def symbol_add_prefix(symbol):
16
- symbol_simple = symbol[0:6]
17
- suffix = symbol[7:9]
18
- if suffix in ['SH']:
19
- return '1.' + symbol_simple
20
- elif suffix in ['SZ']:
21
- return '0.' + symbol_simple
22
- elif suffix in ['BJ']:
23
- return '0.' + symbol_simple
24
-
25
-
26
- # col_name 保存数据的结婚
27
- def save_fail_data(now_day, symbol_prefix, col_name):
28
- fail_dict = {'begin_date': now_day,
29
- 'end_date': now_day,
30
- 'symbol': symbol_prefix,
31
- 'col_name': col_name,
32
- 'type': 'kzz',
33
- 'sync_day': now_day,
34
- 'valid': True,
35
- }
36
- fail_df = pd.DataFrame(fail_dict, index=[1])
37
- mongodbUtilV2_27019.insert_mongo(fail_df, extra_income_db_name.ONE_MINUTE_SYNC_FAIL)
38
-
39
-
40
- if __name__ == '__main__':
41
- symbol_add_prefix('000001.SZ')
@@ -1,7 +0,0 @@
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)
@@ -1,87 +0,0 @@
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 mns_common.component.em.em_stock_info_api as em_stock_info_api
10
- from loguru import logger
11
- import time
12
- import mns_common.utils.data_frame_util as data_frame_util
13
- from mns_common.db.MongodbUtil import MongodbUtil
14
- import mns_scheduler.extraIncome.one_minute.common.symbol_handle_util as symbol_handle_util
15
- from mns_common.db.v2.MongodbUtilV2 import MongodbUtilV2
16
- import mns_scheduler.extraIncome.one_minute.common.db_create_index as db_create_index
17
- import mns_common.constant.extra_income_db_name as extra_income_db_name
18
- import mns_common.api.k_line.stock_minute_data_api as stock_minute_data_api
19
- from datetime import datetime
20
-
21
- mongodb_util_27017 = MongodbUtil('27017')
22
- mongodbUtilV2_27019 = MongodbUtilV2('27019', extra_income_db_name.EXTRA_INCOME)
23
-
24
-
25
- def sync_etf_one_minute(data_tag):
26
- etf_real_time_quotes = em_stock_info_api.get_etf_info()
27
- etf_real_time_quotes = classify_symbol(etf_real_time_quotes)
28
- etf_real_time_quotes['symbol'] = etf_real_time_quotes.apply(
29
- lambda row: row['symbol'] + '.SZ' if row['classification'] in ['S', 'C']
30
- else row['symbol'] + '.BJ' if row['classification'] in ['X']
31
- else row['symbol'] + '.SH',
32
- axis=1
33
- )
34
- # 假设数字格式为 YYYYMMDD
35
- # debt_real_time_quotes['list_date'] = pd.to_datetime(debt_real_time_quotes['list_date'],
36
- # format='%Y%m%d').dt.strftime('%Y-%m-%d')
37
-
38
- etf_real_time_quotes = etf_real_time_quotes.loc[etf_real_time_quotes['amount'] != 0]
39
-
40
- now_date = datetime.now()
41
- now_day = now_date.strftime('%Y-%m-%d')
42
- year = now_date.strftime('%Y')
43
- col_name = extra_income_db_name.ONE_MINUTE_K_LINE_BFQ_ETF + '_' + str(year)
44
- # 创建索引
45
- db_create_index.create_index(mongodbUtilV2_27019, col_name)
46
-
47
- for stock_one in etf_real_time_quotes.itertuples():
48
-
49
- symbol = stock_one.symbol
50
- symbol_prefix = symbol_handle_util.symbol_add_prefix(symbol)
51
- try:
52
- one_min_df = stock_minute_data_api.get_minute_data(symbol_prefix, now_day, now_day, '1', '')
53
- one_min_df['symbol'] = symbol
54
- one_min_df['_id'] = one_min_df['symbol'] + '_' + one_min_df['time']
55
- if data_frame_util.is_empty(one_min_df) or one_min_df.shape[0] < 241:
56
- symbol_handle_util.save_fail_data(now_day, symbol_prefix, col_name)
57
- logger.error("当前ETF分钟数据同步异常:{}", symbol)
58
- continue
59
- else:
60
- del one_min_df['ava_price']
61
- if data_tag:
62
- mongodbUtilV2_27019.insert_mongo(one_min_df, col_name)
63
- else:
64
- mongodbUtilV2_27019.save_mongo(one_min_df, col_name)
65
- except BaseException as e:
66
- time.sleep(2)
67
- symbol_handle_util.save_fail_data(now_day, symbol_prefix, col_name)
68
- logger.error("同步ETF分钟数据出现异常:{},{},{}", e, symbol, now_day)
69
- logger.info("同步完ETF分钟数据:{},{}", stock_one.symbol, stock_one.name)
70
-
71
-
72
- def classify_symbol(etf_real_time_quotes):
73
- etf_real_time_quotes['classification'] = etf_real_time_quotes['market'].apply(
74
- lambda market: classify_symbol_one(market))
75
- return etf_real_time_quotes
76
-
77
-
78
- # 单个股票分类
79
- def classify_symbol_one(market):
80
- if market == 0:
81
- return 'S'
82
- else:
83
- return 'H'
84
-
85
-
86
- if __name__ == '__main__':
87
- sync_etf_one_minute("2025-03-17", "2025-03-17")
@@ -1,7 +0,0 @@
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)
@@ -1,74 +0,0 @@
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 loguru import logger
10
- import mns_common.utils.data_frame_util as data_frame_util
11
- from mns_common.db.MongodbUtil import MongodbUtil
12
- from mns_common.db.v2.MongodbUtilV2 import MongodbUtilV2
13
- import mns_scheduler.extraIncome.one_minute.common.db_create_index as db_create_index
14
- import mns_common.constant.extra_income_db_name as extra_income_db_name
15
- from datetime import datetime
16
- import mns_common.api.k_line.stock_minute_data_api as stock_minute_data_api
17
- import mns_scheduler.extraIncome.one_minute.common.symbol_handle_util as symbol_handle_util
18
-
19
- mongodb_util_27017 = MongodbUtil('27017')
20
- mongodbUtilV2_27019 = MongodbUtilV2('27019', extra_income_db_name.EXTRA_INCOME)
21
-
22
- main_index_list = [
23
- "000001.SH",
24
- "000016.SH",
25
- "000010.SH",
26
- "000009.SH",
27
- "000015.SH",
28
- "399001.SZ",
29
- "399004.SZ",
30
- "399005.SZ",
31
- "399006.SZ",
32
- "000300.SH",
33
- "000905.SH",
34
- "000688.SH",
35
- "000903.SH",
36
- "000906.SH",
37
- "000852.SH",
38
- "000932.SH",
39
- "000933.SH",
40
- "980017.SZ",
41
- "399808.SZ",
42
- "399997.SZ",
43
- ]
44
-
45
-
46
- def sync_main_index_one_minute(data_tag):
47
- now_date = datetime.now()
48
- now_day = now_date.strftime('%Y-%m-%d')
49
- year = now_date.strftime('%Y')
50
- col_name = extra_income_db_name.ONE_MINUTE_K_LINE_BFQ_MAIN_INDEX + '_' + str(year)
51
- # 创建索引
52
- db_create_index.create_index(mongodbUtilV2_27019, col_name)
53
- for symbol in main_index_list:
54
- try:
55
- symbol_prefix = symbol_handle_util.symbol_add_prefix(symbol)
56
- one_min_df = stock_minute_data_api.get_minute_data(symbol_prefix, now_day, now_day, '1', '')
57
- one_min_df['symbol'] = symbol
58
- one_min_df['_id'] = one_min_df['symbol'] + '_' + one_min_df['time']
59
- if data_frame_util.is_empty(one_min_df) or one_min_df.shape[0] < 241:
60
- logger.error("当前沪深指数分钟数据同步异常:{}", symbol)
61
- continue
62
- else:
63
- del one_min_df['ava_price']
64
- if data_tag:
65
- mongodbUtilV2_27019.insert_mongo(one_min_df, col_name)
66
- else:
67
- mongodbUtilV2_27019.save_mongo(one_min_df, col_name)
68
- except BaseException as e:
69
- logger.error("沪深指数分钟数据同步异常:{},{}", symbol, e)
70
- logger.info("沪深指数分钟数据同步完成:{}", symbol)
71
-
72
-
73
- if __name__ == '__main__':
74
- sync_main_index_one_minute(False)
@@ -1,7 +0,0 @@
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)
@@ -1,87 +0,0 @@
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 mns_common.component.em.em_stock_info_api as em_stock_info_api
10
- from loguru import logger
11
- import time
12
- import mns_common.utils.data_frame_util as data_frame_util
13
- from mns_common.db.MongodbUtil import MongodbUtil
14
- import mns_scheduler.extraIncome.one_minute.common.symbol_handle_util as symbol_handle_util
15
- from mns_common.db.v2.MongodbUtilV2 import MongodbUtilV2
16
- import mns_scheduler.extraIncome.one_minute.common.db_create_index as db_create_index
17
- import mns_common.constant.extra_income_db_name as extra_income_db_name
18
- import mns_common.api.k_line.stock_minute_data_api as stock_minute_data_api
19
- from datetime import datetime
20
-
21
- mongodb_util_27017 = MongodbUtil('27017')
22
- mongodbUtilV2_27019 = MongodbUtilV2('27019', extra_income_db_name.EXTRA_INCOME)
23
-
24
-
25
- def sync_kzz_one_minute(data_tag):
26
- debt_real_time_quotes = em_stock_info_api.get_kzz_info()
27
- debt_real_time_quotes = classify_symbol(debt_real_time_quotes)
28
- debt_real_time_quotes['symbol'] = debt_real_time_quotes.apply(
29
- lambda row: row['symbol'] + '.SZ' if row['classification'] in ['S', 'C']
30
- else row['symbol'] + '.BJ' if row['classification'] in ['X']
31
- else row['symbol'] + '.SH',
32
- axis=1
33
- )
34
- # 假设数字格式为 YYYYMMDD
35
- # debt_real_time_quotes['list_date'] = pd.to_datetime(debt_real_time_quotes['list_date'],
36
- # format='%Y%m%d').dt.strftime('%Y-%m-%d')
37
-
38
- debt_real_time_quotes = debt_real_time_quotes.loc[debt_real_time_quotes['amount'] != 0]
39
-
40
- now_date = datetime.now()
41
- now_day = now_date.strftime('%Y-%m-%d')
42
- year = now_date.strftime('%Y')
43
- col_name = extra_income_db_name.ONE_MINUTE_K_LINE_BFQ_KZZ + '_' + str(year)
44
- # 创建索引
45
- db_create_index.create_index(mongodbUtilV2_27019, col_name)
46
-
47
- for stock_one in debt_real_time_quotes.itertuples():
48
-
49
- symbol = stock_one.symbol
50
- symbol_prefix = symbol_handle_util.symbol_add_prefix(symbol)
51
- try:
52
- one_min_df = stock_minute_data_api.get_minute_data(symbol_prefix, now_day, now_day, '1', '')
53
- one_min_df['symbol'] = symbol
54
- one_min_df['_id'] = one_min_df['symbol'] + '_' + one_min_df['time']
55
- if data_frame_util.is_empty(one_min_df) or one_min_df.shape[0] < 241:
56
- symbol_handle_util.save_fail_data(now_day, symbol_prefix, col_name)
57
- logger.error("当前可转债分钟数据同步异常:{}", symbol)
58
- continue
59
- else:
60
- del one_min_df['ava_price']
61
- if data_tag:
62
- mongodbUtilV2_27019.insert_mongo(one_min_df, col_name)
63
- else:
64
- mongodbUtilV2_27019.save_mongo(one_min_df, col_name)
65
- except BaseException as e:
66
- time.sleep(2)
67
- symbol_handle_util.save_fail_data(now_day, symbol_prefix, col_name)
68
- logger.error("同步可转债分钟数据出现异常:,{},{},{}", e, symbol, now_day)
69
- logger.info("同步完可转债分钟数据:{},{}", stock_one.symbol, stock_one.name)
70
-
71
-
72
- def classify_symbol(debt_real_time_quotes_df):
73
- debt_real_time_quotes_df['classification'] = debt_real_time_quotes_df['market'].apply(
74
- lambda market: classify_symbol_one(market))
75
- return debt_real_time_quotes_df
76
-
77
-
78
- # 单个股票分类
79
- def classify_symbol_one(market):
80
- if market == 0:
81
- return 'S'
82
- else:
83
- return 'H'
84
-
85
-
86
- if __name__ == '__main__':
87
- 3()
@@ -1,34 +0,0 @@
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 mns_scheduler.extraIncome.one_minute.index.main_index_sync_task as main_index_sync_task
9
- import mns_scheduler.extraIncome.one_minute.etf.etf_one_minute_sync_task as etf_one_minute_sync_task
10
- import mns_scheduler.extraIncome.one_minute.kzz.kzz_one_minute_sync_task as kzz_one_minute_sync_task
11
- import mns_scheduler.extraIncome.one_minute.stock.stock_one_minute_sync_task as stock_one_minute_sync_task
12
- from datetime import datetime
13
- import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
14
-
15
-
16
- def sync_one_minute_data():
17
- now_date = datetime.now()
18
- hour = now_date.hour
19
- now_day = now_date.strftime('%Y-%m-%d')
20
- if trade_date_common_service_api.is_trade_day(now_day):
21
- if 15 < hour < 20:
22
- main_index_sync_task.sync_main_index_one_minute(True)
23
- etf_one_minute_sync_task.sync_etf_one_minute(True)
24
- kzz_one_minute_sync_task.sync_kzz_one_minute(True)
25
- stock_one_minute_sync_task.sync_stock_one_minute(True)
26
- elif hour < 9 or hour >= 20:
27
- main_index_sync_task.sync_main_index_one_minute(False)
28
- etf_one_minute_sync_task.sync_etf_one_minute(False)
29
- kzz_one_minute_sync_task.sync_kzz_one_minute(False)
30
- stock_one_minute_sync_task.sync_stock_one_minute(False)
31
-
32
-
33
- if __name__ == '__main__':
34
- sync_one_minute_data()
@@ -1,7 +0,0 @@
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)
@@ -1,89 +0,0 @@
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 mns_common.component.common_service_fun_api as common_service_fun_api
9
- import mns_common.component.em.em_stock_info_api as em_stock_info_api
10
- from loguru import logger
11
- import time
12
- import mns_common.utils.data_frame_util as data_frame_util
13
- from mns_common.db.MongodbUtil import MongodbUtil
14
- import mns_scheduler.extraIncome.one_minute.common.symbol_handle_util as symbol_handle_util
15
- from mns_common.db.v2.MongodbUtilV2 import MongodbUtilV2
16
- import mns_scheduler.extraIncome.one_minute.common.db_create_index as db_create_index
17
- import mns_common.constant.extra_income_db_name as extra_income_db_name
18
- import mns_common.api.k_line.stock_minute_data_api as stock_minute_data_api
19
- from datetime import datetime
20
-
21
- mongodb_util_27017 = MongodbUtil('27017')
22
- mongodbUtilV2_27019 = MongodbUtilV2('27019', extra_income_db_name.EXTRA_INCOME)
23
-
24
-
25
- def sync_stock_one_minute(data_tag):
26
- real_time_quotes_all_stocks = em_stock_info_api.get_a_stock_info()
27
- real_time_quotes_all_stocks = common_service_fun_api.classify_symbol(real_time_quotes_all_stocks)
28
- real_time_quotes_all_stocks['symbol'] = real_time_quotes_all_stocks.apply(
29
- lambda row: row['symbol'] + '.SZ' if row['classification'] in ['S', 'C']
30
- else row['symbol'] + '.BJ' if row['classification'] in ['X']
31
- else row['symbol'] + '.SH',
32
- axis=1)
33
- # 假设数字格式为 YYYYMMDD
34
- # debt_real_time_quotes['list_date'] = pd.to_datetime(debt_real_time_quotes['list_date'],
35
- # format='%Y%m%d').dt.strftime('%Y-%m-%d')
36
-
37
- real_time_quotes_all_stocks = real_time_quotes_all_stocks.loc[real_time_quotes_all_stocks['amount'] != 0]
38
-
39
- now_date = datetime.now()
40
- now_day = now_date.strftime('%Y-%m-%d')
41
- year = now_date.strftime('%Y')
42
-
43
- # 创建索引
44
- db_create_index.create_index(mongodbUtilV2_27019, extra_income_db_name.ONE_MINUTE_K_LINE_BFQ_C + '_' + str(year))
45
- db_create_index.create_index(mongodbUtilV2_27019, extra_income_db_name.ONE_MINUTE_K_LINE_BFQ_BJ + '_' + str(year))
46
- db_create_index.create_index(mongodbUtilV2_27019, extra_income_db_name.ONE_MINUTE_K_LINE_BFQ_H + '_' + str(year))
47
- db_create_index.create_index(mongodbUtilV2_27019, extra_income_db_name.ONE_MINUTE_K_LINE_BFQ_K + '_' + str(year))
48
- db_create_index.create_index(mongodbUtilV2_27019, extra_income_db_name.ONE_MINUTE_K_LINE_BFQ_S + '_' + str(year))
49
-
50
- for stock_one in real_time_quotes_all_stocks.itertuples():
51
- classification = stock_one.classification
52
-
53
- if classification == 'X':
54
- col_name = extra_income_db_name.ONE_MINUTE_K_LINE_BFQ_BJ
55
- elif classification == 'S':
56
- col_name = extra_income_db_name.ONE_MINUTE_K_LINE_BFQ_S
57
- elif classification == 'H':
58
- col_name = extra_income_db_name.ONE_MINUTE_K_LINE_BFQ_H
59
- elif classification == 'K':
60
- col_name = extra_income_db_name.ONE_MINUTE_K_LINE_BFQ_K
61
- elif classification == 'C':
62
- col_name = extra_income_db_name.ONE_MINUTE_K_LINE_BFQ_C
63
- col_name = col_name + '_' + str(year)
64
-
65
- symbol = stock_one.symbol
66
- symbol_prefix = symbol_handle_util.symbol_add_prefix(symbol)
67
- try:
68
- one_min_df = stock_minute_data_api.get_minute_data(symbol_prefix, now_day, now_day, '1', '')
69
- one_min_df['symbol'] = symbol
70
- one_min_df['_id'] = one_min_df['symbol'] + '_' + one_min_df['time']
71
- if data_frame_util.is_empty(one_min_df) or one_min_df.shape[0] < 241:
72
- symbol_handle_util.save_fail_data(now_day, symbol_prefix, col_name)
73
- logger.error("当前股票分钟数据同步异常:{}", symbol)
74
- continue
75
- else:
76
- del one_min_df['ava_price']
77
- if data_tag:
78
- mongodbUtilV2_27019.insert_mongo(one_min_df, col_name)
79
- else:
80
- mongodbUtilV2_27019.save_mongo(one_min_df, col_name)
81
- except BaseException as e:
82
- time.sleep(2)
83
- symbol_handle_util.save_fail_data(now_day, symbol_prefix, col_name)
84
- logger.error("同步股票分钟数据出现异常:,{},{},{}", e, symbol, now_day)
85
- logger.info("同步股票分钟票数据完整:{},{}", stock_one.symbol, stock_one.name)
86
-
87
-
88
- if __name__ == '__main__':
89
- sync_stock_one_minute()
@@ -1,7 +0,0 @@
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)
@@ -1,103 +0,0 @@
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 mns_common.api.em.east_money_etf_api as east_money_etf_api
9
- import pandas as pd
10
- from loguru import logger
11
- import time
12
- import mns_common.utils.data_frame_util as data_frame_util
13
- from mns_common.db.MongodbUtil import MongodbUtil
14
- import tushare as ts
15
- from mns_common.db.v2.MongodbUtilV2 import MongodbUtilV2
16
- import mns_scheduler.extraIncome.one_minute.common.db_create_index as db_create_index
17
- import mns_common.constant.extra_income_db_name as extra_income_db_name
18
-
19
- mongodb_util_27017 = MongodbUtil('27017')
20
- mongodbUtilV2_27019 = MongodbUtilV2('27019', extra_income_db_name.EXTRA_INCOME)
21
- pro = ts.pro_api('782213d20640249f1dbae50a7f56b22684b8e915a61e435e015579a1')
22
-
23
-
24
- def get_minute_data(symbol, freq, start_date, end_date):
25
- # 获取浦发银行60000.SH的历史分钟数据
26
- df = pro.stk_mins(ts_code=symbol, freq=freq, start_date=start_date, end_date=end_date)
27
- return df
28
-
29
-
30
- def sync_etf_one_minute(trade_date_list_df):
31
- etf_real_time_quotes_df = east_money_etf_api.get_etf_real_time_quotes()
32
- etf_real_time_quotes_df = classify_symbol(etf_real_time_quotes_df)
33
- etf_real_time_quotes_df['symbol'] = etf_real_time_quotes_df.apply(
34
- lambda row: row['symbol'] + '.SZ' if row['classification'] in ['S', 'C']
35
- else row['symbol'] + '.BJ' if row['classification'] in ['X']
36
- else row['symbol'] + '.SH',
37
- axis=1
38
- )
39
-
40
- db_name = extra_income_db_name.ONE_MINUTE_K_LINE_BFQ_ETF
41
- db_create_index.create_index(mongodbUtilV2_27019, db_name)
42
- for stock_one in etf_real_time_quotes_df.itertuples():
43
- trade_date_list_df_copy = trade_date_list_df.copy()
44
- symbol = stock_one.symbol
45
- for i in range(0, len(trade_date_list_df_copy), 28):
46
- try:
47
- new_df = trade_date_list_df_copy.iloc[i:i + 28]
48
- first_df = new_df.iloc[0] # 第一个 DataFrame
49
- last_df = new_df.iloc[-1] # 最后一个 DataFrame
50
- begin_date = first_df.trade_date + ' 09:20:00'
51
- end_date = last_df.trade_date + ' 15:00:00'
52
-
53
- df = get_minute_data(symbol, '1min', begin_date, end_date)
54
- if data_frame_util.is_not_empty(df):
55
- df = df.rename(columns={
56
- "trade_time": "time",
57
- "ts_code": "symbol",
58
- "vol": "volume",
59
- })
60
- df['time_tick'] = df['time'].str[11:19]
61
- df = df.loc[df['time_tick'] <= '15:00:00']
62
- del df['time_tick']
63
- df['_id'] = df['symbol'] + '_' + df['time']
64
- mongodbUtilV2_27019.insert_mongo(df, db_name)
65
- except BaseException as e:
66
- time.sleep(2)
67
- first_df = new_df.iloc[0] # 第一个 DataFrame
68
- last_df = new_df.iloc[-1] # 最后一个 DataFrame
69
- begin_date = first_df.trade_date + ' 09:20:00'
70
- end_date = last_df.trade_date + ' 15:00:00'
71
- fail_dict = {'begin_date': begin_date,
72
- 'end_date': end_date,
73
- 'symbol': symbol,
74
- 'db_name': db_name
75
- }
76
- fail_df = pd.DataFrame(fail_dict, index=[1])
77
- mongodbUtilV2_27019.insert_mongo(fail_df, db_name + '_fail')
78
-
79
- logger.error("同步数据出现异常:{},{},{},{}", e, symbol, begin_date, end_date)
80
- logger.info("同步完数据:{},{}", stock_one.symbol, stock_one.name)
81
-
82
- return etf_real_time_quotes_df
83
-
84
-
85
- def classify_symbol(debt_real_time_quotes_df):
86
- debt_real_time_quotes_df['classification'] = debt_real_time_quotes_df['market'].apply(
87
- lambda market: classify_symbol_one(market))
88
- return debt_real_time_quotes_df
89
-
90
-
91
- # 单个股票分类
92
- def classify_symbol_one(market):
93
- if market == 0:
94
- return 'S'
95
- else:
96
- return 'H'
97
-
98
-
99
- if __name__ == '__main__':
100
- query_trade = {"$and": [{"trade_date": {"$gte": "2025-03-08"}}, {"trade_date": {"$lte": "2025-03-16"}}]}
101
- trade_date_list_df_all = mongodb_util_27017.find_query_data('trade_date_list', query_trade)
102
-
103
- sync_etf_one_minute(trade_date_list_df_all)
@@ -1,113 +0,0 @@
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 mns_common.api.em.east_money_debt_api as east_money_debt_api
10
- import pandas as pd
11
- from loguru import logger
12
- import time
13
- import mns_common.utils.data_frame_util as data_frame_util
14
- from mns_common.db.MongodbUtil import MongodbUtil
15
- import tushare as ts
16
- from mns_common.db.v2.MongodbUtilV2 import MongodbUtilV2
17
- import mns_scheduler.extraIncome.one_minute.common.db_create_index as db_create_index
18
- import mns_common.constant.extra_income_db_name as extra_income_db_name
19
- mongodb_util_27017 = MongodbUtil('27017')
20
- mongodbUtilV2_27019 = MongodbUtilV2('27019', extra_income_db_name.EXTRA_INCOME)
21
- pro = ts.pro_api('782213d20640249f1dbae50a7f56b22684b8e915a61e435e015579a1')
22
-
23
-
24
- def get_minute_data(symbol, freq, start_date, end_date):
25
- # 获取浦发银行60000.SH的历史分钟数据
26
- df = pro.stk_mins(ts_code=symbol, freq=freq, start_date=start_date, end_date=end_date)
27
- return df
28
-
29
-
30
- def sync_kzz_one_minute(trade_date_list_df):
31
- debt_real_time_quotes = east_money_debt_api.get_debt_real_time_quotes()
32
- debt_real_time_quotes = classify_symbol(debt_real_time_quotes)
33
- debt_real_time_quotes['symbol'] = debt_real_time_quotes.apply(
34
- lambda row: row['symbol'] + '.SZ' if row['classification'] in ['S', 'C']
35
- else row['symbol'] + '.BJ' if row['classification'] in ['X']
36
- else row['symbol'] + '.SH',
37
- axis=1
38
- )
39
- # 假设数字格式为 YYYYMMDD
40
- # debt_real_time_quotes['list_date'] = pd.to_datetime(debt_real_time_quotes['list_date'],
41
- # format='%Y%m%d').dt.strftime('%Y-%m-%d')
42
-
43
- db_name = extra_income_db_name.ONE_MINUTE_K_LINE_BFQ_KZZ
44
- db_create_index.create_index(mongodbUtilV2_27019, db_name)
45
-
46
- for stock_one in debt_real_time_quotes.itertuples():
47
-
48
- trade_date_list_df_copy = trade_date_list_df.copy()
49
-
50
- # list_date = stock_one.list_date
51
- # trade_date_list_df_copy = trade_date_list_df_copy.loc[trade_date_list_df_copy['_id'] >= list_date]
52
-
53
- symbol = stock_one.symbol
54
-
55
- for i in range(0, len(trade_date_list_df_copy), 28):
56
- try:
57
- new_df = trade_date_list_df_copy.iloc[i:i + 28]
58
- first_df = new_df.iloc[0] # 第一个 DataFrame
59
- last_df = new_df.iloc[-1] # 最后一个 DataFrame
60
- begin_date = first_df.trade_date + ' 09:20:00'
61
- end_date = last_df.trade_date + ' 15:00:00'
62
-
63
- df = get_minute_data(symbol, '1min', begin_date, end_date)
64
- if data_frame_util.is_not_empty(df):
65
- df = df.rename(columns={
66
- "trade_time": "time",
67
- "ts_code": "symbol",
68
- "vol": "volume",
69
- })
70
- df['time_tick'] = df['time'].str[11:19]
71
- df = df.loc[df['time_tick'] <= '15:00:00']
72
- del df['time_tick']
73
- df['_id'] = df['symbol'] + '_' + df['time']
74
- mongodbUtilV2_27019.insert_mongo(df, db_name)
75
- except BaseException as e:
76
- time.sleep(2)
77
- first_df = new_df.iloc[0] # 第一个 DataFrame
78
- last_df = new_df.iloc[-1] # 最后一个 DataFrame
79
- begin_date = first_df.trade_date + ' 09:20:00'
80
- end_date = last_df.trade_date + ' 15:00:00'
81
- fail_dict = {'begin_date': begin_date,
82
- 'end_date': end_date,
83
- 'symbol': symbol,
84
- 'db_name': db_name
85
- }
86
- fail_df = pd.DataFrame(fail_dict, index=[1])
87
- mongodbUtilV2_27019.insert_mongo(fail_df, db_name + '_fail')
88
-
89
- logger.error("同步数据出现异常:{},{},{},{}", e, symbol, begin_date, end_date)
90
- logger.info("同步完数据:{},{}", stock_one.symbol, stock_one.name)
91
-
92
- return debt_real_time_quotes
93
-
94
-
95
- def classify_symbol(debt_real_time_quotes_df):
96
- debt_real_time_quotes_df['classification'] = debt_real_time_quotes_df['market'].apply(
97
- lambda market: classify_symbol_one(market))
98
- return debt_real_time_quotes_df
99
-
100
-
101
- # 单个股票分类
102
- def classify_symbol_one(market):
103
- if market == 0:
104
- return 'S'
105
- else:
106
- return 'H'
107
-
108
-
109
- if __name__ == '__main__':
110
- query_trade = {"$and": [{"trade_date": {"$gte": "2025-03-08"}}, {"trade_date": {"$lte": "2025-03-16"}}]}
111
- trade_date_list_df_all = mongodb_util_27017.find_query_data('trade_date_list', query_trade)
112
-
113
- sync_kzz_one_minute(trade_date_list_df_all)