mns-scheduler 1.0.3.3__py3-none-any.whl → 1.0.3.6__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 (29) hide show
  1. mns_scheduler/backup/__init__.py +7 -0
  2. mns_scheduler/{concept → backup}/em/em_new_concept_his_sync.py +1 -1
  3. mns_scheduler/{concept → backup}/em/em_new_concept_sync_web.py +1 -1
  4. mns_scheduler/concept/clean/{ths_effective_concept_clean_api.py → ths_concept_clean_api.py} +1 -0
  5. mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py +6 -88
  6. mns_scheduler/concept/ths/common/ths_concept_update_common_api.py +56 -1
  7. mns_scheduler/concept/ths/{symbol/sync_symbol_all_concepts_api.py → update_concept_info/sync_one_symbol_all_concepts_api.py} +1 -1
  8. mns_scheduler/kpl/selection/index/sync_best_choose_his_index.py +4 -9
  9. mns_scheduler/real_time/realtime_quotes_now_sync.py +6 -2
  10. mns_scheduler/{ipo → trade}/auto_ipo_buy_api.py +2 -5
  11. mns_scheduler/trade/auto_sell_service_api.py +116 -0
  12. mns_scheduler/trade/sync_position_api.py +56 -0
  13. mns_scheduler/zz_task/data_sync_task.py +52 -25
  14. {mns_scheduler-1.0.3.3.dist-info → mns_scheduler-1.0.3.6.dist-info}/METADATA +1 -1
  15. {mns_scheduler-1.0.3.3.dist-info → mns_scheduler-1.0.3.6.dist-info}/RECORD +29 -26
  16. /mns_scheduler/{concept/em → backup/app}/__init__.py +0 -0
  17. /mns_scheduler/{concept/ths → backup}/app/ths_new_concept_sync_app.py +0 -0
  18. /mns_scheduler/{concept/ths/app → backup/em}/__init__.py +0 -0
  19. /mns_scheduler/{concept → backup}/em/em_new_concept_sync_common_api.py +0 -0
  20. /mns_scheduler/{concept/ths/symbol → backup/wen_cai}/__init__.py +0 -0
  21. /mns_scheduler/{concept/ths → backup}/wen_cai/wen_cai_concept_sync.py +0 -0
  22. /mns_scheduler/concept/ths/{web → sync_new_index}/__init__.py +0 -0
  23. /mns_scheduler/concept/ths/{web → sync_new_index}/sync_ths_concept_by_ak_api.py +0 -0
  24. /mns_scheduler/concept/ths/{web → sync_new_index}/sync_ths_new_concept_by_web_api.py +0 -0
  25. /mns_scheduler/concept/ths/{wen_cai → update_concept_info}/__init__.py +0 -0
  26. /mns_scheduler/concept/ths/{symbol/sync_concept_all_symbols_api.py → update_concept_info/sync_one_concept_all_symbols_api.py} +0 -0
  27. /mns_scheduler/{ipo → trade}/__init__.py +0 -0
  28. {mns_scheduler-1.0.3.3.dist-info → mns_scheduler-1.0.3.6.dist-info}/WHEEL +0 -0
  29. {mns_scheduler-1.0.3.3.dist-info → mns_scheduler-1.0.3.6.dist-info}/top_level.txt +0 -0
@@ -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)
@@ -11,7 +11,7 @@ from loguru import logger
11
11
  from datetime import datetime
12
12
  import mns_common.utils.date_handle_util as date_handle_util
13
13
  import mns_common.db.MongodbUtil as MongodbUtil
14
- import mns_scheduler.concept.em.em_new_concept_sync_common_api as em_new_concept_sync_common_api
14
+ import mns_scheduler.backup.em.em_new_concept_sync_common_api as em_new_concept_sync_common_api
15
15
  import mns_common.api.em.em_concept_index_api as em_concept_index_api
16
16
 
17
17
  mongodb_util = MongodbUtil('27017')
@@ -9,7 +9,7 @@ sys.path.append(project_path)
9
9
  import datetime
10
10
  import time
11
11
  from loguru import logger
12
- import mns_scheduler.concept.em.em_new_concept_sync_common_api as em_new_concept_sync_common_api
12
+ import mns_scheduler.backup.em.em_new_concept_sync_common_api as em_new_concept_sync_common_api
13
13
 
14
14
 
15
15
  # 同步东财新概念
@@ -25,6 +25,7 @@ def update_concept_num():
25
25
  mongodb_util.save_mongo(ths_concept_list_one_df, 'ths_concept_list')
26
26
 
27
27
 
28
+ # 更新空名字
28
29
  def update_null_name():
29
30
  query = {"_id": {'$gte': 886025}}
30
31
  ths_concept_list = mongodb_util.find_query_data('ths_concept_list', query)
@@ -2,9 +2,7 @@ import sys
2
2
  import os
3
3
 
4
4
  import pandas as pd
5
- import time
6
5
  import mns_common.api.ths.ths_stock_api as ths_stock_api
7
- import datetime
8
6
  from mns_common.db.MongodbUtil import MongodbUtil
9
7
  import mns_common.component.company.company_common_service_api as company_common_service_api
10
8
 
@@ -15,7 +13,7 @@ sys.path.append(project_path)
15
13
  mongodb_util = MongodbUtil('27017')
16
14
  import mns_common.api.msg.push_msg_api as push_msg_api
17
15
  import mns_scheduler.company_info.company_info_sync_api as company_info_sync_api
18
- import mns_common.utils.data_frame_util as data_frame_util
16
+
19
17
  max_concept_code = 886110
20
18
 
21
19
  order_fields = [
@@ -31,6 +29,7 @@ order_fields = [
31
29
  ]
32
30
 
33
31
 
32
+ # 推送到手机
34
33
  def push_msg_to_we_chat_web(concept_code, concept_name, url):
35
34
  msg = "概念代码:" + str(concept_code) + "," + "概念名称:" + concept_name + "," + "url: " + url
36
35
  title = "新增同花顺概念:" + str(concept_code) + "-" + concept_name
@@ -100,7 +99,8 @@ def save_ths_concept_detail(new_concept_symbol_df,
100
99
 
101
100
  if bool(1 - ('way' in new_concept_symbol_df.columns)):
102
101
  new_concept_symbol_df['way'] = 'symbol_sync'
103
-
102
+ if "long" not in new_concept_symbol_df.columns:
103
+ new_concept_symbol_df['long'] = ''
104
104
  new_concept_symbol_df = new_concept_symbol_df[[
105
105
  "_id",
106
106
  "index",
@@ -120,7 +120,8 @@ def save_ths_concept_detail(new_concept_symbol_df,
120
120
  "total_mv_sp",
121
121
  "company_type",
122
122
  "concept_create_day",
123
- "way"
123
+ "way",
124
+ "long"
124
125
  ]]
125
126
 
126
127
  exist_concept_detail = mongodb_util.find_query_data('ths_stock_concept_detail', query)
@@ -150,92 +151,9 @@ def update_company_info(new_concept_symbol_df):
150
151
  company_common_service_api.company_info_industry_cache_clear()
151
152
 
152
153
 
153
- def update_null_name():
154
- query = {"_id": {'$gte': 886025}}
155
- ths_concept_list = mongodb_util.find_query_data('ths_concept_list', query)
156
- ths_concept_list = ths_concept_list.sort_values(by=['_id'], ascending=False)
157
-
158
- for concept_one in ths_concept_list.itertuples():
159
- concept_code = concept_one.symbol
160
- name = concept_one.name
161
- exist_url = concept_one.url
162
-
163
- if name == '':
164
- concept_name = ths_stock_api.get_concept_name(concept_code)
165
- query_concept = {"symbol": concept_code}
166
- new_values = {'$set': {"name": concept_name}}
167
- mongodb_util.update_one_query(query_concept, new_values, 'ths_concept_list')
168
-
169
- new_values_detail = {'$set': {"concept_name": concept_name}}
170
-
171
- query_concept_detail = {"concept_code": concept_code}
172
-
173
- mongodb_util.update_many(query_concept_detail, new_values_detail, 'ths_stock_concept_detail')
174
- time.sleep(10)
175
-
176
- if exist_url == '' or pd.isna(exist_url):
177
- url = 'http://q.10jqka.com.cn/thshy/detail/code/' + str(concept_code)
178
- str_now_time = concept_one.str_day + " " + "00:00:00"
179
- query_concept = {"symbol": concept_code}
180
- new_values = {'$set': {"url": url, "str_now_time": str_now_time}}
181
- mongodb_util.update_one_query(query_concept, new_values, 'ths_concept_list')
182
-
183
-
184
- # 更新概念数量
185
- def update_concept_number():
186
- query = {}
187
- ths_concept_list = mongodb_util.find_query_data('ths_concept_list', query)
188
- ths_concept_list = ths_concept_list.sort_values(by=['_id'], ascending=False)
189
- for concept_one in ths_concept_list.itertuples():
190
- try:
191
- query_detail = {'concept_code': concept_one.symbol}
192
- concept_number = mongodb_util.count(query_detail, 'ths_stock_concept_detail')
193
- query_update = {"symbol": concept_one.symbol}
194
- new_values = {'$set': {"concept_number": concept_number}}
195
- mongodb_util.update_one_query(query_update, new_values, 'ths_concept_list')
196
- except BaseException as e:
197
- print(e)
198
-
199
-
200
154
  def get_concept_detail_info_web(concept_code):
201
155
  new_concept_symbol_list = ths_stock_api.ths_stock_concept(concept_code)
202
156
  if new_concept_symbol_list is None or new_concept_symbol_list.shape[0] == 0:
203
157
  return None
204
158
  new_concept_symbol_list['_id'] = str(concept_code) + '-' + new_concept_symbol_list['symbol']
205
159
  return new_concept_symbol_list
206
-
207
-
208
- def update_nan_data():
209
- query = {"concept_code": float('NaN')}
210
- ths_stock_concept_detail = mongodb_util.find_query_data('ths_stock_concept_detail', query)
211
-
212
- ths_stock_concept_detail['concept_code'] = ths_stock_concept_detail['_id']
213
- for stock_one in ths_stock_concept_detail.itertuples():
214
- query = {"symbol": stock_one.symbol}
215
- company_info = mongodb_util.find_query_data('company_info', query)
216
-
217
- concept_code = stock_one.concept_code
218
- concept_code = int(concept_code[0:6])
219
-
220
- new_values = {'$set': {"concept_code": concept_code,
221
- "flow_mv_sp": list(company_info['flow_mv_sp'])[0],
222
- "total_mv_sp": list(company_info['total_mv_sp'])[0],
223
- "company_type": list(company_info['company_type'])[0]
224
-
225
- }}
226
- query_update = {"_id": stock_one.concept_code}
227
- mongodb_util.update_many(query_update, new_values, 'ths_stock_concept_detail')
228
-
229
-
230
- def update_concept_create_day():
231
- query = {"symbol": {'$exists': True}}
232
- new_concept_list = mongodb_util.descend_query(query, "ths_concept_list", "_id", 500)
233
-
234
- if new_concept_list.shape[0] > 0:
235
- for one_concept in new_concept_list.itertuples():
236
- concept_create_day = one_concept.str_day
237
- query_update = {"concept_code": one_concept.symbol}
238
-
239
- new_values = {'$set': {"concept_create_day": concept_create_day}}
240
-
241
- mongodb_util.update_many(query_update, new_values, 'ths_stock_concept_detail')
@@ -11,11 +11,16 @@ from mns_common.db.MongodbUtil import MongodbUtil
11
11
  from loguru import logger
12
12
  import mns_common.utils.data_frame_util as data_frame_util
13
13
  import mns_common.constant.db_name_constant as db_name_constant
14
+ import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
15
+ from datetime import datetime
16
+ import mns_common.api.ths.ths_stock_api as ths_stock_api
17
+ import pandas as pd
14
18
 
15
19
  mongodb_util = MongodbUtil('27017')
16
20
 
17
21
 
18
- def update_ths_concept_detail(ths_symbol_all_concepts, symbol):
22
+ # 更新概念入选理由
23
+ def update_ths_concept_choose_reason(ths_symbol_all_concepts, symbol):
19
24
  all_ths_concept = ths_concept_common_service_api.get_all_ths_concept()
20
25
  for concept_one in ths_symbol_all_concepts.itertuples():
21
26
  try:
@@ -32,3 +37,53 @@ def update_ths_concept_detail(ths_symbol_all_concepts, symbol):
32
37
  mongodb_util.update_many(query, new_values, db_name_constant.THS_STOCK_CONCEPT_DETAIL)
33
38
  except BaseException as e:
34
39
  logger.error("更新ths概念入选理由异常{},{},{}", symbol, concept_one.title, e)
40
+
41
+
42
+ # 更新空的入选概念
43
+ def update_ths_concept_choose_null_reason():
44
+ now_date = datetime.now()
45
+ str_day = now_date.strftime('%Y-%m-%d')
46
+ last_trade_day = trade_date_common_service_api.get_last_trade_day(str_day)
47
+ query = {"$and": [{"str_day": {"$gte": last_trade_day}},
48
+ {"str_day": {"$lte": str_day}}],
49
+ "$or": [{"long": ""},
50
+ {"long": {"$exists": False}}]}
51
+ nan_reason_df = mongodb_util.find_query_data(db_name_constant.TODAY_NEW_CONCEPT_LIST, query)
52
+ update_null_reason(nan_reason_df)
53
+
54
+
55
+ # 更新空入选理由
56
+ def update_null_reason(nan_reason_df):
57
+ # 所有概念
58
+ all_ths_concept = ths_concept_common_service_api.get_all_ths_concept()
59
+ for nan_one in nan_reason_df.itertuples():
60
+ try:
61
+ concept_code = nan_one.concept_code
62
+ ths_concept_one_df = all_ths_concept.loc[
63
+ (all_ths_concept['symbol'] == concept_code)
64
+ | (all_ths_concept['web_concept_code'] == concept_code)]
65
+ if data_frame_util.is_empty(ths_concept_one_df):
66
+ continue
67
+ web_concept_code = list(ths_concept_one_df['web_concept_code'])[0]
68
+
69
+ ths_concept_json = ths_stock_api.get_symbol_add_new_concept(nan_one.symbol)
70
+ symbol_ths_concept_all_df = pd.DataFrame(ths_concept_json)
71
+
72
+ symbol_ths_concept_one_df = symbol_ths_concept_all_df[
73
+ symbol_ths_concept_all_df['cid'] == web_concept_code]
74
+ if data_frame_util.is_empty(symbol_ths_concept_one_df):
75
+ continue
76
+
77
+ query = {"$or": [{'symbol': nan_one.symbol, "concept_code": int(concept_code)},
78
+ {'symbol': nan_one.symbol, "concept_code": int(web_concept_code)}]}
79
+ short = list(symbol_ths_concept_one_df['short'])[0]
80
+ long = list(symbol_ths_concept_one_df['long'])[0]
81
+ new_values = {"$set": {"short": short, "long": long}}
82
+ mongodb_util.update_many(query, new_values, db_name_constant.THS_STOCK_CONCEPT_DETAIL)
83
+ mongodb_util.update_many(query, new_values, db_name_constant.TODAY_NEW_CONCEPT_LIST)
84
+ except BaseException as e:
85
+ logger.error("更新概念入选理由异常:{},{}", nan_one.symbol, e)
86
+
87
+
88
+ if __name__ == '__main__':
89
+ update_ths_concept_choose_null_reason()
@@ -95,7 +95,7 @@ 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_detail(symbol_ths_concept_all_df, stock_one.symbol)
98
+ ths_concept_update_common_api.update_ths_concept_choose_reason(symbol_ths_concept_all_df, stock_one.symbol)
99
99
 
100
100
  str_day = now_date.strftime('%Y-%m-%d')
101
101
  str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
@@ -51,7 +51,7 @@ def sync_best_choose_his_index(str_day):
51
51
  for end_time in KPL_MINUTE_LIST:
52
52
  while page_number <= page_max_number:
53
53
  index = page_number * kpl_common_api.HIS_PAGE_MAX_COUNT
54
- kpl_plate_best_index_df = kpl_common_api.get_plate_index_his(index, int(kpl_common_api.BEST_CHOOSE),
54
+ kpl_plate_best_index_df = kpl_common_api.get_plate_index_his(index, kpl_common_api.BEST_CHOOSE,
55
55
  str_day, KPL_MINUTE_BEGIN,
56
56
  end_time)
57
57
 
@@ -59,11 +59,6 @@ def sync_best_choose_his_index(str_day):
59
59
  continue
60
60
  kpl_plate_best_index_df['number'] = number
61
61
  kpl_plate_best_index_df['str_day'] = str_day
62
- hour = end_time[0:2]
63
- minute = end_time[2:4]
64
- kpl_plate_best_index_df['str_day'] = str_day
65
-
66
- kpl_plate_best_index_df['str_now_date'] = str_day + " " + hour + ":" + minute + ":00"
67
62
  kpl_plate_best_index_df = kpl_plate_best_index_df[[
68
63
  "plate_code",
69
64
  "plate_name",
@@ -83,7 +78,7 @@ def sync_best_choose_his_index(str_day):
83
78
  "ava_pe_next",
84
79
  "number",
85
80
  "str_day",
86
- "str_now_date"
81
+
87
82
  ]]
88
83
  save_kpl_his_index(kpl_plate_best_index_df, str_day, end_time)
89
84
  if end_time == KPL_MINUTE_END:
@@ -96,7 +91,7 @@ def sync_best_choose_his_index(str_day):
96
91
 
97
92
  def save_kpl_his_index(kpl_plate_best_index_df, str_day, end_time):
98
93
  kpl_plate_best_index_df['_id'] = str_day + '-' + end_time + '-' + kpl_plate_best_index_df['plate_code']
99
- mongodb_util.save_mongo(kpl_plate_best_index_df, db_name_constant.KPL_BEST_CHOOSE_HIS)
94
+ mongodb_util.insert_mongo(kpl_plate_best_index_df, db_name_constant.KPL_BEST_CHOOSE_HIS)
100
95
 
101
96
 
102
97
  def save_kpl_his_daily(kpl_plate_best_index_df, str_day, end_time):
@@ -105,7 +100,7 @@ def save_kpl_his_daily(kpl_plate_best_index_df, str_day, end_time):
105
100
 
106
101
 
107
102
  def sync_all_days():
108
- query = {"_id": {"$gte": '2022-07-19'}, 'trade_date': {"$lte": "2024-04-23"}}
103
+ query = {"_id": {"$gte": '2022-07-22'}, 'trade_date': {"$lte": "2024-04-21"}}
109
104
  trade_date_list = mongodb_util.find_query_data('trade_date_list', query)
110
105
  trade_date_list = trade_date_list.sort_values(by=['trade_date'], ascending=False)
111
106
  for trade_one in trade_date_list.itertuples():
@@ -18,7 +18,7 @@ import mns_scheduler.real_time.realtime_quotes_now_create_db_index as realtime_q
18
18
  import pandas as pd
19
19
  from mns_common.db.MongodbUtil import MongodbUtil
20
20
  from mns_common.utils.async_fun import async_fun
21
-
21
+ import mns_scheduler.trade.auto_sell_service_api as auto_sell_service_api
22
22
  import mns_common.constant.db_name_constant as db_name_constant
23
23
 
24
24
  mongodb_util = MongodbUtil('27017')
@@ -174,13 +174,17 @@ def sync_realtime_quotes():
174
174
  now_date = datetime.datetime.now()
175
175
 
176
176
  str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
177
- if bool(date_util.is_trade_time(now_date)):
177
+ if True or bool(date_util.is_trade_time(now_date)):
178
178
  try:
179
179
  real_time_quotes_now = east_money_stock_api.get_real_time_quotes_all_stocks()
180
180
  real_time_quotes_now = handle_init_real_time_quotes_data(real_time_quotes_now.copy(),
181
181
  str_now_date, number)
182
182
  save_real_time_quotes(real_time_quotes_now.copy(), now_date, db_name_constant.REAL_TIME_QUOTES_NOW,
183
183
  number)
184
+ try:
185
+ auto_sell_service_api.auto_sell_stock(real_time_quotes_now.copy())
186
+ except Exception as e:
187
+ logger.error("自动卖出执行异常:{}", e)
184
188
 
185
189
  if date_util.is_call_auction(str_now_date) or date_util.is_afternoon_time(now_date):
186
190
  if number % 3 == 0:
@@ -6,15 +6,12 @@ end = file_path.index('mns') + 17
6
6
  project_path = file_path[0:end]
7
7
  sys.path.append(project_path)
8
8
 
9
- import easytrader
10
-
11
- user = easytrader.use('ths')
12
- user.connect(r'D:\Program Files\ths\xiadan.exe')
9
+ import mns_common.component.trade.trade_service_api as trade_service_api
13
10
 
14
11
 
15
12
  ## 自动一键打新
16
13
  def auto_ipo_buy():
17
- user.auto_ipo()
14
+ trade_service_api.auto_ipo_buy()
18
15
 
19
16
 
20
17
  if __name__ == '__main__':
@@ -0,0 +1,116 @@
1
+ import os
2
+ import sys
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.utils.data_frame_util as data_frame_util
10
+ import mns_common.constant.db_name_constant as db_name_constant
11
+ import datetime
12
+ import mns_common.component.cache.cache_service as cache_service
13
+ from mns_common.db.MongodbUtil import MongodbUtil
14
+ import mns_common.component.trade.trade_service_api as trade_service_api
15
+ from loguru import logger
16
+ from mns_common.utils.async_fun import async_fun
17
+
18
+ mongodb_util = MongodbUtil('27017')
19
+
20
+ AUTO_SELL_KEY = "AUTO_SELL_KEY"
21
+
22
+ # 当前跌幅卖出阈值
23
+ AUTO_SELL_CHG = -8
24
+ # 收益率阈值
25
+ AUTO_SELL_PROFIT_LOSS_CHG = -11.0
26
+
27
+
28
+ # 自动卖出
29
+ @async_fun
30
+ def auto_sell_stock(realtime_quotes_now):
31
+ sell_flag = cache_service.get_cache(AUTO_SELL_KEY)
32
+ if sell_flag is not None and bool(1 - sell_flag):
33
+ return
34
+ now_date = datetime.datetime.now()
35
+ str_day = now_date.strftime('%Y-%m-%d')
36
+ query_exist = {'str_day': str_day, "valid": True}
37
+ position_stock_df = mongodb_util.find_query_data(db_name_constant.POSITION_STOCK, query_exist)
38
+ if data_frame_util.is_empty(position_stock_df):
39
+ cache_service.set_cache(AUTO_SELL_KEY, False)
40
+ return None
41
+ else:
42
+ cache_service.set_cache(AUTO_SELL_KEY, True)
43
+ position_stock_symbol_list = list(position_stock_df['symbol'])
44
+ realtime_quotes_now_position = realtime_quotes_now.loc[
45
+ realtime_quotes_now['symbol'].isin(position_stock_symbol_list)]
46
+ sell_stock_detail(realtime_quotes_now_position, position_stock_df, str_day, now_date)
47
+
48
+
49
+ def sell_stock_detail(realtime_quotes_now_position, position_stock_df, str_day, now_date):
50
+ for stock_one in realtime_quotes_now_position.itertuples():
51
+ try:
52
+
53
+ symbol = stock_one.symbol
54
+ sell_price = trade_service_api.get_last_sell_price(symbol)
55
+ position_stock_df_one = position_stock_df.loc[position_stock_df['symbol'] == symbol]
56
+ available_position = list(position_stock_df_one['available_position'])[0]
57
+ if sell_signal(stock_one, now_date, position_stock_df_one):
58
+ sell_result = trade_service_api.order_sell(symbol, sell_price, available_position)
59
+ if "message" in sell_result:
60
+ result_msg = sell_result['message']
61
+ if result_msg == 'success':
62
+ update_position_status(symbol, None, str_day)
63
+ elif "entrust_no" in sell_result:
64
+ sell_entrust_no = sell_result['entrust_no']
65
+ if sell_entrust_no is not None:
66
+ update_position_status(symbol, sell_entrust_no, str_day)
67
+
68
+ except BaseException as e:
69
+ logger.error("自动卖出异常:{},{}", stock_one.symbol, e)
70
+
71
+
72
+ # 卖出信号 TODO 待优化
73
+ def sell_signal(stock_one, now_date, position_stock_df_one):
74
+ chg = stock_one.chg
75
+ wei_bi = stock_one.wei_bi
76
+
77
+ hour = now_date.hour
78
+ minute = now_date.minute
79
+ # 跌停直接卖出
80
+ if wei_bi == -100:
81
+ return True
82
+ # 开盘五分钟先看看
83
+ if hour == 9 and minute <= 35:
84
+ return False
85
+ # 尾盘卖不出了
86
+ if hour == 14 and minute >= 57:
87
+ return False
88
+
89
+ # 自动卖出涨幅
90
+ if chg < AUTO_SELL_CHG:
91
+ return True
92
+
93
+ cost_price = list(position_stock_df_one['cost_price'])[0]
94
+ now_price = stock_one.now_price
95
+ # 收益率
96
+ profit_loss_chg = round((now_price - cost_price) * 100 / cost_price, 2)
97
+ # 收益卖出阈值
98
+ if profit_loss_chg < AUTO_SELL_PROFIT_LOSS_CHG:
99
+ return True
100
+ return False
101
+
102
+
103
+ # 更新持仓状态
104
+ def update_position_status(symbol, sell_entrust_no, str_day):
105
+ update_query = {'symbol': symbol, 'str_day': str_day}
106
+ new_values = {"$set": {"valid": False, "sell_entrust_no": sell_entrust_no}}
107
+ mongodb_util.update_many(update_query, new_values, db_name_constant.POSITION_STOCK)
108
+
109
+
110
+ import mns_common.api.em.east_money_stock_api as east_money_stock_api
111
+
112
+ if __name__ == '__main__':
113
+ sell_price_01 = trade_service_api.get_last_sell_price('002336')
114
+ while True:
115
+ real_time_quotes_now = east_money_stock_api.get_real_time_quotes_all_stocks()
116
+ auto_sell_stock(real_time_quotes_now)
@@ -0,0 +1,56 @@
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.trade.trade_service_api as trade_service_api
9
+ import pandas as pd
10
+ import mns_common.utils.data_frame_util as data_frame_util
11
+ import mns_common.constant.db_name_constant as db_name_constant
12
+ import datetime
13
+
14
+ from mns_common.db.MongodbUtil import MongodbUtil
15
+
16
+ mongodb_util = MongodbUtil('27017')
17
+
18
+
19
+ # 同步持仓
20
+ def sync_position():
21
+ now_date = datetime.datetime.now()
22
+ str_day = now_date.strftime('%Y-%m-%d')
23
+ query_exist = {'str_day': str_day}
24
+ if mongodb_util.exist_data_query(db_name_constant.POSITION_STOCK, query_exist):
25
+ return None
26
+ position_list = trade_service_api.get_position()
27
+ position_df = pd.DataFrame(position_list)
28
+ position_df = position_df.rename(columns={"明细": "detail",
29
+ "序号": "index",
30
+ "证券代码": "symbol",
31
+ "证券名称": "name",
32
+ "持仓数量": "open_position",
33
+ "可用数量": "available_position",
34
+ "冻结数量": "frozen_position",
35
+ "参考成本价": "cost_price",
36
+ "当前价": "now_price",
37
+ "浮动盈亏": "floating_profit_loss",
38
+ "盈亏比例(%)": "profit_loss_percent",
39
+ "最新市值": "flow_mv",
40
+ "当日盈亏": "today_profit_loss",
41
+ "当日盈亏比(%)": "today_profit_loss_percent",
42
+ "仓位占比(%)": "position_ratio",
43
+ "持股天数": "holding_days",
44
+ "当日买入": "day_buy",
45
+ "当日卖出": "day_sell",
46
+ "交易市场": "market"
47
+ })
48
+ if data_frame_util.is_not_empty(position_df):
49
+ position_df["_id"] = position_df['symbol'] + '-' + str_day
50
+ position_df["str_day"] = str_day
51
+ position_df["valid"] = True
52
+ mongodb_util.save_mongo(position_df, db_name_constant.POSITION_STOCK)
53
+
54
+
55
+ if __name__ == '__main__':
56
+ sync_position()
@@ -24,17 +24,20 @@ import mns_scheduler.zt.zt_five_boards_sync_api as zt_five_boards_sync_api
24
24
  import mns_scheduler.zt.zt_pool_sync_api as zt_pool_sync_api
25
25
  import mns_scheduler.zt.today_high_chg_pool_sync_api as today_high_chg_pool_sync_api
26
26
  import mns_scheduler.k_line.clean.k_line_info_clean_service as k_line_info_clean_service
27
- import mns_scheduler.concept.clean.ths_effective_concept_clean_api as ths_effective_concept_choose_api
27
+ import mns_scheduler.concept.clean.ths_concept_clean_api as ths_concept_choose_api
28
28
  import mns_common.api.em.east_money_stock_gdfx_free_top_10_api as east_money_stock_gdfx_free_top_10_api
29
- import mns_scheduler.concept.ths.symbol.sync_concept_all_symbols_api as sync_concept_all_symbols_api
30
- import mns_scheduler.concept.ths.symbol.sync_symbol_all_concepts_api as sync_symbol_all_concepts_api
31
- import mns_scheduler.concept.ths.web.sync_ths_new_concept_by_web_api as sync_ths_new_concept_by_web_api
32
- import mns_scheduler.concept.ths.web.sync_ths_concept_by_ak_api as sync_ths_concept_by_ak_api
33
- import mns_scheduler.concept.clean.ths_effective_concept_clean_api as ths_effective_concept_clean_api
29
+ import \
30
+ mns_scheduler.concept.ths.update_concept_info.sync_one_concept_all_symbols_api as sync_one_concept_all_symbols_api
31
+ import \
32
+ mns_scheduler.concept.ths.update_concept_info.sync_one_symbol_all_concepts_api as sync_one_symbol_all_concepts_api
33
+ import mns_scheduler.concept.ths.sync_new_index.sync_ths_new_concept_by_web_api as sync_ths_new_concept_by_web_api
34
+ import mns_scheduler.concept.ths.sync_new_index.sync_ths_concept_by_ak_api as sync_ths_concept_by_ak_api
34
35
  import mns_scheduler.kpl.selection.total.sync_kpl_best_total_sync_api as sync_kpl_best_total_sync_api
35
36
  import mns_scheduler.company_info.company_info_sync_api as company_info_sync_api
36
- import mns_scheduler.ipo.auto_ipo_buy_api as auto_ipo_buy_api
37
+ import mns_scheduler.trade.auto_ipo_buy_api as auto_ipo_buy_api
37
38
  import mns_scheduler.kpl.selection.index.sync_best_choose_his_index as sync_best_choose_his_index
39
+ import mns_scheduler.concept.ths.common.ths_concept_update_common_api as ths_concept_update_common_api
40
+ import mns_scheduler.trade.sync_position_api as sync_position_api
38
41
 
39
42
 
40
43
  # 同步交易日期任务完成
@@ -200,11 +203,6 @@ def sync_today_trade_k_line_info():
200
203
  logger.info('计算当日k线信息完成:{}', str_day)
201
204
 
202
205
 
203
- # 更新空概念名称
204
- def update_null_name():
205
- ths_effective_concept_choose_api.update_null_name()
206
-
207
-
208
206
  # 同步所有股票前十大流通股本
209
207
  def sync_stock_gdfx_free_top_10_one_day():
210
208
  logger.info('同步所有股票前十大流通股本')
@@ -213,16 +211,26 @@ def sync_stock_gdfx_free_top_10_one_day():
213
211
  east_money_stock_gdfx_free_top_10_api.sync_stock_gdfx_free_top_10_one_day(str_day)
214
212
 
215
213
 
214
+ # 更新同花顺概念信息
215
+ def ths_concept_info_clean():
216
+ # 更新空概念名称
217
+ ths_concept_choose_api.update_null_name()
218
+ # 更新概念包含个数
219
+ ths_concept_choose_api.update_concept_num()
220
+
221
+
216
222
  # 同步概念下所有股票组成 by 概念指数
217
- def update_concept_all_symbol_detail():
223
+ def update_one_concept_all_symbol_detail():
218
224
  logger.info('同步概念下所有股票组成')
219
- sync_concept_all_symbols_api.update_concept_all_symbol_detail()
225
+ sync_one_concept_all_symbols_api.update_concept_all_symbol_detail()
226
+ update_ths_concept_choose_null_reason()
220
227
 
221
228
 
222
229
  # 同步单只股票下所有概念 by 股票代码
223
- def sync_symbol_all_concept():
224
- sync_symbol_all_concepts_api.sync_symbol_all_concept(None)
230
+ def update_one_symbol_all_concepts():
225
231
  logger.info('同步单只股票所有概念组成')
232
+ sync_one_symbol_all_concepts_api.sync_symbol_all_concept(None)
233
+ update_ths_concept_choose_null_reason()
226
234
 
227
235
 
228
236
  # 同步同花顺新增概念指数通过web端接口爬取 8开头
@@ -255,7 +263,14 @@ def sync_new_concept_data_web():
255
263
  sync_new_concept_data_by_web()
256
264
  # 同步同花顺新增概念指数通过ak_share接口爬取
257
265
  sync_new_ths_concept_by_ak_api()
258
- logger.info("同步新概念web端数据任务完成", )
266
+ update_ths_concept_choose_null_reason()
267
+ logger.info("同步新概念web端数据任务完成")
268
+
269
+
270
+ # 更新空的入选概念
271
+ def update_ths_concept_choose_null_reason():
272
+ logger.info("更新空的入选概念")
273
+ ths_concept_update_common_api.update_ths_concept_choose_null_reason()
259
274
 
260
275
 
261
276
  # 清洗公司基本信息
@@ -273,15 +288,22 @@ def auto_ipo_buy():
273
288
  auto_ipo_buy_api.auto_ipo_buy()
274
289
 
275
290
 
291
+ # 同步持仓
292
+ def sync_position():
293
+ now_date = datetime.now()
294
+ str_day = now_date.strftime('%Y-%m-%d')
295
+ # 同步持仓
296
+ if trade_date_common_service_api.is_trade_day(str_day):
297
+ sync_position_api.sync_position()
298
+
299
+
276
300
  # 同步开盘啦当日精选指数行情数据
277
301
 
278
302
  def sync_kpl_best_his_quotes():
279
303
  now_date = datetime.now()
280
304
  str_day = now_date.strftime('%Y-%m-%d')
281
305
  if trade_date_common_service_api.is_trade_day(str_day):
282
- last_trade_day = trade_date_common_service_api.get_last_trade_day(str_day)
283
- # 当天不能获取历史数据
284
- sync_best_choose_his_index.sync_best_choose_his_index(last_trade_day)
306
+ sync_best_choose_his_index.sync_best_choose_his_index(str_day)
285
307
  logger.info('同步开盘啦当日精选指数行情数据任务完成')
286
308
 
287
309
 
@@ -307,8 +329,7 @@ blockingScheduler.add_job(col_data_move, 'cron', hour='15', minute='33')
307
329
 
308
330
  # 数据库健康检查
309
331
  blockingScheduler.add_job(db_status_check, 'interval', seconds=30, max_instances=4)
310
- # 更新空概念名称
311
- blockingScheduler.add_job(update_null_name, 'cron', hour='9,18', minute='01')
332
+
312
333
  # 同步大单数据
313
334
  blockingScheduler.add_job(sync_ths_big_deal, 'cron', hour='09', minute='30', max_instances=4)
314
335
 
@@ -323,11 +344,14 @@ blockingScheduler.add_job(sync_today_trade_k_line_info, 'cron', hour='08', minut
323
344
  # 同步十大流通股东信息
324
345
  blockingScheduler.add_job(sync_stock_gdfx_free_top_10_one_day, 'cron', hour='08,22', minute='23')
325
346
 
347
+ # 更新同花顺概念信息
348
+ blockingScheduler.add_job(ths_concept_info_clean, 'cron', hour='9,18', minute='01')
349
+
326
350
  # 更新概念指数下所有股票组成 by 概念代码
327
- blockingScheduler.add_job(update_concept_all_symbol_detail, 'cron', hour='08,18,12', minute='30')
351
+ blockingScheduler.add_job(update_one_concept_all_symbol_detail, 'cron', hour='08,18,12', minute='30')
328
352
 
329
353
  # 同步单只股票下所有概念 by 股票代码
330
- blockingScheduler.add_job(sync_symbol_all_concept, 'cron', hour='09,18,12', minute='15')
354
+ blockingScheduler.add_job(update_one_symbol_all_concepts, 'cron', hour='09,18,12', minute='15')
331
355
 
332
356
  # 开盘前同步同花顺新概念指数
333
357
  blockingScheduler.add_job(sync_new_concept_data_web, 'cron', hour='09', minute='05,10,15,20,25')
@@ -350,7 +374,10 @@ blockingScheduler.add_job(auto_ipo_buy, 'cron', hour='10', minute='40,50')
350
374
  blockingScheduler.add_job(update_best_choose_plate_relation, 'cron', hour='09,18', minute='25')
351
375
 
352
376
  # 更新开盘啦指数关系
353
- blockingScheduler.add_job(sync_kpl_best_his_quotes, 'cron', hour='16,22', minute='48')
377
+ blockingScheduler.add_job(sync_kpl_best_his_quotes, 'cron', hour='18,22', minute='25')
378
+
379
+ # 更新开盘啦指数关系
380
+ blockingScheduler.add_job(sync_position, 'cron', hour='00,08', minute='10')
354
381
 
355
382
  print('定时任务启动成功')
356
383
  blockingScheduler.start()
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-scheduler
3
- Version: 1.0.3.3
3
+ Version: 1.0.3.6
4
4
 
@@ -1,4 +1,13 @@
1
1
  mns_scheduler/__init__.py,sha256=ffZXFCLFdIwOsbxnw__u1MbQYh9yz7Bs8UMP6VF0X2M,161
2
+ mns_scheduler/backup/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
3
+ mns_scheduler/backup/app/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
4
+ mns_scheduler/backup/app/ths_new_concept_sync_app.py,sha256=yBr3RN24zCWgmRVCKgY6fwm0tdJA5XKliK3CSB-75tY,5148
5
+ mns_scheduler/backup/em/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
6
+ mns_scheduler/backup/em/em_new_concept_his_sync.py,sha256=Yqbuz9VE9433o0Z6BvDo5adhj3lK4vmN66XNQBIdC1k,4992
7
+ mns_scheduler/backup/em/em_new_concept_sync_common_api.py,sha256=KnNCf0KXy31GFwF1-wbbkfDM-H7-cEtcVoCwl4QmoVs,7083
8
+ mns_scheduler/backup/em/em_new_concept_sync_web.py,sha256=wVS0yLyPYzpcxfWAuUqmqbYkjw9wjpo48CvLSZFckzw,2334
9
+ mns_scheduler/backup/wen_cai/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
10
+ mns_scheduler/backup/wen_cai/wen_cai_concept_sync.py,sha256=boKtgOIXIsRny5n1keZm4luDFCiooudbPDsEFIGImIw,1747
2
11
  mns_scheduler/big_deal/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
3
12
  mns_scheduler/big_deal/ths_big_deal_sync.py,sha256=wezGJWFRnKYBaPP9PVXLqMbHENOXgvJtw3HSGCSlX5c,4555
4
13
  mns_scheduler/company_info/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
@@ -6,32 +15,22 @@ mns_scheduler/company_info/company_constant_data.py,sha256=LwyBWLoErAUPXss68ebVj
6
15
  mns_scheduler/company_info/company_info_sync_api.py,sha256=2sQk197p5qjq2DQlRpVbotSSIN87x43T-RGAtMiXQI4,20332
7
16
  mns_scheduler/concept/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
8
17
  mns_scheduler/concept/clean/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
9
- mns_scheduler/concept/clean/ths_effective_concept_clean_api.py,sha256=2CzG7zvA2mydjIvnckMWz8eR_tmdfOl8k-I0eov9fy4,2440
10
- mns_scheduler/concept/em/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
11
- mns_scheduler/concept/em/em_new_concept_his_sync.py,sha256=4Z0q4aTB6NMPpgtXu8wBThS3UJQvIFt5a50Icnlzdrc,4993
12
- mns_scheduler/concept/em/em_new_concept_sync_common_api.py,sha256=KnNCf0KXy31GFwF1-wbbkfDM-H7-cEtcVoCwl4QmoVs,7083
13
- mns_scheduler/concept/em/em_new_concept_sync_web.py,sha256=q2g2KEFvLFgaSu2G9UJOLR4M-f34tlTgBLNa4xuRB0g,2335
18
+ mns_scheduler/concept/clean/ths_concept_clean_api.py,sha256=SR5NRzh4N2r0ouXX3SRAONJyH44eorJdpaayekbNWCE,2459
14
19
  mns_scheduler/concept/ths/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
15
- mns_scheduler/concept/ths/app/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
16
- mns_scheduler/concept/ths/app/ths_new_concept_sync_app.py,sha256=yBr3RN24zCWgmRVCKgY6fwm0tdJA5XKliK3CSB-75tY,5148
17
20
  mns_scheduler/concept/ths/common/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
18
- mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py,sha256=hRN9bXdpWQRfqN4z7IkYrO3L5p6iQBdPm8NsmJt98PQ,10238
19
- mns_scheduler/concept/ths/common/ths_concept_update_common_api.py,sha256=ps8fuK3Xdm5ZwjpcYzfX5O4OxZH65qWFZnTSBBBcn6M,1662
20
- mns_scheduler/concept/ths/symbol/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
21
- mns_scheduler/concept/ths/symbol/sync_concept_all_symbols_api.py,sha256=ipRtiihpHlbxuces7YpHfvBtCDxgzrVXjcCKZiFBPaw,1928
22
- mns_scheduler/concept/ths/symbol/sync_symbol_all_concepts_api.py,sha256=HOho65wwoIlzn3COp9FkTalmfjXJD99KFAva6bhovv8,8757
23
- mns_scheduler/concept/ths/web/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
24
- mns_scheduler/concept/ths/web/sync_ths_concept_by_ak_api.py,sha256=asZLrVxv2acbheJaI1VMguk4Vu6dqdcHPiJgWbq3b74,5001
25
- mns_scheduler/concept/ths/web/sync_ths_new_concept_by_web_api.py,sha256=Yv3Gp6qwAnpg3qM_MguWNSH7NDpxQkvH_SLWcsJfYo8,3605
26
- mns_scheduler/concept/ths/wen_cai/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
27
- mns_scheduler/concept/ths/wen_cai/wen_cai_concept_sync.py,sha256=boKtgOIXIsRny5n1keZm4luDFCiooudbPDsEFIGImIw,1747
21
+ mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py,sha256=x3f6DHMyDCAVYtfmSlTPbeL_Z40ybf3sJHbmyIFTGXA,6542
22
+ mns_scheduler/concept/ths/common/ths_concept_update_common_api.py,sha256=2Sv5lPzTWuma-mtKkgvO0cHJj150U0SDWQGyCJIvCpg,4305
23
+ mns_scheduler/concept/ths/sync_new_index/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
24
+ mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_by_ak_api.py,sha256=asZLrVxv2acbheJaI1VMguk4Vu6dqdcHPiJgWbq3b74,5001
25
+ mns_scheduler/concept/ths/sync_new_index/sync_ths_new_concept_by_web_api.py,sha256=Yv3Gp6qwAnpg3qM_MguWNSH7NDpxQkvH_SLWcsJfYo8,3605
26
+ mns_scheduler/concept/ths/update_concept_info/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
27
+ mns_scheduler/concept/ths/update_concept_info/sync_one_concept_all_symbols_api.py,sha256=ipRtiihpHlbxuces7YpHfvBtCDxgzrVXjcCKZiFBPaw,1928
28
+ mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py,sha256=Hl5fJ9bVmy8hSawRM1xnBl5u-xbOI6LEa5ALCnQAJM8,8764
28
29
  mns_scheduler/db/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
29
30
  mns_scheduler/db/col_move_service.py,sha256=OyuHGXXWB8VPHkiA2JwXR4y961PLdZeNfgk_5R0f3pA,3952
30
31
  mns_scheduler/db/db_status.py,sha256=K1jtYIGZzDV6knpoJLLnXEhN3tyziJp_zY2gSfguHCA,747
31
32
  mns_scheduler/dt/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
32
33
  mns_scheduler/dt/stock_dt_pool_sync.py,sha256=5ivRUOnFtOapZniwTbujf1lVq3y4btm2Cmd5R6JJAVo,3466
33
- mns_scheduler/ipo/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
34
- mns_scheduler/ipo/auto_ipo_buy_api.py,sha256=7d0xCo5sWgzBKZYrpzLSHsk2Kb3Gg2GHKqUPLD7Jbu0,387
35
34
  mns_scheduler/k_line/__init__.py,sha256=ffZXFCLFdIwOsbxnw__u1MbQYh9yz7Bs8UMP6VF0X2M,161
36
35
  mns_scheduler/k_line/clean/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
37
36
  mns_scheduler/k_line/clean/k_line_info_clean_impl.py,sha256=3NPu-bkBw5ARW2yoMAmf_-au6vxQdSjzGlT-l4dqV4w,21833
@@ -41,7 +40,7 @@ mns_scheduler/k_line/sync/daily_week_month_line_sync.py,sha256=SNKkwGoyE1qzds1o-
41
40
  mns_scheduler/kpl/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
42
41
  mns_scheduler/kpl/selection/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
43
42
  mns_scheduler/kpl/selection/index/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
44
- mns_scheduler/kpl/selection/index/sync_best_choose_his_index.py,sha256=ySu2wdVeyb_gqK0WZOJhJD2ot_iciv8tPk8gv8wUG4o,4765
43
+ mns_scheduler/kpl/selection/index/sync_best_choose_his_index.py,sha256=7z9UPwh6_EnZMOQnpQQksdF_IwV1t7uRRYg1ZrpL3OA,4503
45
44
  mns_scheduler/kpl/selection/index/sync_best_choose_index.py,sha256=-34drqAMsx792DxR8P1A8DrGCM5yIVGsop3UzDNzsPw,8016
46
45
  mns_scheduler/kpl/selection/symbol/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
47
46
  mns_scheduler/kpl/selection/symbol/sync_best_choose_symbol.py,sha256=kUKs0SWCqekhvV0o5A1pDv0Nw4x6VTS-ij0AryzKe8w,4679
@@ -49,7 +48,11 @@ mns_scheduler/kpl/selection/total/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3Zi
49
48
  mns_scheduler/kpl/selection/total/sync_kpl_best_total_sync_api.py,sha256=WRK-Pu0-7ub9q1n5TK406_sAGQwOEUl2CZLu9suo70k,10461
50
49
  mns_scheduler/real_time/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
51
50
  mns_scheduler/real_time/realtime_quotes_now_create_db_index.py,sha256=qQCjcsG3WYgn3zemS45Ms0AHtbkCwlSVPPCntxVvK8Q,1066
52
- mns_scheduler/real_time/realtime_quotes_now_sync.py,sha256=YldmBI19eKNEL_yTZvBrWewL33B5G6a8cuEn7YQMV9w,8850
51
+ mns_scheduler/real_time/realtime_quotes_now_sync.py,sha256=nLVt8CCoqjnMgpY0eIwAXUXMSQ7VF9YtKn53JidV-YY,9149
52
+ mns_scheduler/trade/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
53
+ mns_scheduler/trade/auto_ipo_buy_api.py,sha256=QXNzFJGNGveVUcXBh0RRJb_HV7abbLYXRljezPJf9ZM,377
54
+ mns_scheduler/trade/auto_sell_service_api.py,sha256=HaauZeOsuLNBrowXT8IKaSgWLR2Huott6mg_AoLhpUY,4423
55
+ mns_scheduler/trade/sync_position_api.py,sha256=HmREr4H-PqlOdlNx3_SN6vRaRnhlaLCI6keSlYuXJHc,2739
53
56
  mns_scheduler/zb/__init__.py,sha256=Tyvi_iQlv3jz59EdH67Mycnt9CSixcWPQoJwu55bOq0,165
54
57
  mns_scheduler/zb/stock_zb_pool_sync.py,sha256=ky3CNDzpjB6C_frCf4YGNXdidnUo-uUUKsJpY62P4Bk,1936
55
58
  mns_scheduler/zt/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
@@ -59,9 +62,9 @@ mns_scheduler/zt/today_high_chg_pool_sync_api.py,sha256=G6FXMH7HnvhyMFoE-RszggkB
59
62
  mns_scheduler/zt/zt_five_boards_sync_api.py,sha256=HfjPHKD99fU9c37kSenEX2_qNvFAjQGgy8ERuacSxwk,10916
60
63
  mns_scheduler/zt/zt_pool_sync_api.py,sha256=tzSCnqAelV7MQBZ3KcpOQQHNYnjFnmvoDFcapBpU_NA,7534
61
64
  mns_scheduler/zz_task/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
62
- mns_scheduler/zz_task/data_sync_task.py,sha256=cSCjl8JqEfjmvpLJHshe5r-TURY3AF4bzjTMfJvbBUU,14500
65
+ mns_scheduler/zz_task/data_sync_task.py,sha256=cVwVhzLnr3LXn9qBGtwrnbbkRO0XBDoWB6GmONCwB3M,15337
63
66
  mns_scheduler/zz_task/sync_realtime_quotes_task.py,sha256=DN3bq2XCDZC-PHlbD2NTog48bR44EruIEc2QVGKg7Tk,932
64
- mns_scheduler-1.0.3.3.dist-info/METADATA,sha256=niUDOzjRf7RExX-wIS_QkyHKbsnOXp3VR7bLw7XTgBA,64
65
- mns_scheduler-1.0.3.3.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
66
- mns_scheduler-1.0.3.3.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
67
- mns_scheduler-1.0.3.3.dist-info/RECORD,,
67
+ mns_scheduler-1.0.3.6.dist-info/METADATA,sha256=oQq-vFt1ZmbonN3c75ZOQhtTeJ11kyu5k-T3O1iKotU,64
68
+ mns_scheduler-1.0.3.6.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
69
+ mns_scheduler-1.0.3.6.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
70
+ mns_scheduler-1.0.3.6.dist-info/RECORD,,
File without changes
File without changes