akshare 1.17.66__py3-none-any.whl → 1.17.68__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 CHANGED
@@ -3173,9 +3173,11 @@ amac_manager_cancelled_info # 中国证券投资基金业协会-信息公示-诚
3173
3173
  1.17.64 fix: fix stock_individual_spot_xq interface
3174
3174
  1.17.65 fix: fix futures_dce_warehouse_receipt interface
3175
3175
  1.17.66 fix: fix futures_delivery_czce interface
3176
+ 1.17.67 fix: fix stock_zh_a_hist_tx interface
3177
+ 1.17.68 fix: fix option_hist_dce interface
3176
3178
  """
3177
3179
 
3178
- __version__ = "1.17.66"
3180
+ __version__ = "1.17.68"
3179
3181
  __author__ = "AKFamily"
3180
3182
 
3181
3183
  import sys
@@ -5172,7 +5174,7 @@ from akshare.fx.currency_investing import (
5172
5174
  """
5173
5175
  商品期权-郑州商品交易所-期权-历史数据
5174
5176
  """
5175
- from akshare.option.option_czce import option_czce_hist
5177
+ from akshare.option.option_czce import option_hist_yearly_czce
5176
5178
 
5177
5179
  """
5178
5180
  宏观-经济数据-银行间拆借利率
@@ -5646,11 +5648,12 @@ from akshare.bond.bond_china import (
5646
5648
  商品期权
5647
5649
  """
5648
5650
  from akshare.option.option_commodity import (
5649
- option_dce_daily,
5650
- option_czce_daily,
5651
- option_shfe_daily,
5652
- option_gfex_vol_daily,
5653
- option_gfex_daily,
5651
+ option_hist_dce,
5652
+ option_hist_czce,
5653
+ option_hist_shfe,
5654
+ option_vol_gfex,
5655
+ option_hist_gfex,
5656
+ option_vol_shfe,
5654
5657
  )
5655
5658
 
5656
5659
  """
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2025/1/24 23:00
4
+ Date: 2025/10/17 21:00
5
5
  Desc: 商品期权数据
6
6
  说明:
7
7
  (1) 价格:自2019年12月02日起,纤维板报价单位由元/张改为元/立方米
@@ -16,8 +16,7 @@ Desc: 商品期权数据
16
16
 
17
17
  import datetime
18
18
  import warnings
19
- from io import StringIO, BytesIO
20
- from typing import Tuple, Any, Optional
19
+ from io import StringIO
21
20
 
22
21
  import pandas as pd
23
22
  import requests
@@ -25,15 +24,14 @@ import requests
25
24
  from akshare.option.cons import (
26
25
  get_calendar,
27
26
  convert_date,
28
- DCE_DAILY_OPTION_URL,
29
27
  CZCE_DAILY_OPTION_URL_3,
30
28
  SHFE_HEADERS,
31
29
  )
32
30
 
33
31
 
34
- def option_dce_daily(
35
- symbol: str = "聚乙烯期权", trade_date: str = "20210728"
36
- ) -> Optional[Tuple[Any, Any]]:
32
+ def option_hist_dce(
33
+ symbol: str = "聚丙烯期权", trade_date: str = "20251016"
34
+ ) -> pd.DataFrame:
37
35
  """
38
36
  大连商品交易所-期权-日频行情数据
39
37
  http://www.dce.com.cn/
@@ -46,125 +44,103 @@ def option_dce_daily(
46
44
  :return: 日频行情数据
47
45
  :rtype: pandas.DataFrame
48
46
  """
47
+ option_code_map = {
48
+ "玉米期权": "c",
49
+ "豆粕期权": "m",
50
+ "铁矿石期权": "i",
51
+ "液化石油气期权": "pg",
52
+ "聚乙烯期权": "l",
53
+ "聚氯乙烯期权": "v",
54
+ "聚丙烯期权": "pp",
55
+ "棕榈油期权": "p",
56
+ "黄大豆1号期权": "a",
57
+ "黄大豆2号期权": "b",
58
+ "豆油期权": "y",
59
+ "乙二醇期权": "eg",
60
+ "苯乙烯期权": "eb",
61
+ "鸡蛋期权": "jd",
62
+ "玉米淀粉期权": "cs",
63
+ "生猪期权": "lh",
64
+ "原木期权": "lg"
65
+ }
49
66
  calendar = get_calendar()
50
67
  day = convert_date(trade_date) if trade_date is not None else datetime.date.today()
51
68
  if day.strftime("%Y%m%d") not in calendar:
52
69
  warnings.warn("%s非交易日" % day.strftime("%Y%m%d"))
53
- return pd.DataFrame(), pd.DataFrame()
54
- url = DCE_DAILY_OPTION_URL
70
+ return pd.DataFrame()
71
+ url = "http://www.dce.com.cn/dcereport/publicweb/dailystat/dayQuotes"
55
72
  payload = {
56
- "dayQuotes.variety": "all",
57
- "dayQuotes.trade_type": "1",
58
- "year": str(day.year),
59
- "month": str(day.month - 1),
60
- "day": str(day.day),
61
- "exportFlag": "excel",
73
+ "contractId": "",
74
+ "lang": "zh",
75
+ "optionSeries": "",
76
+ "statisticsType": 0,
77
+ "tradeDate": f"{trade_date}",
78
+ "tradeType": "2",
79
+ "varietyId": f"{option_code_map[symbol]}",
62
80
  }
63
- res = requests.post(url, data=payload)
64
- table_df = pd.read_excel(BytesIO(res.content), header=1)
65
- # 从合约名称中提取合约系列, 例如: "c2001-C-1680" -> "c2001". 然后去重, 保留隐含波动率.
66
- another_df = table_df["合约名称"].str.extract(r"([a-zA-Z]+[0-9]+)")
67
- another_df.columns = ["合约系列"]
68
- another_df["隐含波动率(%)"] = table_df["隐含波动率(%)"]
69
- another_df.dropna(inplace=True)
70
- another_df.drop_duplicates(subset="合约系列", inplace=True)
71
-
72
- result_one_df = pd.DataFrame()
73
- result_two_df = pd.DataFrame()
74
- if symbol == "豆粕期权":
75
- result_one_df, result_two_df = (
76
- table_df[table_df["商品名称"] == "豆粕"],
77
- another_df[another_df.iloc[:, 0].str.contains("m")],
78
- )
79
- elif symbol == "玉米期权":
80
- result_one_df, result_two_df = (
81
- table_df[table_df["商品名称"] == "玉米"],
82
- another_df[another_df.iloc[:, 0].str.contains(r"^c\d")],
83
- )
84
- elif symbol == "铁矿石期权":
85
- result_one_df, result_two_df = (
86
- table_df[table_df["商品名称"] == "铁矿石"],
87
- another_df[another_df.iloc[:, 0].str.contains("i")],
88
- )
89
- elif symbol == "液化石油气期权":
90
- result_one_df, result_two_df = (
91
- table_df[table_df["商品名称"] == "液化石油气"],
92
- another_df[another_df.iloc[:, 0].str.contains("pg")],
93
- )
94
- elif symbol == "聚乙烯期权":
95
- result_one_df, result_two_df = (
96
- table_df[table_df["商品名称"] == "聚乙烯"],
97
- another_df[another_df.iloc[:, 0].str.contains(r"^l\d")],
98
- )
99
- elif symbol == "聚氯乙烯期权":
100
- result_one_df, result_two_df = (
101
- table_df[table_df["商品名称"] == "聚氯乙烯"],
102
- another_df[another_df.iloc[:, 0].str.contains("v")],
103
- )
104
- elif symbol == "聚丙烯期权":
105
- result_one_df, result_two_df = (
106
- table_df[table_df["商品名称"] == "聚丙烯"],
107
- another_df[another_df.iloc[:, 0].str.contains("pp")],
108
- )
109
- elif symbol == "棕榈油期权":
110
- result_one_df, result_two_df = (
111
- table_df[table_df["商品名称"] == "棕榈油"],
112
- another_df[another_df.iloc[:, 0].str.contains(r"^p\d")],
113
- )
114
- elif symbol == "黄大豆1号期权":
115
- result_one_df, result_two_df = (
116
- table_df[table_df["商品名称"] == "豆一"],
117
- another_df[another_df.iloc[:, 0].str.contains("a")],
118
- )
119
- elif symbol == "黄大豆2号期权":
120
- result_one_df, result_two_df = (
121
- table_df[table_df["商品名称"] == "豆二"],
122
- another_df[another_df.iloc[:, 0].str.contains(r"^b\d")],
123
- )
124
- elif symbol == "豆油期权":
125
- result_one_df, result_two_df = (
126
- table_df[table_df["商品名称"] == "豆油"],
127
- another_df[another_df.iloc[:, 0].str.contains("y")],
128
- )
129
- elif symbol == "乙二醇期权":
130
- result_one_df, result_two_df = (
131
- table_df[table_df["商品名称"] == "乙二醇"],
132
- another_df[another_df.iloc[:, 0].str.contains("eg")],
133
- )
134
- elif symbol == "苯乙烯期权":
135
- result_one_df, result_two_df = (
136
- table_df[table_df["商品名称"] == "苯乙烯"],
137
- another_df[another_df.iloc[:, 0].str.contains("eb")],
138
- )
139
- elif symbol == "鸡蛋期权":
140
- result_one_df, result_two_df = (
141
- table_df[table_df["商品名称"] == "鸡蛋"],
142
- another_df[another_df.iloc[:, 0].str.contains("jd")],
143
- )
144
- elif symbol == "玉米淀粉期权":
145
- result_one_df, result_two_df = (
146
- table_df[table_df["商品名称"] == "玉米淀粉"],
147
- another_df[another_df.iloc[:, 0].str.contains("cs")],
148
- )
149
- elif symbol == "生猪期权":
150
- result_one_df, result_two_df = (
151
- table_df[table_df["商品名称"] == "生猪"],
152
- another_df[another_df.iloc[:, 0].str.contains("lh")],
153
- )
154
- elif symbol == "原木期权":
155
- result_one_df, result_two_df = (
156
- table_df[table_df["商品名称"] == "原木"],
157
- another_df[another_df.iloc[:, 0].str.contains("lg")],
158
- )
159
- elif symbol == "纯苯期权":
160
- result_one_df, result_two_df = (
161
- table_df[table_df["商品名称"] == "纯苯"],
162
- another_df[another_df.iloc[:, 0].str.contains("bz")],
81
+ r = requests.post(url, json=payload)
82
+ data_json = r.json()
83
+ temp_df = pd.DataFrame(data_json["data"])
84
+ temp_df.rename(
85
+ columns={
86
+ 'variety': '品种名称',
87
+ 'contractId': '合约',
88
+ 'open': '开盘价',
89
+ 'high': '最高价',
90
+ 'low': '最低价',
91
+ 'close': '收盘价',
92
+ 'lastClear': '前结算价',
93
+ 'clearPrice': '结算价',
94
+ 'diff': '涨跌',
95
+ 'diff1': '涨跌1',
96
+ 'delta': 'Delta',
97
+ 'volumn': '成交量', # 注意:你写的是“volumn”,可能是拼写错误,应为“volume”
98
+ 'openInterest': '持仓量',
99
+ 'diffI': '持仓量变化',
100
+ 'turnover': '成交额',
101
+ 'matchQtySum': '行权量',
102
+ 'impliedVolatility': '隐含波动率(%)',
103
+ }, inplace=True
104
+ )
105
+ temp_df = temp_df[[
106
+ '品种名称',
107
+ '合约',
108
+ '开盘价',
109
+ '最高价',
110
+ '最低价',
111
+ '收盘价',
112
+ '前结算价',
113
+ '结算价',
114
+ '涨跌',
115
+ '涨跌1',
116
+ 'Delta',
117
+ '隐含波动率(%)',
118
+ '成交量',
119
+ '持仓量',
120
+ '持仓量变化',
121
+ '成交额',
122
+ '行权量'
123
+ ]]
124
+ comma_cols = ['开盘价',
125
+ '最高价',
126
+ '最低价',
127
+ '收盘价',
128
+ '前结算价',
129
+ '结算价',
130
+ '涨跌',
131
+ '涨跌1',
132
+ 'Delta',
133
+ '隐含波动率(%)',
134
+ '成交额',
135
+ ] # 需要处理的列
136
+ for col in comma_cols:
137
+ temp_df[col] = (
138
+ temp_df[col]
139
+ .astype(str)
140
+ .str.replace(',', '')
141
+ .pipe(pd.to_numeric, errors='coerce')
163
142
  )
164
- result_one_df.reset_index(inplace=True, drop=True)
165
- result_two_df.reset_index(inplace=True, drop=True)
166
- result_two_df.columns.name = None
167
- return result_one_df, result_two_df
143
+ return temp_df
168
144
 
169
145
 
170
146
  def __option_czce_daily_convert_numeric_columns(df):
@@ -204,7 +180,7 @@ def __option_czce_daily_convert_numeric_columns(df):
204
180
  return df_copy
205
181
 
206
182
 
207
- def option_czce_daily(
183
+ def option_hist_czce(
208
184
  symbol: str = "白糖期权", trade_date: str = "20191017"
209
185
  ) -> pd.DataFrame:
210
186
  """
@@ -382,9 +358,9 @@ def option_czce_daily(
382
358
  return pd.DataFrame()
383
359
 
384
360
 
385
- def option_shfe_daily(
361
+ def option_hist_shfe(
386
362
  symbol: str = "铝期权", trade_date: str = "20250418"
387
- ) -> Optional[Tuple[pd.DataFrame, pd.DataFrame]]:
363
+ ) -> pd.DataFrame:
388
364
  """
389
365
  上海期货交易所-期权-日频行情数据
390
366
  https://www.shfe.com.cn/reports/tradedata/dailyandweeklydata/
@@ -400,7 +376,7 @@ def option_shfe_daily(
400
376
  day = convert_date(trade_date) if trade_date is not None else datetime.date.today()
401
377
  if day.strftime("%Y%m%d") not in calendar:
402
378
  warnings.warn("%s非交易日" % day.strftime("%Y%m%d"))
403
- return pd.DataFrame(), pd.DataFrame()
379
+ return pd.DataFrame()
404
380
  if day > datetime.date(year=2010, month=8, day=24):
405
381
  url = f"""https://www.shfe.com.cn/data/tradedata/option/dailydata/kx{day.strftime("%Y%m%d")}.dat"""
406
382
  try:
@@ -411,14 +387,10 @@ def option_shfe_daily(
411
387
  row
412
388
  for row in json_data["o_curinstrument"]
413
389
  if row["INSTRUMENTID"] not in ["小计", "合计"]
414
- and row["INSTRUMENTID"] != ""
390
+ and row["INSTRUMENTID"] != ""
415
391
  ]
416
392
  )
417
393
  contract_df = table_df[table_df["PRODUCTNAME"].str.strip() == symbol]
418
- volatility_df = pd.DataFrame(json_data["o_cursigma"])
419
- volatility_df = volatility_df[
420
- volatility_df["PRODUCTNAME"].str.strip() == symbol
421
- ]
422
394
  contract_df.rename(
423
395
  columns={
424
396
  "INSTRUMENTID": "合约代码",
@@ -457,6 +429,42 @@ def option_shfe_daily(
457
429
  "行权量",
458
430
  ]
459
431
  ]
432
+ contract_df.reset_index(inplace=True, drop=True)
433
+ return contract_df
434
+ except: # noqa: E722
435
+ return pd.DataFrame()
436
+ else:
437
+ return pd.DataFrame()
438
+
439
+
440
+ def option_vol_shfe(
441
+ symbol: str = "铝期权", trade_date: str = "20250418"
442
+ ) -> pd.DataFrame:
443
+ """
444
+ 上海期货交易所-期权-日频行情数据
445
+ https://www.shfe.com.cn/reports/tradedata/dailyandweeklydata/
446
+ :param trade_date: 交易日
447
+ :type trade_date: str
448
+ :param symbol: choice of {'原油期权', '铜期权', '铝期权', '锌期权', '铅期权', '螺纹钢期权', '镍期权', '锡期权', '氧化铝期权',
449
+ '黄金期权', '白银期权', '丁二烯橡胶期权', '天胶期权'}
450
+ :type symbol: str
451
+ :return: 日频行情数据
452
+ :rtype: pandas.DataFrame
453
+ """
454
+ calendar = get_calendar()
455
+ day = convert_date(trade_date) if trade_date is not None else datetime.date.today()
456
+ if day.strftime("%Y%m%d") not in calendar:
457
+ warnings.warn("%s非交易日" % day.strftime("%Y%m%d"))
458
+ return pd.DataFrame()
459
+ if day > datetime.date(year=2010, month=8, day=24):
460
+ url = f"""https://www.shfe.com.cn/data/tradedata/option/dailydata/kx{day.strftime("%Y%m%d")}.dat"""
461
+ try:
462
+ r = requests.get(url, headers=SHFE_HEADERS)
463
+ json_data = r.json()
464
+ volatility_df = pd.DataFrame(json_data["o_cursigma"])
465
+ volatility_df = volatility_df[
466
+ volatility_df["PRODUCTNAME"].str.strip() == symbol
467
+ ]
460
468
  volatility_df.rename(columns={
461
469
  "INSTRUMENTID": "合约系列",
462
470
  "VOLUME": "成交量",
@@ -477,16 +485,15 @@ def option_shfe_daily(
477
485
  "隐含波动率",
478
486
  ]
479
487
  ]
480
- contract_df.reset_index(inplace=True, drop=True)
481
488
  volatility_df.reset_index(inplace=True, drop=True)
482
- return contract_df, volatility_df
489
+ return volatility_df
483
490
  except: # noqa: E722
484
- return pd.DataFrame(), pd.DataFrame()
491
+ return pd.DataFrame()
485
492
  else:
486
- return pd.DataFrame(), pd.DataFrame()
493
+ return pd.DataFrame()
487
494
 
488
495
 
489
- def option_gfex_daily(symbol: str = "工业硅", trade_date: str = "20230724"):
496
+ def option_hist_gfex(symbol: str = "工业硅", trade_date: str = "20230724") -> pd.DataFrame:
490
497
  """
491
498
  广州期货交易所-日频率-量价数据
492
499
  http://www.gfex.com.cn/gfex/rihq/hqsj_tjsj.shtml
@@ -501,7 +508,7 @@ def option_gfex_daily(symbol: str = "工业硅", trade_date: str = "20230724"):
501
508
  day = convert_date(trade_date) if trade_date is not None else datetime.date.today()
502
509
  if day.strftime("%Y%m%d") not in calendar:
503
510
  warnings.warn("%s非交易日" % day.strftime("%Y%m%d"))
504
- return
511
+ return pd.DataFrame()
505
512
  url = "http://www.gfex.com.cn/u/interfacesWebTiDayQuotes/loadList"
506
513
  payload = {"trade_date": day.strftime("%Y%m%d"), "trade_type": "1"}
507
514
  headers = {
@@ -517,7 +524,7 @@ def option_gfex_daily(symbol: str = "工业硅", trade_date: str = "20230724"):
517
524
  "Proxy-Connection": "keep-alive",
518
525
  "Referer": "http://www.gfex.com.cn/gfex/rihq/hqsj_tjsj.shtml",
519
526
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
520
- "Chrome/108.0.0.0 Safari/537.36",
527
+ "Chrome/108.0.0.0 Safari/537.36",
521
528
  "X-Requested-With": "XMLHttpRequest",
522
529
  "content-type": "application/x-www-form-urlencoded",
523
530
  }
@@ -573,7 +580,7 @@ def option_gfex_daily(symbol: str = "工业硅", trade_date: str = "20230724"):
573
580
  return temp_df
574
581
 
575
582
 
576
- def option_gfex_vol_daily(symbol: str = "碳酸锂", trade_date: str = "20230724"):
583
+ def option_vol_gfex(symbol: str = "碳酸锂", trade_date: str = "20230724"):
577
584
  """
578
585
  广州期货交易所-日频率-合约隐含波动率
579
586
  http://www.gfex.com.cn/gfex/rihq/hqsj_tjsj.shtml
@@ -609,7 +616,7 @@ def option_gfex_vol_daily(symbol: str = "碳酸锂", trade_date: str = "20230724
609
616
  "Proxy-Connection": "keep-alive",
610
617
  "Referer": "http://www.gfex.com.cn/gfex/rihq/hqsj_tjsj.shtml",
611
618
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
612
- "Chrome/108.0.0.0 Safari/537.36",
619
+ "Chrome/108.0.0.0 Safari/537.36",
613
620
  "X-Requested-With": "XMLHttpRequest",
614
621
  "content-type": "application/x-www-form-urlencoded",
615
622
  }
@@ -636,40 +643,20 @@ def option_gfex_vol_daily(symbol: str = "碳酸锂", trade_date: str = "20230724
636
643
 
637
644
 
638
645
  if __name__ == "__main__":
639
- option_czce_daily_df = option_czce_daily(symbol="丙烯期货", trade_date="20250812")
640
- print(option_czce_daily_df)
646
+ option_hist_czce_df = option_hist_czce(symbol="白糖期权", trade_date="20250812")
647
+ print(option_hist_czce_df)
641
648
 
642
- option_dce_daily_one, option_dce_daily_two = option_dce_daily(
643
- symbol="纯苯期权", trade_date="20250814"
644
- )
645
- print(option_dce_daily_one)
646
- print(option_dce_daily_two)
649
+ option_hist_dce_df = option_hist_dce(symbol="聚丙烯期权", trade_date="20250812")
650
+ print(option_hist_dce_df)
647
651
 
648
- option_dce_daily_one, option_dce_daily_two = option_dce_daily(
649
- symbol="苯乙烯期权", trade_date="20230516"
650
- )
651
- print(option_dce_daily_one)
652
- print(option_dce_daily_two)
652
+ option_hist_shfe_df = option_hist_shfe(symbol="天胶期权", trade_date="20250418")
653
+ print(option_hist_shfe_df)
653
654
 
654
- option_dce_daily_one, option_dce_daily_two = option_dce_daily(
655
- symbol="聚乙烯期权", trade_date="20250210"
656
- )
657
- print(option_dce_daily_one)
658
- print(option_dce_daily_two)
655
+ option_vol_shfe_df = option_vol_shfe(symbol="天胶期权", trade_date="20250418")
656
+ print(option_vol_shfe_df)
659
657
 
660
- option_shfe_daily_one, option_shfe_daily_two = option_shfe_daily(
661
- symbol="天胶期权", trade_date="20250418"
662
- )
663
- print(option_shfe_daily_one)
664
- print(option_shfe_daily_two)
665
-
666
- option_gfex_daily_df = option_gfex_daily(symbol="工业硅", trade_date="20250801")
667
- print(option_gfex_daily_df)
668
-
669
- option_gfex_vol_daily_df = option_gfex_vol_daily(
670
- symbol="多晶硅", trade_date="20250123"
671
- )
672
- print(option_gfex_vol_daily_df)
658
+ option_hist_gfex_df = option_hist_gfex(symbol="工业硅", trade_date="20250801")
659
+ print(option_hist_gfex_df)
673
660
 
674
- option_czce_daily_df = option_czce_daily(symbol="瓶片期权", trade_date="20250103")
675
- print(option_czce_daily_df)
661
+ option_vol_gfex_df = option_vol_gfex(symbol="多晶硅", trade_date="20250123")
662
+ print(option_vol_gfex_df)
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2025/3/22 16:30
4
+ Date: 2025/10/17 16:30
5
5
  Desc: 郑州商品交易所-交易数据-历史行情下载-期权历史行情下载
6
6
  http://www.czce.com.cn/cn/jysj/lshqxz/H770319index_1.htm
7
7
  自 20200101 起,成交量、空盘量、成交额、行权量均为单边计算
@@ -27,14 +27,14 @@ http://www.czce.com.cn/cn/jysj/lshqxz/H770319index_1.htm
27
27
  "PR": "20241227"
28
28
  """
29
29
 
30
- from io import StringIO
31
30
  import warnings
31
+ from io import StringIO
32
32
 
33
33
  import pandas as pd
34
34
  import requests
35
35
 
36
36
 
37
- def option_czce_hist(symbol: str = "SR", year: str = "2021") -> pd.DataFrame:
37
+ def option_hist_yearly_czce(symbol: str = "SR", year: str = "2021") -> pd.DataFrame:
38
38
  """
39
39
  郑州商品交易所-交易数据-历史行情下载-期权历史行情下载
40
40
  http://www.czce.com.cn/cn/jysj/lshqxz/H770319index_1.htm
@@ -78,5 +78,5 @@ def option_czce_hist(symbol: str = "SR", year: str = "2021") -> pd.DataFrame:
78
78
 
79
79
 
80
80
  if __name__ == "__main__":
81
- option_czce_hist_df = option_czce_hist(symbol="RM", year="2025")
82
- print(option_czce_hist_df)
81
+ option_hist_yearly_czce_df = option_hist_yearly_czce(symbol="RM", year="2025")
82
+ print(option_hist_yearly_czce_df)
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/7/25 15:30
4
+ Date: 2025/10/15 22:30
5
5
  Desc: 腾讯证券-行情首页-沪深京A股
6
6
  https://quote.eastmoney.com/
7
7
  """
@@ -77,7 +77,8 @@ def stock_zh_a_hist_tx(
77
77
  big_df["low"] = pd.to_numeric(big_df["low"], errors="coerce")
78
78
  big_df["amount"] = pd.to_numeric(big_df["amount"], errors="coerce")
79
79
  big_df.drop_duplicates(inplace=True, ignore_index=True)
80
- big_df.index = pd.to_datetime(big_df["date"])
80
+ big_df.index = pd.to_datetime(big_df["date"], errors="coerce")
81
+ big_df.sort_index(inplace=True)
81
82
  big_df = big_df[start_date:end_date]
82
83
  big_df.reset_index(inplace=True, drop=True)
83
84
  return big_df
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: akshare
3
- Version: 1.17.66
3
+ Version: 1.17.68
4
4
  Summary: AKShare is an elegant and simple financial data interface library for Python, built for human beings!
5
5
  Home-page: https://github.com/akfamily/akshare
6
6
  Author: AKFamily
@@ -1,4 +1,4 @@
1
- akshare/__init__.py,sha256=F5C7x0FfCQwnWM0e-usbkTKxEliHAC4WI_xtWGk1aY4,199283
1
+ akshare/__init__.py,sha256=h7KzT213r-8t0QG5W31eMBYtxWhYcE5BS2ZX1Jb7QHI,199390
2
2
  akshare/datasets.py,sha256=rKuRNZrqi6IMsZ9nyvO3Rx02js0tH3zMLjz8HQNAoPQ,963
3
3
  akshare/exceptions.py,sha256=WEJjIhSmJ_xXNW6grwV4nufE_cfmmyuhmueVGiN1VAg,878
4
4
  akshare/request.py,sha256=HtFFf9MhfEibR-ETWe-1Tts6ELU4VKSqA-ghaXjegQM,4252
@@ -199,11 +199,11 @@ akshare/nlp/nlp_interface.py,sha256=PyZjT3PkuTbloop-JwLwZ2kNi22zdO-r_pRUWQ5SmgM,
199
199
  akshare/option/__init__.py,sha256=RMTf1bT5EOE3ttWpn3hGu1LtUmsVxDoa0W7W0gXHOy8,81
200
200
  akshare/option/cons.py,sha256=WgeX4UvkvFmTsNTMYwXcIJkqSfCw6A3hn3qM73QrIM0,4817
201
201
  akshare/option/option_comm_qihuo.py,sha256=kjbdp-94KJJJi1ex5U03abtlgviqwP0Aahb6FwddPkk,3128
202
- akshare/option/option_commodity.py,sha256=TZTwj3lB3mhK5JCSvar2hgC_xY7J-HMkP-fp-9thO18,27924
202
+ akshare/option/option_commodity.py,sha256=tgWqOXBy-GW78qRcsDdn6br-DDWhldQtix5nDN2A4EE,26333
203
203
  akshare/option/option_commodity_sina.py,sha256=NN2qywfGZphKlHiEuwU7_3aNXTEKaXH0UrU8xLIQ5XQ,7731
204
204
  akshare/option/option_current_sse.py,sha256=jdzQPTXNqFLURMdbqovhOeQNvemN59beuotIJzhdNX8,2033
205
205
  akshare/option/option_current_szse.py,sha256=_6QTRnpLoVwXnUtSPDR1pqEq27Lnksq_9Sl_O06kP28,3551
206
- akshare/option/option_czce.py,sha256=TxmLZn6hxjZa8TyEpwhZazL2m5XbympRHaRjJw1q7lk,2509
206
+ akshare/option/option_czce.py,sha256=9FCgqgxrHX3DBdvg3F6HZ1Hs7uSO7w21KJWpS8Wykgg,2538
207
207
  akshare/option/option_daily_stats_sse_szse.py,sha256=Igqi2IPX_1UT2qgIsPDJtSZ660TjvHy9twn_q7Vrodw,4932
208
208
  akshare/option/option_em.py,sha256=9Vm5tDk-i8a0ybzWwa13sUBbWPp5HskYzBlfcs-rF7g,5830
209
209
  akshare/option/option_finance.py,sha256=7rnEeHo-7Sddrs36Q4c99CXL_9m8IJzw9S1Aqh3Bw90,12568
@@ -331,7 +331,7 @@ akshare/stock_feature/stock_gdzjc_em.py,sha256=3bx2kQmM7OeZWoa9WtkwoCXVaMfIUZw23
331
331
  akshare/stock_feature/stock_gpzy_em.py,sha256=FgyjVgdoxrtMM7WwxdQJxK0mYGJklIHaT9KmMCFmEPM,17869
332
332
  akshare/stock_feature/stock_gxl_lg.py,sha256=iX-lYPZI4c7Jh_j8P6eT8eSNLmLHl_8NjsWYJ4qiufI,2644
333
333
  akshare/stock_feature/stock_hist_em.py,sha256=sS7qv6kNvS36YsYtx3fCX2QW_HBH6ju1fHi-KMm5p-Q,65493
334
- akshare/stock_feature/stock_hist_tx.py,sha256=T3eegWWohahHzsFOx58qJFLq9QQRUiDXEaiJdQLkex0,3346
334
+ akshare/stock_feature/stock_hist_tx.py,sha256=3Ogdg0yOtzTN8mxQDIqDxcreM3O4LstP43RYWOKZJi0,3400
335
335
  akshare/stock_feature/stock_hk_valuation_baidu.py,sha256=_sErx4UhNsSXJgXyPfrL0aPxkW53Mg1zH9gEKoziaCA,1968
336
336
  akshare/stock_feature/stock_hot_xq.py,sha256=P4-fLjrh-9CdVe5BQ2O5hmeSesHQAu9E49aMKmhMedM,9023
337
337
  akshare/stock_feature/stock_hsgt_em.py,sha256=6X4izxAbApHIO1YK2nYaZCE1hdn18tTbGjJta4Q-7a0,62222
@@ -399,10 +399,10 @@ akshare/utils/func.py,sha256=4cwmXFztU86yJNONJ40KJLvsIEQHBbct4iMm3zT2v30,2315
399
399
  akshare/utils/multi_decrypt.py,sha256=aWoL2iEPeuXHJg8-n7OtMKixLnIhfzepACgxfrfmQB4,1657
400
400
  akshare/utils/token_process.py,sha256=nGtgnZGRprXJkhLXH8mcUH4TgIFwzsTOb0EaEPa0Euo,667
401
401
  akshare/utils/tqdm.py,sha256=MuPNwcswkOGjwWQOMWXi9ZvQ_RmW4obCWRj2i7HM7FE,847
402
- akshare-1.17.66.dist-info/licenses/LICENSE,sha256=s18q7gS2g1F9-Cnk5eqrJG4OGWSwSxVEMzIuT6HyYNY,1073
402
+ akshare-1.17.68.dist-info/licenses/LICENSE,sha256=s18q7gS2g1F9-Cnk5eqrJG4OGWSwSxVEMzIuT6HyYNY,1073
403
403
  tests/__init__.py,sha256=gNzhlO0UPjFq6Ieb38kaVIODXv4cTDByrdohAZnDYt4,82
404
404
  tests/test_func.py,sha256=j1MGYbZI2if2j_LY1S4FLsf4qfq4NwVqD5wmRlv5Log,832
405
- akshare-1.17.66.dist-info/METADATA,sha256=zCJBVC2xdZbnVy1eV9mRs343tQRV2Qi6Iv5IO1YPUdQ,12593
406
- akshare-1.17.66.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
407
- akshare-1.17.66.dist-info/top_level.txt,sha256=jsf9ZzZPmHaISTVumQPsAw7vv7Yv-PdEVW70SMEelQQ,14
408
- akshare-1.17.66.dist-info/RECORD,,
405
+ akshare-1.17.68.dist-info/METADATA,sha256=N8X0jfiSurrJfw1PUbUn9R-yFAZ4RYiwb28-5ucvmfE,12593
406
+ akshare-1.17.68.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
407
+ akshare-1.17.68.dist-info/top_level.txt,sha256=jsf9ZzZPmHaISTVumQPsAw7vv7Yv-PdEVW70SMEelQQ,14
408
+ akshare-1.17.68.dist-info/RECORD,,