akshare 1.15.9__py3-none-any.whl → 1.15.10__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.
akshare/__init__.py CHANGED
@@ -2919,9 +2919,10 @@ amac_manager_cancelled_info # 中国证券投资基金业协会-信息公示-诚
2919
2919
  1.15.7 fix: fix index_hist_sw interface
2920
2920
  1.15.8 fix: fix fund_individual_basic_info_xq interface
2921
2921
  1.15.9 fix: fix index_analysis_weekly_sw interface
2922
+ 1.15.10 add: add volatility_yz_rv indicator
2922
2923
  """
2923
2924
 
2924
- __version__ = "1.15.9"
2925
+ __version__ = "1.15.10"
2925
2926
  __author__ = "AKFamily"
2926
2927
 
2927
2928
  import sys
@@ -2943,6 +2944,11 @@ if sys.version_info < (3, 9):
2943
2944
 
2944
2945
  del sys
2945
2946
 
2947
+ """
2948
+ 已实现波动率
2949
+ """
2950
+ from akshare.cal.rv import volatility_yz_rv, rv_from_futures_zh_minute_sina, rv_from_stock_zh_a_hist_min_em
2951
+
2946
2952
  """
2947
2953
  QDII
2948
2954
  """
File without changes
akshare/cal/rv.py ADDED
@@ -0,0 +1,168 @@
1
+ """
2
+ Yang-Zhang-s-Realized-Volatility-Automated-Estimation-in-Python
3
+ https://github.com/hugogobato/Yang-Zhang-s-Realized-Volatility-Automated-Estimation-in-Python
4
+ """
5
+
6
+ import warnings
7
+
8
+ import numpy as np
9
+ import pandas as pd
10
+
11
+
12
+ def rv_from_stock_zh_a_hist_min_em(
13
+ symbol="000001",
14
+ start_date="2021-10-20 09:30:00",
15
+ end_date="2024-11-01 15:00:00",
16
+ period="1",
17
+ adjust="hfq",
18
+ ) -> pd.DataFrame:
19
+ """
20
+ 从东方财富网获取股票的分钟级历史行情数据,并进行数据清洗和格式化为计算 yz 已实现波动率所需的数据格式
21
+ https://quote.eastmoney.com/concept/sh603777.html?from=classic
22
+ :param symbol: 股票代码,如"000001"
23
+ :type symbol: str
24
+ :param start_date: 开始日期时间,格式"YYYY-MM-DD HH:MM:SS"
25
+ :type start_date: str
26
+ :param end_date: 结束日期时间,格式"YYYY-MM-DD HH:MM:SS"
27
+ :type end_date: str
28
+ :param period: 时间周期,可选{'1','5','15','30','60'}分钟
29
+ :type period: str
30
+ :param adjust: 复权方式,可选{'','qfq'(前复权),'hfq'(后复权)}
31
+ :type adjust: str
32
+ :return: 整理后的分钟行情数据,包含Date(索引),Open,High,Low,Close列
33
+ :rtype: pandas.DataFrame
34
+ """
35
+ from akshare.stock_feature.stock_hist_em import stock_zh_a_hist_min_em
36
+
37
+ temp_df = stock_zh_a_hist_min_em(
38
+ symbol=symbol,
39
+ start_date=start_date,
40
+ end_date=end_date,
41
+ period=period,
42
+ adjust=adjust,
43
+ )
44
+ temp_df.rename(
45
+ columns={
46
+ "时间": "Date",
47
+ "开盘": "Open",
48
+ "最高": "High",
49
+ "最低": "Low",
50
+ "收盘": "Close",
51
+ },
52
+ inplace=True,
53
+ )
54
+ temp_df = temp_df[temp_df["Open"] != 0]
55
+ temp_df["Date"] = pd.to_datetime(temp_df["Date"])
56
+ temp_df.set_index(keys="Date", inplace=True)
57
+ return temp_df
58
+
59
+
60
+ def rv_from_futures_zh_minute_sina(
61
+ symbol: str = "IF2008", period: str = "5"
62
+ ) -> pd.DataFrame:
63
+ """
64
+ 从新浪财经获取期货的分钟级历史行情数据,并进行数据清洗和格式化
65
+ https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_3
66
+ :param symbol: 期货合约代码,如"IF2008"代表沪深300期货2020年8月合约
67
+ :type symbol: str
68
+ :param period: 时间周期,可选{'1','5','15','30','60'}分钟
69
+ :type period: str
70
+ :return: 整理后的分钟行情数据,包含Date(索引),Open,High,Low,Close列
71
+ :rtype: pandas.DataFrame
72
+ """
73
+ from akshare.futures.futures_zh_sina import futures_zh_minute_sina
74
+
75
+ temp_df = futures_zh_minute_sina(symbol=symbol, period=period)
76
+ temp_df.rename(
77
+ columns={
78
+ "datetime": "Date",
79
+ "open": "Open",
80
+ "high": "High",
81
+ "low": "Low",
82
+ "close": "Close",
83
+ },
84
+ inplace=True,
85
+ )
86
+ temp_df["Date"] = pd.to_datetime(temp_df["Date"])
87
+ temp_df.set_index(keys="Date", inplace=True)
88
+ return temp_df
89
+
90
+
91
+ def volatility_yz_rv(data: pd.DataFrame) -> pd.DataFrame:
92
+ """
93
+ 波动率-已实现波动率-Yang-Zhang 已实现波动率(Yang-Zhang Realized Volatility)
94
+ https://github.com/hugogobato/Yang-Zhang-s-Realized-Volatility-Automated-Estimation-in-Python
95
+ 基于以下公式计算:
96
+ RV^2 = Vo + k*Vc + (1-k)*Vrs
97
+ 其中:
98
+ - Vo: 隔夜波动率, Vo = 1/(n-1)*sum(Oi-Obar)^2
99
+ Oi为标准化开盘价, Obar为标准化开盘价均值
100
+ - Vc: 收盘波动率, Vc = 1/(n-1)*sum(ci-Cbar)^2
101
+ ci为标准化收盘价, Cbar为标准化收盘价均值
102
+ - k: 权重系数, k = 0.34/(1.34+(n+1)/(n-1))
103
+ n为样本数量
104
+ - Vrs: Rogers-Satchell波动率代理, Vrs = ui(ui-ci)+di(di-ci)
105
+ ui = ln(Hi/Oi), ci = ln(Ci/Oi), di = ln(Li/Oi), oi = ln(Oi/Ci-1)
106
+ Hi/Li/Ci/Oi分别为最高价/最低价/收盘价/开盘价
107
+
108
+ :param data: 包含 OHLC(开高低收) 价格的 pandas.DataFrame
109
+ :type data: pandas.DataFrame
110
+ :return: 包含 Yang-Zhang 实现波动率的 pandas.DataFrame
111
+ :rtype: pandas.DataFrame
112
+
113
+ 要求输入数据包含以下列:
114
+ - Open: 开盘价
115
+ - High: 最高价
116
+ - Low: 最低价
117
+ - Close: 收盘价
118
+ # yang_zhang_rv formula is give as:
119
+ # RV^2 = Vo + k*Vc + (1-k)*Vrs
120
+ # where Vo = 1/(n-1)*sum(Oi-Obar)^2
121
+ # with oi = normalized opening price at time t and Obar = mean of normalized opening prices
122
+ # Vc = = 1/(n-1)*sum(ci-Cbar)^2
123
+ # with ci = normalized close price at time t and Cbar = mean of normalized close prices
124
+ # k = 0.34/(1.34+(n+1)/(n-1))
125
+ # with n = total number of days or time periods considered
126
+ # Vrs (Rogers & Satchell RV proxy) = ui(ui-ci)+di(di-ci)
127
+ # with ui = ln(Hi/Oi), ci = ln(Ci/Oi), di=(Li/Oi), oi = ln(Oi/Ci-1)
128
+ # where Hi = high price at time t and Li = low price at time t
129
+ """ ""
130
+ warnings.filterwarnings("ignore")
131
+
132
+ data["ui"] = np.log(np.divide(data["High"][1:], data["Open"][1:]))
133
+ data["ci"] = np.log(np.divide(data["Close"][1:], data["Open"][1:]))
134
+ data["di"] = np.log(np.divide(data["Low"][1:], data["Open"][1:]))
135
+ data["oi"] = np.log(np.divide(data["Open"][1:], data["Close"][: len(data) - 1]))
136
+ data = data[1:]
137
+ data["RS"] = data["ui"] * (data["ui"] - data["ci"]) + data["di"] * (
138
+ data["di"] - data["ci"]
139
+ )
140
+ rs_var = data["RS"].groupby(pd.Grouper(freq="1D")).mean().dropna()
141
+ vc_and_vo = data[["oi", "ci"]].groupby(pd.Grouper(freq="1D")).var().dropna()
142
+ n = int(len(data) / len(rs_var))
143
+ k = 0.34 / (1.34 + (n + 1) / (n - 1))
144
+ yang_zhang_rv = np.sqrt((1 - k) * rs_var + vc_and_vo["oi"] + vc_and_vo["ci"] * k)
145
+ yang_zhang_rv_df = pd.DataFrame(yang_zhang_rv)
146
+ yang_zhang_rv_df.rename(columns={0: "yz_rv"}, inplace=True)
147
+ yang_zhang_rv_df.reset_index(inplace=True)
148
+ yang_zhang_rv_df.columns = ["date", "rv"]
149
+ yang_zhang_rv_df["date"] = pd.to_datetime(
150
+ yang_zhang_rv_df["date"], errors="coerce"
151
+ ).dt.date
152
+ return yang_zhang_rv_df
153
+
154
+
155
+ if __name__ == "__main__":
156
+ futures_df = rv_from_futures_zh_minute_sina(symbol="IF2008", period="1")
157
+ volatility_yz_rv_df = volatility_yz_rv(data=futures_df)
158
+ print(volatility_yz_rv_df)
159
+
160
+ stock_df = rv_from_stock_zh_a_hist_min_em(
161
+ symbol="000001",
162
+ start_date="2021-10-20 09:30:00",
163
+ end_date="2024-11-01 15:00:00",
164
+ period="5",
165
+ adjust="",
166
+ )
167
+ volatility_yz_rv_df = volatility_yz_rv(data=stock_df)
168
+ print(volatility_yz_rv_df)
@@ -562,6 +562,6 @@ if __name__ == "__main__":
562
562
  print(index_analysis_weekly_sw_df)
563
563
 
564
564
  index_analysis_monthly_sw_df = index_analysis_monthly_sw(
565
- symbol="市场表征", date="20240329"
565
+ symbol="市场表征", date="20240930"
566
566
  )
567
567
  print(index_analysis_monthly_sw_df)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: akshare
3
- Version: 1.15.9
3
+ Version: 1.15.10
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=jqNKxIz9aIT8THYeuEIf_pKnAE4SMsJPUyE4l63dHFw,182868
1
+ akshare/__init__.py,sha256=rAi5HeRNqAMHlNWS4JKfQBEgsAct8UTiy-fymCe4q6U,183049
2
2
  akshare/datasets.py,sha256=-qdwaQjgBlftX84uM74KJqCYJYkQ50PV416_neA4uls,995
3
3
  akshare/exceptions.py,sha256=WEJjIhSmJ_xXNW6grwV4nufE_cfmmyuhmueVGiN1VAg,878
4
4
  akshare/request.py,sha256=HtFFf9MhfEibR-ETWe-1Tts6ELU4VKSqA-ghaXjegQM,4252
@@ -34,6 +34,8 @@ akshare/bond/bond_summary.py,sha256=ECwCRcs5YMIro4I1Yayf6SZ8nz1Hr97RhmKT6aGaQDg,
34
34
  akshare/bond/bond_zh_cov.py,sha256=yL77itRK0rFCeQP_M524lW1740D5Q1IZW6eLvjXf2H4,23750
35
35
  akshare/bond/bond_zh_sina.py,sha256=msj7upgqaCTzC_MxzhUm7hVKtzHeWRUjlcjvZn2zlbw,4654
36
36
  akshare/bond/cons.py,sha256=SGqjMqRYwJlEb8UczxdcrtcD7I2SAVULXARGEedEQfE,1792
37
+ akshare/cal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
+ akshare/cal/rv.py,sha256=Pv0ymH_RlwLsVqmKJvrJHxIr5CvgUt7jN-kzYneRKok,6402
37
39
  akshare/cost/__init__.py,sha256=x1R9hH6E0M7C86XhHFzbPiipUWz9IknuhVZrk4gZus4,82
38
40
  akshare/cost/cost_living.py,sha256=_yoGEW4jBfpjhgMxCXvMtBbrCx2PEuOngV3laEoEOvk,2078
39
41
  akshare/crypto/__init__.py,sha256=lbmNMPPLGkW9AgGL4ZnCwoQvPjOFPDNUz6P3arSkNI0,83
@@ -165,7 +167,7 @@ akshare/index/index_kq_fz.py,sha256=Y-cbxWLpRyGcFcMSDxZZQXdAuD85IuQH5xC2rhtGbRc,
165
167
  akshare/index/index_kq_ss.py,sha256=m4hAMNnzHk8JNAnKjkYYVeyG4zUC5zR5i0-u-OxmaGU,3333
166
168
  akshare/index/index_option_qvix.py,sha256=sCx0iiIetkp5ELE9sDwesVFgJNfa_1tAEWVCJI-I2u4,3270
167
169
  akshare/index/index_research_fund_sw.py,sha256=kVYjBl3vZg6CyYBCrxZiSv8taHMnqmG7PQ-LVmMNd3I,4603
168
- akshare/index/index_research_sw.py,sha256=EbyrxSxHclqXK5-IW5YbkZd7J5s-gBtrfayymvrlQw8,21758
170
+ akshare/index/index_research_sw.py,sha256=Mm1YtiP-PXhDysJwmFidX3RZSZZ92AyXpjl_tVrjdwA,21758
169
171
  akshare/index/index_spot.py,sha256=HrXt2QC9i1pYEh7wyJPKjtexctzSIUyMjEzk5BQq_K8,1696
170
172
  akshare/index/index_stock_hk.py,sha256=nPFzRrjyiUpRK-OSDsdi5AFCKHNKqOVji6WJcQxOvNo,9781
171
173
  akshare/index/index_stock_us_sina.py,sha256=IxOk4G49oasv7EfEQenL9-GLuelyUus6c4JPyRlaOzY,1551
@@ -381,8 +383,8 @@ akshare/utils/token_process.py,sha256=K4rGXjh_tgugbRcyOK2h2x0jP3PT65IIK7nxhUKhOe
381
383
  akshare/utils/tqdm.py,sha256=MuPNwcswkOGjwWQOMWXi9ZvQ_RmW4obCWRj2i7HM7FE,847
382
384
  tests/__init__.py,sha256=gNzhlO0UPjFq6Ieb38kaVIODXv4cTDByrdohAZnDYt4,82
383
385
  tests/test_func.py,sha256=j1MGYbZI2if2j_LY1S4FLsf4qfq4NwVqD5wmRlv5Log,832
384
- akshare-1.15.9.dist-info/LICENSE,sha256=mmSZCPgfHiVw34LXuFArd-SUgQtBJ_QsIlh-kWlDHfs,1073
385
- akshare-1.15.9.dist-info/METADATA,sha256=7Zw_hSu3RGidWw9Aq7_hjkxjGwYMYu-6iw-DKXJ8Ubw,14151
386
- akshare-1.15.9.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
387
- akshare-1.15.9.dist-info/top_level.txt,sha256=jsf9ZzZPmHaISTVumQPsAw7vv7Yv-PdEVW70SMEelQQ,14
388
- akshare-1.15.9.dist-info/RECORD,,
386
+ akshare-1.15.10.dist-info/LICENSE,sha256=mmSZCPgfHiVw34LXuFArd-SUgQtBJ_QsIlh-kWlDHfs,1073
387
+ akshare-1.15.10.dist-info/METADATA,sha256=-D0v5_oUh59S9CYLr8sKeLpkjHjOlO3GRSW2Kz5TZPY,14152
388
+ akshare-1.15.10.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
389
+ akshare-1.15.10.dist-info/top_level.txt,sha256=jsf9ZzZPmHaISTVumQPsAw7vv7Yv-PdEVW70SMEelQQ,14
390
+ akshare-1.15.10.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.2.0)
2
+ Generator: setuptools (75.3.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5