输入/搜索内容
入门
欢迎使用发明者量化交易平台
快速开始
密钥安全性
平台基础
账号与计费
实盘计费与充值
子账号
交易所
通用协议
本地凭据文件
交易所特殊说明
证券与期货
加密货币
托管者
策略库
实盘
编写策略
开发工具
回测系统
进阶专题
数据与研究
对外接口

托管者是运行策略的程序:实盘策略运行在托管者上,而不是运行在发明者量化交易平台网站上。托管者负责与平台通信、启动和停止策略进程、回传日志;策略访问交易所的网络请求也都从托管者所在的机器发出。托管者运行在你自己的服务器(或一键租用的服务器)上,平台网站出现网络故障也不影响托管者上正在运行的实盘。

支持的系统
托管者只发布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即托管者程序。同一页面还显示部署需要的两项信息:

手动部署托管者页面

  1. 通信地址:包含账号UID,形如node.fmz.com/123456。
  2. 密码: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等)。平台显示的实盘日志、收益、图表都是从运行该实盘的托管者上读取的。

把单个实盘迁移到另一台机器的托管者

  1. 停止该实盘。
  2. 把整个logs/storage/<实盘ID>/目录复制到新托管者工作目录下的相同位置,目录名保持为实盘ID。
  3. 在实盘配置中把托管者改为新托管者,再启动实盘。

这样实盘原有的日志、收益等数据不会因为换了机器而丢失。

整体迁移托管者

  1. 停止旧托管者上的实盘,再停止旧托管者。
  2. 把旧托管者工作目录下的整个logs目录复制到新机器的工作目录。
  3. 在新机器上启动托管者。

logs/docker.pid保存了托管者的身份,旧托管者已离线时,新机器上的托管者会沿用原来的托管者ID,实盘配置无需修改。不要让两台机器同时使用同一份logs目录运行托管者。

在托管者管理页面,托管者列表或托管者详情的操作项中可以开启托管者监控。开启后,托管者异常离线时,平台会向账号绑定的邮箱发送通知。