# 开发与调试功能概述

客户在本地客户端完成对服务端功夫策略的远程开发、断点调试,有效提高策略调试工作的效率。

  1. 支持在内置的SmartX Studio中完成查看和修改策略内容、快速启停调试任务、更新保存策略文件等相关操作。
  2. Kungfu策略可以使用 python 或者 C++编程语言任意一种。两种语言的策略调试在插件安装和调试过程中有些区别,具体可以查看视频讲解。

# 视频讲解

跟随调试视频内容了解C++和python功夫开发与调试的相关操作。

# 一、调试前的准备工作

  1. C++和python调试所需的插件(按需要安装)

  2. 在SmartX远程调试窗口中,打开一个新的终端,输入以下命令:

调试1

  • 安装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程序上传的策略文件。

调试2

# 远程调试

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

调试3

# 三、C++策略远程调试

# 策略上传

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

调试3

# 远程调试任务

点击远程调试按钮,进入SmartX Studio。从终端菜单中,找到run task 运行任务并点击,根据需要选择以下四个调试相关任务。

  • 任务一Compile Debug & Start Strategy是编译调试和启动策略,在初次打开或策略文件发生修改的情况下,必须要使用任务一重新编译。
  • 任务二Start Strategy是启动策略。用于策略无改动的重新启动。
  • 任务三Stop Strategy是停止策略,对应断开调试的操作。
  • 任务四Compile Release & Start Strategy是编译发布版的策略,不涉及到调试内容,通常用于实盘运行。

调试4

# 附加进程

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

调试5

  • 完成上述操作后,即可正常进行功夫服务端C++策略的断点调试工作。详细操作可查看视频讲解。

# 四、C++策略本地编译

下面介绍 C++语言开发策略的本地编译步骤:

  1. 在宿主机的/home/目录下创建 cust_strategy 目录,若目录已经存在则删除该目录不相关的文件。

  2. 将宿主机目录/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 ----
  1. 使用 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.sh
    
    1
    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格式

  2. 样例策略编译没问题后,就可以修改自定义策略 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
  3. 验证策略样例运行情况,将宿主机/home/cust_strategy/build/ 目录下编译好的策略文件 cpp_demo.cpython-37m-x86_64-linux-gnu.so ,通过 smart 客户端创建策略时上传,在界面右下角先启动交易进程再启动行情进程,最后启动刚创建的策略,检查是否可以正常查看日志内容,有没有收到委托订单和成交信息。

  4. 通过以上步骤验证编译环境和样例策略没问题后,参考本文提供的策略接口说明,再根据自己业务场景在宿主机/home/cust_strategy 目录下修改策略逻辑,也可以在 docker 容器的/opt/kungfu/cust_strategy 目录下修改策略逻辑。但是必须在 docker 容器内进行编译

  5. 如果要修改策略项目名称,只需要在 docker 容器内修改/opt/kungfu/cust_strategy/CMakeLists.txt 文件内容的 PROJECT(cpp_demo)中的 cpp_demo 修改自己的项目名称,删掉同目录下的 build 文件夹后,重新 ./mk.sh

  6. 必须在 CMakeLists.txt 文件所在目录下,执行 ./mk.sh

# 五、下载远程策略到本地

当远程开发调试完成策略以后,若需从服务端将策略下载到客户本地。既可以直接复制编辑器内容,也可以按图片功能下载。 调试6