我们都知道Python是一个“胶水语言”,可以方便地调用其他的Python脚本、应用或其他语言的程序。
例如我们可以用一个Python脚本来维护我们关注的合约列表,然后当有新合约出现时(比如生猪、尿素、股指期货期权等等),我们只需要更新这一个合约列表脚本,而非更新各个使用了合约列表的程序:
![64b25686064f6900aa20f00d953d6850.png](https://i-blog.csdnimg.cn/blog_migrate/8f477c81deabd727d9859bce6b54b33c.jpeg)
在其他Python脚本中可以这样引用这个合约列表(当文件都在同一目录下时):
![75567ad91f5703e63b7e3e757b9547fc.png](https://i-blog.csdnimg.cn/blog_migrate/cf5b92955ca0dde7e1c42d6d84ad1288.jpeg)
而对于已经储备了许多C++程序(比如一些高性能的计算模块),又不想花时间将其改写为Python脚本的程序员,该如何用Python调用C++程序呢?
我们可以采用以下步骤:
1、下载gcc
以MinGW为例:
MinGW (Minimalist GNU for Windows)提供了一套简单方便的Windows下的基于GCC 程序开发环境。MinGW 收集了一系列免费的Windows 使用的头文件和库文件;同时整合了GNU ( http://www.gnu.org/ )的工具集,特别是GNU 程序开发工具,如经典gcc, g++, make等。MinGW是完全免费的自由软件,它在Windows平台上模拟了Linux下GCC的开发环境,为C++的跨平台开发提供了良好基础支持。
假设系统为win7 X64,下载windows版本 MinGW,下载地址:http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/
下载Download mingw-get-setup.exe (86.5 kB) (注意这是win32 的版本,注意位数应当与已经安装的Python保持一致)
进行安装:
选择默认安装目录 C:\MinGW;
选择安装组件,如果没有出现这个窗口,点击快速启动栏,点击MinGW Installation Manager,一定选上安装The GUN C++ Compiler和The GUN Objectiv-C Compiler。
完成之后退出,将C:\MinGW\bin 添加到环境变量。设置完成后,Windows似乎不会自动更新环境变量,除非重启机子,那么我们可以通过在下面的命令行中,设置一下PATH(比如SET PATH=C:\),然后退出命令行,那么系统环境变量就会被强制刷新。
点击cmd,输入 g++ --version 可以查看编译器版本,则说明MinGW安装成功。
![c462e7207534f14812a2db5562822bae.png](https://i-blog.csdnimg.cn/blog_migrate/a4ee18210f82dbd26dc82714ac689e73.jpeg)
2、编译C++
新建一c++文件:如test1.cpp(这个简单的例子只是输入两个数字,再打印出来)
![e9077b529c598b97665ff2ab53f51cde.png](https://i-blog.csdnimg.cn/blog_migrate/e3632e20e906d0429287f1d0338d174d.jpeg)
在cmd窗口中进入该文件所在目录,输入:
g++ -o test1.so -shared -fPIC test1.cpp
-shared 该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件。
-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。
会生产一个test1.so 动态链接库文件。
用户应注意使用这个方法在windows下编译的so动态链接库文件不能直接在linux下调用。想在linux中调用so文件,需要在linux环境下进行编译。
3、Python调用C++
在Python脚本里添加
![44ada3ffe0b81cffec35060836d12e7c.png](https://i-blog.csdnimg.cn/blog_migrate/0c01429358b25881cb2e7ea52532d851.jpeg)
其中ctypes是Python的一个库,提供和C语言兼容的数据类型,可以很方便地调用C DLL中的函数。
运行以上脚本得到:
![d393b380df5d6bd20c63ce26225a5125.png](https://i-blog.csdnimg.cn/blog_migrate/8c6d1d8be232ea8d7cdbdf9f53460195.jpeg)
显示调用C++程序成功。
采用这个方法,我们不用进行大量的改写,也能在Python中使用我们积累的各种C++程序了。
— — — — — — E N D — — — — — —
往期文章:
Numpy处理tick级别数据技巧
真正赚钱的期权策略曲线是这样的
多品种历史波动率计算
如何实现全市场自动盯盘
AI是怎样看懂研报的
真格量化策略debug秘籍
真格量化对接实盘交易
常见高频交易策略简介
如何用撤单函数改进套利成交
Deque提高处理队列效率
策略编程选Python还是C++
如何用Python继承机制节约代码量
十大机器学习算法
如何调用策略附件数据
如何使用智能单
如何扫描全市场跨月价差
如何筛选策略最适合的品种
活用订单类型规避频繁撤单风险
真格量化回测撮合机制简介
如何调用外部数据
如何处理回测与实盘差别
如何利用趋势必然终结获利
常见量化策略介绍
期权交易“七宗罪”
波动率交易介绍
推高波动率的因素
波动率的预测之道
趋势交易面临挑战
如何构建知识图谱
机器学习就是现代统计学
AI技术在金融行业的应用
如何避免模型过拟合
低延迟交易介绍
架构设计中的编程范式
交易所视角下的套利指令撮合
距离概念与特征识别
气象风险与天气衍生品
设计量化策略的七个“大坑”
云计算在金融行业的应用
机器学习模型评估方法
真格量化制作期权HV-IV价差
另类数据介绍
TensorFlow中的Tensor是什么?
机器学习的经验之谈
用yfinance调用雅虎财经数据
容器技术如何改进交易系统
真格量化可访问:
https://quant.pobo.net.cn
真格量化微信公众号,长按关注:
![bb91a3aac1fed83b81f93237c18c30bc.png](https://i-blog.csdnimg.cn/blog_migrate/5dfcfc121aafbae21a8edff18adc91b4.jpeg)
遇到了技术问题?欢迎加入真格量化Python技术交流QQ群 726895887