## 全市场选股（Market Screener）

工具：`screen_market`（`src.tools.market_screener_tool.MarketScreenerTool`）
描述：东财免费免鉴权全市场行情列表（push2 `clist`）。给定市场全集选择器（`fs`），每只上市标的返回一行：最新价 + 常用排名指标（涨跌幅、成交量、成交额、换手率），并由服务端按所选字段（`fid`）预排序。用于回答"今天最大的涨跌/最活跃名单"，无需逐 symbol 抓取。
市场：A 股、美股、港股。
限速：经共享 `eastmoney` per-host 节流层；东财按源 IP 限流。结果有上限，全市场列表不会撑爆上下文。

<br>

**端点**

`https://push2.eastmoney.com/api/qt/clist/get`

**市场全集选择器（fs）**

market | fs
---- | ----
a（A 股，SH/SZ/主板+创业板+北交所） | `m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81+s:2048`
us（NASDAQ/NYSE/AMEX） | `m:105,m:106,m:107`
hk（主板 + 创业板等） | `m:116,m:113,m:114,m:115,m:128`

**排序字段（sort_by → fid）**：change_pct=`f3`、volume=`f5`、amount=`f6`、turnover=`f8`。

<br>

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

名称 | 类型 | 必选 | 描述
---- | ---- | ---- | ----
market | str | Y | `a`（A 股）/ `us`（美股）/ `hk`（港股）。
sort_by | str | N | `change_pct`（涨跌幅，默认）/ `volume`（成交量）/ `amount`（成交额）/ `turnover`（换手率），降序。
top_n | int | N | 返回 top N（1–100，默认 30）。

<br>

**端点查询参数**

`pn=1`、`pz=<top_n>`、`po=1`（降序）、`fid=<排序字段>`、`fs=<市场全集>`、`fields=f2,f3,f4,f5,f6,f8,f12,f14`。

<br>

**返回字段**（field id → 输出键）

field id | 输出键 | 描述
---- | ---- | ----
f12 | code | 代码
f14 | name | 名称
f2 | price | 最新价
f3 | change_pct | 涨跌幅
f4 | change | 涨跌额
f5 | volume | 成交量（手）
f6 | amount | 成交额（货币）
f8 | turnover_rate | 换手率（%）

`-` 等哨兵值映射为 None。信封：`{"ok": true, "market": <market>, "source": "eastmoney", "sort_by": <sort_by>, "data": [...]}`。

<br>

**调用范例**

```python
from src.tools.market_screener_tool import MarketScreenerTool

print(MarketScreenerTool().execute(market="a", sort_by="change_pct", top_n=20))
```
