akshare-one 0.3.7__py3-none-any.whl → 0.3.9__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_one/__init__.py +214 -214
- akshare_one/eastmoney/client.py +80 -80
- akshare_one/eastmoney/utils.py +102 -102
- akshare_one/indicators.py +395 -395
- akshare_one/modules/cache.py +30 -27
- akshare_one/modules/financial/base.py +27 -27
- akshare_one/modules/financial/eastmoney_direct.py +183 -183
- akshare_one/modules/financial/factory.py +46 -46
- akshare_one/modules/financial/sina.py +292 -292
- akshare_one/modules/historical/base.py +47 -47
- akshare_one/modules/historical/eastmoney.py +236 -236
- akshare_one/modules/historical/eastmoney_direct.py +79 -78
- akshare_one/modules/historical/factory.py +48 -48
- akshare_one/modules/historical/sina.py +250 -250
- akshare_one/modules/indicators/base.py +158 -158
- akshare_one/modules/indicators/factory.py +33 -33
- akshare_one/modules/indicators/simple.py +9 -8
- akshare_one/modules/indicators/talib.py +263 -263
- akshare_one/modules/info/base.py +25 -25
- akshare_one/modules/info/eastmoney.py +51 -51
- akshare_one/modules/info/factory.py +44 -44
- akshare_one/modules/insider/base.py +28 -28
- akshare_one/modules/insider/factory.py +44 -44
- akshare_one/modules/insider/xueqiu.py +110 -110
- akshare_one/modules/news/base.py +22 -22
- akshare_one/modules/news/eastmoney.py +43 -43
- akshare_one/modules/news/factory.py +44 -44
- akshare_one/modules/realtime/base.py +27 -27
- akshare_one/modules/realtime/eastmoney.py +53 -53
- akshare_one/modules/realtime/eastmoney_direct.py +36 -36
- akshare_one/modules/realtime/factory.py +71 -48
- akshare_one/modules/realtime/xueqiu.py +57 -57
- akshare_one/modules/utils.py +10 -10
- akshare_one/py.typed +0 -0
- {akshare_one-0.3.7.dist-info → akshare_one-0.3.9.dist-info}/METADATA +72 -74
- akshare_one-0.3.9.dist-info/RECORD +38 -0
- akshare_one-0.3.9.dist-info/WHEEL +4 -0
- akshare_one-0.3.7.dist-info/RECORD +0 -39
- akshare_one-0.3.7.dist-info/WHEEL +0 -5
- akshare_one-0.3.7.dist-info/licenses/LICENSE +0 -21
- akshare_one-0.3.7.dist-info/top_level.txt +0 -1
@@ -1,263 +1,263 @@
|
|
1
|
-
import talib
|
2
|
-
import pandas as pd
|
3
|
-
from .base import BaseIndicatorCalculator
|
4
|
-
|
5
|
-
|
6
|
-
class TalibIndicatorCalculator(BaseIndicatorCalculator):
|
7
|
-
"""TA-Lib based indicator implementations"""
|
8
|
-
|
9
|
-
def calculate_sma(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
10
|
-
close = df["close"].values
|
11
|
-
sma = talib.SMA(close, timeperiod=window)
|
12
|
-
return pd.DataFrame({"sma": sma}, index=df.index)
|
13
|
-
|
14
|
-
def calculate_ema(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
15
|
-
close = df["close"].values
|
16
|
-
ema = talib.EMA(close, timeperiod=window)
|
17
|
-
return pd.DataFrame({"ema": ema}, index=df.index)
|
18
|
-
|
19
|
-
def calculate_rsi(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
20
|
-
close = df["close"].values
|
21
|
-
rsi = talib.RSI(close, timeperiod=window)
|
22
|
-
return pd.DataFrame({"rsi": rsi}, index=df.index)
|
23
|
-
|
24
|
-
def calculate_macd(
|
25
|
-
self, df: pd.DataFrame, fast: int, slow: int, signal: int
|
26
|
-
) -> pd.DataFrame:
|
27
|
-
close = df["close"].values
|
28
|
-
macd, signal_line, histogram = talib.MACD(
|
29
|
-
close, fastperiod=fast, slowperiod=slow, signalperiod=signal
|
30
|
-
)
|
31
|
-
return pd.DataFrame(
|
32
|
-
{"macd": macd, "signal": signal_line, "histogram": histogram},
|
33
|
-
index=df.index,
|
34
|
-
)
|
35
|
-
|
36
|
-
def calculate_bollinger_bands(
|
37
|
-
self, df: pd.DataFrame, window: int, std: int
|
38
|
-
) -> pd.DataFrame:
|
39
|
-
close = df["close"].values
|
40
|
-
upper, middle, lower = talib.BBANDS(
|
41
|
-
close, timeperiod=window, nbdevup=std, nbdevdn=std, matype=talib.MA_Type.SMA
|
42
|
-
)
|
43
|
-
return pd.DataFrame(
|
44
|
-
{"upper_band": upper, "middle_band": middle, "lower_band": lower},
|
45
|
-
index=df.index,
|
46
|
-
)
|
47
|
-
|
48
|
-
def calculate_stoch(
|
49
|
-
self, df: pd.DataFrame, window: int, smooth_d: int, smooth_k: int
|
50
|
-
) -> pd.DataFrame:
|
51
|
-
high = df["high"].values
|
52
|
-
low = df["low"].values
|
53
|
-
close = df["close"].values
|
54
|
-
slow_k, slow_d = talib.STOCH(
|
55
|
-
high,
|
56
|
-
low,
|
57
|
-
close,
|
58
|
-
fastk_period=window,
|
59
|
-
slowk_period=smooth_k,
|
60
|
-
slowk_matype=talib.MA_Type.SMA,
|
61
|
-
slowd_period=smooth_d,
|
62
|
-
slowd_matype=talib.MA_Type.SMA,
|
63
|
-
)
|
64
|
-
return pd.DataFrame({"slow_k": slow_k, "slow_d": slow_d}, index=df.index)
|
65
|
-
|
66
|
-
def calculate_atr(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
67
|
-
high = df["high"].values
|
68
|
-
low = df["low"].values
|
69
|
-
close = df["close"].values
|
70
|
-
atr = talib.ATR(high, low, close, timeperiod=window)
|
71
|
-
return pd.DataFrame({"atr": atr}, index=df.index)
|
72
|
-
|
73
|
-
def calculate_cci(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
74
|
-
high = df["high"].values
|
75
|
-
low = df["low"].values
|
76
|
-
close = df["close"].values
|
77
|
-
cci = talib.CCI(high, low, close, timeperiod=window)
|
78
|
-
return pd.DataFrame({"cci": cci}, index=df.index)
|
79
|
-
|
80
|
-
def calculate_adx(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
81
|
-
high = df["high"].values
|
82
|
-
low = df["low"].values
|
83
|
-
close = df["close"].values
|
84
|
-
adx = talib.ADX(high, low, close, timeperiod=window)
|
85
|
-
return pd.DataFrame({"adx": adx}, index=df.index)
|
86
|
-
|
87
|
-
def calculate_willr(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
88
|
-
high = df["high"].values
|
89
|
-
low = df["low"].values
|
90
|
-
close = df["close"].values
|
91
|
-
willr = talib.WILLR(high, low, close, timeperiod=window)
|
92
|
-
return pd.DataFrame({"willr": willr}, index=df.index)
|
93
|
-
|
94
|
-
def calculate_ad(self, df: pd.DataFrame) -> pd.DataFrame:
|
95
|
-
high = df["high"].values
|
96
|
-
low = df["low"].values
|
97
|
-
close = df["close"].values
|
98
|
-
volume = df["volume"].values.astype(float)
|
99
|
-
ad = talib.AD(high, low, close, volume)
|
100
|
-
return pd.DataFrame({"ad": ad}, index=df.index)
|
101
|
-
|
102
|
-
def calculate_adosc(
|
103
|
-
self, df: pd.DataFrame, fast_period: int, slow_period: int
|
104
|
-
) -> pd.DataFrame:
|
105
|
-
high = df["high"].values
|
106
|
-
low = df["low"].values
|
107
|
-
close = df["close"].values
|
108
|
-
volume = df["volume"].values.astype(float)
|
109
|
-
adosc = talib.ADOSC(
|
110
|
-
high, low, close, volume, fastperiod=fast_period, slowperiod=slow_period
|
111
|
-
)
|
112
|
-
return pd.DataFrame({"adosc": adosc}, index=df.index)
|
113
|
-
|
114
|
-
def calculate_obv(self, df: pd.DataFrame) -> pd.DataFrame:
|
115
|
-
close = df["close"].values
|
116
|
-
volume = df["volume"].values.astype(float)
|
117
|
-
obv = talib.OBV(close, volume)
|
118
|
-
return pd.DataFrame({"obv": obv}, index=df.index)
|
119
|
-
|
120
|
-
def calculate_mom(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
121
|
-
close = df["close"].values
|
122
|
-
mom = talib.MOM(close, timeperiod=window)
|
123
|
-
return pd.DataFrame({"mom": mom}, index=df.index)
|
124
|
-
|
125
|
-
def calculate_sar(
|
126
|
-
self, df: pd.DataFrame, acceleration: float, maximum: float
|
127
|
-
) -> pd.DataFrame:
|
128
|
-
high = df["high"].values
|
129
|
-
low = df["low"].values
|
130
|
-
sar = talib.SAR(high, low, acceleration=acceleration, maximum=maximum)
|
131
|
-
return pd.DataFrame({"sar": sar}, index=df.index)
|
132
|
-
|
133
|
-
def calculate_tsf(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
134
|
-
close = df["close"].values
|
135
|
-
tsf = talib.TSF(close, timeperiod=window)
|
136
|
-
return pd.DataFrame({"tsf": tsf}, index=df.index)
|
137
|
-
|
138
|
-
def calculate_apo(
|
139
|
-
self, df: pd.DataFrame, fast_period: int, slow_period: int, ma_type
|
140
|
-
) -> pd.DataFrame:
|
141
|
-
close = df["close"].values
|
142
|
-
apo = talib.APO(
|
143
|
-
close, fastperiod=fast_period, slowperiod=slow_period, matype=ma_type
|
144
|
-
)
|
145
|
-
return pd.DataFrame({"apo": apo}, index=df.index)
|
146
|
-
|
147
|
-
def calculate_aroon(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
148
|
-
high = df["high"].values
|
149
|
-
low = df["low"].values
|
150
|
-
aroon_down, aroon_up = talib.AROON(high, low, timeperiod=window)
|
151
|
-
return pd.DataFrame(
|
152
|
-
{"aroon_down": aroon_down, "aroon_up": aroon_up}, index=df.index
|
153
|
-
)
|
154
|
-
|
155
|
-
def calculate_aroonosc(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
156
|
-
high = df["high"].values
|
157
|
-
low = df["low"].values
|
158
|
-
aroonosc = talib.AROONOSC(high, low, timeperiod=window)
|
159
|
-
return pd.DataFrame({"aroonosc": aroonosc}, index=df.index)
|
160
|
-
|
161
|
-
def calculate_bop(self, df: pd.DataFrame) -> pd.DataFrame:
|
162
|
-
open_ = df["open"].values
|
163
|
-
high = df["high"].values
|
164
|
-
low = df["low"].values
|
165
|
-
close = df["close"].values
|
166
|
-
bop = talib.BOP(open_, high, low, close)
|
167
|
-
return pd.DataFrame({"bop": bop}, index=df.index)
|
168
|
-
|
169
|
-
def calculate_cmo(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
170
|
-
close = df["close"].values
|
171
|
-
cmo = talib.CMO(close, timeperiod=window)
|
172
|
-
return pd.DataFrame({"cmo": cmo}, index=df.index)
|
173
|
-
|
174
|
-
def calculate_dx(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
175
|
-
high = df["high"].values
|
176
|
-
low = df["low"].values
|
177
|
-
close = df["close"].values
|
178
|
-
dx = talib.DX(high, low, close, timeperiod=window)
|
179
|
-
return pd.DataFrame({"dx": dx}, index=df.index)
|
180
|
-
|
181
|
-
def calculate_mfi(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
182
|
-
high = df["high"].values
|
183
|
-
low = df["low"].values
|
184
|
-
close = df["close"].values
|
185
|
-
volume = df["volume"].values.astype(float)
|
186
|
-
mfi = talib.MFI(high, low, close, volume, timeperiod=window)
|
187
|
-
return pd.DataFrame({"mfi": mfi}, index=df.index)
|
188
|
-
|
189
|
-
def calculate_minus_di(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
190
|
-
high = df["high"].values
|
191
|
-
low = df["low"].values
|
192
|
-
close = df["close"].values
|
193
|
-
minus_di = talib.MINUS_DI(high, low, close, timeperiod=window)
|
194
|
-
return pd.DataFrame({"minus_di": minus_di}, index=df.index)
|
195
|
-
|
196
|
-
def calculate_minus_dm(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
197
|
-
high = df["high"].values
|
198
|
-
low = df["low"].values
|
199
|
-
minus_dm = talib.MINUS_DM(high, low, timeperiod=window)
|
200
|
-
return pd.DataFrame({"minus_dm": minus_dm}, index=df.index)
|
201
|
-
|
202
|
-
def calculate_plus_di(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
203
|
-
high = df["high"].values
|
204
|
-
low = df["low"].values
|
205
|
-
close = df["close"].values
|
206
|
-
plus_di = talib.PLUS_DI(high, low, close, timeperiod=window)
|
207
|
-
return pd.DataFrame({"plus_di": plus_di}, index=df.index)
|
208
|
-
|
209
|
-
def calculate_plus_dm(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
210
|
-
high = df["high"].values
|
211
|
-
low = df["low"].values
|
212
|
-
plus_dm = talib.PLUS_DM(high, low, timeperiod=window)
|
213
|
-
return pd.DataFrame({"plus_dm": plus_dm}, index=df.index)
|
214
|
-
|
215
|
-
def calculate_ppo(
|
216
|
-
self, df: pd.DataFrame, fast_period: int, slow_period: int, ma_type
|
217
|
-
) -> pd.DataFrame:
|
218
|
-
close = df["close"].values
|
219
|
-
ppo = talib.PPO(
|
220
|
-
close, fastperiod=fast_period, slowperiod=slow_period, matype=ma_type
|
221
|
-
)
|
222
|
-
return pd.DataFrame({"ppo": ppo}, index=df.index)
|
223
|
-
|
224
|
-
def calculate_roc(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
225
|
-
close = df["close"].values
|
226
|
-
roc = talib.ROC(close, timeperiod=window)
|
227
|
-
return pd.DataFrame({"roc": roc}, index=df.index)
|
228
|
-
|
229
|
-
def calculate_rocp(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
230
|
-
close = df["close"].values
|
231
|
-
rocp = talib.ROCP(close, timeperiod=window)
|
232
|
-
return pd.DataFrame({"rocp": rocp}, index=df.index)
|
233
|
-
|
234
|
-
def calculate_rocr(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
235
|
-
close = df["close"].values
|
236
|
-
rocr = talib.ROCR(close, timeperiod=window)
|
237
|
-
return pd.DataFrame({"rocr": rocr}, index=df.index)
|
238
|
-
|
239
|
-
def calculate_rocr100(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
240
|
-
close = df["close"].values
|
241
|
-
rocr100 = talib.ROCR100(close, timeperiod=window)
|
242
|
-
return pd.DataFrame({"rocr100": rocr100}, index=df.index)
|
243
|
-
|
244
|
-
def calculate_trix(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
245
|
-
close = df["close"].values
|
246
|
-
trix = talib.TRIX(close, timeperiod=window)
|
247
|
-
return pd.DataFrame({"trix": trix}, index=df.index)
|
248
|
-
|
249
|
-
def calculate_ultosc(
|
250
|
-
self, df: pd.DataFrame, window1: int, window2: int, window3: int
|
251
|
-
) -> pd.DataFrame:
|
252
|
-
high = df["high"].values
|
253
|
-
low = df["low"].values
|
254
|
-
close = df["close"].values
|
255
|
-
ultosc = talib.ULTOSC(
|
256
|
-
high,
|
257
|
-
low,
|
258
|
-
close,
|
259
|
-
timeperiod1=window1,
|
260
|
-
timeperiod2=window2,
|
261
|
-
timeperiod3=window3,
|
262
|
-
)
|
263
|
-
return pd.DataFrame({"ultosc": ultosc}, index=df.index)
|
1
|
+
import talib # type: ignore
|
2
|
+
import pandas as pd
|
3
|
+
from .base import BaseIndicatorCalculator
|
4
|
+
|
5
|
+
|
6
|
+
class TalibIndicatorCalculator(BaseIndicatorCalculator):
|
7
|
+
"""TA-Lib based indicator implementations"""
|
8
|
+
|
9
|
+
def calculate_sma(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
10
|
+
close = df["close"].values
|
11
|
+
sma = talib.SMA(close, timeperiod=window)
|
12
|
+
return pd.DataFrame({"sma": sma}, index=df.index)
|
13
|
+
|
14
|
+
def calculate_ema(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
15
|
+
close = df["close"].values
|
16
|
+
ema = talib.EMA(close, timeperiod=window)
|
17
|
+
return pd.DataFrame({"ema": ema}, index=df.index)
|
18
|
+
|
19
|
+
def calculate_rsi(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
20
|
+
close = df["close"].values
|
21
|
+
rsi = talib.RSI(close, timeperiod=window)
|
22
|
+
return pd.DataFrame({"rsi": rsi}, index=df.index)
|
23
|
+
|
24
|
+
def calculate_macd(
|
25
|
+
self, df: pd.DataFrame, fast: int, slow: int, signal: int
|
26
|
+
) -> pd.DataFrame:
|
27
|
+
close = df["close"].values
|
28
|
+
macd, signal_line, histogram = talib.MACD(
|
29
|
+
close, fastperiod=fast, slowperiod=slow, signalperiod=signal
|
30
|
+
)
|
31
|
+
return pd.DataFrame(
|
32
|
+
{"macd": macd, "signal": signal_line, "histogram": histogram},
|
33
|
+
index=df.index,
|
34
|
+
)
|
35
|
+
|
36
|
+
def calculate_bollinger_bands(
|
37
|
+
self, df: pd.DataFrame, window: int, std: int
|
38
|
+
) -> pd.DataFrame:
|
39
|
+
close = df["close"].values
|
40
|
+
upper, middle, lower = talib.BBANDS(
|
41
|
+
close, timeperiod=window, nbdevup=std, nbdevdn=std, matype=talib.MA_Type.SMA
|
42
|
+
)
|
43
|
+
return pd.DataFrame(
|
44
|
+
{"upper_band": upper, "middle_band": middle, "lower_band": lower},
|
45
|
+
index=df.index,
|
46
|
+
)
|
47
|
+
|
48
|
+
def calculate_stoch(
|
49
|
+
self, df: pd.DataFrame, window: int, smooth_d: int, smooth_k: int
|
50
|
+
) -> pd.DataFrame:
|
51
|
+
high = df["high"].values
|
52
|
+
low = df["low"].values
|
53
|
+
close = df["close"].values
|
54
|
+
slow_k, slow_d = talib.STOCH(
|
55
|
+
high,
|
56
|
+
low,
|
57
|
+
close,
|
58
|
+
fastk_period=window,
|
59
|
+
slowk_period=smooth_k,
|
60
|
+
slowk_matype=talib.MA_Type.SMA,
|
61
|
+
slowd_period=smooth_d,
|
62
|
+
slowd_matype=talib.MA_Type.SMA,
|
63
|
+
)
|
64
|
+
return pd.DataFrame({"slow_k": slow_k, "slow_d": slow_d}, index=df.index)
|
65
|
+
|
66
|
+
def calculate_atr(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
67
|
+
high = df["high"].values
|
68
|
+
low = df["low"].values
|
69
|
+
close = df["close"].values
|
70
|
+
atr = talib.ATR(high, low, close, timeperiod=window)
|
71
|
+
return pd.DataFrame({"atr": atr}, index=df.index)
|
72
|
+
|
73
|
+
def calculate_cci(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
74
|
+
high = df["high"].values
|
75
|
+
low = df["low"].values
|
76
|
+
close = df["close"].values
|
77
|
+
cci = talib.CCI(high, low, close, timeperiod=window)
|
78
|
+
return pd.DataFrame({"cci": cci}, index=df.index)
|
79
|
+
|
80
|
+
def calculate_adx(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
81
|
+
high = df["high"].values
|
82
|
+
low = df["low"].values
|
83
|
+
close = df["close"].values
|
84
|
+
adx = talib.ADX(high, low, close, timeperiod=window)
|
85
|
+
return pd.DataFrame({"adx": adx}, index=df.index)
|
86
|
+
|
87
|
+
def calculate_willr(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
88
|
+
high = df["high"].values
|
89
|
+
low = df["low"].values
|
90
|
+
close = df["close"].values
|
91
|
+
willr = talib.WILLR(high, low, close, timeperiod=window)
|
92
|
+
return pd.DataFrame({"willr": willr}, index=df.index)
|
93
|
+
|
94
|
+
def calculate_ad(self, df: pd.DataFrame) -> pd.DataFrame:
|
95
|
+
high = df["high"].values
|
96
|
+
low = df["low"].values
|
97
|
+
close = df["close"].values
|
98
|
+
volume = df["volume"].values.astype(float)
|
99
|
+
ad = talib.AD(high, low, close, volume)
|
100
|
+
return pd.DataFrame({"ad": ad}, index=df.index)
|
101
|
+
|
102
|
+
def calculate_adosc(
|
103
|
+
self, df: pd.DataFrame, fast_period: int, slow_period: int
|
104
|
+
) -> pd.DataFrame:
|
105
|
+
high = df["high"].values
|
106
|
+
low = df["low"].values
|
107
|
+
close = df["close"].values
|
108
|
+
volume = df["volume"].values.astype(float)
|
109
|
+
adosc = talib.ADOSC(
|
110
|
+
high, low, close, volume, fastperiod=fast_period, slowperiod=slow_period
|
111
|
+
)
|
112
|
+
return pd.DataFrame({"adosc": adosc}, index=df.index)
|
113
|
+
|
114
|
+
def calculate_obv(self, df: pd.DataFrame) -> pd.DataFrame:
|
115
|
+
close = df["close"].values
|
116
|
+
volume = df["volume"].values.astype(float)
|
117
|
+
obv = talib.OBV(close, volume)
|
118
|
+
return pd.DataFrame({"obv": obv}, index=df.index)
|
119
|
+
|
120
|
+
def calculate_mom(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
121
|
+
close = df["close"].values
|
122
|
+
mom = talib.MOM(close, timeperiod=window)
|
123
|
+
return pd.DataFrame({"mom": mom}, index=df.index)
|
124
|
+
|
125
|
+
def calculate_sar(
|
126
|
+
self, df: pd.DataFrame, acceleration: float, maximum: float
|
127
|
+
) -> pd.DataFrame:
|
128
|
+
high = df["high"].values
|
129
|
+
low = df["low"].values
|
130
|
+
sar = talib.SAR(high, low, acceleration=acceleration, maximum=maximum)
|
131
|
+
return pd.DataFrame({"sar": sar}, index=df.index)
|
132
|
+
|
133
|
+
def calculate_tsf(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
134
|
+
close = df["close"].values
|
135
|
+
tsf = talib.TSF(close, timeperiod=window)
|
136
|
+
return pd.DataFrame({"tsf": tsf}, index=df.index)
|
137
|
+
|
138
|
+
def calculate_apo(
|
139
|
+
self, df: pd.DataFrame, fast_period: int, slow_period: int, ma_type: int
|
140
|
+
) -> pd.DataFrame:
|
141
|
+
close = df["close"].values
|
142
|
+
apo = talib.APO(
|
143
|
+
close, fastperiod=fast_period, slowperiod=slow_period, matype=ma_type
|
144
|
+
)
|
145
|
+
return pd.DataFrame({"apo": apo}, index=df.index)
|
146
|
+
|
147
|
+
def calculate_aroon(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
148
|
+
high = df["high"].values
|
149
|
+
low = df["low"].values
|
150
|
+
aroon_down, aroon_up = talib.AROON(high, low, timeperiod=window)
|
151
|
+
return pd.DataFrame(
|
152
|
+
{"aroon_down": aroon_down, "aroon_up": aroon_up}, index=df.index
|
153
|
+
)
|
154
|
+
|
155
|
+
def calculate_aroonosc(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
156
|
+
high = df["high"].values
|
157
|
+
low = df["low"].values
|
158
|
+
aroonosc = talib.AROONOSC(high, low, timeperiod=window)
|
159
|
+
return pd.DataFrame({"aroonosc": aroonosc}, index=df.index)
|
160
|
+
|
161
|
+
def calculate_bop(self, df: pd.DataFrame) -> pd.DataFrame:
|
162
|
+
open_ = df["open"].values
|
163
|
+
high = df["high"].values
|
164
|
+
low = df["low"].values
|
165
|
+
close = df["close"].values
|
166
|
+
bop = talib.BOP(open_, high, low, close)
|
167
|
+
return pd.DataFrame({"bop": bop}, index=df.index)
|
168
|
+
|
169
|
+
def calculate_cmo(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
170
|
+
close = df["close"].values
|
171
|
+
cmo = talib.CMO(close, timeperiod=window)
|
172
|
+
return pd.DataFrame({"cmo": cmo}, index=df.index)
|
173
|
+
|
174
|
+
def calculate_dx(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
175
|
+
high = df["high"].values
|
176
|
+
low = df["low"].values
|
177
|
+
close = df["close"].values
|
178
|
+
dx = talib.DX(high, low, close, timeperiod=window)
|
179
|
+
return pd.DataFrame({"dx": dx}, index=df.index)
|
180
|
+
|
181
|
+
def calculate_mfi(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
182
|
+
high = df["high"].values
|
183
|
+
low = df["low"].values
|
184
|
+
close = df["close"].values
|
185
|
+
volume = df["volume"].values.astype(float)
|
186
|
+
mfi = talib.MFI(high, low, close, volume, timeperiod=window)
|
187
|
+
return pd.DataFrame({"mfi": mfi}, index=df.index)
|
188
|
+
|
189
|
+
def calculate_minus_di(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
190
|
+
high = df["high"].values
|
191
|
+
low = df["low"].values
|
192
|
+
close = df["close"].values
|
193
|
+
minus_di = talib.MINUS_DI(high, low, close, timeperiod=window)
|
194
|
+
return pd.DataFrame({"minus_di": minus_di}, index=df.index)
|
195
|
+
|
196
|
+
def calculate_minus_dm(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
197
|
+
high = df["high"].values
|
198
|
+
low = df["low"].values
|
199
|
+
minus_dm = talib.MINUS_DM(high, low, timeperiod=window)
|
200
|
+
return pd.DataFrame({"minus_dm": minus_dm}, index=df.index)
|
201
|
+
|
202
|
+
def calculate_plus_di(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
203
|
+
high = df["high"].values
|
204
|
+
low = df["low"].values
|
205
|
+
close = df["close"].values
|
206
|
+
plus_di = talib.PLUS_DI(high, low, close, timeperiod=window)
|
207
|
+
return pd.DataFrame({"plus_di": plus_di}, index=df.index)
|
208
|
+
|
209
|
+
def calculate_plus_dm(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
210
|
+
high = df["high"].values
|
211
|
+
low = df["low"].values
|
212
|
+
plus_dm = talib.PLUS_DM(high, low, timeperiod=window)
|
213
|
+
return pd.DataFrame({"plus_dm": plus_dm}, index=df.index)
|
214
|
+
|
215
|
+
def calculate_ppo(
|
216
|
+
self, df: pd.DataFrame, fast_period: int, slow_period: int, ma_type: int
|
217
|
+
) -> pd.DataFrame:
|
218
|
+
close = df["close"].values
|
219
|
+
ppo = talib.PPO(
|
220
|
+
close, fastperiod=fast_period, slowperiod=slow_period, matype=ma_type
|
221
|
+
)
|
222
|
+
return pd.DataFrame({"ppo": ppo}, index=df.index)
|
223
|
+
|
224
|
+
def calculate_roc(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
225
|
+
close = df["close"].values
|
226
|
+
roc = talib.ROC(close, timeperiod=window)
|
227
|
+
return pd.DataFrame({"roc": roc}, index=df.index)
|
228
|
+
|
229
|
+
def calculate_rocp(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
230
|
+
close = df["close"].values
|
231
|
+
rocp = talib.ROCP(close, timeperiod=window)
|
232
|
+
return pd.DataFrame({"rocp": rocp}, index=df.index)
|
233
|
+
|
234
|
+
def calculate_rocr(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
235
|
+
close = df["close"].values
|
236
|
+
rocr = talib.ROCR(close, timeperiod=window)
|
237
|
+
return pd.DataFrame({"rocr": rocr}, index=df.index)
|
238
|
+
|
239
|
+
def calculate_rocr100(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
240
|
+
close = df["close"].values
|
241
|
+
rocr100 = talib.ROCR100(close, timeperiod=window)
|
242
|
+
return pd.DataFrame({"rocr100": rocr100}, index=df.index)
|
243
|
+
|
244
|
+
def calculate_trix(self, df: pd.DataFrame, window: int) -> pd.DataFrame:
|
245
|
+
close = df["close"].values
|
246
|
+
trix = talib.TRIX(close, timeperiod=window)
|
247
|
+
return pd.DataFrame({"trix": trix}, index=df.index)
|
248
|
+
|
249
|
+
def calculate_ultosc(
|
250
|
+
self, df: pd.DataFrame, window1: int, window2: int, window3: int
|
251
|
+
) -> pd.DataFrame:
|
252
|
+
high = df["high"].values
|
253
|
+
low = df["low"].values
|
254
|
+
close = df["close"].values
|
255
|
+
ultosc = talib.ULTOSC(
|
256
|
+
high,
|
257
|
+
low,
|
258
|
+
close,
|
259
|
+
timeperiod1=window1,
|
260
|
+
timeperiod2=window2,
|
261
|
+
timeperiod3=window3,
|
262
|
+
)
|
263
|
+
return pd.DataFrame({"ultosc": ultosc}, index=df.index)
|
akshare_one/modules/info/base.py
CHANGED
@@ -1,25 +1,25 @@
|
|
1
|
-
from abc import ABC, abstractmethod
|
2
|
-
import pandas as pd
|
3
|
-
|
4
|
-
|
5
|
-
class InfoDataProvider(ABC):
|
6
|
-
def __init__(self, symbol: str) -> None:
|
7
|
-
self.symbol = symbol
|
8
|
-
|
9
|
-
@abstractmethod
|
10
|
-
def get_basic_info(self) -> pd.DataFrame:
|
11
|
-
"""Fetches stock basic info data
|
12
|
-
|
13
|
-
Returns:
|
14
|
-
pd.DataFrame:
|
15
|
-
- price: 最新价
|
16
|
-
- symbol: 股票代码
|
17
|
-
- name: 股票简称
|
18
|
-
- total_shares: 总股本
|
19
|
-
- float_shares: 流通股
|
20
|
-
- total_market_cap: 总市值
|
21
|
-
- float_market_cap: 流通市值
|
22
|
-
- industry: 行业
|
23
|
-
- listing_date: 上市时间
|
24
|
-
"""
|
25
|
-
pass
|
1
|
+
from abc import ABC, abstractmethod
|
2
|
+
import pandas as pd
|
3
|
+
|
4
|
+
|
5
|
+
class InfoDataProvider(ABC):
|
6
|
+
def __init__(self, symbol: str) -> None:
|
7
|
+
self.symbol = symbol
|
8
|
+
|
9
|
+
@abstractmethod
|
10
|
+
def get_basic_info(self) -> pd.DataFrame:
|
11
|
+
"""Fetches stock basic info data
|
12
|
+
|
13
|
+
Returns:
|
14
|
+
pd.DataFrame:
|
15
|
+
- price: 最新价
|
16
|
+
- symbol: 股票代码
|
17
|
+
- name: 股票简称
|
18
|
+
- total_shares: 总股本
|
19
|
+
- float_shares: 流通股
|
20
|
+
- total_market_cap: 总市值
|
21
|
+
- float_market_cap: 流通市值
|
22
|
+
- industry: 行业
|
23
|
+
- listing_date: 上市时间
|
24
|
+
"""
|
25
|
+
pass
|