aishare-txt 2025.11.6.13__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.
- AIShareTxt/__init__.py +63 -0
- AIShareTxt/ai/__init__.py +11 -0
- AIShareTxt/ai/client.py +313 -0
- AIShareTxt/ai/providers/__init__.py +8 -0
- AIShareTxt/core/__init__.py +17 -0
- AIShareTxt/core/analyzer.py +495 -0
- AIShareTxt/core/config.py +324 -0
- AIShareTxt/core/data_fetcher.py +593 -0
- AIShareTxt/core/report_generator.py +783 -0
- AIShareTxt/docs/AI_INTEGRATION.md +212 -0
- AIShareTxt/docs/README_/351/207/215/346/236/204/350/257/264/346/230/216.md +202 -0
- AIShareTxt/docs//351/207/215/346/236/204/345/256/214/346/210/220/346/200/273/347/273/223.md +148 -0
- AIShareTxt/examples/legacy_api.py +259 -0
- AIShareTxt/indicators/__init__.py +15 -0
- AIShareTxt/indicators/technical_indicators.py +507 -0
- AIShareTxt/tests/__init__.py +11 -0
- AIShareTxt/utils/__init__.py +17 -0
- AIShareTxt/utils/stock_list.py +305 -0
- AIShareTxt/utils/utils.py +578 -0
- aishare_txt-2025.11.6.13.dist-info/METADATA +475 -0
- aishare_txt-2025.11.6.13.dist-info/RECORD +25 -0
- aishare_txt-2025.11.6.13.dist-info/WHEEL +5 -0
- aishare_txt-2025.11.6.13.dist-info/entry_points.txt +2 -0
- aishare_txt-2025.11.6.13.dist-info/licenses/LICENSE +194 -0
- aishare_txt-2025.11.6.13.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
股票技术指标分析器配置文件
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import os
|
|
8
|
+
|
|
9
|
+
class IndicatorConfig:
|
|
10
|
+
"""配置类,包含所有硬编码的常量和阈值"""
|
|
11
|
+
|
|
12
|
+
# 均线周期配置
|
|
13
|
+
MA_PERIODS = {
|
|
14
|
+
'short': [5, 10, 20, 30],
|
|
15
|
+
'medium': [60],
|
|
16
|
+
'long': []
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
# EMA周期配置
|
|
20
|
+
EMA_PERIODS = [5, 10, 12, 20, 26]
|
|
21
|
+
|
|
22
|
+
# WMA周期配置
|
|
23
|
+
WMA_PERIODS = [10, 20]
|
|
24
|
+
|
|
25
|
+
# MACD配置
|
|
26
|
+
MACD_CONFIG = {
|
|
27
|
+
'fastperiod': 12,
|
|
28
|
+
'slowperiod': 26,
|
|
29
|
+
'signalperiod': 9
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
# 布林带配置
|
|
33
|
+
BOLLINGER_BANDS_CONFIG = {
|
|
34
|
+
'timeperiod': 20,
|
|
35
|
+
'nbdevup': 2,
|
|
36
|
+
'nbdevdn': 2,
|
|
37
|
+
'matype': 0
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
# RSI配置
|
|
41
|
+
RSI_PERIODS = [9, 14]
|
|
42
|
+
|
|
43
|
+
# KD指标配置
|
|
44
|
+
STOCH_CONFIG = {
|
|
45
|
+
'fastk_period': 9,
|
|
46
|
+
'slowk_period': 3,
|
|
47
|
+
'slowk_matype': 0,
|
|
48
|
+
'slowd_period': 3,
|
|
49
|
+
'slowd_matype': 0
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
# ADX/DMI配置
|
|
53
|
+
ADX_PERIOD = 14
|
|
54
|
+
|
|
55
|
+
# ATR配置
|
|
56
|
+
ATR_PERIOD = 14
|
|
57
|
+
|
|
58
|
+
# VWAP配置
|
|
59
|
+
VWAP_PERIOD = 14
|
|
60
|
+
|
|
61
|
+
# BIAS乖离率配置
|
|
62
|
+
BIAS_PERIODS = [5, 10, 20]
|
|
63
|
+
|
|
64
|
+
# OBV分析配置
|
|
65
|
+
OBV_CONFIG = {
|
|
66
|
+
'short_period': 5,
|
|
67
|
+
'medium_period': 20,
|
|
68
|
+
'extrema_order': 3 # 局部极值检测的最小间隔
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
# 均线形态分析阈值
|
|
72
|
+
MA_THRESHOLDS = {
|
|
73
|
+
'support_resistance': 0.02, # 2%以内视为支撑/阻力
|
|
74
|
+
'divergence_strong': 0.02, # 2%以上为强发散
|
|
75
|
+
'divergence_weak': 0.01, # 1%以下为弱发散
|
|
76
|
+
'adhesion_tight': 0.003, # 0.3%以下为紧密粘合
|
|
77
|
+
'adhesion_loose': 0.005, # 0.5%以下为一般粘合
|
|
78
|
+
'adhesion_range': 0.01 # 1%以下为粘合范围
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
# RSI区间定义
|
|
82
|
+
RSI_ZONES = {
|
|
83
|
+
'overbought': 70,
|
|
84
|
+
'neutral_high': 50,
|
|
85
|
+
'neutral_low': 30,
|
|
86
|
+
'oversold': 0
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
# ADX强度等级
|
|
90
|
+
ADX_LEVELS = {
|
|
91
|
+
'strong_trend': 40,
|
|
92
|
+
'medium_trend': 25,
|
|
93
|
+
'weak_trend': 0
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
# 资金流强度等级
|
|
97
|
+
FUND_FLOW_LEVELS = {
|
|
98
|
+
'strong': 5.0, # 5%以上为强烈
|
|
99
|
+
'active': 2.0, # 2%以上为活跃
|
|
100
|
+
'moderate': 1.0, # 1%以上为温和
|
|
101
|
+
'weak': 0 # 1%以下为平淡
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
# 波动率等级
|
|
105
|
+
VOLATILITY_LEVELS = {
|
|
106
|
+
'high': 5.0, # 5%以上为高波动
|
|
107
|
+
'medium': 3.0, # 3-5%为中等波动
|
|
108
|
+
'low': 1.0, # 1-3%为低波动
|
|
109
|
+
'very_low': 0 # 1%以下为极低波动
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
# 量比等级
|
|
113
|
+
VOLUME_RATIO_LEVELS = {
|
|
114
|
+
'heavy': 2.0, # 2倍以上为放量
|
|
115
|
+
'moderate': 1.5, # 1.5-2倍为温和放量
|
|
116
|
+
'normal': 0.8, # 0.8-1.5倍为正常
|
|
117
|
+
'light': 0 # 0.8倍以下为缩量
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
# 市值规模分类(单位:亿元)
|
|
121
|
+
MARKET_CAP_LEVELS = {
|
|
122
|
+
'mega': 1000, # 超大盘股
|
|
123
|
+
'large': 300, # 大盘股
|
|
124
|
+
'medium': 100, # 中盘股
|
|
125
|
+
'small_medium': 50, # 中小盘股
|
|
126
|
+
'small': 0 # 小盘股
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
# 显示精度配置
|
|
130
|
+
DISPLAY_PRECISION = {
|
|
131
|
+
'price': 2, # 价格显示2位小数
|
|
132
|
+
'percentage': 2, # 百分比显示2位小数
|
|
133
|
+
'ratio': 2, # 比率显示2位小数
|
|
134
|
+
'volume_wan': 0, # 成交量(万元)显示整数
|
|
135
|
+
'macd': 4, # MACD显示4位小数
|
|
136
|
+
'atr': 4 # ATR显示4位小数
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
# 数据获取配置
|
|
140
|
+
DATA_CONFIG = {
|
|
141
|
+
'default_period': 'daily',
|
|
142
|
+
'default_adjust': 'qfq', # 前复权
|
|
143
|
+
'required_columns': ['date', 'open', 'close', 'high', 'low', 'volume'],
|
|
144
|
+
'min_data_length': 60, # 最少需要60个交易日数据
|
|
145
|
+
'default_months_back': 4 # 默认获取往前推4个月的数据
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
# 列名映射
|
|
149
|
+
COLUMN_MAPPING = {
|
|
150
|
+
'日期': 'date',
|
|
151
|
+
'开盘': 'open',
|
|
152
|
+
'收盘': 'close',
|
|
153
|
+
'最高': 'high',
|
|
154
|
+
'最低': 'low',
|
|
155
|
+
'成交量': 'volume',
|
|
156
|
+
'成交额': 'turnover',
|
|
157
|
+
'振幅': 'amplitude',
|
|
158
|
+
'涨跌幅': 'pct_chg',
|
|
159
|
+
'涨跌额': 'change',
|
|
160
|
+
'换手率': 'turnover_rate'
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
# 报告格式配置
|
|
164
|
+
REPORT_CONFIG = {
|
|
165
|
+
'title_separator': '=' * 60,
|
|
166
|
+
'section_separator': '-' * 40,
|
|
167
|
+
'min_fund_display_threshold': 100 # 超过100万才显示的资金流阈值(万元)
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
# 错误消息
|
|
171
|
+
ERROR_MESSAGES = {
|
|
172
|
+
'no_data': "错误:无法获取股票数据",
|
|
173
|
+
'invalid_code': "错误:股票代码格式错误",
|
|
174
|
+
'network_error': "错误:网络连接问题",
|
|
175
|
+
'api_error': "错误:数据接口暂时不可用",
|
|
176
|
+
'data_insufficient': "错误:数据不足,无法计算指标",
|
|
177
|
+
'calculation_failed': "错误:指标计算失败"
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
# 市场代码映射
|
|
181
|
+
MARKET_MAPPING = {
|
|
182
|
+
'6': 'sh', # 上海市场
|
|
183
|
+
'0': 'sz', # 深圳市场
|
|
184
|
+
'3': 'sz' # 深圳市场(创业板)
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
# AI配置
|
|
188
|
+
AI_CONFIG = {
|
|
189
|
+
# 默认使用的AI提供商
|
|
190
|
+
'default_provider': 'deepseek', # 可选: 'deepseek', 'zhipuai'
|
|
191
|
+
|
|
192
|
+
# DeepSeek AI配置
|
|
193
|
+
'deepseek': {
|
|
194
|
+
'api_key': os.environ.get('DEEPSEEK_API_KEY'), # DeepSeek API密钥(从环境变量获取)
|
|
195
|
+
'base_url': 'https://api.deepseek.com', # DeepSeek API地址
|
|
196
|
+
'model': 'deepseek-chat', # 使用的模型
|
|
197
|
+
'max_tokens': 100, # 最大输出token数
|
|
198
|
+
'temperature': 0.6 # 控制随机性,降低以提高一致性
|
|
199
|
+
},
|
|
200
|
+
|
|
201
|
+
# 智谱AI配置
|
|
202
|
+
'zhipuai': {
|
|
203
|
+
'api_key': os.environ.get('ZHIPUAI_API_KEY'), # 智谱AI API密钥
|
|
204
|
+
'model': 'glm-4.5-flash', # 使用的模型
|
|
205
|
+
'max_tokens': 100, # 最大输出token数
|
|
206
|
+
'temperature': 0.6 # 控制随机性,降低以提高一致性
|
|
207
|
+
},
|
|
208
|
+
|
|
209
|
+
# 投资建议配置
|
|
210
|
+
'recommendation': {
|
|
211
|
+
'prompt_template': """
|
|
212
|
+
我打算以最新价格买入,在三个交易日内卖出。分析以下股票是否能够买入,返回结果可以是1:立即买入、-1:风险高于收益,不适合买入、0:当前不是买点需要观望这三种,请不要返回其他内容,仅返回对应的数字。
|
|
213
|
+
|
|
214
|
+
股票代码: {stock_code}
|
|
215
|
+
技术分析报告:
|
|
216
|
+
{technical_report}
|
|
217
|
+
""",
|
|
218
|
+
'system_message': '你是一个专业的中国股票分析师。',
|
|
219
|
+
# 结果映射(确保符合项目规范)
|
|
220
|
+
'valid_scores': [1, -1, 0], # 1:立即买入, -1:不适合买入, 0:观望等待
|
|
221
|
+
'score_descriptions': {
|
|
222
|
+
1: '立即买入',
|
|
223
|
+
-1: '不适合买入',
|
|
224
|
+
0: '观望等待'
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
# 日志配置
|
|
230
|
+
LOGGING_CONFIG = {
|
|
231
|
+
'version': 1,
|
|
232
|
+
'disable_existing_loggers': False,
|
|
233
|
+
'formatters': {
|
|
234
|
+
'detailed': {
|
|
235
|
+
'format': '%(asctime)s - %(name)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s',
|
|
236
|
+
'datefmt': '%Y-%m-%d %H:%M:%S'
|
|
237
|
+
},
|
|
238
|
+
'simple': {
|
|
239
|
+
'format': '%(asctime)s - %(levelname)s - %(message)s',
|
|
240
|
+
'datefmt': '%Y-%m-%d %H:%M:%S'
|
|
241
|
+
},
|
|
242
|
+
'console': {
|
|
243
|
+
'format': '[%(levelname)s] %(message)s'
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
'handlers': {
|
|
247
|
+
'console': {
|
|
248
|
+
'class': 'logging.StreamHandler',
|
|
249
|
+
'level': 'INFO',
|
|
250
|
+
'formatter': 'console',
|
|
251
|
+
'stream': 'ext://sys.stdout'
|
|
252
|
+
},
|
|
253
|
+
'file': {
|
|
254
|
+
'class': 'logging.handlers.RotatingFileHandler',
|
|
255
|
+
'level': 'DEBUG',
|
|
256
|
+
'formatter': 'detailed',
|
|
257
|
+
'filename': 'stock_analyzer.log',
|
|
258
|
+
'maxBytes': 10485760, # 10MB
|
|
259
|
+
'backupCount': 5,
|
|
260
|
+
'encoding': 'utf-8'
|
|
261
|
+
},
|
|
262
|
+
'error_file': {
|
|
263
|
+
'class': 'logging.handlers.RotatingFileHandler',
|
|
264
|
+
'level': 'ERROR',
|
|
265
|
+
'formatter': 'detailed',
|
|
266
|
+
'filename': 'stock_analyzer_errors.log',
|
|
267
|
+
'maxBytes': 10485760, # 10MB
|
|
268
|
+
'backupCount': 3,
|
|
269
|
+
'encoding': 'utf-8'
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
'loggers': {
|
|
273
|
+
'stock_analyzer': {
|
|
274
|
+
'level': 'DEBUG',
|
|
275
|
+
'handlers': ['file', 'error_file'],
|
|
276
|
+
'propagate': False
|
|
277
|
+
},
|
|
278
|
+
'stock_analyzer.data_fetcher': {
|
|
279
|
+
'level': 'DEBUG',
|
|
280
|
+
'handlers': ['file'],
|
|
281
|
+
'propagate': False
|
|
282
|
+
},
|
|
283
|
+
'stock_analyzer.technical_indicators': {
|
|
284
|
+
'level': 'DEBUG',
|
|
285
|
+
'handlers': ['file'],
|
|
286
|
+
'propagate': False
|
|
287
|
+
},
|
|
288
|
+
'stock_analyzer.report_generator': {
|
|
289
|
+
'level': 'DEBUG',
|
|
290
|
+
'handlers': ['file'],
|
|
291
|
+
'propagate': False
|
|
292
|
+
},
|
|
293
|
+
'stock_analyzer.utils': {
|
|
294
|
+
'level': 'DEBUG',
|
|
295
|
+
'handlers': ['file'],
|
|
296
|
+
'propagate': False
|
|
297
|
+
}
|
|
298
|
+
},
|
|
299
|
+
'root': {
|
|
300
|
+
'level': 'WARNING',
|
|
301
|
+
'handlers': []
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
# 日志级别配置
|
|
306
|
+
LOG_LEVELS = {
|
|
307
|
+
'DEBUG': 10,
|
|
308
|
+
'INFO': 20,
|
|
309
|
+
'WARNING': 30,
|
|
310
|
+
'ERROR': 40,
|
|
311
|
+
'CRITICAL': 50
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
# 默认日志设置
|
|
315
|
+
DEFAULT_LOG_LEVEL = 'INFO'
|
|
316
|
+
LOG_TO_FILE = True
|
|
317
|
+
LOG_TO_CONSOLE = False # 设置为False禁用控制台输出
|
|
318
|
+
LOG_FILE_PATH = 'logs/'
|
|
319
|
+
LOG_MAX_SIZE = 10 * 1024 * 1024 # 10MB
|
|
320
|
+
LOG_BACKUP_COUNT = 5
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
# 向后兼容的别名
|
|
324
|
+
Config = IndicatorConfig
|