Files
daily_stock_analysis/.env.example
Rules dd89d06a7d feat:修复美股数据丢失,新增长桥数据源 (#981)
* fix:新增长桥数据源,补充美港股数据

* ci: Actions 注入 LONGBRIDGE_* 环境变量并增加数据源检查;full-guide 补充 CI 配置说明

Made-with: Cursor

* fix:长桥参数初始化时机调整

* fix:添加长桥初始化调试日志

* fix:调整数据源优先级

* Update tests/test_search_searxng.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update data_provider/base.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update data_provider/longbridge_fetcher.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/README_CHT.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/README_EN.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update README.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/README_EN.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/README_CHT.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix(longbridge): 使用 get_config() 替代不存在的 config 导入(_is_available)

* fix:CHANGELOG、联调脚本重命名、繁中 README 英文链接、PRINT_QUOTE_PACKAGES 默认值已对齐。

* fix:调整审核中的问题

---------

Co-authored-by: xuxiong <xiong.xu@xsgames.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-02 23:05:08 +08:00

528 lines
23 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ===================================
# 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=
# TickFlow API Key可选用于 A 股大盘复盘指数增强;若套餐支持标的池查询,也可增强市场统计)
# TICKFLOW_API_KEY=
# Longbridge OpenAPI可选美股/港股量比、换手率、PE 等字段兜底)
# 从 https://open.longbridge.com/ 获取
# LONGBRIDGE_APP_KEY=
# LONGBRIDGE_APP_SECRET=
# LONGBRIDGE_ACCESS_TOKEN=
# static_info 进程内缓存秒数,默认 864000=每次请求拉取
# LONGBRIDGE_STATIC_INFO_TTL_SECONDS=86400
# Longbridge SDK 语言与 REPORT_LANGUAGEzh/en一致SDK 日志写入 LOG_DIR/longbridge_sdk.log
# 接入点(与 REPORT_LANGUAGE 无关;留空则用下列默认值):
# LONGBRIDGE_HTTP_URL=https://openapi.longbridge.com
# LONGBRIDGE_QUOTE_WS_URL=wss://openapi-quote.longbridge.com/v2
# LONGBRIDGE_TRADE_WS_URL=wss://openapi-trade.longbridge.com/v2
# LONGBRIDGE_REGION=hk
# 覆盖接入点SDK 内部用 LONGPORT_REGION不带 BRIDGE自动选择
# 代码会自动同步 LONGBRIDGE_REGION → LONGPORT_REGION。
# hk → *.longbridge.com | cn → *.longbridge.cn
# 其余见https://open.longbridge.com/zh-CN/docs/getting-started#环境变量
# 夜盘行情 true/false默认 false
# LONGBRIDGE_ENABLE_OVERNIGHT=false
# K 线推送 realtime 或 confirmed默认 realtime
# LONGBRIDGE_PUSH_CANDLESTICK_MODE=realtime
# 连接时是否打印行情包(与 README / full-guide 一致:未设置时应用侧默认为关闭,等同 false
# 设为 1 / true / yes 开启 SDK 详细行情包日志(调试长桥连接时使用)
# LONGBRIDGE_PRINT_QUOTE_PACKAGES=false
# ===================================
# AI 模型配置
# ===================================
# 完整说明docs/LLM_CONFIG_GUIDE.md
#
# 【快速上手】填一个 API Key 即可运行,系统自动识别模型。
# Gemini免费额度→ 填 GEMINI_API_KEY
# DeepSeek性价比高→ 填 DEEPSEEK_API_KEY
# AIHubmix聚合平台→ 填 AIHUBMIX_KEY
#
# 【进阶】需要多模型 / 多平台 fallback → 配置下方「多渠道」或在 Web 设置页可视化管理。
# ===================================
# --- API Key填一个即可---
# Geminihttps://aistudio.google.com
GEMINI_API_KEY=
# 多 Key 负载均衡GEMINI_API_KEYS=key1,key2,key3
# DeepSeekhttps://platform.deepseek.com
# DEEPSEEK_API_KEY=
# AIHubmix 聚合https://aihubmix.com/?aff=CfMq
# 一个 Key 用 GPT/Claude/Gemini/GLM/Qwen 等模型,无需科学上网
# AIHUBMIX_KEY=
# Anthropic Claudehttps://console.anthropic.com
# ANTHROPIC_API_KEY=
# OpenAI / 兼容 API
# OPENAI_API_KEY=
# OPENAI_BASE_URL= # 第三方 API 地址(中转站/代理),留空用官方
# Ollama 本地模型(无需 API Key推荐
# OLLAMA_API_BASE=http://localhost:11434
# LITELLM_MODEL=ollama/qwen3:8b
#
# 或使用渠道模式:
# LLM_CHANNELS=ollama
# LLM_OLLAMA_BASE_URL=http://localhost:11434
# LLM_OLLAMA_MODELS=qwen3:8b
# 采样温度0.0-2.0,默认 0.70 确定性最高2 随机性最高)
# LLM_TEMPERATURE=0.7
# --- 多渠道配置(可选,也可在 Web 设置页配置)---
# 每个渠道独立配置 base_url / api_key / models支持多 Key 轮询与自动 fallback。
#
# 示例DeepSeek + Gemini 双渠道
# LLM_CHANNELS=deepseek,gemini
# LLM_DEEPSEEK_API_KEY=sk-xxx
# LLM_DEEPSEEK_BASE_URL=https://api.deepseek.com/v1
# LLM_DEEPSEEK_MODELS=deepseek-chat
# LLM_GEMINI_API_KEYS=key1,key2
# LLM_GEMINI_MODELS=gemini-2.5-flash
#
# 示例:自定义 API 端点(第三方代理 / 聚合平台 / 转发站)
# LLM_CHANNELS=my_proxy
# LLM_MY_PROXY_BASE_URL=https://your-proxy.example.com/v1
# LLM_MY_PROXY_API_KEY=sk-xxx
# LLM_MY_PROXY_MODELS=gpt-4o-mini,claude-3-5-sonnet
# LLM_MY_PROXY_PROTOCOL=openai
#
# 示例Ollama 本地模型(无需 API Key
# LLM_CHANNELS=ollama
# LLM_OLLAMA_BASE_URL=http://localhost:11434
# LLM_OLLAMA_MODELS=qwen3:8b,llama3.2
# 高级:模型路由 YAML 配置(可选,参考 litellm_config.example.yaml
# LITELLM_CONFIG=./litellm_config.yaml
# ===================================
# 搜索引擎配置(用于获取股票新闻)
# ===================================
# Bocha API Keys中文搜索优化支持AI摘要支持多个逗号分隔
# 获取: https://open.bocha.cn/
# BOCHA_API_KEYS=your_bocha_key_here
# MiniMax API KeyCoding Plan Web Search支持多个逗号分隔
# 获取: https://platform.minimaxi.com/
# MINIMAX_API_KEYS=your_minimax_key_here
# Tavily API Keys支持多个逗号分隔
TAVILY_API_KEYS=
# SerpAPI Keys支持多个逗号分隔
SERPAPI_API_KEYS=
# Brave Search API Keys支持多个逗号分隔
# 获取: https://brave.com/search/api/
BRAVE_API_KEYS=
# SearXNG 实例地址(逗号分隔,私有部署无配额,需在 settings.yml 启用 format: json
# 留空时默认自动从 searx.space 拉取公共实例;若不希望访问公共实例,可将下方开关设为 false
SEARXNG_BASE_URLS=
SEARXNG_PUBLIC_INSTANCES_ENABLED=true
# ===================================
# Social Sentiment Intelligence (US stocks only)
# ===================================
# Reddit / X (Twitter) / Polymarket sentiment data from api.adanos.org
# Only activates for US stock tickers (AAPL, TSLA, etc.), ignored for A-shares/HK stocks
# Free tier: 250 requests/month | Register: https://api.adanos.org
# SOCIAL_SENTIMENT_API_KEY=sk_live_your_key_here
# SOCIAL_SENTIMENT_API_URL=https://api.adanos.org
# ===================================
# 新闻时效与分析筛选配置
# ===================================
# 新闻策略窗口档位ultra_short(1天) / short(3天) / medium(7天) / long(30天)
# 实际窗口 = min(策略窗口, NEWS_MAX_AGE_DAYS)
# NEWS_STRATEGY_PROFILE=short
# 新闻最大时效(天),搜索时限制结果在近期内,避免使用过时信息
# NEWS_MAX_AGE_DAYS=3
# 乖离率阈值(%),偏离 MA5 超过此值提示不追高;强势趋势股自动放宽到 1.5 倍
# BIAS_THRESHOLD=5.0
# ===================================
# Agent 策略对话配置Web 对话页)
# ===================================
# 启用 Agent 策略对话(默认 false内部统一命名为 skill
# AGENT_MODE=true
# Agent 主模型(可选):留空时继承主模型;无 provider 前缀会按 openai/<model> 解析
# AGENT_LITELLM_MODEL=
# 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 — 情绪周期(市场情绪高低点轮动)
#
# 留空时,系统会使用 metadata 里声明的主默认策略 skill内置默认是 bull_trend
# AGENT_SKILLS=
#
# 也可以手动指定一组策略:
# 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=
# 自定义策略目录(可选,放置自定义 YAML 策略文件;环境变量名沿用内部 skill 命名)
# AGENT_SKILL_DIR=./strategies
# Agent 架构模式(默认 singlemulti 为多 Agent 编排模式)
# AGENT_ARCH=single
# Multi-Agent 编排模式(仅 AGENT_ARCH=multi 时有效)
# quick: 技术分析→决策(最快,约 2 次 LLM 调用)
# standard: 技术→情报→决策(默认)
# full: 技术→情报→风控→决策
# specialist: 技术→情报→风控→策略专家评估→决策
# AGENT_ORCHESTRATOR_MODE=standard
# Agent 执行超时预算0 表示关闭single-agent 用作整体循环预算multi-agent 用作协作编排预算;默认 600
# AGENT_ORCHESTRATOR_TIMEOUT_S=600
# 风控 Agent 是否可以否决买入信号(默认开启)
# AGENT_RISK_OVERRIDE=true
# 记忆与校准系统(追踪历史准确率,自动调节置信度)
# AGENT_MEMORY_ENABLED=false
# 自动按回测表现加权策略意见
# AGENT_SKILL_AUTOWEIGHT=true
# 策略路由模式auto=根据市场状态自动选择 / manual=使用 AGENT_SKILLS 列表)
# AGENT_SKILL_ROUTING=auto
# ===================================
# 通知渠道配置(可同时配置多个,全部推送)
# ===================================
#
# 【方式一】企业微信机器人
# 在企业微信群 -> 设置 -> 群机器人 -> 添加 -> 复制 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<token>/getUpdates
#
# TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz
# TELEGRAM_CHAT_ID=123456789
# TELEGRAM_MESSAGE_THREAD_ID=2780
#
# 【方式四】邮件推送(只需 2 项配置SMTP 自动识别)
# 支持 QQ邮箱、163邮箱、Gmail 等支持 SMTP 授权码/基础认证的邮箱
# Outlook / Exchange 若租户强制 OAuth2当前版本暂不支持
# 1. 获取授权码以QQ邮箱为例设置 -> 账户 -> POP3/SMTP服务 -> 开启 -> 获取授权码
# 2. 填写下面两项即可:
#
# EMAIL_SENDER=
# EMAIL_PASSWORD=
# EMAIL_RECEIVERS=receiver@example.com # 可选,留空则发给自己
#
# 【方式四扩展】股票分组发往不同邮箱Issue #268可选
# STOCK_LIST 决定实际分析范围STOCK_GROUP_N 仅决定邮件发给谁,建议始终写成 STOCK_LIST 的子集
# Telegram / 企业微信 / Webhook 等其他渠道仍会按完整 STOCK_LIST 推送,不会因为分组而拆分
# 当前仓库默认 GitHub Actions daily_analysis workflow 不会自动注入任意编号的 STOCK_GROUP_N / EMAIL_GROUP_N
# 因此该能力适用于本地 .env、Docker或其他已显式注入这些变量的运行环境
# 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= # 可选,用于需要认证的 Webhook (Header Authorization: Bearer <token>)
# WEBHOOK_VERIFY_SSL=true # 默认校验。设为 false 可支持自签名证书。警告:禁用后存在 MITM 劫持风险,仅限可信内网
#
# 【方式六】Pushover 配置
# 注册Pushover账号并创建应用Token https://pushover.net/apps/build
# PUSHOVER_USER_KEY=
# PUSHOVER_API_TOKEN=
#
# 【方式七】PushPlus 配置(国内推送服务,推荐)
# 注册PushPlus账号并获取Token https://www.pushplus.plus
# PUSHPLUS_TOKEN=
# 群组推送:填写群组编码后,消息推送给群组所有订阅用户(一对多)
# PUSHPLUS_TOPIC=
#
# 【方式八】Discord 配置
# 支持两种方式Webhook推荐配置简单和 Bot API权限高
#
# 方式1Discord Webhook推荐无需 Bot 账号)
# 在 Discord 频道设置 -> 集成 -> Webhook -> 新建 Webhook -> 复制 URL
# DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/your_webhook_id/your_webhook_token
#
# 方式2Discord Bot API需要 Bot 账号和频道 ID
# 1. 创建 Bothttps://discord.com/developers/applications -> 新建应用 -> Bot -> 创建 Bot
# 2. 获取 Bot TokenBot 页面 -> 重置 Token
# 3. 获取频道 IDDiscord 开启开发者模式 -> 右键频道 -> 复制 ID
# DISCORD_BOT_TOKEN=
# DISCORD_MAIN_CHANNEL_ID=
# DISCORD_CHANNEL_ID= # 兼容旧变量名,推荐改用 DISCORD_MAIN_CHANNEL_ID
# 如果你要接收 Discord Interaction / Webhook 回调,必须配置公钥用于验签
# 获取方式Discord Developer Portal -> General Information -> Public Key
# DISCORD_INTERACTIONS_PUBLIC_KEY=
#
# 【方式九】Slack 配置
# 支持两种方式Bot API推荐和 Incoming Webhook
# 同时配置时优先使用 Bot API确保文本与图片发送到同一频道。
#
# 方式1Slack Bot API推荐支持图片上传
# 1. 创建 Slack Apphttps://api.slack.com/apps -> Create New App
# 2. 添加 Bot Token Scopeschat:write, files:write
# 3. 安装到工作区并获取 Bot Token (xoxb-...)
# 4. 获取频道 ID频道详情 -> 底部复制频道 ID
# SLACK_BOT_TOKEN=xoxb-...
# SLACK_CHANNEL_ID=C01234567
#
# 方式2Slack Incoming Webhook配置简单不支持图片上传
# 在 Slack App 管理页面创建 Incoming Webhook -> 复制 URL
# SLACK_WEBHOOK_URL=https://hooks.slack.com/services/T.../B.../xxx
#
# 【方式十】Server酱3 配置(国内推送服务,支持微信推送)
# 注册Server酱3账号并获取SendKey https://sc3.ft07.com/
# SERVERCHAN3_SENDKEY=
#
# 【高级配置】消息长度限制(字节)
# 超过限制会自动分批发送,一般无需修改
# FEISHU_MAX_BYTES=20000 # 飞书限制约 20KB默认 20000 字节
# WECHAT_MAX_BYTES=4000 # 企业微信限制 4096 字节,默认 4000 字节
#
# 【Markdown 转图片】(Issue #455)
# 对不支持 Markdown 的渠道,将报告转为图片发送,提升可读性
# 单股推送 + 图片:需同时配置 MARKDOWN_TO_IMAGE_CHANNELS 且安装转图工具
# MARKDOWN_TO_IMAGE_CHANNELS=telegram,wechat,custom,email,slack # 逗号分隔
# MARKDOWN_TO_IMAGE_MAX_CHARS=15000 # 超过此长度不转换,避免超大图片
# MD2IMG_ENGINE=wkhtmltoimage # wkhtmltoimage(默认) | markdown-to-file(emoji 更好,需 npm i -g markdown-to-file)
# 转图工具wkhtmltopdf (apt install wkhtmltopdf / brew install wkhtmltopdf),或 markdown-to-file
#
# 【实时行情预取】(Issue #455)
# PREFETCH_REALTIME_QUOTES=true # 设为 false 可禁用,避免 efinance/akshare_em 全市场拉取tushare 为单股接口,预取仅拉首股
# ===================================
# 单股推送配置(可选)
# ===================================
# 单股推送模式:每分析完一只股票立即推送,而不是汇总后推送
# SINGLE_STOCK_NOTIFY=false
#
# 报告类型simple(精简)、full(完整)、brief(3-5句概括)
# Docker环境下如果推送内容不完整可以设置为 full
# REPORT_TYPE=simple
# 报告输出语言zh(中文,默认) / en(英文)
# REPORT_LANGUAGE=zh
# 仅分析结果摘要:设为 true 时只推送汇总,不含个股详情
# REPORT_SUMMARY_ONLY=false
#
# Report Engine P0 (Jinja2 / 完整性校验 / 历史对比)
# REPORT_TEMPLATES_DIR=templates
# REPORT_RENDERER_ENABLED=false
# REPORT_INTEGRITY_ENABLED=true
# REPORT_INTEGRITY_RETRY=1
# REPORT_HISTORY_COMPARE_N=0
# 个股分析与大盘复盘合并推送(默认 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
SCHEDULE_RUN_IMMEDIATELY=true
# 非定时模式启动时是否立即执行一次分析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 配置(可选)
# ===================================
# 是否默认启动 WebUItrue/false默认 false
WEBUI_ENABLED=false
# WebUI 监听地址(默认 127.0.0.1Docker/云服务器需设为 0.0.0.0 才能外网访问,详见 docs/deploy-webui-cloud.md
WEBUI_HOST=127.0.0.1
# WebUI 监听端口(默认 8000
WEBUI_PORT=8000
# 启动 Web 服务前是否自动构建前端npm install && npm run build默认 true
WEBUI_AUTO_BUILD=true
# 单层可信反向代理(如 Nginx → App下信任 X-Forwarded-For 获取真实 IP取最右值用于登录限流多级代理/CDN 场景限流 key 可能退化为边缘代理 IP需额外评估直连公网时保持 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
# EFINANCE_CALL_TIMEOUT=30 # Timeout (seconds) for efinance API calls; prevents indefinite hangs
# # when eastmoney hosts are unreachable. Default: 30
# 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
# 是否启用基本面聚合(新增 P0 能力)
# ENABLE_FUNDAMENTAL_PIPELINE=true
# 基本面聚合性能与稳定性参数(单位:秒)
# FUNDAMENTAL_STAGE_TIMEOUT_SECONDS=1.5
# FUNDAMENTAL_FETCH_TIMEOUT_SECONDS=0.8
# FUNDAMENTAL_RETRY_MAX=1
# FUNDAMENTAL_CACHE_TTL_SECONDS=120
# FUNDAMENTAL_CACHE_MAX_ENTRIES=256
# ===========================================
# Portfolio P0: 导入 / 风险 / 汇率降级配置
# ===========================================
# PORTFOLIO_RISK_CONCENTRATION_ALERT_PCT=35.0
# PORTFOLIO_RISK_DRAWDOWN_ALERT_PCT=15.0
# PORTFOLIO_RISK_STOP_LOSS_ALERT_PCT=10.0
# PORTFOLIO_RISK_STOP_LOSS_NEAR_RATIO=0.8
# PORTFOLIO_RISK_LOOKBACK_DAYS=180
# PORTFOLIO_FX_UPDATE_ENABLED=true
# 东财接口补丁:东财/Efinance/Akshare 东方财富接口频繁失败RemoteDisconnected、连接被关闭时建议开启
# 开启后会注入 NID 令牌与随机 User-Agent降低被东财限流概率
# ENABLE_EASTMONEY_PATCH=false