功夫量化
# 功夫官方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
2
注意不要使用 Win64 后缀的 generator,如果遇到如下报错:
CMake Error:
Generator
Visual Studio 15 2017 Win64
does not support platform specification, but platform
x64
was specified.
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
2
3
# 常规编译操作
获取代码并编译:
$ git clone https://github.com/taurusai/kungfu
$ cd kungfu
$ yarn
$ yarn build
2
3
4
编译结果输出在 app/build 目录下,例如在 MacOSX 系统上,最终的可执行文件输出在 app/build/mac/Kungfu.Trader.app。
遇到编译问题需要完整的重新编译时,执行以下命令清理临时文件:
$ yarn clean
# 选择编译模式
功夫默认编译为 Release 模式(-DCMAKE_BUILD_TYPE (opens new window)="Release"),如果希望以 Debug 模式编译,需要执行以下命令:
$ npm config set kungfu-core:buildtype "Debug"
执行以下命令恢复 Release 模式:
$ npm config set kungfu-core:buildtype "Release"
切换编译模式后,需要执行以下命令重新生成配置文件:
$ yarn workspace kungfu-core run configure
# 编译过程产生的临时文件
编译过程会在代码所在目录下生成如下临时文件:
node_modules
build
dist
2
3
通常情况下可通过执行如下命令对 build 和 dist 进行清理:
$ yarn clean
需要注意 node_modules 目录为 npm 产生的包目录,一般情况下无需清除,如有特殊需要可手动删除。
另外,编译过程中会在系统的以下路径产生输出:
$HOME/.cmake-js # cmake.js 存储的 C++ 依赖包
$HOME/.virtualenvs # pipenv(windows) 存储的 Python 依赖
$HOME/.local/share/virtualenvs # pipenv(unix) 存储的 Python 依赖
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"}'
# 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
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
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"
js创建进程的代码
app\shared\utils\processUtils.ts
export const startProcess = async (options: any, no_ext = false)
2
3