托管者
托管者是运行策略的程序:实盘策略运行在托管者上,而不是运行在发明者量化交易平台网站上。托管者负责与平台通信、启动和停止策略进程、回传日志;策略访问交易所的网络请求也都从托管者所在的机器发出。托管者运行在你自己的服务器(或一键租用的服务器)上,平台网站出现网络故障也不影响托管者上正在运行的实盘。
支持的系统
托管者只发布64位版本:Linux(x86_64、ARM64)、macOS(Intel、Apple Silicon)、Windows(x64、ARM64,另有界面版)。不支持32位系统。
数据目录
托管者的数据都在工作目录(默认为启动目录,可用-w指定)下的logs目录中:
logs/storage/<实盘ID>/<实盘ID>.db3:实盘数据库(SQLite),保存日志、收益、图表、状态栏和_G()数据,可以用SQLite管理软件打开。logs/storage/<实盘ID>/stdout.log、stderr.log:策略进程的标准输出和标准错误。logs/docker.log:托管者自身的运行日志。logs/docker.pid:托管者的身份信息,保留它,重启后平台会沿用原来的托管者ID。
网络代理
托管者不会读取系统代理设置或HTTP_PROXY等环境变量。需要通过代理访问交易所时:
- 在策略中用
exchange.SetProxy给交易所对象设置代理; - 或使用在网络层接管流量的透明代理(例如 Clash 的 TUN 模式),托管者无需任何配置。
本章内容:部署托管者(手动部署、一键租用、操作注意事项)、命令行参数、实盘数据迁移、托管者监控。
部署托管者
托管者管理页面列出当前账号下的托管者,可以切换列表或详细信息展示,查看托管者的IP地址、版本、编译时间等信息。点击部署托管者进入托管者部署页面,有两种方式:一键租用托管者、手动部署托管者。

一键租用托管者
在托管者部署页面点击一键租用托管者标签,根据配置、服务器机房地区等需求选择需要部署的服务器。
点击「立即购买」并输入当前发明者量化交易平台的账号密码进行验证,验证通过后将自动进行托管者程序部署。整个部署过程需要几分钟时间,系统会自动安装常用的Python库。
点击「立即购买」后租用的服务器由于是通过平台代为租用,仅具有有限的系统权限,不支持远程登录。如果需要使用未预装的第三方Python库,建议使用私有服务器进行手动部署。
通过一键租用托管者功能租用的服务器采用独立计费方式,与实盘计费相互独立。
点击「重新部署」按钮不会删除托管者目录下logs目录中的实盘日志和数据文件。
手动部署托管者
可以把托管者部署在个人电脑、服务器、树莓派(64位系统)等设备上。托管者只发布64位版本:
- Linux命令行版:x86_64(amd64)、ARM64(aarch64)
- macOS命令行版:Intel、Apple Silicon
- Windows:x64、ARM64,各有命令行版和界面版
在托管者部署页面点击手动部署托管者,按系统下载对应的托管者程序并解压,可执行文件robot即托管者程序。同一页面还显示部署需要的两项信息:

- 通信地址:包含账号UID,形如
node.fmz.com/123456。 - 密码:UID对应的发明者量化交易平台账号的密码。
Windows界面版
运行robot.exe,在界面上填写通信地址和密码,点击启动。
命令行版
bash
chmod +x robot # Linux/macOS 首次运行前加上执行权限
./robot -s node.fmz.com/123456 # 启动后提示输入密码,输入时不回显
123456只是示例,实际的通信地址在托管者部署页面查看。不要用-p在命令行里写明文密码,它会留在shell历史和进程列表里;需要无人值守启动时,把地址和密码写进只有自己可读的配置文件robot.conf:
bash
cat > robot.conf <<'EOF'
s=node.fmz.com/123456
p=你的密码
EOF
chmod 600 robot.conf
./robot -c robot.conf # 启动目录下有robot.conf时,直接 ./robot 也会自动加载
全部参数和配置文件格式见命令行参数。
在后台运行
托管者忽略终端挂断信号:在SSH里前台启动后直接断开连接,托管者会继续运行,运行日志同时写在logs/docker.log。需要开机自启或崩溃后自动拉起时,可以用systemd等服务管理器运行,例如/etc/systemd/system/robot.service:
ini
[Unit]
Description=FMZ robot
After=network-online.target
Wants=network-online.target
[Service]
WorkingDirectory=/opt/robot
ExecStart=/opt/robot/robot -c /opt/robot/robot.conf
Restart=on-failure
TimeoutStopSec=90
[Install]
WantedBy=multi-user.target
bash
sudo systemctl daemon-reload
sudo systemctl enable --now robot
systemctl stop robot发送的SIGTERM会让托管者优雅退出:先停止其上的所有实盘、上报状态,再从平台下线。TimeoutStopSec留出足够的时间,避免收尾未完成就被强制结束。
**升级托管者**
策略运行时和交易所连接器由平台按需下发,不需要手动更新。升级托管者程序本身:先停止托管者(见托管者操作注意事项),用新版本替换robot可执行文件,再在同一工作目录启动。工作目录下的logs目录保留了托管者身份和实盘数据,启动后沿用原来的托管者ID。
**用Docker容器隔离策略进程**
Linux和macOS的命令行版可以用-i参数让每个策略进程运行在独立的Docker容器里(需要本机已安装并运行Docker)。这是策略进程的隔离方式,不是托管者本身的Docker镜像,参数见命令行参数。
托管者操作注意事项
先停实盘,再停托管者
删除托管者或停止托管者进程前,先确认它上面没有运行中的实盘。
正常停止托管者
- 命令行版:在终端按一次
Ctrl+C,或向进程发送SIGTERM(kill <PID>、systemctl stop)。 - Windows界面版:点击界面上的停止按钮。
托管者收到停止指令后会优雅退出:先停止其上的所有实盘、上报最终状态,再从平台下线。收尾期间再按一次Ctrl+C会跳过状态上报和下线,直接退出,一般不要这样做。
避免强制结束
不要用kill -9结束托管者进程,也不要直接断电或强制关机。这样托管者来不及下线,平台上的实盘可能仍显示为运行中并继续计费;出现这种情况,需要先删除已离线的托管者,才能停止这些实盘。重启服务器前先停止托管者;用systemd等服务管理器运行时,系统关机会自动发送SIGTERM。
命令行参数
命令行版托管者程序robot的启动方式:
bash
./robot -s node.fmz.com/123456 # 启动后交互输入密码(不回显)
./robot node.fmz.com/123456 # 简写:robot 地址 [密码]
./robot -c robot.conf # 从配置文件读取参数
./robot -v # 查看版本
参数
| 参数 | 说明 |
|---|---|
-s 地址 | 与平台通信的地址,形如node.fmz.com/123456(123456为账号UID),可带ws://或wss://前缀。在托管者部署页面查看。 |
-p 密码 | 账号密码。不建议使用:明文密码会留在shell历史和进程列表中。不给时启动后交互输入,或写在配置文件里。 |
-n 名称 | 托管者名称,显示在平台的托管者页面上。 |
-w 目录 | 工作目录。logs(实盘数据、托管者日志、身份文件)都在这个目录下。 |
-c 文件 | 配置文件,格式见下文。 |
-u 用户 | 仅Linux/macOS:以该系统用户运行策略进程,托管者本身需要以root运行。使用-i时忽略。 |
-I IP | 指定本机出口IP,托管者与平台的连接以及策略访问交易所的连接都绑定这个地址,见下文。 |
-i 镜像 | 仅Linux/macOS:用该Docker镜像为每个策略进程创建独立容器运行,需要本机已安装并运行Docker。 |
-e 路径 | 配合-i:容器内的可执行文件路径。 |
-f JSON | 配合-i:Docker容器设置,可以直接写JSON,也可以写@文件路径从文件读取。 |
-H 地址 | 配合-i:容器回连宿主机的地址。 |
-vv | 输出详细日志(托管者与平台的交互消息等),默认不输出,以免日志膨胀。 |
-d DNS | 旧版的自定义DNS参数,仍可接受但会被忽略,托管者一律使用系统的DNS解析。 |
-v、-V、--version | 打印版本和编译信息后退出。 |
-h、--help | 打印用法。 |
--ctl-stdin | 从标准输入读取控制指令(没有-p时第一行为密码),收到stop或输入结束时优雅退出。供把托管者封装成服务的程序使用。 |
取值型参数也可以写成-参数=值,例如-n=server01。参数写错时打印用法并退出。
配置文件 robot.conf
每行一个键=值,键是参数名去掉-(s p n w u I d i e f H vv),#开头的行是注释:
ini
# robot.conf
s=node.fmz.com/123456
p=你的密码
n=server01
vv=true
- 用
-c指定配置文件;没有-c也没有给出通信地址时,如果启动目录下有robot.conf,会自动加载。 - 同一项命令行和配置文件都给了时,以命令行为准。
- 键区分大小写:
I是出口IP,i是Docker镜像。 - 配置文件路径和
-f @文件都相对启动目录解析(在-w切换目录之前)。 - 配置文件里有密码,记得设置只有自己可读(
chmod 600 robot.conf)。
指定出口IP(-I)
服务器有多个IP地址,而交易所API KEY绑定了其中某个IP的白名单时,用-I指定出口IP,例如./robot -s node.fmz.com/123456 -I 192.168.1.100。指定后托管者与平台的连接、策略访问交易所的连接都从该地址发出。使用-i容器隔离时,容器的网络里可能没有这个地址,此时需要让容器使用宿主机网络。
Windows界面版没有IP设置,需要指定出口IP时请使用命令行版。界面版只接受-s、-p、-n三个启动参数,用于预填界面,同时给出-s和-p时自动启动。
实盘数据迁移
每个实盘的数据都在托管者工作目录下的logs/storage/<实盘ID>/目录里(数据库<实盘ID>.db3、stdout.log、stderr.log等)。平台显示的实盘日志、收益、图表都是从运行该实盘的托管者上读取的。
把单个实盘迁移到另一台机器的托管者
- 停止该实盘。
- 把整个
logs/storage/<实盘ID>/目录复制到新托管者工作目录下的相同位置,目录名保持为实盘ID。 - 在实盘配置中把托管者改为新托管者,再启动实盘。
这样实盘原有的日志、收益等数据不会因为换了机器而丢失。
整体迁移托管者
- 停止旧托管者上的实盘,再停止旧托管者。
- 把旧托管者工作目录下的整个
logs目录复制到新机器的工作目录。 - 在新机器上启动托管者。
logs/docker.pid保存了托管者的身份,旧托管者已离线时,新机器上的托管者会沿用原来的托管者ID,实盘配置无需修改。不要让两台机器同时使用同一份logs目录运行托管者。
托管者监控
在托管者管理页面,托管者列表或托管者详情的操作项中可以开启托管者监控。开启后,托管者异常离线时,平台会向账号绑定的邮箱发送通知。