快速开始

默认以 Desktop Shell + Web UI 启动(主界面、托盘与悬浮窗)。默认配置即可使用,无需先改设置。按下面步骤操作:

  1. 启动同花顺官方最新版客户端,保持至少一个窗口打开(默认内存读码不支持第三方客户端)。
  2. 启动同花顺助手(本软件)。
  3. 在顶部导航打开「监控」页,从左侧选中同花顺安装路径;在右侧勾选「监听」「发送」和/或「买卖条」。
  4. 点击窗口底部状态栏「启动」(运行中可点「重新启动」)。
启动后,勾选「监听」的实例会显示当前股票代码;切换个股后代码会自动更新。默认以内存方式读取当前股票,需使用官方最新版同花顺,不支持第三方客户端;读码失败时可在实例详情「股票代码获取」改为「日志」,或按界面引导做偏移恢复。若需让外部程序接收变化或跳转股票,见下方 「我想…」 按需配置。关闭主窗口默认进入系统托盘,不会退出进程。
初始化状态:暂无同花顺实例时的引导

初始化状态:首次启动且暂未检测到同花顺实例时,界面会给出联动引导。

软件内可随时点击「检查环境」、设置页「快速上手」,或托盘菜单复查步骤是否就绪。

我想…

按目标查找操作位置,仅在需要时修改对应设置。

我想…怎么做
在软件里看到当前选中的股票 「监控」→ 勾选「监听」→ 状态栏点「启动」。默认即可,无需改设置。
从本软件向同花顺发送股票代码 勾选「发送」→ 在「监控」页填写代码并发送;或启用 WebSocket 后由外部程序调用(见 WebSocket)。
让外部程序接收股票变化 / 跳转个股 「设置 → 实时推送」勾选「启用实时推送」→ 点「启动」→ 见 WebSocket 说明。未配置 http_api_key 时可无 token 连接;配置后见 接口鉴权。
读写自选股、调用 HTTP 接口 「设置 → HTTP 接口」勾选启用 →(可选)配置 http_api_key(见 鉴权)→ 见 HTTP 说明。写入自选股在实例「自选股」页配置云端账号。Pro 功能。
查询板块 / 热点主题 / 匹配个股所属板块 「订阅」激活 Pro 后,选中实例打开「板块」标签:可刷新缓存、导出 JSON、查看「匹配板块」。也可经 HTTP / WebSocket 查询(见 板块接口)。完整字段见仓库 docs/同花顺板块列表接口.md、docs/同花顺热点主题接口.md。
向自定义板块添加成分股 先在同花顺客户端新建自定义板块(至少含 1 只股票),再在「板块」标签点「添加成分股…」,或调用 HTTP / WS add_stocks。仅支持已有板块追加/覆盖成分,不支持新建 / 删除 / 重命名。写入后请在同花顺中刷新或重启后再查看。
与通达信自定义板块双向同步 「板块」→「通达信同步」:填写通达信目录、配置名称映射后整表覆盖同步板块;亦支持「我的自选」与通达信自选股双向整表同步。亦可调用 通达信板块接口。
显示买卖悬浮条 / 下单窗 实例勾选「买卖条」,或托盘「显示买卖条」。买入/卖出打开独立置顶悬浮窗,主窗在托盘时仍可下单。详见 托盘与悬浮窗。
查看交易日历 顶部导航「日历」页;亦可经 HTTP /calendar/month、/calendar/day 查询。
导出短线精灵配置 选中实例 →「配置管理」标签 → 导出 Excel 或 JSON。也可经 HTTP /short-genius/* 或 WebSocket short_genius 只读查询。
查询 A 股静态股票列表 启用 HTTP / WebSocket 后调用 /ths-stock-list 或 ths_stock_list(无需单独板块授权)。详见 docs/同花顺股票列表接口.md。
调整股票读取速度 / 方式 「设置 → 基本配置」或实例「股票代码获取」:间隔默认 0.3 秒;连接类型默认「内存」,可改「日志」。
修改 WebSocket / HTTP 端口 「设置 → 实时推送 / HTTP 接口」→ 启用后修改端口并复制链接地址。
配置自选股云端写入账号 「监控」选中实例 →「自选股」→ 填写账号或 Cookie 并探测;依赖缺失时到「设置 → 自选股依赖」安装。
设置风控关闭密码 「设置 → 风控密码」。
开机自动打开本软件 「设置 → 基本配置」→ 勾选开机自启。
激活 Pro(HTTP / 交易 / 板块等) 「订阅」页输入激活码或 Mock 购买。WebSocket 股票推送/改码在源码侧为免费能力,仍须在设置中启用并启动。
同目录开了多个同花顺窗口,代码一样? 见 多实例说明。默认内存方式按窗口独立读码;日志方式按安装目录共享。
内存方式读不到当前股票? 仅支持官方最新版同花顺。请升级客户端;按界面「偏移恢复」引导重找指针链;或改为「日志」方式。

监控页

顶部导航「监控」用于选择同花顺实例、控制监听/发送/买卖条,并在底部状态栏启动联动服务。另有「设置」「订阅」「日历」页。

区域 / 操作说明
左侧路径列表 本机检测到的同花顺安装目录;选中后右侧显示该实例详情与标签页。
监听 勾选后读取当前股票并在界面显示;所属目录的变化可经 WebSocket 推送(需已启用实时推送)。
发送 勾选后,本软件或 WebSocket target: "all" 可向该实例跳转股票。
买卖条 勾选后显示买卖悬浮条(账户与当前股票、买入/卖出入口);托盘亦可「显示买卖条」。
状态栏「启动」/「停止」 启动后开始读取当前股票(默认内存,可改为日志)。若已在设置中启用 WebSocket / HTTP,会一并启动对应服务。运行中可「重新启动」。
发送股票代码 测试区:填写代码后发送到全部「发送」实例或当前选中实例(需已启用 WebSocket 并启动)。
「交易」标签 刷新账户、复制 JSON、买入 / 卖出、配置实例级风控(需 Pro;下单经 easyths / xiadan)。风控设置含「风控规则」「买卖提示」两个标签;风控拦截时弹出独立告警悬浮窗。
「自选股」标签 查看与编辑本地/云端自选股:单只添加 / 删除、整表替换、整表恢复、复制列表 / 复制 JSON(写入需 Pro + 云端认证 + ths-favorite)。
「股票代码获取」标签 全局读码方式(内存 / 日志)与间隔;可打开实例目录或日志目录。
「配置管理」标签 导出短线精灵配置为 Excel / JSON(只读)。
「板块」标签 / 匹配板块 Pro:刷新本地缓存、按类型导出 JSON、向已有自定义板块「添加成分股」、与通达信板块 / 自选双向同步。匹配结果在实例详情顶部「匹配板块」展示;导出 / 匹配类型可单独勾选(含「热点主题」)。
监控页与交易标签

监控页:左侧选同花顺实例,顶部控制监听 / 发送 / 买卖条,「交易」标签查账户与持仓。

交易风控设置对话框

交易风控设置对话框(「交易」标签 → 编辑规则):含「风控规则」与「买卖提示」两个标签。

板块管理界面

板块标签:本地板块按类型统计、导出 / 匹配个股勾选,以及与通达信的板块、自选双向同步。

自选股界面

自选股标签:云端账号配置、单只添加、整表替换与整表恢复,列表可复制。

交易日历页

交易日历页(顶部导航「日历」):标注交易日、休市与出金日。

托盘与悬浮窗

关闭主窗口默认进入系统托盘,进程继续运行。托盘右键菜单:

  • 打开主界面 — 恢复主窗口
  • 设置 — 打开设置页
  • 检查环境 — 进入设置并触发环境检查
  • 检查更新 — 手动检查新版本并立即安装(见「软件升级」)
  • 显示买卖条 — 打开买卖悬浮条
  • 退出 — 真正退出进程(主窗关闭≠退出)

以下为独立于主窗口的置顶悬浮窗(可拖拽、位置可记忆),主窗在托盘时仍可用:

悬浮窗用途
买卖条账户摘要与当前股票;买入/卖出入口
委托窗买入/卖出限价委托表单
风控告警展示风控拦截/确认信息,尽量不把主程序拉到前台

软件升级

本软件支持在线自动升级:检测到新版本后自动下载并完成安装替换,无需重新安装、无需手动解压覆盖。安装包通过 sha256 完整性校验后才会应用;升级过程会自动重启软件以完成替换。

日常使用速览:① 启动同花顺官方最新版并保持窗口打开 → ② 启动同花顺助手 → ③ 「监控」页勾选「监听 / 发送」并点状态栏「启动」→ ④ 关闭主窗口进入系统托盘(进程继续运行)→ ⑤ 有新版本时在托盘点「检查更新」即可升级。各功能细节见「我想…」「监控页」「托盘与悬浮窗」。

升级方式

  • 自动检查 — 启动后约 4 秒在后台静默检查一次;发现新版本会弹出提示,确认后自动下载、安装并重启。可在配置中关闭(见下)。
  • 手动检查 — 托盘右键菜单 →「检查更新」,立即检查并提示结果。

升级流程

  1. 按序探测多个更新源(GitHub Pages 清单、GitHub Releases API,以及你自行配置的镜像源),任一源不可达或内容无效会自动跳过并尝试下一个;在可用源中取版本号最高的版本。
  2. 流式下载新安装包,校验 sha256 与发布清单一致后落盘(完整性校验;数字签名暂未启用)。
  3. 软件自动退出并自替换:用新安装包覆盖自身路径后按原方式重新启动,全程无需安装器。
  4. 若升级中断(如关机、断电),下次启动时会自动恢复并完成安装。

配置更新源(可选)

默认配置开箱即用。如需自建国内镜像或调整顺序,编辑用户目录 ~/.ths-linker/linker_config.json 的 update 段:

{
  "update": {
    "sources": [
      {
        "name": "mirror",
        "kind": "generic",
        "latest_url": "https://mirror.example.com/ths-linker/latest.json",
        "enabled": true
      },
      {
        "name": "github-pages",
        "kind": "generic",
        "latest_url": "https://awamwang.github.io/ths-linker-releases/latest.json",
        "enabled": true
      },
      {
        "name": "github-api",
        "kind": "github",
        "latest_url": "https://api.github.com/repos/awamwang/ths-linker-releases/releases/latest",
        "enabled": true
      }
    ],
    "check_on_startup": true,
    "check_timeout": 6
  }
}
  • sources — 按数组顺序探测;kind 为 generic(解析 latest.json 清单)或 github(解析 GitHub Releases API);enabled: false 可临时停用某源。配置非法或缺项时整体回退到内置默认源。
  • check_on_startup — 启动时是否静默检查(默认 true)。
  • check_timeout — 单个源探测超时秒数(默认 6)。
以源码方式运行(非打包 exe)时仅支持 update check 命令行检查,不执行自替换安装;只有正式发布版支持一键升级。

设置项说明

在「设置」页按左侧分类修改;点「应用并保存」后立即生效并持久化到用户目录 ~/.ths-linker/linker_config.json。首次使用可保持默认,按 「我想…」 按需调整。

分类 / 项说明
快速上手 首次引导步骤与「检查环境」;可随时复查是否就绪。
基本配置(监听与发送) 监听轮询与连接方式:读取间隔(默认 0.3 秒)、连接类型(默认「内存」读 hexin.exe,可改「日志」轮询 HexinHttp)、按键精灵买卖按键与输入间隔、开机自启。内存偏移保存在 ~/.ths-linker/memory_offset.json。
实时推送(WebSocket) 勾选「启用实时推送」后显示端口与链接,默认 ws://127.0.0.1:8765。监听模式:本机 / 局域网 / 自定义 IP(与 HTTP 共用)。
HTTP 接口 勾选「启用 HTTP 接口」后显示端口与地址,默认 http://127.0.0.1:8766(Pro)。http_api_key 可选;未配置时第三方可无 token 调用(见 接口鉴权)。
风控密码 关闭或放宽实例级风控时需要的全局密码。
自选股依赖 查看 / 安装 ths-favorite(写入「我的自选」所需)。
本机路径与环境 检查环境;打开文档、配置文件、偏移文件等本地路径。
设置-实时推送

设置 → 实时推送:WebSocket 开关、端口、监听模式与链接地址。

设置-本机路径与环境

设置 → 本机路径与环境:逐项检查运行环境,标红项为未通过。

接口鉴权

集成密钥 http_api_key 不是必须的:界面未配置时,启动服务后第三方可无 token 连接 WebSocket / 调用业务 HTTP。若在设置中写入了密钥,则对外对接须带凭证。Web UI 的 Control Plane(设置 / 运行时等)仍使用进程级会话令牌,与对外集成密钥相互独立。

项说明
公开路径 GET /health 与静态文档/Web UI 资源免鉴权。
会话令牌 session_token 进程内存生成,经 Shell Bridge 注入 Web UI,保护 Control Plane(/settings、/runtime 等)。外部无法稳定获取;不单独用来锁死对外业务 HTTP / WebSocket。
集成密钥 http_api_key(可选) 在设置或 ~/.ths-linker/linker_config.json 写入后生效。配置后:业务 HTTP 用 Authorization: Bearer <http_api_key>;WebSocket 用 ?token= 或 Bearer。HTTP 业务接口另需 Pro(FEATURE_HTTP_API)。
WebSocket / 业务 HTTP 未配置 http_api_key:可无 token 连接与调用。已配置:握手/请求须带凭证(session 或集成密钥均可)。集成密钥握手不额外强制 Pro;各消息仍按功能授权门控。
失败响应 HTTP 401:{"ok":false,"error":"…","auth_required":true};集成密钥缺 Pro 时可能另含 license_required:true。
# 未配置 http_api_key 时可直接调用
curl http://127.0.0.1:8766/stock-code/get
ws://127.0.0.1:8765

# 配置了 http_api_key 后须带凭证
curl -H "Authorization: Bearer YOUR_HTTP_API_KEY" http://127.0.0.1:8766/stock-code/get
ws://127.0.0.1:8765/?token=YOUR_HTTP_API_KEY
业务 License(交易 / 自选写入 / 板块等)与本鉴权正交:通过鉴权后仍可能因未激活 Pro 返回 license_required。

WebSocket 说明与地址

本节描述的是本软件对外暴露的公共联动能力(本机 WebSocket 接口),供你自己的脚本、网页或其它程序对接使用。若需与软件深度集成、定制开发或商业合作,请联系开发者:wm.keepgoing@gmail.com。

使用前:「设置 → 实时推送」勾选「启用实时推送」→ 状态栏点击「启动」。默认地址:

ws://127.0.0.1:8765

未配置 http_api_key 时可直接连接 ws://127.0.0.1:8765;已配置时请使用 ws://127.0.0.1:8765/?token=YOUR_KEY 或握手携带 Authorization: Bearer …(见 接口鉴权)。

消息均为 JSON 文本帧。连接成功后服务端会先推送 stock_code(action: get),再推送各安装目录缓存的 stock_code(action: push,若有),若该实例已有本地持仓缓存则再推送 trade(action: push)。运行中若同花顺实例身份变化(PID / 窗口标题 / 安装路径),会额外推送 instances(action: push)。

端口与地址可在「设置 → 实时推送」中查看、修改并复制。股票推送/改码在源码侧为免费能力;交易、自选写入、板块等仍按 Pro 门控。

推送消息(服务端 → 客户端)

stock_code(action: push)— 股票变化推送

{
  "type": "stock_code",
  "action": "push",
  "ths_dir": "C:\\同花顺",
  "code": "600519",
  "market_id": "17",
  "symbol": "600519.SH",
  "instances": [
    {
      "id": "12345",
      "pid": 12345,
      "hwnd": 67890,
      "title": "同花顺",
      "ths_dir": "C:\\同花顺",
      "listen": true,
      "send": true
    }
  ]
}
字段说明
ths_dir产生该日志的安装目录(已 normalize)。
code / market_id / symbol当前股票。
instances该目录下关联的同花顺实例列表;同目录多开时共享同一套代码。每项可含 listen / send。

instances(action: push)— 实例变化推送

默认约每 10 秒扫描一次同花顺实例;在启动/重新启动、环境检查、发送、交易等关键节点也会立即刷新。仅当实例身份真实变化(PID、窗口标题、安装路径增删改)时主动推送;仅 hwnd 变化或界面「监听/发送」勾选变更不会推送本事件。

{
  "type": "instances",
  "action": "push",
  "instances": [
    {
      "id": "12345",
      "pid": 12345,
      "hwnd": 67890,
      "title": "同花顺",
      "ths_dir": "C:\\同花顺",
      "listen": true,
      "send": true
    }
  ]
}
字段说明
instances当前运行中的同花顺实例完整列表(含 listen / send)。

trade(action: push)— 仓位变化推送

WebSocket 运行后,按实例轮询本地持仓快照文件(trading_snapshots),默认每 10 秒比对 snapshot 内容(忽略仅 refreshed_at 变化、持仓行顺序变化)。内容真正变化时主动推送;新连接也会推送当前已缓存的持仓。

{
  "type": "trade",
  "action": "push",
  "ths_dir": "C:\\同花顺",
  "refreshed_at": "2026-08-24 10:00:00",
  "holdings": [
    {
      "code": "600519",
      "name": "贵州茅台",
      "shares": 100,
      "available_shares": 100,
      "cost": 1400.0,
      "price": 1800.0,
      "pnl": 40000.0,
      "market_value": 180000.0
    }
  ],
  "snapshot": {
    "equity": 1000000.0,
    "available": 200000.0,
    "stock_market_value": 180000.0,
    "holdings": []
  },
  "instances": [
    {
      "id": "12345",
      "pid": 12345,
      "hwnd": 67890,
      "title": "同花顺",
      "ths_dir": "C:\\同花顺"
    }
  ]
}
字段说明
ths_dir对应同花顺安装目录(已 normalize)。
holdings当前持仓列表,与 snapshot.holdings 一致。
snapshot账户资金与持仓标准 JSON;文件删除后可能为 null。
refreshed_at本地缓存写入时间(若有)。
instances该目录下关联的同花顺实例。

stock_code(action: get)— 实例快照

在连接时推送;也可由客户端 stock_code action: get 主动请求。实例身份变化请监听 instances action: push。

{
  "type": "stock_code",
  "action": "get",
  "instances": [
    {
      "id": "12345",
      "pid": 12345,
      "hwnd": 67890,
      "title": "同花顺",
      "ths_dir": "C:\\同花顺",
      "listen": true,
      "send": true
    }
  ],
  "stocks": {
    "C:\\同花顺": {
      "code": "600519",
      "market_id": "17",
      "symbol": "600519.SH"
    }
  }
}
字段说明
listen界面是否勾选「监听」;未监听的目录变化不会推送 push。
send界面是否勾选「发送」;影响 post 的 target: "all"。

stock_code_result — 查询/跳转结果

{
  "type": "stock_code_result",
  "action": "post",
  "ok": true,
  "code": "600519",
  "targets": [
    { "id": "12345", "ok": true, "method": "message" }
  ]
}

action: get 时含 instances、stocks;action: post 时含 code、targets。失败时可能带顶层 error,或在 targets[].error 中说明单个实例失败原因。

self_stock_result — 自选股操作结果

响应 self_stock 指令;字段与 HTTP 自选股 API 一致,并额外包含 type、action。

{
  "type": "self_stock_result",
  "action": "list",
  "ok": true,
  "count": 1,
  "items": [
    {
      "code": "600519",
      "market_id": "17",
      "symbol": "600519.SH",
      "price": 1800.5,
      "added_at": "20260819"
    }
  ]
}

trade_result — 交易操作结果

响应 trade 指令;字段与 HTTP 交易 API 一致,并额外包含 type、action。

{
  "type": "trade_result",
  "action": "probe",
  "ok": true,
  "xiadan_path": "C:\\同花顺\\xiadan.exe",
  "server_host": "127.0.0.1",
  "server_port": 7648,
  "server_reachable": true,
  "server_message": "ok"
}

action: snapshot 时额外含 snapshot(账户资金与持仓标准 JSON);funds / holdings 含对应字段;buy / sell 含 code、price、quantity、result。服务端主动推送仓位变化时为 type: trade + action: push(见上方推送消息),不是 trade_result。

risk_control_result — 风控配置结果

响应 risk_control 指令;字段与 HTTP 风控 API 一致,并额外包含 type、action。

{
  "type": "risk_control_result",
  "action": "get",
  "ok": true,
  "settings": {
    "version": 1,
    "enabled": true,
    "total_position_limit_pct": 20.0,
    "single_stock_limit_pct": 5.0,
    "market_prompts": ["市场谨慎"],
    "stock_buy_prompts": ["勿追高"],
    "sell_prompts": ["按计划止盈"],
    "sell_block_prompts": [],
    "stock_sell_prompts": {},
    "stock_sell_block_prompts": {},
    "watch_enabled": true,
    "watch_interval_sec": 10.0,
    "xiadan_risk_unrestricted": false,
    "xiadan_block_order_popups": false,
    "global_no_buy": false,
    "global_no_buy_reason": "",
    "global_no_buy_meta": {},
    "buy_tips": [],
    "sell_tips": [],
    "trade_tips_enabled": true
  },
  "path": "C:\\Users\\...\\risk_control\\abc123.json",
  "ths_dir": "C:\\同花顺",
  "title": "同花顺(普通)"
}

ths_block_result — 板块操作结果

响应 ths_block 指令;字段与 HTTP 板块 API 一致,并额外包含 type、action。

{
  "type": "ths_block_result",
  "action": "list",
  "ok": true,
  "kind": "custom",
  "kind_label": "自定义板块",
  "count": 1,
  "blocks": {
    "278": {
      "name": "ABF",
      "custom_type": "static",
      "stock_ids": ["603186"]
    }
  }
}

action: tree 时含层级 tree;action: add_stocks 时含 block_id、before_count / after_count、stock_ids、skipped_codes 等。热点主题对应 ths_theme_result;A 股列表对应 ths_stock_list_result。

客户端指令(客户端 → 服务端)

stock_code — 股票代码联动

与 HTTP /stock-code/* 一一对应。获取当前股票代码用 get,跳转用 post。

// 刷新实例与当前股票
{ "type": "stock_code", "action": "get" }

// 全部「发送」勾选实例
{ "type": "stock_code", "action": "post", "code": "600519", "target": "all" }

// 指定实例(id 为 pid 字符串,不受发送勾选拦截)
{ "type": "stock_code", "action": "post", "code": "000001", "target": "12345" }
字段必填说明
action是get / post
codepost 时股票代码,支持 600519 / SH600519 / 600519.SH。
target否all(默认,仅勾选「发送」的实例)或实例 id(pid)。

服务端回复 stock_code_result;post 在后台线程执行。

self_stock — 自选股读写

与 HTTP 自选股 API 等价;读本地 SelfStockInfo.json,写经 ths-favorite。字段与 HTTP 请求体相同,通过 action 区分操作。

// 列出「我的自选」
{ "type": "self_stock", "action": "list" }

// 指定安装目录或 JSON 路径(可选)
{ "type": "self_stock", "action": "list", "ths_dir": "C:\\同花顺" }
{ "type": "self_stock", "action": "list", "path": "D:\\data\\SelfStockInfo.json" }

// 添加 / 删除
{ "type": "self_stock", "action": "add", "code": "600519" }
{ "type": "self_stock", "action": "remove", "code": "300750" }

// 整表覆盖(空数组表示清空)
{ "type": "self_stock", "action": "replace", "codes": ["600519", "000001"] }
字段必填说明
action是list / add / remove / replace
codeadd/remove 时6 位股票代码;可选 market_id
codesreplace 时代码数组;可选 market_ids
ths_dir / path否读取时指定目录或 JSON 路径
username / password / cookies否写入时的云端认证;可覆盖 GUI 配置

服务端回复 self_stock_result;写入在后台线程执行,不会阻塞其他消息。

ths_block — 板块查询与成分写入

与 HTTP /ths-block/* 等价。读取本地板块映射 / 层级树;可向已有自定义板块追加或覆盖成分股。需 Pro(板块能力)。

// 列出自定义板块
{ "type": "ths_block", "action": "list", "kind": "custom" }

// 概念层级树(仅 conception / industry / region)
{ "type": "ths_block", "action": "tree", "kind": "conception" }

// 向已有自定义板块追加成分(默认去重追加)
{
  "type": "ths_block",
  "action": "add_stocks",
  "block_name": "ABF",
  "items": [
    { "kind": "hit", "code": "600519" },
    { "kind": "hit", "code": "000001" }
  ]
}

// 覆盖模式(清空后写入)
{
  "type": "ths_block",
  "action": "add_stocks",
  "block_name": "ABF",
  "overwrite": true,
  "items": [{ "kind": "hit", "code": "600519" }]
}
字段必填说明
action是list / tree / add_stocks(别名 add-stocks)
kindlist/tree 时custom / conception / industry / region / daily(及中文别名);tree 仅前三者中的概念/行业/地域
block_nameadd_stocks 时自定义板块显示名(完全匹配);板块须已在同花顺客户端创建
itemsadd_stocks 时hit-list:kind:"hit" + code;兼容旧字段 stocks;仅 A 股,无法映射的进入 skipped_codes
overwrite否true 覆盖成分,默认 false 追加去重
ths_dir否同花顺安装目录;省略时用服务配置或运行中的 hexin

服务端回复 ths_block_result。写入后请在同花顺客户端刷新或重启再查看。不支持新建 / 删除 / 重命名板块。

以下指令与 HTTP 对应;完整字段见仓库 docs/同花顺热点主题接口.md、docs/同花顺股票列表接口.md。

ths_theme — 热点主题(Pro)

{ "type": "ths_theme", "action": "list" }
{ "type": "ths_theme", "action": "full", "theme_key": "光模块/CPO" }
{ "type": "ths_theme", "action": "stocks", "theme_key": "光模块/CPO", "block_code": "B097" }

action:list / tree / stocks / full。回复 ths_theme_result。

ths_stock_list — A 股静态列表

{ "type": "ths_stock_list", "action": "list", "ths_dir": "C:\\同花顺" }

回复 ths_stock_list_result(WS 侧免费)。

short_genius — 短线精灵配置(只读)

{ "type": "short_genius", "action": "config" }
{ "type": "short_genius", "action": "accounts" }
{ "type": "short_genius", "action": "excel" }

回复 short_genius_result。

trade — 交易查询与下单

经 easyths 服务操作 xiadan.exe。需 Pro 与本机交易依赖(easyths / xiadan 已登录)。除 probe 外,其余操作通常需指定 ths_dir(同花顺安装目录)。

// 探测 xiadan 路径与 easyths 连通性
{ "type": "trade", "action": "probe" }

// 账户快照(资金 + 持仓 + 账户元信息)
{ "type": "trade", "action": "snapshot", "ths_dir": "C:\\同花顺" }

// 仅查资金 / 持仓
{ "type": "trade", "action": "funds", "ths_dir": "C:\\同花顺" }
{ "type": "trade", "action": "holdings", "ths_dir": "C:\\同花顺" }

// 剪贴板读写自检(持仓查询依赖 Ctrl+C 复制)
{ "type": "trade", "action": "clipboard_check", "ths_dir": "C:\\同花顺" }

// 限价买入 / 卖出
{
  "type": "trade",
  "action": "buy",
  "ths_dir": "C:\\同花顺",
  "code": "600519",
  "price": 1800.0,
  "quantity": 100
}
字段必填说明
action是probe / snapshot / funds / holdings / clipboard_check / buy / sell
ths_dir除 probe 外通常必填同花顺安装目录,用于定位 xiadan
code / price / quantitybuy/sell 时6 位代码、限价、股数(须 > 0)
host / port / api_key / timeout否覆盖全局 easyths 连接参数;port 也可按实例 trade_port 解析
pid / hwnd / xiadan_path否精确定位交易窗口或 xiadan 可执行文件

服务端回复 trade_result;查询与下单在后台线程执行。持仓查询通过 Ctrl+C 复制表格,若失败请检查 Quicker 等工具是否拦截快捷键,并确认 xiadan 在「查询→资金股票/资金股份」或「双向委托→持仓」页面且窗口在前台。

risk_control — 风控配置读写

读写实例级风控配置(仓位上限、提示词、文件监听等),与「监控 → 交易」页风控设置共用配置文件。按 ths_dir + 可选 title / pid 定位实例;关闭风控、以及放宽风控(上调总仓 / 单票上限、取消「限制同花顺下单」、取消「屏蔽同花顺买卖弹框」、关闭「全局禁止买入」)均需提供「设置 → 风控密码」中配置的全局 password。

// 读取当前配置
{ "type": "risk_control", "action": "get", "ths_dir": "C:\\同花顺", "title": "同花顺(普通)" }

// 部分更新(未传字段保持原值)
{
  "type": "risk_control",
  "action": "update",
  "ths_dir": "C:\\同花顺",
  "total_position_limit_pct": 25.0,
  "stock_buy_prompts": ["勿追高", "禁止梭哈"]
}

// 开启风控(无需密码)
{ "type": "risk_control", "action": "enable", "ths_dir": "C:\\同花顺" }

// 关闭风控(需 password)
{ "type": "risk_control", "action": "disable", "ths_dir": "C:\\同花顺", "password": "你的关闭密码" }
字段必填说明
action是get / update / enable / disable
ths_dir通常必填同花顺安装目录,用于定位实例级配置
title / pid否同目录多实例时区分配置;未指定时按保存的实例列表首条匹配
enabledupdate 时可选设为 false 时须同时提供 password
passworddisable 或放宽 / 关闭时全局风控关闭密码(在「设置 → 风控密码」配置);关闭风控或放宽风控时须提供
total_position_limit_pct / single_stock_limit_pct否总仓 / 单票仓位上限(0–100,百分比)
market_prompts / stock_buy_prompts / sell_prompts否提示词数组;买入拦截时展示市场 + 单票提示,卖出时在结果中带卖出提示
sell_block_prompts / stock_sell_prompts / stock_sell_block_prompts否卖出相关:全局卖出禁止(拦截)、单票卖出提示(不拦截)、单票卖出禁止(拦截);单票格式 代码: 提示1,提示2
xiadan_risk_unrestricted否本实例不拦截 / 提示同花顺 xiadan 买卖面板;对应界面「风控限制同花顺下单」,取消勾选即置 true
xiadan_block_order_popups否屏蔽同花顺买卖浮层弹框(检测到买卖浮层立即关闭,默认关)
buy_tips / sell_tips否原生买卖前逐条确认的提示(条目 {text, enabled},可空);受 trade_tips_enabled 总开关控制
trade_tips_enabled否买卖提示总开关,独立于风控规则开关
global_no_buy否全局禁止买入;开启后拦截全部买入,优先级高于仓位上限与买入提示词
global_no_buy_reason否命中全局禁买时优先展示的原因;为空时默认「全局禁止买入」
global_no_buy_meta否object 额外信息;拦截时出现在交易结果 risk.meta
watch_enabled / watch_interval_sec否是否监听配置文件变更及轮询周期(秒,≥1)

服务端回复 risk_control_result;写操作在后台线程执行。成功时含 settings、配置文件 path。

多实例说明

  • 界面:「监控」左侧为安装路径,选中后在右侧配置监听、发送、买卖条及详情标签。
  • 监听:勾选后该实例显示当前股票,且所属目录的变化可推送 WebSocket;未勾选时不推送。
  • 发送:stock_code action: post 且 target: "all" 时只写入勾选了「发送」的实例;也可在消息中指定实例 id(pid)定向跳转。
  • 读码粒度:默认内存方式按进程读取,同一安装目录下各窗口可显示各自选中的股票。改为日志后按安装目录共享读码,同目录多窗口会显示相同代码。
  • 内存方式限制:仅支持官方最新版同花顺客户端,不支持第三方客户端。读码失败请升级官方客户端、按引导做偏移恢复,或改为日志方式。
  • 日志方式限制:无法区分同目录各窗口各自选中的股票;若你开了多个同花顺窗口且代码总一样,属正常现象。

HTTP 说明与地址

本节描述的是本软件对外暴露的公共 HTTP API,供外部程序读写自选股、联动股票、查询交易与风控等。若需配合软件做定制开发或集成方案,请联系开发者:wm.keepgoing@gmail.com。

使用前:「设置 → HTTP 接口」勾选启用 →(可选)配置 http_api_key(见鉴权)→ 状态栏点击「启动」。默认地址:

http://127.0.0.1:8766

默认绑定本机 127.0.0.1;可在设置中改为局域网(绑定 0.0.0.0)或自定义 IPv4。响应均为 JSON,字段含 ok;失败时带 error(可能含 license_required / auth_required)。支持 CORS。未配置 http_api_key 时业务接口可无 token 调用;已配置时须带 Authorization: Bearer <http_api_key>(见 接口鉴权)。

  • 自选股读取:本地 SelfStockInfo.json。
  • 自选股写入:经云端 API;在实例「自选股」页配置账号或 Cookie。
  • 板块:查询自定义 / 概念 / 行业 / 地域 / 每日动态;可向已有自定义板块写入成分股(Pro)。
  • 通达信板块:列出通达信自定义板块,并与同花顺自定义板块双向整表同步(Pro)。
  • 热点主题 / A 股列表 / 短线精灵:只读查询(主题与板块同 Pro;股票列表与短线精灵见各接口)。
  • 交易:经 easyths 操作 xiadan(需 Pro 与本机交易依赖)。
  • 风控:读写实例级交易风控配置,与界面风控设置共用文件。

启服 HTTP 需 Pro。WebSocket 股票联动在源码侧免费,但界面仍须勾选启用。接口调试可使用本文底部 接口测试(若已配置 API Key 请填写)。

HTTP 接口一览

下列为对外集成常用路由。未配置 http_api_key 时可直接调用;已配置时须带 Authorization: Bearer <http_api_key>。Web UI 另使用 Control Plane 路由(/settings、/runtime、/license、/instances、/shell、/calendar、/offset-recovery、/risk-password 等),一般不必由外部脚本直接调用。

方法路径说明
GET/health健康检查(免鉴权);features 含 stock_code / ths_block / tdx_block / ths_theme / ths_stock_list / short_genius / self_stock / trade / risk_control 等
GET/stock-code、/stock-code/get获取实例列表与各目录当前股票(对应 WS stock_code action: get)
POST/stock-code、/stock-code/post跳转股票代码;body: {"code":"600519","target":"all"}
GET/self-stock、/self-stock/list列出「我的自选」;可选查询参数 ths_dir、path
GET / POST/self-stock/probe探测云端自选认证
POST/self-stock/add添加单只;body: {"code":"600519"}
POST/self-stock/remove删除单只;body 同上
POST/self-stock/replace整表覆盖;body: {"codes":["600519","000001"]}(空数组表示清空)
GET/self-stock/history自选股历史版本列表(供整表恢复)
POST/self-stock/restore整表恢复为指定历史版本;body: {"id":"…"}
GET/ths-block、/ths-block/list扁平板块映射;查询参数 kind(必填)、可选 ths_dir
GET/ths-block/tree概念 / 行业 / 地域层级树
GET / POST/ths-block/export、/ths-block/refresh、/ths-block/status、/ths-block/match导出(可选类型含「热点主题」)、刷新缓存、状态、个股匹配板块
POST/ths-block/add-stocks向已有自定义板块追加/覆盖成分;body 见 板块接口
GET/tdx-block、/tdx-block/list列出通达信自定义板块;见 通达信板块
POST/tdx-block/sync-to-ths、/tdx-block/sync-to-tdx通达信 ↔ 同花顺自定义板块整表同步
GET / POST/tdx-block/self-stock-status通达信自选股同步状态(计数)
POST/tdx-block/sync-self-to-tdx同花顺「我的自选」整表覆盖写入通达信自选股(zxg.blk)
POST/tdx-block/sync-self-from-tdx(别名 /sync-self-to-ths)通达信自选股整表覆盖写入同花顺「我的自选」(需云端账号)
GET/ths-theme、/ths-theme/list、/ths-theme/tree、/ths-theme/stocks、/ths-theme/full热点主题只读查询(Pro);详见 docs/同花顺热点主题接口.md
GET/ths-stock-list、/ths-stock-list/listA 股静态代码/名称列表;详见 docs/同花顺股票列表接口.md
GET/short-genius、/short-genius/config、/short-genius/accounts、/short-genius/excel短线精灵配置只读
GET/trade/probe探测 xiadan 与 easyths 连通性
GET/trade/snapshot、/trade/funds、/trade/holdings、/trade/clipboard-check账户快照 / 资金 / 持仓 / 剪贴板自检;通常需 ths_dir
GET / POST/trade/prepare、/trade/ensure、/trade/recover交易准备、确保服务、端口恢复
POST/trade/buy、/trade/sell限价买入/卖出;body 含 ths_dir、code、price、quantity
GET/risk-control、/risk-control/get读取风控配置;查询参数 ths_dir、可选 title / pid
POST/risk-control/update、/enable、/disable更新 / 开启 / 关闭风控;关闭须 password
GET/calendar/month、/calendar/day交易日历(月视图 / 日详情)

Content-Type 须为 application/json。写入还可附带可选 market_id、username、password、cookies。

列表示例响应

{
  "ok": true,
  "count": 1,
  "items": [
    {
      "code": "600519",
      "market_id": "17",
      "symbol": "600519.SH",
      "price": 1800.5,
      "added_at": "20260819"
    }
  ]
}

HTTP 板块接口

与 WebSocket ths_block 共用实现。需已启用 HTTP API,且具备 Pro 板块授权。完整字段与示例见仓库 docs/同花顺板块列表接口.md。

查询 list / tree

GET /ths-block/list?kind=custom
GET /ths-block/tree?kind=conception
参数说明
kind必填。custom / conception / industry / region / daily(支持中文别名)。tree 仅支持概念 / 行业 / 地域
ths_dir可选;同花顺安装根目录

list 返回 blocks(ID → 名称 / stock_ids 等);自定义板块还可含 custom_type、颜色字段。tree 返回递归 tree 节点。

写入成分 add-stocks

仅更新已有自定义板块文件中的成分列表;板块须先在同花顺客户端创建(至少含 1 只股票)。不支持新建 / 删除 / 重命名。

POST /ths-block/add-stocks
Content-Type: application/json

{
  "block_name": "ABF",
  "overwrite": false,
  "items": [
    { "kind": "hit", "code": "600519" },
    { "kind": "hit", "code": "000001" }
  ]
}
字段说明
block_name自定义板块显示名(完全匹配)
itemshit-list:写入 kind:"hit" 项的 code;标题行等跳过。兼容旧字段 stocks
overwrite默认 false 追加去重;true 清空后覆盖
ths_dir可选

成功响应含 block_id、before_count / after_count、added_count、stock_ids、skipped_codes 等。写入后请在同花顺中刷新或重启后再查看。

「板块」标签提供相同能力:刷新缓存、导出 JSON、「添加成分股…」、通达信同步。写入会改动本地自定义板块文件,测试时请谨慎。

HTTP 通达信板块接口

列出通达信自定义板块,并按名称映射与同花顺自定义板块做整表覆盖同步(Pro);另支持与同花顺自选股双向整表覆盖同步。同步前请先在同花顺侧创建目标自定义板块(自选同步写入同花顺侧时需已配置云端账号)。

GET /tdx-block/list?tdx_dir=D:\new_tdx

POST /tdx-block/sync-to-ths
Content-Type: application/json

{
  "tdx_dir": "D:\\new_tdx",
  "ths_dir": "C:\\同花顺",
  "mappings": [
    { "tdx_name": "我的板块", "ths_name": "ABF" }
  ]
}

POST /tdx-block/sync-to-tdx
Content-Type: application/json

{
  "tdx_dir": "D:\\new_tdx",
  "ths_dir": "C:\\同花顺",
  "mappings": [
    { "tdx_name": "我的板块", "ths_name": "ABF" }
  ]
}
字段说明
tdx_dir通达信安装根目录(含 T0002/blocknew 等)
ths_dir同花顺安装根目录
mappings名称映射数组;亦可省略而使用已保存的配置映射

自选股同步

同花顺「我的自选」与通达信自选股(zxg.blk)可双向整表覆盖同步;写入同花顺侧需已配置云端账号。

GET /tdx-block/self-stock-status?ths_dir=C:\同花顺

POST /tdx-block/sync-self-to-tdx
Content-Type: application/json

{
  "tdx_dir": "D:\\new_tdx",
  "ths_dir": "C:\\同花顺"
}

POST /tdx-block/sync-self-from-tdx
Content-Type: application/json

{
  "tdx_dir": "D:\\new_tdx",
  "ths_dir": "C:\\同花顺"
}
界面路径:「监控 → 板块 → 通达信同步」(含 通达信板块→同花顺 / 同花顺板块→通达信 / 同花顺自选→通达信 / 通达信自选→同花顺)。映射会写入配置并自动保存。自选同步为整表覆盖,测试时请谨慎。

HTTP 交易接口

与 WebSocket trade 指令共用 trading/api.py。GET 接口通过查询参数传参;POST 买入/卖出使用 JSON body。

公共可选参数

参数说明
ths_dir同花顺安装目录(snapshot / funds / holdings / 买卖必填)
host / port / api_key / timeout覆盖 GUI 全局 easyths 连接;未指定 port 时按实例 trade_port 解析
pid / hwnd / xiadan_path精确定位 hexin / xiadan 窗口或可执行文件

账户快照 snapshot

标准 snapshot 字段示例:

{
  "broker": "某某证券",
  "account_name": "资金账号",
  "account_display": "资金账号",
  "equity": 1000000.0,
  "cash_balance": 500000.0,
  "available": 480000.0,
  "withdrawable": 480000.0,
  "frozen": 0.0,
  "stock_market_value": 500000.0,
  "position_pnl": 12000.0,
  "daily_pnl": 800.0,
  "daily_pnl_pct": 0.08,
  "holdings": [
    {
      "code": "600519",
      "name": "贵州茅台",
      "shares": 100,
      "available_shares": 100,
      "cost": 1700.0,
      "price": 1800.0,
      "pnl": 10000.0,
      "market_value": 180000.0
    }
  ]
}

探测响应 probe

{
  "ok": true,
  "action": "probe",
  "xiadan_path": "C:\\同花顺\\xiadan.exe",
  "server_host": "127.0.0.1",
  "server_port": 7648,
  "server_reachable": true,
  "server_message": "ok",
  "hexin": { "id": "12345", "pid": 12345, "hwnd": 67890, "title": "同花顺", "ths_dir": "C:\\同花顺" },
  "xiadan": { "pid": 23456, "hwnd": 78901, "path": "C:\\同花顺\\xiadan.exe" }
}
买卖为真实下单,测试时请用小数量并在模拟环境验证;easyths 服务未启动时返回 自动交易服务不可达。

HTTP 风控接口

与 WebSocket risk_control 指令共用 trading/risk_api.py。读取用 GET 查询参数;更新 / 开启 / 关闭用 POST JSON body。

配置字段 settings

字段说明
enabled是否启用风控
total_position_limit_pct总仓位上限(占账户权益百分比,0–100)
single_stock_limit_pct单票仓位上限(百分比)
market_prompts市场风控提示词(买入被拦截时展示)
stock_buy_prompts单票买入拦截提示词
sell_prompts卖出提示词(全局,不拦截;出现在卖出 API 结果 risk_prompts)
sell_block_prompts卖出禁止提示词(全局,拦截且不可跳过)
stock_sell_prompts单票卖出提示词(不拦截);格式 代码: 提示1,提示2
stock_sell_block_prompts单票卖出禁止提示词(拦截)
xiadan_risk_unrestricted本实例不拦截 / 提示同花顺 xiadan 买卖面板(界面「风控限制同花顺下单」的取反)
xiadan_block_order_popups屏蔽同花顺买卖浮层弹框(检测到立即关闭,默认关)
buy_tips / sell_tips原生买卖前逐条确认的提示({text, enabled});受 trade_tips_enabled 控制
trade_tips_enabled买卖提示总开关,独立于风控规则开关
global_no_buy全局禁止买入开关;开启后拦截全部买入,优先于仓位上限与买入提示词
global_no_buy_reason命中全局禁买时优先展示的原因;为空时默认「全局禁止买入」
global_no_buy_metaobject 额外信息(如来源、分数);买入被拦截时出现在 risk.meta
watch_enabled / watch_interval_sec配置文件热加载开关与轮询间隔

读取示例

GET /risk-control?ths_dir=C:\同花顺&title=同花顺(普通)

更新示例

POST /risk-control/update
Content-Type: application/json

{
  "ths_dir": "C:\\同花顺",
  "title": "同花顺(普通)",
  "total_position_limit_pct": 20.0,
  "single_stock_limit_pct": 5.0,
  "market_prompts": ["情绪低迷"],
  "stock_buy_prompts": ["勿追高"],
  "sell_prompts": ["按计划止盈"],
  "global_no_buy": true,
  "global_no_buy_reason": "指数大跌暂停买入",
  "global_no_buy_meta": {"source": "strategy", "level": 2}
}
关闭风控(enabled: false 或 /risk-control/disable)须先在「设置 → 风控密码」配置全局关闭密码,并在请求中提供 password。放宽风控(上调总仓 / 单票上限、取消「限制同花顺下单」、取消「屏蔽同花顺买卖弹框」、关闭「全局禁止买入」)同样需要 password。

接口测试

在软件已启动且对应服务已在「设置」中启用时,可直接在本页发起请求验证接口。HTTP 默认 http://127.0.0.1:8766,WebSocket 默认 ws://127.0.0.1:8765。仅当软件中配置了 http_api_key 时才需填写下方 API Key;未配置时可留空。

HTTP 测试

等待请求…

WebSocket 测试

未连接

等待连接…
写入自选股、板块成分、买卖下单会改动真实数据,测试时请谨慎;trade snapshot / ths_block add_stocks 预设中的路径与板块名请按本机修改。板块须已在同花顺客户端创建。若返回 401,请填写正确的 API Key。