akshare 1.12.99__py3-none-any.whl → 1.15.73__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 akshare might be problematic. Click here for more details.
- akshare/__init__.py +442 -138
- akshare/air/air_hebei.py +79 -53
- akshare/air/air_zhenqi.py +29 -43
- akshare/air/sunrise_tad.py +32 -17
- akshare/bank/bank_cbirc_2020.py +12 -9
- akshare/bond/bond_cb_ths.py +17 -9
- akshare/bond/bond_china.py +38 -39
- akshare/bond/bond_china_money.py +75 -48
- akshare/bond/bond_info_cm.py +28 -8
- akshare/bond/bond_issue_cninfo.py +73 -30
- akshare/bond/bond_zh_cov.py +1 -1
- akshare/bond/bond_zh_sina.py +57 -51
- akshare/cal/__init__.py +0 -0
- akshare/cal/rv.py +170 -0
- akshare/cost/cost_living.py +7 -5
- akshare/currency/currency_safe.py +7 -6
- akshare/data/cninfo.js +15 -0
- akshare/datasets.py +10 -21
- akshare/economic/macro_bank.py +95 -653
- akshare/economic/macro_china.py +772 -1024
- akshare/economic/macro_china_hk.py +65 -243
- akshare/economic/macro_china_nbs.py +24 -7
- akshare/economic/macro_constitute.py +17 -12
- akshare/economic/macro_euro.py +13 -6
- akshare/economic/macro_finance_ths.py +133 -0
- akshare/economic/macro_info_ws.py +100 -0
- akshare/economic/macro_japan.py +5 -4
- akshare/economic/macro_other.py +12 -9
- akshare/economic/macro_usa.py +376 -1940
- akshare/economic/marco_cnbs.py +11 -6
- akshare/energy/energy_carbon.py +94 -125
- akshare/event/migration.py +3 -2
- akshare/exceptions.py +43 -0
- akshare/file_fold/calendar.json +245 -2
- akshare/fortune/fortune_500.py +15 -48
- akshare/fund/fund_amac.py +157 -75
- akshare/fund/fund_em.py +191 -184
- akshare/fund/fund_etf_em.py +16 -15
- akshare/fund/fund_etf_sina.py +71 -23
- akshare/fund/fund_etf_ths.py +93 -0
- akshare/fund/fund_fee_em.py +98 -0
- akshare/fund/fund_portfolio_em.py +60 -50
- akshare/fund/fund_rank_em.py +91 -82
- akshare/fund/fund_report_cninfo.py +63 -48
- akshare/fund/fund_scale_sina.py +20 -10
- akshare/fund/fund_xq.py +139 -109
- akshare/futures/cons.py +8 -31
- akshare/futures/cot.py +185 -137
- akshare/futures/futures_basis.py +97 -32
- akshare/futures/futures_comm_ctp.py +37 -0
- akshare/futures/futures_comm_qihuo.py +74 -45
- akshare/futures/futures_daily_bar.py +121 -184
- akshare/futures/futures_hf_em.py +66 -61
- akshare/futures/futures_hq_sina.py +79 -61
- akshare/futures/futures_index_ccidx.py +6 -3
- akshare/futures/futures_inventory_99.py +61 -272
- akshare/futures/futures_news_shmet.py +4 -2
- akshare/futures/futures_roll_yield.py +12 -25
- akshare/futures/futures_spot_stock_em.py +19 -13
- akshare/futures/futures_stock_js.py +14 -12
- akshare/futures/futures_to_spot.py +38 -33
- akshare/futures/futures_warehouse_receipt.py +75 -71
- akshare/futures/futures_zh_sina.py +5 -5
- akshare/futures/symbol_var.py +18 -13
- akshare/futures_derivative/futures_contract_info_czce.py +60 -52
- akshare/futures_derivative/futures_contract_info_ine.py +43 -34
- akshare/futures_derivative/futures_contract_info_shfe.py +46 -35
- akshare/futures_derivative/futures_cot_sina.py +26 -19
- akshare/futures_derivative/futures_spot_sys.py +21 -8
- akshare/fx/currency_investing.py +19 -285
- akshare/index/index_cflp.py +29 -26
- akshare/index/index_cni.py +86 -88
- akshare/index/index_cons.py +26 -10
- akshare/index/index_cx.py +248 -47
- akshare/index/index_drewry.py +17 -16
- akshare/index/index_option_qvix.py +329 -0
- akshare/index/index_research_fund_sw.py +134 -0
- akshare/index/{index_sw_research.py → index_research_sw.py} +122 -58
- akshare/index/index_spot.py +9 -5
- akshare/index/index_stock_hk.py +35 -16
- akshare/index/index_stock_us_sina.py +1 -1
- akshare/index/index_stock_zh.py +180 -89
- akshare/index/index_stock_zh_csindex.py +15 -369
- akshare/index/index_sw.py +62 -34
- akshare/index/index_yw.py +46 -23
- akshare/index/index_zh_a_scope.py +48 -0
- akshare/index/index_zh_em.py +6 -4
- akshare/interest_rate/interbank_rate_em.py +14 -9
- akshare/movie/artist_yien.py +32 -5
- akshare/movie/movie_yien.py +92 -18
- akshare/movie/video_yien.py +28 -5
- akshare/news/news_baidu.py +78 -44
- akshare/news/news_cctv.py +38 -38
- akshare/news/news_stock.py +6 -3
- akshare/nlp/nlp_interface.py +7 -8
- akshare/option/cons.py +11 -11
- akshare/option/option_comm_qihuo.py +86 -0
- akshare/option/option_commodity.py +178 -51
- akshare/option/option_daily_stats_sse_szse.py +146 -0
- akshare/option/option_em.py +147 -138
- akshare/option/option_finance_sina.py +160 -137
- akshare/option/option_lhb_em.py +62 -56
- akshare/option/option_risk_indicator_sse.py +17 -14
- akshare/other/other_car_cpca.py +934 -0
- akshare/other/{other_car.py → other_car_gasgoo.py} +15 -54
- akshare/qdii/__init__.py +0 -0
- akshare/qdii/qdii_jsl.py +233 -0
- akshare/request.py +117 -0
- akshare/spot/spot_hog_soozhu.py +232 -0
- akshare/spot/spot_price_qh.py +121 -0
- akshare/spot/spot_sge.py +63 -10
- akshare/stock/stock_allotment_cninfo.py +10 -9
- akshare/stock/stock_board_concept_em.py +23 -14
- akshare/stock/stock_board_industry_em.py +40 -34
- akshare/stock/stock_cg_equity_mortgage.py +15 -11
- akshare/stock/stock_cg_guarantee.py +41 -51
- akshare/stock/stock_cg_lawsuit.py +36 -35
- akshare/stock/stock_dividend_cninfo.py +12 -6
- akshare/stock/stock_dzjy_em.py +347 -260
- akshare/stock/stock_fund_em.py +332 -84
- akshare/stock/stock_hk_famous.py +108 -0
- akshare/stock/stock_hk_sina.py +8 -7
- akshare/stock/stock_hold_control_cninfo.py +100 -15
- akshare/stock/stock_hold_control_em.py +4 -3
- akshare/stock/stock_hold_num_cninfo.py +18 -12
- akshare/stock/stock_hot_rank_em.py +2 -1
- akshare/stock/stock_hot_search_baidu.py +5 -2
- akshare/stock/stock_industry_cninfo.py +24 -18
- akshare/stock/stock_industry_pe_cninfo.py +45 -31
- akshare/stock/stock_industry_sw.py +9 -10
- akshare/stock/stock_info.py +25 -15
- akshare/stock/stock_info_em.py +5 -2
- akshare/stock/stock_intraday_em.py +5 -2
- akshare/stock/stock_intraday_sina.py +22 -18
- akshare/stock/stock_ipo_summary_cninfo.py +25 -10
- akshare/stock/stock_new_cninfo.py +32 -19
- akshare/stock/stock_news_cx.py +39 -0
- akshare/stock/stock_profile_cninfo.py +9 -8
- akshare/stock/stock_rank_forecast.py +8 -6
- akshare/stock/stock_share_changes_cninfo.py +18 -14
- akshare/stock/stock_share_hold.py +24 -19
- akshare/stock/stock_summary.py +54 -26
- akshare/stock/stock_us_famous.py +15 -6
- akshare/stock/stock_us_pink.py +7 -5
- akshare/stock/stock_us_sina.py +15 -12
- akshare/stock/stock_xq.py +38 -12
- akshare/stock/stock_zh_a_sina.py +53 -78
- akshare/stock/stock_zh_b_sina.py +32 -55
- akshare/stock/stock_zh_kcb_report.py +11 -9
- akshare/stock/stock_zh_kcb_sina.py +67 -64
- akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
- akshare/stock_feature/stock_a_high_low.py +5 -2
- akshare/stock_feature/stock_a_indicator.py +12 -9
- akshare/stock_feature/stock_a_pe_and_pb.py +27 -6
- akshare/stock_feature/stock_account_em.py +58 -40
- akshare/stock_feature/stock_analyst_em.py +36 -27
- akshare/stock_feature/stock_board_industry_ths.py +136 -400
- akshare/stock_feature/stock_comment_em.py +118 -85
- akshare/stock_feature/stock_concept_futu.py +183 -0
- akshare/stock_feature/stock_cyq_em.py +58 -54
- akshare/stock_feature/stock_disclosure_cninfo.py +147 -102
- akshare/stock_feature/stock_esg_sina.py +216 -11
- akshare/stock_feature/stock_fhps_em.py +60 -25
- akshare/stock_feature/stock_fhps_ths.py +25 -6
- akshare/stock_feature/stock_fund_flow.py +38 -25
- akshare/stock_feature/stock_gdfx_em.py +180 -95
- akshare/stock_feature/stock_gdhs.py +73 -49
- akshare/stock_feature/stock_gpzy_em.py +78 -46
- akshare/stock_feature/stock_hist_em.py +55 -23
- akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
- akshare/stock_feature/stock_hsgt_em.py +184 -452
- akshare/stock_feature/stock_info.py +52 -29
- akshare/stock_feature/stock_inner_trade_xq.py +39 -31
- akshare/stock_feature/stock_irm_cninfo.py +32 -9
- akshare/stock_feature/stock_jgdy_em.py +41 -38
- akshare/stock_feature/stock_lh_yybpm.py +36 -37
- akshare/stock_feature/stock_lhb_em.py +135 -71
- akshare/stock_feature/stock_lhb_sina.py +93 -46
- akshare/stock_feature/stock_margin_em.py +102 -0
- akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -15
- akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +23 -19
- akshare/stock_feature/stock_market_legu.py +13 -8
- akshare/stock_feature/stock_pankou_em.py +72 -34
- akshare/stock_feature/stock_report_em.py +244 -54
- akshare/stock_feature/stock_research_report_em.py +48 -19
- akshare/stock_feature/stock_sns_sseinfo.py +15 -12
- akshare/stock_feature/stock_sy_em.py +86 -33
- akshare/stock_feature/stock_technology_ths.py +152 -120
- akshare/stock_feature/stock_tfp_em.py +35 -13
- akshare/stock_feature/stock_three_report_em.py +119 -77
- akshare/stock_feature/stock_ttm_lyr.py +4 -7
- akshare/stock_feature/stock_value_em.py +83 -0
- akshare/stock_feature/stock_wencai.py +21 -9
- akshare/stock_feature/stock_yjyg_em.py +63 -28
- akshare/stock_feature/stock_zf_pg.py +61 -38
- akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
- akshare/stock_feature/stock_ztb_em.py +62 -40
- akshare/stock_fundamental/stock_finance.py +150 -58
- akshare/stock_fundamental/stock_finance_ths.py +116 -31
- akshare/stock_fundamental/stock_mda_ym.py +5 -3
- akshare/stock_fundamental/stock_notice.py +29 -15
- akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
- akshare/stock_fundamental/stock_profit_forecast_ths.py +19 -10
- akshare/stock_fundamental/stock_register_em.py +448 -0
- akshare/stock_fundamental/stock_restricted_em.py +79 -32
- akshare/stock_fundamental/stock_zygc.py +10 -8
- akshare/stock_fundamental/stock_zyjs_ths.py +5 -3
- akshare/tool/trade_date_hist.py +4 -3
- akshare/utils/cons.py +10 -0
- akshare/utils/context.py +43 -0
- akshare/utils/demjson.py +2 -2
- akshare/utils/func.py +26 -0
- akshare/utils/tqdm.py +13 -3
- {akshare-1.12.99.dist-info → akshare-1.15.73.dist-info}/METADATA +52 -69
- akshare-1.15.73.dist-info/RECORD +385 -0
- {akshare-1.12.99.dist-info → akshare-1.15.73.dist-info}/WHEEL +1 -1
- tests/test_func.py +3 -5
- akshare/bond/bond_futures.py +0 -50
- akshare/bond/bond_investing.py +0 -139
- akshare/crypto/crypto_hist_investing.py +0 -249
- akshare/fortune/fortune_it_juzi.py +0 -123
- akshare/futures/futures_international.py +0 -170
- akshare/futures/futures_news_baidu.py +0 -54
- akshare/futures/inventory_data.py +0 -100
- akshare/futures_derivative/futures_index_price_nh.py +0 -61
- akshare/futures_derivative/futures_index_return_nh.py +0 -47
- akshare/futures_derivative/futures_index_volatility_nh.py +0 -51
- akshare/futures_derivative/futures_other_index_nh.py +0 -145
- akshare/index/index_fear_greed_funddb.py +0 -71
- akshare/index/index_investing.py +0 -232
- akshare/sport/sport_olympic_winter.py +0 -39
- akshare/stock_feature/stock_board_concept_ths.py +0 -422
- akshare/stock_fundamental/stock_register.py +0 -292
- akshare-1.12.99.dist-info/RECORD +0 -374
- {akshare-1.12.99.dist-info → akshare-1.15.73.dist-info}/LICENSE +0 -0
- {akshare-1.12.99.dist-info → akshare-1.15.73.dist-info}/top_level.txt +0 -0
akshare/fund/fund_xq.py
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date: 2024/
|
|
4
|
+
Date: 2024/10/27 22:30
|
|
5
5
|
Desc: 雪球基金-基金详情
|
|
6
6
|
https://danjuanfunds.com/funding/003545
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
def fund_individual_basic_info_xq(
|
|
13
|
-
|
|
14
|
+
symbol: str = "000001", timeout: float = None
|
|
14
15
|
) -> pd.DataFrame:
|
|
15
16
|
"""
|
|
16
17
|
雪球基金-基金详情
|
|
@@ -24,52 +25,58 @@ def fund_individual_basic_info_xq(
|
|
|
24
25
|
"""
|
|
25
26
|
url = f"https://danjuanfunds.com/djapi/fund/{symbol}"
|
|
26
27
|
headers = {
|
|
27
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
28
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
29
|
+
"Chrome/80.0.3987.149 Safari/537.36"
|
|
28
30
|
}
|
|
29
31
|
r = requests.get(url, headers=headers, timeout=timeout)
|
|
30
32
|
json_data = r.json()["data"]
|
|
31
33
|
temp_df = pd.json_normalize(json_data)
|
|
32
|
-
temp_df.rename(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
34
|
+
temp_df.rename(
|
|
35
|
+
columns={
|
|
36
|
+
"fd_code": "基金代码",
|
|
37
|
+
"fd_name": "基金名称",
|
|
38
|
+
"fd_full_name": "基金全称",
|
|
39
|
+
"found_date": "成立时间",
|
|
40
|
+
"totshare": "最新规模",
|
|
41
|
+
"keeper_name": "基金公司",
|
|
42
|
+
"manager_name": "基金经理",
|
|
43
|
+
"trup_name": "托管银行",
|
|
44
|
+
"type_desc": "基金类型",
|
|
45
|
+
"rating_source": "评级机构",
|
|
46
|
+
"rating_desc": "基金评级",
|
|
47
|
+
"invest_orientation": "投资策略",
|
|
48
|
+
"invest_target": "投资目标",
|
|
49
|
+
"performance_bench_mark": "业绩比较基准",
|
|
50
|
+
},
|
|
51
|
+
inplace=True,
|
|
52
|
+
)
|
|
48
53
|
if "评级机构" not in temp_df.columns:
|
|
49
|
-
temp_df[
|
|
50
|
-
temp_df = temp_df[
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
54
|
+
temp_df["评级机构"] = pd.NA
|
|
55
|
+
temp_df = temp_df[
|
|
56
|
+
[
|
|
57
|
+
"基金代码",
|
|
58
|
+
"基金名称",
|
|
59
|
+
"基金全称",
|
|
60
|
+
"成立时间",
|
|
61
|
+
"最新规模",
|
|
62
|
+
"基金公司",
|
|
63
|
+
"基金经理",
|
|
64
|
+
"托管银行",
|
|
65
|
+
"基金类型",
|
|
66
|
+
"评级机构",
|
|
67
|
+
"基金评级",
|
|
68
|
+
"投资策略",
|
|
69
|
+
"投资目标",
|
|
70
|
+
"业绩比较基准",
|
|
71
|
+
]
|
|
72
|
+
]
|
|
66
73
|
temp_df = temp_df.T.reset_index()
|
|
67
74
|
temp_df.columns = ["item", "value"]
|
|
68
75
|
return temp_df
|
|
69
76
|
|
|
70
77
|
|
|
71
78
|
def fund_individual_achievement_xq(
|
|
72
|
-
|
|
79
|
+
symbol: str = "000001", timeout: float = None
|
|
73
80
|
) -> pd.DataFrame:
|
|
74
81
|
"""
|
|
75
82
|
雪球基金-基金业绩
|
|
@@ -81,11 +88,10 @@ def fund_individual_achievement_xq(
|
|
|
81
88
|
:return: 基金业绩
|
|
82
89
|
:rtype: pandas.DataFrame
|
|
83
90
|
"""
|
|
84
|
-
url =
|
|
85
|
-
f"https://danjuanfunds.com/djapi/fundx/base/fund/achievement/{symbol}"
|
|
86
|
-
)
|
|
91
|
+
url = f"https://danjuanfunds.com/djapi/fundx/base/fund/achievement/{symbol}"
|
|
87
92
|
headers = {
|
|
88
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
93
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
94
|
+
"Chrome/80.0.3987.149 Safari/537.36"
|
|
89
95
|
}
|
|
90
96
|
r = requests.get(url, headers=headers, timeout=timeout)
|
|
91
97
|
json_data = r.json()["data"]
|
|
@@ -124,7 +130,7 @@ def fund_individual_achievement_xq(
|
|
|
124
130
|
|
|
125
131
|
|
|
126
132
|
def fund_individual_analysis_xq(
|
|
127
|
-
|
|
133
|
+
symbol: str = "000001", timeout: float = None
|
|
128
134
|
) -> pd.DataFrame:
|
|
129
135
|
"""
|
|
130
136
|
雪球基金-基金数据分析
|
|
@@ -138,7 +144,8 @@ def fund_individual_analysis_xq(
|
|
|
138
144
|
"""
|
|
139
145
|
url = f"https://danjuanfunds.com/djapi/fund/base/quote/data/index/analysis/{symbol}"
|
|
140
146
|
headers = {
|
|
141
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
147
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
148
|
+
"Chrome/80.0.3987.149 Safari/537.36"
|
|
142
149
|
}
|
|
143
150
|
r = requests.get(url, headers=headers, timeout=timeout)
|
|
144
151
|
json_data = r.json()["data"]["index_data_list"]
|
|
@@ -161,20 +168,22 @@ def fund_individual_analysis_xq(
|
|
|
161
168
|
"年化夏普比率",
|
|
162
169
|
"最大回撤",
|
|
163
170
|
]
|
|
164
|
-
temp_df = temp_df.map(
|
|
165
|
-
lambda x: x if "%" not in str(x) else x.replace("%", "")
|
|
166
|
-
)
|
|
171
|
+
temp_df = temp_df.map(lambda x: x if "%" not in str(x) else x.replace("%", ""))
|
|
167
172
|
temp_df[["年化波动率", "最大回撤"]] *= 100
|
|
168
|
-
temp_df[
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
temp_df[
|
|
172
|
-
|
|
173
|
+
temp_df["较同类风险收益比"] = pd.to_numeric(
|
|
174
|
+
temp_df["较同类风险收益比"], errors="coerce"
|
|
175
|
+
)
|
|
176
|
+
temp_df["较同类抗风险波动"] = pd.to_numeric(
|
|
177
|
+
temp_df["较同类抗风险波动"], errors="coerce"
|
|
178
|
+
)
|
|
179
|
+
temp_df["年化波动率"] = pd.to_numeric(temp_df["年化波动率"], errors="coerce")
|
|
180
|
+
temp_df["年化夏普比率"] = pd.to_numeric(temp_df["年化夏普比率"], errors="coerce")
|
|
181
|
+
temp_df["最大回撤"] = pd.to_numeric(temp_df["最大回撤"], errors="coerce")
|
|
173
182
|
return temp_df
|
|
174
183
|
|
|
175
184
|
|
|
176
185
|
def fund_individual_profit_probability_xq(
|
|
177
|
-
|
|
186
|
+
symbol: str = "000001", timeout: float = None
|
|
178
187
|
) -> pd.DataFrame:
|
|
179
188
|
"""
|
|
180
189
|
雪球基金-盈利概率-历史任意时点买入,持有满 X 年,盈利概率 Y%
|
|
@@ -186,11 +195,10 @@ def fund_individual_profit_probability_xq(
|
|
|
186
195
|
:return: 盈利概率
|
|
187
196
|
:rtype: pandas.DataFrame
|
|
188
197
|
"""
|
|
189
|
-
url =
|
|
190
|
-
f"https://danjuanfunds.com/djapi/fundx/base/fund/profit/ratio/{symbol}"
|
|
191
|
-
)
|
|
198
|
+
url = f"https://danjuanfunds.com/djapi/fundx/base/fund/profit/ratio/{symbol}"
|
|
192
199
|
headers = {
|
|
193
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
200
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
201
|
+
"Chrome/80.0.3987.149 Safari/537.36"
|
|
194
202
|
}
|
|
195
203
|
r = requests.get(url, headers=headers, timeout=timeout)
|
|
196
204
|
json_data = r.json()["data"]["data_list"]
|
|
@@ -207,79 +215,97 @@ def fund_individual_profit_probability_xq(
|
|
|
207
215
|
"盈利概率",
|
|
208
216
|
"平均收益",
|
|
209
217
|
]
|
|
210
|
-
temp_df = temp_df.map(
|
|
211
|
-
|
|
212
|
-
)
|
|
213
|
-
temp_df['盈利概率'] = pd.to_numeric(temp_df['盈利概率'], errors="coerce")
|
|
214
|
-
temp_df['平均收益'] = pd.to_numeric(temp_df['平均收益'], errors="coerce")
|
|
218
|
+
temp_df = temp_df.map(lambda x: x if "%" not in str(x) else x.replace("%", ""))
|
|
219
|
+
temp_df["盈利概率"] = pd.to_numeric(temp_df["盈利概率"], errors="coerce")
|
|
220
|
+
temp_df["平均收益"] = pd.to_numeric(temp_df["平均收益"], errors="coerce")
|
|
215
221
|
return temp_df
|
|
216
222
|
|
|
217
223
|
|
|
218
224
|
def fund_individual_detail_info_xq(
|
|
219
|
-
|
|
225
|
+
symbol: str = "000001", timeout: float = None
|
|
220
226
|
) -> pd.DataFrame:
|
|
221
227
|
"""
|
|
222
|
-
|
|
228
|
+
雪球基金-交易规则
|
|
223
229
|
https://danjuanfunds.com/djapi/fund/detail/675091
|
|
224
230
|
:param symbol: 基金代码
|
|
225
231
|
:type symbol: str
|
|
226
|
-
:param indicator: 信息类型; choice of {"交易规则", "持仓资产比例"}
|
|
227
|
-
:type symbol: str
|
|
228
232
|
:param timeout: choice of None or a positive float number
|
|
229
233
|
:type timeout: float
|
|
230
|
-
:return:
|
|
234
|
+
:return: 交易规则
|
|
231
235
|
:rtype: pandas.DataFrame
|
|
232
236
|
"""
|
|
233
237
|
url = f"https://danjuanfunds.com/djapi/fund/detail/{symbol}"
|
|
234
238
|
headers = {
|
|
235
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
239
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
240
|
+
"Chrome/80.0.3987.149 Safari/537.36"
|
|
236
241
|
}
|
|
237
242
|
r = requests.get(url, headers=headers, timeout=timeout)
|
|
238
243
|
json_data = r.json()["data"]
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
+
combined_df = None
|
|
245
|
+
rate_type_dict = {
|
|
246
|
+
"declare_rate_table": "买入规则",
|
|
247
|
+
"withdraw_rate_table": "卖出规则",
|
|
248
|
+
"other_rate_table": "其他费用",
|
|
249
|
+
}
|
|
250
|
+
for k, v in rate_type_dict.items():
|
|
251
|
+
temp_df = pd.DataFrame.from_dict(json_data["fund_rates"][k], orient="columns")
|
|
252
|
+
temp_df["rate_type"] = v
|
|
244
253
|
temp_df = temp_df[
|
|
245
254
|
[
|
|
246
|
-
"
|
|
247
|
-
"
|
|
255
|
+
"rate_type",
|
|
256
|
+
"name",
|
|
257
|
+
"value",
|
|
248
258
|
]
|
|
249
259
|
]
|
|
250
260
|
temp_df.columns = [
|
|
251
|
-
"
|
|
252
|
-
"
|
|
261
|
+
"费用类型",
|
|
262
|
+
"条件或名称",
|
|
263
|
+
"费用",
|
|
253
264
|
]
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
265
|
+
combined_df = pd.concat(objs=[combined_df, temp_df], ignore_index=True)
|
|
266
|
+
combined_df["费用"] = pd.to_numeric(combined_df["费用"], errors="coerce")
|
|
267
|
+
return combined_df
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
def fund_individual_detail_hold_xq(
|
|
271
|
+
symbol: str = "002804", date: str = "20231231", timeout: float = None
|
|
272
|
+
) -> pd.DataFrame:
|
|
273
|
+
"""
|
|
274
|
+
雪球基金-持仓
|
|
275
|
+
https://danjuanfunds.com/rn/fund-detail/archive?id=103&code=002804
|
|
276
|
+
:param symbol: 基金代码
|
|
277
|
+
:type symbol: str
|
|
278
|
+
:param date: 财报日期
|
|
279
|
+
:type date: str
|
|
280
|
+
:param timeout: choice of None or a positive float number
|
|
281
|
+
:type timeout: float
|
|
282
|
+
:return: 雪球基金-持仓
|
|
283
|
+
:rtype: pandas.DataFrame
|
|
284
|
+
"""
|
|
285
|
+
url = "https://danjuanfunds.com/djapi/fundx/base/fund/record/asset/percent"
|
|
286
|
+
headers = {
|
|
287
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
288
|
+
"Chrome/80.0.3987.149 Safari/537.36"
|
|
289
|
+
}
|
|
290
|
+
params = {
|
|
291
|
+
"fund_code": f"{symbol}",
|
|
292
|
+
"report_date": f"{'-'.join([date[:4], date[4:6], date[6:]])}",
|
|
293
|
+
}
|
|
294
|
+
r = requests.get(url, headers=headers, params=params, timeout=timeout)
|
|
295
|
+
data_json = r.json()
|
|
296
|
+
temp_df = pd.DataFrame.from_dict(data_json["data"]["chart_list"], orient="columns")
|
|
297
|
+
temp_df = temp_df[
|
|
298
|
+
[
|
|
299
|
+
"type_desc",
|
|
300
|
+
"percent",
|
|
301
|
+
]
|
|
302
|
+
]
|
|
303
|
+
temp_df.columns = [
|
|
304
|
+
"资产类型",
|
|
305
|
+
"仓位占比",
|
|
306
|
+
]
|
|
307
|
+
temp_df["仓位占比"] = pd.to_numeric(temp_df["仓位占比"], errors="coerce")
|
|
308
|
+
return temp_df
|
|
283
309
|
|
|
284
310
|
|
|
285
311
|
if __name__ == "__main__":
|
|
@@ -292,11 +318,15 @@ if __name__ == "__main__":
|
|
|
292
318
|
fund_individual_analysis_xq_df = fund_individual_analysis_xq(symbol="000001")
|
|
293
319
|
print(fund_individual_analysis_xq_df)
|
|
294
320
|
|
|
295
|
-
fund_individual_profit_probability_xq_df = fund_individual_profit_probability_xq(
|
|
321
|
+
fund_individual_profit_probability_xq_df = fund_individual_profit_probability_xq(
|
|
322
|
+
symbol="000001"
|
|
323
|
+
)
|
|
296
324
|
print(fund_individual_profit_probability_xq_df)
|
|
297
325
|
|
|
298
|
-
fund_individual_detail_info_xq_df = fund_individual_detail_info_xq(
|
|
326
|
+
fund_individual_detail_info_xq_df = fund_individual_detail_info_xq(symbol="000001")
|
|
299
327
|
print(fund_individual_detail_info_xq_df)
|
|
300
328
|
|
|
301
|
-
|
|
302
|
-
|
|
329
|
+
fund_individual_detail_hold_xq_df = fund_individual_detail_hold_xq(
|
|
330
|
+
symbol="002804", date="20231231"
|
|
331
|
+
)
|
|
332
|
+
print(fund_individual_detail_hold_xq_df)
|
akshare/futures/cons.py
CHANGED
|
@@ -64,30 +64,6 @@ inventory_temp_headers = {
|
|
|
64
64
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
sample_headers = {
|
|
68
|
-
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
|
|
69
|
-
"Host": "service.99qh.com",
|
|
70
|
-
"Origin": "http://service.99qh.com",
|
|
71
|
-
"Referer": "http://www.99qh.com/d/store.aspx",
|
|
72
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
qh_headers = {
|
|
76
|
-
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
|
|
77
|
-
"Accept-Encoding": "gzip, deflate",
|
|
78
|
-
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
|
79
|
-
"Cache-Control": "no-cache",
|
|
80
|
-
"Connection": "keep-alive",
|
|
81
|
-
"Content-Length": "8429",
|
|
82
|
-
"Content-Type": "application/x-www-form-urlencoded",
|
|
83
|
-
"Host": "service.99qh.com",
|
|
84
|
-
"Origin": "http://service.99qh.com",
|
|
85
|
-
"Pragma": "no-cache",
|
|
86
|
-
"Cookie": "__utma=181566328.985082941.1656754961.1656754961.1656754961.1; __utmc=181566328; __utmz=181566328.1656754961.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); ASP.NET_SessionId=42k0mpzfu3fv5cxqmtrwc20y; tgw_l7_route=b26adbec28f4b4e1f7290033d59c43a7; __utmt=1; __utmb=181566328.2.10.1656754961",
|
|
87
|
-
"Referer": "http://service.99qh.com/Storage/Storage.aspx?page=99qh",
|
|
88
|
-
"Upgrade-Insecure-Requests": "1",
|
|
89
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
|
|
90
|
-
}
|
|
91
67
|
# 奇货可查
|
|
92
68
|
QHKC_INDEX_URL = "https://www.qhkch.com/ajax/index_show.php"
|
|
93
69
|
QHKC_INDEX_TREND_URL = "https://qhkch.com/ajax/indexes_trend.php"
|
|
@@ -100,7 +76,6 @@ QHKC_FUND_BIG_CHANGE_URL = "https://qhkch.com/ajax/fund_big_chge.php"
|
|
|
100
76
|
QHKC_TOOL_FOREIGN_URL = "https://qhkch.com/ajax/toolbox_foreign.php"
|
|
101
77
|
QHKC_TOOL_GDP_URL = "https://qhkch.com/dist/views/toolbox/gdp.html?v=1.10.7.1"
|
|
102
78
|
|
|
103
|
-
|
|
104
79
|
# 键值对: 键为交易所代码, 值为具体合约代码
|
|
105
80
|
market_exchange_symbols = {
|
|
106
81
|
"cffex": ["IF", "IC", "IM", "IH", "T", "TF", "TS", "TL"],
|
|
@@ -126,6 +101,7 @@ market_exchange_symbols = {
|
|
|
126
101
|
"EB", # 20191009
|
|
127
102
|
"PG",
|
|
128
103
|
"LH", # 20210108 生猪期货
|
|
104
|
+
"LG", # 20241118 原木期货
|
|
129
105
|
],
|
|
130
106
|
"czce": [
|
|
131
107
|
"WH",
|
|
@@ -228,7 +204,7 @@ dce_headers = {
|
|
|
228
204
|
SYS_SPOT_PRICE_URL = "http://www.100ppi.com/sf/day-{}.html"
|
|
229
205
|
SYS_SPOT_PRICE_LATEST_URL = "http://www.100ppi.com/sf/"
|
|
230
206
|
|
|
231
|
-
SHFE_VOL_RANK_URL = "
|
|
207
|
+
SHFE_VOL_RANK_URL = "https://tsite.shfe.com.cn/data/dailydata/kx/pm%s.dat"
|
|
232
208
|
CFFEX_VOL_RANK_URL = "http://www.cffex.com.cn/sj/ccpm/%s/%s/%s_1.csv"
|
|
233
209
|
DCE_VOL_RANK_URL_1 = "http://www.dce.com.cn/publicweb/quotesdata/exportMemberDealPosiQuotesData.html?memberDealPosiQuotes.variety=%s&memberDealPosiQuotes.trade_type=0&contract.contract_id=%s&contract.variety_id=%s&year=%s&month=%s&day=%s&exportFlag=txt"
|
|
234
210
|
DCE_VOL_RANK_URL_2 = "http://www.dce.com.cn/publicweb/quotesdata/memberDealPosiQuotes.html?memberDealPosiQuotes.variety=%s&memberDealPosiQuotes.trade_type=0&contract.contract_id=all&contract.variety_id=%s&year=%s&month=%s&day=%s"
|
|
@@ -240,8 +216,8 @@ CZCE_VOL_RANK_URL_3 = (
|
|
|
240
216
|
|
|
241
217
|
DCE_RECEIPT_URL = "http://www.dce.com.cn/publicweb/quotesdata/wbillWeeklyQuotes.html"
|
|
242
218
|
|
|
243
|
-
SHFE_RECEIPT_URL_1 = "http://
|
|
244
|
-
SHFE_RECEIPT_URL_2 = "http://
|
|
219
|
+
SHFE_RECEIPT_URL_1 = "http://tsite.shfe.com.cn/data/dailydata/%sdailystock.html"
|
|
220
|
+
SHFE_RECEIPT_URL_2 = "http://tsite.shfe.com.cn/data/dailydata/%sdailystock.dat"
|
|
245
221
|
CZCE_RECEIPT_URL_1 = "http://www.czce.com.cn/cn/exchange/jyxx/sheet/sheet%s.html"
|
|
246
222
|
CZCE_RECEIPT_URL_2 = "http://www.czce.com.cn/cn/exchange/%s/datawhsheet/%s.htm"
|
|
247
223
|
CZCE_RECEIPT_URL_3 = (
|
|
@@ -249,8 +225,8 @@ CZCE_RECEIPT_URL_3 = (
|
|
|
249
225
|
)
|
|
250
226
|
|
|
251
227
|
CFFEX_DAILY_URL = "http://www.cffex.com.cn/fzjy/mrhq/{}/{}/{}_1.csv"
|
|
252
|
-
SHFE_DAILY_URL = "http://
|
|
253
|
-
SHFE_V_WAP_URL = "http://
|
|
228
|
+
SHFE_DAILY_URL = "http://tsite.shfe.com.cn/data/dailydata/kx/kx%s.dat"
|
|
229
|
+
SHFE_V_WAP_URL = "http://tsite.shfe.com.cn/data/dailydata/ck/%sdailyTimePrice.dat"
|
|
254
230
|
DCE_DAILY_URL = "http://www.dce.com.cn//publicweb/quotesdata/dayQuotesCh.html"
|
|
255
231
|
CZCE_DAILY_URL_1 = "http://www.czce.com.cn/cn/exchange/jyxx/hq/hq%s.html"
|
|
256
232
|
CZCE_DAILY_URL_2 = "http://www.czce.com.cn/cn/exchange/%s/datadaily/%s.txt"
|
|
@@ -412,6 +388,7 @@ DCE_MAP = {
|
|
|
412
388
|
"苯乙烯": "EB",
|
|
413
389
|
"液化石油气": "PG",
|
|
414
390
|
"生猪": "LH",
|
|
391
|
+
"原木": "LG",
|
|
415
392
|
}
|
|
416
393
|
|
|
417
394
|
|
|
@@ -478,7 +455,7 @@ def get_calendar():
|
|
|
478
455
|
"""
|
|
479
456
|
setting_file_name = "calendar.json"
|
|
480
457
|
setting_file_path = get_json_path(setting_file_name, __file__)
|
|
481
|
-
with open(setting_file_path, "r") as f:
|
|
458
|
+
with open(setting_file_path, "r", encoding="utf-8") as f:
|
|
482
459
|
data_json = json.load(f)
|
|
483
460
|
return data_json
|
|
484
461
|
|