aishare-txt 2025.11.6.13__tar.gz → 2025.11.24.23__tar.gz
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.
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/__init__.py +1 -1
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/core/analyzer.py +58 -17
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/core/config.py +2 -2
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/core/report_generator.py +67 -15
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/docs/README_/351/207/215/346/236/204/350/257/264/346/230/216.md +1 -1
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/indicators/technical_indicators.py +17 -7
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/utils/utils.py +21 -4
- {aishare_txt-2025.11.6.13/aishare_txt.egg-info → aishare_txt-2025.11.24.23}/PKG-INFO +5 -4
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/README.md +4 -4
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23/aishare_txt.egg-info}/PKG-INFO +5 -4
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/aishare_txt.egg-info/requires.txt +1 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/requirements.txt +1 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/setup.py +1 -1
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/ai/__init__.py +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/ai/client.py +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/ai/providers/__init__.py +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/core/__init__.py +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/core/data_fetcher.py +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/docs/AI_INTEGRATION.md +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/docs//351/207/215/346/236/204/345/256/214/346/210/220/346/200/273/347/273/223.md" +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/examples/legacy_api.py +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/indicators/__init__.py +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/tests/__init__.py +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/utils/__init__.py +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/utils/stock_list.py +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/LICENSE +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/MANIFEST.in +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/aishare_txt.egg-info/SOURCES.txt +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/aishare_txt.egg-info/dependency_links.txt +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/aishare_txt.egg-info/entry_points.txt +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/aishare_txt.egg-info/not-zip-safe +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/aishare_txt.egg-info/top_level.txt +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/requirements-dev.txt +0 -0
- {aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/setup.cfg +0 -0
|
@@ -9,7 +9,7 @@ import warnings
|
|
|
9
9
|
from .data_fetcher import StockDataFetcher
|
|
10
10
|
from ..indicators.technical_indicators import TechnicalIndicators
|
|
11
11
|
from .report_generator import ReportGenerator
|
|
12
|
-
from ..utils.utils import Logger, LoggerManager, Utils, DataValidator, ErrorHandler
|
|
12
|
+
from ..utils.utils import Logger, LoggerManager, Utils, DataValidator, ErrorHandler, PerformanceMonitor
|
|
13
13
|
from .config import IndicatorConfig as Config
|
|
14
14
|
|
|
15
15
|
warnings.filterwarnings('ignore')
|
|
@@ -120,9 +120,10 @@ class StockAnalyzer:
|
|
|
120
120
|
# 生成报告
|
|
121
121
|
self.logger.info("生成分析报告...")
|
|
122
122
|
report = self.report_generator.generate_report(
|
|
123
|
-
stock_code,
|
|
124
|
-
self.indicators,
|
|
125
|
-
self.stock_info
|
|
123
|
+
stock_code,
|
|
124
|
+
self.indicators,
|
|
125
|
+
self.stock_info,
|
|
126
|
+
self.stock_data
|
|
126
127
|
)
|
|
127
128
|
|
|
128
129
|
if monitor:
|
|
@@ -172,9 +173,10 @@ class StockAnalyzer:
|
|
|
172
173
|
|
|
173
174
|
# 生成报告(不包含基本信息和资金流)
|
|
174
175
|
report = self.report_generator.generate_report(
|
|
175
|
-
stock_code,
|
|
176
|
-
self.indicators,
|
|
177
|
-
None # 不包含基本信息
|
|
176
|
+
stock_code,
|
|
177
|
+
self.indicators,
|
|
178
|
+
None, # 不包含基本信息
|
|
179
|
+
self.stock_data
|
|
178
180
|
)
|
|
179
181
|
|
|
180
182
|
return report
|
|
@@ -312,7 +314,7 @@ class StockAnalyzer:
|
|
|
312
314
|
'Bollinger Bands': f"参数: {self.config.BOLLINGER_BANDS_CONFIG}"
|
|
313
315
|
},
|
|
314
316
|
'量价指标': {
|
|
315
|
-
'
|
|
317
|
+
'VWMA': f"成交量加权移动平均,周期: {self.config.VWMA_PERIOD}",
|
|
316
318
|
'OBV': "能量潮指标"
|
|
317
319
|
},
|
|
318
320
|
'趋势强度': {
|
|
@@ -382,6 +384,15 @@ def quick_test(stock_code):
|
|
|
382
384
|
|
|
383
385
|
# 执行分析
|
|
384
386
|
report = analyzer.analyze_stock(stock_code, enable_performance_monitor=True)
|
|
387
|
+
|
|
388
|
+
# 检查分析结果是否为错误信息
|
|
389
|
+
if report and (report.startswith("错误:") or report.startswith("数据质量验证失败") or
|
|
390
|
+
report.startswith("指标验证失败") or report.startswith("分析过程中出错") or
|
|
391
|
+
"无数据" in report or "计算失败" in report):
|
|
392
|
+
print("\n" + report)
|
|
393
|
+
logger.error(f"快速测试股票 {stock_code} 失败: {report}")
|
|
394
|
+
return False
|
|
395
|
+
|
|
385
396
|
print("\n" + report)
|
|
386
397
|
|
|
387
398
|
# 显示分析摘要
|
|
@@ -403,8 +414,45 @@ def quick_test(stock_code):
|
|
|
403
414
|
|
|
404
415
|
def main():
|
|
405
416
|
"""主函数"""
|
|
406
|
-
analyzer = StockAnalyzer()
|
|
407
417
|
utils = Utils()
|
|
418
|
+
|
|
419
|
+
# 首先检查命令行参数(包括帮助参数)
|
|
420
|
+
stock_code = utils.parse_command_line_args()
|
|
421
|
+
if stock_code:
|
|
422
|
+
# 如果提供了股票代码,则初始化分析器并进行快速测试
|
|
423
|
+
analyzer = StockAnalyzer()
|
|
424
|
+
logger = LoggerManager.get_logger('stock_analyzer')
|
|
425
|
+
|
|
426
|
+
print("股票技术指标分析器 (重构版)")
|
|
427
|
+
print(utils.create_separator())
|
|
428
|
+
print("提示:可以在命令行直接运行 python stock_analyzer.py 000001 来快速测试")
|
|
429
|
+
logger.info("股票技术指标分析器启动")
|
|
430
|
+
|
|
431
|
+
# 验证分析环境
|
|
432
|
+
print("\n验证分析环境...")
|
|
433
|
+
logger.info("开始验证分析环境")
|
|
434
|
+
is_valid, errors = analyzer.validate_analysis_environment()
|
|
435
|
+
if not is_valid:
|
|
436
|
+
print("环境验证失败:")
|
|
437
|
+
logger.error("环境验证失败")
|
|
438
|
+
for error in errors:
|
|
439
|
+
print(f" [错误] {error}")
|
|
440
|
+
logger.error(f"环境错误: {error}")
|
|
441
|
+
return
|
|
442
|
+
else:
|
|
443
|
+
print("环境验证通过")
|
|
444
|
+
logger.info("环境验证通过")
|
|
445
|
+
|
|
446
|
+
logger.info(f"使用命令行参数启动快速测试: {stock_code}")
|
|
447
|
+
result = quick_test(stock_code)
|
|
448
|
+
if result:
|
|
449
|
+
print("\n分析完成!")
|
|
450
|
+
else:
|
|
451
|
+
print("\n分析失败,请检查日志获取详细信息。")
|
|
452
|
+
return
|
|
453
|
+
|
|
454
|
+
# 如果没有提供命令行参数,则进入交互模式
|
|
455
|
+
analyzer = StockAnalyzer()
|
|
408
456
|
logger = LoggerManager.get_logger('stock_analyzer')
|
|
409
457
|
|
|
410
458
|
print("股票技术指标分析器 (重构版)")
|
|
@@ -424,16 +472,9 @@ def main():
|
|
|
424
472
|
logger.error(f"环境错误: {error}")
|
|
425
473
|
return
|
|
426
474
|
else:
|
|
427
|
-
print("
|
|
475
|
+
print("环境验证通过")
|
|
428
476
|
logger.info("环境验证通过")
|
|
429
477
|
|
|
430
|
-
# 检查命令行参数
|
|
431
|
-
stock_code = utils.parse_command_line_args()
|
|
432
|
-
if stock_code:
|
|
433
|
-
logger.info(f"使用命令行参数启动快速测试: {stock_code}")
|
|
434
|
-
quick_test(stock_code)
|
|
435
|
-
return
|
|
436
|
-
|
|
437
478
|
# 交互模式
|
|
438
479
|
while True:
|
|
439
480
|
try:
|
|
@@ -14,15 +14,16 @@ class ReportGenerator:
|
|
|
14
14
|
def __init__(self):
|
|
15
15
|
self.config = Config()
|
|
16
16
|
|
|
17
|
-
def generate_report(self, stock_code, indicators, stock_info=None):
|
|
17
|
+
def generate_report(self, stock_code, indicators, stock_info=None, stock_data=None):
|
|
18
18
|
"""
|
|
19
19
|
生成完整的股票分析报告
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
Args:
|
|
22
22
|
stock_code (str): 股票代码
|
|
23
23
|
indicators (dict): 指标数据字典
|
|
24
24
|
stock_info (dict): 股票基本信息
|
|
25
|
-
|
|
25
|
+
stock_data (pd.DataFrame): 股票历史数据
|
|
26
|
+
|
|
26
27
|
Returns:
|
|
27
28
|
str: 格式化的报告文本
|
|
28
29
|
"""
|
|
@@ -47,7 +48,11 @@ class ReportGenerator:
|
|
|
47
48
|
report.extend(self._generate_fund_flow_section(indicators))
|
|
48
49
|
report.extend(self._generate_trend_strength_section(indicators))
|
|
49
50
|
report.extend(self._generate_summary_section(indicators))
|
|
50
|
-
|
|
51
|
+
|
|
52
|
+
# 最近5天OLHCV数据
|
|
53
|
+
if stock_data is not None:
|
|
54
|
+
report.extend(self._generate_recent_ohlcv_section(stock_data))
|
|
55
|
+
|
|
51
56
|
# 报告尾部
|
|
52
57
|
report.extend(self._generate_footer())
|
|
53
58
|
|
|
@@ -169,11 +174,11 @@ class ReportGenerator:
|
|
|
169
174
|
section.append("\n【四、量价辅助指标】")
|
|
170
175
|
section.append(self.config.REPORT_CONFIG['section_separator'])
|
|
171
176
|
|
|
172
|
-
#
|
|
173
|
-
if '
|
|
174
|
-
section.append("
|
|
175
|
-
section.append(f" 14日
|
|
176
|
-
section.append(f" 价格关系: {self.
|
|
177
|
+
# VWMA
|
|
178
|
+
if 'VWMA_14' in indicators:
|
|
179
|
+
section.append("成交量加权移动平均 (VWMA):")
|
|
180
|
+
section.append(f" 14日VWMA: {indicators.get('VWMA_14', 0):.{self.config.DISPLAY_PRECISION['price']}f}")
|
|
181
|
+
section.append(f" 价格关系: {self._get_vwma_relationship(indicators)}")
|
|
177
182
|
|
|
178
183
|
# OBV
|
|
179
184
|
if 'OBV_current' in indicators:
|
|
@@ -280,7 +285,7 @@ class ReportGenerator:
|
|
|
280
285
|
summary = self._collect_summary_items(indicators)
|
|
281
286
|
|
|
282
287
|
for item in summary:
|
|
283
|
-
section.append(f"
|
|
288
|
+
section.append(f"- {item}")
|
|
284
289
|
|
|
285
290
|
return section
|
|
286
291
|
|
|
@@ -353,11 +358,11 @@ class ReportGenerator:
|
|
|
353
358
|
else:
|
|
354
359
|
return "价格在带内"
|
|
355
360
|
|
|
356
|
-
def
|
|
357
|
-
"""获取
|
|
361
|
+
def _get_vwma_relationship(self, indicators):
|
|
362
|
+
"""获取VWMA关系"""
|
|
358
363
|
current_price = indicators.get('current_price', 0)
|
|
359
|
-
|
|
360
|
-
return "价格>
|
|
364
|
+
vwma = indicators.get('VWMA_14', 0)
|
|
365
|
+
return "价格>VWMA" if current_price > vwma else "价格<VWMA"
|
|
361
366
|
|
|
362
367
|
def _generate_obv_analysis(self, indicators):
|
|
363
368
|
"""生成OBV分析"""
|
|
@@ -779,5 +784,52 @@ class ReportGenerator:
|
|
|
779
784
|
summary.append(f"超大单:净流入{super_amount_wan:.{self.config.DISPLAY_PRECISION['volume_wan']}f}万元({super_ratio:+.1f}%)")
|
|
780
785
|
else:
|
|
781
786
|
summary.append(f"超大单:净流出{abs(super_amount_wan):.{self.config.DISPLAY_PRECISION['volume_wan']}f}万元({super_ratio:+.1f}%)")
|
|
782
|
-
|
|
787
|
+
|
|
783
788
|
return summary
|
|
789
|
+
|
|
790
|
+
def _generate_recent_ohlcv_section(self, stock_data):
|
|
791
|
+
"""生成最近5天OLHCV数据部分"""
|
|
792
|
+
section = []
|
|
793
|
+
section.append("\n【十、最近5天交易数据】")
|
|
794
|
+
section.append(self.config.REPORT_CONFIG['section_separator'])
|
|
795
|
+
|
|
796
|
+
# 获取最近5天数据
|
|
797
|
+
recent_data = stock_data.tail(5)
|
|
798
|
+
|
|
799
|
+
# 表头
|
|
800
|
+
section.append("日期 开盘价 最高价 最低价 收盘价 成交量(万手) 成交额(亿元)")
|
|
801
|
+
section.append("─" * 70)
|
|
802
|
+
|
|
803
|
+
for idx, row in recent_data.iterrows():
|
|
804
|
+
# 格式化日期
|
|
805
|
+
date_str = idx.strftime('%m-%d') if hasattr(idx, 'strftime') else str(idx)[:5]
|
|
806
|
+
|
|
807
|
+
# 格式化价格数据
|
|
808
|
+
open_price = f"{row['open']:.2f}"
|
|
809
|
+
high_price = f"{row['high']:.2f}"
|
|
810
|
+
low_price = f"{row['low']:.2f}"
|
|
811
|
+
close_price = f"{row['close']:.2f}"
|
|
812
|
+
|
|
813
|
+
# 计算涨跌幅
|
|
814
|
+
if idx != recent_data.index[0]: # 不是第一行
|
|
815
|
+
prev_close = recent_data.loc[recent_data.index[recent_data.index.get_loc(idx) - 1], 'close']
|
|
816
|
+
change_percent = ((row['close'] - prev_close) / prev_close * 100)
|
|
817
|
+
change_sign = "▲" if change_percent > 0 else "▼" if change_percent < 0 else "─"
|
|
818
|
+
close_price = f"{row['close']:.2f}{change_sign}"
|
|
819
|
+
else:
|
|
820
|
+
close_price = f"{row['close']:.2f}"
|
|
821
|
+
|
|
822
|
+
# 格式化成交量 (转换为万手)
|
|
823
|
+
volume_wan_hands = row['volume'] / 10000
|
|
824
|
+
volume_str = f"{volume_wan_hands:.1f}"
|
|
825
|
+
|
|
826
|
+
# 格式化成交额 (转换为亿元)
|
|
827
|
+
amount = row.get('amount', row['close'] * row['volume']) # 如果没有amount字段,用估算值
|
|
828
|
+
amount_yi = amount / 100000000
|
|
829
|
+
amount_str = f"{amount_yi:.2f}"
|
|
830
|
+
|
|
831
|
+
# 组合一行数据
|
|
832
|
+
line = f"{date_str} {open_price:>8} {high_price:>8} {low_price:>8} {close_price:>10} {volume_str:>10} {amount_str:>12}"
|
|
833
|
+
section.append(line)
|
|
834
|
+
|
|
835
|
+
return section
|
{aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/AIShareTxt/indicators/technical_indicators.py
RENAMED
|
@@ -144,12 +144,23 @@ class TechnicalIndicators:
|
|
|
144
144
|
indicators = {}
|
|
145
145
|
|
|
146
146
|
try:
|
|
147
|
-
#
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
147
|
+
# VWMA (Volume Weighted Moving Average)
|
|
148
|
+
close_price = close
|
|
149
|
+
volume_weighted_sum = 0
|
|
150
|
+
total_volume = 0
|
|
151
|
+
vwma_period = self.config.VWMA_PERIOD
|
|
152
|
+
|
|
153
|
+
if len(close_price) >= vwma_period:
|
|
154
|
+
# 取最近vwma_period周期的数据计算VWMA
|
|
155
|
+
recent_close = close_price[-vwma_period:]
|
|
156
|
+
recent_volume = volume[-vwma_period:]
|
|
157
|
+
|
|
158
|
+
# 计算每个周期的成交量权重
|
|
159
|
+
volume_weighted_sum = np.sum(recent_close * recent_volume)
|
|
160
|
+
total_volume = np.sum(recent_volume)
|
|
161
|
+
|
|
162
|
+
if total_volume > 0:
|
|
163
|
+
indicators['VWMA_14'] = volume_weighted_sum / total_volume
|
|
153
164
|
|
|
154
165
|
# OBV (On Balance Volume)
|
|
155
166
|
close_float = close.astype(np.float64)
|
|
@@ -459,7 +470,6 @@ class TechnicalIndicators:
|
|
|
459
470
|
# OBV背离验证
|
|
460
471
|
if len(obv) >= 20 and len(close) >= 20:
|
|
461
472
|
try:
|
|
462
|
-
from scipy.signal import argrelextrema
|
|
463
473
|
indicators['OBV_DIVERGENCE'] = self._detect_obv_divergence(obv, close, obv_config)
|
|
464
474
|
except ImportError:
|
|
465
475
|
indicators['OBV_DIVERGENCE'] = "需要scipy库进行背离分析"
|
|
@@ -272,12 +272,29 @@ class Utils:
|
|
|
272
272
|
str or None: 股票代码,如果没有提供则返回None
|
|
273
273
|
"""
|
|
274
274
|
if len(sys.argv) > 1:
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
275
|
+
arg = sys.argv[1].strip()
|
|
276
|
+
|
|
277
|
+
# 处理帮助参数
|
|
278
|
+
if arg in ['-h', '--help', 'help']:
|
|
279
|
+
print("\n股票技术指标分析器 (重构版)")
|
|
280
|
+
print("\n使用方法:")
|
|
281
|
+
print(" aishare [股票代码] - 分析指定股票")
|
|
282
|
+
print(" aishare -h/--help - 显示帮助信息")
|
|
283
|
+
print("\n示例:")
|
|
284
|
+
print(" aishare 000001 - 分析平安银行")
|
|
285
|
+
print(" aishare 600036 - 分析招商银行")
|
|
286
|
+
print("\n交互模式:")
|
|
287
|
+
print(" 不带参数运行将进入交互模式,可以输入股票代码进行分析")
|
|
288
|
+
print(" 输入 'quit' 或 'exit' 退出程序")
|
|
289
|
+
sys.exit(0)
|
|
290
|
+
|
|
291
|
+
# 处理股票代码
|
|
292
|
+
if Utils.validate_stock_code(arg):
|
|
293
|
+
return arg
|
|
278
294
|
else:
|
|
279
|
-
print(f"错误:股票代码 '{
|
|
295
|
+
print(f"错误:股票代码 '{arg}' 格式不正确")
|
|
280
296
|
print("正确格式:6位数字,如 000001")
|
|
297
|
+
print("使用 'aishare --help' 查看更多帮助信息")
|
|
281
298
|
return None
|
|
282
299
|
return None
|
|
283
300
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aishare-txt
|
|
3
|
-
Version: 2025.11.
|
|
3
|
+
Version: 2025.11.24.23
|
|
4
4
|
Summary: 中国股票技术指标文本生成工具包,用于为金融分析相关领域的AI智能体提供上下文服务。
|
|
5
5
|
Home-page: https://gitee.com/chaofanat/aishare-txt
|
|
6
6
|
Author: AIShareTxt Team
|
|
@@ -23,6 +23,7 @@ Requires-Dist: pandas>=1.5.0
|
|
|
23
23
|
Requires-Dist: numpy>=1.21.0
|
|
24
24
|
Requires-Dist: requests>=2.28.0
|
|
25
25
|
Requires-Dist: pandas_market_calendars>=1.1.0
|
|
26
|
+
Requires-Dist: scipy>=1.9.0
|
|
26
27
|
Requires-Dist: openai>=1.0.0
|
|
27
28
|
Requires-Dist: zhipuai>=2.0.0
|
|
28
29
|
Provides-Extra: dev
|
|
@@ -229,7 +230,7 @@ AIShareTxt/
|
|
|
229
230
|
|
|
230
231
|
### 成交量指标
|
|
231
232
|
- OBV能量潮指标
|
|
232
|
-
-
|
|
233
|
+
- VWMA成交量加权移动平均
|
|
233
234
|
- 量比指标
|
|
234
235
|
|
|
235
236
|
### 波动率指标
|
|
@@ -462,8 +463,8 @@ batch_analysis()
|
|
|
462
463
|
|
|
463
464
|
## 📞 联系方式
|
|
464
465
|
|
|
465
|
-
- 项目主页: https://github.com/chaofanat/
|
|
466
|
-
- 问题反馈: https://github.com/chaofanat/
|
|
466
|
+
- 项目主页: https://github.com/chaofanat/AIShareTxt
|
|
467
|
+
- 问题反馈: https://github.com/chaofanat/AIShareTxt/issues
|
|
467
468
|
- 邮箱: chaofanat@gmail.com
|
|
468
469
|
|
|
469
470
|
## 🙏 致谢
|
|
@@ -177,7 +177,7 @@ AIShareTxt/
|
|
|
177
177
|
|
|
178
178
|
### 成交量指标
|
|
179
179
|
- OBV能量潮指标
|
|
180
|
-
-
|
|
180
|
+
- VWMA成交量加权移动平均
|
|
181
181
|
- 量比指标
|
|
182
182
|
|
|
183
183
|
### 波动率指标
|
|
@@ -410,8 +410,8 @@ batch_analysis()
|
|
|
410
410
|
|
|
411
411
|
## 📞 联系方式
|
|
412
412
|
|
|
413
|
-
- 项目主页: https://github.com/chaofanat/
|
|
414
|
-
- 问题反馈: https://github.com/chaofanat/
|
|
413
|
+
- 项目主页: https://github.com/chaofanat/AIShareTxt
|
|
414
|
+
- 问题反馈: https://github.com/chaofanat/AIShareTxt/issues
|
|
415
415
|
- 邮箱: chaofanat@gmail.com
|
|
416
416
|
|
|
417
417
|
## 🙏 致谢
|
|
@@ -420,4 +420,4 @@ batch_analysis()
|
|
|
420
420
|
- [akshare](https://github.com/akfamily/akshare) - 金融数据接口
|
|
421
421
|
- [TA-Lib](https://mrjbq7.github.io/ta-lib/) - 技术分析库
|
|
422
422
|
- [pandas](https://pandas.pydata.org/) - 数据分析库
|
|
423
|
-
- [numpy](http://www.numpy.org/) - 科学计算库
|
|
423
|
+
- [numpy](http://www.numpy.org/) - 科学计算库
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aishare-txt
|
|
3
|
-
Version: 2025.11.
|
|
3
|
+
Version: 2025.11.24.23
|
|
4
4
|
Summary: 中国股票技术指标文本生成工具包,用于为金融分析相关领域的AI智能体提供上下文服务。
|
|
5
5
|
Home-page: https://gitee.com/chaofanat/aishare-txt
|
|
6
6
|
Author: AIShareTxt Team
|
|
@@ -23,6 +23,7 @@ Requires-Dist: pandas>=1.5.0
|
|
|
23
23
|
Requires-Dist: numpy>=1.21.0
|
|
24
24
|
Requires-Dist: requests>=2.28.0
|
|
25
25
|
Requires-Dist: pandas_market_calendars>=1.1.0
|
|
26
|
+
Requires-Dist: scipy>=1.9.0
|
|
26
27
|
Requires-Dist: openai>=1.0.0
|
|
27
28
|
Requires-Dist: zhipuai>=2.0.0
|
|
28
29
|
Provides-Extra: dev
|
|
@@ -229,7 +230,7 @@ AIShareTxt/
|
|
|
229
230
|
|
|
230
231
|
### 成交量指标
|
|
231
232
|
- OBV能量潮指标
|
|
232
|
-
-
|
|
233
|
+
- VWMA成交量加权移动平均
|
|
233
234
|
- 量比指标
|
|
234
235
|
|
|
235
236
|
### 波动率指标
|
|
@@ -462,8 +463,8 @@ batch_analysis()
|
|
|
462
463
|
|
|
463
464
|
## 📞 联系方式
|
|
464
465
|
|
|
465
|
-
- 项目主页: https://github.com/chaofanat/
|
|
466
|
-
- 问题反馈: https://github.com/chaofanat/
|
|
466
|
+
- 项目主页: https://github.com/chaofanat/AIShareTxt
|
|
467
|
+
- 问题反馈: https://github.com/chaofanat/AIShareTxt/issues
|
|
467
468
|
- 邮箱: chaofanat@gmail.com
|
|
468
469
|
|
|
469
470
|
## 🙏 致谢
|
|
@@ -42,7 +42,7 @@ dev_requires = read_requirements("requirements-dev.txt")
|
|
|
42
42
|
|
|
43
43
|
setup(
|
|
44
44
|
name="aishare-txt",
|
|
45
|
-
version="2025.11.
|
|
45
|
+
version="2025.11.24.23",
|
|
46
46
|
author="AIShareTxt Team",
|
|
47
47
|
author_email="chaofanat@gmail.com",
|
|
48
48
|
description="中国股票技术指标文本生成工具包,用于为金融分析相关领域的AI智能体提供上下文服务。",
|
|
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
|
{aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/aishare_txt.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{aishare_txt-2025.11.6.13 → aishare_txt-2025.11.24.23}/aishare_txt.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|