ezKit 1.9.10__tar.gz → 1.9.11__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ezKit
3
- Version: 1.9.10
3
+ Version: 1.9.11
4
4
  Summary: Easy Kit
5
5
  Author: septvean
6
6
  Author-email: septvean@gmail.com
@@ -94,16 +94,17 @@ def kdj_vector(
94
94
  # 有采用 ewm 使用 com=2 的, 但是如果使用 com=2 在默认值的情况下KDJ值是正确的.
95
95
  # 但是非默认值, 比如调整参数, 尝试慢速 KDJ 时就不对了, 最终采用 alpha = 1/m 的情况, 对比同花顺数据, 是正确的.
96
96
 
97
- # 判断参数是否正确
98
- match True:
99
- case True if not utils.isTrue(df, DataFrame):
100
- logger.error("argument error: df")
101
- return None
102
- case True if not any([utils.isTrue(kdj_options, tuple), all(utils.isTrue(item, int) for item in kdj_options)]):
103
- logger.error("argument error: kdj_options")
104
- return None
105
- case _:
106
- pass
97
+ # 检查参数
98
+ if isinstance(df, DataFrame) and df.empty:
99
+ logger.error("argument error: df")
100
+ return None
101
+
102
+ if not utils.check_arguments([(kdj_options, tuple, "kdj_options")]):
103
+ return None
104
+
105
+ if not all(utils.isTrue(item, int) for item in kdj_options):
106
+ logger.error("argument error: kdj_options")
107
+ return None
107
108
 
108
109
  try:
109
110
  low_list = df['low'].rolling(kdj_options[0]).min()
@@ -128,25 +129,23 @@ def data_vector(
128
129
  ) -> DataFrame | None:
129
130
  """数据运算"""
130
131
 
131
- # 判断参数是否正确
132
- match True:
133
- case True if not utils.isTrue(df, DataFrame):
134
- logger.error("argument error: df")
135
- return None
136
- case True if not any([utils.isTrue(macd_options, tuple), all(utils.isTrue(item, int) for item in macd_options)]):
137
- logger.error("argument error: macd_options")
138
- return None
139
- case True if not any([utils.isTrue(kdj_options, tuple), all(utils.isTrue(item, int) for item in kdj_options)]):
140
- logger.error("argument error: kdj_options")
141
- return None
142
- case _:
143
- pass
132
+ # 检查参数
133
+ if isinstance(df, DataFrame) and df.empty:
134
+ logger.error("argument error: df")
135
+ return None
144
136
 
145
- try:
137
+ if not utils.check_arguments([(macd_options, tuple, "macd_options"), (kdj_options, tuple, "kdj_options")]):
138
+ return None
146
139
 
147
- # 数据为空
148
- if isinstance(df, DataFrame) and df.empty:
149
- return None
140
+ if not all(utils.isTrue(item, int) for item in macd_options):
141
+ logger.error("argument error: macd_options")
142
+ return None
143
+
144
+ if not all(utils.isTrue(item, int) for item in kdj_options):
145
+ logger.error("argument error: kdj_options")
146
+ return None
147
+
148
+ try:
150
149
 
151
150
  # ------------------------------------------------------------------------------------------
152
151
 
@@ -174,7 +173,13 @@ def data_vector(
174
173
  # ------------------------------------------------------------------------------------------
175
174
 
176
175
  # 计算 MACD: 默认参数 12 26 9
177
- macd_dif, macd_dea, macd_bar = ta.MACD(df['close'].values, fastperiod=macd_options[0], slowperiod=macd_options[1], signalperiod=macd_options[2]) # type: ignore
176
+ macd_dif, macd_dea, macd_bar = ta.MACD( # type: ignore
177
+ df['close'].values,
178
+ fastperiod=macd_options[0],
179
+ slowperiod=macd_options[1],
180
+ signalperiod=macd_options[2]
181
+ )
182
+
178
183
  macd_dif[np.isnan(macd_dif)], macd_dea[np.isnan(macd_dea)], macd_bar[np.isnan(macd_bar)] = 0, 0, 0
179
184
 
180
185
  # https://www.bilibili.com/read/cv10185856
@@ -182,15 +187,26 @@ def data_vector(
182
187
  df['MACD_DIF'] = macd_dif
183
188
  df['MACD_DEA'] = macd_dea
184
189
 
185
- # MACD 金叉死叉: 0 无, 1 金叉, 2 死叉
190
+ # 初始化 MACD_X 列(0 无, 1 金叉, 2 死叉)
186
191
  df['MACD_X'] = 0
192
+
193
+ # 计算 MACD 条件
187
194
  macd_position = df['MACD_DIF'] > df['MACD_DEA']
188
- df.loc[macd_position[(macd_position is True) & (macd_position.shift() is False)].index, 'MACD_X'] = 1 # type: ignore
189
- df.loc[macd_position[(macd_position is False) & (macd_position.shift() is True)].index, 'MACD_X'] = 2 # type: ignore
195
+
196
+ # 设置 MACD_X = 1: False 变为 True 的位置
197
+ df.loc[macd_position & ~macd_position.shift(fill_value=False), 'MACD_X'] = 1
198
+
199
+ # 设置 MACD_X = 2: 从 True 变为 False 的位置
200
+ df.loc[~macd_position & macd_position.shift(fill_value=False), 'MACD_X'] = 2
201
+
202
+ # 将浮点数限制为小数点后两位
203
+ df['MACD'] = df['MACD'].round(2)
204
+ df['MACD_DIF'] = df['MACD_DIF'].round(2)
205
+ df['MACD_DEA'] = df['MACD_DEA'].round(2)
190
206
 
191
207
  # ------------------------------------------------------------------------------------------
192
208
 
193
- # 计算 KDJ: : 默认参数 9 3 3
209
+ # # 计算 KDJ: : 默认参数 9 3 3
194
210
  kdj_data = kdj_vector(df, kdj_options)
195
211
 
196
212
  if kdj_data is not None:
@@ -200,11 +216,22 @@ def data_vector(
200
216
  df['D'] = kdj_data['D'].values
201
217
  df['J'] = kdj_data['J'].values
202
218
 
203
- # KDJ 金叉死叉: 0 无, 1 金叉, 2 死叉
219
+ # 初始化 KDJ_X 列(0 无, 1 金叉, 2 死叉)
204
220
  df['KDJ_X'] = 0
221
+
222
+ # 计算 MACD 条件
205
223
  kdj_position = df['J'] > df['D']
206
- df.loc[kdj_position[(kdj_position is True) & (kdj_position.shift() is False)].index, 'KDJ_X'] = 1 # type: ignore
207
- df.loc[kdj_position[(kdj_position is False) & (kdj_position.shift() is True)].index, 'KDJ_X'] = 2 # type: ignore
224
+
225
+ # 设置 KDJ_X = 1: False 变为 True 的位置
226
+ df.loc[kdj_position & ~kdj_position.shift(fill_value=False), 'KDJ_X'] = 1
227
+
228
+ # 设置 KDJ_X = 2: 从 True 变为 False 的位置
229
+ df.loc[~kdj_position & kdj_position.shift(fill_value=False), 'KDJ_X'] = 2
230
+
231
+ # 将浮点数限制为小数点后两位
232
+ df['K'] = df['K'].round(2)
233
+ df['D'] = df['D'].round(2)
234
+ df['J'] = df['J'].round(2)
208
235
 
209
236
  # ------------------------------------------------------------------------------------------
210
237
 
@@ -261,12 +288,10 @@ def get_stock_data_from_akshare(
261
288
  "收盘": "close",
262
289
  "最高": "high",
263
290
  "最低": "low",
264
- "成交量": "volume",
265
- "成交额": "turnover"
291
+ "成交量": "volume"
266
292
  })
267
- df = df.round({'turnover': 4})
268
293
  logger.success(f"{info} [成功]")
269
- return df[['date', 'open', 'close', 'high', 'low', 'volume', 'turnover']].copy()
294
+ return df[['date', 'open', 'close', 'high', 'low', 'volume']].copy()
270
295
  except Exception as e:
271
296
  logger.error(f"{info} [失败]")
272
297
  logger.exception(e)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ezKit
3
- Version: 1.9.10
3
+ Version: 1.9.11
4
4
  Summary: Easy Kit
5
5
  Author: septvean
6
6
  Author-email: septvean@gmail.com
@@ -3,7 +3,7 @@ from setuptools import find_packages, setup
3
3
 
4
4
  setup(
5
5
  name='ezKit',
6
- version='1.9.10',
6
+ version='1.9.11',
7
7
  author='septvean',
8
8
  author_email='septvean@gmail.com',
9
9
  description='Easy Kit',
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes