mns-scheduler 1.3.1.2__py3-none-any.whl → 1.3.1.7__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 (146) hide show
  1. mns_scheduler/baidu/__init__.py +1 -1
  2. mns_scheduler/baidu/baidu_yun_pan_handle_service.py +2 -2
  3. mns_scheduler/company_info/announce/__init__.py +1 -1
  4. mns_scheduler/company_info/announce/company_announce_sync_service.py +1 -1
  5. mns_scheduler/company_info/base/__init__.py +1 -1
  6. mns_scheduler/company_info/base/sync_company_hold_info_api.py +1 -1
  7. mns_scheduler/company_info/clean/__init__.py +1 -1
  8. mns_scheduler/company_info/clean/company_info_clean_api.py +1 -1
  9. mns_scheduler/company_info/constant/__init__.py +1 -1
  10. mns_scheduler/company_info/de_list_stock/__init__.py +1 -1
  11. mns_scheduler/company_info/de_list_stock/de_list_stock_service.py +1 -1
  12. mns_scheduler/company_info/em_stock_info/__init__.py +1 -1
  13. mns_scheduler/company_info/em_stock_info/sync_em_stock_info_sync.py +8 -3
  14. mns_scheduler/company_info/remark/__init__.py +1 -1
  15. mns_scheduler/company_info/remark/company_remark_info_sync.py +1 -1
  16. mns_scheduler/concept/clean/kpl_concept_clean_api.py +1 -1
  17. mns_scheduler/db/script/__init__.py +1 -1
  18. mns_scheduler/db/script/col_move_script.py +1 -1
  19. mns_scheduler/db/script/db_move/__init__.py +1 -1
  20. mns_scheduler/db/script/db_move/col_move_one_service.py +1 -1
  21. mns_scheduler/db/script/sync/__init__.py +1 -1
  22. mns_scheduler/db/script/sync/remote_data_sync_to_local.py +1 -1
  23. mns_scheduler/db/script/sync/sync_hui_ce_test_data.py +1 -1
  24. mns_scheduler/db/script/sync/sync_hui_ce_test_data_01.py +1 -1
  25. mns_scheduler/db/script/update/__init__.py +1 -1
  26. mns_scheduler/db/script/update/update_col_field.py +1 -1
  27. mns_scheduler/debt/__init__.py +1 -1
  28. mns_scheduler/debt/kzz_bond_info_sync.py +1 -1
  29. mns_scheduler/extraIncome/__init__.py +1 -1
  30. mns_scheduler/extraIncome/a_stock/__init__.py +1 -1
  31. mns_scheduler/extraIncome/a_stock/one_minute/__init__.py +1 -1
  32. mns_scheduler/extraIncome/a_stock/one_minute/common/__init__.py +1 -1
  33. mns_scheduler/extraIncome/a_stock/one_minute/common/symbol_handle_util.py +1 -1
  34. mns_scheduler/extraIncome/a_stock/one_minute/etf/__init__.py +1 -1
  35. mns_scheduler/extraIncome/a_stock/one_minute/etf/etf_one_minute_sync_task.py +1 -1
  36. mns_scheduler/extraIncome/a_stock/one_minute/index/__init__.py +1 -1
  37. mns_scheduler/extraIncome/a_stock/one_minute/index/main_index_sync_task.py +1 -1
  38. mns_scheduler/extraIncome/a_stock/one_minute/kzz/__init__.py +1 -1
  39. mns_scheduler/extraIncome/a_stock/one_minute/kzz/kzz_one_minute_sync_task.py +1 -1
  40. mns_scheduler/extraIncome/a_stock/one_minute/one_minute_sync_task.py +1 -1
  41. mns_scheduler/extraIncome/a_stock/one_minute/stock/__init__.py +1 -1
  42. mns_scheduler/extraIncome/a_stock/one_minute/stock/stock_one_minute_sync_task.py +1 -1
  43. mns_scheduler/extraIncome/a_stock/one_minute/upload/__init__.py +1 -1
  44. mns_scheduler/extraIncome/a_stock/one_minute/upload/etf_upload_to_baidu_task.py +95 -0
  45. mns_scheduler/extraIncome/a_stock/one_minute/upload/index_upload_to_baidu_task.py +87 -0
  46. mns_scheduler/extraIncome/a_stock/one_minute/upload/kzz_upload_to_baidu_task.py +95 -0
  47. mns_scheduler/extraIncome/a_stock/one_minute/upload/{upload_to_baidu_task.py → stock_upload_to_baidu_task.py} +4 -2
  48. mns_scheduler/extraIncome/hk/__init__.py +1 -1
  49. mns_scheduler/extraIncome/hk/hk_stock_qfq_daily_k_line.py +1 -1
  50. mns_scheduler/extraIncome/us/__init__.py +1 -1
  51. mns_scheduler/extraIncome/us/daily/__init__.py +1 -1
  52. mns_scheduler/extraIncome/us/daily/us_stock_qfq_daily_k_line.py +1 -1
  53. mns_scheduler/extraIncome/us/one_minute/__init__.py +1 -1
  54. mns_scheduler/extraIncome/us/one_minute/api/__init__.py +0 -7
  55. mns_scheduler/extraIncome/us/one_minute/api/alpha_vantage_api.py +2 -2
  56. mns_scheduler/extraIncome/us/one_minute/api/em_us_one_minute_api.py +139 -0
  57. mns_scheduler/extraIncome/us/one_minute/api/stock_etf_info_api.py +68 -0
  58. mns_scheduler/extraIncome/us/one_minute/api/y_finance_api.py +25 -9
  59. mns_scheduler/extraIncome/us/one_minute/etf/__init__.py +1 -1
  60. mns_scheduler/extraIncome/us/one_minute/stock/__init__.py +1 -1
  61. mns_scheduler/extraIncome/us/one_minute/stock/down_load/__init__.py +1 -1
  62. mns_scheduler/extraIncome/us/one_minute/stock/down_load/etf/__init__.py +5 -1
  63. mns_scheduler/extraIncome/us/one_minute/stock/down_load/etf/down_load_ETF_his_2024.py +1 -1
  64. mns_scheduler/extraIncome/us/one_minute/stock/down_load/etf/handle_down_load_fail_ETF.py +1 -1
  65. mns_scheduler/extraIncome/us/one_minute/stock/down_load/fail/handle_fail_data.py +161 -0
  66. mns_scheduler/extraIncome/us/one_minute/stock/down_load/rename/__init__.py +7 -0
  67. mns_scheduler/extraIncome/us/one_minute/stock/down_load/rename/rename_stock.py +18 -0
  68. mns_scheduler/extraIncome/us/one_minute/stock/down_load/stock/__init__.py +7 -0
  69. mns_scheduler/extraIncome/us/one_minute/stock/down_load/stock/down_load_stock_his_01.py +203 -0
  70. mns_scheduler/extraIncome/us/one_minute/stock/down_load/{down_load_stock_his_2024_02.py → stock/down_load_stock_his_02.py} +65 -16
  71. mns_scheduler/extraIncome/us/one_minute/stock/down_load/{down_load_stock_his_2024_01.py → stock/down_load_stock_his_2025.py} +10 -11
  72. mns_scheduler/extraIncome/us/one_minute/stock/now/__init__.py +7 -0
  73. mns_scheduler/extraIncome/us/one_minute/stock/now/us_etf_one_minute_sync.py +52 -0
  74. mns_scheduler/extraIncome/us/one_minute/stock/now/us_stock_one_minute_sync.py +141 -0
  75. mns_scheduler/finance/__init__.py +1 -1
  76. mns_scheduler/finance/em_financial_asset_liability_sync_service_api.py +1 -1
  77. mns_scheduler/finance/em_financial_profit_sync_service_api.py +1 -1
  78. mns_scheduler/finance/finance_common_api.py +1 -1
  79. mns_scheduler/finance/sync_financial_report_service_api.py +1 -1
  80. mns_scheduler/hk/__init__.py +1 -1
  81. mns_scheduler/hk/hk_company_info_sync_service_api.py +1 -1
  82. mns_scheduler/hk/hk_industry_info_sync_service_api.py +1 -1
  83. mns_scheduler/industry/__init__.py +1 -1
  84. mns_scheduler/industry/ths/__init__.py +1 -1
  85. mns_scheduler/industry/ths/ths_industry_index_service.py +1 -1
  86. mns_scheduler/industry/ths/ths_industry_sync_service.py +1 -1
  87. mns_scheduler/irm/__init__.py +1 -1
  88. mns_scheduler/irm/api/__init__.py +1 -1
  89. mns_scheduler/irm/api/sh_stock_sns_sse_info_api.py +1 -1
  90. mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py +1 -1
  91. mns_scheduler/irm/stock_irm_cninfo_service.py +1 -1
  92. mns_scheduler/k_line/clean/daily/__init__.py +1 -1
  93. mns_scheduler/k_line/clean/daily/daily_k_line_clean_common_service.py +1 -1
  94. mns_scheduler/k_line/clean/daily/daily_k_line_service.py +1 -1
  95. mns_scheduler/k_line/clean/week_month/__init__.py +1 -1
  96. mns_scheduler/k_line/clean/week_month/normal_week_month_k_line_service.py +1 -1
  97. mns_scheduler/k_line/clean/week_month/sub_new_week_month_k_line_service.py +1 -1
  98. mns_scheduler/k_line/hot_stocks/__init__.py +1 -1
  99. mns_scheduler/k_line/hot_stocks/recent_hot_stocks_clean_service.py +1 -1
  100. mns_scheduler/k_line/test/__init__.py +1 -1
  101. mns_scheduler/k_line/test/k_line_info_clean_his_data.py +1 -1
  102. mns_scheduler/k_line/year_quarter/__init__.py +1 -1
  103. mns_scheduler/k_line/year_quarter/year_quarter_line_sync.py +1 -1
  104. mns_scheduler/lhb/__init__.py +1 -1
  105. mns_scheduler/lhb/stock_lhb_sync_service.py +1 -1
  106. mns_scheduler/open/__init__.py +1 -1
  107. mns_scheduler/open/sync_one_day_open_data_to_db_service.py +1 -1
  108. mns_scheduler/risk/__init__.py +1 -1
  109. mns_scheduler/risk/financial/annual_report_audit_check_api.py +1 -1
  110. mns_scheduler/risk/financial/profit_income_check_api.py +1 -1
  111. mns_scheduler/risk/financial_report_risk_check_api.py +1 -1
  112. mns_scheduler/risk/major_violations/register_and_investigate_stock_sync_api.py +1 -1
  113. mns_scheduler/risk/self/wei_pan_stock_api.py +1 -1
  114. mns_scheduler/risk/test/__init__.py +1 -1
  115. mns_scheduler/risk/test/fix_blask_list.py +1 -1
  116. mns_scheduler/risk/transactions/transactions_check_api.py +1 -1
  117. mns_scheduler/self_choose/__init__.py +1 -1
  118. mns_scheduler/self_choose/ths_self_choose_service.py +1 -1
  119. mns_scheduler/trade/auto_login/trader_auto_service.py +1 -1
  120. mns_scheduler/trade/auto_sell_service_api.py +2 -2
  121. mns_scheduler/trade/balance/__init__.py +1 -1
  122. mns_scheduler/trade/balance/ths_account_balance_service.py +1 -1
  123. mns_scheduler/trade/sync_position_api.py +1 -1
  124. mns_scheduler/trade/task/trader_task_service.py +1 -1
  125. mns_scheduler/trade/tfp/__init__.py +1 -1
  126. mns_scheduler/trade/tfp/stock_tfp_info_sync.py +1 -1
  127. mns_scheduler/us/__init__.py +1 -1
  128. mns_scheduler/us/baidu_yun_pan_handle_service.py +1 -1
  129. mns_scheduler/us/us_company_info_sync_service_api.py +1 -1
  130. mns_scheduler/zt/script/__init__.py +1 -1
  131. mns_scheduler/zt/script/fix_error_deal_day.py +1 -1
  132. mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py +1 -1
  133. mns_scheduler/zt/script/sync_high_chg_pool_his_data.py +1 -1
  134. mns_scheduler/zt/script/sync_now_higt_chg_zt.py +1 -1
  135. mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py +9 -7
  136. mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py +1 -1
  137. mns_scheduler/zz_task/data_sync_task.py +13 -3
  138. {mns_scheduler-1.3.1.2.dist-info → mns_scheduler-1.3.1.7.dist-info}/METADATA +1 -1
  139. mns_scheduler-1.3.1.7.dist-info/RECORD +214 -0
  140. mns_scheduler/extraIncome/us/one_minute/stock/his/us_stock_one_minute_his.py +0 -199
  141. mns_scheduler/extraIncome/us/one_minute/stock/his/us_stock_one_minute_his_2024.py +0 -212
  142. mns_scheduler/extraIncome/us/one_minute/stock/us_stock_one_minute_task.py +0 -26
  143. mns_scheduler-1.3.1.2.dist-info/RECORD +0 -204
  144. /mns_scheduler/extraIncome/us/one_minute/stock/{his → down_load/fail}/__init__.py +0 -0
  145. {mns_scheduler-1.3.1.2.dist-info → mns_scheduler-1.3.1.7.dist-info}/WHEEL +0 -0
  146. {mns_scheduler-1.3.1.2.dist-info → mns_scheduler-1.3.1.7.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,95 @@
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
+ import sys
9
+ import os
10
+
11
+ file_path = os.path.abspath(__file__)
12
+ end = file_path.index('mns') + 17
13
+ project_path = file_path[0:end]
14
+ sys.path.append(project_path)
15
+ from mns_common.db.MongodbUtil import MongodbUtil
16
+ from loguru import logger
17
+ import mns_scheduler.baidu.baidu_yun_pan_handle_service as baidu_yun_pan_handle_service
18
+ from mns_common.db.v2.MongodbUtilV2 import MongodbUtilV2
19
+ import mns_common.utils.data_frame_util as data_frame_util
20
+ from datetime import datetime
21
+ import mns_common.constant.extra_income_db_name as extra_income_db_name
22
+ import mns_common.component.em.em_stock_info_api as em_stock_info_api
23
+
24
+ mongodb_util = MongodbUtil('27017')
25
+ mongodbUtilV2_27019 = MongodbUtilV2('27019', extra_income_db_name.EXTRA_INCOME)
26
+
27
+
28
+ def upload_kzz_to_baidu():
29
+ a_stock_path = '/A股/可转债/1分钟'
30
+
31
+ now_date_time = datetime.now()
32
+ now_year = now_date_time.year
33
+ month = now_date_time.month
34
+ a_stock_path = a_stock_path + str(now_year) + '/' + str(month)
35
+ # 创建路径
36
+ baidu_yun_pan_handle_service.mkdir_baidu_new_folder(a_stock_path)
37
+ em_a_kzz_info_df = em_stock_info_api.get_kzz_info()
38
+
39
+ em_a_kzz_info_df = classify_symbol(em_a_kzz_info_df)
40
+
41
+ em_a_kzz_info_df['symbol'] = em_a_kzz_info_df.apply(
42
+ lambda row: row['symbol'] + '.SZ' if row['classification'] in ['S', 'C']
43
+ else row['symbol'] + '.BJ' if row['classification'] in ['X']
44
+ else row['symbol'] + '.SH',
45
+ axis=1
46
+ )
47
+
48
+ file_folder_df = baidu_yun_pan_handle_service.get_file_folder(a_stock_path)
49
+ if data_frame_util.is_not_empty(file_folder_df):
50
+ # 去除文件名中的 .csv 后缀
51
+ file_folder_df['name'] = file_folder_df['name'].str.replace(r'\.csv$', '', regex=True)
52
+ em_a_kzz_info_df = em_a_kzz_info_df.loc[~(em_a_kzz_info_df['symbol'].isin(file_folder_df['name']))]
53
+ fail_list = []
54
+ for stock_one in em_a_kzz_info_df.itertuples():
55
+ symbol = stock_one.symbol
56
+ name = stock_one.name
57
+ try:
58
+
59
+ col_name = extra_income_db_name.ONE_MINUTE_K_LINE_BFQ_KZZ + '_' + str(now_year)
60
+
61
+ if month < 10:
62
+ month_str = '0' + str(month)
63
+ else:
64
+ month_str = str(month)
65
+ begin_time = str(now_year) + '-' + month_str + '-01 09:00:00'
66
+ query = {'symbol': symbol, 'time': {"$gte": begin_time}}
67
+ one_minute_k_line_bfq_df = mongodbUtilV2_27019.find_query_data(col_name, query)
68
+ if data_frame_util.is_not_empty(one_minute_k_line_bfq_df):
69
+ one_minute_k_line_bfq_df = one_minute_k_line_bfq_df.sort_values(by=['time'], ascending=True)
70
+ del one_minute_k_line_bfq_df['_id']
71
+ del one_minute_k_line_bfq_df['symbol']
72
+ result = baidu_yun_pan_handle_service.upload_to_baidu(symbol, a_stock_path, one_minute_k_line_bfq_df)
73
+ if result != 0:
74
+ fail_list.append(symbol)
75
+ except BaseException as e:
76
+ fail_list.append(symbol)
77
+ logger.error("上传数据异常:{}", e)
78
+
79
+
80
+ def classify_symbol(kzz_real_time_quotes):
81
+ kzz_real_time_quotes['classification'] = kzz_real_time_quotes['market'].apply(
82
+ lambda market: classify_symbol_one(market))
83
+ return kzz_real_time_quotes
84
+
85
+
86
+ # 单个股票分类
87
+ def classify_symbol_one(market):
88
+ if market == 0:
89
+ return 'S'
90
+ else:
91
+ return 'H'
92
+
93
+
94
+ if __name__ == '__main__':
95
+ upload_kzz_to_baidu()
@@ -2,7 +2,7 @@ import sys
2
2
  import os
3
3
 
4
4
  file_path = os.path.abspath(__file__)
5
- end = file_path.index('mns') + 16
5
+ end = file_path.index('mns') + 17
6
6
  project_path = file_path[0:end]
7
7
  sys.path.append(project_path)
8
8
  from mns_common.db.MongodbUtil import MongodbUtil
@@ -45,6 +45,8 @@ def upload_stock_to_baidu():
45
45
  em_a_stock_info_df = em_a_stock_info_df.loc[~(em_a_stock_info_df['symbol'].isin(file_folder_df['name']))]
46
46
  fail_list = []
47
47
  for stock_one in em_a_stock_info_df.itertuples():
48
+ symbol = stock_one.symbol
49
+ name = stock_one.name
48
50
  try:
49
51
  classification = stock_one.classification
50
52
  if classification == 'X':
@@ -59,7 +61,7 @@ def upload_stock_to_baidu():
59
61
  elif classification == 'C':
60
62
  col_name = extra_income_db_name.ONE_MINUTE_K_LINE_BFQ_C
61
63
  col_name = col_name + '_' + str(now_year)
62
- symbol = stock_one.symbol
64
+
63
65
  if month < 10:
64
66
  month_str = '0' + str(month)
65
67
  else:
@@ -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,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
 
@@ -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,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,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
 
@@ -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)
@@ -1,7 +0,0 @@
1
- import sys
2
- import os
3
-
4
- file_path = os.path.abspath(__file__)
5
- end = file_path.index('mns') + 16
6
- project_path = file_path[0:end]
7
- sys.path.append(project_path)
@@ -2,7 +2,7 @@ import sys
2
2
  import os
3
3
 
4
4
  file_path = os.path.abspath(__file__)
5
- end = file_path.index('mns') + 16
5
+ end = file_path.index('mns') + 17
6
6
  project_path = file_path[0:end]
7
7
  sys.path.append(project_path)
8
8
  from alpha_vantage.timeseries import TimeSeries
@@ -31,4 +31,4 @@ def sync_one_minute_data(symbol, month):
31
31
 
32
32
 
33
33
  if __name__ == '__main__':
34
- sync_one_minute_data('IBM', '2000-01')
34
+ sync_one_minute_data('TSLA', '2020-08')
@@ -0,0 +1,139 @@
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
+ import requests
11
+
12
+
13
+ def stock_hk_hist_min_em(
14
+ symbol: str = "01611",
15
+ period: str = "1",
16
+ adjust: str = "",
17
+ start_date: str = "1979-09-01 09:32:00",
18
+ end_date: str = "2222-01-01 09:32:00",
19
+ ) -> pd.DataFrame:
20
+ """
21
+ 东方财富网-行情-港股-每日分时行情
22
+ https://quote.eastmoney.com/hk/00948.html
23
+ :param symbol: 股票代码
24
+ :type symbol: str
25
+ :param period: choice of {'1', '5', '15', '30', '60'}
26
+ :type period: str
27
+ :param adjust: choice of {'', 'qfq', 'hfq'}
28
+ :type adjust: str
29
+ :param start_date: 开始日期
30
+ :type start_date: str
31
+ :param end_date: 结束日期
32
+ :type end_date: str
33
+ :return: 每日分时行情
34
+ :rtype: pandas.DataFrame
35
+ """
36
+ adjust_map = {
37
+ "": "0",
38
+ "qfq": "1",
39
+ "hfq": "2",
40
+ }
41
+ if period == "1":
42
+ url = "https://push2his.eastmoney.com/api/qt/stock/trends2/get"
43
+ params = {
44
+ "fields1": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",
45
+ "fields2": "f51,f52,f53,f54,f55,f56,f57,f58",
46
+ "ut": "fa5fd1943c7b386f172d6893dbfba10b",
47
+ "iscr": "0",
48
+ "ndays": "5",
49
+ "secid": f"116.{symbol}",
50
+ "_": "1623766962675",
51
+ }
52
+ r = requests.get(url, timeout=15, params=params)
53
+ data_json = r.json()
54
+ temp_df = pd.DataFrame(
55
+ [item.split(",") for item in data_json["data"]["trends"]]
56
+ )
57
+ temp_df.columns = [
58
+ "时间",
59
+ "开盘",
60
+ "收盘",
61
+ "最高",
62
+ "最低",
63
+ "成交量",
64
+ "成交额",
65
+ "最新价",
66
+ ]
67
+ temp_df.index = pd.to_datetime(temp_df["时间"])
68
+ temp_df = temp_df[start_date:end_date]
69
+ temp_df.reset_index(drop=True, inplace=True)
70
+ temp_df["开盘"] = pd.to_numeric(temp_df["开盘"], errors="coerce")
71
+ temp_df["收盘"] = pd.to_numeric(temp_df["收盘"], errors="coerce")
72
+ temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
73
+ temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
74
+ temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
75
+ temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
76
+ temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
77
+ temp_df["时间"] = pd.to_datetime(temp_df["时间"]).astype(str)
78
+ return temp_df
79
+ else:
80
+ url = "https://push2his.eastmoney.com/api/qt/stock/kline/get"
81
+ params = {
82
+ "fields1": "f1,f2,f3,f4,f5,f6",
83
+ "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",
84
+ "ut": "bd1d9ddb04089700cf9c27f6f7426281",
85
+ "klt": period,
86
+ "fqt": adjust_map[adjust],
87
+ "secid": f"116.{symbol}",
88
+ "beg": "0",
89
+ "end": "20500000",
90
+ "_": "1630930917857",
91
+ }
92
+ r = requests.get(url, timeout=15, params=params)
93
+ data_json = r.json()
94
+ temp_df = pd.DataFrame(
95
+ [item.split(",") for item in data_json["data"]["klines"]]
96
+ )
97
+ temp_df.columns = [
98
+ "时间",
99
+ "开盘",
100
+ "收盘",
101
+ "最高",
102
+ "最低",
103
+ "成交量",
104
+ "成交额",
105
+ "振幅",
106
+ "涨跌幅",
107
+ "涨跌额",
108
+ "换手率",
109
+ ]
110
+ temp_df.index = pd.to_datetime(temp_df["时间"])
111
+ temp_df = temp_df[start_date:end_date]
112
+ temp_df.reset_index(drop=True, inplace=True)
113
+ temp_df["开盘"] = pd.to_numeric(temp_df["开盘"], errors="coerce")
114
+ temp_df["收盘"] = pd.to_numeric(temp_df["收盘"], errors="coerce")
115
+ temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
116
+ temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
117
+ temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
118
+ temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
119
+ temp_df["振幅"] = pd.to_numeric(temp_df["振幅"], errors="coerce")
120
+ temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
121
+ temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce")
122
+ temp_df["换手率"] = pd.to_numeric(temp_df["换手率"], errors="coerce")
123
+ temp_df["时间"] = pd.to_datetime(temp_df["时间"]).astype(str)
124
+ temp_df = temp_df[
125
+ [
126
+ "时间",
127
+ "开盘",
128
+ "收盘",
129
+ "最高",
130
+ "最低",
131
+ "涨跌幅",
132
+ "涨跌额",
133
+ "成交量",
134
+ "成交额",
135
+ "振幅",
136
+ "换手率",
137
+ ]
138
+ ]
139
+ return temp_df
@@ -0,0 +1,68 @@
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 csv
10
+ import requests
11
+ import pandas as pd
12
+ import mns_common.component.em.em_stock_info_api as em_stock_info_api
13
+ from functools import lru_cache
14
+
15
+
16
+ @lru_cache()
17
+ def get_us_stock_info():
18
+ em_us_stock_info_df = em_stock_info_api.get_us_stock_info()
19
+ em_us_stock_info_df['symbol'] = em_us_stock_info_df['symbol'].str.replace('_', '-')
20
+ em_us_stock_info_df = em_us_stock_info_df.loc[em_us_stock_info_df['total_mv'] != 0]
21
+
22
+ alpha_us_stock_info = get_us_stock_list()
23
+ alpha_us_stock_info = alpha_us_stock_info.loc[alpha_us_stock_info['assetType'] == 'Stock']
24
+
25
+ em_us_stock_info_df = em_us_stock_info_df.loc[
26
+ em_us_stock_info_df['symbol'].isin(alpha_us_stock_info['symbol'])]
27
+ em_us_stock_info_df = em_us_stock_info_df.sort_values(by=['flow_mv'], ascending=False)
28
+ return em_us_stock_info_df
29
+
30
+
31
+ @lru_cache()
32
+ def get_us_etf_info():
33
+ em_us_stock_info_df = em_stock_info_api.get_us_stock_info()
34
+ em_us_stock_info_df['symbol'] = em_us_stock_info_df['symbol'].str.replace('_', '-')
35
+ em_us_stock_info_df = em_us_stock_info_df.loc[em_us_stock_info_df['total_mv'] != 0]
36
+
37
+ alpha_us_stock_info = get_us_stock_list()
38
+ alpha_us_stock_info = alpha_us_stock_info.loc[alpha_us_stock_info['assetType'] == 'ETF']
39
+
40
+ em_us_stock_info_df = em_us_stock_info_df.loc[
41
+ em_us_stock_info_df['symbol'].isin(alpha_us_stock_info['symbol'])]
42
+ em_us_stock_info_df = em_us_stock_info_df.sort_values(by=['flow_mv'], ascending=False)
43
+ return em_us_stock_info_df
44
+
45
+
46
+ @lru_cache()
47
+ def get_us_stock_list():
48
+ # replace the "demo" apikey below with your own key from https://www.alphavantage.co/support/#api-key
49
+ CSV_URL = 'https://www.alphavantage.co/query?function=LISTING_STATUS&apikey=demo'
50
+ with requests.Session() as s:
51
+ download = s.get(CSV_URL)
52
+ decoded_content = download.content.decode('utf-8')
53
+ cr = csv.reader(decoded_content.splitlines(), delimiter=',')
54
+ my_list = list(cr)
55
+ # 提取列名(第1行)
56
+ columns = my_list[0]
57
+ # 提取数据(第2行及以后)
58
+ values = my_list[1:]
59
+
60
+ # 转换为 DataFrame
61
+ df = pd.DataFrame(values, columns=columns)
62
+ df = df.rename(columns={'ipoDate': 'list_date'})
63
+ return df
64
+
65
+
66
+ if __name__ == '__main__':
67
+ get_us_stock_info()
68
+ get_us_etf_info()
@@ -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
 
@@ -14,10 +14,28 @@ os.environ['HTTPS_PROXY'] = proxy
14
14
  import yfinance as yf
15
15
 
16
16
 
17
+ #
18
+ # “history”函数包含许多参数,了解它们对于正确解释您收到的数据非常重要:
19
+ #
20
+ # period:如前所述,特别有用的是值“max”。以下是有效值:1d、5d、1mo、3mo、6mo、1y、2y、5y、10y、ytd、max。
21
+ # 间隔:定义每个条形的大小。条形越小,限制越严格,只能检索 7 天的 1 分钟数据。以下是有效值:1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo
22
+ # start:开始日期。服务器需要格式为 YYYY-MM-DD 的字符串。
23
+ # end:结束日期。服务器需要格式为 YYYY-MM-DD 的字符串。
24
+ # repost:定义是否包含与正常交易时间不对应的数据。默认值为 False
25
+ # auto_adjust:是否根据股票分割和股息支付调整价格。默认值是true。
26
+ # 雅虎财经获取基本数据方法
17
27
  def get_us_one_minute(symbol, start_time, end_time):
28
+ # start_time = '2025-05-01'
29
+ # end_time = '2025-05-09'
30
+ start_time = '2025-05-09'
31
+ end_time = '2025-05-11'
18
32
  yf_ticker = yf.Ticker(symbol)
19
- df = yf_ticker.history(period='5d', interval='1m',
20
- start=start_time, end=end_time, prepost=True)
33
+ df = yf_ticker.history(period='5d',
34
+ interval='1m',
35
+ start=start_time,
36
+ end=end_time,
37
+ prepost=False,
38
+ auto_adjust=False)
21
39
  df = df[[
22
40
  "Open",
23
41
  "High",
@@ -35,13 +53,11 @@ def get_us_one_minute(symbol, start_time, end_time):
35
53
  "time",
36
54
  ]
37
55
  df['time'] = df['time'].dt.strftime('%Y-%m-%d %H:%M:%S')
38
- df['str_day'] = df['time'].str.slice(0, 10)
39
- df['minute'] = df['time'].str.slice(11, 19)
56
+ # df['str_day'] = df['time'].str.slice(0, 10)
57
+ # df['minute'] = df['time'].str.slice(11, 19)
40
58
  return df
41
- # df_test = df.loc[df['str_day'] == '2025-04-30']
42
- # print(sum(df_test['volume']))
43
- # sum(df.loc[(df['str_day'] == '2025-04-30') & (df['time'] > '16:00:00')]['volume'])
44
59
 
45
60
 
46
61
  if __name__ == '__main__':
47
- get_us_one_minute('QQQ', '2025-05-01', '2025-05-07')
62
+ df=get_us_one_minute('B', '2025-05-01', '2025-05-10')
63
+ print(df)
@@ -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,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,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,6 +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 akshare as ak
9
+
10
+ us_stock_current_df = ak.stock_us_spot()
11
+ print(us_stock_current_df)
@@ -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.component.em.em_stock_info_api as em_stock_info_api
@@ -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