# Wind Linker
Wind 数据本地转发 API 客户端 - 简单易用,无需直接调用 HTTP 接口。
[](https://pypi.org/project/wind-linker/)
[](https://pypi.org/project/wind-linker/)
## 快速开始
### 1. 安装
**方法一: 从 PyPI 安装 (推荐)**
```bash
pip install wind-linker
```
如果需要 pandas 支持:
```bash
pip install wind-linker[pandas]
```
**方法二: 从源码安装**
```bash
cd wind-linker/wind_linker
pip install -e .
```
### 2. 配置 API 地址
```bash
python -m wind_linker config http://192.168.10.10:10010
```
### 3. 使用
```python
from wind_linker import w
# 获取历史数据
data = w.wsd("000001.SZ", "close", "2025-01-01", "2025-01-10")
print(data.Data)
# 转换为 DataFrame
df = data.to_df()
print(df)
```
## 使用示例
### 历史数据
```python
from wind_linker import w
# 单字段
data = w.wsd("000001.SZ", "close", "2025-01-01", "2025-01-10")
df = data.to_df()
# 多字段
data = w.wsd("000001.SZ", "open,high,low,close,volume", "2025-01-01", "2025-01-10")
df = data.to_df()
# 多品种
data = w.wsd("000001.SZ,600000.SH", "close", "2025-01-01", "2025-01-10")
df = data.to_df()
```
### 分钟数据
```python
data = w.wsi("000001.SZ", "close,volume", "2025-01-10 09:30:00", "2025-01-10 15:00:00")
df = data.to_df()
```
### 实时行情
```python
data = w.wsq("000001.SZ,600000.SH", "rt_last,rt_vol")
df = data.to_df()
```
### 板块成分
```python
data = w.wset("sectorconstituent", "date=2025-01-10;sectorid=a001010100000000")
df = data.to_df()
```
### 经济数据
```python
# 获取经济指标数据
data = w.edb("M5567876", "2024-10-30", "2025-10-30", "Fill=Previous")
df = data.to_df()
# 多个指标
data = w.edb("M5567876,M0017126", "2024-01-01", "2025-01-01")
df = data.to_df()
```
### 批量查询
```python
results = w.batch([
    'w.wsd("000001.SZ", "close", "2025-01-01", "2025-01-10")',
    'w.wsd("600000.SH", "close", "2025-01-01", "2025-01-10")'
])
for result in results:
    print(result.to_df())
```
### 自定义代码
```python
data = w.execute('w.wsd("000001.SZ", "close", "2025-01-01", "2025-01-10")')
df = data.to_df()
```
## 配置方式
### 方法 1: 命令行配置 (推荐)
```bash
python -m wind_linker config http://192.168.10.10:10010
```
查看当前配置:
```bash
python -m wind_linker show
```
### 方法 2: 环境变量
```bash
# Windows
set WIND_API_URL=http://192.168.10.10:10010
# Linux/Mac
export WIND_API_URL=http://192.168.10.10:10010
```
### 方法 3: 代码中指定
```python
from wind_linker import WindAPI
w = WindAPI(base_url="http://192.168.10.10:10010")
```
配置优先级: 代码指定 > 环境变量 > 配置文件 > 默认值(localhost:10010)
## API 参考
### WindData 对象
返回的数据对象,包含以下属性:
- `ErrorCode`: 错误码 (0 表示成功)
- `Codes`: 股票代码列表
- `Fields`: 字段列表
- `Times`: 时间列表
- `Data`: 数据列表
- `to_df()`: 转换为 pandas DataFrame (需要安装 pandas)
### WindAPI 方法
- `wsd(codes, fields, begin_time, end_time, options="")`: 历史数据
- `wsi(codes, fields, begin_time, end_time, options="")`: 分钟数据
- `wsq(codes, fields="rt_last")`: 实时行情
- `wset(tablename, options="")`: 板块成分
- `execute(code)`: 执行自定义代码
- `batch(codes)`: 批量执行
- `health()`: 健康检查
## 安装要求
- Python >= 3.7
- requests >= 2.25.0
- pandas >= 1.0.0 (可选,用于 DataFrame 支持)
## 更新
查看当前版本:
```bash
pip show wind-linker
```
更新到最新版本:
```bash
pip install --upgrade wind-linker
```
## 常见问题
### 1. 如何查看当前配置的 API 地址?
```bash
python -m wind_linker show
```
### 2. 如何切换不同的 API 服务器?
```bash
python -m wind_linker config http://新地址:端口
```
### 3. 返回数据为空怎么办?
检查服务是否正常运行:
```python
from wind_linker import w
print(w.health())
```
### 4. 如何开启调试模式?
```python
from wind_linker import WindAPI
w = WindAPI(debug=True)
data = w.wsd("000001.SZ", "close", "2025-01-01", "2025-01-10")
```
## 许可证
MIT
            
         
        Raw data
        
            {
    "_id": null,
    "home_page": "https://github.com/cdg/wind-linker",
    "name": "wind-linker",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "wind, api, finance, data, client, \u91d1\u878d, \u6570\u636e",
    "author": "CDG",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/31/94/b9f9cd4debcd4ac1ab4d6a9075a76bcb68b96e67772ecd721514d2ca3390/wind_linker-1.0.7.tar.gz",
    "platform": null,
    "description": "# Wind Linker\r\n\r\nWind \u6570\u636e\u672c\u5730\u8f6c\u53d1 API \u5ba2\u6237\u7aef - \u7b80\u5355\u6613\u7528,\u65e0\u9700\u76f4\u63a5\u8c03\u7528 HTTP \u63a5\u53e3\u3002\r\n\r\n[](https://pypi.org/project/wind-linker/)\r\n[](https://pypi.org/project/wind-linker/)\r\n\r\n## \u5feb\u901f\u5f00\u59cb\r\n\r\n### 1. \u5b89\u88c5\r\n\r\n**\u65b9\u6cd5\u4e00: \u4ece PyPI \u5b89\u88c5 (\u63a8\u8350)**\r\n\r\n```bash\r\npip install wind-linker\r\n```\r\n\r\n\u5982\u679c\u9700\u8981 pandas \u652f\u6301:\r\n\r\n```bash\r\npip install wind-linker[pandas]\r\n```\r\n\r\n**\u65b9\u6cd5\u4e8c: \u4ece\u6e90\u7801\u5b89\u88c5**\r\n\r\n```bash\r\ncd wind-linker/wind_linker\r\npip install -e .\r\n```\r\n\r\n### 2. \u914d\u7f6e API \u5730\u5740\r\n\r\n```bash\r\npython -m wind_linker config http://192.168.10.10:10010\r\n```\r\n\r\n### 3. \u4f7f\u7528\r\n\r\n```python\r\nfrom wind_linker import w\r\n\r\n# \u83b7\u53d6\u5386\u53f2\u6570\u636e\r\ndata = w.wsd(\"000001.SZ\", \"close\", \"2025-01-01\", \"2025-01-10\")\r\nprint(data.Data)\r\n\r\n# \u8f6c\u6362\u4e3a DataFrame\r\ndf = data.to_df()\r\nprint(df)\r\n```\r\n\r\n## \u4f7f\u7528\u793a\u4f8b\r\n\r\n### \u5386\u53f2\u6570\u636e\r\n\r\n```python\r\nfrom wind_linker import w\r\n\r\n# \u5355\u5b57\u6bb5\r\ndata = w.wsd(\"000001.SZ\", \"close\", \"2025-01-01\", \"2025-01-10\")\r\ndf = data.to_df()\r\n\r\n# \u591a\u5b57\u6bb5\r\ndata = w.wsd(\"000001.SZ\", \"open,high,low,close,volume\", \"2025-01-01\", \"2025-01-10\")\r\ndf = data.to_df()\r\n\r\n# \u591a\u54c1\u79cd\r\ndata = w.wsd(\"000001.SZ,600000.SH\", \"close\", \"2025-01-01\", \"2025-01-10\")\r\ndf = data.to_df()\r\n```\r\n\r\n### \u5206\u949f\u6570\u636e\r\n\r\n```python\r\ndata = w.wsi(\"000001.SZ\", \"close,volume\", \"2025-01-10 09:30:00\", \"2025-01-10 15:00:00\")\r\ndf = data.to_df()\r\n```\r\n\r\n### \u5b9e\u65f6\u884c\u60c5\r\n\r\n```python\r\ndata = w.wsq(\"000001.SZ,600000.SH\", \"rt_last,rt_vol\")\r\ndf = data.to_df()\r\n```\r\n\r\n### \u677f\u5757\u6210\u5206\r\n\r\n```python\r\ndata = w.wset(\"sectorconstituent\", \"date=2025-01-10;sectorid=a001010100000000\")\r\ndf = data.to_df()\r\n```\r\n\r\n### \u7ecf\u6d4e\u6570\u636e\r\n\r\n```python\r\n# \u83b7\u53d6\u7ecf\u6d4e\u6307\u6807\u6570\u636e\r\ndata = w.edb(\"M5567876\", \"2024-10-30\", \"2025-10-30\", \"Fill=Previous\")\r\ndf = data.to_df()\r\n\r\n# \u591a\u4e2a\u6307\u6807\r\ndata = w.edb(\"M5567876,M0017126\", \"2024-01-01\", \"2025-01-01\")\r\ndf = data.to_df()\r\n```\r\n\r\n### \u6279\u91cf\u67e5\u8be2\r\n\r\n```python\r\nresults = w.batch([\r\n    'w.wsd(\"000001.SZ\", \"close\", \"2025-01-01\", \"2025-01-10\")',\r\n    'w.wsd(\"600000.SH\", \"close\", \"2025-01-01\", \"2025-01-10\")'\r\n])\r\n\r\nfor result in results:\r\n    print(result.to_df())\r\n```\r\n\r\n### \u81ea\u5b9a\u4e49\u4ee3\u7801\r\n\r\n```python\r\ndata = w.execute('w.wsd(\"000001.SZ\", \"close\", \"2025-01-01\", \"2025-01-10\")')\r\ndf = data.to_df()\r\n```\r\n\r\n## \u914d\u7f6e\u65b9\u5f0f\r\n\r\n### \u65b9\u6cd5 1: \u547d\u4ee4\u884c\u914d\u7f6e (\u63a8\u8350)\r\n\r\n```bash\r\npython -m wind_linker config http://192.168.10.10:10010\r\n```\r\n\r\n\u67e5\u770b\u5f53\u524d\u914d\u7f6e:\r\n\r\n```bash\r\npython -m wind_linker show\r\n```\r\n\r\n### \u65b9\u6cd5 2: \u73af\u5883\u53d8\u91cf\r\n\r\n```bash\r\n# Windows\r\nset WIND_API_URL=http://192.168.10.10:10010\r\n\r\n# Linux/Mac\r\nexport WIND_API_URL=http://192.168.10.10:10010\r\n```\r\n\r\n### \u65b9\u6cd5 3: \u4ee3\u7801\u4e2d\u6307\u5b9a\r\n\r\n```python\r\nfrom wind_linker import WindAPI\r\n\r\nw = WindAPI(base_url=\"http://192.168.10.10:10010\")\r\n```\r\n\r\n\u914d\u7f6e\u4f18\u5148\u7ea7: \u4ee3\u7801\u6307\u5b9a > \u73af\u5883\u53d8\u91cf > \u914d\u7f6e\u6587\u4ef6 > \u9ed8\u8ba4\u503c(localhost:10010)\r\n\r\n## API \u53c2\u8003\r\n\r\n### WindData \u5bf9\u8c61\r\n\r\n\u8fd4\u56de\u7684\u6570\u636e\u5bf9\u8c61,\u5305\u542b\u4ee5\u4e0b\u5c5e\u6027:\r\n\r\n- `ErrorCode`: \u9519\u8bef\u7801 (0 \u8868\u793a\u6210\u529f)\r\n- `Codes`: \u80a1\u7968\u4ee3\u7801\u5217\u8868\r\n- `Fields`: \u5b57\u6bb5\u5217\u8868\r\n- `Times`: \u65f6\u95f4\u5217\u8868\r\n- `Data`: \u6570\u636e\u5217\u8868\r\n- `to_df()`: \u8f6c\u6362\u4e3a pandas DataFrame (\u9700\u8981\u5b89\u88c5 pandas)\r\n\r\n### WindAPI \u65b9\u6cd5\r\n\r\n- `wsd(codes, fields, begin_time, end_time, options=\"\")`: \u5386\u53f2\u6570\u636e\r\n- `wsi(codes, fields, begin_time, end_time, options=\"\")`: \u5206\u949f\u6570\u636e\r\n- `wsq(codes, fields=\"rt_last\")`: \u5b9e\u65f6\u884c\u60c5\r\n- `wset(tablename, options=\"\")`: \u677f\u5757\u6210\u5206\r\n- `execute(code)`: \u6267\u884c\u81ea\u5b9a\u4e49\u4ee3\u7801\r\n- `batch(codes)`: \u6279\u91cf\u6267\u884c\r\n- `health()`: \u5065\u5eb7\u68c0\u67e5\r\n\r\n## \u5b89\u88c5\u8981\u6c42\r\n\r\n- Python >= 3.7\r\n- requests >= 2.25.0\r\n- pandas >= 1.0.0 (\u53ef\u9009,\u7528\u4e8e DataFrame \u652f\u6301)\r\n\r\n## \u66f4\u65b0\r\n\r\n\u67e5\u770b\u5f53\u524d\u7248\u672c:\r\n\r\n```bash\r\npip show wind-linker\r\n```\r\n\r\n\u66f4\u65b0\u5230\u6700\u65b0\u7248\u672c:\r\n\r\n```bash\r\npip install --upgrade wind-linker\r\n```\r\n\r\n## \u5e38\u89c1\u95ee\u9898\r\n\r\n### 1. \u5982\u4f55\u67e5\u770b\u5f53\u524d\u914d\u7f6e\u7684 API \u5730\u5740?\r\n\r\n```bash\r\npython -m wind_linker show\r\n```\r\n\r\n### 2. \u5982\u4f55\u5207\u6362\u4e0d\u540c\u7684 API \u670d\u52a1\u5668?\r\n\r\n```bash\r\npython -m wind_linker config http://\u65b0\u5730\u5740:\u7aef\u53e3\r\n```\r\n\r\n### 3. \u8fd4\u56de\u6570\u636e\u4e3a\u7a7a\u600e\u4e48\u529e?\r\n\r\n\u68c0\u67e5\u670d\u52a1\u662f\u5426\u6b63\u5e38\u8fd0\u884c:\r\n\r\n```python\r\nfrom wind_linker import w\r\nprint(w.health())\r\n```\r\n\r\n### 4. \u5982\u4f55\u5f00\u542f\u8c03\u8bd5\u6a21\u5f0f?\r\n\r\n```python\r\nfrom wind_linker import WindAPI\r\n\r\nw = WindAPI(debug=True)\r\ndata = w.wsd(\"000001.SZ\", \"close\", \"2025-01-01\", \"2025-01-10\")\r\n```\r\n\r\n## \u8bb8\u53ef\u8bc1\r\n\r\nMIT\r\n\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Wind \u6570\u636e\u672c\u5730\u8f6c\u53d1 API \u5ba2\u6237\u7aef - \u7b80\u5355\u6613\u7528\u7684 Wind \u91d1\u878d\u6570\u636e\u63a5\u53e3",
    "version": "1.0.7",
    "project_urls": {
        "Homepage": "https://github.com/cdg/wind-linker",
        "Repository": "https://github.com/cdg/wind-linker"
    },
    "split_keywords": [
        "wind",
        " api",
        " finance",
        " data",
        " client",
        " \u91d1\u878d",
        " \u6570\u636e"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "80993161b0135b29b5c0464c12c635053a02897b3ba4ffb396ab4e358f761ca3",
                "md5": "5a14e04c5a0914752aa6e0b911627fb0",
                "sha256": "8661ca9ba508ec819af9c9fbe4b156d2c8677ea36905d5c619b0e9d74326e4a3"
            },
            "downloads": -1,
            "filename": "wind_linker-1.0.7-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "5a14e04c5a0914752aa6e0b911627fb0",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 10073,
            "upload_time": "2025-10-30T05:16:36",
            "upload_time_iso_8601": "2025-10-30T05:16:36.430174Z",
            "url": "https://files.pythonhosted.org/packages/80/99/3161b0135b29b5c0464c12c635053a02897b3ba4ffb396ab4e358f761ca3/wind_linker-1.0.7-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3194b9f9cd4debcd4ac1ab4d6a9075a76bcb68b96e67772ecd721514d2ca3390",
                "md5": "3f32d197cd8c4f6050ff7975f0fa4103",
                "sha256": "b5bb929e9785a34a881a2ad38a1fb9dd03a45447596d153079ebb768e2fd9ba3"
            },
            "downloads": -1,
            "filename": "wind_linker-1.0.7.tar.gz",
            "has_sig": false,
            "md5_digest": "3f32d197cd8c4f6050ff7975f0fa4103",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 11338,
            "upload_time": "2025-10-30T05:16:40",
            "upload_time_iso_8601": "2025-10-30T05:16:40.275828Z",
            "url": "https://files.pythonhosted.org/packages/31/94/b9f9cd4debcd4ac1ab4d6a9075a76bcb68b96e67772ecd721514d2ca3390/wind_linker-1.0.7.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-30 05:16:40",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "cdg",
    "github_project": "wind-linker",
    "github_not_found": true,
    "lcname": "wind-linker"
}