mns-scheduler 1.1.8.4__py3-none-any.whl → 1.4.3.2__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.
Files changed (129) hide show
  1. mns_scheduler/__init__.py +1 -3
  2. mns_scheduler/company_info/announce/company_announce_sync_service.py +65 -0
  3. mns_scheduler/company_info/base/__init__.py +1 -1
  4. mns_scheduler/company_info/base/sync_company_base_info_api.py +171 -79
  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 +29 -9
  9. mns_scheduler/company_info/constant/__init__.py +1 -1
  10. mns_scheduler/company_info/constant/company_constant_data.py +285 -184
  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 +7 -0
  14. mns_scheduler/company_info/em_stock_info/sync_em_stock_info_sync.py +80 -0
  15. mns_scheduler/company_info/remark/__init__.py +1 -1
  16. mns_scheduler/company_info/remark/company_remark_info_sync.py +3 -3
  17. mns_scheduler/concept/clean/kpl_concept_clean_api.py +1 -1
  18. mns_scheduler/concept/clean/ths_concept_clean_api.py +20 -4
  19. mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py +21 -16
  20. mns_scheduler/concept/ths/common/ths_concept_update_common_api.py +4 -1
  21. mns_scheduler/concept/ths/detaill/ths_concept_detail_api.py +7 -7
  22. mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_new_index_api.py +9 -4
  23. mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py +3 -3
  24. mns_scheduler/db/col_move_service.py +3 -3
  25. mns_scheduler/db/script/__init__.py +1 -1
  26. mns_scheduler/db/script/col_move_script.py +1 -1
  27. mns_scheduler/db/script/db_move/__init__.py +7 -0
  28. mns_scheduler/db/script/db_move/col_move_one_service.py +34 -0
  29. mns_scheduler/db/script/sync/__init__.py +1 -1
  30. mns_scheduler/db/script/sync/remote_data_sync_to_local.py +57 -4
  31. mns_scheduler/db/script/sync/sync_hui_ce_test_data.py +80 -0
  32. mns_scheduler/db/script/sync/sync_hui_ce_test_data_01.py +69 -0
  33. mns_scheduler/db/script/update/__init__.py +7 -0
  34. mns_scheduler/db/script/update/update_col_field.py +36 -0
  35. mns_scheduler/finance/__init__.py +1 -1
  36. mns_scheduler/finance/{em_financial_asset_liability_sync_service_api.py → em/em_financial_asset_liability_sync_service_api.py} +2 -2
  37. mns_scheduler/finance/{em_financial_profit_sync_service_api.py → em/em_financial_profit_sync_service_api.py} +27 -26
  38. mns_scheduler/finance/{finance_common_api.py → em/finance_common_api.py} +3 -3
  39. mns_scheduler/finance/{sync_financial_report_service_api.py → sync_financial_report_service_task.py} +80 -27
  40. mns_scheduler/finance/xue_qiu/down_load_xueqiu_report_api.py +77 -0
  41. mns_scheduler/finance/xue_qiu/sync_xue_qiu_fiance_data.py +161 -0
  42. mns_scheduler/hk/__init__.py +1 -1
  43. mns_scheduler/hk/hk_company_info_sync_service_api.py +4 -4
  44. mns_scheduler/hk/hk_industry_info_sync_service_api.py +3 -5
  45. mns_scheduler/industry/__init__.py +7 -0
  46. mns_scheduler/industry/ths/__init__.py +7 -0
  47. mns_scheduler/industry/ths/ths_industry_index_service.py +58 -0
  48. mns_scheduler/industry/ths/ths_industry_sync_service.py +68 -0
  49. mns_scheduler/irm/__init__.py +1 -1
  50. mns_scheduler/irm/api/__init__.py +1 -1
  51. mns_scheduler/irm/api/sh_stock_sns_sse_info_api.py +1 -1
  52. mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py +1 -1
  53. mns_scheduler/irm/stock_irm_cninfo_service.py +12 -8
  54. mns_scheduler/k_line/clean/daily/__init__.py +1 -1
  55. mns_scheduler/k_line/clean/daily/daily_k_line_clean_common_service.py +52 -6
  56. mns_scheduler/k_line/clean/daily/daily_k_line_service.py +7 -2
  57. mns_scheduler/k_line/clean/k_line_info_clean_impl.py +3 -2
  58. mns_scheduler/k_line/clean/k_line_info_clean_task.py +42 -15
  59. mns_scheduler/k_line/clean/week_month/__init__.py +1 -1
  60. mns_scheduler/k_line/clean/week_month/normal_week_month_k_line_service.py +124 -26
  61. mns_scheduler/k_line/clean/week_month/sub_new_week_month_k_line_service.py +2 -2
  62. mns_scheduler/k_line/common/__init__.py +7 -0
  63. mns_scheduler/k_line/common/k_line_common_api.py +188 -0
  64. mns_scheduler/k_line/hot_stocks/__init__.py +1 -1
  65. mns_scheduler/k_line/hot_stocks/recent_hot_stocks_clean_service.py +1 -1
  66. mns_scheduler/k_line/{sync → month_week_daily}/bfq_k_line_sync.py +14 -29
  67. mns_scheduler/k_line/{sync → month_week_daily}/daily_week_month_line_sync.py +11 -12
  68. mns_scheduler/k_line/sync_status/__init__.py +7 -0
  69. mns_scheduler/k_line/sync_status/k_line_sync_status_check.py +54 -0
  70. mns_scheduler/k_line/test/__init__.py +1 -1
  71. mns_scheduler/k_line/test/k_line_info_clean_his_data.py +14 -3
  72. mns_scheduler/k_line/year_quarter/__init__.py +7 -0
  73. mns_scheduler/k_line/year_quarter/year_quarter_line_sync.py +76 -0
  74. mns_scheduler/kpl/selection/symbol/sync_best_choose_symbol.py +1 -2
  75. mns_scheduler/kpl/selection/symbol/sync_kpl_concept_symbol_choose_reason_api.py +108 -0
  76. mns_scheduler/kpl/selection/total/sync_kpl_best_total_sync_api.py +5 -0
  77. mns_scheduler/lhb/__init__.py +1 -1
  78. mns_scheduler/lhb/stock_lhb_sync_service.py +1 -1
  79. mns_scheduler/open/__init__.py +1 -1
  80. mns_scheduler/open/sync_one_day_open_data_to_db_service.py +2 -3
  81. mns_scheduler/risk/__init__.py +1 -1
  82. mns_scheduler/risk/compliance/undisclosed_annual_report_api.py +8 -2
  83. mns_scheduler/risk/financial/annual_report_audit_check_api.py +13 -3
  84. mns_scheduler/risk/financial/net_assets_check_api.py +21 -18
  85. mns_scheduler/risk/financial/profit_income_check_api.py +7 -2
  86. mns_scheduler/risk/financial_report_risk_check_api.py +1 -1
  87. mns_scheduler/risk/major_violations/register_and_investigate_stock_sync_api.py +1 -1
  88. mns_scheduler/risk/self/wei_pan_stock_api.py +1 -1
  89. mns_scheduler/risk/test/__init__.py +1 -1
  90. mns_scheduler/risk/test/fix_blask_list.py +4 -6
  91. mns_scheduler/risk/transactions/transactions_check_api.py +22 -4
  92. mns_scheduler/self_choose/__init__.py +1 -1
  93. mns_scheduler/self_choose/ths_self_choose_service.py +60 -32
  94. mns_scheduler/trade/auto_login/trader_auto_service.py +6 -4
  95. mns_scheduler/trade/auto_sell_service_api.py +4 -4
  96. mns_scheduler/trade/balance/__init__.py +7 -0
  97. mns_scheduler/trade/balance/ths_account_balance_service.py +7 -0
  98. mns_scheduler/trade/sync_position_api.py +39 -6
  99. mns_scheduler/trade/task/trader_task_service.py +26 -9
  100. mns_scheduler/trade/tfp/__init__.py +7 -0
  101. mns_scheduler/trade/tfp/stock_tfp_info_sync.py +56 -0
  102. mns_scheduler/zb/stock_zb_pool_sync.py +1 -16
  103. mns_scheduler/zt/high_chg/sync_high_chg_pool_service.py +2 -2
  104. mns_scheduler/zt/high_chg/sync_high_chg_real_time_quotes_service.py +1 -1
  105. mns_scheduler/zt/script/__init__.py +1 -1
  106. mns_scheduler/zt/script/fix_error_deal_day.py +41 -0
  107. mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py +2 -2
  108. mns_scheduler/zt/script/sync_high_chg_pool_his_data.py +2 -2
  109. mns_scheduler/zt/script/sync_now_higt_chg_zt.py +8 -7
  110. mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py +256 -55
  111. mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py +33 -90
  112. mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py +24 -13
  113. mns_scheduler/zz_task/compensation/__init__.py +0 -0
  114. mns_scheduler/zz_task/compensation/compensate_task.py +161 -0
  115. mns_scheduler/zz_task/compensation/compensate_task_one_day.py +142 -0
  116. mns_scheduler/zz_task/data_sync_task.py +177 -91
  117. {mns_scheduler-1.1.8.4.dist-info → mns_scheduler-1.4.3.2.dist-info}/METADATA +1 -1
  118. mns_scheduler-1.4.3.2.dist-info/RECORD +169 -0
  119. {mns_scheduler-1.1.8.4.dist-info → mns_scheduler-1.4.3.2.dist-info}/WHEEL +1 -1
  120. mns_scheduler/2014-2015-test/2014_2015_chg_statistics.py +0 -87
  121. mns_scheduler/big_deal/ths_big_deal_sync.py +0 -98
  122. mns_scheduler/db/real_time_task_check.py +0 -84
  123. mns_scheduler/debt/kzz_bond_info_sync.py +0 -33
  124. mns_scheduler-1.1.8.4.dist-info/RECORD +0 -142
  125. /mns_scheduler/{big_deal → company_info/announce}/__init__.py +0 -0
  126. /mns_scheduler/{2014-2015-test → finance/em}/__init__.py +0 -0
  127. /mns_scheduler/{debt → finance/xue_qiu}/__init__.py +0 -0
  128. /mns_scheduler/k_line/{sync → month_week_daily}/__init__.py +0 -0
  129. {mns_scheduler-1.1.8.4.dist-info → mns_scheduler-1.4.3.2.dist-info}/top_level.txt +0 -0
@@ -2,6 +2,6 @@ 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)
@@ -2,23 +2,21 @@ 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
 
9
9
  import mns_common.constant.db_name_constant as db_name_constant
10
-
11
- from mns_common.db.MongodbUtil import MongodbUtil
12
-
13
10
  import mns_scheduler.risk.financial_report_risk_check_api as financial_report_risk_check_api
11
+ from mns_common.db.MongodbUtil import MongodbUtil
14
12
 
15
13
  mongodb_util = MongodbUtil('27017')
16
14
 
17
15
 
18
16
  def fix_profit_black_list():
19
- period_time = "2023-12-31 00:00:00"
17
+ period_time = "2024-12-31 00:00:00"
20
18
  period = 4
21
- report_type_list = [db_name_constant.EM_STOCK_PROFIT, db_name_constant.EM_STOCK_ASSET_LIABILITY]
19
+ report_type_list = [db_name_constant.EM_STOCK_ASSET_LIABILITY, db_name_constant.EM_STOCK_PROFIT]
22
20
  for report_type in report_type_list:
23
21
  query = {'REPORT_DATE': period_time}
24
22
  em_stock_profit_df_list = mongodb_util.find_query_data(report_type, query)
@@ -2,10 +2,10 @@ 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
- import mns_common.api.em.east_money_stock_api as east_money_stock_api
8
+ import mns_common.component.em.em_stock_info_api as em_stock_info_api
9
9
  from datetime import datetime
10
10
  import mns_common.component.self_choose.black_list_service_api as black_list_service_api
11
11
  import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
@@ -16,6 +16,7 @@ import mns_common.component.company.company_common_service_new_api as company_co
16
16
  from mns_common.constant.black_list_classify_enum import BlackClassify
17
17
  import mns_common.component.common_service_fun_api as common_service_fun_api
18
18
  import mns_common.utils.date_handle_util as date_handle_util
19
+ import mns_common.component.tfp.stock_tfp_api as stock_tfp_api
19
20
 
20
21
  mongodb_util = MongodbUtil('27017')
21
22
 
@@ -39,9 +40,21 @@ BJS_MARKET_MIN_VOLUME = 1500000
39
40
 
40
41
 
41
42
  def transactions_check_task():
42
- real_time_quotes_now = east_money_stock_api.get_real_time_quotes_all_stocks()
43
+ # 获取当前日期和时间
44
+ now = datetime.now()
45
+
46
+ # 格式化输出
47
+ now_day_str = now.strftime("%Y%m%d")
48
+
49
+ now_day_number = float(now_day_str)
50
+
51
+ real_time_quotes_now = em_stock_info_api.get_a_stock_info()
52
+ real_time_quotes_now['list_date'] = real_time_quotes_now['list_date'].fillna(19890604)
53
+ real_time_quotes_now = real_time_quotes_now.loc[real_time_quotes_now['list_date'] <= now_day_number]
43
54
  real_time_quotes_now = common_service_fun_api.classify_symbol(real_time_quotes_now)
44
55
  real_time_quotes_now = common_service_fun_api.exclude_ts_symbol(real_time_quotes_now)
56
+ # 排除交易金额为0的
57
+ real_time_quotes_now = common_service_fun_api.exclude_amount_zero_stock(real_time_quotes_now)
45
58
 
46
59
  de_list_symbol = company_common_service_new_api.get_de_list_company()
47
60
 
@@ -100,8 +113,13 @@ def now_price_check(stock_one):
100
113
  now_date = datetime.now()
101
114
  str_day = now_date.strftime('%Y-%m-%d')
102
115
  str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
116
+
117
+ tfp_symbol_list = stock_tfp_api.get_stock_tfp_symbol_list_by_day(str_day)
118
+ if stock_one.symbol in tfp_symbol_list:
119
+ return
120
+
103
121
  key_id = stock_one.symbol + "_" + BlackClassify.CLOSE_PRICE_RISK.level_code
104
- if now_price < MIN_NOW_PRICE:
122
+ if MIN_NOW_PRICE > now_price > 0:
105
123
  black_list_service_api.save_black_stock(
106
124
  key_id,
107
125
  stock_one.symbol,
@@ -2,6 +2,6 @@ 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)
@@ -2,17 +2,16 @@ 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
  import mns_common.api.ths.self_choose.ths_self_choose_api as ths_self_choose_api
9
9
  import mns_common.constant.db_name_constant as db_name_constant
10
10
  from mns_common.db.MongodbUtil import MongodbUtil
11
- import mns_common.api.ths.zt.ths_stock_zt_pool_api as ths_stock_zt_pool_api
11
+ import mns_common.component.cookie.cookie_info_service as cookie_info_service
12
12
  import mns_common.component.common_service_fun_api as common_service_fun_api
13
13
  from datetime import datetime
14
14
  import mns_common.utils.data_frame_util as data_frame_util
15
- from functools import lru_cache
16
15
  import mns_common.constant.self_choose_constant as self_choose_constant
17
16
  import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
18
17
 
@@ -41,37 +40,49 @@ mongodb_util = MongodbUtil('27017')
41
40
  fixed_optional_list = ['899050', '881157']
42
41
 
43
42
 
44
- @lru_cache()
45
- def get_ths_cookie():
46
- query = {"type": "ths_cookie"}
47
- stock_account_info = mongodb_util.find_query_data(db_name_constant.STOCK_ACCOUNT_INFO, query)
48
- ths_cookie = list(stock_account_info['cookie'])[0]
49
- return ths_cookie
50
-
51
-
52
43
  def add_fixed_optional():
53
- ths_cookie = get_ths_cookie()
44
+ ths_cookie = cookie_info_service.get_ths_cookie()
54
45
  for symbol in fixed_optional_list:
55
46
  ths_self_choose_api.add_stock_to_account(symbol, ths_cookie)
56
47
 
57
48
 
58
49
  def delete_all_self_choose_stocks():
59
- ths_cookie = get_ths_cookie()
50
+ ths_cookie = cookie_info_service.get_ths_cookie()
60
51
  all_self_choose_stock_list = ths_self_choose_api.get_all_self_choose_stock_list(ths_cookie)
61
52
  for stock_one in all_self_choose_stock_list.itertuples():
62
53
  symbol = stock_one.code
63
54
  ths_self_choose_api.del_stock_from_account(symbol, ths_cookie)
64
55
 
65
56
 
66
- def add_self_choose_local():
67
- ths_cookie = get_ths_cookie()
68
-
57
+ # 添加固定自选股票
58
+ def add_self_choose_symbol():
59
+ ths_cookie = cookie_info_service.get_ths_cookie()
60
+ # 固定自选
69
61
  self_choose_symbol_df = mongodb_util.find_all_data(db_name_constant.SELF_CHOOSE_STOCK)
70
62
  if data_frame_util.is_not_empty(self_choose_symbol_df):
71
63
  self_choose_symbol_df = self_choose_symbol_df.sort_values(by=['str_now_date'], ascending=False)
72
64
  for stock_one in self_choose_symbol_df.itertuples():
73
65
  ths_self_choose_api.add_stock_to_account(stock_one.symbol, ths_cookie)
74
66
 
67
+
68
+ # 添加今日选择股票
69
+ def add_today_choose_symbol():
70
+ ths_cookie = cookie_info_service.get_ths_cookie()
71
+ now_date = datetime.now()
72
+ str_day = now_date.strftime('%Y-%m-%d')
73
+ last_trade_day = trade_date_common_service_api.get_last_trade_day(str_day)
74
+ last_trade_day_time = last_trade_day + " 15:00:00"
75
+ query = {'str_now_date': {"$gte": last_trade_day_time}, "valid": True}
76
+ self_choose_symbol_today_df = mongodb_util.find_query_data(db_name_constant.TODAY_SELF_CHOOSE_STOCK, query)
77
+ if data_frame_util.is_not_empty(self_choose_symbol_today_df):
78
+ self_choose_symbol_today_df = self_choose_symbol_today_df.sort_values(by=['str_now_date'], ascending=True)
79
+ for stock_one in self_choose_symbol_today_df.itertuples():
80
+ ths_self_choose_api.add_stock_to_account(stock_one.symbol, ths_cookie)
81
+
82
+
83
+ # 添加同花顺概念
84
+ def add_self_choose_concept():
85
+ ths_cookie = cookie_info_service.get_ths_cookie()
75
86
  query_plate = {'self_type': {
76
87
  "$in": [self_choose_constant.SELF_CHOOSE_THS_CONCEPT,
77
88
  self_choose_constant.SELF_CHOOSE_THS_INDUSTRY]}}
@@ -89,42 +100,59 @@ def add_trade_stocks():
89
100
  str_day = now_date.strftime('%Y-%m-%d')
90
101
  last_trade_day = trade_date_common_service_api.get_last_trade_day(str_day)
91
102
  query = {"$and": [{"str_day": {"$gte": last_trade_day}}, {"str_day": {"$lte": str_day}}]}
103
+
104
+ position_stock_df = mongodb_util.find_query_data(db_name_constant.POSITION_STOCK, query)
105
+ if data_frame_util.is_not_empty(position_stock_df):
106
+ stock_list = set(position_stock_df['symbol'])
107
+ else:
108
+ stock_list = set([])
92
109
  trade_stocks_df = mongodb_util.find_query_data(db_name_constant.BUY_STOCK_NAME, query)
93
- ths_cookie = get_ths_cookie()
94
110
  if data_frame_util.is_not_empty(trade_stocks_df):
95
- for stock_one in trade_stocks_df.itertuples():
96
- ths_self_choose_api.add_stock_to_account(stock_one.symbol, ths_cookie)
111
+ stock_list = stock_list.union(set(trade_stocks_df['symbol']))
112
+ ths_cookie = cookie_info_service.get_ths_cookie()
113
+ if len(stock_list) > 0:
114
+ for symbol in stock_list:
115
+ ths_self_choose_api.add_stock_to_account(symbol, ths_cookie)
97
116
 
98
117
 
99
118
  # 添加连板到自选
100
119
  def add_continue_boards_zt_stocks():
101
- ths_cookie = get_ths_cookie()
120
+ ths_cookie = cookie_info_service.get_ths_cookie()
102
121
  now_date = datetime.now()
103
122
  str_day = now_date.strftime('%Y-%m-%d')
104
123
  if trade_date_common_service_api.is_trade_day(str_day):
105
- ths_stock_zt_pool_df = ths_stock_zt_pool_api.get_zt_reason(None)
124
+ query = {'str_day': str_day}
125
+ stock_zt_pool_df = mongodb_util.find_query_data(db_name_constant.STOCK_ZT_POOL, query)
126
+ if data_frame_util.is_empty(stock_zt_pool_df):
127
+ str_day = trade_date_common_service_api.get_before_trade_date(str_day, 2)
128
+ query = {'str_day': str_day}
129
+ stock_zt_pool_df = mongodb_util.find_query_data(db_name_constant.STOCK_ZT_POOL, query)
106
130
  else:
107
131
  str_day = trade_date_common_service_api.get_last_trade_day(str_day)
108
- ths_stock_zt_pool_df = ths_stock_zt_pool_api.get_zt_reason(str_day)
109
- ths_stock_zt_pool_df = ths_stock_zt_pool_df.loc[ths_stock_zt_pool_df['connected_boards_numbers'] > 1]
110
- ths_stock_zt_pool_df = common_service_fun_api.exclude_st_symbol(ths_stock_zt_pool_df)
111
- ths_stock_zt_pool_df = ths_stock_zt_pool_df.sort_values(by=['connected_boards_numbers'], ascending=False)
112
- for stock_one in ths_stock_zt_pool_df.itertuples():
132
+ query = {'str_day': str_day}
133
+ stock_zt_pool_df = mongodb_util.find_query_data(db_name_constant.STOCK_ZT_POOL, query)
134
+ stock_zt_pool_df = stock_zt_pool_df.loc[stock_zt_pool_df['connected_boards_numbers'] >= 3]
135
+ stock_zt_pool_df = common_service_fun_api.exclude_st_symbol(stock_zt_pool_df)
136
+ stock_zt_pool_df = stock_zt_pool_df.sort_values(by=['connected_boards_numbers'], ascending=False)
137
+ for stock_one in stock_zt_pool_df.itertuples():
113
138
  ths_self_choose_api.add_stock_to_account(stock_one.symbol, ths_cookie)
114
139
 
115
140
 
116
141
  # 自选股操作 删除当天自选股 增加新的连板股票 添加固定选择自选
117
142
  def self_choose_stock_handle():
118
143
  delete_all_self_choose_stocks()
144
+ # 固定自选板块
145
+ add_fixed_optional()
146
+ # 添加同花顺概念
147
+ add_self_choose_concept()
148
+ # 连板股票
149
+ add_continue_boards_zt_stocks()
119
150
  # 自己买入的股票
120
151
  add_trade_stocks()
121
- # 本地自选
122
- add_self_choose_local()
123
- # 连板股票
124
- # add_continue_boards_zt_stocks()
125
- # 固定自选
126
- add_fixed_optional()
152
+ # 添加自选股票
153
+ add_self_choose_symbol()
127
154
 
128
155
 
129
156
  if __name__ == '__main__':
157
+ # add_continue_boards_zt_stocks()
130
158
  self_choose_stock_handle()
@@ -2,13 +2,13 @@ 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
  import mns_common.component.deal.deal_service_api as deal_service_api
9
9
  from mns_common.component.deal.terminal_enum import TerminalEnum
10
10
  import time
11
-
11
+ from loguru import logger
12
12
 
13
13
  # qmt 自动登录
14
14
  def qmt_auto_login():
@@ -21,9 +21,11 @@ def ths_auto_login():
21
21
 
22
22
 
23
23
  def auto_login():
24
- qmt_auto_login()
25
- time.sleep(5)
24
+ logger.info("打开ths下单程序")
26
25
  ths_auto_login()
26
+ time.sleep(5)
27
+ logger.info("打开qmt下单程序")
28
+ qmt_auto_login()
27
29
 
28
30
 
29
31
  if __name__ == '__main__':
@@ -2,7 +2,7 @@ import os
2
2
  import sys
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
 
@@ -109,10 +109,10 @@ def update_position_status(symbol, sell_entrust_no, str_day):
109
109
  mongodb_util.update_many(update_query, new_values, db_name_constant.POSITION_STOCK)
110
110
 
111
111
 
112
- import mns_common.api.em.east_money_stock_api as east_money_stock_api
112
+ import mns_common.component.em.em_stock_info_api as em_stock_info_api
113
113
 
114
114
  if __name__ == '__main__':
115
115
  sell_price_01 = trade_price_service_api.get_trade_price('002336',PriceEnum.SEll_PRICE_LIMIT.price_code)
116
116
  while True:
117
- real_time_quotes_now = east_money_stock_api.get_real_time_quotes_all_stocks()
118
- auto_sell_stock(real_time_quotes_now)
117
+ real_time_quotes_now = em_stock_info_api.get_a_stock_info()
118
+ auto_sell_stock(real_time_quotes_now)
@@ -0,0 +1,7 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 17
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
@@ -0,0 +1,7 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 17
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
@@ -2,23 +2,23 @@ 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
  import mns_common.component.deal.deal_service_api as deal_service_api
9
9
  import pandas as pd
10
10
  import mns_common.utils.data_frame_util as data_frame_util
11
11
  import mns_common.constant.db_name_constant as db_name_constant
12
- import datetime
13
-
12
+ from datetime import datetime
13
+ from mns_common.component.deal.terminal_enum import TerminalEnum
14
14
  from mns_common.db.MongodbUtil import MongodbUtil
15
15
 
16
16
  mongodb_util = MongodbUtil('27017')
17
17
 
18
18
 
19
19
  # 同步持仓
20
- def sync_position():
21
- now_date = datetime.datetime.now()
20
+ def sync_position_ths():
21
+ now_date = datetime.now()
22
22
  str_day = now_date.strftime('%Y-%m-%d')
23
23
  query_exist = {'str_day': str_day}
24
24
  if mongodb_util.exist_data_query(db_name_constant.POSITION_STOCK, query_exist):
@@ -52,5 +52,38 @@ def sync_position():
52
52
  mongodb_util.save_mongo(position_df, db_name_constant.POSITION_STOCK)
53
53
 
54
54
 
55
+ def sync_position_qmt():
56
+ now_date = datetime.now()
57
+ str_day = now_date.strftime('%Y-%m-%d')
58
+ query_exist = {'str_day': str_day}
59
+ # if mongodb_util.exist_data_query(db_name_constant.POSITION_STOCK, query_exist):
60
+ # return None
61
+ position_list = deal_service_api.get_position(TerminalEnum.QMT.terminal_code)
62
+ if len(position_list) == 0:
63
+ return None
64
+ position_df = pd.DataFrame(position_list)
65
+ position_df = position_df.rename(columns={
66
+ "stock_code": "symbol",
67
+ "avg_price": "cost_price",
68
+ "profit_loss": "floating_profit_loss",
69
+ "market_value": "flow_mv",
70
+ "can_use_volume": "available_position",
71
+ "frozen_volume": "frozen_position",
72
+ })
73
+
74
+ position_df['cost_price'] = round(position_df['cost_price'], 2)
75
+ position_df['open_price'] = round(position_df['open_price'], 2)
76
+
77
+ position_df['open_position'] = position_df['available_position'] + position_df['frozen_position'] + position_df[
78
+ 'on_road_volume']
79
+
80
+ position_df['symbol'] = position_df['symbol'].str.slice(0, 6)
81
+
82
+ position_df["_id"] = position_df['symbol'] + '-' + str_day
83
+ position_df["str_day"] = str_day
84
+ position_df["valid"] = True
85
+ mongodb_util.save_mongo(position_df, db_name_constant.POSITION_STOCK)
86
+
87
+
55
88
  if __name__ == '__main__':
56
- sync_position()
89
+ sync_position_qmt()
@@ -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
  import mns_common.utils.cmd_util as cmd_util
@@ -11,26 +11,42 @@ import mns_scheduler.trade.auto_login.trader_auto_service as trader_auto_service
11
11
  import mns_common.utils.data_frame_util as data_frame_util
12
12
  from loguru import logger
13
13
 
14
- # 交易任务
15
- TRADER_SERVER_PATH = 'H:\\mns-trader.bat'
14
+ # 交易服务端
15
+ TRADER_SERVER_PATH = 'H:\\mns_trader_server.bat'
16
16
  # 实时行情同步任务 python名称
17
- TRADER_SERVER_NAME = "mns_trader"
17
+ TRADER_SERVER_NAME = "mns_trader_server"
18
18
 
19
19
 
20
20
  # 打开交易客户端
21
21
  def open_trader_terminal():
22
- # 打开任务进程
23
- cmd_util.open_bat_file(TRADER_SERVER_PATH)
24
- # 自动登陆
22
+ # 打开 [交易web服务端]
23
+ logger.info('打开 [交易web服务端]')
24
+ if bool(1- is_open_trader_server()):
25
+ cmd_util.open_bat_file(TRADER_SERVER_PATH)
26
+ time.sleep(10)
27
+ logger.info('自动登陆ths和qmt')
28
+ # 自动登陆ths和qmt
25
29
  trader_auto_service.auto_login()
26
30
  time.sleep(5)
27
- # 需先打开同花顺终端在开始交易服务
31
+ # 杀死[交易web服务端],使用同花顺需要先打开xiadan.exe,在重新打开[交易web服务端]
32
+ logger.info('杀死[交易web服务端]')
28
33
  kill_server()
29
34
  time.sleep(5)
30
- # 打开任务进程
35
+ logger.info('重新打开 [交易web服务端]')
36
+ # 重新打开 [交易web服务端]
31
37
  cmd_util.open_bat_file(TRADER_SERVER_PATH)
32
38
 
33
39
 
40
+ def is_open_trader_server():
41
+ all_cmd_processes = cmd_util.get_all_process()
42
+ all_cmd_processes_trader = all_cmd_processes.loc[
43
+ (all_cmd_processes['total_info'].str.contains(TRADER_SERVER_NAME, case=False, na=False))]
44
+ if data_frame_util.is_not_empty(all_cmd_processes_trader):
45
+ return True
46
+ else:
47
+ return False
48
+
49
+
34
50
  def kill_server():
35
51
  all_cmd_processes = cmd_util.get_all_process()
36
52
  all_cmd_processes_trader = all_cmd_processes.loc[
@@ -45,4 +61,5 @@ def kill_server():
45
61
 
46
62
 
47
63
  if __name__ == '__main__':
64
+ # kill_server()
48
65
  open_trader_terminal()
@@ -0,0 +1,7 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 17
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
@@ -0,0 +1,56 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 17
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+
9
+ import mns_common.component.tfp.stock_tfp_api as stock_tfp_api
10
+ import mns_common.constant.db_name_constant as db_name_constant
11
+ import mns_common.utils.data_frame_util as data_frame_util
12
+ from mns_common.db.MongodbUtil import MongodbUtil
13
+ import mns_common.component.common_service_fun_api as common_service_fun_api
14
+
15
+ mongodb_util = MongodbUtil('27017')
16
+
17
+
18
+ def sync_stock_tfp(str_day):
19
+ stock_tfp_df = stock_tfp_api.get_stock_tfp_by_day(str_day)
20
+ if data_frame_util.is_not_empty(stock_tfp_df):
21
+ stock_tfp_df['sus_begin_time'] = stock_tfp_df['sus_begin_time'].fillna('无')
22
+ stock_tfp_df['sus_end_time'] = stock_tfp_df['sus_end_time'].fillna('无')
23
+ stock_tfp_df['resume_time'] = stock_tfp_df['resume_time'].fillna('无')
24
+ stock_tfp_df['_id'] = stock_tfp_df['symbol'] + "_" + str_day
25
+ # 排除name列中值包含'B'的行
26
+ stock_tfp_df = stock_tfp_df[~stock_tfp_df['name'].str.contains('B', na=False)]
27
+
28
+ stock_tfp_df['sus_begin_time'] = stock_tfp_df['sus_begin_time'].astype(str)
29
+ stock_tfp_df['sus_end_time'] = stock_tfp_df['sus_end_time'].astype(str)
30
+ stock_tfp_df['resume_time'] = stock_tfp_df['resume_time'].astype(str)
31
+ stock_tfp_df['sus_begin_date'] = stock_tfp_df['sus_begin_date'].astype(str)
32
+ stock_tfp_df = common_service_fun_api.exclude_st_symbol(stock_tfp_df)
33
+ # 根据条件设置新列'type'的值
34
+
35
+ # 初始化类型值
36
+ stock_tfp_df['type'] = '0'
37
+ stock_tfp_df.loc[stock_tfp_df['sus_reason'] == '盘中停牌', 'type'] = '0'
38
+ stock_tfp_df.loc[stock_tfp_df['sus_reason'] == '停牌一天', 'type'] = '1'
39
+ stock_tfp_df.loc[stock_tfp_df['sus_reason'] == '连续停牌', 'type'] = '2'
40
+ stock_tfp_df.loc[stock_tfp_df['sus_reason'] == '刊登重要公告', 'type'] = '3'
41
+ stock_tfp_df.loc[stock_tfp_df['sus_reason'] == '拟筹划重大资产重组', 'type'] = '4'
42
+ stock_tfp_df['valid'] = True
43
+ stock_tfp_df['str_day'] = str_day
44
+ stock_tfp_df.loc[stock_tfp_df['type'] == '2', 'valid'] = False
45
+ stock_tfp_df.loc[stock_tfp_df['type'] == '1', 'valid'] = False
46
+
47
+ stock_tfp_df = stock_tfp_df.fillna(0)
48
+
49
+ mongodb_util.save_mongo(stock_tfp_df, db_name_constant.STOCK_TFP_INFO)
50
+
51
+ return stock_tfp_df
52
+
53
+
54
+ if __name__ == '__main__':
55
+ df = sync_stock_tfp('2025-07-30')
56
+ print(df)
@@ -27,19 +27,4 @@ def sync_stock_zb_pool(str_now_day):
27
27
 
28
28
 
29
29
  if __name__ == '__main__':
30
- sync_stock_zb_pool('2024-09-05')
31
- sync_date = date_handle_util.add_date_day('20231214', 1)
32
-
33
- now_date = datetime.now()
34
-
35
- str_now_day_01 = sync_date.strftime('%Y-%m-%d')
36
-
37
- while now_date > sync_date:
38
- stock_zb_pool_df = sync_stock_zb_pool(str_now_day_01)
39
- if stock_zb_pool_df is None:
40
- sync_date = date_handle_util.add_date_day(date_handle_util.no_slash_date(str_now_day_01), 1)
41
- str_now_day_01 = sync_date.strftime('%Y-%m-%d')
42
- continue
43
- mongodb_util.save_mongo(stock_zb_pool_df, 'stock_zb_pool')
44
- sync_date = date_handle_util.add_date_day(date_handle_util.no_slash_date(str_now_day_01), 1)
45
- str_now_day_01 = sync_date.strftime('%Y-%m-%d')
30
+ sync_stock_zb_pool('2025-04-18')
@@ -9,7 +9,7 @@ import pandas as pd
9
9
  from loguru import logger
10
10
  import mns_common.component.common_service_fun_api as common_service_fun_api
11
11
  import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
12
- import mns_common.api.em.east_money_stock_api as east_money_stock_api
12
+ import mns_common.component.em.em_stock_info_api as em_stock_info_api
13
13
  import mns_common.utils.date_handle_util as date_handle_util
14
14
  import mns_common.component.company.company_common_service_api as company_common_service_api
15
15
  from mns_common.db.MongodbUtil import MongodbUtil
@@ -138,7 +138,7 @@ def sync_stock_high_chg_pool_list(str_day, symbol_list):
138
138
  now_date = datetime.now()
139
139
  now_day = now_date.strftime('%Y-%m-%d')
140
140
 
141
- real_time_quotes_now_init = east_money_stock_api.get_real_time_quotes_all_stocks()
141
+ real_time_quotes_now_init = em_stock_info_api.get_a_stock_info()
142
142
 
143
143
  last_trade_zt_pool = zt_common_service_api.get_last_trade_day_zt(str_day)
144
144
 
@@ -142,4 +142,4 @@ def save_realtime_quotes_now_zt_data(realtime_quotes_now_zt, str_day, symbol):
142
142
 
143
143
 
144
144
  if __name__ == '__main__':
145
- sync_high_chg_real_time_quotes('2024-06-24')
145
+ sync_high_chg_real_time_quotes('2024-12-26')
@@ -2,6 +2,6 @@ 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)
@@ -0,0 +1,41 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 17
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+ from mns_common.db.MongodbUtil import MongodbUtil
9
+ from loguru import logger
10
+ import mns_common.utils.date_handle_util as date_handle_util
11
+ mongodb_util = MongodbUtil('27017')
12
+
13
+ from mns_scheduler.db.script.sync.remote_mongo_util import RemoteMongodbUtil
14
+
15
+
16
+ remote_mongodb_util = RemoteMongodbUtil('27017')
17
+
18
+
19
+ def fix_error_deal_days(db_name):
20
+ realtime_quotes_now_zt_new_kc_open_df = mongodb_util.find_query_data(db_name, {})
21
+ realtime_quotes_now_zt_new_kc_open_df['id_key'] = realtime_quotes_now_zt_new_kc_open_df['_id']
22
+ for stock_one in realtime_quotes_now_zt_new_kc_open_df.itertuples():
23
+ try:
24
+ symbol = stock_one.symbol
25
+ str_day = stock_one.str_day
26
+ query = {'symbol': symbol, 'date': {"$lt": date_handle_util.no_slash_date(str_day)}}
27
+ deal_days = mongodb_util.count(query, 'stock_qfq_daily')
28
+ new_values = {"$set": {"deal_days": deal_days}}
29
+ id_key = stock_one.id_key
30
+ update_query = {'_id': id_key}
31
+ mongodb_util.update_many(update_query, new_values, db_name)
32
+ logger.info("更新到:{},{}", symbol, str_day)
33
+ except BaseException as e:
34
+ logger.error("出现异常:{},{},{}", symbol, str_day, e)
35
+
36
+
37
+ if __name__ == '__main__':
38
+ # db_name_0 = 'realtime_quotes_now_zt_new_kc_open'
39
+ db_name_01 = 'stock_high_chg_pool'
40
+ # fix_error_deal_days(db_name_0)
41
+ fix_error_deal_days(db_name_01)
@@ -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
  import mns_scheduler.zt.open_data.kcx_high_chg_open_data_sync as kcx_high_chg_open_data_sync
@@ -83,7 +83,7 @@ def fix_miss_data(str_end):
83
83
 
84
84
 
85
85
  if __name__ == '__main__':
86
- kcx_high_chg_open_data_sync.sync_all_kc_zt_data('2024-06-25', None)
86
+ kcx_high_chg_open_data_sync.sync_all_kc_zt_data('2025-06-30', None)
87
87
  # sync_all_kc_zt_data('2023-08-16')
88
88
  # sync_all_kc_zt_data('2023-07-07')
89
89
  # realtime_quotes_now_zt_new_kc_open_sync()