DevelStudio使用指南

本章将为您介绍如何基于DevelStudio进行策略和插件的开发以及策略仿真

Previous page Next page

DevelStudio介绍

DevelStudio是一个整合了策略研发工具PyThunder,以及策略开发相关的常见Python/C++库、网页版IDE、网页版策略仿真平台的集成开发环境

  • PyThunder:基于Python的策略仿真工具箱,可以对自定义的Native策略Remote策略进行历史数据仿真验证。它提供一系列的原语接口,您可以根据实际情况构建仿真流程。
  • ThirdPart LibrariesDevelStudio已经集成了matplotlib、pandas等常见科学计算和图标绘制第三方库
  • VSCode:网页版集成开发环境,您可以在任何地方使用任何设备随时登录进行开发
  • Jupyter:交互式Python开发环境,便于创建和共享程序文档,支持实时代码,数学方程,可视化和 Markdown。 方便您进行Tick数据清理和转换,数值模拟,统计建模,策略仿真等

环境准备

DevelStudio可以运行在任何Linux发行版中,通过Docker进行部署,需要安装并启动Docker。 这里我们以Ubuntu为例:

$ sudo apt-get install docker.io
$ sudo systemctl start docker

然后我们进入DevelStudio下载页面,下载DevelStudio最新的镜像并载入。

wget "http://images.thunder-trader.com/1.81/develstudio.1.81.docker.tar.gz"
$ sudo docker load < develstudio.1.81.tar.gz

通过docker images命令查看您当前所有的镜像,列表中存在thundertrader/develstudio并且为预期的版本,则代表镜像安装成功

$ sudo docker images
REPOSITORY                 TAG       IMAGE ID       CREATED        SIZE
thundertrader/develstudio  1.81      159d9c446ae2   24 hours ago   470MB

启动DevelStudio

我们通过下述命令启动DevelStudio容器:

$ sudo docker --privileged -d run -p ${Your VSCode Port}:80 -p ${Your Jupyter Port}:81 -v ${Your Project directory}:${Project directory in docker container} thundertrader/develstudio:1.81

上述命令中涉及到的参数:

  • --privileged:开启管理员模式
  • ${Your VSCode Port}:您登陆VSCode的端口,可以是任意可用的自定义端口,例如8080。当您在浏览器中登陆VSCode时需要使用该端口,例如http://127.0.0.1:8080
  • ${Your Jupyter Port}:您登陆Jupyter的端口,可以是任意可用的自定义端口,例如8181/当您在浏览器中登陆Juputer时需要使用该端口,例如http://127.0.0.1:8081
  • ${Your Project directory}:您的项目空间,可以是您磁盘上的任何一个目录,上述命令会将该目录映射到Docker容易内部的${Project directory in docker container}。注意该目录必须是完整的Linux路径,例如/home/user_a/cpp_project_a,使用相对路径会导致容器启动失败。
  • ${Project directory in docker container}:您的项目目录被映射到容器中的该目录。您可以登录VSCode后通过该目录访问您的项目文件,可以是任意完整的Linux路径,比如/cpp_project_a_map,同样需要注意该目录必须是完整路径,使用相对路径会导致容器启动失败。
如果您对Docker比较熟悉,那将会很容易理解上述命令以及参数的含义。DevelStudio内部分别在80和81端口绑定了VSCode和Jupyter,您通过-p参数分别将这两个端口映射到了容器外部的真实端口。同样,-v参数实现了容易内外目录的映射。您可以通过访问Docker官方文档来了解更多内容。
DataCenter启动参数--privileged虽然是可选的,但是它对我们为您提供充分的售后服务和技术支持非常重要,建议您打开该参数从而使DataCenter获取管理员权限。DataCenter需要对/proc/sys/kernel/core_pattern文件进行必要的修正,从而当DataCenter发生故障时,coredump文件中的栈帧诊断信息可以被正确保存并上报给我们。当然如果您对此比较熟悉,也可以打开/thunder-crash目录进行自助故障排查。

上述命令中,您可以选择只打开VSCode端口,或者只打开Jupyter端口,亦或全部打开,这取决于您的使用场景。同样,您可以使用多个-v参数将您多个磁盘目录映射到Docker容器中,这样访问会更加便捷。

这里给出一个完整的例子:

$ sudo docker -d run -p 8080:80 -p 8181:81 -v /home/user_a/cpp_project_a:/cpp_project_a_map thundertrader/develstudio:1.81

通过上述的命令,您启动的DevelStudio容器分别在http://127.0.0.1:8080http://127.0.0.1:8081打开了VSCodeJuputer,并且通过/cpp_project_a_map可以访问宿主机的/home/user_a/cpp_project_a目录。

如果您完成了上述操作但是仍然无法登录VSCode或者Jupyter,可能是因为您的Linux服务器有存在防火墙安全配置阻止了您的访问请求。您可以在Q&A环节查看如何解除防火墙限制。

DevelStudio使用引导

使用VSCode网页版进行开发

您可以通过浏览器打开http://${Your id address}:${Your VSCode Port}来访问网页版本IDE进行策略、插件的开发与调试。比如在上面的例子中,打开http://127.0.0.1:8080即可看到IDE的登录界面。

默认系统密码是thunderpass,登录后可看到IDE的工作区界面。

../develstudio-vscode.png

如何修改默认的登录密码:
您可以在容器启动命令最后添加IDE登录密码,实现重新设置默认密码的目的,例如 sudo docker -d run -p 8080:80 -p 8181:81 -v /home/user_a/cpp_project_a:/cpp_project_a_map thundertrader/develstudio:1.81 mynewpassword 其中`mynewpasswrod`就是您的新密码。

我们在DevelStudo默认内置了thunder-devel开发接口定义以及一个示例策略strategy101:

  • /thunder-devel: ThunderTrader开发接口
  • /strategy101: 一个示例策略的实现

这里以strategy101策略为例展示如何编译策略:

cd /strategy101
mkdir build
cd build
cmake ..
make -j2

如果上述命令全部都成功执行,您可以在build目录下看到编译好的策略strategy_strategy101.so

使用Jupyter进行交互式科学计算

您可以通过浏览器打开http://${Your id address}:${Your Jupyter Port}来访问Jupyter进行科学计算与策略仿真。比如在上面的例子中,打开http://127.0.0.1:8081即可看到jupyter操作界面。 我们可以通过File/New/Notebook新建工作区。

载入并查看历史行情数据

#!/usr/bin/python
# -*- coding: <encoding name> -*-

import pythunder.tickutils as ptu
import matplotlib.pyplot as plt

ticks = ptu.load_from_data_center("sfit.future.ag2502", "20241201", "20241215", "http://192.168.3.44:90")
plt.plot([t.last_price for t in ticks])

上述代码我们从数据中心http://192.168.3.44:90加载合约sfit.future.ag2502从20241201到20241215的行情数据,并绘制last_price价格曲线。

../develstudio-tickplot.png

对策略进行仿真交易

#!/usr/bin/python
# -*- coding: <encoding name> -*-
import pythunder.simulator as sim

simulator=sim.Simulator("/strategy101/build/strategy_strategy101.so", (["sfit.future.ag2501","sfit.future.ag2502"], ("20241201","20241215")), "http://192.168.3.44:90")
result = simulator.simulate()
result.show_metric({"size":(20,10), "dpi":100})

可以看到我们生成的策略Metrics

../develstudio-strategy-metric-plot.png

PyThunder使用指南