本小结内容将带您快速体验基于ThunderTrader进行策略开发编译、仿真验证、实盘交易的完整生命周期。
- 首先会引导您完成
DataCenter的部署,录制策略仿真所需要的历史行情数据 - 您将会在
DevelStudio环境中完成Strategy101策略的编译,包括C++版本以及Python版本 - 编译好的策略会在
DevelStudio进行历史数据仿真,生成相关的指标以及报表 - 您将会部署
Engine并配置您的实盘账号,完成程序化交易
Strategy101是一个专为教学而开发的示例策略,其中包含了绝大部分平台功能的使用示例,您甚至可以基于Strategy101策略来构建自己的交易策略。
本小结仅对常见功能作简短介绍,更加详细的使用方法可查看各模块对应的使用手册。
录制行情数据
使用DataCenter录制足够多的真实行情数据,便于我们对策略进行仿真验证。
首先需要下载并安装DataCenter组件。进入DataCenter下载页面下载最新的镜像并载入,这里以1.81版本为例。
$ wget "http://images.thunder-trader.com/1.81/datacenter.1.81.docker.tar.gz"
$ sudo docker load < datacenter.1.81.docker.tar.gz
在磁盘上新建一个文件夹,用来存储录制的行情数据。
$ mkdir /home/tick-data
启动DataCenter并监听90端口,同时将我们刚才新建的/home/tick-data目录映射到容器内部,DataCenter将会把录制完成的行情数据保存到该目录。
$ sudo docker run --privileged -d -p 90:80 -v /home/tick-data:/thunder-ticks thundertrader/datacenter:1.81
在浏览器中打开DataCenter的控制面板(http://127.0.0.1:90),在License选项卡中,将License复制到编辑框,并点击下方SUBMIT按钮,完成License配置。

我们需要添加一个或者多个数据录制插件实例,这是负责对接交易所接收行情数据的组件,这里我们以CTP期货接口为例,您需要事先按照经纪公司的流程申请SDK账号。

在Dashboard选项卡中查看录制的行情数据的吞吐量,曲线数值代表每分钟DataCenter收集到的Tick数量,可以辅助您判断系统工作是否符合预期。

您也可以打开/home/tick-data目录,或者在浏览器中打开http://127.0.0.1:90/thunder-ticks进一步验证行情数据录制情况。
到此为止,我们已经成功部署DataCenter,它的地址是http://127.0.0.1:90,在下面的小结中我们会用到这个地址。
DataCenter中的所有Producer插件实例被设计为开盘自动启动,收盘自动关闭,为7x24小时无人值守,通常不需要人为干预。
编译Strategy101策略
Strategy101的源代码伴随DevelStudio一起发布,进入DevelStudio下载页面,下载DevelStudio最新的镜像并载入,这里以1.81版本为例。
$ wget "http://images.thunder-trader.com/1.81/develstudio.1.81.docker.tar.gz"
$ sudo docker load < develstudio.1.81.docker.tar.gz
在91端口启动DevelStudio
$ sudo docker run --privileged -d -p 91:80 thundertrader/develstudio:1.81
您可以在浏览器中访问http://127.0.0.1:91使用网页版本VSCode或者Jupyter notebook。

Native版本
点击左侧Cloud IDE进入VSCode。并且打开/strategy101目录,我们可以看到策略的源代码文件:
strategy.h:策略头文件strategy.cpp:策略实现文件CMakeLists.txt:cmake项目文件

通过执行如下命令,调用编译器进行策略编译。
$ cd /strategy101
$ mkdir build
$ cd build
$ cmake ..
$ make -j2
在build目录下,您会看到生成的策略文件strategy_strategy101.so,我们将该文件拷贝到共享目录/workspace中实现文件下载,并上传到engine进行实盘交易。
Python版本
Python版本策略采用无需编译即可运行。可以在VSCode或Jupyter中新建Terminal,执行下面shell命令即可启动教学策略:
$ cd /strategy101
$ launch_strategy.sh pystrategydft.py
历史数据仿真
点击右侧Research Notebook进入Jupyter notebook。

新建一个NoteBook,并执行如下代码:
#!/usr/bin/python
# -*- coding: <encoding name> -*-
import pythunder.simulator as sim
tick_config = (["sfit.future.ag2602", "sfit.future.ag2603"], ("20251224", "20251224"))
# For C++ implemented strategy
simulator = sim.Simulator("/strategy101/build/strategy_strategy101.so", tick_config, "http://192.168.3.44:90")
# For Python implemented strategy
#simulator = sim.Simulator(("127.0.0.1", "1001", ""), tick_config, "http://192.168.3.44:90")
result = simulator.simulate()
res.show_metric({"size":(40, 15), "dpi": 200})
可以看到我们生成的策略Metrics

部署策略进行实盘交易
进入Engine下载页面,下载Engine最新的镜像并载入。
$ wget "http://images.thunder-trader.com/1.81/engine.1.81.docker.tar.gz"
$ sudo docker load < engine.1.81.docker.tar.gz
通过下面命令启动Engine进程容器,将会在92端口打开Engine控制面板。
$ sudo docker run --privileged -d -p 92:80 thundertrader/engine:1.81
在浏览器中访问http://127.0.0.1:92,进入Engine控制面板。
thunderpass
在License页面中设置License,并在Source/Deploy Source选项卡中,添加至少一个交易源和一个行情源。

在Upload/Upload native strategy页面中,上传您刚才编译好的strategy_strategy101.so策略文件上传到Engine容器中(容器已经内置该策略,此处可以略过)。

在Strategy卡片中选择您希望部署的策略文件,并且在Parameter configuration卡片中对策略的参数进行必要的设置。根据策略的输入,在Channel configuration卡片中配置一个或多个Slot。
交易源发送到交易所。合约的名称必须全局唯一,例如CTP期货合约IF2501的名称为sfit.future.IF2501。
在Other configuration卡片中,您可以为策略配置自定义名称。当相关配置完成后,点击Submit即可完成Native策略部署。
同样,您可以在部署一个由python编写的策略。

切换到Strategy/View strategies选项卡中,您可以查看当前系统中正在执行的策略,包括查看每个策略的部署时间、实时盈亏。

同时,我们可以对策略的交易授权进行调整,独立控制每个策略的开仓、平今以及平昨开关。您可以通过Operator菜单删除策略;或者下载当前策略的配置,这样下次您可以直接在Command选项卡中通过该配置文件实现策略快速部署。
点击Show Metrics可以打开单个策略的监控面板。其中包括自定义指标实时监控、系统/策略/交易日志、以及人工干预窗口。

可以通过Grafana组件查看策略运行的性能指标。

日志是监控策略运行是否符合预期的重要途径。Engine分别提供了系统日志、策略日志以及交易日志的实施推送。
