#!/bin/bash # 运行量化+LLM分析(可控制Gate) # # 用法: # ./run_analysis.sh # 使用Gate(智能过滤) # ./run_analysis.sh --no-gate # 强制调用LLM(绕过Gate) # ./run_analysis.sh --help # 显示帮助 set -e # 颜色定义 GREEN='\033[0;32m' BLUE='\033[0;34m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 显示帮助 show_help() { echo "📊 交易信号分析工具" echo "" echo "用法:" echo " ./run_analysis.sh [选项]" echo "" echo "选项:" echo " --no-gate, -n 强制调用LLM(绕过Gate,每次都分析)" echo " --gate, -g 使用Gate(默认,智能过滤低质量信号)" echo " --help, -h 显示此帮助信息" echo "" echo "示例:" echo " ./run_analysis.sh # 智能模式(推荐)" echo " ./run_analysis.sh --no-gate # 强制LLM分析" echo "" echo "说明:" echo " • Gate模式: 只有综合得分≥5.0的信号才会调用LLM(节省成本)" echo " • No-Gate模式: 每次都调用LLM(适合测试或重要行情)" exit 0 } # 解析参数 USE_GATE=true if [ $# -gt 0 ]; then case "$1" in --no-gate|-n) USE_GATE=false ;; --gate|-g) USE_GATE=true ;; --help|-h) show_help ;; *) echo "❌ 未知参数: $1" echo "使用 --help 查看帮助" exit 1 ;; esac fi # 显示运行模式 echo -e "${BLUE}🚀 开始生成交易信号...${NC}" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" if [ "$USE_GATE" = false ]; then echo -e "${YELLOW}⚠️ 模式: 强制LLM分析(绕过Gate)${NC}" echo " 每次都会调用 DeepSeek AI" else echo -e "${GREEN}✅ 模式: 智能Gate(推荐)${NC}" echo " 只有高质量信号才会调用 LLM" fi echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" # 检查 scheduler 容器是否运行 if ! docker compose ps scheduler 2>/dev/null | grep -q "running"; then echo -e "${YELLOW}⚠️ scheduler 容器未运行,正在启动...${NC}" docker compose --profile scheduler up -d echo "⏳ 等待服务就绪..." sleep 5 fi # 运行分析 if [ "$USE_GATE" = false ]; then # 绕过Gate:临时设置极低阈值 docker compose exec scheduler python -c " import os os.environ['LLM_MIN_COMPOSITE_SCORE'] = '0.0' # 绕过Gate # 运行分析 import sys sys.path.insert(0, '/app') from scripts.generate_trading_signal import main main() " else # 正常使用Gate docker compose exec scheduler python /app/scripts/generate_trading_signal.py fi echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo -e "${GREEN}✅ 信号生成完成!${NC}" echo "" echo "📊 查看结果:" echo " ./view_signal.sh" echo " cat output/latest_signal.json | python -m json.tool" echo "" echo "📱 钉钉通知:" if docker compose logs scheduler --tail 20 | grep -q "钉钉消息发送成功"; then echo -e " ${GREEN}✅ 已发送${NC}" else echo -e " ${YELLOW}⚠️ 未发送(可能是HOLD信号)${NC}" fi