Colderleo's blog Colderleo's blog
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)

Colder Leo

热爱代码的打工人
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)
  • 金融量化
gaoliu
2021-10-06
目录

功夫量化

# 功夫官方GitHub上README.md中的编译指导

# windows上开发工具的安装

开发组在 Visual Studio 2017 15.9.14 环境下进行工作,安装时需要勾选 VC140(Visual Studio 2015) toolset。

下载并安装 git (opens new window),Python 3 (opens new window),CMake (opens new window),Node.js LTS 10.15.3 (opens new window) 并添加相应路径至 %PATH% 环境变量。

C:\> npm install -g yarn electron-builder
C:\> pip install pipenv
1
2

注意不要使用 Win64 后缀的 generator,如果遇到如下报错:

CMake Error:
  Generator

    Visual Studio 15 2017 Win64

  does not support platform specification, but platform

    x64

  was specified.
1
2
3
4
5
6
7
8
9
10

需要手动指定 cmake generator 之后重新编译:

npm config set cmake_js_G "Visual Studio 15 2017"
yarn clean
yarn build
1
2
3
# 常规编译操作

获取代码并编译:

$ git clone https://github.com/taurusai/kungfu
$ cd kungfu
$ yarn
$ yarn build
1
2
3
4

编译结果输出在 app/build 目录下,例如在 MacOSX 系统上,最终的可执行文件输出在 app/build/mac/Kungfu.Trader.app。

遇到编译问题需要完整的重新编译时,执行以下命令清理临时文件:

$ yarn clean
1
# 选择编译模式

功夫默认编译为 Release 模式(-DCMAKE_BUILD_TYPE (opens new window)="Release"),如果希望以 Debug 模式编译,需要执行以下命令:

$ npm config set kungfu-core:buildtype "Debug"
1

执行以下命令恢复 Release 模式:

$ npm config set kungfu-core:buildtype "Release"
1

切换编译模式后,需要执行以下命令重新生成配置文件:

$ yarn workspace kungfu-core run configure
1
# 编译过程产生的临时文件

编译过程会在代码所在目录下生成如下临时文件:

node_modules
build
dist
1
2
3

通常情况下可通过执行如下命令对 build 和 dist 进行清理:

$ yarn clean
1

需要注意 node_modules 目录为 npm 产生的包目录,一般情况下无需清除,如有特殊需要可手动删除。

另外,编译过程中会在系统的以下路径产生输出:

$HOME/.cmake-js                     # cmake.js 存储的 C++ 依赖包
$HOME/.virtualenvs                  # pipenv(windows) 存储的 Python 依赖
$HOME/.local/share/virtualenvs      # pipenv(unix) 存储的 Python 依赖
1
2
3

如果需要清理这些文件,都需要手动删除。

# 官方指导安装中可能遇到的错误:

# 下载失败

设置nmp的淘宝源,或者网上搜解决方案。也可能需要设置成国外的源地址

  • 国外的源地址:npm config set registry http://registry.npmjs.org

  • 淘宝源:npm config set registry https://registry.npm.taobao.org

# 提示“Python executable "python2" in the PATH gyp verb which failed Error: not found”。

解决方法:安装python2,将python.exe改名为python2.exe,并将其所在的路径加入环境变量

后面可能会再出现一次类似的错误,找不到python.exe,那么再将python2.exe改回来

# ResolutionFailure:numpy = "==1.16.4"

在项目文件夹内搜索1.16.4,可发现“core\Pipfile”中有numpy = "==1.16.4",将其改成1.16.5或其他满足Resolution的版本。

# 上期CTP模拟账号

account_config

'{"account_id": "161772", "password": "gaoliu725224", "broker_id": "9999", "auth_code": "0000000000000000", "product_info": "KUNGFU", "app_id": "simnow_client_test", "md_uri": "tcp://180.168.146.187:10131", "td_uri": "tcp://180.168.146.187:10130"}'
1

# build相关的文件

core yarn build:cpp

 "build:cpp": "cross-var pipenv run python python/build.py --build_type $npm_package_config_buildtype -l $npm_package_config_loglevel --arch $npm_package_config_arch --runtime $npm_package_config_runtime --node_version $npm_package_config_node --electron_version $npm_package_config_electron make",

onfig_node --electron_version $npm_package_config_electron make",

pipenv run python python/build.py --build_type Release -l trace --arch x64 --runtime electron --node_version 10.16.0 --electron_version 4.2.11 make

npm_package_config_buildtype=Release
npm_package_config_loglevel=trace
npm_package_config_arch=x64
npm_package_config_runtime=electron
npm_package_config_node=10.16.0
npm_package_config_electron=4.2.11

1
2
3
4
5
6
7
8
9
10
11
12
13

# 项目架构

  • 功夫前端是vue + electron, 前端electron运行与node.js上,node.js中通过pm2调用kfc.exe创建进程

  • kfc.exe是通过pyinstaller将python打包得到的,不运行kfc.exe,直接运行core/python dev_run.py也是一样效果。

  • 后台核心是c++编写的,通过pybind11编译成pyd文件(python模块),供python调用。

# 通过python_dev调用kfc(kungfu-core)

用非打包的python脚本运行功夫中台

cd kungfu
cd core/python

# 激活pipenv的python虚拟环境
pipenv shell

# 创建master主进程 -l trace是log等级
python dev_run.py -l trace master

# 创建TradeData交易进程 161772是账户名
python dev_run.py -l trace td -s ctp -a 161772

# 完整路径调用
C:\Users\gaoliu\.virtualenvs\core-4QtN55Bn\Scripts\python.exe E:\gaoliu\mycode\kungfu\core\python\dev_run.py -l trace td -s ctp -a 161772
1
2
3
4
5
6
7
8
9
10
11
12
13
14

extensions.ctp.kfext_ctp.TD

通过python dev_run调用策略:

python dev_run.py strategy --path "E:\gaoliu\mycode\kungfu\examples\strategy\py\strategy_demo.py" --name "strategy_demo"
1

js创建进程的代码

app\shared\utils\processUtils.ts

export const startProcess = async (options: any, no_ext = false)
1
2
3
编辑 (opens new window)
上次更新: 2023/05/07, 17:27:54
最近更新
01
通过模板实现结构体成员拷贝-按成员名匹配
05-07
02
c++17通过模板获取类成员的个数
05-01
03
avx-sse切换惩罚
04-30
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Colder Leo | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×