GithubHelp home page GithubHelp logo

wondertrader / wtpy Goto Github PK

View Code? Open in Web Editor NEW
738.0 25.0 215.0 832.34 MB

wtpy是基于wondertrader为底层的针对python的子框架

License: MIT License

Python 92.61% HTML 0.21% Batchfile 0.01% CSS 7.17%
python quant trading fintech wondertrader hft

wtpy's Introduction

WonderTrader2.png

wtpy

这是WonderTrader针对Python3适配的子框架

wtpy子框架简介

  • apps子模块
    • WtBtAnalyst.py 回测分析模块,主要是利用回测生成的数据,计算各项回测指标,并输出到excel文件
    • WtCtaOptimizer CTA优化器,主要是利用multiprocessing并行回测,并统计各项交易指标,最后将统计结果汇总输出到csv文件
    • WtHotPicker 国内期货换月规则辅助模块,支持从交易所网站页面爬取数据确定换月规则,也支持解析datakit每日收盘生成的snapshot.csv来确定换月规则
  • wrapper子模块

    该模块主要包含了所有和C++底层对接的接口模块

    • ContractLoader.py 主要用于通过CTP等接口加载基础的commodities.jsoncontracts.json文件
    • WtBtWrapper.py 主要用于和回测引擎C++核心模块对接
    • WtDtWrapper.py 主要用于和数据组件C++核心模块对接
    • WtDtHelper.py 主要提供将用户自己的数据和WonderTrader内部数据格式进行转换的功能
    • WtDtServoApi.py 主要向用户提供直接通过python访问datakit落地的数据的接口
    • WtExecApi.py 主要用于和C++独立执行模块WtExecMon对接
    • WtWrapper.py 主要用于和实盘交易引擎C++核心模块对接
    • WtMQWrapper.py 主要提供直接使用底层WtMsgQue模块的对接
    • WtDtHelper.py 主要用于和底层的WtDtHelper数据辅助模块对接
  • monitor子模块

    该模块主要包含了内置的监控服务,提供了Httpwebsocket两种连接方式

    • DataMgr.py 主要用于读取并缓存组合数据
    • EventReceiver.py 主要用于在指定的udp端口接收组合转发的各种事件
    • PushSvr.py 主要用于向web提供websocket服务
    • WatchDog.py 主要用于自动调度服务端的进程
    • WtBtMon.py 主要进行回测的管理
    • WtMonSvr.py 监控服务核心服务模块 ,利用flask实现了一个http服务接口
    • static webui静态文件
  • 其他模块

    主要位于根节点下,包含了各个子模块的入口组件

    • WtCoreDefs.py 主要定义的Python版本的策略基类,方便用户重写
    • CodeHelper.py 品种代码辅助模块,内置了一些方法,方便使用
    • ContractMgr.py 合约管理器模块,用于加载contracts.jsonstocks.json文件,并提供查询方法
    • CtaContext.py 主要定义了CTA策略的上下文,可以理解为单策略的运行环境
    • HftContext.py 主要定义了HFT策略的上下文,可以理解为单策略的运行环境
    • SelContext.py 主要定义了SEL策略的上下文,可以理解为单策略的运行环境
    • ExtToolDefs.py 扩展模块定义文件,主要定义了一些扩展模块的基础接口
    • ProductMgr.py 品种管理器,主要用于Python环境中的合约属性、品种属性查询
    • SelContext.py 选股策略上下文,即选股策略直接交互的API
    • SessionMgr.py 交易时间模板管理器,主要用于Python环境中的交易时段模板管理
    • StrategyDefs.py 各引擎策略基础定义模块,定义了CTAHFTSEL三种策略基类
    • WtBtEngine.py 回测引擎转换模块,主要封装底层接口调用
    • WtDtEngine.py 数据引擎转换模块,主要封装底层接口调用
    • WtEngine.py 交易引擎转换模块,主要封装底层接口调用

如何让获取

延伸项目

相关资源


更新日志

0.9.9

  • C++底层更新到2023/11/27发布的v0.9.9版本
  • (重要)全面将原来的基于DequeueRecord的容器改成新的基于numpy内存直接构建ndarray的容器,数据读写性能很很大提升,目前估算下来差不多10倍左右
  • 合约信息增加了上市日期和下市日期的概念,可以在回测中读取当日可用合约(这个还需要维护大的合约列表)
  • 其他配合底层的优化和调整
  • 细节调增了bug修复

0.9.8

  • C++底层更新到2023/08/18发布的v0.9.8版本
  • WtMonSvr增加移动版入口
  • 控制台webui全新改版
  • 内置的数据下载模块wtpy.apps.datahelper新增对天勤数据tqsdk的支持
  • 优化了python部分调用底层日志接口时的编码处理机制,适配不同操作系统
  • WtMonSvr增加了一个token访问模式,主要用于一些跨域访问的场景
  • 完善了PushSvr中处理认证信息的细节
  • 其他配合底层的优化和调整

0.9.7

  • C++底层更新到2023/03/21发布的v0.9.7版本
  • 监控服务的DataMgr获取资金的接口增加了对一次性读取全部策略资金数据的机制
  • 控制台webui做了一些优化
  • 其他配合底层的优化和调整

0.9.6

  • C++底层更新到2022/12/19发布的v0.9.6版本
  • 配合底层调整了WtDtServo的一些接口
  • 完善了WtWrapper中和底层关于图表的接口对接
  • 调整了WtCtaOptimizer和WtBtEngine一些接口,便于在终端中调用
  • WtCtaOptimize新增了一个消息队列的支持,可以发布优化的进度等信息
  • 配合底层扩展接口,完善了对增量回测的支持
  • 控制台webui做了一些优化
  • 其他配合底层的优化和调整

0.9.5

0.9.4

0.9.3

  • C++底层更新到2022/07/14发布的v0.9.3版本
  • 其他配合底层的优化和调整
  • 绩效分析器去掉对matplotlib的依赖,改成利用excel生成图表
  • 配置文件解析的时候,增加一个编码判断的逻辑
  • WTSTickStruct的买卖队列改成了单项,而不用数组,这样在python中转dataframe的时候便于处理
  • 停用BarList和TickList,全部改成更高效的WtBarRecords和WtTickRecords
  • WtDtServo配合底层新增了一个get_ticks_by_date接口用于按交易日读取tick数据以及一个get_sbars_by_date接口用于按交易日读取秒线数据
  • WtDtServo配合底层新增了一个get_bars_by_date用于按交易日获取分钟线数据
  • WTSBarStruct的to_tuple方法进行了扩展
  • apps.datahelper新增一个dumpBars接口,将要落地的K线数据直接通过回调的方式传出来,方便灵活控制如何保存K线数据
  • WtBtEngine和WtEngine中初始化的时候,把默认的基础文件名改成None,并加入判断,可以兼容配置文件中的配置项
  • 新增一个TraderDumper,调用底层的TraderDumper模块,可以将交易接口的数据转接出来
  • monitor.DataMgr模块读取数据的时候加了一些兼容处理,减少web控制台报错
  • WtBtEngine和WtEngine增加了配置自定义连续合约规则的接口registerCustomRule
  • WtHotPicker的演示demo中增加米筐数据源的支持
  • 绩效分析做了一些优化,主要是把目录改成output目录,后面的策略子目录通过策略id自动生产,这样就不用多次输入了
  • 完善了WtCtaOptimizer的一些细节
  • 遗传算法优化器优化
  • webui控制台发布包做了一个更新,主要增加了一些分页机制,页面可以不用那么卡
  • webui新增一个独立页面backtest.html,该页面主要提供可视化回测查看和分析功能
  • monitor下新增一个WtBtSnooper模块,可以运行一个简单的回测结果提取服务
  • demo进一步完善
  • 更多修改日志请参考WonderTrader v0.9.3更新日志
  • 调试资源请查看https://gitee.com/wondertrader/wtpy_utils/raw/master/pdb_wtpy_v0.9.3.rar

0.9.2

0.9.0(重大版本)

  • C++底层更新到2022/03/14发布的v0.9.0版本
  • 重要)重构了底层数据结构WTSTickStruct和WTSBarStruct,wtpy做了同步修改
  • 重要)配置文件全面兼容yaml和json两种格式,并实现了一个WTSCfgLoader模块自动处理
  • 重要)底层实现了对7*24小时交易品种的支持
  • 重要)完善了监控服务,支持扩展异常事件通知接口
  • 新增一个WtCCLoader模块,用于从网络接口加载合约列表
  • 新增一个遗传算法参数优化模块WtCtaGAOptimizer
  • demo进一步完善
  • 其他配合底层的优化和调整
  • 更多修改日志请参考WonderTrader v0.9.0更新日志
  • 调试资源请查看https://gitee.com/wondertrader/wtpy_utils/raw/master/pdb_wtpy_v0.9.0.rar

0.8.0(大版本)

  • C++底层更新到2021/12/24发布的v0.8.0版本
  • 重要)实现了ExtDataLoder的机制,实盘和回测框架都可以通过应用层的扩展数据加载器加载历史数据(可参考demos/test_dataexts
  • 重要)实现了ExtDataDumper的机制,如果向datakit注册了ExtDataDumper,在收盘作业的时候,就会通过ExtDataDumper将实时数据转储(可参考demos/test_dataexts
  • 重要)配合C++底层完善了对T+1交易机制的支持
  • WatchDog模块做了调整,增加了对进程使用的内存的监控
  • 新增了一个高性能容器DequeRecord(By ZerounNet),用于python部分的缓存替换原来的WtKlinDataWtHftData,在数据缓存方面,大致可以提升5%~10%的性能
  • demos下新增一个cta_unit_test,作为一个基准测试demo,以后会逐步完善
  • 其他细节优化和bug修正

0.7.1

  • C++底层更新到2021/10/24发布的v0.7.1版本
  • 回测框架C++底层增加了单步控制机制,用于控制回测进度,主要为了配合强化学习框架的调用习惯
  • WtDtEngine支持扩展Parser的接入,可以参考/demos/datakit_fut/testExtParser.py
  • 其他配合底层的优化和调整

0.7.0

  • C++底层更新到2021/09/12发布的v0.7.0版本
  • 新增一个WtDataServo模块,分为两种实现方式, 一种是调用本地底层WtDtServo模块,直接访问数据文件,根据需要可开启web接口,另外一种是直接访问第一种实现方式提供的web接口拉取数据,详情可以参考/demos/test_dataservo
  • 优化了WtWrapperWtBtWrapper,将原来的global变量全部改成局部变量,可以提升运行效率
  • 通过singleton修饰器限定Wrapper为单例,和底层统一
  • 新增一个WtMsgQue模块,通过WtMQWrapper模块调用底层的WtMsgQue模块
  • EventReceiver模块改成调用WtMsgQue来实现,并按照回测和实盘框架分别实现EventReceiver
  • WatchDog启动和监控进程的机制进行了优化,不再使用threading挂载进程句柄的方式,而是利用cmdlineprocessid进行检查和监控,这样WtMonSvr重启之后,就可以重新根据命令行挂在已经在运行的进程
  • WtMonSvr新增回测管理模块WtBtMon,用于提供回测相关的接口服务
  • WtMonSvr完善了组合配置文件查询和修改的接口
  • WtMonSvr完善了组合风控过滤器filters.json的读取机制
  • WtMonSvr新增了用户修改密码和管理员重设用户密码的接口
  • PushSvr根据EventReceiver收到的数据,进行了适配,完善了消息推送的机制
  • WtBtAnalyst模块新增了run_simple接口,用于只进行最简单的每日资金分析,并将结果输出到summary.json文件
  • apps下新增了一个WtHotPicker.py模块,用于确定主力合约和次主力合约
  • 其他配合底层的优化和调整
  • webui剥离出来,单独发布到wtconsole仓库

0.6.5

  • C++底层更新到2021/07/19发布的v0.6.5版本
  • WtDtHelper新增一个resample_bars接口,用于将制定的dsb数据文件重新采样为其他周期的K线
  • SessionInfo新增一个toString对象,生成json格式的字符串
  • 暴力优化器CTAOptimizer支持设置多个回测时段
  • 完善了read_dsb_barsread_dsb_ticks接口,同时新增read_dmb_barsread_dmb_ticks接口调用WtDtHelper.dll的同名接口
  • Context新增一个is_backtest属性,用于判断是否在回测模式
  • 监控服务新增了查看组合文件结构、获取组合下文件内容以及修改组合下文件内容的接口
  • 完善了webui控制台针对风控员的权限控制
  • 完善了绩效分析模块的兼容性
  • webui完善
  • 其他代码级的优化和完善

0.6.4

  • C++底层更新到2021/05/24发布的v0.6.4版本
  • WtDtHelper中调用优化,去掉了global
  • 修正了一些底层接口调用时参数对应不上的问题
  • WtDtHelper新增了直接从python里向C++底层喂历史数据的接口trans_barstrans_ticks
  • 新增了一些demo
  • 针对C++底层进行适配:1、CTA增加一个stra_get_fund_data接口,2、回测引擎,支持设置slippage
  • WtEngine构造函数提供指定数据输出目录的genDir参数,以及日志配置文件的logCfg参数
  • 其他代码级的优化和完善

0.6.3

  • C++底层更新到2021/04/14发布的v0.6.3版本
  • 绩效分析工具WtBtAnalyst功能大幅度扩展

0.6.2

  • C++底层更新到2021/03/17发布的v0.6.2版本
  • 日志信息翻译成英文
  • webui的部分表格添加了排序和统计功能

0.6.1

  • C++底层更新到2021/02/26发布的v0.6.1版本
  • 统一封装了一个PlatformHelper模块,用于确定操作系统的各种信息
  • 将绝大部分的函数参数和返回值都增加了类型,方便调用的时候查看
  • 将K线容器类的成员变量做了修改,size->capacitycount->size,便于用户理解
  • WtDtHelper模块新增两个接口read_dsb_ticksread_dsb_bars,同步调用C++底层WtDtHelper模块的同名接口,用于直接读取dsb文件
  • CTA策略新增一个stra_get_last_exittime用于获取上一个出场信号
  • WtBeEngineWtCtaOptimizer两个模块都增加了对C++策略的支持
  • 回测框架增加对session开始和结束事件的响应接口
  • 监控服务:增加了查看和修改入口脚本的接口/qrygrpentry/cmtgrpentry
  • web-ui:去掉vue-json-viewer库,改用codemirror,用于展示和编辑代码
  • web-ui:控制台新增入口代码修改的组件,用于修改组合盘下的run.py入口文件
  • web-ui:优化了一些展示的细节
  • wtpy.apps下添加了一个datahelper子模块,该模块的主要作用就是将不同数据源的数据按照WonderTrader支持的格式保存起来

0.6.0

  • C++底层更新到2021/01/26发布的v0.6.0版本
  • CTA策略API新增一个stra_get_tdate,用于获取当前交易日
  • CTA策略APISEL策略API各新增一个stra_get_all_position,用于获取全部的持仓数据
  • 完善了WtBtWrapper模块中对tick数据的处理
  • 完善了数据辅助模块WtDtHelper
  • 完善了跟C++底层新增的HFT接口的对接
  • 初步完成了跟C++底层新增的股票Level2数据访问接口的对接
  • WtDataDefs模块中的WtTickData改成WtHftData,作为高频数据的通用容器

0.5.4.1

  • WatchDog模块中修改了一周星期的序列,因为Python从周一到周天标记为0-6,而WonderTrader采用周天到周六为0-6

0.5.4

  • C++底层更新到2020/12/25发布的v0.5.4版本
  • C++底层接口针对传递配置文件内容的支持做了修改,同步修改了wtpy中的部分关联代码
  • 修正了监控服务中的WatchDog模块在linux下的启动参数的bug,解决了linux下无法启动的问题
  • 修正了监控服务的自动调度任务没有检查是否启用标记,从而导致重复启动的bug
  • 修改了监控服务的WebUI的一些展示细节
  • wrapper下新增一个WtDtHelper模块,用于对接C++底层的WtDtHelper模块,给python调用处理数据转换的任务
  • WtBtAnalyst模块迁移到wtpy.apps
  • 新增一个WtOptimizer,用于遍历优化策略参数

0.5.3

  • CTPLoader增加一个isMini的参数,用于控制底层调用MiniLoader对接CTPMini2进行拉取
  • WtKlineData新增一个slice方法,用于对已有K线进行切片
  • C++底层更新到2020/12/08发布的v0.5.3版本
  • CtaContext新增一个stra_get_sessinfo接口,用于获取品种的交易时间信息
  • monitor模块中的web-gui修改了一些bug
  • 修正了绩效分析模块的一些bug

0.5.2

  • 同步WonderTrader核心为v0.5.2
  • 监控服务monitor增加了一个日志模块WtLogger.py,内部使用logging模块来记录日志
  • 进一步完善了web-ui的部分功能和配色
  • 新增一个CTPLoader模块,主要用于调用底层CTPLoader执行程序,用于从CTP账号加载合约列表

0.5.1

  • 同步WonderTrader核心为v0.5.1
  • 新增一个monitor监控服务模块,其中包含http服务、websocket服务两种对web端提供的服务,同时新增了组合事件组件,用于接收组合转发出来的实时事件,还新增一个调度模块用于自动调度服务器上的定时任务
  • 新增一个web-ui目录,用于管理wtpyweb-ui项目,暂时实现了PC版的监控界面,位于web-ui/console下,web-ui采用vue2+webpack来实现,前端采用element-ui界面库,能够实时提供强大的组合盘监控服务

0.5.0

  • 同步WonderTrader核心为v0.5.0
  • 引入了hft策略以后,策略可以直接调用行情接入模块Parsers,所以调整C++底层模块的目录结构,方便策略调用
  • 增加了HftContext以及BaseHftStrategy两个针对HFT策略的基础模块
  • 回测和实盘都完成了跟C++底层的HFT接口的对接

0.4.0

  • 新增一个SEL引擎,用于调度应用层的选股策略,得到目标组合以后,提供自动执行服务,暂时只支持日级别以上的调度周期,执行会放到第二天
  • 因为新增了选股调度引擎,所以全面重构WtPorterWtBtPorter导出的接口函数,以便调用的时候区分
  • 新增一个独立的执行器模块WtExecMon,并导出C接口提供服务。主要是剥离了策略引擎逻辑,提供单纯的执行服务,方便作为单纯的执行通道,嫁接到其他框架之下
  • Windows下的开发环境从vs2013升级到vs2017boost1.72curl需要同步升级

0.3.6

  • 执行器使用线程池,减少对网络线程的时间占用
  • 增加了一个实盘仿真模块TraderMocker,可以满足目前已经支持的股票和期货的仿真交易
  • 更多接口支持(飞马、易盛iTap、CTPMini
  • 内置执行算法增加TWAP
  • 继续完善文档

0.3.5

  • 把手数相关的都从整数改成浮点数,主要目的是为了以后兼容虚拟币交易(虚拟币交易数量都是小数单位)
  • 优化手数改成浮点数以后带来的日志输出不简洁的问题(浮点数打印会显示很多“0000”)
  • 逐步完善文档
  • XTP实盘适配,主要是修复bug

0.3.4

  • 正式开源的第一个版本

wtpy's People

Contributors

jack52518 avatar jed057 avatar silentech avatar twilightsight avatar wondertrader avatar zerounnet avatar zzzzhej avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wtpy's Issues

期货夜盘K线合成问题

1.我的本地环境 0.9.5 0.9.4 0.9.3 三个版本都测试过期货夜盘24点前K线合成有问题

image

2. windows服务器0.9.5版本测试过用行情记录器记录的历史数据合成的K线夜盘数据也有相同的问题

AT$C3~$GQQJ843~)7N~BOGG
4F5SB(BCWIO4)9{~VUZ67YR

3. 我自己联系一位群友用他的数据和环境测试,夜盘输出k线也有问题

4J I$1T6$N}ODR(X}J{9R`I

set_sel_strategy的参数time由5改成10,结果出问题

我运行wtpy demo里的demos\sel_fut_bt\runBT.py,只是将set_sel_strategy的参数time由5改成10,然后在DualThrust_Sel.py里的on_calculate里加了输出时间的语句print('=========',context.stra_get_date(),'curTime',curTime)。运行结果是如下重复内容,是不对的吧。

4.29 19:58:04 - info ] DCE.i.HOT 向上突破655.0>=%654.1,多仓进场
========= 20190910 curTime 2112
[04.29 19:58:04 - info ] DCE.i.HOT 向上突破655.0>=%654.1,多仓进场
========= 20190910 curTime 2112
[04.29 19:58:04 - info ] DCE.i.HOT 向上突破655.0>=%654.1,多仓进场
========= 20190910 curTime 2112
[04.29 19:58:04 - info ] DCE.i.HOT 向上突破655.0>=%654.1,多仓进场
========= 20190910 curTime 2112
[04.29 19:58:04 - info ] DCE.i.HOT 向上突破655.0>=%654.1,多仓进场
========= 20190910 curTime 2112
[04.29 19:58:04 - info ] DCE.i.HOT 向上突破655.0>=%654.1,多仓进场
========= 20190910 curTime 2112
[04.29 19:58:04 - info ] DCE.i.HOT 向上突破655.0>=%654.1,多仓进场
========= 20190910 curTime 2112
[04.29 19:58:04 - info ] DCE.i.HOT 向上突破655.0>=%654.1,多仓进场
========= 20190910 curTime 2112
[04.29 19:58:04 - info ] DCE.i.HOT 向上突破655.0>=%654.1,多仓进场

wtpy hft 一些问题

wtpy = 0.9.6.1

  1. stra_buy 和 stra_sell userTag必填参数, 不填会引发异常
    image

  2. ontrade和onorder 参数 userTag 回调为空值

  3. 订阅主力合约时无法正常报单
    image

期权合约tick中合约代码不匹配的问题

  1. 合约代码更新后,czce期权合约格式为CZCE.TA2308.C6000。但是用该代码无法sub_ticks,tick中的合约代码仍然为CZCE.TA308.C6000。这导致下单时候用CZCE.TA2308.C6000,提示没有latest tick无法交易。该问题仅存在于czce交易所中,其他交易所目前可以正常交易。
  2. 在on_calculator中get_tick函数同意无法读取到期权合约价格。
  3. 0.9.7最新更新的stra_get_contract函数,无法用最新的合约代码读取到合约信息。而需要用交易所代码才能正常读取,例如CZCE.TA308C6000

undefined symbol: _ZN3otp14HftStraBaseCtx11getOrderTagEj

ubuntu 20.04
$ ldd -r /usr/local/lib/python3.8/dist-packages/wtpy/wrapper/linux/libWtPorter.so
linux-vdso.so.1 (0x00007ffff7c72000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4f61490000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4f6146d000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4f61280000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4f61131000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4f61110000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4f60f10000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4f616db000)
undefined symbol: _ZN3otp14HftStraBaseCtx11getOrderTagEj (/usr/local/lib/python3.8/dist-packages/wtpy/wrapper/linux/libWtPorter.so)

$ c++filt _ZN3otp14HftStraBaseCtx11getOrderTagEj
otp::HftStraBaseCtx::getOrderTag(unsigned int)

wtpy 0.5.2 version 在ubuntu 18.04上无法运行demo

运行 wtpy/demos/cta_stk_bt/runBT.py 报以下错误:

/home/wqiu/.cache/pypoetry/virtualenvs/playground-gu9jURa0-py3.7/lib/python3.7/site-packages/wtpy/wrapper/linux/libWtBtPorter.so
Traceback (most recent call last):
  File "runBT.py", line 7, in <module>
    engine = WtBtEngine(EngineType.ET_CTA)
  File "/home/wqiu/.cache/pypoetry/virtualenvs/playground-gu9jURa0-py3.7/lib/python3.7/site-packages/wtpy/WtBtEngine.py", line 22, in getinstance
    instances[cls] = cls(*args,**kwargs)
  File "/home/wqiu/.cache/pypoetry/virtualenvs/playground-gu9jURa0-py3.7/lib/python3.7/site-packages/wtpy/WtBtEngine.py", line 31, in __init__
    self.__wrapper__ = WtBtWrapper()  #api接口转换器
  File "/home/wqiu/.cache/pypoetry/virtualenvs/playground-gu9jURa0-py3.7/lib/python3.7/site-packages/wtpy/wrapper/WtBtWrapper.py", line 204, in __init__
    self.api = cdll.LoadLibrary(_path)
  File "/home/wqiu/miniconda3/lib/python3.7/ctypes/__init__.py", line 442, in LoadLibrary
    return self._dlltype(name)
  File "/home/wqiu/miniconda3/lib/python3.7/ctypes/__init__.py", line 364, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: /home/wqiu/.cache/pypoetry/virtualenvs/playground-gu9jURa0-py3.7/lib/python3.7/site-packages/wtpy/wrapper/linux/libWtBtPorter.so: undefined symbol: mysql_close

使用engine报错(mac os),什么原因?

from wtpy import WtBtEngine

from StraDualThrust import StraDualThrust

if name == "main":
#创建一个运行环境,并加入策略
engine = WtBtEngine()
engine.init('.\Common\', "configbt.json")
engine.configBacktest(201909100930,201910311500)
engine.configBTStorage(mode="csv", path=".\storage\")
engine.commitBTConfig() #代码里的配置项,会覆盖配置文件configbt.json里的配置项

有以下报错
Traceback (most recent call last):
File "/Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/pydevd.py", line 1483, in _exec
pydev_imports.execfile(file, globals, locals) # execute the script
File "/Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "/Users/mingzhu/Desktop/ming/code/python/FinRL/FinRL/test_wtpy/runBT.py", line 8, in
engine = WtBtEngine()
File "/Users/mingzhu/opt/anaconda3/lib/python3.8/site-packages/wtpy/WtUtilDefs.py", line 5, in getinstance
instances[cls] = cls(*args,**kwargs)
File "/Users/mingzhu/opt/anaconda3/lib/python3.8/site-packages/wtpy/WtBtEngine.py", line 26, in init
self.wrapper = WtBtWrapper(self) #api接口转换器
File "/Users/mingzhu/opt/anaconda3/lib/python3.8/site-packages/wtpy/WtUtilDefs.py", line 5, in getinstance
instances[cls] = cls(*args,**kwargs)
File "/Users/mingzhu/opt/anaconda3/lib/python3.8/site-packages/wtpy/wrapper/WtBtWrapper.py", line 32, in init
self.api = cdll.LoadLibrary(_path)
File "/Users/mingzhu/opt/anaconda3/lib/python3.8/ctypes/init.py", line 459, in LoadLibrary
return self._dlltype(name)
File "/Users/mingzhu/opt/anaconda3/lib/python3.8/ctypes/init.py", line 381, in init
self._handle = _dlopen(self._name, mode)
OSError: dlopen(/Users/mingzhu/opt/anaconda3/lib/python3.8/site-packages/wtpy/wrapper/linux/libWtBtPorter.so, 6): no suitable image found. Did find:
/Users/mingzhu/opt/anaconda3/lib/python3.8/site-packages/wtpy/wrapper/linux/libWtBtPorter.so: unknown file type, first eight bytes: 0x7F 0x45 0x4C 0x46 0x02 0x01 0x01 0x03
/Users/mingzhu/opt/anaconda3/lib/python3.8/site-packages/wtpy/wrapper/linux/libWtBtPorter.so: unknown file type, first eight bytes: 0x7F 0x45 0x4C 0x46 0x02 0x01 0x01 0x03
python-BaseException

dtServo.get_ticks中endTime参数无用

使用如下代码生成主力连接数据时,会生成202207180930至今所有数据,endTime参数未发挥作用。
ticks = dtServo.get_ticks("CFFEX.IF.HOT", fromTime=202207180930, endTime=202207201500).to_df()
ticks.to_csv(".\CFFEX.IF.HOT_202207180930_202207201500_ticks.csv")

ctp_loader 生成文件编码有问题

wtpy = 0.9.6.1
ctp_loader 生成的 contracts.json 和 commodities.json 文件编码有问题,导致cta_fut异常退出
image

image
强行加个 errors="ignore" 才能正常运行cta_fut

sel_stk_bt回测时,on_calculate方法中股票获取不到数据

操作步骤:
1.因为原来的代码中,没有用sel引擎来回测股票的demo,所以将原sel_fut_bt的demo复制了一份,并将要回测的标的及相关配置改成了股票的;
2.在storage目录下新增了对应股票的csv数据文件,debug运行run_bt,发现获取不到股票数据,但是dsb文件是有的。
image

同时也发现另外一个问题,sel_stk_bt股票的回测结果目录下,closes.csv,funds.csv,trades.csv文件只有tittle,没有数据,但是用sel_fut_bt的demo回测又是有这些文件的的,不清楚是不是跟股票的复权有关。

WtWrapper的register_extended_data_loader调用异常

按照下面方式给WtEngine添加 extended data loader 后会抛出异常

engine = WtEngine(eType = EngineType.ET_CTA, logCfg = 'logcfg.yaml')
engine.set_extended_data_loader(loader)

异常

AttributeError: 'WtWrapper' object has no attribute 'on_load_his_bars'

从代码来看 WtWrapper 没有 on_load_his_bars 方法

订阅期权合约遇到无法触发回调的问题

0.9.6 dev 分支
订阅 SHFE.ru2306P13500, testUDP监听到了行情
在cta和hft引擎里订阅SHFE.ru.ru2306P13500 都无法触发on tick 或者 on bar, INE的期权合约也不行
但是CFFEX的期权合约可以触发on bar,无法触发 on tick

希望datahelper增加ticks数据的导出

赞wondertrader的工作,从专业程序员角度来看,非常棒!

QData数据源支持导出ticks数据,但datahelper还不支持导出ticks,希望增加ticks数据导出的接口

回测速度怎么样?

如果我要回测一个tick数据的策略,10年 2500天,每天28000个tick数据,这样的一次回测大概需要多久

在ubuntu18.04 上运行时出现权限不足提醒。

在ubuntu18.04 运行cta_fut demo时出现以下错误信息

/sys/firmware/dmi/tables/smbios_entry_point: Permission denied
/dev/mem: Permission denied
/sys/firmware/dmi/tables/smbios_entry_point: Permission denied
/dev/mem: Permission denied
br-a4e4731004df: No such file or directory
br-c69f3900d779: No such file or directory
br-955fb704febf: No such file or directory
br-68ba5b86cd7a: No such file or directory
br-92629d4b8839: No such file or directory
br-554617ef66cd: No such file or directory
br-8aa48a3bec40: No such file or directory

其中 b4 开头的字符串,为网络接口id。

初步怀疑与ctp的接口有关, 参看
https://www.vnpy.com/forum/topic/3035-ubuntu-xia-yun-xing-bao-cuo

应该不影响程序的运行,需要进一步测试。

GAOptimizer Linux环境无法运行

GAOptimizer(遗传规划优化目标参数部份)在windows环境下可以正常运行,但是在Linux环境无法运行,会卡住但是没有报错
image

问题应该是出在WtCtaGAOptimizer中的
, logbook = algorithms.eaMuPlusLambda(pop, toolbox, self.MU, self.lambda, self.cx_prb, self.mut_prb,self.ngen_size, stats, verbose=False, halloffame=hof)
这一行

麻烦作者帮忙看一眼,谢谢

WtEngine=>add_sel_strategy=>create_sel_context传参错误

def add_sel_strategy(self, strategy:BaseSelStrategy, date:int, time:int, period:str, slippage:int = 0):
    #if isinstance(strategy, EtSelStrategy):
    #    strategy.setEngine(self)
    id = self.__wrapper__.create_sel_context(strategy.name(), date, time, period, slippage)
    self.__sel_ctxs__[id] = SelContext(id, strategy, self.__wrapper__, self)

slippage作为第五个参数传入,但是WtWrapper里定义的是第七个

def create_sel_context(self, name:str, date:int, time:int, period:str, trdtpl:str = 'CHINA', session:str = "TRADING", slippage:int = 0) -> int:

HftContext.stra_cancel_all 出错

Hftcontext.py 类的stra_cancel_all 中的WtWrapper.hft_cancel_all 因为 ret 中含有int 类型,无法在 python3
中使用bytes.decode(ret)

Segmentation fault怎么调试

root@iZ0jl3nc5j5s6c69yrpgreZ:~/wtpy-master/demos/datakit_fut# python3 runDT.py
/usr/local/lib/python3.8/dist-packages/wtpy/wrapper/linux/libWtDtPorter.so
<CDLL '/usr/local/lib/python3.8/dist-packages/wtpy/wrapper/linux/libWtDtPorter.so', handle 2859ef0 at 0x7fdd2b1cdd30>
Segmentation fault

C++和Python混在一起太难搞了,不知道哪里配的不对

订阅期货期权存在编码错误问题

使用的是simnow通道,订阅期货期权后可以下单(如CFFEX.IO.IO2303-C-4100),但是写入持仓时发现code变成了CFFEX.IO.2230,这导致on_order回调函数无法触发,持仓的查询也有问题,可能是行情转码发生了错误。

SEL引擎的绩效分析->累计净值数据为空

用wtpy测试sel_fut_bt示例时发现,sel引擎的累计净值一直为1,
image

而cta策略是可以获取到累计净值数据的。粗略跟踪了下CtaStraBaseCtx.cpp代码,发现是回测生成的funds.csv文件数据全部为0,
image
继续跟踪代码,发现读取资金数据 策略名.json的文件时,获取不到 fund的数据导致的,r如下图所示。
image
至于fund数据是怎么来的,c++水平有限就看不太懂了

monitor的用法?

web-ui可以起来了,后端用的是monitor吧,想问下monitor怎么启动

volum数据获取不到

运行例子cta_stk_bt,但是 df_bars.volumes返回都是0
date bartime open high low close settle money volume hold diff
20190103 201901030945 2961.0 2963.2 2955.2 2962.0 0.0 0.0 0.0 0.0 0.0

希望能出一个简化版的context

希望能再出一个更简化的context,把on_tick,on_bar都合并到on_calculate中去,逻辑是订阅了tick数据,则不必等到bar闭合而是tick或者order或者trade有更新就可以触发on_calculate计算,否则要等到bar闭合再触发计算。这样使用习惯上就mc,tb,文华,天勤这些比较接近,迁移也没那么难了。毕竟很多搞交易的还是不是程序员出身,真的不太擅长也搞不懂回调,写起来觉得别扭。另外一些偏高频的策略也可以用这个context来实现,比如偏高频一点的套利,现在那个demo是用cta_context实现的,但是实盘如果没有tick数据,肯定不行,如果要用hft_context来实现,难度又大了不少

Ubuntu下wtpy的HFT策略的问题

你好,我参考发布在B站的《Linux环境下运行wtpy的HFT策略》,在Ubuntu下尝试HFT时,执行python run.py报错, 而之后尝试在windows10下能够正常运行,配置文件和代码都相同。

Ubuntu下的错误包括
(一)找不到文件,好像是文件名前多了"lib": libtts_thosttraderapi_se.so: cannot open shared object file: No such file or directory
(二) segmentation violation

这是运行后的全部信息
[06.14 22:32:54 - info ] WonderTrader HFT production framework initialziedversion: UNIX v0.9.7 Build@Apr 4 2023 08:54:27
[06.14 22:32:54 - info ] Trading sessions loaded
[06.14 22:32:54 - info ] Commodities configuration file ../common/commodities.json loaded
[06.14 22:32:54 - info ] Contracts configuration file ../common/contracts.json loaded, 5 exchanges
[06.14 22:32:54 - info ] Holidays loaded
[06.14 22:32:54 - info ] Hot rules loaded
[06.14 22:32:54 - info ] Trading environment initialized, engine name: HFT
[06.14 22:32:54 - info ] Running mode: Production
[06.14 22:32:54 - debug] Filters configuration file filters.yaml not exists
[06.14 22:32:54 - info ] 38 fee templates loaded
[06.14 22:32:54 - warning] RiskMon is not configured, portfilio fund will be updated every 5s
[06.14 22:32:54 - info ] WtDataReader initialized, rt dir is ../FUT_Data/rt/, hist dir is ../FUT_Data/his/, adjust_flag is 0
[06.14 22:32:54 - info ] No adjusting factor file configured, loading skipped
[06.14 22:32:54 - info ] Data manager initialized
[06.14 22:32:54 - info ] Action policies initialized
[06.14 22:32:54 - info ] Reading parser config from tdparsers.yaml...
[06.14 22:32:54 - info ] [parser0] Parser module /home/ubuntu/.conda/envs/wtpy/lib/python3.10/site-packages/wtpy/wrapper/linux/parsers/libParserCTP.so loaded
[06.14 22:32:54 - info ] [parser0] Parser initialzied, check_time: false
[06.14 22:32:54 - info ] 1 parsers loaded
[06.14 22:32:54 - info ] Reading trader config from tdtraders.yaml...
[06.14 22:32:54 - info ] [simnow] Risk control rule default of trading channel loaded
[06.14 22:32:54 - info ] [simnow] Trader module /home/ubuntu/.conda/envs/wtpy/lib/python3.10/site-packages/wtpy/wrapper/linux/traders/libTraderCTP.so loaded
/home/ubuntu/.conda/envs/wtpy/lib/python3.10/site-packages/wtpy/wrapper/linux/traders/libtts_thosttraderapi_se.so: cannot open shared object file: No such file or directory
[06.14 22:32:54 - info ] 1 traders loaded
[06.14 22:32:54 - info ] 1 parsers started
[06.14 22:32:54 - error] segmentation violation

而在windows下,看起来没有类似的错误:
[06.14 22:45:21 - info ] WonderTrader HFT production framework initialzied,version: X64 v0.9.7 Build@Apr 4 2023 10:13:38
[06.14 22:45:21 - info ] Trading sessions loaded
[06.14 22:45:21 - info ] Commodities configuration file ../common/commodities.json loaded
[06.14 22:45:21 - info ] Contracts configuration file ../common/contracts.json loaded, 5 exchanges
[06.14 22:45:21 - info ] Holidays loaded
[06.14 22:45:21 - info ] Hot rules loaded
[06.14 22:45:21 - info ] Trading environment initialized, engine name: HFT
[06.14 22:45:21 - info ] Running mode: Production
[06.14 22:45:21 - debug] Filters configuration file filters.yaml not exists
[06.14 22:45:21 - info ] 38 fee templates loaded
[06.14 22:45:21 - warning] RiskMon is not configured, portfilio fund will be updated every 5s
[06.14 22:45:21 - info ] WtDataReader initialized, rt dir is ../FUT_Data/rt/, hist dir is ../FUT_Data/his/, adjust_flag is 0
[06.14 22:45:21 - info ] No adjusting factor file configured, loading skipped
[06.14 22:45:21 - info ] Data manager initialized
[06.14 22:45:21 - info ] Action policies initialized
[06.14 22:45:21 - info ] Reading parser config from tdparsers.yaml...
[06.14 22:45:21 - info ] [parser0] Parser module C:/Users/xxxxx/.conda/envs/wtpy/lib/site-packages/wtpy/wrapper/x64/parsers/ParserCTP.dll loaded
[06.14 22:45:21 - info ] [parser0] Parser initialzied, check_time: false
[06.14 22:45:21 - info ] 1 parsers loaded
[06.14 22:45:21 - info ] Reading trader config from tdtraders.yaml...
[06.14 22:45:21 - info ] [simnow] Risk control rule default of trading channel loaded
[06.14 22:45:21 - info ] [simnow] Trader module C:/Users/xxxxx/.conda/envs/wtpy/lib/site-packages/wtpy/wrapper/x64/traders/TraderCTP.dll loaded
[06.14 22:45:21 - info ] 1 traders loaded
[06.14 22:45:21 - info ] 1 parsers started
[06.14 22:45:21 - info ] registerFront: tcp://121.37.80.177:20002
[06.14 22:45:21 - info ] 1 trading channels started
[06.14 22:45:21 - info ] Market Data subscribed: CFFEX.IF.2306
[06.14 22:45:21 - info ] Trading day 20230615 begun
press any key to exit
[06.14 22:45:21 - info ] [ParserCTP] Market data server connected
[06.14 22:45:21 - info ] [ParserCTP] Market data server logined, 20230614
[06.14 22:45:21 - info ] [ParserCTP] Market data of 653 contracts subscribed totally
[06.14 22:45:21 - info ] [TraderCTP][9999-6374] Login succeed, AppID: simnow_client_test, Sessionid: 141635, login time: 22:45:21...
[06.14 22:45:21 - info ] [TraderCTP][9999-6374] Login succeed, trading date: 20230615...
[06.14 22:45:21 - info ] [TraderCTP][9999-6374] Querying confirming state of settlement data...
[06.14 22:45:21 - info ] [TraderCTP][9999-6374] Confirming settlement data...
[06.14 22:45:21 - info ] [TraderCTP][9999-6374] Trading channel initialized...
[06.14 22:45:21 - info ] [simnow] Trader login succeed, trading date: 20230615
[06.14 22:45:22 - info ] [simnow] Position data updated
[06.14 22:45:25 - info ] [simnow] Trading channel ready
[06.14 22:45:26 - info ] 理论价格3956.700000,最新价:3956.600000
[06.14 22:45:26 - info ] 出现正向信号

以下是其他信息:

版本:
Ubuntu 20.04.3 LTS
Python 3.10.10
wtpy-0.9.7.2和wtpy-0.9.8都报错

目录:demos\hft_fut\

配置文件(使用的是OpenCTP的7x24环境):
tdparsers.yaml
parsers:

  • active: false
    bport: 9001
    filter: ''
    host: 127.0.0.1
    id: parser2
    module: ParserUDP
    sport: 3997
  • active: true
    broker: '9999'
    frontxxx: tcp://180.168.146.187:10211
    front: tcp://121.37.80.177:20004
    id: parser0
    module: ParserCTP
    user: xxx
    pass: xxx
    ctpmodule: tts_thostmduserapi_se
    localtime: true

tdtraders.yaml
traders:

  • active: true
    appid: simnow_client_test
    authcode: '0000000000000000'
    broker: '9999'
    frontxxx: tcp://180.168.146.187:10201
    front: tcp://121.37.80.177:20002
    id: simnow
    module: TraderCTP
    user: xxx
    pass: xxx
    ctpmodule: tts_thosttraderapi_se
    quick: true
    riskmon:
    active: true
    policy:
    default:
    cancel_stat_timespan: 10
    cancel_times_boundary: 20
    cancel_total_limits: 470
    order_stat_timespan: 10
    order_times_boundary: 20

如何订阅主力合约

比如说我的策略想跑几个月,这期间始终订阅某个期货品种的主力合约,而主力合约的代码会不断地变化,此时我应该如何订阅?形如 context.stra_get_bars(SHFE.rb.HOT)可以吗?

HFT引擎监控调度失败

  1. 监控配置调度,使用HFT引擎测试
  2. HFT生成目录.....generated\protfolio/datas.json文件没有生成,导致监控Exception Error,进而在在监控面网页中调度面板手工启动HFT应用程序,3秒后HFT应用自动停止
  3. 后续监控程序偶尔卡死,可能与wtpy监控未捕获异常错误有关

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.