akshare-one 0.3.1__py3-none-any.whl → 0.3.2__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 +31 -31
- akshare_one/financial.py +46 -46
- akshare_one/indicators.py +395 -395
- akshare_one/insider.py +33 -33
- akshare_one/modules/cache.py +9 -9
- akshare_one/modules/eastmoney/client.py +88 -88
- akshare_one/modules/eastmoney/utils.py +104 -104
- akshare_one/modules/financial/base.py +22 -22
- akshare_one/modules/financial/factory.py +44 -44
- akshare_one/modules/financial/sina.py +273 -273
- akshare_one/modules/historical/base.py +47 -47
- akshare_one/modules/historical/eastmoney.py +241 -241
- akshare_one/modules/historical/eastmoney_direct.py +79 -79
- akshare_one/modules/historical/factory.py +48 -48
- akshare_one/modules/historical/sina.py +254 -254
- akshare_one/modules/indicators/base.py +158 -158
- akshare_one/modules/indicators/factory.py +33 -33
- akshare_one/modules/indicators/simple.py +230 -230
- akshare_one/modules/indicators/talib.py +263 -263
- akshare_one/modules/insider/base.py +28 -28
- akshare_one/modules/insider/factory.py +44 -44
- akshare_one/modules/insider/xueqiu.py +115 -115
- akshare_one/modules/news/base.py +22 -22
- akshare_one/modules/news/eastmoney.py +47 -47
- akshare_one/modules/news/factory.py +44 -44
- akshare_one/modules/realtime/base.py +27 -27
- akshare_one/modules/realtime/eastmoney.py +57 -57
- akshare_one/modules/realtime/eastmoney_direct.py +37 -37
- akshare_one/modules/realtime/factory.py +48 -48
- akshare_one/modules/realtime/xueqiu.py +60 -60
- akshare_one/modules/utils.py +10 -10
- akshare_one/news.py +27 -27
- akshare_one/stock.py +78 -78
- {akshare_one-0.3.1.dist-info → akshare_one-0.3.2.dist-info}/METADATA +70 -70
- akshare_one-0.3.2.dist-info/RECORD +39 -0
- {akshare_one-0.3.1.dist-info → akshare_one-0.3.2.dist-info}/licenses/LICENSE +21 -21
- akshare_one-0.3.1.dist-info/RECORD +0 -39
- {akshare_one-0.3.1.dist-info → akshare_one-0.3.2.dist-info}/WHEEL +0 -0
- {akshare_one-0.3.1.dist-info → akshare_one-0.3.2.dist-info}/top_level.txt +0 -0
@@ -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
|
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,28 +1,28 @@
|
|
1
|
-
from abc import ABC, abstractmethod
|
2
|
-
import pandas as pd
|
3
|
-
|
4
|
-
|
5
|
-
class InsiderDataProvider(ABC):
|
6
|
-
def __init__(self, symbol: str) -> None:
|
7
|
-
self.symbol = symbol
|
8
|
-
|
9
|
-
@abstractmethod
|
10
|
-
def get_inner_trade_data(self) -> pd.DataFrame:
|
11
|
-
"""Fetches insider trade data
|
12
|
-
|
13
|
-
Returns:
|
14
|
-
pd.DataFrame:
|
15
|
-
- symbol: 股票代码
|
16
|
-
- issuer: 股票名称
|
17
|
-
- name: 变动人
|
18
|
-
- title: 董监高职务
|
19
|
-
- transaction_date: 变动日期(UTC时区)
|
20
|
-
- transaction_shares: 变动股数
|
21
|
-
- transaction_price_per_share: 成交均价
|
22
|
-
- shares_owned_after_transaction: 变动后持股数
|
23
|
-
- relationship: 与董监高关系
|
24
|
-
- is_board_director: 是否为董事会成员
|
25
|
-
- transaction_value: 交易金额(变动股数*成交均价)
|
26
|
-
- shares_owned_before_transaction: 变动前持股数
|
27
|
-
"""
|
28
|
-
pass
|
1
|
+
from abc import ABC, abstractmethod
|
2
|
+
import pandas as pd
|
3
|
+
|
4
|
+
|
5
|
+
class InsiderDataProvider(ABC):
|
6
|
+
def __init__(self, symbol: str) -> None:
|
7
|
+
self.symbol = symbol
|
8
|
+
|
9
|
+
@abstractmethod
|
10
|
+
def get_inner_trade_data(self) -> pd.DataFrame:
|
11
|
+
"""Fetches insider trade data
|
12
|
+
|
13
|
+
Returns:
|
14
|
+
pd.DataFrame:
|
15
|
+
- symbol: 股票代码
|
16
|
+
- issuer: 股票名称
|
17
|
+
- name: 变动人
|
18
|
+
- title: 董监高职务
|
19
|
+
- transaction_date: 变动日期(UTC时区)
|
20
|
+
- transaction_shares: 变动股数
|
21
|
+
- transaction_price_per_share: 成交均价
|
22
|
+
- shares_owned_after_transaction: 变动后持股数
|
23
|
+
- relationship: 与董监高关系
|
24
|
+
- is_board_director: 是否为董事会成员
|
25
|
+
- transaction_value: 交易金额(变动股数*成交均价)
|
26
|
+
- shares_owned_before_transaction: 变动前持股数
|
27
|
+
"""
|
28
|
+
pass
|