diff --git a/backend/app/agent/smart_agent.py b/backend/app/agent/smart_agent.py index 2a47f9c..b8edcd5 100644 --- a/backend/app/agent/smart_agent.py +++ b/backend/app/agent/smart_agent.py @@ -298,19 +298,30 @@ DIF和DEA的位置关系,MACD柱状图变化,判断动能强弱和买卖信 - 第三段:短期可能的催化因素 ## 四、投资建议 -清晰分段,每个时间维度独立: +基于技术面分析,给出具体的操作建议和点位: -**短期(1-2周)** -明确的操作建议(买入/持有/观望/减仓)及理由。 +**短期(1-2周)操作建议** +- 明确的操作建议:买入/持有/观望/减仓 +- **具体点位建议**: + - 如果建议买入:给出建议买入价格区间(基于支撑位) + - 如果建议卖出:给出建议卖出价格区间(基于压力位) + - 止损位:明确的止损价格点位 + - 止盈位:明确的止盈价格点位 +- 操作理由:基于技术指标的具体分析 -**中期(1-3个月)** -趋势判断和策略建议。 +**中期(1-3个月)策略** +- 趋势判断(上涨/下跌/震荡) +- 关键价格区间: + - 上方目标位:具体价格 + - 下方支撑位:具体价格 +- 策略建议 **长期(半年以上)** -投资价值评估。 +投资价值评估和长期持有建议。 **风险提示** -主要风险点和注意事项。 +- 主要风险点和注意事项 +- 需要关注的关键价格位 ## 五、总结 用一句话概括核心观点。 diff --git a/backend/app/services/cache_service.py b/backend/app/services/cache_service.py index 482908b..e0bb906 100644 --- a/backend/app/services/cache_service.py +++ b/backend/app/services/cache_service.py @@ -139,6 +139,22 @@ class CacheService: except Exception as e: logger.error(f"清除过期缓存失败: {e}") + def clear_all(self) -> int: + """ + 清除所有缓存 + + Returns: + 删除的键数量 + """ + try: + count = len(self._cache) + self._cache.clear() + logger.info(f"清除了所有缓存,共{count}个") + return count + except Exception as e: + logger.error(f"清除所有缓存失败: {e}") + return 0 + # 创建全局实例 cache_service = CacheService() diff --git a/backend/app/services/tushare_service.py b/backend/app/services/tushare_service.py index 8df573e..2dde9f8 100644 --- a/backend/app/services/tushare_service.py +++ b/backend/app/services/tushare_service.py @@ -109,12 +109,15 @@ class TushareService: logger.error(f"无效的股票代码: {stock_code}") return None - # 默认获取最近60个交易日 + # 默认获取最近180个交易日(约6个月),确保技术指标计算准确 + # MA60需要至少60个交易日,加上缓冲期,180天可以覆盖约120个交易日 if not start_date: - start_date = (datetime.now() - timedelta(days=90)).strftime('%Y%m%d') + start_date = (datetime.now() - timedelta(days=180)).strftime('%Y%m%d') if not end_date: end_date = datetime.now().strftime('%Y%m%d') + logger.info(f"获取K线数据: {stock_code}, 时间范围: {start_date} - {end_date}") + # 获取日线数据 if period == 'D': df = self.pro.daily( diff --git a/clear_cache.py b/clear_cache.py new file mode 100644 index 0000000..645016a --- /dev/null +++ b/clear_cache.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +""" +清除缓存脚本 +用于清除旧的K线数据缓存,确保使用新的180天数据 +""" +import sys +from pathlib import Path + +# 添加项目路径 +sys.path.insert(0, str(Path(__file__).parent / 'backend')) + +from app.services.cache_service import cache_service + +def main(): + print("=" * 60) + print("清除K线数据缓存") + print("=" * 60) + + try: + # 方案1:清除K线相关缓存 + kline_count = cache_service.clear_pattern("kline:") + print(f"\n✓ 清除K线缓存: {kline_count} 条") + + # 方案2:清除所有缓存(可选) + print("\n是否清除所有缓存?(y/n): ", end="") + choice = input().strip().lower() + + if choice == 'y': + total_count = cache_service.clear_all() + print(f"✓ 清除所有缓存: {total_count} 条") + + print("\n说明:") + print("- 已清除K线数据缓存") + print("- 下次查询时将使用新的180天数据范围") + print("- 技术指标将基于更完整的历史数据计算") + print("\n建议:重启应用以确保生效") + print(" pm2 restart stock-agent") + + except Exception as e: + print(f"\n✗ 清除缓存失败: {e}") + import traceback + print(traceback.format_exc()) + + print("\n" + "=" * 60) + +if __name__ == "__main__": + main()