Skip to content

Commit dd89d06

Browse files
BIGBboxxuxiongCopilot
authored
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>
1 parent 49d8279 commit dd89d06

17 files changed

Lines changed: 1532 additions & 95 deletions

.env.example

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,30 @@ STOCK_LIST=600519,300750,002594
1313
TUSHARE_TOKEN=
1414
# TickFlow API Key(可选,用于 A 股大盘复盘指数增强;若套餐支持标的池查询,也可增强市场统计)
1515
# TICKFLOW_API_KEY=
16+
# Longbridge OpenAPI(可选,美股/港股量比、换手率、PE 等字段兜底)
17+
# 从 https://open.longbridge.com/ 获取
18+
# LONGBRIDGE_APP_KEY=
19+
# LONGBRIDGE_APP_SECRET=
20+
# LONGBRIDGE_ACCESS_TOKEN=
21+
# static_info 进程内缓存秒数,默认 86400;0=每次请求拉取
22+
# LONGBRIDGE_STATIC_INFO_TTL_SECONDS=86400
23+
# Longbridge SDK 语言与 REPORT_LANGUAGE(zh/en)一致;SDK 日志写入 LOG_DIR/longbridge_sdk.log
24+
# 接入点(与 REPORT_LANGUAGE 无关;留空则用下列默认值):
25+
# LONGBRIDGE_HTTP_URL=https://openapi.longbridge.com
26+
# LONGBRIDGE_QUOTE_WS_URL=wss://openapi-quote.longbridge.com/v2
27+
# LONGBRIDGE_TRADE_WS_URL=wss://openapi-trade.longbridge.com/v2
28+
# LONGBRIDGE_REGION=hk
29+
# 覆盖接入点;SDK 内部用 LONGPORT_REGION(不带 BRIDGE)自动选择,
30+
# 代码会自动同步 LONGBRIDGE_REGION → LONGPORT_REGION。
31+
# hk → *.longbridge.com | cn → *.longbridge.cn
32+
# 其余见:https://open.longbridge.com/zh-CN/docs/getting-started#环境变量
33+
# 夜盘行情 true/false,默认 false
34+
# LONGBRIDGE_ENABLE_OVERNIGHT=false
35+
# K 线推送 realtime 或 confirmed,默认 realtime
36+
# LONGBRIDGE_PUSH_CANDLESTICK_MODE=realtime
37+
# 连接时是否打印行情包(与 README / full-guide 一致:未设置时应用侧默认为关闭,等同 false)
38+
# 设为 1 / true / yes 开启 SDK 详细行情包日志(调试长桥连接时使用)
39+
# LONGBRIDGE_PRINT_QUOTE_PACKAGES=false
1640

1741
# ===================================
1842
# AI 模型配置

.github/workflows/daily_analysis.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,18 @@ jobs:
9292
# 数据源
9393
# ==========================================
9494
TUSHARE_TOKEN: ${{ secrets.TUSHARE_TOKEN }}
95+
# Longbridge OpenAPI(美股/港股实时行情字段补充;不设则仅 YFinance/AkShare,无 [Longbridge] 调用)
96+
LONGBRIDGE_APP_KEY: ${{ secrets.LONGBRIDGE_APP_KEY }}
97+
LONGBRIDGE_APP_SECRET: ${{ secrets.LONGBRIDGE_APP_SECRET }}
98+
LONGBRIDGE_ACCESS_TOKEN: ${{ secrets.LONGBRIDGE_ACCESS_TOKEN }}
99+
LONGBRIDGE_REGION: ${{ vars.LONGBRIDGE_REGION || secrets.LONGBRIDGE_REGION }}
100+
LONGBRIDGE_HTTP_URL: ${{ vars.LONGBRIDGE_HTTP_URL || secrets.LONGBRIDGE_HTTP_URL }}
101+
LONGBRIDGE_QUOTE_WS_URL: ${{ vars.LONGBRIDGE_QUOTE_WS_URL || secrets.LONGBRIDGE_QUOTE_WS_URL }}
102+
LONGBRIDGE_TRADE_WS_URL: ${{ vars.LONGBRIDGE_TRADE_WS_URL || secrets.LONGBRIDGE_TRADE_WS_URL }}
103+
LONGBRIDGE_STATIC_INFO_TTL_SECONDS: ${{ vars.LONGBRIDGE_STATIC_INFO_TTL_SECONDS || secrets.LONGBRIDGE_STATIC_INFO_TTL_SECONDS }}
104+
LONGBRIDGE_ENABLE_OVERNIGHT: ${{ vars.LONGBRIDGE_ENABLE_OVERNIGHT || secrets.LONGBRIDGE_ENABLE_OVERNIGHT }}
105+
LONGBRIDGE_PUSH_CANDLESTICK_MODE: ${{ vars.LONGBRIDGE_PUSH_CANDLESTICK_MODE || secrets.LONGBRIDGE_PUSH_CANDLESTICK_MODE }}
106+
LONGBRIDGE_PRINT_QUOTE_PACKAGES: ${{ vars.LONGBRIDGE_PRINT_QUOTE_PACKAGES || secrets.LONGBRIDGE_PRINT_QUOTE_PACKAGES }}
95107

96108
# ==========================================
97109
# 搜索服务
@@ -219,6 +231,10 @@ jobs:
219231
echo " OpenAI API Key: $([ -n "$OPENAI_API_KEY" ] && echo '✅ 已配置' || echo '⚪ 未配置')"
220232
echo " Anthropic Key: $([ -n "$ANTHROPIC_API_KEY" ] && echo '✅ 已配置' || echo '⚪ 未配置')"
221233
echo ""
234+
echo "【数据源】"
235+
echo " Tushare Token: $([ -n "$TUSHARE_TOKEN" ] && echo '✅ 已配置' || echo '⚪ 未配置')"
236+
echo " Longbridge: $([ -n "$LONGBRIDGE_APP_KEY" ] && [ -n "$LONGBRIDGE_APP_SECRET" ] && [ -n "$LONGBRIDGE_ACCESS_TOKEN" ] && echo '✅ 已配置(美股/港股行情补充)' || echo '⚪ 未配置(仅 YFinance 等,无长桥调用)')"
237+
echo ""
222238
echo "【搜索引擎】"
223239
echo " Bocha API Keys: $([ -n "$BOCHA_API_KEYS" ] && echo '✅ 已配置' || echo '⚪ 未配置')"
224240
echo " Tavily API Keys: $([ -n "$TAVILY_API_KEYS" ] && echo '✅ 已配置' || echo '⚪ 未配置')"

README.md

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@
6767

6868
| 类型 | 支持 |
6969
|------|------|
70-
| AI 模型 | [AIHubMix](https://aihubmix.com/?aff=CfMq)、Gemini、OpenAI 兼容、DeepSeek、通义千问、Claude、Ollama 本地模型 等(统一模型接入,支持多 Key 负载均衡与多渠道切换|
71-
| 行情数据 | AkShare、Tushare、Pytdx、Baostock、YFinance |
70+
| AI 模型 | [AIHubMix](https://aihubmix.com/?aff=CfMq)、Gemini、OpenAI 兼容、DeepSeek、通义千问、Claude、Ollama 本地模型 等(统一通过 [LiteLLM](https://github.com/BerriAI/litellm) 调用,支持多 Key 负载均衡|
71+
| 行情数据 | AkShare、Tushare、Pytdx、Baostock、YFinance[Longbridge](https://open.longbridge.com/)(美股/港股首选数据源) |
7272
| 新闻搜索 | Tavily、SerpAPI、Bocha、Brave、MiniMax |
7373
| 社交舆情 | [Stock Sentiment API](https://api.adanos.org/docs)(Reddit / X / Polymarket,仅美股,可选) |
7474

75-
> 注:美股历史数据与实时行情统一使用 YFinance,确保复权一致性
75+
> **长桥优先策略(仅美/港股)**:在配置 `LONGBRIDGE_APP_KEY` / `LONGBRIDGE_APP_SECRET` / `LONGBRIDGE_ACCESS_TOKEN` 的前提下,美股与港股的 **日线 K 线****实时行情****Longbridge 优先拉取**;若长桥失败或部分字段缺失,再由 **YFinance(美股)/ AkShare(港股)** 兜底或合并补全字段。**未配置长桥凭据时不会调用 Longbridge**,美股/港股仍以 YFinance / AkShare 为主数据源(与未集成长桥前的行为一致)。**美股大盘指数**(如 SPX)始终以 YFinance 优先(长桥不提供指数行情)。**A 股**路由不变,仍为 Efinance → AkShare → Tushare → Pytdx → Baostock。详见 `.env.example`[完整指南](docs/full-guide.md) 中长桥说明。
7676
7777
### 内置交易纪律
7878

@@ -188,6 +188,17 @@
188188
| `SOCIAL_SENTIMENT_API_URL` | 自定义社交舆情 API 地址(默认 `https://api.adanos.org`| 可选 |
189189
| `TUSHARE_TOKEN` | [Tushare Pro](https://tushare.pro/weborder/#/login?reg=834638 ) Token | 可选 |
190190
| `TICKFLOW_API_KEY` | [TickFlow](https://tickflow.org) API Key(增强 A 股大盘复盘指数;若套餐支持标的池查询,也可增强市场统计) | 可选 |
191+
| `LONGBRIDGE_APP_KEY` | [Longbridge OpenAPI](https://open.longbridge.com/) App Key(配置后自动成为美股/港股首选数据源) | 可选 |
192+
| `LONGBRIDGE_APP_SECRET` | Longbridge App Secret | 可选 |
193+
| `LONGBRIDGE_ACCESS_TOKEN` | Longbridge Access Token | 可选 |
194+
| `LONGBRIDGE_STATIC_INFO_TTL_SECONDS` | 长桥 `static_info` 进程内缓存秒数,默认 `86400``0` 表示不缓存 | 可选 |
195+
| `LONGBRIDGE_HTTP_URL` | HTTP 接口地址(默认 `https://openapi.longbridge.com`| 可选 |
196+
| `LONGBRIDGE_QUOTE_WS_URL` | 行情 WebSocket 地址(默认 `wss://openapi-quote.longbridge.com/v2`| 可选 |
197+
| `LONGBRIDGE_TRADE_WS_URL` | 交易 WebSocket 地址(默认 `wss://openapi-trade.longbridge.com/v2`| 可选 |
198+
| `LONGBRIDGE_REGION` | 覆盖接入点;SDK 会按网络自动选择,默认 `hk`,若判断不正确可设置(如 `cn``hk`| 可选 |
199+
| `LONGBRIDGE_ENABLE_OVERNIGHT` | 是否开启夜盘行情 `true` / `false`,默认 `false` | 可选 |
200+
| `LONGBRIDGE_PUSH_CANDLESTICK_MODE` | K 线推送模式:`realtime``confirmed`(默认 `realtime`| 可选 |
201+
| `LONGBRIDGE_PRINT_QUOTE_PACKAGES` | 连接时是否打印行情包(未设置时默认 `false`;设为 `1`/`true`/`yes` 开启) | 可选 |
191202
| `PREFETCH_REALTIME_QUOTES` | 实时行情预取开关:设为 `false` 可禁用全市场预取(默认 `true`| 可选 |
192203
| `WECHAT_MSG_TYPE` | 企微消息类型,默认 markdown,支持配置 text 类型,发送纯 markdown 文本 | 可选 |
193204
| `NEWS_STRATEGY_PROFILE` | 新闻策略窗口档位:`ultra_short`(1天) / `short`(3天) / `medium`(7天) / `long`(30天),默认 `short` | 可选 |

data_provider/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
4. TushareFetcher (Priority 2) - 来自 tushare 库(不可用)
2626
5. BaostockFetcher (Priority 3) - 来自 baostock 库
2727
6. YfinanceFetcher (Priority 4) - 来自 yfinance 库
28+
7. LongbridgeFetcher (Priority 5) - 长桥 OpenAPI(美股/港股兜底)
2829
2930
提示:优先级数字越小越优先,同优先级按初始化顺序排列
3031
"""
@@ -36,6 +37,7 @@
3637
from .pytdx_fetcher import PytdxFetcher
3738
from .baostock_fetcher import BaostockFetcher
3839
from .yfinance_fetcher import YfinanceFetcher
40+
from .longbridge_fetcher import LongbridgeFetcher
3941
from .us_index_mapping import is_us_index_code, is_us_stock_code, get_us_index_yf_symbol, US_INDEX_MAPPING
4042

4143
__all__ = [
@@ -47,6 +49,7 @@
4749
'PytdxFetcher',
4850
'BaostockFetcher',
4951
'YfinanceFetcher',
52+
'LongbridgeFetcher',
5053
'is_us_index_code',
5154
'is_us_stock_code',
5255
'is_hk_stock_code',

0 commit comments

Comments
 (0)