akshare-one 0.3.0__py3-none-any.whl → 0.3.1__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.
Files changed (39) hide show
  1. akshare_one/__init__.py +31 -31
  2. akshare_one/financial.py +46 -46
  3. akshare_one/indicators.py +395 -395
  4. akshare_one/insider.py +33 -33
  5. akshare_one/modules/cache.py +9 -9
  6. akshare_one/modules/eastmoney/client.py +88 -88
  7. akshare_one/modules/eastmoney/utils.py +104 -104
  8. akshare_one/modules/financial/base.py +22 -22
  9. akshare_one/modules/financial/factory.py +44 -44
  10. akshare_one/modules/financial/sina.py +273 -273
  11. akshare_one/modules/historical/base.py +47 -47
  12. akshare_one/modules/historical/eastmoney.py +241 -241
  13. akshare_one/modules/historical/eastmoney_direct.py +79 -79
  14. akshare_one/modules/historical/factory.py +48 -48
  15. akshare_one/modules/historical/sina.py +254 -218
  16. akshare_one/modules/indicators/base.py +158 -158
  17. akshare_one/modules/indicators/factory.py +33 -33
  18. akshare_one/modules/indicators/simple.py +230 -230
  19. akshare_one/modules/indicators/talib.py +263 -263
  20. akshare_one/modules/insider/base.py +28 -28
  21. akshare_one/modules/insider/factory.py +44 -44
  22. akshare_one/modules/insider/xueqiu.py +115 -115
  23. akshare_one/modules/news/base.py +22 -22
  24. akshare_one/modules/news/eastmoney.py +47 -47
  25. akshare_one/modules/news/factory.py +44 -44
  26. akshare_one/modules/realtime/base.py +27 -27
  27. akshare_one/modules/realtime/eastmoney.py +57 -57
  28. akshare_one/modules/realtime/eastmoney_direct.py +37 -37
  29. akshare_one/modules/realtime/factory.py +48 -48
  30. akshare_one/modules/realtime/xueqiu.py +60 -60
  31. akshare_one/modules/utils.py +10 -10
  32. akshare_one/news.py +27 -27
  33. akshare_one/stock.py +78 -78
  34. {akshare_one-0.3.0.dist-info → akshare_one-0.3.1.dist-info}/METADATA +70 -70
  35. akshare_one-0.3.1.dist-info/RECORD +39 -0
  36. {akshare_one-0.3.0.dist-info → akshare_one-0.3.1.dist-info}/licenses/LICENSE +21 -21
  37. akshare_one-0.3.0.dist-info/RECORD +0 -39
  38. {akshare_one-0.3.0.dist-info → akshare_one-0.3.1.dist-info}/WHEEL +0 -0
  39. {akshare_one-0.3.0.dist-info → akshare_one-0.3.1.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