mns-scheduler 1.0.6.8__tar.gz → 1.0.7.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (104) hide show
  1. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/PKG-INFO +1 -1
  2. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py +4 -3
  3. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/irm/stock_irm_cninfo_service.py +20 -2
  4. mns-scheduler-1.0.6.8/mns_scheduler/k_line/clean/k_line_info_clean_impl.py → mns-scheduler-1.0.7.1/mns_scheduler/k_line/clean/daily/daily_k_line_clean_common_service.py +112 -200
  5. mns-scheduler-1.0.7.1/mns_scheduler/k_line/clean/daily/daily_k_line_service.py +109 -0
  6. mns-scheduler-1.0.7.1/mns_scheduler/k_line/clean/k_line_info_clean_impl.py +33 -0
  7. mns-scheduler-1.0.6.8/mns_scheduler/k_line/clean/k_line_info_clean_service.py → mns-scheduler-1.0.7.1/mns_scheduler/k_line/clean/k_line_info_clean_task.py +6 -1
  8. mns-scheduler-1.0.7.1/mns_scheduler/k_line/clean/week_month/normal_week_month_k_line_service.py +117 -0
  9. mns-scheduler-1.0.7.1/mns_scheduler/k_line/clean/week_month/sub_new_week_month_k_line_service.py +47 -0
  10. mns-scheduler-1.0.7.1/mns_scheduler/k_line/hot_stocks/__init__.py +7 -0
  11. mns-scheduler-1.0.7.1/mns_scheduler/lhb/__init__.py +7 -0
  12. mns-scheduler-1.0.7.1/mns_scheduler/risk/__init__.py +7 -0
  13. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/zz_task/data_sync_task.py +1 -1
  14. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler.egg-info/PKG-INFO +1 -1
  15. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler.egg-info/SOURCES.txt +9 -2
  16. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/setup.py +1 -1
  17. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/README.md +0 -0
  18. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/__init__.py +0 -0
  19. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/backup/__init__.py +0 -0
  20. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/backup/app/__init__.py +0 -0
  21. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/backup/app/ths_new_concept_sync_app.py +0 -0
  22. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/backup/em/__init__.py +0 -0
  23. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/backup/em/em_new_concept_his_sync.py +0 -0
  24. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/backup/em/em_new_concept_sync_common_api.py +0 -0
  25. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/backup/em/em_new_concept_sync_web.py +0 -0
  26. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/backup/wen_cai/__init__.py +0 -0
  27. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/backup/wen_cai/wen_cai_concept_sync.py +0 -0
  28. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/big_deal/__init__.py +0 -0
  29. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/big_deal/ths_big_deal_sync.py +0 -0
  30. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/company_info/__init__.py +0 -0
  31. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/company_info/company_constant_data.py +0 -0
  32. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/company_info/company_info_sync_api.py +0 -0
  33. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/company_info/de_list_stock_service.py +0 -0
  34. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/concept/__init__.py +0 -0
  35. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/concept/clean/__init__.py +0 -0
  36. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/concept/clean/kpl_concept_clean_api.py +0 -0
  37. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/concept/clean/ths_concept_clean_api.py +0 -0
  38. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/concept/ths/__init__.py +0 -0
  39. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/concept/ths/common/__init__.py +0 -0
  40. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py +0 -0
  41. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/concept/ths/common/ths_concept_update_common_api.py +0 -0
  42. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/concept/ths/sync_new_index/__init__.py +0 -0
  43. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_by_ak_api.py +0 -0
  44. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/concept/ths/sync_new_index/sync_ths_new_concept_by_web_api.py +0 -0
  45. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/concept/ths/update_concept_info/__init__.py +0 -0
  46. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/concept/ths/update_concept_info/sync_one_concept_all_symbols_api.py +0 -0
  47. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/db/__init__.py +0 -0
  48. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/db/col_move_service.py +0 -0
  49. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/db/db_status.py +0 -0
  50. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/dt/__init__.py +0 -0
  51. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/dt/stock_dt_pool_sync.py +0 -0
  52. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/finance/__init__.py +0 -0
  53. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/finance/em_financial_asset_liability_sync_service_api.py +0 -0
  54. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/finance/em_financial_profit_sync_service_api.py +0 -0
  55. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/finance/finance_common_api.py +0 -0
  56. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/finance/financial_high_risk_stock_clean_service_api.py +0 -0
  57. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/finance/sync_financial_report_service_api.py +0 -0
  58. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/finance/test/__init__.py +0 -0
  59. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/finance/test/fix_blask_list.py +0 -0
  60. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/hk/__init__.py +0 -0
  61. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/hk/hk_company_info_sync_service_api.py +0 -0
  62. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/irm/__init__.py +0 -0
  63. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/irm/api/__init__.py +0 -0
  64. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/irm/api/sh_stock_sns_sse_info_api.py +0 -0
  65. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py +0 -0
  66. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/k_line/__init__.py +0 -0
  67. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/k_line/clean/__init__.py +0 -0
  68. {mns-scheduler-1.0.6.8/mns_scheduler/lhb → mns-scheduler-1.0.7.1/mns_scheduler/k_line/clean/daily}/__init__.py +0 -0
  69. {mns-scheduler-1.0.6.8/mns_scheduler/risk → mns-scheduler-1.0.7.1/mns_scheduler/k_line/clean/week_month}/__init__.py +0 -0
  70. {mns-scheduler-1.0.6.8/mns_scheduler/k_line/clean → mns-scheduler-1.0.7.1/mns_scheduler/k_line/hot_stocks}/recent_hot_stocks_clean_service.py +0 -0
  71. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/k_line/sync/__init__.py +0 -0
  72. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/k_line/sync/daily_week_month_line_sync.py +0 -0
  73. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/kpl/__init__.py +0 -0
  74. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/kpl/selection/__init__.py +0 -0
  75. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/kpl/selection/index/__init__.py +0 -0
  76. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/kpl/selection/index/sync_best_choose_his_index.py +0 -0
  77. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/kpl/selection/index/sync_best_choose_index.py +0 -0
  78. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/kpl/selection/symbol/__init__.py +0 -0
  79. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/kpl/selection/symbol/sync_best_choose_symbol.py +0 -0
  80. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/kpl/selection/total/__init__.py +0 -0
  81. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/kpl/selection/total/sync_kpl_best_total_sync_api.py +0 -0
  82. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/lhb/stock_lhb_sync_service.py +0 -0
  83. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/real_time/__init__.py +0 -0
  84. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/real_time/realtime_quotes_now_create_db_index.py +0 -0
  85. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/real_time/realtime_quotes_now_sync.py +0 -0
  86. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/risk/register_and_investigate_stock_sync_api.py +0 -0
  87. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/risk/stock_equity_mortgage_sync_api.py +0 -0
  88. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/trade/__init__.py +0 -0
  89. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/trade/auto_ipo_buy_api.py +0 -0
  90. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/trade/auto_sell_service_api.py +0 -0
  91. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/trade/sync_position_api.py +0 -0
  92. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/zb/__init__.py +0 -0
  93. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/zb/stock_zb_pool_sync.py +0 -0
  94. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/zt/__init__.py +0 -0
  95. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/zt/export_open_data_to_excel.py +0 -0
  96. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/zt/realtime_quotes_now_zt_kc_sync.py +0 -0
  97. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/zt/today_high_chg_pool_sync_api.py +0 -0
  98. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/zt/zt_five_boards_sync_api.py +0 -0
  99. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/zt/zt_pool_sync_api.py +0 -0
  100. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/zz_task/__init__.py +0 -0
  101. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler/zz_task/sync_realtime_quotes_task.py +0 -0
  102. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler.egg-info/dependency_links.txt +0 -0
  103. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/mns_scheduler.egg-info/top_level.txt +0 -0
  104. {mns-scheduler-1.0.6.8 → mns-scheduler-1.0.7.1}/setup.cfg +0 -0
@@ -1,3 +1,3 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-scheduler
3
- Version: 1.0.6.8
3
+ Version: 1.0.7.1
@@ -38,8 +38,8 @@ def create_index():
38
38
  def sync_new_concept_to_ths_detail(symbol_add_new_concept_df, str_day, str_now_time):
39
39
  for new_concept_one in symbol_add_new_concept_df.itertuples():
40
40
  try:
41
- concept_code = new_concept_one.concept_code
42
- query = {'web_concept_code': int(concept_code)}
41
+ web_concept_code = new_concept_one.concept_code
42
+ query = {'web_concept_code': int(web_concept_code)}
43
43
  ths_concept_list = mongodb_util.find_query_data('ths_concept_list', query)
44
44
  if data_frame_util.is_empty(ths_concept_list):
45
45
  logger.error("无此同花顺概念:{}", new_concept_one.title)
@@ -95,7 +95,8 @@ def update_symbol_new_concept(symbol_df, page_number):
95
95
  now_date = datetime.now()
96
96
  # 开盘交易前不同步 资源开销过大
97
97
  if date_handle_util.is_close_time(now_date):
98
- ths_concept_update_common_api.update_ths_concept_choose_reason(symbol_ths_concept_all_df, stock_one.symbol)
98
+ ths_concept_update_common_api.update_ths_concept_choose_reason(symbol_ths_concept_all_df,
99
+ stock_one.symbol)
99
100
 
100
101
  str_day = now_date.strftime('%Y-%m-%d')
101
102
  str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
@@ -164,8 +164,8 @@ def sync_all_interactive_questions(symbol_list):
164
164
  stock_irm_cninfo_df['valid'] = True
165
165
  stock_irm_cninfo_df = stock_irm_cninfo_df.dropna(subset=['answer_content'])
166
166
  stock_irm_cninfo_df = stock_irm_cninfo_df[stock_irm_cninfo_df['answer_content'] != '']
167
-
168
- mongodb_util.save_mongo(stock_irm_cninfo_df, db_name_constant.STOCK_INTERACTIVE_QUESTION)
167
+ # 保存新增数据
168
+ save_new_data(stock_irm_cninfo_df)
169
169
  logger.info("完成同步互动回答到:{}", stock_one.symbol)
170
170
  except Exception as e:
171
171
  time.sleep(5)
@@ -174,6 +174,24 @@ def sync_all_interactive_questions(symbol_list):
174
174
  sync_all_interactive_questions(fail_symbol_list)
175
175
 
176
176
 
177
+ def save_new_data(stock_irm_cninfo_df):
178
+ if data_frame_util.is_empty(stock_irm_cninfo_df):
179
+ return None
180
+ else:
181
+ irm_id_list = list(stock_irm_cninfo_df['_id'])
182
+ query = {"_id": {"$in": irm_id_list}}
183
+ query_field = {"_id": 1}
184
+
185
+ exist_df = mongodb_util.find_query_data_choose_field(db_name_constant.STOCK_INTERACTIVE_QUESTION, query,
186
+ query_field)
187
+ if data_frame_util.is_empty(exist_df):
188
+ new_df = stock_irm_cninfo_df
189
+ else:
190
+ new_df = stock_irm_cninfo_df.loc[~(stock_irm_cninfo_df['_id'].isin(list(exist_df['_id'])))]
191
+ if data_frame_util.is_not_empty(new_df):
192
+ mongodb_util.insert_mongo(new_df, db_name_constant.STOCK_INTERACTIVE_QUESTION)
193
+
194
+
177
195
  if __name__ == '__main__':
178
196
  fail_symbol_list_01 = ['000638', '002886', '688778', '688766', '688733', '688778', '688793', '688787']
179
197
  # get_stock_irm_cninfo_sh_api('603633')
@@ -2,176 +2,17 @@ import sys
2
2
  import os
3
3
 
4
4
  file_path = os.path.abspath(__file__)
5
- end = file_path.index('mns') + 17
5
+ end = file_path.index('mns') + 16
6
6
  project_path = file_path[0:end]
7
7
  sys.path.append(project_path)
8
-
9
- import mns_common.utils.data_frame_util as data_frame_util
10
8
  import pandas as pd
11
- from mns_common.db.MongodbUtil import MongodbUtil
12
- import mns_common.utils.date_handle_util as date_handle_util
13
9
  import mns_common.component.k_line.patterns.k_line_patterns_service_api as k_line_patterns_service
14
- import mns_common.component.k_line.clean.sh_small_normal_zt_k_line_check_api as sh_small_normal_zt_k_line_check_api
15
- import mns_common.component.classify.symbol_classify_api as symbol_classify_api
16
- import mns_common.component.k_line.common.k_line_common_service_api as k_line_common_service_api
17
- import mns_scheduler.k_line.clean.recent_hot_stocks_clean_service as recent_hot_stocks_clean_service
18
-
19
- mongodb_util = MongodbUtil('27017')
20
- # 排除最近10天有三个连板的股票
21
- EXCLUDE_DAYS = 10
22
-
23
- MAX_CONTINUE_BOARDS = 3
24
-
25
-
26
- # 日线 周线 月线 成交量 筹码信息
27
- def calculate_k_line_info(str_day, symbol, diff_days):
28
- k_line_info = pd.DataFrame([[
29
- str_day,
30
- symbol, diff_days]],
31
- columns=['str_day',
32
- 'symbol',
33
- 'diff_days'
34
- ])
35
- k_line_info = handle_month_line(k_line_info, str_day, symbol)
36
- k_line_info = handle_week_line(k_line_info, str_day, symbol)
37
- k_line_info = handle_day_line(k_line_info, str_day, symbol)
38
- return k_line_info
39
-
40
-
41
- # 处理月线
42
- def handle_month_line(k_line_info, str_day, symbol):
43
- month_begin_day = str_day[0:7] + '-01'
44
- query = {"symbol": symbol,
45
- 'date': {"$lt": date_handle_util.no_slash_date(month_begin_day)}}
46
- stock_hfq_monthly = mongodb_util.descend_query(query, 'stock_qfq_monthly', 'date', 2)
47
- month_num = stock_hfq_monthly.shape[0]
48
- k_line_info['month_num'] = month_num
49
- if month_num > 0:
50
- k_line_info['sum_month'] = round(sum(stock_hfq_monthly['chg']), 2)
51
- else:
52
- k_line_info['sum_month'] = 0
53
-
54
- if month_num == 0:
55
- k_line_info['month01'] = 0
56
- k_line_info['month02'] = 0
57
- k_line_info['month01_date'] = '19890729'
58
- k_line_info['month02_date'] = '19890729'
59
- elif month_num == 1:
60
- k_line_info['month01'] = stock_hfq_monthly.iloc[0].chg
61
- k_line_info['month02'] = 0
62
- k_line_info['month01_date'] = stock_hfq_monthly.iloc[0].date
63
- k_line_info['month02_date'] = '19890729'
64
- elif month_num == 2:
65
- k_line_info['month01'] = stock_hfq_monthly.iloc[0].chg
66
- k_line_info['month02'] = stock_hfq_monthly.iloc[1].chg
67
- k_line_info['month01_date'] = stock_hfq_monthly.iloc[0].date
68
- k_line_info['month02_date'] = stock_hfq_monthly.iloc[1].date
69
-
70
- return k_line_info
71
-
72
-
73
- # 处理周线
74
- def handle_week_line(k_line_info, str_day, symbol):
75
- month_begin_day = str_day[0:7] + '-01'
76
- query = {"symbol": symbol,
77
- '$and': [{'date': {"$gte": date_handle_util.no_slash_date(month_begin_day)}},
78
- {'date': {"$lt": date_handle_util.no_slash_date(str_day)}}]}
79
- stock_hfq_weekly = mongodb_util.find_query_data('stock_qfq_weekly', query)
80
- week_num = stock_hfq_weekly.shape[0]
81
- if week_num > 0:
82
- stock_hfq_weekly = stock_hfq_weekly.sort_values(by=['date'], ascending=False)
83
- k_line_info['sum_week'] = round(sum(stock_hfq_weekly['chg']), 2)
84
- else:
85
- k_line_info['sum_week'] = 0
86
- k_line_info['week_num'] = week_num
87
- if week_num == 1:
88
- k_line_info['week01'] = stock_hfq_weekly.iloc[0].chg
89
- k_line_info['week02'] = 0
90
- k_line_info['week03'] = 0
91
- k_line_info['week04'] = 0
92
- elif week_num == 2:
93
- k_line_info['week01'] = stock_hfq_weekly.iloc[0].chg
94
- k_line_info['week02'] = stock_hfq_weekly.iloc[1].chg
95
- k_line_info['week03'] = 0
96
- k_line_info['week04'] = 0
97
- elif week_num == 3:
98
- k_line_info['week01'] = stock_hfq_weekly.iloc[0].chg
99
- k_line_info['week02'] = stock_hfq_weekly.iloc[1].chg
100
- k_line_info['week03'] = stock_hfq_weekly.iloc[2].chg
101
- k_line_info['week04'] = 0
102
- elif week_num >= 4:
103
- k_line_info['week01'] = stock_hfq_weekly.iloc[0].chg
104
- k_line_info['week02'] = stock_hfq_weekly.iloc[1].chg
105
- k_line_info['week03'] = stock_hfq_weekly.iloc[2].chg
106
- k_line_info['week04'] = stock_hfq_weekly.iloc[3].chg
107
- elif week_num == 0:
108
- k_line_info['week01'] = 0
109
- k_line_info['week02'] = 0
110
- k_line_info['week03'] = 0
111
- k_line_info['week04'] = 0
112
- k_line_info['week_last_day'] = month_begin_day
113
- k_line_info['sum_week'] = 0
114
- return k_line_info
115
- stock_hfq_weekly = stock_hfq_weekly.sort_values(by=['date'], ascending=False)
116
- stock_hfq_weekly_last = stock_hfq_weekly.iloc[0:1]
117
- k_line_info['week_last_day'] = list(stock_hfq_weekly_last['date'])[0]
118
-
119
- return k_line_info
120
-
121
-
122
- # 处理日线
123
- def handle_day_line(k_line_info, str_day, symbol):
124
- deal_days = k_line_common_service_api.get_deal_days(str_day, symbol)
125
-
126
- # 取五天刚好包含一周 todo 选择60天的历史记录
127
- # 当天没有k线数据时 进行同步
128
- query = {"symbol": symbol, 'date': {"$lt": date_handle_util.no_slash_date(str_day)}}
129
- stock_qfq_daily = mongodb_util.descend_query(query, 'stock_qfq_daily', 'date', 60)
130
- if stock_qfq_daily.shape[0] == 0:
131
- return k_line_info
132
- k_line_info = init_day_line_data(k_line_info, stock_qfq_daily)
133
- k_line_info = calculate_30_day_max_chg(stock_qfq_daily, k_line_info)
134
-
135
- stock_qfq_daily = calculate_exchange_avg_param(stock_qfq_daily)
136
- stock_qfq_daily_one = stock_qfq_daily.iloc[0:1]
137
- stock_qfq_daily_one = set_k_line_patterns(stock_qfq_daily_one.copy())
138
- stock_qfq_daily_one = set_history_list(stock_qfq_daily_one.copy(), stock_qfq_daily.copy())
139
- k_line_info = k_line_field_fix(k_line_info.copy(), stock_qfq_daily_one.copy())
140
-
141
- k_line_info.loc[:, 'deal_days'] = deal_days
142
-
143
- k_line_info.loc[k_line_info['deal_days'] > 5, 'sum_five_chg'] = k_line_info['daily01'] \
144
- + k_line_info['daily02'] \
145
- + k_line_info['daily03'] \
146
- + k_line_info['daily04'] \
147
- + k_line_info['daily05']
148
- k_line_info.loc[k_line_info['deal_days'] <= 5, 'sum_five_chg'] = 0
149
10
 
150
- # 计算开盘涨幅
151
- k_line_info = calculate_open_chg(stock_qfq_daily, k_line_info)
152
- # 排除最近有三板以上的股票
153
- k_line_info = check_recent_zt_stock(str_day, k_line_info)
154
- # 计算 昨日最高点到开盘涨幅差值 and # 昨日最高点到当日收盘涨幅之间的差值
155
- k_line_info = calculate_chg_diff_value(k_line_info)
156
-
157
- recent_hot_stocks_clean_service.calculate_recent_hot_stocks(stock_qfq_daily, symbol, str_day)
158
-
159
- return k_line_info
160
-
161
-
162
- # 计算涨幅差值
163
- def calculate_chg_diff_value(result):
164
- # 昨日最高点到开盘涨幅差值
165
- result['diff_chg_from_open_last'] = round(
166
- result['max_chg_last'] - result['open_chg_last'], 2)
167
-
168
- # 昨日最高点到当日收盘涨幅之间的差值
169
- result['diff_chg_high_last'] = round(
170
- result['max_chg_last'] - result['chg_last'], 2)
171
-
172
- return result
11
+ # 计算五日线之和交易天数最小值
12
+ MIN_DEAL_DAYS = 6
173
13
 
174
14
 
15
+ # 初始化数据
175
16
  def init_day_line_data(k_line_info, stock_qfq_daily):
176
17
  daily_num = stock_qfq_daily.shape[0]
177
18
  if daily_num == 0:
@@ -216,20 +57,67 @@ def init_day_line_data(k_line_info, stock_qfq_daily):
216
57
  k_line_info['daily03'] = stock_qfq_daily.iloc[2].chg
217
58
  k_line_info['daily04'] = stock_qfq_daily.iloc[3].chg
218
59
  k_line_info['daily05'] = stock_qfq_daily.iloc[4].chg
60
+ k_line_info.loc[:, 'exclude'] = False
61
+ # 30日最大涨幅
62
+ k_line_info.loc[:, 'amount_level_last'] = 0
63
+ k_line_info.loc[:, 'exchange_last'] = 0
64
+ k_line_info.loc[:, 'exchange_mean_last'] = 0
65
+ k_line_info.loc[:, 'exchange_mean_last_02'] = 0
66
+ k_line_info.loc[:, 'exchange_difference_last'] = 0
67
+ k_line_info.loc[:, 'exchange_chg_percent_last'] = 0
68
+ k_line_info.loc[:, 'pct_chg_mean_last'] = 0
69
+ k_line_info.loc[:, 'pct_chg_difference_last'] = 0
70
+ k_line_info.loc[:, 'close_difference_five_last'] = 0
71
+ k_line_info.loc[:, 'close_difference_ten_last'] = 0
72
+ k_line_info.loc[:, 'close_difference_twenty_last'] = 0
73
+ k_line_info.loc[:, 'close_difference_thirty_last'] = 0
74
+ k_line_info.loc[:, 'close_difference_sixty_last'] = 0
75
+ k_line_info.loc[:, 'pct_chg_last'] = 0
76
+ k_line_info.loc[:, 'max_chg_last'] = 0
77
+ k_line_info.loc[:, 'chg_last'] = 0
78
+ k_line_info.loc[:, 'close_last'] = 0
79
+ k_line_info.loc[:, 'high_last'] = 0
80
+ k_line_info.loc[:, 'low_last'] = 0
81
+
82
+ k_line_info.loc[:, 'avg_five_last'] = 0
83
+ k_line_info.loc[:, 'avg_ten_last'] = 0
84
+ k_line_info.loc[:, 'avg_twenty_last'] = 0
85
+ k_line_info.loc[:, 'avg_thirty_last'] = 0
86
+ k_line_info.loc[:, 'avg_sixty_last'] = 0
87
+
88
+ k_line_info.loc[:, 'std_amount_ten'] = 0
89
+ k_line_info.loc[:, 'mean_amount_ten'] = 0
90
+ k_line_info.loc[:, 'std_amount_thirty'] = 0
91
+ k_line_info.loc[:, 'mean_amount_thirty'] = 0
92
+
93
+ k_line_info.loc[:, 'std_amount_sixty'] = 0
94
+ k_line_info.loc[:, 'mean_amount_sixty'] = 0
95
+
96
+ k_line_info.loc[:, 'sum_five_chg'] = 0
97
+
98
+ k_line_info.loc[:, 'open_chg_last'] = 0
99
+
100
+ k_line_info.loc[:, 'before_close'] = 0
101
+
102
+ k_line_info.loc[:, 'diff_max_chg_from_open_last'] = 0
103
+
104
+ k_line_info.loc[:, 'diff_max_chg_from_close_last'] = 0
105
+
106
+ k_line_info.loc[:, 'diff_close_from_open_last'] = 0
219
107
 
220
108
  return k_line_info
221
109
 
222
110
 
223
111
  # 计算30天最大涨幅
224
112
  def calculate_30_day_max_chg(stock_qfq_daily, k_line_info):
113
+ # 取30天的交易k线
225
114
  stock_qfq_daily_30 = stock_qfq_daily.iloc[0:29]
226
115
 
227
116
  deal_days = stock_qfq_daily_30.shape[0]
228
117
 
229
- if stock_qfq_daily_30.shape[0] < 30:
118
+ if deal_days < 30:
230
119
  stock_qfq_daily_30 = stock_qfq_daily_30[0: deal_days - 1]
231
- if stock_qfq_daily_30.shape[0] == 0:
232
- k_line_info['max_chg_30'] = 0
120
+ if deal_days == 0:
233
121
  return k_line_info
234
122
 
235
123
  stock_qfq_daily_30['date_time'] = pd.to_datetime(stock_qfq_daily_30['date'])
@@ -249,12 +137,11 @@ def calculate_30_day_max_chg(stock_qfq_daily, k_line_info):
249
137
  return k_line_info
250
138
 
251
139
 
252
- # 计算平均值
253
- def calculate_exchange_avg_param(stock_qfq_daily):
140
+ # 计算换手平均值 k线 5 10 20 30 60均线
141
+ def calculate_exchange_and_k_line_avg_param(stock_qfq_daily):
254
142
  stock_qfq_daily = stock_qfq_daily.sort_values(by=['date'], ascending=True)
255
143
 
256
- # exchange
257
- # 计算每个日期的前10天的均值
144
+ # 计算每个日期前10天的换手均值
258
145
  stock_qfq_daily['exchange_mean'] = round(
259
146
  stock_qfq_daily['exchange'].rolling(window=10, min_periods=1).mean(), 2)
260
147
 
@@ -266,9 +153,11 @@ def calculate_exchange_avg_param(stock_qfq_daily):
266
153
  # 昨日平均值 向当前移位
267
154
  stock_qfq_daily['exchange_mean_yesterday'] = stock_qfq_daily['exchange_mean_yesterday'].shift(1)
268
155
 
156
+ # 今天换手相对于[昨日平均十日换手]的差值
269
157
  stock_qfq_daily['exchange_difference'] = round(
270
158
  stock_qfq_daily['exchange'] - stock_qfq_daily['exchange_mean_yesterday'], 2)
271
159
 
160
+ # 今天换手相对于[昨日平均十日换手]的倍数
272
161
  stock_qfq_daily['exchange_chg_percent'] = round(
273
162
  stock_qfq_daily['exchange'] / stock_qfq_daily['exchange_mean_yesterday'], 2)
274
163
 
@@ -305,7 +194,7 @@ def calculate_exchange_avg_param(stock_qfq_daily):
305
194
  stock_qfq_daily['avg_sixty'] = round(stock_qfq_daily['close'].rolling(window=60, min_periods=1).mean(),
306
195
  2)
307
196
 
308
- # 与均线差值
197
+ # 收盘价格与均线差值
309
198
  stock_qfq_daily['close_difference_five'] = round(
310
199
  100 * (stock_qfq_daily['close'] - stock_qfq_daily['avg_five']) / stock_qfq_daily['close'],
311
200
  2)
@@ -372,6 +261,21 @@ def calculate_exchange_avg_param(stock_qfq_daily):
372
261
  return stock_qfq_daily
373
262
 
374
263
 
264
+ # 设置当天k线形态 下一个交易日判断当前交易日k线形态
265
+ def set_k_line_patterns(stock_qfq_daily_one):
266
+ open = list(stock_qfq_daily_one['open'])[0]
267
+ close = list(stock_qfq_daily_one['close'])[0]
268
+ high = list(stock_qfq_daily_one['high'])[0]
269
+ low = list(stock_qfq_daily_one['low'])[0]
270
+ max_chg = list(stock_qfq_daily_one['max_chg'])[0]
271
+ chg = list(stock_qfq_daily_one['chg'])[0]
272
+
273
+ k_line_pattern = k_line_patterns_service.k_line_patterns_classify(open, close, high, low, max_chg, chg)
274
+ stock_qfq_daily_one.loc[:, 'k_line_pattern'] = k_line_pattern.value
275
+ return stock_qfq_daily_one
276
+
277
+
278
+ # 设置历史k线列表
375
279
  def set_history_list(stock_qfq_daily_one, stock_qfq_daily):
376
280
  stock_qfq_daily = stock_qfq_daily[[
377
281
  "date",
@@ -409,9 +313,9 @@ def set_history_list(stock_qfq_daily_one, stock_qfq_daily):
409
313
 
410
314
  if daily_num >= 10:
411
315
  stock_qfq_daily_ten = stock_qfq_daily.iloc[0:10]
412
- # 计算 amount 的标准差
316
+ # 计算 10日 amount 的标准差
413
317
  std_amount_ten = round(stock_qfq_daily_ten['amount_level'].std(), 2)
414
- # 计算 amount 的平均值
318
+ # 计算 10日amount 的平均值
415
319
  mean_amount_ten = round(stock_qfq_daily_ten['amount_level'].mean(), 2)
416
320
 
417
321
  if daily_num >= 30:
@@ -438,22 +342,8 @@ def set_history_list(stock_qfq_daily_one, stock_qfq_daily):
438
342
  return stock_qfq_daily_one
439
343
 
440
344
 
441
- # k线形态
442
- def set_k_line_patterns(stock_qfq_daily_one):
443
- open = list(stock_qfq_daily_one['open'])[0]
444
- close = list(stock_qfq_daily_one['close'])[0]
445
- high = list(stock_qfq_daily_one['high'])[0]
446
- low = list(stock_qfq_daily_one['low'])[0]
447
- max_chg = list(stock_qfq_daily_one['max_chg'])[0]
448
- chg = list(stock_qfq_daily_one['chg'])[0]
449
-
450
- k_line_pattern = k_line_patterns_service.k_line_patterns_classify(open, close, high, low, max_chg, chg)
451
- stock_qfq_daily_one.loc[:, 'k_line_pattern'] = k_line_pattern.value
452
- return stock_qfq_daily_one
453
-
454
-
455
- # 字段选择
456
- def k_line_field_fix(k_line_info, stock_qfq_daily_one):
345
+ # 修改字段名称
346
+ def k_line_field_fix_name(k_line_info, stock_qfq_daily_one):
457
347
  k_line_info['classification'] = stock_qfq_daily_one['classification']
458
348
  k_line_info['amount_level_last'] = stock_qfq_daily_one['amount_level']
459
349
  k_line_info['name'] = stock_qfq_daily_one['name']
@@ -497,7 +387,21 @@ def k_line_field_fix(k_line_info, stock_qfq_daily_one):
497
387
  return k_line_info
498
388
 
499
389
 
500
- # 计算开盘涨幅
390
+ # 设置五日k线和
391
+ def set_sum_five_chg(k_line_info, deal_days):
392
+ k_line_info.loc[:, 'deal_days'] = deal_days
393
+ # 排除上市第一天的k线
394
+ k_line_info.loc[k_line_info['deal_days'] >= MIN_DEAL_DAYS, 'sum_five_chg'] = k_line_info['daily01'] \
395
+ + k_line_info['daily02'] \
396
+ + k_line_info['daily03'] \
397
+ + k_line_info['daily04'] \
398
+ + k_line_info['daily05']
399
+ k_line_info.loc[k_line_info['deal_days'] < MIN_DEAL_DAYS, 'sum_five_chg'] = 0
400
+
401
+ return k_line_info
402
+
403
+
404
+ # 计算当前交易日开盘时的涨幅
501
405
  def calculate_open_chg(stock_qfq_daily, k_line_info):
502
406
  # 新股
503
407
  if stock_qfq_daily.shape[0] == 1:
@@ -510,13 +414,21 @@ def calculate_open_chg(stock_qfq_daily, k_line_info):
510
414
  return k_line_info
511
415
 
512
416
 
513
- # 排除最近10个交易日有三板以上的股票
514
- def check_recent_zt_stock(str_day, k_line_info):
515
- k_line_info.loc[:, 'exclude'] = False
516
- k_line_info = symbol_classify_api.set_stock_type(k_line_info)
517
- k_line_info_sh = symbol_classify_api.choose_sh_symbol(k_line_info)
518
- if data_frame_util.is_empty(k_line_info_sh):
519
- return k_line_info
520
- else:
521
- k_line_info_sh = sh_small_normal_zt_k_line_check_api.recent_day_zt_check(k_line_info_sh.copy())
522
- return k_line_info_sh
417
+ # 计算涨幅差值
418
+ # 昨日最高点到开盘涨幅差值
419
+ # 昨日最高点到当日收盘涨幅之间的差值
420
+ # 昨日收盘到当日开盘涨幅之间的差值
421
+ def calculate_chg_diff_value(result):
422
+ # 昨日最高点到开盘涨幅差值
423
+ result['diff_max_chg_from_open_last'] = round(
424
+ result['max_chg_last'] - result['open_chg_last'], 2)
425
+
426
+ # 昨日最高点到当日收盘涨幅之间的差值
427
+ result['diff_max_chg_from_close_last'] = round(
428
+ result['max_chg_last'] - result['chg_last'], 2)
429
+
430
+ # 昨日最高点到当日收盘涨幅之间的差值
431
+ result['diff_close_from_open_last'] = round(
432
+ result['chg_last'] - result['open_chg_last'], 2)
433
+
434
+ return result
@@ -0,0 +1,109 @@
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
+ from mns_common.db.MongodbUtil import MongodbUtil
9
+ import mns_common.utils.date_handle_util as date_handle_util
10
+ import mns_scheduler.k_line.hot_stocks.recent_hot_stocks_clean_service as recent_hot_stocks_clean_service
11
+ import mns_scheduler.k_line.clean.daily.daily_k_line_clean_common_service as daily_k_line_clean_common_service
12
+ from mns_common.component.classify.symbol_classify_param import stock_type_classify_param
13
+
14
+ mongodb_util = MongodbUtil('27017')
15
+ # 普通股日线查询数据 60
16
+ NORMAL_DAILY_K_LINE_NUMBER = 60
17
+
18
+
19
+ def handle_day_line(k_line_info, str_day, symbol, deal_days):
20
+ sub_stock_new_max_deal_days = stock_type_classify_param['sub_stock_new_max_deal_days']
21
+ if deal_days > sub_stock_new_max_deal_days:
22
+ return handle_day_line_normal(k_line_info, str_day, symbol, deal_days)
23
+
24
+ else:
25
+ # 交易日小于100天的
26
+ return handle_day_line_sub_new(k_line_info, str_day, symbol, deal_days)
27
+
28
+ # 处理日线
29
+
30
+
31
+ def handle_day_line_sub_new(k_line_info, str_day, symbol, deal_days):
32
+ k_line_info['deal_days'] = deal_days
33
+ query = {"symbol": symbol, 'date': {"$lt": date_handle_util.no_slash_date(str_day)}}
34
+ stock_qfq_daily = mongodb_util.descend_query(query, 'stock_qfq_daily', 'date', deal_days)
35
+ # 初始化数据
36
+ k_line_info = daily_k_line_clean_common_service.init_day_line_data(k_line_info, stock_qfq_daily)
37
+ if stock_qfq_daily.shape[0] == 0:
38
+ return k_line_info
39
+
40
+ # 当前交易日k线信息
41
+ stock_qfq_daily_one = stock_qfq_daily.iloc[0:1]
42
+ # 设置当天k线形态 下一个交易日判断当前交易日k线形态
43
+ stock_qfq_daily_one = daily_k_line_clean_common_service.set_k_line_patterns(stock_qfq_daily_one.copy())
44
+ # 设置历史k线列表
45
+ stock_qfq_daily_one = daily_k_line_clean_common_service.set_history_list(stock_qfq_daily_one.copy(),
46
+ stock_qfq_daily.copy())
47
+ # 修改字段名称
48
+ k_line_info = daily_k_line_clean_common_service.k_line_field_fix_name(k_line_info.copy(),
49
+ stock_qfq_daily_one.copy())
50
+ if stock_qfq_daily.shape[0] == 1:
51
+ # 上市第二天的股票
52
+ return k_line_info
53
+ # 排除上市第一天的股票
54
+ stock_qfq_daily = stock_qfq_daily.iloc[0:deal_days - 1]
55
+ # 计算换手平均值 k线 5 10 20 30 60均线
56
+ stock_qfq_daily = daily_k_line_clean_common_service.calculate_exchange_and_k_line_avg_param(stock_qfq_daily)
57
+ # 设置五日k线和
58
+ k_line_info = daily_k_line_clean_common_service.set_sum_five_chg(k_line_info, deal_days)
59
+ # 计算当前交易日开盘时的涨幅
60
+ k_line_info = daily_k_line_clean_common_service.calculate_open_chg(stock_qfq_daily, k_line_info)
61
+ # 计算 昨日最高点到开盘涨幅差值 and # 昨日最高点到当日收盘涨幅之间的差值 and # 昨日收盘到当日开盘涨幅之间的差值
62
+ k_line_info = daily_k_line_clean_common_service.calculate_chg_diff_value(k_line_info)
63
+ # 排除最近有三板以上的股票 todo
64
+ # 计算最近热门大涨的股票
65
+ recent_hot_stocks_clean_service.calculate_recent_hot_stocks(stock_qfq_daily, symbol, str_day)
66
+ return k_line_info
67
+
68
+
69
+ def handle_day_line_normal(k_line_info, str_day, symbol, deal_days):
70
+ # 取五天刚好包含一周 todo 选择60天的历史记录
71
+
72
+ query = {"symbol": symbol, 'date': {"$lt": date_handle_util.no_slash_date(str_day)}}
73
+ stock_qfq_daily = mongodb_util.descend_query(query, 'stock_qfq_daily', 'date', NORMAL_DAILY_K_LINE_NUMBER)
74
+ if stock_qfq_daily.shape[0] == 0:
75
+ return k_line_info
76
+ # 初始化数据
77
+ k_line_info = daily_k_line_clean_common_service.init_day_line_data(k_line_info, stock_qfq_daily)
78
+ # 计算30天最大涨幅
79
+ k_line_info = daily_k_line_clean_common_service.calculate_30_day_max_chg(stock_qfq_daily, k_line_info)
80
+ # 计算换手平均值 k线 5 10 20 30 60均线
81
+ stock_qfq_daily = daily_k_line_clean_common_service.calculate_exchange_and_k_line_avg_param(stock_qfq_daily)
82
+ # 当前交易日k线信息
83
+ stock_qfq_daily_one = stock_qfq_daily.iloc[0:1]
84
+ # 设置当天k线形态 下一个交易日判断当前交易日k线形态
85
+ stock_qfq_daily_one = daily_k_line_clean_common_service.set_k_line_patterns(stock_qfq_daily_one.copy())
86
+ # 设置历史k线列表
87
+ stock_qfq_daily_one = daily_k_line_clean_common_service.set_history_list(stock_qfq_daily_one.copy(),
88
+ stock_qfq_daily.copy())
89
+ # 修改字段名称
90
+ k_line_info = daily_k_line_clean_common_service.k_line_field_fix_name(k_line_info.copy(),
91
+ stock_qfq_daily_one.copy())
92
+ # 设置五日k线和
93
+ k_line_info = daily_k_line_clean_common_service.set_sum_five_chg(k_line_info, deal_days)
94
+ # 计算当前交易日开盘时的涨幅
95
+ k_line_info = daily_k_line_clean_common_service.calculate_open_chg(stock_qfq_daily, k_line_info)
96
+ # 计算 昨日最高点到开盘涨幅差值 and # 昨日最高点到当日收盘涨幅之间的差值 and # 昨日收盘到当日开盘涨幅之间的差值
97
+ k_line_info = daily_k_line_clean_common_service.calculate_chg_diff_value(k_line_info)
98
+
99
+ # 排除最近有三板以上的股票 todo
100
+ # 计算最近热门大涨的股票
101
+ recent_hot_stocks_clean_service.calculate_recent_hot_stocks(stock_qfq_daily, symbol, str_day)
102
+
103
+ return k_line_info
104
+
105
+ # if __name__ == '__main__':
106
+ # query1 = {"symbol": '301596', 'date': {"$lte": date_handle_util.no_slash_date('2024-05-31')}}
107
+ # stock_qfq_daily_301596 = mongodb_util.descend_query(query1, 'stock_qfq_daily', 'date', 15)
108
+ # stock_qfq_daily_301596.shape[0]
109
+ # stock_qfq_daily1 = stock_qfq_daily_301596.iloc[0:14]
@@ -0,0 +1,33 @@
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 pandas as pd
10
+ from mns_common.db.MongodbUtil import MongodbUtil
11
+ import mns_common.component.k_line.common.k_line_common_service_api as k_line_common_service_api
12
+ import mns_scheduler.k_line.clean.week_month.normal_week_month_k_line_service as week_month_k_line_service
13
+ import mns_scheduler.k_line.clean.daily.daily_k_line_service as daily_k_line_service
14
+
15
+ mongodb_util = MongodbUtil('27017')
16
+
17
+
18
+ # 日线 周线 月线 成交量 筹码信息
19
+ def calculate_k_line_info(str_day, symbol, diff_days):
20
+ k_line_info = pd.DataFrame([[
21
+ str_day,
22
+ symbol, diff_days]],
23
+ columns=['str_day',
24
+ 'symbol',
25
+ 'diff_days'
26
+ ])
27
+ # 交易天数
28
+ deal_days = k_line_common_service_api.get_deal_days(str_day, symbol)
29
+ # 处理周线 月线
30
+ k_line_info = week_month_k_line_service.handle_month_week_line(k_line_info, str_day, symbol, deal_days)
31
+ # 处理日线
32
+ k_line_info = daily_k_line_service.handle_day_line(k_line_info, str_day, symbol, deal_days)
33
+ return k_line_info
@@ -18,6 +18,7 @@ import mns_scheduler.k_line.sync.daily_week_month_line_sync as daily_week_month_
18
18
  import mns_scheduler.k_line.clean.k_line_info_clean_impl as k_line_info_clean_impl
19
19
  import mns_common.utils.data_frame_util as data_frame_util
20
20
  import mns_common.component.company.company_common_service_api as company_common_service_api
21
+
21
22
  K_LINE_CLEAN_DB_NAME = 'k_line_clean_fail_name'
22
23
 
23
24
  # 定义一个全局锁,用于保护 result 变量的访问
@@ -36,6 +37,7 @@ def sync_k_line_info_task(str_day):
36
37
  last_trade_day = trade_date_common_service_api.get_last_trade_day(str_day)
37
38
  query = {'date': date_handle_util.no_slash_date(last_trade_day)}
38
39
  count = mongodb_util.count(query, 'stock_qfq_daily')
40
+ # 当天没有k线数据时 进行同步
39
41
  if count == 0:
40
42
  daily_week_month_line_sync_api.sync_all_daily_data('daily', 'qfq', 'stock_qfq_daily', str_day,
41
43
  None)
@@ -90,7 +92,10 @@ def handle_fail_data(str_day, real_time_quotes_now):
90
92
 
91
93
  # 多线程同步任务
92
94
  def multi_threaded_k_line_sync(str_day):
95
+ # 退市代码
96
+ de_list_company_symbols = company_common_service_api.get_de_list_company()
93
97
  real_time_quotes_now = east_money_stock_api.get_real_time_quotes_all_stocks()
98
+ real_time_quotes_now = real_time_quotes_now.loc[~(real_time_quotes_now['symbol'].isin(de_list_company_symbols))]
94
99
 
95
100
  # 将list_date列中的所有NaN值设置为99990909
96
101
  real_time_quotes_now['list_date'].fillna(20990909.0, inplace=True)
@@ -184,6 +189,6 @@ def clean_history_data():
184
189
 
185
190
 
186
191
  if __name__ == '__main__':
187
- sync_k_line_info("2024-05-24", None)
192
+ sync_k_line_info("2024-06-03", None)
188
193
  # clean_history_data()
189
194
  # sync_k_line_info("2023-12-22")
@@ -0,0 +1,117 @@
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
+ from mns_common.db.MongodbUtil import MongodbUtil
9
+ import mns_common.utils.date_handle_util as date_handle_util
10
+ from mns_common.component.classify.symbol_classify_param import stock_type_classify_param
11
+
12
+ mongodb_util = MongodbUtil('27017')
13
+
14
+
15
+ # 处理月线 周线 todo 暂时简单计算周线之和
16
+ def handle_month_week_line(k_line_info, str_day, symbol, deal_days):
17
+ sub_stock_new_max_deal_days = stock_type_classify_param['sub_stock_new_max_deal_days']
18
+ if deal_days > sub_stock_new_max_deal_days:
19
+ k_line_info = handle_month_line(k_line_info, str_day, symbol)
20
+ k_line_info = handle_week_line(k_line_info, str_day, symbol)
21
+ else:
22
+ k_line_info['week01'] = 0
23
+ k_line_info['week02'] = 0
24
+ k_line_info['week03'] = 0
25
+ k_line_info['week04'] = 0
26
+ k_line_info['sum_week'] = 0
27
+ k_line_info['week_num'] = 0
28
+ k_line_info['week_last_day'] = '19890729'
29
+
30
+ k_line_info['sum_month'] = 0
31
+ k_line_info['month_num'] = 0
32
+ k_line_info['month01'] = 0
33
+ k_line_info['month02'] = 0
34
+ k_line_info['month01_date'] = '19890729'
35
+ k_line_info['month02_date'] = '19890729'
36
+ return k_line_info
37
+
38
+
39
+ # 处理月线
40
+ def handle_month_line(k_line_info, str_day, symbol):
41
+ month_begin_day = str_day[0:7] + '-01'
42
+ query = {"symbol": symbol,
43
+ 'date': {"$lt": date_handle_util.no_slash_date(month_begin_day)}}
44
+ stock_hfq_monthly = mongodb_util.descend_query(query, 'stock_qfq_monthly', 'date', 2)
45
+ month_num = stock_hfq_monthly.shape[0]
46
+ k_line_info['month_num'] = month_num
47
+ if month_num > 0:
48
+ k_line_info['sum_month'] = round(sum(stock_hfq_monthly['chg']), 2)
49
+ else:
50
+ k_line_info['sum_month'] = 0
51
+
52
+ if month_num == 0:
53
+ k_line_info['month01'] = 0
54
+ k_line_info['month02'] = 0
55
+ k_line_info['month01_date'] = '19890729'
56
+ k_line_info['month02_date'] = '19890729'
57
+ elif month_num == 1:
58
+ k_line_info['month01'] = stock_hfq_monthly.iloc[0].chg
59
+ k_line_info['month02'] = 0
60
+ k_line_info['month01_date'] = stock_hfq_monthly.iloc[0].date
61
+ k_line_info['month02_date'] = '19890729'
62
+ elif month_num == 2:
63
+ k_line_info['month01'] = stock_hfq_monthly.iloc[0].chg
64
+ k_line_info['month02'] = stock_hfq_monthly.iloc[1].chg
65
+ k_line_info['month01_date'] = stock_hfq_monthly.iloc[0].date
66
+ k_line_info['month02_date'] = stock_hfq_monthly.iloc[1].date
67
+
68
+ return k_line_info
69
+
70
+
71
+ # 处理周线
72
+ def handle_week_line(k_line_info, str_day, symbol):
73
+ month_begin_day = str_day[0:7] + '-01'
74
+ query = {"symbol": symbol,
75
+ '$and': [{'date': {"$gte": date_handle_util.no_slash_date(month_begin_day)}},
76
+ {'date': {"$lt": date_handle_util.no_slash_date(str_day)}}]}
77
+ stock_hfq_weekly = mongodb_util.find_query_data('stock_qfq_weekly', query)
78
+ week_num = stock_hfq_weekly.shape[0]
79
+ if week_num > 0:
80
+ stock_hfq_weekly = stock_hfq_weekly.sort_values(by=['date'], ascending=False)
81
+ k_line_info['sum_week'] = round(sum(stock_hfq_weekly['chg']), 2)
82
+ else:
83
+ k_line_info['sum_week'] = 0
84
+ k_line_info['week_num'] = week_num
85
+ if week_num == 1:
86
+ k_line_info['week01'] = stock_hfq_weekly.iloc[0].chg
87
+ k_line_info['week02'] = 0
88
+ k_line_info['week03'] = 0
89
+ k_line_info['week04'] = 0
90
+ elif week_num == 2:
91
+ k_line_info['week01'] = stock_hfq_weekly.iloc[0].chg
92
+ k_line_info['week02'] = stock_hfq_weekly.iloc[1].chg
93
+ k_line_info['week03'] = 0
94
+ k_line_info['week04'] = 0
95
+ elif week_num == 3:
96
+ k_line_info['week01'] = stock_hfq_weekly.iloc[0].chg
97
+ k_line_info['week02'] = stock_hfq_weekly.iloc[1].chg
98
+ k_line_info['week03'] = stock_hfq_weekly.iloc[2].chg
99
+ k_line_info['week04'] = 0
100
+ elif week_num >= 4:
101
+ k_line_info['week01'] = stock_hfq_weekly.iloc[0].chg
102
+ k_line_info['week02'] = stock_hfq_weekly.iloc[1].chg
103
+ k_line_info['week03'] = stock_hfq_weekly.iloc[2].chg
104
+ k_line_info['week04'] = stock_hfq_weekly.iloc[3].chg
105
+ elif week_num == 0:
106
+ k_line_info['week01'] = 0
107
+ k_line_info['week02'] = 0
108
+ k_line_info['week03'] = 0
109
+ k_line_info['week04'] = 0
110
+ k_line_info['week_last_day'] = month_begin_day
111
+ k_line_info['sum_week'] = 0
112
+ return k_line_info
113
+ stock_hfq_weekly = stock_hfq_weekly.sort_values(by=['date'], ascending=False)
114
+ stock_hfq_weekly_last = stock_hfq_weekly.iloc[0:1]
115
+ k_line_info['week_last_day'] = list(stock_hfq_weekly_last['date'])[0]
116
+
117
+ return k_line_info
@@ -0,0 +1,47 @@
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
+ # 每月最大交易天数
10
+ MAX_TRADE_DAYS_PER_MONTH = 23
11
+ # 每周最大交易天数
12
+ MAX_TRADE_DAYS_PER_MONTH = 5
13
+
14
+
15
+ def handle_month_week_line(k_line_info, stock_qfq_daily, deal_days):
16
+ if 1 < deal_days < MAX_TRADE_DAYS_PER_MONTH:
17
+ month_01 = round(sum(stock_qfq_daily['chg']), 2)
18
+ k_line_info['sum_month'] = month_01
19
+ k_line_info['month_num'] = 1
20
+ k_line_info['month01'] = month_01
21
+ elif (deal_days >= MAX_TRADE_DAYS_PER_MONTH) \
22
+ and (deal_days < MAX_TRADE_DAYS_PER_MONTH * 2):
23
+ stock_qfq_daily_month_01 = stock_qfq_daily.iloc[0:MAX_TRADE_DAYS_PER_MONTH]
24
+ month_01 = round(sum(stock_qfq_daily_month_01['chg']), 2)
25
+ stock_qfq_daily_month_02 = stock_qfq_daily.iloc[MAX_TRADE_DAYS_PER_MONTH + 1, deal_days - 1]
26
+ month_02 = round(sum(stock_qfq_daily_month_02['chg']), 2)
27
+ k_line_info['sum_month'] = round(month_01 + month_02, 2)
28
+ k_line_info['month_num'] = 2
29
+ k_line_info['month01'] = month_01
30
+ k_line_info['month_02'] = month_02
31
+ elif deal_days >= MAX_TRADE_DAYS_PER_MONTH * 2:
32
+ stock_qfq_daily_month_01 = stock_qfq_daily.iloc[0:MAX_TRADE_DAYS_PER_MONTH]
33
+ month_01 = round(sum(stock_qfq_daily_month_01['chg']), 2)
34
+ stock_qfq_daily_month_02 = stock_qfq_daily.iloc[MAX_TRADE_DAYS_PER_MONTH + 1, MAX_TRADE_DAYS_PER_MONTH * 2]
35
+ month_02 = round(sum(stock_qfq_daily_month_02['chg']), 2)
36
+
37
+ stock_qfq_daily_week_sum = stock_qfq_daily.iloc[MAX_TRADE_DAYS_PER_MONTH * 2 + 1, deal_days - 1]
38
+
39
+ week_sum = round(sum(stock_qfq_daily_week_sum['chg']), 2)
40
+
41
+ k_line_info['sum_month'] = round(month_01 + month_02, 2)
42
+ k_line_info['month_num'] = 2
43
+ k_line_info['month01'] = month_01
44
+ k_line_info['month_02'] = month_02
45
+
46
+ k_line_info['week_num'] = week_sum
47
+ return k_line_info
@@ -0,0 +1,7 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
@@ -0,0 +1,7 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
@@ -0,0 +1,7 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
@@ -24,7 +24,7 @@ import mns_scheduler.zt.export_open_data_to_excel as export_open_data_to_excel_a
24
24
  import mns_scheduler.zt.zt_five_boards_sync_api as zt_five_boards_sync_api
25
25
  import mns_scheduler.zt.zt_pool_sync_api as zt_pool_sync_api
26
26
  import mns_scheduler.zt.today_high_chg_pool_sync_api as today_high_chg_pool_sync_api
27
- import mns_scheduler.k_line.clean.k_line_info_clean_service as k_line_info_clean_service
27
+ import mns_scheduler.k_line.clean.k_line_info_clean_task as k_line_info_clean_service
28
28
  import mns_scheduler.concept.clean.ths_concept_clean_api as ths_concept_choose_api
29
29
  import mns_common.api.em.east_money_stock_gdfx_free_top_10_api as east_money_stock_gdfx_free_top_10_api
30
30
  import \
@@ -1,3 +1,3 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-scheduler
3
- Version: 1.0.6.8
3
+ Version: 1.0.7.1
@@ -57,8 +57,15 @@ mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py
57
57
  mns_scheduler/k_line/__init__.py
58
58
  mns_scheduler/k_line/clean/__init__.py
59
59
  mns_scheduler/k_line/clean/k_line_info_clean_impl.py
60
- mns_scheduler/k_line/clean/k_line_info_clean_service.py
61
- mns_scheduler/k_line/clean/recent_hot_stocks_clean_service.py
60
+ mns_scheduler/k_line/clean/k_line_info_clean_task.py
61
+ mns_scheduler/k_line/clean/daily/__init__.py
62
+ mns_scheduler/k_line/clean/daily/daily_k_line_clean_common_service.py
63
+ mns_scheduler/k_line/clean/daily/daily_k_line_service.py
64
+ mns_scheduler/k_line/clean/week_month/__init__.py
65
+ mns_scheduler/k_line/clean/week_month/normal_week_month_k_line_service.py
66
+ mns_scheduler/k_line/clean/week_month/sub_new_week_month_k_line_service.py
67
+ mns_scheduler/k_line/hot_stocks/__init__.py
68
+ mns_scheduler/k_line/hot_stocks/recent_hot_stocks_clean_service.py
62
69
  mns_scheduler/k_line/sync/__init__.py
63
70
  mns_scheduler/k_line/sync/daily_week_month_line_sync.py
64
71
  mns_scheduler/kpl/__init__.py
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name='mns-scheduler',
5
- version='1.0.6.8',
5
+ version='1.0.7.1',
6
6
  packages=find_packages(),
7
7
  install_requires=[], # 如果有依赖项,可以在这里列出
8
8
  )