DevelStudio介绍
DevelStudio
是一个整合了策略研发工具PyThunder
,以及策略开发相关的常见Python/C++库、网页版IDE、网页版策略仿真平台的集成开发环境
PyThunder
:基于Python的策略仿真工具箱,可以对自定义的Native策略
或Remote策略
进行历史数据仿真验证。它提供一系列的原语接口
,您可以根据实际情况构建仿真流程。ThirdPart Libraries
:DevelStudio
已经集成了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
,同样需要注意该目录必须是完整路径,使用相对路径会导致容器启动失败。
-p
参数分别将这两个端口映射到了容器外部的真实端口。同样,-v
参数实现了容易内外目录的映射。您可以通过访问Docker官方文档来了解更多内容。
--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:8080
和http://127.0.0.1:8081
打开了VSCode
和Juputer
,并且通过/cpp_project_a_map
可以访问宿主机的/home/user_a/cpp_project_a
目录。
DevelStudio使用引导
使用VSCode网页版进行开发
您可以通过浏览器打开http://${Your id address}:${Your VSCode Port}
来访问网页版本IDE进行策略、插件的开发与调试。比如在上面的例子中,打开http://127.0.0.1:8080
即可看到IDE的登录界面。
默认系统密码是thunderpass
,登录后可看到IDE的工作区界面。
您可以在容器启动命令最后添加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价格曲线。
对策略进行仿真交易
#!/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