Code Monkey home page Code Monkey logo

wtpy's Introduction

WonderTrader2.png

WonderTrader是什么

  • WonderTrader是一个基于C++核心模块的,适应全市场全品种交易的,高效率高可用的量化交易开发框架。

    • 面向于专业机构的整体架构
    • 数十亿级的实盘管理规模
    • 从数据落地清洗、到回测分析、再到实盘交易、运营调度,量化交易所有环节全覆盖
  • WonderTrader依托于高速的C++核心框架,高效易用的应用层框架(wtpy),致力于打造一个从研发、交易、到运营、调度,全部环节全自动一站式的量化研发交易场景。

  • WonderTrader0.9开启了一个新的UFT引擎,针对超低延时交易的需求进行实现,经过一系列的优化以后,系统延迟在175纳秒之内。

  • WonderTrader的实盘运行架构 WonderTrader实盘运行架构.png

WonderTrader的优势

  • 丰富的交易引擎

    • CTA引擎,也叫同步策略引擎,一般适用于标的较少,计算逻辑较快的策略,事件+时间驱动。典型的应用场景包括单标的择时、中频以下的套利等。Demo中提供的DualThrust策略,单次重算平均耗时,Python实现版本约70多微秒,C++实现版本约4.5微秒。 CTA.jpg
    • SEL引擎,也叫异步策略引擎,一般适用于标的较多,计算逻辑耗时较长的策略,时间驱动。典型应用场景包括多因子选股策略、截面多空策略等。
    • HFT引擎,也叫高频策略引擎,主要针对高频或者低延时策略,事件驱动,系统延迟在1-2微秒之间
    • UFT引擎,也叫极速策略引擎,主要针对超高频或者超低延时策略,事件驱动,系统延迟在200纳秒之内 CTA.jpg
  • 完善的开发接口

    • 高效易用的数据接口:每个策略都会有独立的上下文模块,上下文会自动缓存策略所需要的数据,策略直接调用即可。
    • 简洁的信号接口:策略只需要设置目标仓位,后台自动执行。
    • 上下文无关的策略逻辑:策略不需要自己记录任何数据,每次只需要向接口查询即可,数据全部缓存在内存中,访问效率有保障。
  • 专业的策略管理

    • 策略组合统一管理:采用策略组合的方式,主要为了配合专业机构的产品管理。一个组合盘,对应若干个策略的若干个标的,再设置一个基本的单位资金量,这就是产品管理的基本组合盘,方便扩展。
    • 目标仓位合并执行:目标仓位合并以后,避免了自成交的风险,同时降低了保证金占用和佣金开销。
    • 理论部位独立存储:策略的理论部位是独立存储的,组合盘的整体绩效也是独立核算的,轻松胜任内部管理。
    • 多账户并发执行:组合的目标头寸确定以后,就通过多个交易通道同步执行,可以有效的保障不同的账户的绩效的一致性。
  • 全类型的回测支持

    • 语言支持全:不论是C++开发的策略还是wtpy下开发的python策略,或者其他语言子框架下开发的策略,都在统一的回测引擎中统一回测。
    • 回测效率高:回测引擎采用C++开发,回测效率高,速度快。不管是C++策略还是Python策略,都能快速验证。
    • 策略支持完备:除了CTA策略SEL策略可以回测,HFT策略UFT策略执行单元也能回测 backtest.jpg
  • 高效的数据伺服

    • 本地数据伺服WonderTrader内置的存储引擎采用本地存储,在本地建立数据伺服,通过udp端口广播实时行情,实现1+N的服务结构,可以同时向多个组合盘提供无差别数据服务。专业数据供应商级别的架构,支持搭建多级分发体系,轻松应对各种需求场景。
    • 缓存历史数据:交易过程中,历史数据全部缓存到内存中,同时采用内存直接引用内存数据切片的机制,从根本上避免数据拷贝,提高访问效率。
    • 高效存储引擎:实时数据采用mmap文件,读写高速并且不会丢失数据。同时支持mysql数据库存储历史数据,更方便在此基础上搭建自有的投研数据库。
  • 灵活的风险控制

    • 组合盘资金风控:组合盘有预设的资金规模,可以针对组合盘的虚拟资金,进行组合盘的资金风控。最大的优点是,如果组合盘处于下行阶段,触发风控以后,即使资金账户没有打到风控线,也不会再继续下行了。
    • 通道流量风控:主要针对合规风险,控制的是总撤单笔数、短时间内下单次数和撤单次数等指标。
    • 账户资金风控:和一般意义上的资金风控一致,主要控制账户资金的回撤等。
    • 紧急人工介入:提供一个紧急的人工介入的入口,通过上传一个配置文件,达到控制的目的。主要适用于单品种出现风险,如果全市场风险,人工停止系统即可。
    • 离合器机制:离合器机制依托于信号和执行分离的机制的,主要是如果策略或组合发生风险,通过离合器机制,直接断开信号执行。优点是不影响策略的逻辑,只断开信号的执行,可以继续观察策略在特定行情阶段的表现,和理论研究相互印证。 risk.jpg
  • 强大的控制台wtpy的监控服务)

    • 组合盘运行监控:可以查看实时运行日志、策略理论数据、交易通道数据等,并提供手动启停的入口。 monitor.jpg
    • 自动调度服务:全自动调度定时任务(启动、停止、重启),支持按周设置任务重复,支持进程守护。 schedule.jpg
    • 实时事件通知:监控服务接收组合盘推送的事件,然后转发给监控端,提示给用户。
    • 回测查看器:使用WtBtSnooper模块,可以进行回测数据的查看分析。 bt_summary.jpg bt_details.jpg bt_signals.jpg
    • 全自动远程部署(在建):全自动在线远程部署,提供回测环境、实盘环境等多种应用场景的自动化部署服务。

常见应用场景

  • 团队内控 策略组合管理的方式,给团队内部管理提供了完美的解决方案。

    • 一方面,不同投研人员,不同的策略可以组合成一个组合运行,而且每个策略都有自己的理论部位,即使交易相同标的也不会互相干扰;
    • 另一方面,C++级别的代码可以提供最大的策略保密性,投研人员不用担心策略的泄露;
    • 策略的绩效是独立核算的,团队内部的考核指标可以很容易实现。
  • 多账户交易多产品配置) 对于不同行情周期下的策略组合,一般团队都会有一个当下最适应的策略组合。但是同一时期,团队可能会同时管理很多个账户,而其实这些账户用到的策略组合都是相同的。这个时候WonderTrader平台提供的M+1+N执行架构就能够完美的满足这个需求。 WonderTrader基本架构.jpg

    • 首先,策略组合有自己的单位资金容量和对应的风险参数,以及各个策略的单位交易数量;
    • 其次,不同的账户有不同的资金规模和风险偏好,这个时候只需要根据这些要求配置不同的手数倍率即可;

      假如某组合盘P基本资金规模为500w,预期收益30%,最大回撤10%,收益风险比3:1;A账户使用该组合盘P交易,A账户的资金量为1000w,可以接受的最大回撤也是10%;B账户也使用该组合盘P交易,资金量也是1000w,但是可以接受的最大回撤为20%;这个时候因为A账户风险参数和基本盘一致,所以A账户的手数放大倍数为资金规模/基本盘的资金规模=1000w/500w=2倍;B账户因为可以忍受最大回撤20%,所以手数比例还要再放大一倍,即B账户可以配置4倍。

    • 第三,不同的账户可以配置独立的风控逻辑,账户之间不会互相影响。
  • 多标的跟踪 一些用解释型语言(如Python)开发核心模块的量化交易平台,在标的数不多的情况下,能够胜任各种不同的应用场景。但是当需要跟踪的标的数达到100个以上,甚至是50个以上时,就无法满足需求了。一方面资源占用大,利用multiprocess等机制,虽然各个标的独立运行,但是上百个标的就要新建上百个进程,内存和CPU开销都非常大;另一方面策略效率低,资源争强严重的情况下,策略反应也会变慢。 WonderTrader核心采用C++开发,数据伺服更是一开始就设计成向多个组合同时提供服务的架构,同时策略和执行剥离,信号执行和策略计算完全在两个不同的线程中独立运行。在这样的架构下,就能够很好的满足多标的跟踪的需求。

  • 大计算量策略 一些策略计算量会非常惊人,比较典型的就是选股策略,不管是用多因子也好,还是基本面也好,都会从数千只股票中,逐步筛选,从而得到最后的目标股池。另外,一些多标的的多因子框架也具有较大的计算量。这样的策略,计算量非常庞大,耗时也长。 WonderTraderSEL引擎就是为了满足这方面的需求而定制的。SEL引擎采用异步时间驱动的模式,通过向引擎注册重算时间调度(支持日内,每日、每周、每月的等多种周期),定时触发重算,然后调整多标的的目标仓位,从而输出信号。

  • 极速交易 WonderTrader使用C++作为底层核心开发语言,一个最重要的目的就是追求极致性能,所以WonderTrader的使用场景中高频交易或者极速交易有一个非常大的占比。WonderTraderv0.9版本开设了一个新的UFTEngine,专门针对极速交易的场景。 和原来的HFTEngine不同,HFTEngine针对的是一般高频,侧重于向应用层提供高性能的底层组件,会考虑更多的兼容性问题以及应用层对接的问题,系统延迟在1-2微秒之间。而UFTEngine则完全从WtCore项目剥离,不向应用层提供接口,全部在C++进行开发实现,系统延迟在200ns以内

  • 算法交易 WonderTrader有一个独立的执行器入口模块WtExecMon,用户可以在此基础上实现算法交易。WonderTraderM+1+N执行架构中,1+N执行部分剥离出来,就可以作为一个独立算法交易执行器来使用。用户在使用的时候,通过设置指定标的的目标头寸,算法执行单元就可以按照预设的算法进行交易下单。 用户可以通过实现自己的WtExecFact模块,来添加更多的算法执行单元。高效的C++底层,可以给算法执行单元的执行效果提供有力的保障。

支持的交易接口

  • 期货
    • CTP
    • CTPMini
    • 飞马Femas
    • 艾克朗科(仅组播行情)
    • 易达
  • 期权
    • CTPOpt
    • 金证期权maOpt
    • QWIN二开
  • 股票
    • 中泰XTP
    • 中泰XTPXAlgo
    • 华鑫奇点
    • 华锐ATP
    • 宽睿OES

wtpy简介

  • wtpy是构建在WonderTrader核心模块之上的,使用Python3开发的WonderTraderPython3子框架
  • Python作为量化领域最流行的语言,在时序数据处理上有许多非常受欢迎的强大的第三方库
  • Python作为一种解释型语言,代码编写和调试都非常方便,不需要编译就可以直接运行
  • Python的跨平台属性也使Python可以应用到更多的场景中
  • wtpy主要功能是作为WonderTraderPython语言的外延
  • 同时wtpy还内置了一个强大的监控服务组件WtMonSvr。该组件提供了远程的webui的监控界面,可以实时监控策略组合的运行情况,还提供全天24×7的自动调度服务,为你的交易保驾护航。

WonderTrader怎么获取

WonderTrader延伸项目

写在最后


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  avatar

wtpy's Issues

希望能出一个简化版的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来实现,难度又大了不少

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

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

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

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)
这一行

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

在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

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

ctp_loader 生成文件编码有问题

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

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

回测速度怎么样?

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

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混在一起太难搞了,不知道哪里配的不对

希望datahelper增加ticks数据的导出

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

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

使用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

期货夜盘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

HftContext.stra_cancel_all 出错

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

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)

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 方法

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

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

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

如何订阅主力合约

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

期权合约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

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

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:

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")

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,多仓进场

monitor的用法?

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

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回测又是有这些文件的的,不清楚是不是跟股票的复权有关。

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

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

HFT引擎监控调度失败

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

wtpy hft 一些问题

wtpy = 0.9.6.1

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

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

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

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

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.