## 代码搜索（Symbol Search）

工具：`search_symbol`（`src.tools.symbol_search_tool.SymbolSearchTool`）
描述：把公司名/代码片段解析为带市场的候选 symbol（项目代码约定：A 股 `600519.SH`、港股 `00700.HK`、美股 `AAPL.US`，外加 Yahoo 的 crypto/index/FX）。在三路冻结、IP 节流的公开 API 客户端上扇出，归一为统一候选行，按 symbol 去重并裁剪。单源失败不影响其他源——其错误记入 `sources`，存活候选照常返回。
- **东财 suggest** —— 中/英文名与代码，跨 A 股/港股/美股，每条带 `<market>.<code>` 形式的 `QuoteID`。
- **Yahoo v1 search** —— 全球代码/公司名（US、HK、crypto、indices、FX…）。
- **SEC EDGAR company-tickers** —— 为解析出的美股权益代码补 0 填充的 CIK。
市场：多市场。
限速：东财经 `eastmoney` bucket，Yahoo / SEC 各自 host bucket。

<br>

**端点**

| 源 | 端点 |
| ---- | ---- |
| 东财 suggest | `https://searchapi.eastmoney.com/api/suggest/get`（`input=<query>`、`type=14`、`count=25`） |
| Yahoo search | 经 `backtest.loaders.yahoo_client.search()` |
| SEC CIK | 经 `backtest.loaders.sec_edgar_client.cik_for()` |

**东财 market 号 → 后缀**：1→SH，0→SZ（深/北共用 0 前缀），116→HK，105/106/107→US。

<br>

**输入参数（工具入参）**

名称 | 类型 | 必选 | 描述
---- | ---- | ---- | ----
query | str | Y | 公司名或代码片段，如 `apple` / `贵州茅台` / `茅台` / `AAPL` / `00700`。中英文均可。
limit | int | N | 合并后候选数上限（1–25，默认 10）。

<br>

**返回字段**

每个候选行：

字段 | 描述
---- | ----
symbol | 项目约定 symbol（HK 零填充至 5 位）
name | 名称
market | 粗粒度市场：cn / hk / us / global
type | 证券类型（东财 SecurityTypeName / Yahoo quoteType）
exchange | 交易所（Yahoo 候选）
source | 命中源：`eastmoney` / `yahoo`
also_from | 去重时第二个命中源（可选）
cik | 美股权益补充的 SEC CIK（可选）

信封：`{"ok": true, "market": "multi", "source": "symbol_search", "data": {"query","count","candidates":[...],"sources": {<name>: "ok"|<error>}}}`。仅当 query 本身非法时返回 `{"ok": false, "error": ...}`。

<br>

**调用范例**

```python
from src.tools.symbol_search_tool import SymbolSearchTool

print(SymbolSearchTool().execute(query="apple", limit=5))
print(SymbolSearchTool().execute(query="茅台"))
```
