# 开发与调试功能概述
客户在本地客户端完成对服务端功夫策略的远程开发、断点调试,有效提高策略调试工作的效率。
- 支持在内置的SmartX Studio中完成查看和修改策略内容、快速启停调试任务、更新保存策略文件等相关操作。
- Kungfu策略可以使用 python 或者 C++编程语言任意一种。两种语言的策略调试在插件安装和调试过程中有些区别,具体可以查看视频讲解。
# 视频讲解
跟随调试视频内容了解C++和python功夫开发与调试的相关操作。
# 一、调试前的准备工作
C++和python调试所需的插件(按需要安装)
在SmartX远程调试窗口中,打开一个新的终端,输入以下命令:

- 安装Python调试组件: /opt/kungfu/code_server/bin/code-server.sh --install-extension /root/.local/share/code_server_extensionRepo/ms-python.python-2022.18.2.vsix
- 安装C++调试组件: /opt/kungfu/code_server/bin/code-server.sh --install-extension /root/.local/share/code_server_extensionRepo/codelldb-x86_64-linux.vsix
# 二、Python策略远程调试
# 策略上传
首先将Python程序及可能相关的配置文件放置到单独的文件夹中,然后进入功夫模块中,点击添加按钮,输入策略ID,选中策略入口python程序上传的策略文件。

# 远程调试
点击远程调试按钮启动策略进程,在SmartX Studio中设置断点,执行调试工作,如有代码修改,可实时同步保存,详细操作可查看视频讲解。

# 三、C++策略远程调试
# 策略上传
进入功夫模块中,点击添加按钮,输入策略ID,上传.so类型的动态库文件(在策略模板中提供,此处so文件是临时文件,上传到系统后需重新编译,此文件就会被重新覆盖)。上传的策略文件夹内容可参考下载SmartX提供模板文件的目录结构(如下图所示),策略模板可点此下载。在您进行策略逻辑编写时,只需要修改src文件夹中的cpp文件,其他直接使用模板文件即可(注意不要修改文件命名)。

# 远程调试任务
点击远程调试按钮,进入SmartX Studio。从终端菜单中,找到run task 运行任务并点击,根据需要选择以下四个调试相关任务。
- 任务一Compile Debug & Start Strategy是编译调试和启动策略,在初次打开或策略文件发生修改的情况下,必须要使用任务一重新编译。
- 任务二Start Strategy是启动策略。用于策略无改动的重新启动。
- 任务三Stop Strategy是停止策略,对应断开调试的操作。
- 任务四Compile Release & Start Strategy是编译发布版的策略,不涉及到调试内容,通常用于实盘运行。

# 附加进程
附加调试时,需要选择对应的进程号,可以按照策略名称(上传策略时,输入的策略ID)进行搜索匹配。在搜索结果中,选择进程号最大那个进程完成附加进程的操作。

- 完成上述操作后,即可正常进行功夫服务端C++策略的断点调试工作。详细操作可查看视频讲解。
# 四、C++策略本地编译
下面介绍 C++语言开发策略的本地编译步骤:
在宿主机的
/home/目录下创建cust_strategy目录,若目录已经存在则删除该目录不相关的文件。将宿主机目录
/home/cust_strategy,映射到 docker 内部/opt/kungfu/cust_strategy目录,并启动 docker 容器。比如最新版本启动编译镜像:
docker run --name compile_cplus -v /home/cust_strategy:/opt/kungfu/cust_strategy --privileged --ulimit memlock=-1 --net=host --init=true -d registry.cn-hangzhou.aliyuncs.com/xtp_smartx/kungfu_compile_cplus:latest;1其他版本仅需要将命令中镜像地址
registry.cn-hangzhou.aliyuncs.com/xtp_smartx/kungfu_compile_cplus:latest替换成下面的版本对照表中相应的镜像地址就可以了。
# 版本对应表:
| 版本号 | 镜像 ID | 下载地址 | 备注 |
|---|---|---|---|
| 2.1.5 | 953f361718c7 | registry.cn-hangzhou.aliyuncs.com/xtp_smartx/kungfu_compile_cplus:2.1.5 | ---- |
| 2.1.6 | 815895c85fd4 | registry.cn-hangzhou.aliyuncs.com/xtp_smartx/kungfu_compile_cplus:2.1.6 | ---- |
| 2.1.7 | 8675110e6406 | registry.cn-hangzhou.aliyuncs.com/xtp_smartx/kungfu_compile_cplus:2.1.7 | 最新 |
| 生产 | 8675110e6406 | registry.cn-hangzhou.aliyuncs.com/xtp_smartx/kungfu_compile_cplus:latest | ---- |
使用
docker ps找到新启动的 docker 容器 ID,使用命令docker exec -it $ID bash,进入到 docker 内部。将
/opt/kungfu/examples目录下的所有文件和目录全部拷贝到/opt/kungfu/cust_strategy目录下。进入
/opt/kungfu/cust_strategy目录编译工程。## 在docker 外部执行 ↓↓↓↓ docker ps ## 找到新启动的 docker 容器 ID docker exec -it $ID bash ## 在docker 外部执行 ↑↑↑↑ ## 在docker内部执行 ↓↓↓↓ cp -r /opt/kungfu/examples/* /opt/kungfu/cust_strategy/ cd /opt/kungfu/cust_strategy ./mk.sh1
2
3
4
5
6
7
8
9
10
11
12备注:若运行mk.sh文件时,报'bash: ./mk.sh: /usr/bin/sh^M: bad interpreter: No such file or directory'错误,原因是该文件格式错误,需手动将该文件改成linux格式
样例策略编译没问题后,就可以修改自定义策略
cust_strategy/src/demo_strategy.cpp文件中XTP 账号ACCOUNT_ID为自己的账号,再重新编译策略。参考命令如下:
cd /opt/kungfu/cust_strategy ## 修改 src/demo_strategy.cpp 中的 ACCOUNT_ID ./mk.sh exit ## 最后退出 docker 容器1
2
3
4
5
6
7验证策略样例运行情况,将宿主机
/home/cust_strategy/build/目录下编译好的策略文件cpp_demo.cpython-37m-x86_64-linux-gnu.so,通过 smart 客户端创建策略时上传,在界面右下角先启动交易进程再启动行情进程,最后启动刚创建的策略,检查是否可以正常查看日志内容,有没有收到委托订单和成交信息。通过以上步骤验证编译环境和样例策略没问题后,参考本文提供的策略接口说明,再根据自己业务场景在宿主机
/home/cust_strategy目录下修改策略逻辑,也可以在 docker 容器的/opt/kungfu/cust_strategy目录下修改策略逻辑。但是必须在 docker 容器内进行编译。如果要修改策略项目名称,只需要在 docker 容器内修改
/opt/kungfu/cust_strategy/CMakeLists.txt文件内容的 PROJECT(cpp_demo)中的 cpp_demo 修改自己的项目名称,删掉同目录下的 build 文件夹后,重新./mk.sh。必须在
CMakeLists.txt文件所在目录下,执行./mk.sh。
# 五、下载远程策略到本地
当远程开发调试完成策略以后,若需从服务端将策略下载到客户本地。既可以直接复制编辑器内容,也可以按图片功能下载。
