From 03b9dfd4650b6112948262c8db541f1fae1538d7 Mon Sep 17 00:00:00 2001 From: okxlin <61420215+okxlin@users.noreply.github.com> Date: Tue, 28 Apr 2026 16:33:04 +0800 Subject: [PATCH] [openclaw] add app: daily-stock-analysis Daily Stock Analysis - AI-powered stock data aggregation, technical analysis, and multi-agent strategy evaluation platform. WebUI-first: most settings configurable via WebUI, minimal 1Panel form (port, timezone, data dir). Official image: zhulinsen/daily_stock_analysis:latest Upstream: https://github.com/ZhuLinsen/daily_stock_analysis --- apps/daily-stock-analysis/3.14.1/data.yml | 72 ++++++++ .../3.14.1/docker-compose.yml | 24 +++ apps/daily-stock-analysis/3.14.1/env.defaults | 157 ++++++++++++++++++ apps/daily-stock-analysis/README.md | 44 +++++ apps/daily-stock-analysis/data.yml | 31 ++++ apps/daily-stock-analysis/latest/.env.sample | 5 + apps/daily-stock-analysis/latest/data.yml | 72 ++++++++ .../latest/docker-compose.yml | 24 +++ apps/daily-stock-analysis/latest/env.defaults | 157 ++++++++++++++++++ apps/daily-stock-analysis/logo.png | Bin 0 -> 5495 bytes 10 files changed, 586 insertions(+) create mode 100644 apps/daily-stock-analysis/3.14.1/data.yml create mode 100644 apps/daily-stock-analysis/3.14.1/docker-compose.yml create mode 100644 apps/daily-stock-analysis/3.14.1/env.defaults create mode 100644 apps/daily-stock-analysis/README.md create mode 100644 apps/daily-stock-analysis/data.yml create mode 100644 apps/daily-stock-analysis/latest/.env.sample create mode 100644 apps/daily-stock-analysis/latest/data.yml create mode 100644 apps/daily-stock-analysis/latest/docker-compose.yml create mode 100644 apps/daily-stock-analysis/latest/env.defaults create mode 100755 apps/daily-stock-analysis/logo.png diff --git a/apps/daily-stock-analysis/3.14.1/data.yml b/apps/daily-stock-analysis/3.14.1/data.yml new file mode 100644 index 000000000..483578a1e --- /dev/null +++ b/apps/daily-stock-analysis/3.14.1/data.yml @@ -0,0 +1,72 @@ +additionalProperties: + formFields: + # === Port === + - default: 8000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + label: + en: Port + zh: 端口 + zh-Hant: 端口 + ja: ポート + ko: 포트 + ru: Порт + ms: Port + pt-br: Porta + required: true + type: number + rule: paramPort + # === Data Directory === + - default: ./data + edit: true + envKey: APP_DATA_DIR + labelEn: Data Directory + labelZh: 数据目录 + label: + en: Data Directory + zh: 数据目录 + zh-Hant: 資料目錄 + ja: データディレクトリ + ko: 데이터 디렉토리 + ru: Каталог данных + ms: Direktori data + pt-br: Diretório de dados + required: true + type: text + # === Timezone === + - default: Asia/Shanghai + edit: true + envKey: TZ + labelEn: Timezone + labelZh: 时区 + label: + en: Timezone + zh: 时区 + zh-Hant: 時區 + ja: タイムゾーン + ko: 시간대 + ru: Часовой пояс + ms: Zon waktu + pt-br: Fuso horário + required: true + type: text + # === Stock List (configurable in WebUI, removed from form) === + # === Admin Auth (security: always enabled) === + - default: "true" + disabled: true + envKey: ADMIN_AUTH_ENABLED + labelEn: Admin Password + labelZh: 管理密码(首次访问 WebUI 设置) + label: + en: Admin Password (set on first WebUI visit) + zh: 管理密码(首次访问 WebUI 设置) + zh-Hant: 管理密碼(首次訪問 WebUI 設定) + ja: 管理パスワード(初回 WebUI 訪問時に設定) + ko: 관리자 비밀번호(최초 WebUI 방문 시 설정) + ru: Пароль администратора (настройка при первом входе) + ms: Kata laluan admin (tetapkan pada lawatan WebUI pertama) + pt-br: Senha admin (configurar na primeira visita ao WebUI) + required: false + type: text diff --git a/apps/daily-stock-analysis/3.14.1/docker-compose.yml b/apps/daily-stock-analysis/3.14.1/docker-compose.yml new file mode 100644 index 000000000..ebd593a29 --- /dev/null +++ b/apps/daily-stock-analysis/3.14.1/docker-compose.yml @@ -0,0 +1,24 @@ +services: + daily-stock-analysis: + image: "zhulinsen/daily_stock_analysis:v3.14.1" + container_name: "${CONTAINER_NAME}" + labels: + createdBy: "Apps" + ports: + - "${PANEL_APP_PORT_HTTP}:8000" + environment: + - TZ=${TZ} + - WEBUI_ENABLED=true + - WEBUI_HOST=0.0.0.0 + volumes: + - ${APP_DATA_DIR}/data:/app/data + - ${APP_DATA_DIR}/logs:/app/logs + - ${APP_DATA_DIR}/reports:/app/reports + - ./env.defaults:/app/.env:ro + networks: + - 1panel-network + restart: unless-stopped + +networks: + 1panel-network: + external: true diff --git a/apps/daily-stock-analysis/3.14.1/env.defaults b/apps/daily-stock-analysis/3.14.1/env.defaults new file mode 100644 index 000000000..ec52f97b6 --- /dev/null +++ b/apps/daily-stock-analysis/3.14.1/env.defaults @@ -0,0 +1,157 @@ +# =================================== +# 每日股票分析 - 容器环境变量 +# 所有功能(LLM/通知/报告/定时/策略)均可在 WebUI 内配置 +# 此文件挂载为 /app/.env,应用直接读取 +# =================================== + +# --- 管理员认证 --- +ADMIN_AUTH_ENABLED=true + +# --- Docker 服务模式 --- +WEBUI_PORT=8000 +WEBUI_AUTO_BUILD=true + +# --- 数据与日志 --- +DATABASE_PATH=/app/data/stock_analysis.db +LOG_DIR=/app/logs +LOG_LEVEL=INFO +MAX_WORKERS=3 +DEBUG=false + +# --- SQLite 优化 --- +SQLITE_WAL_ENABLED=true +SQLITE_BUSY_TIMEOUT_MS=5000 +SQLITE_WRITE_RETRY_MAX=3 +SQLITE_WRITE_RETRY_BASE_DELAY=0.1 + +# --- 搜索 --- +SEARXNG_PUBLIC_INSTANCES_ENABLED=true + +# --- Stream 模式(默认关闭)--- +DINGTALK_STREAM_ENABLED=false +FEISHU_STREAM_ENABLED=false + +# =================================== +# 以下为可选参考变量(取消注释即可启用) +# =================================== +# Agent 默认启用策略(留空使用内置默认 bull_trend) +AGENT_SKILLS= +# AGENT_SKILL_DIR=./strategies +# AGENT_ARCH=single +# AGENT_ORCHESTRATOR_MODE=standard +# AGENT_ORCHESTRATOR_TIMEOUT_S=600 +# AGENT_RISK_OVERRIDE=true +# AGENT_MEMORY_ENABLED=false +# AGENT_SKILL_AUTOWEIGHT=true +# AGENT_SKILL_ROUTING=auto + +# LLM 多渠道配置 +# LLM_CHANNELS=deepseek,gemini +# LLM_DEEPSEEK_API_KEY=sk-xxx +# LLM_DEEPSEEK_BASE_URL=https://api.deepseek.com +# LLM_DEEPSEEK_MODELS=deepseek-v4-flash,deepseek-v4-pro +# LLM_TEMPERATURE=0.7 +# LITELLM_CONFIG=./litellm_config.yaml + +# 搜索引擎(不在表单中) +# BOCHA_API_KEYS= +# MINIMAX_API_KEYS= +# BRAVE_API_KEYS= +# SEARXNG_BASE_URLS= + +# 社交舆情(仅美股) +# SOCIAL_SENTIMENT_API_KEY= +# SOCIAL_SENTIMENT_API_URL=https://api.adanos.org + +# 新闻时效与筛选 +# NEWS_STRATEGY_PROFILE=short +# NEWS_MAX_AGE_DAYS=3 +# BIAS_THRESHOLD=5.0 + +# 通知渠道高级配置 +# FEISHU_WEBHOOK_KEYWORD=股票日报 +# TELEGRAM_MESSAGE_THREAD_ID= +# DISCORD_BOT_TOKEN= +# DISCORD_MAIN_CHANNEL_ID= +# SLACK_WEBHOOK_URL= +# CUSTOM_WEBHOOK_BEARER_TOKEN= +# WEBHOOK_VERIFY_SSL=true +# PUSHOVER_USER_KEY= +# PUSHOVER_API_TOKEN= +# PUSHPLUS_TOPIC= +# FEISHU_MAX_BYTES=20000 +# WECHAT_MAX_BYTES=4000 +# MARKDOWN_TO_IMAGE_CHANNELS= +# MARKDOWN_TO_IMAGE_MAX_CHARS=15000 +# MD2IMG_ENGINE=wkhtmltoimage +# PREFETCH_REALTIME_QUOTES=true +# MERGE_EMAIL_NOTIFICATION=false + +# 飞书 Stream / 应用模式 +# FEISHU_APP_ID= +# FEISHU_APP_SECRET= + +# 钉钉 Stream 模式 +# DINGTALK_APP_KEY= +# DINGTALK_APP_SECRET= + +# 报告引擎高级配置 +# REPORT_TEMPLATES_DIR=templates +# REPORT_RENDERER_ENABLED=false +# REPORT_INTEGRITY_ENABLED=true +# REPORT_INTEGRITY_RETRY=1 +# REPORT_HISTORY_COMPARE_N=0 + +# 回测高级配置 +# BACKTEST_EVAL_WINDOW_DAYS=10 +# BACKTEST_MIN_AGE_DAYS=14 +# BACKTEST_ENGINE_VERSION=v1 +# BACKTEST_NEUTRAL_BAND_PCT=2.0 + +# 大盘复盘区域 +# MARKET_REVIEW_REGION=cn + +# 数据源 +# TICKFLOW_API_KEY= +# LONGBRIDGE_APP_KEY= +# LONGBRIDGE_APP_SECRET= +# LONGBRIDGE_ACCESS_TOKEN= +# LONGBRIDGE_STATIC_INFO_TTL_SECONDS=86400 +# LONGBRIDGE_ENABLE_OVERNIGHT=false +# LONGBRIDGE_PUSH_CANDLESTICK_MODE=realtime +# LONGBRIDGE_PRINT_QUOTE_PACKAGES=false + +# Data Fetcher 优先级 +# EFINANCE_PRIORITY=0 +# EFINANCE_CALL_TIMEOUT=30 +# AKSHARE_PRIORITY=1 +# TUSHARE_PRIORITY=2 +# PYTDX_PRIORITY=2 +# BAOSTOCK_PRIORITY=3 +# YFINANCE_PRIORITY=4 + +# 实时行情 +# REALTIME_SOURCE_PRIORITY=tencent,akshare_sina,efinance,akshare_em +# ENABLE_REALTIME_QUOTE=true +# ENABLE_REALTIME_TECHNICAL_INDICATORS=true +# ENABLE_CHIP_DISTRIBUTION=true +# 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 + +# 代理 +# USE_PROXY=false +# PROXY_HOST=127.0.0.1 +# PROXY_PORT=10809 + +# Portfolio 风控 +# 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 +# ENABLE_EASTMONEY_PATCH=false diff --git a/apps/daily-stock-analysis/README.md b/apps/daily-stock-analysis/README.md new file mode 100644 index 000000000..46aabb27b --- /dev/null +++ b/apps/daily-stock-analysis/README.md @@ -0,0 +1,44 @@ +# 每日股票分析 (Daily Stock Analysis) + +LLM 驱动的 A 股/港股/美股智能分析系统,聚合多数据源行情、实时新闻、技术指标与 AI 决策仪表盘,支持多渠道推送。 + +## 快速开始 + +安装后访问 `http://:<端口>` 进入 Web 工作台。 + +> **首次访问**:若启用管理密码(默认开启),WebUI 会引导设置密码,保护 API Key 等敏感配置。 + +## 安装时配置(1Panel 表单) + +| 字段 | 说明 | 默认值 | +|---|---|---| +| 端口 | WebUI 访问端口 | 8000 | +| 时区 | 容器时区 | Asia/Shanghai | +| 自选股列表 | 可选,可在 WebUI 内添加 | 空 | +| 管理密码 | 首次访问 WebUI 时设置密码 | 开启 | + +> **LLM 模型 / 通知渠道 / 新闻搜索 / 报告 / 定时 / 回测 / 策略** 等全部配置请进入 WebUI → 设置页面完成,无需在 1Panel 表单中填写。 + +## 主要功能 + +- 🤖 **AI 决策仪表盘**:核心结论、评分、买卖点位、风险警报 +- 📊 **多维度分析**:技术面、实时行情、新闻舆情、公告、资金流 +- 🌍 **全球市场**:A 股、港股、美股及常见 ETF +- 🖥️ **Web 工作台**:手动分析、配置管理、历史报告、回测、持仓 +- 🧠 **策略问股**:均线金叉、缠论、波浪等 11 种内置策略 +- 📬 **多渠道推送**:企业微信/飞书/Telegram/Discord/Slack/邮件 +- 🔐 **密码保护**:WebUI 管理员登录保护敏感设置 + +## 数据持久化 + +| 容器路径 | 用途 | +|---|---| +| `/app/data` | 数据库和分析缓存 | +| `/app/logs` | 运行日志 | +| `/app/reports` | 分析报告存档 | + +## 源码 + +GitHub: [ZhuLinsen/daily_stock_analysis](https://github.com/ZhuLinsen/daily_stock_analysis) + +完整配置指南:[docs/full-guide.md](https://github.com/ZhuLinsen/daily_stock_analysis/blob/main/docs/full-guide.md) diff --git a/apps/daily-stock-analysis/data.yml b/apps/daily-stock-analysis/data.yml new file mode 100644 index 000000000..05c97e77b --- /dev/null +++ b/apps/daily-stock-analysis/data.yml @@ -0,0 +1,31 @@ +name: 每日股票分析 +tags: + - AI +title: 每日股票分析 +description: LLM驱动的A股/港股/美股智能分析系统,多数据源行情+实时新闻+AI决策仪表盘+多渠道推送 +additionalProperties: + key: daily-stock-analysis + name: 每日股票分析 + tags: + - AI + shortDescZh: LLM驱动的A股/港股/美股智能分析系统,多数据源行情+实时新闻+AI决策仪表盘+多渠道推送 + shortDescEn: LLM-powered stock analysis for A/H/US markets with multi-source data, real-time news, AI dashboard, and multi-channel notifications + description: + en: LLM-powered intelligent stock analysis system for A-share, HK, and US markets. Aggregates multi-source market data, real-time news, technical indicators, and AI-generated decision dashboards, with push notifications to WeChat, Feishu, Telegram, Discord, Slack, or email. + zh: 基于大模型的A股/港股/美股智能分析系统,聚合多数据源行情、实时新闻、技术指标与AI决策仪表盘,支持企业微信/飞书/Telegram/Discord/Slack/邮件等多渠道推送。 + zh-Hant: 基於大模型的A股/港股/美股智慧分析系統,聚合多資料源行情、即時新聞、技術指標與AI決策儀表板,支援企業微信/飛書/Telegram/Discord/Slack/郵件等多管道推播。 + ja: A株/香港株/米国株向けLLM駆動の知的株式分析システム。マルチソースの市場データ、リアルタイムニュース、テクニカル指標、AI生成の意思決定ダッシュボードを集約し、WeChat/Feishu/Telegram/Discord/Slack/メールで通知。 + ko: A주/홍콩주/미국주를 위한 LLM 기반 지능형 주식 분석 시스템. 다중 소스 시장 데이터, 실시간 뉴스, 기술 지표, AI 의사결정 대시보드를 집계하여 WeChat/Feishu/Telegram/Discord/Slack/이메일로 푸시 알림. + ru: Система интеллектуального анализа акций на базе LLM для рынков A-акций, Гонконга и США. Объединяет мульти-источники данных, новости в реальном времени, технические индикаторы и AI-дашборды с уведомлениями через WeChat, Feishu, Telegram, Discord, Slack или email. + ms: Sistem analisis saham pintar berasaskan LLM untuk pasaran A-share, HK, dan AS. Mengagregat data pasaran pelbagai sumber, berita masa nyata, penunjuk teknikal dan papan pemuka keputusan AI, dengan pemberitahuan ke WeChat, Feishu, Telegram, Discord, Slack, atau email. + pt-br: Sistema inteligente de análise de ações baseado em LLM para ações A, HK e EUA. Agrega dados de mercado de múltiplas fontes, notícias em tempo real, indicadores técnicos e painéis de decisão com IA, com notificações via WeChat, Feishu, Telegram, Discord, Slack ou email. + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: "https://github.com/ZhuLinsen/daily_stock_analysis" + github: "https://github.com/ZhuLinsen/daily_stock_analysis" + document: "https://github.com/ZhuLinsen/daily_stock_analysis/blob/main/docs/full-guide.md" + architectures: + - amd64 + - arm64 diff --git a/apps/daily-stock-analysis/latest/.env.sample b/apps/daily-stock-analysis/latest/.env.sample new file mode 100644 index 000000000..97e692b11 --- /dev/null +++ b/apps/daily-stock-analysis/latest/.env.sample @@ -0,0 +1,5 @@ +CONTAINER_NAME=daily-stock-analysis +PANEL_APP_PORT_HTTP=8000 +TZ=Asia/Shanghai +APP_DATA_DIR=./data +ADMIN_AUTH_ENABLED=true diff --git a/apps/daily-stock-analysis/latest/data.yml b/apps/daily-stock-analysis/latest/data.yml new file mode 100644 index 000000000..483578a1e --- /dev/null +++ b/apps/daily-stock-analysis/latest/data.yml @@ -0,0 +1,72 @@ +additionalProperties: + formFields: + # === Port === + - default: 8000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + label: + en: Port + zh: 端口 + zh-Hant: 端口 + ja: ポート + ko: 포트 + ru: Порт + ms: Port + pt-br: Porta + required: true + type: number + rule: paramPort + # === Data Directory === + - default: ./data + edit: true + envKey: APP_DATA_DIR + labelEn: Data Directory + labelZh: 数据目录 + label: + en: Data Directory + zh: 数据目录 + zh-Hant: 資料目錄 + ja: データディレクトリ + ko: 데이터 디렉토리 + ru: Каталог данных + ms: Direktori data + pt-br: Diretório de dados + required: true + type: text + # === Timezone === + - default: Asia/Shanghai + edit: true + envKey: TZ + labelEn: Timezone + labelZh: 时区 + label: + en: Timezone + zh: 时区 + zh-Hant: 時區 + ja: タイムゾーン + ko: 시간대 + ru: Часовой пояс + ms: Zon waktu + pt-br: Fuso horário + required: true + type: text + # === Stock List (configurable in WebUI, removed from form) === + # === Admin Auth (security: always enabled) === + - default: "true" + disabled: true + envKey: ADMIN_AUTH_ENABLED + labelEn: Admin Password + labelZh: 管理密码(首次访问 WebUI 设置) + label: + en: Admin Password (set on first WebUI visit) + zh: 管理密码(首次访问 WebUI 设置) + zh-Hant: 管理密碼(首次訪問 WebUI 設定) + ja: 管理パスワード(初回 WebUI 訪問時に設定) + ko: 관리자 비밀번호(최초 WebUI 방문 시 설정) + ru: Пароль администратора (настройка при первом входе) + ms: Kata laluan admin (tetapkan pada lawatan WebUI pertama) + pt-br: Senha admin (configurar na primeira visita ao WebUI) + required: false + type: text diff --git a/apps/daily-stock-analysis/latest/docker-compose.yml b/apps/daily-stock-analysis/latest/docker-compose.yml new file mode 100644 index 000000000..1f3bd7d3c --- /dev/null +++ b/apps/daily-stock-analysis/latest/docker-compose.yml @@ -0,0 +1,24 @@ +services: + daily-stock-analysis: + image: "zhulinsen/daily_stock_analysis:latest" + container_name: "${CONTAINER_NAME}" + labels: + createdBy: "Apps" + ports: + - "${PANEL_APP_PORT_HTTP}:8000" + environment: + - TZ=${TZ} + - WEBUI_ENABLED=true + - WEBUI_HOST=0.0.0.0 + volumes: + - ${APP_DATA_DIR}/data:/app/data + - ${APP_DATA_DIR}/logs:/app/logs + - ${APP_DATA_DIR}/reports:/app/reports + - ./env.defaults:/app/.env + networks: + - 1panel-network + restart: unless-stopped + +networks: + 1panel-network: + external: true diff --git a/apps/daily-stock-analysis/latest/env.defaults b/apps/daily-stock-analysis/latest/env.defaults new file mode 100644 index 000000000..ec52f97b6 --- /dev/null +++ b/apps/daily-stock-analysis/latest/env.defaults @@ -0,0 +1,157 @@ +# =================================== +# 每日股票分析 - 容器环境变量 +# 所有功能(LLM/通知/报告/定时/策略)均可在 WebUI 内配置 +# 此文件挂载为 /app/.env,应用直接读取 +# =================================== + +# --- 管理员认证 --- +ADMIN_AUTH_ENABLED=true + +# --- Docker 服务模式 --- +WEBUI_PORT=8000 +WEBUI_AUTO_BUILD=true + +# --- 数据与日志 --- +DATABASE_PATH=/app/data/stock_analysis.db +LOG_DIR=/app/logs +LOG_LEVEL=INFO +MAX_WORKERS=3 +DEBUG=false + +# --- SQLite 优化 --- +SQLITE_WAL_ENABLED=true +SQLITE_BUSY_TIMEOUT_MS=5000 +SQLITE_WRITE_RETRY_MAX=3 +SQLITE_WRITE_RETRY_BASE_DELAY=0.1 + +# --- 搜索 --- +SEARXNG_PUBLIC_INSTANCES_ENABLED=true + +# --- Stream 模式(默认关闭)--- +DINGTALK_STREAM_ENABLED=false +FEISHU_STREAM_ENABLED=false + +# =================================== +# 以下为可选参考变量(取消注释即可启用) +# =================================== +# Agent 默认启用策略(留空使用内置默认 bull_trend) +AGENT_SKILLS= +# AGENT_SKILL_DIR=./strategies +# AGENT_ARCH=single +# AGENT_ORCHESTRATOR_MODE=standard +# AGENT_ORCHESTRATOR_TIMEOUT_S=600 +# AGENT_RISK_OVERRIDE=true +# AGENT_MEMORY_ENABLED=false +# AGENT_SKILL_AUTOWEIGHT=true +# AGENT_SKILL_ROUTING=auto + +# LLM 多渠道配置 +# LLM_CHANNELS=deepseek,gemini +# LLM_DEEPSEEK_API_KEY=sk-xxx +# LLM_DEEPSEEK_BASE_URL=https://api.deepseek.com +# LLM_DEEPSEEK_MODELS=deepseek-v4-flash,deepseek-v4-pro +# LLM_TEMPERATURE=0.7 +# LITELLM_CONFIG=./litellm_config.yaml + +# 搜索引擎(不在表单中) +# BOCHA_API_KEYS= +# MINIMAX_API_KEYS= +# BRAVE_API_KEYS= +# SEARXNG_BASE_URLS= + +# 社交舆情(仅美股) +# SOCIAL_SENTIMENT_API_KEY= +# SOCIAL_SENTIMENT_API_URL=https://api.adanos.org + +# 新闻时效与筛选 +# NEWS_STRATEGY_PROFILE=short +# NEWS_MAX_AGE_DAYS=3 +# BIAS_THRESHOLD=5.0 + +# 通知渠道高级配置 +# FEISHU_WEBHOOK_KEYWORD=股票日报 +# TELEGRAM_MESSAGE_THREAD_ID= +# DISCORD_BOT_TOKEN= +# DISCORD_MAIN_CHANNEL_ID= +# SLACK_WEBHOOK_URL= +# CUSTOM_WEBHOOK_BEARER_TOKEN= +# WEBHOOK_VERIFY_SSL=true +# PUSHOVER_USER_KEY= +# PUSHOVER_API_TOKEN= +# PUSHPLUS_TOPIC= +# FEISHU_MAX_BYTES=20000 +# WECHAT_MAX_BYTES=4000 +# MARKDOWN_TO_IMAGE_CHANNELS= +# MARKDOWN_TO_IMAGE_MAX_CHARS=15000 +# MD2IMG_ENGINE=wkhtmltoimage +# PREFETCH_REALTIME_QUOTES=true +# MERGE_EMAIL_NOTIFICATION=false + +# 飞书 Stream / 应用模式 +# FEISHU_APP_ID= +# FEISHU_APP_SECRET= + +# 钉钉 Stream 模式 +# DINGTALK_APP_KEY= +# DINGTALK_APP_SECRET= + +# 报告引擎高级配置 +# REPORT_TEMPLATES_DIR=templates +# REPORT_RENDERER_ENABLED=false +# REPORT_INTEGRITY_ENABLED=true +# REPORT_INTEGRITY_RETRY=1 +# REPORT_HISTORY_COMPARE_N=0 + +# 回测高级配置 +# BACKTEST_EVAL_WINDOW_DAYS=10 +# BACKTEST_MIN_AGE_DAYS=14 +# BACKTEST_ENGINE_VERSION=v1 +# BACKTEST_NEUTRAL_BAND_PCT=2.0 + +# 大盘复盘区域 +# MARKET_REVIEW_REGION=cn + +# 数据源 +# TICKFLOW_API_KEY= +# LONGBRIDGE_APP_KEY= +# LONGBRIDGE_APP_SECRET= +# LONGBRIDGE_ACCESS_TOKEN= +# LONGBRIDGE_STATIC_INFO_TTL_SECONDS=86400 +# LONGBRIDGE_ENABLE_OVERNIGHT=false +# LONGBRIDGE_PUSH_CANDLESTICK_MODE=realtime +# LONGBRIDGE_PRINT_QUOTE_PACKAGES=false + +# Data Fetcher 优先级 +# EFINANCE_PRIORITY=0 +# EFINANCE_CALL_TIMEOUT=30 +# AKSHARE_PRIORITY=1 +# TUSHARE_PRIORITY=2 +# PYTDX_PRIORITY=2 +# BAOSTOCK_PRIORITY=3 +# YFINANCE_PRIORITY=4 + +# 实时行情 +# REALTIME_SOURCE_PRIORITY=tencent,akshare_sina,efinance,akshare_em +# ENABLE_REALTIME_QUOTE=true +# ENABLE_REALTIME_TECHNICAL_INDICATORS=true +# ENABLE_CHIP_DISTRIBUTION=true +# 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 + +# 代理 +# USE_PROXY=false +# PROXY_HOST=127.0.0.1 +# PROXY_PORT=10809 + +# Portfolio 风控 +# 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 +# ENABLE_EASTMONEY_PATCH=false diff --git a/apps/daily-stock-analysis/logo.png b/apps/daily-stock-analysis/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..1546632c698beeb558e8028e52235e82fff23a57 GIT binary patch literal 5495 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