mns-common 1.3.2.1__tar.gz → 1.3.2.3__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-common might be problematic. Click here for more details.
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/PKG-INFO +1 -1
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/em/east_money_etf_api.py +7 -3
- mns_common-1.3.2.3/mns_common/api/k_line/__init__.py +11 -0
- mns_common-1.3.2.3/mns_common/api/k_line/stock_k_line_data_api.py +106 -0
- mns_common-1.3.2.3/mns_common/api/k_line/stock_minute_data_api.py +145 -0
- mns_common-1.3.2.3/mns_common/api/qmt/qmt_minunte_tick_data.py +82 -0
- mns_common-1.3.2.3/mns_common/component/tfp/__init__.py +7 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/constant/db_name_constant.py +21 -0
- mns_common-1.3.2.3/mns_common/db/v2/MongodbUtilV2.py +320 -0
- mns_common-1.3.2.3/mns_common/db/v2/__init__.py +7 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common.egg-info/PKG-INFO +1 -1
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common.egg-info/SOURCES.txt +7 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/setup.py +1 -1
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/README.md +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/akshare/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/akshare/k_line_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/akshare/stock_bid_ask_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/akshare/stock_dt_pool.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/akshare/stock_zb_pool.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/akshare/stock_zt_pool_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/akshare/yjyg_sync_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/em/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/em/east_money_debt_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/em/east_money_stock_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/em/east_money_stock_api_develop.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/em/east_money_stock_gdfx_free_top_10_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/em/east_money_stock_hk_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/em/east_money_stock_v2_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/em/em_concept_index_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/em/self_choose/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/hk/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/hk/ths_hk_company_info_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/kpl/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/kpl/common/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/kpl/common/kpl_common_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/kpl/common/kpl_common_field_constant.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/kpl/concept/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/kpl/concept/kpl_concept_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/kpl/constant/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/kpl/constant/kpl_constant.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/kpl/industry/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/kpl/industry/kpl_industry_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/kpl/selection/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/kpl/selection/kpl_selection_plate_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/kpl/symbol/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/kpl/symbol/kpl_real_time_quotes_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/kpl/symbol/kpl_symbol_common_field_constant.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/kpl/symbol/symbol_his_quotes_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/msg/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/msg/push_msg_api.py +0 -0
- {mns_common-1.3.2.1/mns_common/api/ths/company → mns_common-1.3.2.3/mns_common/api/qmt}/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/big_deal/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/big_deal/ths_big_deal_api.py +0 -0
- {mns_common-1.3.2.1/mns_common/api/us → mns_common-1.3.2.3/mns_common/api/ths/company}/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/company/ths_company_announce_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/company/ths_company_info_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/concept/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/concept/app/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/concept/app/ths_concept_detail_app.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/concept/app/ths_concept_index_app.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/concept/web/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/concept/web/ths_common_js_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/concept/web/ths_company_info_web.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/concept/web/ths_concept_detail_web.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/concept/web/ths_concept_index_web.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/self_choose/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/self_choose/ths_self_choose_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/wen_cai/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/wen_cai/ths_wen_cai_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/zt/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/zt/ths_stock_zt_pool_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/ths/zt/ths_stock_zt_pool_v2_api.py +0 -0
- {mns_common-1.3.2.1/mns_common/component/classify → mns_common-1.3.2.3/mns_common/api/us}/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/api/us/ths_us_company_info_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/cache/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/cache/cache_service.py +0 -0
- {mns_common-1.3.2.1/mns_common/component/cookie → mns_common-1.3.2.3/mns_common/component/classify}/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/classify/symbol_classify_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/classify/symbol_classify_param.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/common_service_fun_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/company/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/company/company_common_service_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/company/company_common_service_new_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/concept/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/concept/kpl_concept_common_service_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/concept/ths_concept_common_service_api.py +0 -0
- {mns_common-1.3.2.1/mns_common/component/deal → mns_common-1.3.2.3/mns_common/component/cookie}/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/cookie/cookie_info_service.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/data/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/data/data_init_api.py +0 -0
- {mns_common-1.3.2.1/mns_common/component/hk → mns_common-1.3.2.3/mns_common/component/deal}/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/deal/deal_service_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/deal/terminal_enum.py +0 -0
- {mns_common-1.3.2.1/mns_common/component/price → mns_common-1.3.2.3/mns_common/component/hk}/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/hk/company_hk_service_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/industry/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/industry/ths_industry_index_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/k_line/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/k_line/clean/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/k_line/clean/k_line_param.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/k_line/clean/sh_small_normal_zt_k_line_check_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/k_line/common/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/k_line/common/k_line_common_service_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/k_line/patterns/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/k_line/patterns/k_line_patterns_service_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/k_line/patterns/pattern_Enum.py +0 -0
- {mns_common-1.3.2.1/mns_common/component/qmt → mns_common-1.3.2.3/mns_common/component/price}/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/price/trade_price_service_api.py +0 -0
- {mns_common-1.3.2.1/mns_common/component/redis_msg → mns_common-1.3.2.3/mns_common/component/qmt}/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/qmt/qmt_buy_service.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/real_time/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/real_time/real_time_common_service_api.py +0 -0
- {mns_common-1.3.2.1/mns_common/component/self_choose → mns_common-1.3.2.3/mns_common/component/redis_msg}/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/redis_msg/redis_msg_publish_service.py +0 -0
- {mns_common-1.3.2.1/mns_common/component/tfp → mns_common-1.3.2.3/mns_common/component/self_choose}/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/self_choose/black_list_service_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/self_choose/self_choose_service_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/tfp/stock_tfp_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/trade_date/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/trade_date/trade_date_common_service_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/zt/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/component/zt/zt_common_service_api.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/constant/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/constant/black_list_classify_enum.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/constant/price_enum.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/constant/redis_msg_constant.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/constant/self_choose_constant.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/db/MongodbUtil.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/db/MongodbUtilLocal.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/db/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/utils/__init__.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/utils/async_fun.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/utils/cmd_util.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/utils/data_frame_util.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/utils/date_handle_util.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/utils/db_util.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/utils/file_util.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common/utils/ip_util.py +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common.egg-info/dependency_links.txt +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/mns_common.egg-info/top_level.txt +0 -0
- {mns_common-1.3.2.1 → mns_common-1.3.2.3}/setup.cfg +0 -0
|
@@ -33,7 +33,7 @@ def fund_etf_spot_em() -> pd.DataFrame:
|
|
|
33
33
|
"fields": (
|
|
34
34
|
"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,"
|
|
35
35
|
"f12,f13,f14,f15,f16,f17,f18,f20,f21,"
|
|
36
|
-
"f23,f24,f25,f22,f11,f30,f31,f32,f33,"
|
|
36
|
+
"f23,f24,f25,f26,f22,f11,f30,f31,f32,f33,"
|
|
37
37
|
"f34,f35,f38,f62,f63,f64,f65,f66,f69,"
|
|
38
38
|
"f72,f75,f78,f81,f84,f87,f115,f124,f128,"
|
|
39
39
|
"f136,f152,f184,f297,f402,f441"
|
|
@@ -45,6 +45,7 @@ def fund_etf_spot_em() -> pd.DataFrame:
|
|
|
45
45
|
temp_df = pd.DataFrame(data_json["data"]["diff"])
|
|
46
46
|
temp_df.rename(
|
|
47
47
|
columns={
|
|
48
|
+
"f26": "上市时间",
|
|
48
49
|
"f12": "代码",
|
|
49
50
|
"f14": "名称",
|
|
50
51
|
"f2": "最新价",
|
|
@@ -125,7 +126,8 @@ def fund_etf_spot_em() -> pd.DataFrame:
|
|
|
125
126
|
"总市值",
|
|
126
127
|
"数据日期",
|
|
127
128
|
"更新时间",
|
|
128
|
-
"market"
|
|
129
|
+
"market",
|
|
130
|
+
"上市时间"
|
|
129
131
|
]
|
|
130
132
|
]
|
|
131
133
|
temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
|
|
@@ -196,6 +198,7 @@ def fund_etf_spot_em() -> pd.DataFrame:
|
|
|
196
198
|
def get_etf_real_time_quotes():
|
|
197
199
|
fund_etf_spot_em_df = fund_etf_spot_em()
|
|
198
200
|
fund_etf_spot_em_df = fund_etf_spot_em_df.rename(columns={
|
|
201
|
+
"上市时间": "list_date",
|
|
199
202
|
"最新价": "now_price",
|
|
200
203
|
"涨跌幅": "chg",
|
|
201
204
|
"基金折价率": "fund_discount_rate",
|
|
@@ -262,7 +265,8 @@ def get_etf_real_time_quotes():
|
|
|
262
265
|
"latest_share",
|
|
263
266
|
"data_time",
|
|
264
267
|
"update_time",
|
|
265
|
-
"market"
|
|
268
|
+
"market",
|
|
269
|
+
'list_date'
|
|
266
270
|
]]
|
|
267
271
|
|
|
268
272
|
fund_etf_spot_em_df['disk_ratio'] = round(
|
|
@@ -0,0 +1,11 @@
|
|
|
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 akshare as ak
|
|
9
|
+
|
|
10
|
+
stock_zh_a_hist_df = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20170301", end_date='20240528', adjust="")
|
|
11
|
+
print(stock_zh_a_hist_df)
|
|
@@ -0,0 +1,106 @@
|
|
|
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 pandas as pd
|
|
9
|
+
import requests
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def stock_k_line_hist(
|
|
13
|
+
symbol: str = "000001",
|
|
14
|
+
period: str = "daily",
|
|
15
|
+
start_date: str = "19700101",
|
|
16
|
+
end_date: str = "20500101",
|
|
17
|
+
adjust: str = "",
|
|
18
|
+
timeout: float = None,
|
|
19
|
+
) -> pd.DataFrame:
|
|
20
|
+
"""
|
|
21
|
+
东方财富网-行情首页-沪深京 A 股-每日行情
|
|
22
|
+
https://quote.eastmoney.com/concept/sh603777.html?from=classic
|
|
23
|
+
:param symbol: 股票代码
|
|
24
|
+
:type symbol: str
|
|
25
|
+
:param period: choice of {'daily', 'weekly', 'monthly'}
|
|
26
|
+
:type period: str
|
|
27
|
+
:param start_date: 开始date
|
|
28
|
+
:type start_date: str
|
|
29
|
+
:param end_date: 结束date
|
|
30
|
+
:type end_date: str
|
|
31
|
+
:param adjust: choice of {"qfq": "前复权", "hfq": "后复权", "": "不复权"}
|
|
32
|
+
:type adjust: str
|
|
33
|
+
:param timeout: choice of None or a positive float number
|
|
34
|
+
:type timeout: float
|
|
35
|
+
:return: 每日行情
|
|
36
|
+
:rtype: pandas.DataFrame
|
|
37
|
+
"""
|
|
38
|
+
adjust_dict = {"qfq": "1", "hfq": "2", "": "0"}
|
|
39
|
+
period_dict = {"daily": "101", "weekly": "102", "monthly": "103"}
|
|
40
|
+
url = "https://push2his.eastmoney.com/api/qt/stock/kline/get"
|
|
41
|
+
params = {
|
|
42
|
+
"fields1": "f1,f2,f3,f4,f5,f6",
|
|
43
|
+
"fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f116",
|
|
44
|
+
"ut": "7eea3edcaed734bea9cbfc24409ed989",
|
|
45
|
+
"klt": period_dict[period],
|
|
46
|
+
"fqt": adjust_dict[adjust],
|
|
47
|
+
"secid": symbol,
|
|
48
|
+
"beg": start_date,
|
|
49
|
+
"end": end_date,
|
|
50
|
+
"_": "1623766962675",
|
|
51
|
+
}
|
|
52
|
+
r = requests.get(url, params=params, timeout=timeout)
|
|
53
|
+
data_json = r.json()
|
|
54
|
+
if not (data_json["data"] and data_json["data"]["klines"]):
|
|
55
|
+
return pd.DataFrame()
|
|
56
|
+
temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]["klines"]])
|
|
57
|
+
temp_df.columns = [
|
|
58
|
+
"date",
|
|
59
|
+
"open",
|
|
60
|
+
"close",
|
|
61
|
+
"high",
|
|
62
|
+
"low",
|
|
63
|
+
"volume",
|
|
64
|
+
"amount",
|
|
65
|
+
"pct_chg",
|
|
66
|
+
"chg",
|
|
67
|
+
"change_price",
|
|
68
|
+
"exchange",
|
|
69
|
+
]
|
|
70
|
+
temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
|
|
71
|
+
temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
|
|
72
|
+
temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
|
|
73
|
+
temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
|
|
74
|
+
temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
|
|
75
|
+
temp_df["volume"] = pd.to_numeric(temp_df["volume"], errors="coerce")
|
|
76
|
+
temp_df["amount"] = pd.to_numeric(temp_df["amount"], errors="coerce")
|
|
77
|
+
temp_df["pct_chg"] = pd.to_numeric(temp_df["pct_chg"], errors="coerce")
|
|
78
|
+
temp_df["chg"] = pd.to_numeric(temp_df["chg"], errors="coerce")
|
|
79
|
+
temp_df["change_price"] = pd.to_numeric(temp_df["change_price"], errors="coerce")
|
|
80
|
+
temp_df["exchange"] = pd.to_numeric(temp_df["exchange"], errors="coerce")
|
|
81
|
+
temp_df = temp_df[
|
|
82
|
+
[
|
|
83
|
+
"date",
|
|
84
|
+
"open",
|
|
85
|
+
"close",
|
|
86
|
+
"high",
|
|
87
|
+
"low",
|
|
88
|
+
"volume",
|
|
89
|
+
"amount",
|
|
90
|
+
"pct_chg",
|
|
91
|
+
"chg",
|
|
92
|
+
"change_price",
|
|
93
|
+
"exchange",
|
|
94
|
+
]
|
|
95
|
+
]
|
|
96
|
+
return temp_df
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
if __name__ == '__main__':
|
|
100
|
+
stock_k_line_hist(
|
|
101
|
+
"1.513180",
|
|
102
|
+
"daily",
|
|
103
|
+
"19700101",
|
|
104
|
+
"20500101",
|
|
105
|
+
"",
|
|
106
|
+
None)
|
|
@@ -0,0 +1,145 @@
|
|
|
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 pandas as pd
|
|
9
|
+
import requests
|
|
10
|
+
|
|
11
|
+
# symbol 代码
|
|
12
|
+
# 北交所:0 深圳:0 上海:1
|
|
13
|
+
"""
|
|
14
|
+
获取分钟数据
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def get_minute_data(symbol, start_date, end_date, period,
|
|
19
|
+
adjust) -> pd.DataFrame:
|
|
20
|
+
"""
|
|
21
|
+
东方财富网-行情首页-沪深京 A 股-每日分时行情
|
|
22
|
+
https://quote.eastmoney.com/concept/sh603777.html?from=classic
|
|
23
|
+
:param symbol: 股票代码
|
|
24
|
+
:type symbol: str
|
|
25
|
+
:param start_date: 开始日期
|
|
26
|
+
:type start_date: str
|
|
27
|
+
:param end_date: 结束日期
|
|
28
|
+
:type end_date: str
|
|
29
|
+
:param period: choice of {'1', '5', '15', '30', '60'}
|
|
30
|
+
:type period: str
|
|
31
|
+
:param adjust: choice of {'', 'qfq', 'hfq'}
|
|
32
|
+
:type adjust: 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": "7eea3edcaed734bea9cbfc24409ed989",
|
|
47
|
+
"ndays": "5",
|
|
48
|
+
"iscr": "0",
|
|
49
|
+
"secid": 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
|
+
"time",
|
|
59
|
+
"open",
|
|
60
|
+
"close",
|
|
61
|
+
"high",
|
|
62
|
+
"low",
|
|
63
|
+
"amount",
|
|
64
|
+
"volume",
|
|
65
|
+
"ava_price",
|
|
66
|
+
]
|
|
67
|
+
temp_df.index = pd.to_datetime(temp_df["time"])
|
|
68
|
+
temp_df = temp_df[start_date:end_date]
|
|
69
|
+
temp_df.reset_index(drop=True, inplace=True)
|
|
70
|
+
temp_df["volume"] = pd.to_numeric(temp_df["volume"], errors="coerce")
|
|
71
|
+
temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
|
|
72
|
+
temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
|
|
73
|
+
temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
|
|
74
|
+
temp_df["amount"] = pd.to_numeric(temp_df["amount"], errors="coerce")
|
|
75
|
+
temp_df["volume"] = pd.to_numeric(temp_df["volume"], errors="coerce")
|
|
76
|
+
temp_df["ava_price"] = pd.to_numeric(temp_df["ava_price"], errors="coerce")
|
|
77
|
+
temp_df["time"] = pd.to_datetime(temp_df["time"]).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": "7eea3edcaed734bea9cbfc24409ed989",
|
|
85
|
+
"klt": period,
|
|
86
|
+
"fqt": adjust_map[adjust],
|
|
87
|
+
"secid": 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
|
+
"time",
|
|
99
|
+
"open",
|
|
100
|
+
"close",
|
|
101
|
+
"high",
|
|
102
|
+
"low",
|
|
103
|
+
"amount",
|
|
104
|
+
"volume",
|
|
105
|
+
"pct_chg",
|
|
106
|
+
"chg",
|
|
107
|
+
"change",
|
|
108
|
+
"exchange",
|
|
109
|
+
]
|
|
110
|
+
temp_df.index = pd.to_datetime(temp_df["time"])
|
|
111
|
+
temp_df = temp_df[start_date:end_date]
|
|
112
|
+
temp_df.reset_index(drop=True, inplace=True)
|
|
113
|
+
temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
|
|
114
|
+
temp_df["close"] = pd.to_numeric(temp_df["close"], errors="coerce")
|
|
115
|
+
temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
|
|
116
|
+
temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
|
|
117
|
+
temp_df["amount"] = pd.to_numeric(temp_df["amount"], errors="coerce")
|
|
118
|
+
temp_df["volume"] = pd.to_numeric(temp_df["volume"], errors="coerce")
|
|
119
|
+
temp_df["pct_chg"] = pd.to_numeric(temp_df["pct_chg"], errors="coerce")
|
|
120
|
+
temp_df["chg"] = pd.to_numeric(temp_df["chg"], errors="coerce")
|
|
121
|
+
temp_df["change"] = pd.to_numeric(temp_df["change"], errors="coerce")
|
|
122
|
+
temp_df["exchange"] = pd.to_numeric(temp_df["exchange"], errors="coerce")
|
|
123
|
+
temp_df["time"] = pd.to_datetime(temp_df["time"]).astype(str)
|
|
124
|
+
temp_df = temp_df[
|
|
125
|
+
[
|
|
126
|
+
"time",
|
|
127
|
+
"volume",
|
|
128
|
+
"close",
|
|
129
|
+
"high",
|
|
130
|
+
"low",
|
|
131
|
+
"chg",
|
|
132
|
+
"change",
|
|
133
|
+
"amount",
|
|
134
|
+
"volume",
|
|
135
|
+
"pct_chg",
|
|
136
|
+
"exchange",
|
|
137
|
+
]
|
|
138
|
+
]
|
|
139
|
+
return temp_df
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
if __name__ == '__main__':
|
|
143
|
+
test_df = get_minute_data('0.899050', start_date="2025-03-03 09:30:00",
|
|
144
|
+
end_date="2025-03-07 15:00:00", period="1", adjust="")
|
|
145
|
+
print(test_df)
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 16
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
|
|
9
|
+
from xtquant import xtdata
|
|
10
|
+
import time
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def my_download(stock_list: list, period: str, start_date='', end_date=''):
|
|
14
|
+
'''
|
|
15
|
+
用于显示下载进度
|
|
16
|
+
'''
|
|
17
|
+
import string
|
|
18
|
+
|
|
19
|
+
if [i for i in ["d", "w", "mon", "q", "y", ] if i in period]:
|
|
20
|
+
period = "1d"
|
|
21
|
+
elif "m" in period:
|
|
22
|
+
numb = period.translate(str.maketrans("", "", string.ascii_letters))
|
|
23
|
+
if int(numb) < 5:
|
|
24
|
+
period = "1m"
|
|
25
|
+
else:
|
|
26
|
+
period = "5m"
|
|
27
|
+
elif "tick" == period:
|
|
28
|
+
pass
|
|
29
|
+
else:
|
|
30
|
+
raise KeyboardInterrupt("周期传入错误")
|
|
31
|
+
|
|
32
|
+
n = 1
|
|
33
|
+
num = len(stock_list)
|
|
34
|
+
for i in stock_list:
|
|
35
|
+
print(f"当前正在下载 {period} {n}/{num}")
|
|
36
|
+
|
|
37
|
+
xtdata.download_history_data(i, period, start_date, end_date)
|
|
38
|
+
n += 1
|
|
39
|
+
print("下载任务结束")
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def do_subscribe_quote(stock_list: list, period: str):
|
|
43
|
+
for i in stock_list:
|
|
44
|
+
xtdata.subscribe_quote(i, period=period)
|
|
45
|
+
time.sleep(1) # 等待订阅完成
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
if __name__ == "__main__":
|
|
49
|
+
|
|
50
|
+
start_date = '20220101' # 格式"YYYYMMDD",开始下载的日期,date = ""时全量下载
|
|
51
|
+
end_date = ""
|
|
52
|
+
period = "1m"
|
|
53
|
+
|
|
54
|
+
need_download = 1 # 取数据是空值时,将need_download赋值为1,确保正确下载了历史数据
|
|
55
|
+
|
|
56
|
+
code_list = ["588000.SH", "600519.SH"] # 股票列表
|
|
57
|
+
|
|
58
|
+
if need_download: # 判断要不要下载数据, gmd系列函数都是从本地读取历史数据,从服务器订阅获取最新数据
|
|
59
|
+
my_download(code_list, period, start_date, end_date)
|
|
60
|
+
|
|
61
|
+
############ 仅获取历史行情 #####################
|
|
62
|
+
count = -1 # 设置count参数,使gmd_ex返回全部数据
|
|
63
|
+
data1 = xtdata.get_market_data_ex([], code_list, period=period, start_time=start_date, end_time=end_date)
|
|
64
|
+
|
|
65
|
+
############ 仅获取最新行情 #####################
|
|
66
|
+
do_subscribe_quote(code_list, period) # 设置订阅参数,使gmd_ex取到最新行情
|
|
67
|
+
count = 1 # 设置count参数,使gmd_ex仅返回最新行情数据
|
|
68
|
+
data2 = xtdata.get_market_data_ex([], code_list, period=period, start_time=start_date, end_time=end_date,
|
|
69
|
+
count=1) # count 设置为1,使返回值只包含最新行情
|
|
70
|
+
|
|
71
|
+
############ 获取历史行情+最新行情 #####################
|
|
72
|
+
do_subscribe_quote(code_list, period) # 设置订阅参数,使gmd_ex取到最新行情
|
|
73
|
+
count = -1 # 设置count参数,使gmd_ex返回全部数据
|
|
74
|
+
data3 = xtdata.get_market_data_ex([], code_list, period=period, start_time=start_date, end_time=end_date,
|
|
75
|
+
count=-1) # count 设置为1,使返回值只包含最新行情
|
|
76
|
+
|
|
77
|
+
print(data1[code_list[0]].tail()) # 行情数据查看
|
|
78
|
+
print(data2[code_list[0]].tail())
|
|
79
|
+
print(data3[code_list[0]].tail())
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
@@ -161,3 +161,24 @@ THS_INDUSTRY_LIST = 'ths_industry_list'
|
|
|
161
161
|
|
|
162
162
|
# 同花顺行业股票详情
|
|
163
163
|
THS_STOCK_INDUSTRY_DETAIL = 'ths_stock_industry_detail'
|
|
164
|
+
|
|
165
|
+
# 创业板分钟集合数据
|
|
166
|
+
ONE_MINUTE_K_LINE_BFQ_C = 'one_minute_k_line_bfq_c'
|
|
167
|
+
|
|
168
|
+
# 北交所分钟集合数据
|
|
169
|
+
ONE_MINUTE_K_LINE_BFQ_BJ = 'one_minute_k_line_bfq_bj'
|
|
170
|
+
|
|
171
|
+
# 上海主板分钟集合数据
|
|
172
|
+
ONE_MINUTE_K_LINE_BFQ_H = 'one_minute_k_line_bfq_h'
|
|
173
|
+
|
|
174
|
+
# 科创板分钟集合数据
|
|
175
|
+
ONE_MINUTE_K_LINE_BFQ_K = 'one_minute_k_line_bfq_k'
|
|
176
|
+
|
|
177
|
+
# 深圳主板分钟集合数据
|
|
178
|
+
ONE_MINUTE_K_LINE_BFQ_K = 'one_minute_k_line_bfq_s'
|
|
179
|
+
|
|
180
|
+
# 可转债分钟集合数据
|
|
181
|
+
ONE_MINUTE_K_LINE_BFQ_KZZ = 'one_minute_k_line_bfq_kzz'
|
|
182
|
+
|
|
183
|
+
# ETF分钟集合数据
|
|
184
|
+
ONE_MINUTE_K_LINE_BFQ_ETF = 'one_minute_k_line_bfq_etf'
|