116 lines
3.3 KiB
Bash
116 lines
3.3 KiB
Bash
#!/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
|