CTP Python API及Demo(利用Swig 封装)Windows版(6.6.1traderapi)

  1. 环境:visual studio2015、python3.9、
    参考的是景色大神的教程自己制作,因为直接用它编译好的无法使用,遂自己编译。
  • 从CTP官网上下载CTP API点击下载。这里用的版本是v6.6.1_P1_tradeapi,想使用不同的版本下载即可:
    在这里插入图片描述
    在这里插入图片描述
  • 安装Swig软件,本文中所用的Swig是swigwin-4.0.2版本,点击下载。下载后解压,将swig路径添加到环境变量中。
  • 安装python,注意要安装64位版本,将环境变量配置好。本文所用的是3.9版本。
  1. 通过Swig得到python接口文件
    在刚刚下载得到的API文件夹20210406_tradeapi64_se_windows内,新建文件thosttraderapi.i,内容如下:
%module(directors="1") thosttraderapi 
%{ 
#include "ThostFtdcTraderApi.h"
#include <codecvt>
#include <locale>
#include <vector>
#include <string>
using namespace std;
#ifdef _MSC_VER
const static locale g_loc("zh-CN");
#else    
const static locale g_loc("zh_CN.GB18030");
#endif
%}
 
%typemap(out) char[ANY], char[] {
    const std::string &gb2312($1);
    std::vector<wchar_t> wstr(gb2312.size());
    wchar_t* wstrEnd = nullptr;
    const char* gbEnd = nullptr;
    mbstate_t state = {};
    int res = use_facet<codecvt<wchar_t, char, mbstate_t> >
        (g_loc).in(state,
            gb2312.data(), gb2312.data() + gb2312.size(), gbEnd,
            wstr.data(), wstr.data() + wstr.size(), wstrEnd);
 
    if (codecvt_base::ok == res)
    {
        wstring_convert<codecvt_utf8<wchar_t>> cutf8;
        std::string result = cutf8.to_bytes(wstring(wstr.data(), wstrEnd));       
        resultobj = SWIG_FromCharPtrAndSize(result.c_str(), result.size()); 
    }
    else
    {
        std::string result;
        resultobj = SWIG_FromCharPtrAndSize(result.c_str(), result.size()); 
    }
}
%feature("director") CThostFtdcTraderSpi; 
%ignore THOST_FTDC_VTC_BankBankToFuture;
%ignore THOST_FTDC_VTC_BankFutureToBank;
%ignore THOST_FTDC_VTC_FutureBankToFuture;
%ignore THOST_FTDC_VTC_FutureFutureToBank;
%ignore THOST_FTDC_FTC_BankLaunchBankToBroker;
%ignore THOST_FTDC_FTC_BrokerLaunchBankToBroker;
%ignore THOST_FTDC_FTC_BankLaunchBrokerToBank;
%ignore THOST_FTDC_FTC_BrokerLaunchBrokerToBank;  
%feature("director") CThostFtdcTraderSpi; 
%include "ThostFtdcUserApiDataType.h"
%include "ThostFtdcUserApiStruct.h" 
%include "ThostFtdcTraderApi.h"

这是一个接口文件,用于告诉swig为哪些类和方法创建接口。打开windows cmd工具,cd到当前目录20210406_tradeapi64_se_windows下。 在cmd中运行命令:

swig -threads -py3 -c++ -python thosttraderapi.i

等到运行完成后,可以看到当前目录下新增了以下文件:
在这里插入图片描述
.h和.cx文件是用于包装原来C++接口的文件,下面要用。.py文件是python调用方法的接口文件。

  1. 通过C++得到python可调用的pyd动态库
    在当前文件夹下建立一个C++工程,工程的应用程序类型选DLL,工程名为_thosttraderapi需要注意几点:1)工程建64位dll类型,2)运行库选多线程(/MT)。然后将如下文件拷贝到_thosttraderapi\文件夹下:
    在这里插入图片描述
    在这里插入图片描述
    在c++工程中添加现有项,将这些文件全部添加到工程中去。下面还要做几步:
  • 将你安装的python下include文件夹的路径添加至C++附加包含目录。我的路径是C:\Python37\include;,C++附加包含目录在工程-属性-配置属性-c/c++处。
  • 将你安装的python中python37.lib添加至工程附加依赖项中。我的lib路径是C:\Python37\libs\python37.lib;,附加依赖项在工程-属性-配置属性-链接器-输入处。
  • 在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    项目文件如下:
    在这里插入图片描述
    这样全部完成之后,选择Release版本,编译,在_thosttraderapi\Release目录底下可见_thosttraderapi.dll动态库文件,说明编译成功,将其重命名为_thosttraderapi.pyd,这样CTP Python API就编译成功了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值