# =================================== # A股自选股智能分析系统 - 环境变量配置模板 # 复制此文件为 .env 并填入真实配置 # =================================== # 自选股列表(逗号分隔,支持沪深两市代码) # 沪市:600xxx, 601xxx, 603xxx # 深市:000xxx, 002xxx, 300xxx STOCK_LIST=600519,300750,002594 # 数据源配置 # Tushare Pro Token(可选,从 https://tushare.pro/weborder/#/login?reg=834638 获取) TUSHARE_TOKEN=your_tushare_token_here # =================================== # 定时任务配置(本地/Docker运行) # =================================== # SCHEDULE_ENABLED=true # SCHEDULE_TIME=18:00 # 启动时是否立即运行一次(默认 true) # SCHEDULE_RUN_IMMEDIATELY=false # 交易日检查:默认 true,非交易日跳过执行;设为 false 或使用 --force-run 可强制执行(Issue #373) # TRADING_DAY_CHECK_ENABLED=true # =================================== # AI 模型配置(统一通过 LiteLLM,至少配置一个 API Key) # # 核心配置(二选一或组合): # LITELLM_MODEL - 主模型,仅填一个,格式 provider/model-name;使用第三方模型提供商或 OpenAI 兼容 API 时须加 openai 前缀 # LITELLM_FALLBACK_MODELS - 备选模型,逗号分隔,主模型全部失败时按序尝试 # 若未配置 LITELLM_MODEL,系统将根据已有 API Key 自动推断(推断结果打印在日志中) # # 模型格式示例:gemini/gemini-2.5-flash、anthropic/claude-3-5-sonnet-20241022、openai/gpt-4o # =================================== # LITELLM_MODEL=gemini/gemini-3-flash-preview # LITELLM_FALLBACK_MODELS=anthropic/claude-3-5-sonnet-20241022,openai/gpt-4o-mini # 温度参数 GEMINI_TEMPERATURE=0.7 # =================================== # API Key 配置(支持多个 Key,逗号分隔,自动负载均衡) # =================================== # 【方案一】Gemini API(有免费额度,从 https://aistudio.google.com 获取) # 单 Key: GEMINI_API_KEY= # 多 Key:GEMINI_API_KEYS=key1,key2,key3 # 示例:LITELLM_MODEL=gemini/gemini-3-flash-preview # 【方案二】Anthropic Claude API(从 https://console.anthropic.com 获取) # ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxxx # 多 Key:ANTHROPIC_API_KEYS=key1,key2 # 示例:LITELLM_MODEL=anthropic/claude-3-5-sonnet-20241022 # ANTHROPIC_TEMPERATURE=0.7 # 【方案三】OpenAI / DeepSeek / OpenRouter 等兼容 API # 单 Key:OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx # 多 Key:OPENAI_API_KEYS=key1,key2 # OPENAI_BASE_URL=第三方 API 地址(官方 OpenAI 可不填;DeepSeek: https://api.deepseek.com/v1;OpenRouter: https://openrouter.ai/api/v1) # OPENAI_TEMPERATURE=0.7 # OPENAI_VISION_MODEL=gpt-4o # 图片识别专用模型(可选) # # --- 【推荐】AIHubmix 一站式 --- # AIHubmix 支持一站式使用全球主流 AI 模型,一个 Key 可在本项目中切换使用任何模型, # 无需科学上网,含免费模型(glm-5、gpt-4o-free 等顶级模型), # 付费模型拥有极高的稳定性和无限并发能力,适合大规模生产级应用使用。 # 使用 AIHUBMIX_KEY 时无需配置 OPENAI_BASE_URL,系统自动使用 aihubmix.com/v1。 # 获取 Key:https://aihubmix.com/?aff=CfMq # AIHUBMIX_KEY=your_aihubmix_key_here # 示例:LITELLM_MODEL=openai/gemini-3.1-pro-preview # # --- DeepSeek --- # OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx # OPENAI_BASE_URL=https://api.deepseek.com/v1 # 示例:LITELLM_MODEL=openai/deepseek-chat 或 openai/deepseek-reasoner # 思考模式:deepseek-reasoner/deepseek-r1/qwq 自动识别,deepseek-chat 需 extra_body 启用 # 搜索引擎配置(用于获取股票新闻) # Tavily API Keys(支持多个,逗号分隔) TAVILY_API_KEYS=your_tavily_key_here # SerpAPI Keys(支持多个,逗号分隔) SERPAPI_API_KEYS=your_serpapi_key_here # Brave Search API Keys(支持多个,逗号分隔) # 获取: https://brave.com/search/api/ BRAVE_API_KEYS=your_brave_key_here # =================================== # 新闻时效与分析筛选配置 # =================================== # 新闻最大时效(天),搜索时限制结果在近期内,避免使用过时信息 # NEWS_MAX_AGE_DAYS=3 # 乖离率阈值(%),偏离 MA5 超过此值提示不追高;强势趋势股自动放宽到 1.5 倍 # BIAS_THRESHOLD=5.0 # =================================== # Agent 策略对话配置(Web 对话页) # =================================== # 启用 Agent 对话(默认 false) # AGENT_MODE=true # Agent 最多推理步数 # AGENT_MAX_STEPS=10 # 默认启用策略(逗号分隔),不配置时使用以下内置默认值 # # 内置策略列表(可任意组合): # bull_trend — 多头趋势(MA5>MA10>MA20 排列 + 低乖离率) # ma_golden_cross — 均线金叉(MA5 上穿 MA10/MA20) # volume_breakout — 放量突破(价格突破近期高点 + 成交量放大) # shrink_pullback — 缩量回踩(回踩均线 + 量能萎缩,低吸点) # bottom_volume — 底部放量(地量见地价,底部反转信号) # dragon_head — 龙头策略(强势龙头,趋势延续追涨) # one_yang_three_yin — 一阳夹三阴(主力洗盘后强势反包形态) # box_oscillation — 箱体震荡(区间高抛低吸) # chan_theory — 缠论(缠中说禅理论:笔/线段/中枢) # wave_theory — 波浪理论(艾略特波浪计数) # emotion_cycle — 情绪周期(市场情绪高低点轮动) # # 推荐:趋势 + 金叉 + 缩量回踩(兼顾多种市场形态) # AGENT_SKILLS=bull_trend,ma_golden_cross,shrink_pullback # # 完整启用所有内置策略(两种写法等效): # AGENT_SKILLS=all # AGENT_SKILLS=bull_trend,ma_golden_cross,volume_breakout,shrink_pullback,bottom_volume,dragon_head,one_yang_three_yin,box_oscillation,chan_theory,wave_theory,emotion_cycle # AGENT_SKILLS=bull_trend,ma_golden_cross,volume_breakout,shrink_pullback # 自定义策略目录(可选,放置自定义 YAML 策略文件) # AGENT_STRATEGY_DIR=./strategies # =================================== # 通知渠道配置(可同时配置多个,全部推送) # =================================== # # 【方式一】企业微信机器人 # 在企业微信群 -> 设置 -> 群机器人 -> 添加 -> 复制 Webhook 地址 # # WECHAT_WEBHOOK_URL=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your_key_here # # 【方式二】飞书机器人 # 在飞书群 -> 设置 -> 群机器人 -> 添加机器人 -> 自定义机器人 -> 复制 Webhook 地址 # # FEISHU_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/your_key_here # # 【方式三】Telegram 机器人(需同时配置两项) # 1. 在 Telegram 找 @BotFather -> /newbot -> 获取 Bot Token # 2. 获取 Chat ID:发消息给 @userinfobot 或访问 https://api.telegram.org/bot/getUpdates # # TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz # TELEGRAM_CHAT_ID=123456789 # TELEGRAM_MESSAGE_THREAD_ID=2780 # # 【方式四】邮件推送(只需 2 项配置,SMTP 自动识别) # 支持 QQ邮箱、163邮箱、Gmail、Outlook 等主流邮箱 # 1. 获取授权码(以QQ邮箱为例):设置 -> 账户 -> POP3/SMTP服务 -> 开启 -> 获取授权码 # 2. 填写下面两项即可: # # EMAIL_SENDER=your_email@qq.com # EMAIL_PASSWORD=your_email_auth_code # EMAIL_RECEIVERS=receiver@example.com # 可选,留空则发给自己 # # 【方式四扩展】股票分组发往不同邮箱(Issue #268,可选) # 配置后,不同股票组的报告发送到对应邮箱;大盘复盘发往所有配置邮箱 # STOCK_GROUP_1=600519,300750 # EMAIL_GROUP_1=user1@example.com # STOCK_GROUP_2=002594,AAPL # EMAIL_GROUP_2=user2@example.com # # 【方式五】自定义 Webhook(支持多个,逗号分隔) # 适用于:钉钉、Discord、Slack、Bark、自建服务等任意支持 POST JSON 的 Webhook # 系统会自动识别常见服务并使用对应格式 # # CUSTOM_WEBHOOK_URLS=https://oapi.dingtalk.com/robot/send?access_token=xxx,https://hooks.slack.com/services/xxx # CUSTOM_WEBHOOK_BEARER_TOKEN=your_bearer_token # 可选,用于需要认证的 Webhook (Header Authorization: Bearer ) # WEBHOOK_VERIFY_SSL=true # 默认校验。设为 false 可支持自签名证书。警告:禁用后存在 MITM 劫持风险,仅限可信内网 # # 【方式六】Pushover 配置 # 注册Pushover账号,并创建应用Token https://pushover.net/apps/build # PUSHOVER_USER_KEY=your_user_key # PUSHOVER_API_TOKEN=your_api_token # # 【方式七】PushPlus 配置(国内推送服务,推荐) # 注册PushPlus账号并获取Token https://www.pushplus.plus # PUSHPLUS_TOKEN=your_pushplus_token # 群组推送:填写群组编码后,消息推送给群组所有订阅用户(一对多) # PUSHPLUS_TOPIC=your_group_topic_code # # 【方式八】Discord 配置 # 支持两种方式:Webhook(推荐,配置简单)和 Bot API(权限高) # # 方式1:Discord Webhook(推荐,无需 Bot 账号) # 在 Discord 频道设置 -> 集成 -> Webhook -> 新建 Webhook -> 复制 URL # DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/your_webhook_id/your_webhook_token # # 方式2:Discord Bot API(需要 Bot 账号和频道 ID) # 1. 创建 Bot:https://discord.com/developers/applications -> 新建应用 -> Bot -> 创建 Bot # 2. 获取 Bot Token:Bot 页面 -> 重置 Token # 3. 获取频道 ID:Discord 开启开发者模式 -> 右键频道 -> 复制 ID # DISCORD_BOT_TOKEN=your_bot_token_here # DISCORD_MAIN_CHANNEL_ID=your_channel_id_here # # 【方式九】Server酱3 配置(国内推送服务,支持微信推送) # 注册Server酱3账号并获取SendKey https://sc3.ft07.com/ # SERVERCHAN3_SENDKEY=your_serverchan3_sendkey # # 【高级配置】消息长度限制(字节) # 超过限制会自动分批发送,一般无需修改 # FEISHU_MAX_BYTES=20000 # 飞书限制约 20KB,默认 20000 字节 # WECHAT_MAX_BYTES=4000 # 企业微信限制 4096 字节,默认 4000 字节 # # 【Markdown 转图片】 # 对不支持 Markdown 的渠道,将报告转为图片发送,提升可读性 # 需安装 wkhtmltopdf(Docker 已内置),本地运行: apt install wkhtmltopdf 或 brew install wkhtmltopdf # MARKDOWN_TO_IMAGE_CHANNELS=telegram,wechat,custom,email # 逗号分隔 # MARKDOWN_TO_IMAGE_MAX_CHARS=15000 # 超过此长度不转换,避免超大图片 # =================================== # 单股推送配置(可选) # =================================== # 单股推送模式:每分析完一只股票立即推送,而不是汇总后推送 # SINGLE_STOCK_NOTIFY=false # # 报告类型:simple(精简) 或 full(完整) # Docker环境下如果推送内容不完整,可以设置为 full # REPORT_TYPE=simple # 仅分析结果摘要:设为 true 时只推送汇总,不含个股详情 # REPORT_SUMMARY_ONLY=false # 个股分析与大盘复盘合并推送(默认 false),减少邮件数量、降低垃圾邮件风险 # MERGE_EMAIL_NOTIFICATION=false # =================================== # 分析间隔配置(可选) # =================================== # 个股分析和大盘分析之间的延迟时间(秒) # 用于避免触发 Gemini 等 AI API 的限流 # ANALYSIS_DELAY=0 # 应用 AppKey(与 Webhook 模式共用) DINGTALK_APP_KEY=xxxx # 应用 AppSecret(与 Webhook 模式共用) DINGTALK_APP_SECRET=xxxx # 启用 Stream 模式 DINGTALK_STREAM_ENABLED=false # 飞书应用机器人配置 FEISHU_APP_ID=xxxx FEISHU_APP_SECRET=xxxx # 启用长连接模式 FEISHU_STREAM_ENABLED=false # 数据库路径 DATABASE_PATH=./data/stock_analysis.db # =================================== # 回测配置(可选) # =================================== # 是否启用回测(true/false) BACKTEST_ENABLED=true # 回测评估窗口(交易日数) BACKTEST_EVAL_WINDOW_DAYS=10 # 仅回测 N 天前的分析记录(避免当天/最近数据不完整) BACKTEST_MIN_AGE_DAYS=14 # 回测引擎版本(当回测逻辑升级时用于区分结果) BACKTEST_ENGINE_VERSION=v1 # 中性区间阈值(%),例如 2 表示 -2%~+2% 视为震荡 BACKTEST_NEUTRAL_BAND_PCT=2.0 # === 定时任务配置 === # 是否启用定时任务(true/false) SCHEDULE_ENABLED=false # 每日执行时间(HH:MM 格式,24小时制) SCHEDULE_TIME=18:00 # 启动程序时是否立即执行一次分析(true/false) RUN_IMMEDIATELY=true # 是否启用大盘复盘(true/false) MARKET_REVIEW_ENABLED=true # 大盘复盘市场区域:cn(A股)、us(美股)、both(两者),us 适合仅关注美股的用户 # MARKET_REVIEW_REGION=cn # =================================== # 代理配置(可选) # =================================== # 是否启用代理(true/false,默认 false) # 仅在本地开发环境生效,GitHub Actions 环境自动跳过 USE_PROXY=false # 代理服务器地址(默认 127.0.0.1) PROXY_HOST=127.0.0.1 # 代理服务器端口(默认 10809) PROXY_PORT=10809 # 系统配置 # 日志目录 LOG_DIR=./logs # 日志级别(DEBUG/INFO/WARNING/ERROR) LOG_LEVEL=INFO # 最大并发线程数(建议保持低并发防封禁) MAX_WORKERS=3 # 是否启用调试日志 DEBUG=false # =================================== # WebUI 配置(可选) # =================================== # 是否默认启动 WebUI(true/false,默认 false) WEBUI_ENABLED=false # WebUI 监听地址(默认 127.0.0.1;Docker/Compose 场景需要 0.0.0.0 才能从宿主机访问端口映射) WEBUI_HOST=127.0.0.1 # WebUI 监听端口(默认 8000) WEBUI_PORT=8000 # 启动 Web 服务前是否自动构建前端(npm install && npm run build,默认 true) WEBUI_AUTO_BUILD=true # 反向代理下信任 X-Forwarded-For 获取真实 IP(Nginx/Cloudflare 前置时设为 true,直连公网时保持 false 防伪造) # TRUST_X_FORWARDED_FOR=false # =================================== # Web 登录认证(可选) # =================================== # 设为 true 启用密码保护;首次访问时在网页设置初始密码,可在「系统设置 > 修改密码」中修改 # 忘记密码可在服务器执行: python -m src.auth reset_password ADMIN_AUTH_ENABLED=false # ADMIN_SESSION_MAX_AGE_HOURS=24 # Session 有效期(小时) # =========================================== # 图片识别股票代码(设置页「从图片添加」) # =========================================== # 单次请求超时 60 秒;图片最大 5MB # 需配置 GEMINI_API_KEY、ANTHROPIC_API_KEY 或 OPENAI_API_KEY 中至少一个(Vision 能力模型) # =========================================== # Data Fetcher Priority Configuration # =========================================== # Lower number = higher priority (tried first) # Default priorities: efinance(0) > akshare(1) > tushare/pytdx(2) > baostock(3) > yfinance(4) # For US stocks, set YFINANCE_PRIORITY=0 to use Yahoo Finance first # EFINANCE_PRIORITY=0 # EastMoney (China) - default: 0 # AKSHARE_PRIORITY=1 # AkShare (China) - default: 1 # TUSHARE_PRIORITY=2 # Tushare Pro (China) - default: 2 # PYTDX_PRIORITY=2 # Tongdaxin (China) - default: 2 # # Pytdx custom server (for intranet/deploy): use custom host instead of built-in public servers # PYTDX_HOST=192.168.1.100 # PYTDX_PORT=7709 # Or multiple servers: PYTDX_SERVERS=ip1:port1,ip2:port2 # BAOSTOCK_PRIORITY=3 # Baostock (China) - default: 3 # YFINANCE_PRIORITY=4 # Yahoo Finance (Global) - default: 4 # Example: Prioritize Yahoo Finance for US stocks # YFINANCE_PRIORITY=0 # EFINANCE_PRIORITY=99 # =========================================== # 实时行情数据源优先级配置 # =========================================== # 用于获取量比、换手率、市盈率等实时数据 # 可选数据源(逗号分隔,按顺序尝试): # - tencent: 腾讯财经,有量比/换手率/PE/PB,单股查询稳定(推荐首选) # - akshare_sina: 新浪财经,基本行情,无量比,但非常稳定 # - efinance: 东财(efinance库),有量比,全量拉取易被封 # - akshare_em: 东财(akshare库),数据最全,全量拉取易被封 # - tushare: Tushare Pro,需要2000积分,数据全面(付费用户推荐) # # 默认优先级:tencent > akshare_sina > efinance > akshare_em # 如果有 Tushare Pro 高积分账号,可将 tushare 放在首位: # REALTIME_SOURCE_PRIORITY=tushare,tencent,akshare_sina,efinance,akshare_em # REALTIME_SOURCE_PRIORITY=tencent,akshare_sina,efinance,akshare_em # 是否启用实时行情(关闭后使用历史收盘价分析) # ENABLE_REALTIME_QUOTE=true # 盘中实时技术面:启用时用实时价计算 MA/多头排列(Issue #234);关闭则用昨日收盘 # ENABLE_REALTIME_TECHNICAL_INDICATORS=true # 是否启用筹码分布(该接口不稳定,云端部署建议关闭) # ENABLE_CHIP_DISTRIBUTION=true # 东财接口补丁:东财/Efinance/Akshare 东方财富接口频繁失败(RemoteDisconnected、连接被关闭)时建议开启 # 开启后会注入 NID 令牌与随机 User-Agent,降低被东财限流概率 # ENABLE_EASTMONEY_PATCH=false