{"id":19151792,"url":"https://github.com/zhs007/tradingcore2","last_synced_at":"2025-05-07T05:42:30.454Z","repository":{"id":50845435,"uuid":"245582488","full_name":"zhs007/tradingcore2","owner":"zhs007","description":"这是一个轻量级分布式交易内核项目","archived":false,"fork":false,"pushed_at":"2021-05-28T14:16:38.000Z","size":25919,"stargazers_count":8,"open_issues_count":18,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-19T19:05:08.604Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zhs007.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-03-07T06:43:07.000Z","updated_at":"2024-10-24T07:30:39.000Z","dependencies_parsed_at":"2022-09-10T19:42:21.446Z","dependency_job_id":null,"html_url":"https://github.com/zhs007/tradingcore2","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhs007%2Ftradingcore2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhs007%2Ftradingcore2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhs007%2Ftradingcore2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhs007%2Ftradingcore2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zhs007","download_url":"https://codeload.github.com/zhs007/tradingcore2/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252823671,"owners_count":21809707,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T08:15:42.724Z","updated_at":"2025-05-07T05:42:30.434Z","avatar_url":"https://github.com/zhs007.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TradingCore2\n\n这是一个轻量级分布式交易内核项目。  \n\n服务稳定，适合长时间多节点运算。  \n10年日数据级别的策略运算（远程拉取数据+各种Indicator实时计算），单核基本上1s内能完成。  \n如果策略复杂，十万甚至百万级别的任务量，耗时几乎都是用天来计算了（十万级单核就要1天多了），如果没有分布式或离线运算，将是一件非常痛苦的事情。\n在线上，有一套近60核的环境已经稳定运行数月。  \n\nC++做运算，Golang做分发，Python做分析。\n\n之所以用c++写，除了效率考虑外，主要是因为后期扩展方便（可以很方便的给别的语言用）。  \n\n至于轻量级，是因为尽可能的少写了框架性代码，更多的精力放在功能上。  \n然后，就是避免大量使用template了（只在必须用的时候才用，其实还是懒......）。  \n不为不必要的需求买单。\n\n作为交易内核，主要用途其实就3个：\n\n1. 底层算法实现，包括各种indicator、各种数据转换、数据清洗等。\n2. 策略分析用的计算节点，用于分布式训练策略。  \n默认情况下会将节点cpu占满，建议``tasknums``配置为-1，这样会保留一个cpu内核出来。  \n如果运算节点对cpu占用有较高要求（不允许长时间满负载运行），还可以配置``tasktimeoff``，这个是任意2个task之间最小时间间隔，单位为ms，可以自行尝试合适的配置。  \n如果外网节点，希望防止运算节点被别人滥用，可以配置有效``tokens``。\n3. 实盘运算节点，支持分布式运算，提供实盘交易信号。\n\n# Build \u0026 Test\n\n不管是不是开发环境，都需要先初始化依赖。\n\n``` bash\ngit submodule init\ngit submodule update --recursive\ngit submodule update --init --recursive\n\nsh buildgoogletest.sh\n\nsh buildgsl.sh\n\nsh fixgrpc.sh\n\nsh buildgrpc.sh\n\nsh buildglog.sh\n\nsh buildgflags.sh\n\nsh buildrocksdb.sh\n\nsh buildyamlcpp.sh\n```\n\n也可以直接执行 ``sh initdeps.sh`` 。\n\n本项目编译方法如下：\n\n``` bash\nmkdir build\ncd build\ncmake ..\nmake\n```\n\n编译完成后，可以执行测试用例（直接在build目录下执行即可）。\n\n``` bash\n./tests/tests\n```\n\n# Docker\n\n如果你只想部署训练节点，可以看[这里](https://github.com/zhs007/dockerscripts/tree/master/tc2)。  \n这是一个用于快速部署的脚本，不需要编译，镜像大小仅27MB。  \n且自动同步master分支最新版（``dockerhub``的build非常慢，和``github``代码发布大概有1小时以上的延迟）。\n\n除非是开发环境，否则我们建议直接使用docker来部署。  \n所以我们提供了Dockerfile，可以一键编译部署。\n\n```\ndocker build -t tradingcore2 .\n```\n\n因为这是一个完整的编译环境，所以依赖较多，编译过程较长。  \n但最终build好以后，是个server的运行版，容量较小（27MB）。\n\n除了普通的dockerfile外，我们还提供了：\n\n- dev版，预装了``valgrind``，可以很方便的调试内存泄露等。  \n\n``` sh\nvalgrind --tool=memcheck --leak-check=full --show-reachable=yes ./tradingcore2\n```\n\n- gtest版，这个会自动执行单元测试，我们项目的``github``的``workflows``会执行。\n\n# 项目用途\n\n1. 策略训练\u0026回测。\n2. 各种indicator的实现。\n3. 各种数据的清洗和处理。\n4. 通过``grpc``来做分布运算。\n5. 配合``Ada``做图表。\n6. 通过``tradingdb2``读写数据，维护数据。\n7. 配合``Jupyter``做策略分析。\n\n# TradingDB2\n\nv0.3版开始，数据读取支持 ``tradingdb2`` 。\n配置如下：\n\n``` yaml\ntrdb2serv: 127.0.0.1:5002\ntrdb2token: 1234567\n```\n\n# 注意事项\n\n- 不要直接下载代码包来build，需要``git clone``才行，因为有一些``git submodule``，代码包缺少信息，会``build``失败。\n- ``zlib`` 项目如果手动 ``build`` 时，会删除一个文件，所以很容易在项目提交时，造成 ``submodule dirty`` 。\n- ``rocksdb`` 项目有很多依赖需要手动装，现在全部添加了 ``submodule`` ，不用手动装官方install文档里的那些依赖了。\n- ``cmake`` 对link项目顺序有要求，要先add直接的依赖项目，再add依赖的依赖。\n- 基于 ``buildpack-deps:stretch`` 编译出来的项目，不能放在 ``alpine`` 里运行，可以放 ``debian:stretch-slim`` 里。\n- 感觉在mac下或linux下，编译时都没办法用到多核，所以编译很慢。\n- 修改某些配置后，``cmake`` 的 ``submodule`` 会重新编译，如果大量的依赖库也要重新编译的话，就非常慢了，所以后期调整了策略，依赖库尽可能放 ``initdeps.sh`` 里编译（在``vscode``的``dev container``里，``initdeps.sh``需要``sudo``执行）。\n- ``grpc``的依赖非常多，最麻烦的是 ``absl`` 还是分目录的库，估计有几十个，如果不是直接``cmake``的``submodule``的话，很多依赖得自己一个个加，很折腾。\n- ~~``dockerhub``编译本项目会报错，直接拿``Dockerfile``编译都会报错，但在``github``和本地环境或其它云服务器上编译都没问题，复测一遍需要1个多小时，所以最终放弃在``dockerhub``上编译发布了。~~（已修正）\n- 尽量用本项目提供的``dev container``配置开发，不需要安装其它依赖。\n\n# 更新日志\n\n### v0.7\n\n- 支持实盘策略。\n- 需要和``tradingdb``v0.6以上版本配合使用。\n- 支持更多的交易所规则。\n- 支持更多的交易指标（Indicator）。\n- 进一步的效率优化。\n\n### v0.6\n\n- 移除``trnode2``节点的server模式。（本版本依然兼容server模式，计划在v0.7彻底移除）\n\n### v0.5\n\n- 重新调整``grpc``协议，和 ``tradingdb2`` 进一步融合。\n- 新的运算节点架构 ``tradingnode2``。\n- 结构大幅重构，基本可以通过参数配置出各种复杂策略。\n- 支持定投策略。\n- 支持集群配合``tradingdb2``，可使用``jupyter``直接研究策略。\n\n### v0.3\n\n- 支持基金的数据计算。\n- 支持``tradingdb2``数据源。\n\n### v0.2\n\n- 优化编译流程，提升开发环境下编译速度。\n\n### v0.1\n\n- 完成基本结构。\n- 能进行分布式的训练。","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhs007%2Ftradingcore2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzhs007%2Ftradingcore2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhs007%2Ftradingcore2/lists"}