【WonderTrader源码详解 1】【环境搭建 2】【编译安装WonderTrader】

一、引言

本篇来讲述如何搭建 wondertrader 和 wtpy

二、wondertrader

2.1 源码下载

# /home/leo/sda_1.6TBgit clone https://gitee.com/wondertrader/wondertrader.gitgit clone https://gitee.com/wondertrader/wtpy.git

2.2 源码编译

cd /home/leo/sda_1.6TB/wondertrader/src./build_debug.sh# 最终编译后的产物在  build_debug 中

gcc/g++ 版本

gcc version 8.4.0gcc version 8.4.0

2.3 安装编译后的库


/home/leo/sda_1.6TB/wondertrader# 这里需要注意 wtpy 和 wondertrader 是同级目录
/home/leo/sda_1.6TB/wtpy

~/sda_1.6TB/wondertrader$ ./copy_bins_debug_linux.sh
  • ./copy_bins_debug_linux.sh 内容如下
despath=$1
if test "$despath" = ""; then despath="../wtpy"
fiecho "wtpy path is $despath"root="./src/build_debug/build_x64/Debug/bin"
folders=("Loader" "WtBtPorter" "WtDtPorter" "WtPorter")
for folder in ${folders[@]}
docp -rvf $root/$folder/*.so $despath/wtpy/wrapper/linuxfor file in `ls $root/$folder`doif [ -d $root"/"$folder"/"$file ]thencp -rvf $root/$folder/$file/*.so $despath/wtpy/wrapper/linux/$filefidone
done

三、wtpy 环境搭建

3.1 conda 环境创建

conda create -n wtpy_env python=3.10conda activate wtpy_env

3.2 源码安装

直接 在我们的 wtpy_env 环境中安装 wtpy

pip install ./wtpy/

3.3 测试

/home/leo/sda_1.6TB/wtpy/demos/datakit_stkpython3 ./runDT.py

# 运行报错, nump 版本不对导致
ValueError: numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject# 卸载 NumPy(可能需要 sudo)
pip uninstall -y numpy# 清理残留的编译缓存(重要!避免使用旧缓存)
pip cache purge# 重新安装兼容版本的 NumPy(例如 1.21.6,具体版本需匹配依赖库)
pip install numpy==1.21.6  # 或其他兼容版本(如 1.23.x、1.24.x)
  • 解决完上述问题后,就可以 运行成功了。
(wtpy_env) leo@leo:~/sda_1.6TB/wtpy/demos/datakit_stk$ python3.10 ./runDT.py 
debug [/home/leo/sda_1.6TB/wondertrader/src/WtDtPorter/WtDtPorter.cpp][get_version][72]
debug [/home/leo/sda_1.6TB/wondertrader/src/WtDtPorter/WtDtPorter.cpp][initialize][57]
debug [/home/leo/sda_1.6TB/wondertrader/src/WtDtPorter/WtDtPorter.cpp][getRunner][50]
debug [/home/leo/sda_1.6TB/wondertrader/src/WtDtPorter/WtDtRunner.cpp][WtDtRunner][35]
debug [/home/leo/sda_1.6TB/wondertrader/src/WtDtPorter/WtDtRunner.cpp][initialize][93]
[08.13 01:23:37 - info ] Trading sessions loaded
[08.13 01:23:37 - info ] Commodities configuration file ../common/stk_comms.json loaded
[08.13 01:23:38 - info ] Contracts configuration file ../common/stocks.json loaded, 2 exchanges
[08.13 01:23:38 - info ] Holidays loaded
[08.13 01:23:38 - info ] ShmCaste initialized @ ./exchange.membin
debug [/home/leo/sda_1.6TB/wondertrader/src/WtDtPorter/WtDtRunner.cpp][initDataMgr][258]
[08.13 01:23:38 - info ] Data storage module /home/leo/sda_1.6TB/anaconda3/envs/wtpy_env/lib/python3.10/site-packages/wtpy/wrapper/linux/libWtDataStorage.so loaded
[08.13 01:23:38 - info ] WtDataWriter initialized, root dir: ../storage/, save_csv_tick: false, async_mode: true, log_group_size: 20, disable_history: false, disable_tick: false, disable_min1: false, disable_min5: false, disable_day: false, disable_trans: false, disable_ordque: false, disable_orders: false, min_price_mode: 0
[08.13 01:23:38 - info ] Reading parser config from mdparsers.yaml...
debug [/home/leo/sda_1.6TB/wondertrader/src/WtDtPorter/WtDtRunner.cpp][initParsers][264]
[08.13 01:23:38 - info ] [parser] Parser module /home/leo/sda_1.6TB/anaconda3/envs/wtpy_env/lib/python3.10/site-packages/wtpy/wrapper/linux/parsers/libParserXTP.so loaded
[08.13 01:23:38 - info ] 1 market data parsers loaded in total
debug [/home/leo/sda_1.6TB/wondertrader/src/WtDtPorter/WtDtPorter.cpp][register_parser_callbacks][115]
debug [/home/leo/sda_1.6TB/wondertrader/src/WtDtPorter/WtDtPorter.cpp][getRunner][50]
debug [/home/leo/sda_1.6TB/wondertrader/src/WtDtPorter/WtDtRunner.cpp][registerParserPorter][293]
[08.13 01:23:38 - info ] Callbacks of Extented Parser registration done
[08.13 01:23:38 - info ] WonderTrader datakit initialzied��version: UNIX v0.9.9 Build@Aug 13 2025 01:12:31
debug [/home/leo/sda_1.6TB/wondertrader/src/WtDtPorter/WtDtPorter.cpp][start][66]
debug [/home/leo/sda_1.6TB/wondertrader/src/WtDtPorter/WtDtPorter.cpp][getRunner][50]
debug [/home/leo/sda_1.6TB/wondertrader/src/WtDtPorter/WtDtRunner.cpp][start][46]
[08.13 01:23:38 - info ] [ParserXTP] Connecting server successed: 0, begin to subscibe data ...
[08.13 01:23:38 - info ] [ParserXTP] Market data of 4 instruments of SSE subscribed
[08.13 01:23:38 - info ] [ParserXTP] Tick_by_tick data of 4 instruments of SSE subscribed
[08.13 01:23:38 - info ] [ParserXTP] Market data of 1 instruments of SZSE subscribed
[08.13 01:23:38 - info ] [ParserXTP] Tick_by_tick data of 1 instruments of SZSE subscribed
[08.13 01:23:38 - info ] 1 parsers started

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/92869.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hutool 作为http 客户端工具调用的一点点总结

场景一:客户端timeout 的时间给的很短//100毫秒 private static final int HTTP_TIMEOUT_MS 1 * 100; response HttpUtil.createPost(patrolresultconfirmUrl).body(JSONObject.toJSONString(search)).header("Authorization", token).timeout(HTTP_TI…

基于MongoDB/HBase的知识共享平台的设计与实现

标题:基于MongoDB/HBase的知识共享平台的设计与实现内容:1.摘要 在当今信息爆炸的时代,知识的有效共享和管理变得愈发重要。本研究的目的是设计并实现一个基于MongoDB/HBase的知识共享平台,以满足大规模知识数据的存储、高效查询和快速共享需求。方法上&…

PHP数组操作:交集、并集和差集

1. 交集(Intersection)交集是指两个集合中都存在的元素。$array1 [1, 2, 3, 4]; $array2 [3, 4, 5, 6];$intersection array_intersect($array1, $array2); print_r($intersection); // 输出: Array ( [2] > 3 [3] > 4 )2. 并集(Uni…

Qt 常用控件 - 7

Text Edit(多行输入框)QTextEdit 表示多行输入框,也是一个富文本 & markdown 编辑器,能在内容超出范围时自动提供滚动条。QTextEdit:不仅仅能表示纯文本,还可以表示 htnl 和 markdownQPlainTextEdit&am…

JDK、eclipse的安装,配置JDK、Tomcat并使用eclipse创建项目

目录一、JDK的安装1. 安装JDK2. 配置环境变量3. 检查jdk是否已安装二、eclipse的安装1. 解压安装2. 设置字体大小3. 设置拼写提示三、tomcat安装四、创建项目1. 第一次创建一个普通的java项目2. 第一次创建一个java web项目扩展:运行项目报Tomcat端口占用&#xff0…

Iptables 详细使用指南

目录 1. 工作原理​ 2. 核心架构(四表五链) 2.1 四张表(优先级从高到低) 2.2 五条内置链(数据包流向) 3. Iptables规则 3.1 规则的匹配条件与目标动作 常见匹配条件(用于筛选数据包&…

Vue 服务端渲染(SSR)详解

Vue SSR是一种在服务端将 Vue 应用渲染成 HTML 字符串,然后直接发送到客户端的技术。相比传统的客户端渲染,Vue SSR 能带来更好的 SEO 性能和更快的首屏加载时间。下面我们从零到一,结合项目源码,详细讲解如何实现一个 Vue SSR 项…

机器翻译:需要了解的数学基础详解

文章目录一、概率论与统计学1.1 基本概念1.2 在机器翻译中的应用二、线性代数2.1 基本概念2.2 在机器翻译中的应用三、微积分3.1 基本概念3.2 在机器翻译中的应用四、信息论4.1 基本概念4.2 在机器翻译中的应用五、数值优化5.1 优化问题形式化5.2 优化算法5.3 正则化技术六、图…

蓝桥杯手算题和杂题简易做法

一、巧用Excel Excel在解决某些数学问题时非常高效,特别是涉及表格计算、简单统计和可视化分析时。 门牌制作 这道题是一道基础题,只需要判断每个数字有几个2,然后在加起来即可,但是还有更简单的方法,先通过编译器&…

5. 缓存-Redis

文章目录前言一、 介绍1. 简介2. 核心特点二、 应用场景1. 应用场景2. 数据类型作用场景三、 性能特性1. 内存2. 高性能数据结构3. 单线程、多路复用四、 异步持久化机制1. RDB(Redis Database)2. AOF(Append-Only File)3. 持久化…

如何理解Tomcat、Servlet、Catanalina的关系

目录 背景: 结论: 好文-【拓展阅读】: 象漂亮更新动力! 背景: 学习Java的Servlet时,常常说Tomcat是一个容器,我们写ServletA,ServletB,Tomcat容器在启动的时候会读取web.xml或者我们程序中的…

Hive的并行度的优化

对于分布式任务来说,任务执行的并行度十分重要。Hive的底层是MapReduce,所以Hive的并行度优化分为Map端优化和Reduce端优化。(1)、Map端优化Map端的并行度与Map切片数量相关,并行度等于切片数量。一般情况下不用去设置Map端的并行度。以下特殊…

Vue.js 响应接口:深度解析与实践指南

Vue.js 响应接口:深度解析与实践指南 引言 随着前端技术的不断发展,Vue.js 作为一种流行的前端框架,已经成为了众多开发者的首选。Vue.js 的响应式系统是其核心特性之一,它允许开发者轻松实现数据的双向绑定。而响应接口则是Vue.j…

高精度蓝牙定位:技术、应用与未来发展

一、高精度蓝牙定位概述在当今科技飞速发展的时代,定位技术的精度和可靠性变得越来越重要。高精度蓝牙定位作为一种新兴的定位技术,正逐渐崭露头角。蓝牙技术是一种支持设备短距离通信(一般10m内)的无线电技术,能在包括…

C# 基于halcon的视觉工作流-章29-边缘提取-亚像素

C# 基于halcon的视觉工作流-章29-边缘提取-亚像素 本章目标: 一、1edges_sub_pix; 二、threshold_sub_pix;本实例实现过程与章28基本相同,不同处在于提取的边缘是亚像素,精度较高,本文仅介绍不同之处&#…

如何实现PostgreSQL的高可用性,包括主流的复制方案、负载均衡方法以及故障转移流程?

前言 实现 PostgreSQL 的高可用性(High Availability, HA)是一个系统工程,需要结合复制技术、连接路由(负载均衡)、自动故障转移(Failover)以及监控告警。以下是主流方案和关键流程的详细说明&a…

Apache Ignite 生产级的线程池关闭工具方法揭秘

Apache Ignite 中用于 安全、可靠地关闭线程池&#xff08;ExecutorService&#xff09; 的关键逻辑。我们来一步步深入理解它的设计思想和实现细节。&#x1f9f1; 一、核心方法&#xff1a;U.shutdownNow(...) public static void shutdownNow(Class<?> owner, Nullab…

Unity:GUI笔记(一)——文本、按钮、多选框和单选框、输入框和拖动条、图片绘制和框绘制

写在前面&#xff1a;写本系列(自用)的目的是回顾已经学过的知识、记录新学习的知识或是记录心得理解&#xff0c;方便自己以后快速复习&#xff0c;减少遗忘。主要是唐老师的课程。一、重要参数、文本、按钮GUI相关代码需要写在private void OnGUI()中。该函数每帧执行&#x…

wordpress从wp_nav_menu中获取菜单项

从wp_nav_menu中获取菜单项&#xff0c;然后检查这些菜单项是否对应分类(Category)&#xff0c;并输出这些分类的ID。 以下是完整的代码实现&#xff1a; <?php // 获取指定菜单位置的菜单项 $menu_items wp_get_nav_menu_items(wodepress); // wodepress 是菜单位置的名…

第4章 程序段的反复执行2 while语句P128练习题(题及答案)

&#xff08;&#xff08;1&#xff09;阅读程序#include <bits/stdc.h> using namespace std; //汤永红 int main(){int n,s0;cin >> n;while(n){s s * 10 n % 10;n / 10;}cout << s << endl;return 0; }分别输入&#xff1a;0 1024 1234567890输出…