Merge pull request #1628 from vnpy/femas

Femas
This commit is contained in:
vn.py 2019-04-24 14:17:14 +08:00 committed by GitHub
commit c6c72053df
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 71 additions and 3817 deletions

View File

@ -7,7 +7,8 @@ from vnpy.trader.ui import MainWindow, create_qapp
from vnpy.gateway.bitmex import BitmexGateway
from vnpy.gateway.futu import FutuGateway
from vnpy.gateway.ib import IbGateway
from vnpy.gateway.ctp import CtpGateway
#from vnpy.gateway.ctp import CtpGateway
from vnpy.gateway.femas import FemasGateway
from vnpy.gateway.tiger import TigerGateway
from vnpy.gateway.oes import OesGateway
from vnpy.gateway.okex import OkexGateway
@ -29,7 +30,8 @@ def main():
event_engine = EventEngine()
main_engine = MainEngine(event_engine)
main_engine.add_gateway(CtpGateway)
# main_engine.add_gateway(CtpGateway)
main_engine.add_gateway(FemasGateway)
main_engine.add_gateway(IbGateway)
main_engine.add_gateway(FutuGateway)
main_engine.add_gateway(BitmexGateway)

Binary file not shown.

Binary file not shown.

View File

@ -1,206 +0,0 @@
/////////////////////////////////////////////////////////////////////////
///@system 风控前置系统
///@company 上海金融期货信息技术有限公司
///@file USTPFtdcMduserApi.h
///@brief 定义了客户端接口
///@history
///20130520 徐忠华 创建该文件
/////////////////////////////////////////////////////////////////////////
#if !defined(USTP_FTDCMDUSERAPI_H)
#define USTP_FTDCMDUSERAPI_H
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "USTPFtdcUserApiStruct.h"
#if defined(ISLIB) && defined(WIN32)
#ifdef LIB_MDUSER_API_EXPORT
#define MDUSER_API_EXPORT __declspec(dllexport)
#else
#define MDUSER_API_EXPORT __declspec(dllimport)
#endif
#else
#define MDUSER_API_EXPORT
#endif
class CUstpFtdcMduserSpi
{
public:
///当客户端与交易后台建立起通信连接时(还未登录前),该方法被调用。
virtual void OnFrontConnected(){};
///当客户端与交易后台通信连接断开时该方法被调用。当发生这个情况后API会自动重新连接客户端可不做处理。
///@param nReason 错误原因
/// 0x1001 网络读失败
/// 0x1002 网络写失败
/// 0x2001 接收心跳超时
/// 0x2002 发送心跳失败
/// 0x2003 收到错误报文
virtual void OnFrontDisconnected(int nReason){};
///心跳超时警告。当长时间未收到报文时,该方法被调用。
///@param nTimeLapse 距离上次接收报文的时间
virtual void OnHeartBeatWarning(int nTimeLapse){};
///报文回调开始通知。当API收到一个报文后首先调用本方法然后是各数据域的回调最后是报文回调结束通知。
///@param nTopicID 主题代码(如私有流、公共流、行情流等)
///@param nSequenceNo 报文序号
virtual void OnPackageStart(int nTopicID, int nSequenceNo){};
///报文回调结束通知。当API收到一个报文后首先调用报文回调开始通知然后是各数据域的回调最后调用本方法。
///@param nTopicID 主题代码(如私有流、公共流、行情流等)
///@param nSequenceNo 报文序号
virtual void OnPackageEnd(int nTopicID, int nSequenceNo){};
///错误应答
virtual void OnRspError(CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///风控前置系统用户登录应答
virtual void OnRspUserLogin(CUstpFtdcRspUserLoginField *pRspUserLogin, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///用户退出应答
virtual void OnRspUserLogout(CUstpFtdcRspUserLogoutField *pRspUserLogout, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///深度行情通知
virtual void OnRtnDepthMarketData(CUstpFtdcDepthMarketDataField *pDepthMarketData) {};
///订阅合约的相关信息
virtual void OnRspSubMarketData(CUstpFtdcSpecificInstrumentField *pSpecificInstrument, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///退订合约的相关信息
virtual void OnRspUnSubMarketData(CUstpFtdcSpecificInstrumentField *pSpecificInstrument, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///获取行情主题信息应答
virtual void OnRspGetMarketTopic(CUstpFtdcRspMarketTopicField *pRspMarketTopic, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///获取行情快照应答
virtual void OnRspGetMarketData(CUstpFtdcRspDepthMarketDataField *pRspDepthMarketData, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
};
class MDUSER_API_EXPORT CUstpFtdcMduserApi
{
public:
///创建MduserApi
///@param pszFlowPath 存贮订阅信息文件的目录,默认为当前目录
///@return 创建出的UserApi
static CUstpFtdcMduserApi *CreateFtdcMduserApi(const char *pszFlowPath = "");
///获取系统版本号
///@param nMajorVersion 主版本号
///@param nMinorVersion 子版本号
///@return 系统标识字符串
static const char *GetVersion(int &nMajorVersion, int &nMinorVersion);
///删除接口对象本身
///@remark 不再使用本接口对象时,调用该函数删除接口对象
virtual void Release() = 0;
///初始化
///@remark 初始化运行环境,只有调用后,接口才开始工作
virtual void Init() = 0;
///等待接口线程结束运行
///@return 线程退出代码
virtual int Join() = 0;
/// 是否使用多播方式接收行情
/// @param bUseMulti 默认为false表示不使用多播接收行情
/// @remark 如果使用多播,则无需登录,也使用不了需要登录才能使用的接口
virtual void SetUseMultiChannel(bool bUseMulti = false) = 0;
///注册多播通道
///@param pMultiChannel 多播通道地址地址,
///@remark 网络地址的例子”multi://172.25.125@232.0.0.1:5131”。
///@remark “multi”代表使用多播传输“172.25.125”用来确定接收多播的网卡”232.0.0.1:5131”代表多播通道及端口。
///@remark 可以多次调用,注册多个通道,接收多个通道中速度最优的行情
virtual void RegisterMultiChannel(const char *pMultiChannel) = 0;
///获取当前交易日
///@retrun 获取到的交易日
///@remark 只有登录成功后,才能得到正确的交易日
virtual const char *GetTradingDay() = 0;
///注册前置机网络地址
///@param pszFrontAddress前置机网络地址。
///@remark 网络地址的格式为“protocol://ipaddress:port””tcp://127.0.0.1:17001”。
///@remark “tcp”代表传输协议“127.0.0.1”代表服务器地址。”17001”代表服务器端口号。
virtual void RegisterFront(char *pszFrontAddress) = 0;
///注册名字服务器网络地址
///@param pszNsAddress名字服务器网络地址。
///@remark 网络地址的格式为“protocol://ipaddress:port””tcp://127.0.0.1:12001”。
///@remark “tcp”代表传输协议“127.0.0.1”代表服务器地址。”12001”代表服务器端口号。
///@remark RegisterFront优先于RegisterNameServer
virtual void RegisterNameServer(char *pszNsAddress) = 0;
///注册回调接口
///@param pSpi 派生自回调接口类的实例
virtual void RegisterSpi(CUstpFtdcMduserSpi *pSpi) = 0;
///加载证书
///@param pszCertFileName 用户证书文件名
///@param pszKeyFileName 用户私钥文件名
///@param pszCaFileName 可信任CA证书文件名
///@param pszKeyFilePassword 用户私钥文件密码
///@return 0 操作成功
///@return -1 可信任CA证书载入失败
///@return -2 用户证书载入失败
///@return -3 用户私钥载入失败
///@return -4 用户证书校验失败
virtual int RegisterCertificateFile(const char *pszCertFileName, const char *pszKeyFileName,
const char *pszCaFileName, const char *pszKeyFilePassword) = 0;
///订阅市场行情。
///@param nTopicID 市场行情主题
///@param nResumeType 市场行情重传方式
/// USTP_TERT_RESTART:从本交易日开始重传
/// USTP_TERT_RESUME:从上次收到的续传(非订阅全部合约时,不支持续传模式)
/// USTP_TERT_QUICK:先传送当前行情快照,再传送登录后市场行情的内容
///@remark 该方法要在Init方法前调用。若不调用则不会收到私有流的数据。
virtual void SubscribeMarketDataTopic(int nTopicID, USTP_TE_RESUME_TYPE nResumeType) = 0;
///订阅合约行情。
///@param ppInstrumentID 合约ID
///@param nCount 要订阅/退订行情的合约个数
///@remark
virtual int SubMarketData(char *ppInstrumentID[], int nCount)=0;
///退订合约行情。
///@param ppInstrumentID 合约ID
///@param nCount 要订阅/退订行情的合约个数
///@remark
virtual int UnSubMarketData(char *ppInstrumentID[], int nCount)=0;
///获取行情订阅号。
///@param *ppExchangeID 合约ID
///@param nCount 要获取行情订阅号的交易所个数
///@remark
virtual int GetMarketTopic(char *pExchangeID)=0;
///获取行情快照。
///@param *ppExchangeID 交易所ID
///@param ppInstrumentID 合约ID
///@param nCount 要获取行情订阅号的交易所个数
///@remark
virtual int GetMarketData(char *pExchangeID, char *pInstrumentID) = 0;
///设置心跳超时时间。
///@param timeout 心跳超时时间(秒)
virtual void SetHeartbeatTimeout(unsigned int timeout) = 0;
///风控前置系统用户登录请求
virtual int ReqUserLogin(CUstpFtdcReqUserLoginField *pReqUserLogin, int nRequestID) = 0;
///用户退出请求
virtual int ReqUserLogout(CUstpFtdcReqUserLogoutField *pReqUserLogout, int nRequestID) = 0;
protected:
~CUstpFtdcMduserApi(){};
};
#endif

View File

@ -1,409 +0,0 @@
/////////////////////////////////////////////////////////////////////////
///@system 风控前置系统
///@company CFFEX
///@file USTPFtdcTraderApi.h
///@brief 定义了客户端接口
///@history
///20130520 佘鹏飞 创建该文件
/////////////////////////////////////////////////////////////////////////
#if !defined(USTP_FTDCTRADERAPI_H)
#define USTP_FTDCTRADERAPI_H
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "USTPFtdcUserApiStruct.h"
#if defined(ISLIB) && defined(WIN32)
#ifdef LIB_TRADER_API_EXPORT
#define TRADER_API_EXPORT __declspec(dllexport)
#else
#define TRADER_API_EXPORT __declspec(dllimport)
#endif
#else
#define TRADER_API_EXPORT
#endif
class CUstpFtdcTraderSpi
{
public:
///当客户端与交易后台建立起通信连接时(还未登录前),该方法被调用。
virtual void OnFrontConnected(){};
virtual void OnQryFrontConnected(){};
///当客户端与交易后台通信连接断开时该方法被调用。当发生这个情况后API会自动重新连接客户端可不做处理。
///@param nReason 错误原因
/// 0x1001 网络读失败
/// 0x1002 网络写失败
/// 0x2001 接收心跳超时
/// 0x2002 发送心跳失败
/// 0x2003 收到错误报文
virtual void OnFrontDisconnected(int nReason){};
virtual void OnQryFrontDisconnected(int nReason){};
///心跳超时警告。当长时间未收到报文时,该方法被调用。
///@param nTimeLapse 距离上次接收报文的时间
virtual void OnHeartBeatWarning(int nTimeLapse){};
///报文回调开始通知。当API收到一个报文后首先调用本方法然后是各数据域的回调最后是报文回调结束通知。
///@param nTopicID 主题代码(如私有流、公共流、行情流等)
///@param nSequenceNo 报文序号
virtual void OnPackageStart(int nTopicID, int nSequenceNo){};
///报文回调结束通知。当API收到一个报文后首先调用报文回调开始通知然后是各数据域的回调最后调用本方法。
///@param nTopicID 主题代码(如私有流、公共流、行情流等)
///@param nSequenceNo 报文序号
virtual void OnPackageEnd(int nTopicID, int nSequenceNo){};
///错误应答
virtual void OnRspError(CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///风控前置系统用户登录应答
virtual void OnRspUserLogin(CUstpFtdcRspUserLoginField *pRspUserLogin, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///用户退出应答
virtual void OnRspUserLogout(CUstpFtdcRspUserLogoutField *pRspUserLogout, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///用户密码修改应答
virtual void OnRspUserPasswordUpdate(CUstpFtdcUserPasswordUpdateField *pUserPasswordUpdate, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///报单录入应答
virtual void OnRspOrderInsert(CUstpFtdcInputOrderField *pInputOrder, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///报单操作应答
virtual void OnRspOrderAction(CUstpFtdcOrderActionField *pOrderAction, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///报价录入应答
virtual void OnRspQuoteInsert(CUstpFtdcInputQuoteField *pInputQuote, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///报价操作应答
virtual void OnRspQuoteAction(CUstpFtdcQuoteActionField *pQuoteAction, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///询价请求应答
virtual void OnRspForQuote(CUstpFtdcReqForQuoteField *pReqForQuote, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///客户申请组合应答
virtual void OnRspMarginCombAction(CUstpFtdcInputMarginCombActionField *pInputMarginCombAction, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///用户请求出入金应答
virtual void OnRspUserDeposit(CUstpFtdcstpUserDepositField *pstpUserDeposit, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///用户主次席出入金应答
virtual void OnRspTransferMoney(CUstpFtdcstpTransferMoneyField *pstpTransferMoney, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///数据流回退通知
virtual void OnRtnFlowMessageCancel(CUstpFtdcFlowMessageCancelField *pFlowMessageCancel) {};
///成交回报
virtual void OnRtnTrade(CUstpFtdcTradeField *pTrade) {};
///报单回报
virtual void OnRtnOrder(CUstpFtdcOrderField *pOrder) {};
///报单录入错误回报
virtual void OnErrRtnOrderInsert(CUstpFtdcInputOrderField *pInputOrder, CUstpFtdcRspInfoField *pRspInfo) {};
///报单操作错误回报
virtual void OnErrRtnOrderAction(CUstpFtdcOrderActionField *pOrderAction, CUstpFtdcRspInfoField *pRspInfo) {};
///合约交易状态通知
virtual void OnRtnInstrumentStatus(CUstpFtdcInstrumentStatusField *pInstrumentStatus) {};
///账户出入金回报
virtual void OnRtnInvestorAccountDeposit(CUstpFtdcInvestorAccountDepositResField *pInvestorAccountDepositRes) {};
///报价回报
virtual void OnRtnQuote(CUstpFtdcRtnQuoteField *pRtnQuote) {};
///报价录入错误回报
virtual void OnErrRtnQuoteInsert(CUstpFtdcInputQuoteField *pInputQuote, CUstpFtdcRspInfoField *pRspInfo) {};
///报价撤单错误回报
virtual void OnErrRtnQuoteAction(CUstpFtdcQuoteActionField *pQuoteAction, CUstpFtdcRspInfoField *pRspInfo) {};
///询价回报
virtual void OnRtnForQuote(CUstpFtdcReqForQuoteField *pReqForQuote) {};
///增加组合规则通知
virtual void OnRtnMarginCombinationLeg(CUstpFtdcMarginCombinationLegField *pMarginCombinationLeg) {};
///客户申请组合确认
virtual void OnRtnMarginCombAction(CUstpFtdcInputMarginCombActionField *pInputMarginCombAction) {};
///用户请求出入金
virtual void OnRtnUserDeposit(CUstpFtdcstpUserDepositField *pstpUserDeposit) {};
///查询前置系统用户登录应答
virtual void OnRspQueryUserLogin(CUstpFtdcRspUserLoginField *pRspUserLogin, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///报单查询应答
virtual void OnRspQryOrder(CUstpFtdcOrderField *pOrder, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///成交单查询应答
virtual void OnRspQryTrade(CUstpFtdcTradeField *pTrade, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///可用投资者账户查询应答
virtual void OnRspQryUserInvestor(CUstpFtdcRspUserInvestorField *pRspUserInvestor, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///交易编码查询应答
virtual void OnRspQryTradingCode(CUstpFtdcRspTradingCodeField *pRspTradingCode, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///投资者资金账户查询应答
virtual void OnRspQryInvestorAccount(CUstpFtdcRspInvestorAccountField *pRspInvestorAccount, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///合约查询应答
virtual void OnRspQryInstrument(CUstpFtdcRspInstrumentField *pRspInstrument, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///交易所查询应答
virtual void OnRspQryExchange(CUstpFtdcRspExchangeField *pRspExchange, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///投资者持仓查询应答
virtual void OnRspQryInvestorPosition(CUstpFtdcRspInvestorPositionField *pRspInvestorPosition, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///合规参数查询应答
virtual void OnRspQryComplianceParam(CUstpFtdcRspComplianceParamField *pRspComplianceParam, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///投资者手续费率查询应答
virtual void OnRspQryInvestorFee(CUstpFtdcInvestorFeeField *pInvestorFee, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///投资者保证金率查询应答
virtual void OnRspQryInvestorMargin(CUstpFtdcInvestorMarginField *pInvestorMargin, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///交易编码组合持仓查询应答
virtual void OnRspQryInvestorCombPosition(CUstpFtdcRspInvestorCombPositionField *pRspInvestorCombPosition, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///交易编码单腿持仓查询应答
virtual void OnRspQryInvestorLegPosition(CUstpFtdcRspInvestorLegPositionField *pRspInvestorLegPosition, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///合约组信息查询应答
virtual void OnRspQryInstrumentGroup(CUstpFtdcRspInstrumentGroupField *pRspInstrumentGroup, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///组合保证金类型查询应答
virtual void OnRspQryClientMarginCombType(CUstpFtdcRspClientMarginCombTypeField *pRspClientMarginCombType, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///行权录入应答
virtual void OnRspExecOrderInsert(CUstpFtdcInputExecOrderField *pInputExecOrder, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///行权操作应答
virtual void OnRspExecOrderAction(CUstpFtdcInputExecOrderActionField *pInputExecOrderAction, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
///行权通知
virtual void OnRtnExecOrder(CUstpFtdcExecOrderField *pExecOrder) {};
///行权录入错误回报
virtual void OnErrRtnExecOrderInsert(CUstpFtdcInputExecOrderField *pInputExecOrder, CUstpFtdcRspInfoField *pRspInfo) {};
///行权操作错误回报
virtual void OnErrRtnExecOrderAction(CUstpFtdcInputExecOrderActionField *pInputExecOrderAction, CUstpFtdcRspInfoField *pRspInfo) {};
///主次席资金同步通知
virtual void OnRtnTransferMoney(CUstpFtdcSyncMoneyTransferField *pSyncMoneyTransfer) {};
///系统时间查询应答
virtual void OnRspQrySystemTime(CUstpFtdcRspQrySystemTimeField *pRspQrySystemTime, CUstpFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};
};
class TRADER_API_EXPORT CUstpFtdcTraderApi
{
public:
///创建TraderApi
///@param pszFlowPath 存贮订阅信息文件的目录,默认为当前目录
///@return 创建出的UserApi
static CUstpFtdcTraderApi *CreateFtdcTraderApi(const char *pszFlowPath = "");
///获取系统版本号
///@param nMajorVersion 主版本号
///@param nMinorVersion 子版本号
///@return 系统标识字符串
static const char *GetVersion(int &nMajorVersion, int &nMinorVersion);
///删除接口对象本身
///@remark 不再使用本接口对象时,调用该函数删除接口对象
virtual void Release() = 0;
///初始化
///@remark 初始化运行环境,只有调用后,接口才开始工作
virtual void Init() = 0;
///等待接口线程结束运行
///@return 线程退出代码
virtual int Join() = 0;
///获取当前交易日
///@retrun 获取到的交易日
///@remark 只有登录成功后,才能得到正确的交易日
virtual const char *GetTradingDay() = 0;
///注册前置机网络地址
///@param pszFrontAddress前置机网络地址。
///@remark 网络地址的格式为“protocol://ipaddress:port””tcp://127.0.0.1:17001”。
///@remark “tcp”代表传输协议“127.0.0.1”代表服务器地址。”17001”代表服务器端口号。
virtual void RegisterFront(char *pszFrontAddress) = 0;
virtual void RegisterQryFront(char *pszFrontAddress) = 0;
///注册名字服务器网络地址
///@param pszNsAddress名字服务器网络地址。
///@remark 网络地址的格式为“protocol://ipaddress:port””tcp://127.0.0.1:12001”。
///@remark “tcp”代表传输协议“127.0.0.1”代表服务器地址。”12001”代表服务器端口号。
///@remark RegisterFront优先于RegisterNameServer
virtual void RegisterNameServer(char *pszNsAddress) = 0;
///注册回调接口
///@param pSpi 派生自回调接口类的实例
virtual void RegisterSpi(CUstpFtdcTraderSpi *pSpi) = 0;
///加载证书
///@param pszCertFileName 用户证书文件名
///@param pszKeyFileName 用户私钥文件名
///@param pszCaFileName 可信任CA证书文件名
///@param pszKeyFilePassword 用户私钥文件密码
///@return 0 操作成功
///@return -1 可信任CA证书载入失败
///@return -2 用户证书载入失败
///@return -3 用户私钥载入失败
///@return -4 用户证书校验失败
virtual int RegisterCertificateFile(const char *pszCertFileName, const char *pszKeyFileName,
const char *pszCaFileName, const char *pszKeyFilePassword) = 0;
///订阅私有流。
///@param nResumeType 私有流重传方式
/// USTP_TERT_RESTART:从本交易日开始重传
/// USTP_TERT_RESUME:从上次收到的续传
/// USTP_TERT_QUICK:只传送登录后私有流的内容
///@remark 该方法要在Init方法前调用。若不调用则不会收到私有流的数据。
virtual void SubscribePrivateTopic(USTP_TE_RESUME_TYPE nResumeType) = 0;
///订阅公共流。
///@param nResumeType 公共流重传方式
/// USTP_TERT_RESTART:从本交易日开始重传
/// USTP_TERT_RESUME:从上次收到的续传
/// USTP_TERT_QUICK:只传送登录后公共流的内容
///@remark 该方法要在Init方法前调用。若不调用则不会收到公共流的数据。
virtual void SubscribePublicTopic(USTP_TE_RESUME_TYPE nResumeType) = 0;
///订阅交易员流。
///@param nResumeType 交易员流重传方式
/// USTP_TERT_RESTART:从本交易日开始重传
/// USTP_TERT_RESUME:从上次收到的续传
/// USTP_TERT_QUICK:只传送登录后交易员流的内容
///@remark 该方法要在Init方法前调用。若不调用则不会收到交易员流的数据。
virtual void SubscribeUserTopic(USTP_TE_RESUME_TYPE nResumeType) = 0;
///订阅询价流。
///@param nResumeType 交易员流重传方式
/// USTP_TERT_RESTART:从本交易日开始重传
/// USTP_TERT_RESUME:从上次收到的续传
/// USTP_TERT_QUICK:只传送登录后交易员流的内容
///@remark 该方法要在Init方法前调用。若不调用则不会收到交易员流的数据。
virtual void SubscribeForQuote(USTP_TE_RESUME_TYPE nResumeType) = 0;
///设置心跳超时时间。
///@param timeout 心跳超时时间(秒)
virtual void SetHeartbeatTimeout(unsigned int timeout) = 0;
///打开请求日志文件
///@param pszReqLogFileName 请求日志文件名
///@return 0 操作成功
///@return -1 打开日志文件失败
virtual int OpenRequestLog(const char *pszReqLogFileName) = 0;
///打开应答日志文件
///@param pszRspLogFileName 应答日志文件名
///@return 0 操作成功
///@return -1 打开日志文件失败
virtual int OpenResponseLog(const char *pszRspLogFileName) = 0;
///风控前置系统用户登录请求
virtual int ReqUserLogin(CUstpFtdcReqUserLoginField *pReqUserLogin, int nRequestID) = 0;
///用户退出请求
virtual int ReqUserLogout(CUstpFtdcReqUserLogoutField *pReqUserLogout, int nRequestID) = 0;
///用户密码修改请求
virtual int ReqUserPasswordUpdate(CUstpFtdcUserPasswordUpdateField *pUserPasswordUpdate, int nRequestID) = 0;
///报单录入请求
virtual int ReqOrderInsert(CUstpFtdcInputOrderField *pInputOrder, int nRequestID) = 0;
///报单操作请求
virtual int ReqOrderAction(CUstpFtdcOrderActionField *pOrderAction, int nRequestID) = 0;
///请求报价录入
virtual int ReqQuoteInsert(CUstpFtdcInputQuoteField *pInputQuote, int nRequestID) = 0;
///报价操作请求
virtual int ReqQuoteAction(CUstpFtdcQuoteActionField *pQuoteAction, int nRequestID) = 0;
///客户询价请求
virtual int ReqForQuote(CUstpFtdcReqForQuoteField *pReqForQuote, int nRequestID) = 0;
///客户申请组合请求
virtual int ReqMarginCombAction(CUstpFtdcInputMarginCombActionField *pInputMarginCombAction, int nRequestID) = 0;
///用户请求出入金
virtual int ReqUserDeposit(CUstpFtdcstpUserDepositField *pstpUserDeposit, int nRequestID) = 0;
///用户主次席出入金请求
virtual int ReqTransferMoney(CUstpFtdcstpTransferMoneyField *pstpTransferMoney, int nRequestID) = 0;
///报单查询请求
virtual int ReqQryOrder(CUstpFtdcQryOrderField *pQryOrder, int nRequestID) = 0;
///成交单查询请求
virtual int ReqQryTrade(CUstpFtdcQryTradeField *pQryTrade, int nRequestID) = 0;
///可用投资者账户查询请求
virtual int ReqQryUserInvestor(CUstpFtdcQryUserInvestorField *pQryUserInvestor, int nRequestID) = 0;
///交易编码查询请求
virtual int ReqQryTradingCode(CUstpFtdcQryTradingCodeField *pQryTradingCode, int nRequestID) = 0;
///投资者资金账户查询请求
virtual int ReqQryInvestorAccount(CUstpFtdcQryInvestorAccountField *pQryInvestorAccount, int nRequestID) = 0;
///合约查询请求
virtual int ReqQryInstrument(CUstpFtdcQryInstrumentField *pQryInstrument, int nRequestID) = 0;
///交易所查询请求
virtual int ReqQryExchange(CUstpFtdcQryExchangeField *pQryExchange, int nRequestID) = 0;
///投资者持仓查询请求
virtual int ReqQryInvestorPosition(CUstpFtdcQryInvestorPositionField *pQryInvestorPosition, int nRequestID) = 0;
///合规参数查询请求
virtual int ReqQryComplianceParam(CUstpFtdcQryComplianceParamField *pQryComplianceParam, int nRequestID) = 0;
///投资者手续费率查询请求
virtual int ReqQryInvestorFee(CUstpFtdcQryInvestorFeeField *pQryInvestorFee, int nRequestID) = 0;
///投资者保证金率查询请求
virtual int ReqQryInvestorMargin(CUstpFtdcQryInvestorMarginField *pQryInvestorMargin, int nRequestID) = 0;
///交易编码组合持仓查询请求
virtual int ReqQryInvestorCombPosition(CUstpFtdcQryInvestorCombPositionField *pQryInvestorCombPosition, int nRequestID) = 0;
///交易编码单腿持仓查询请求
virtual int ReqQryInvestorLegPosition(CUstpFtdcQryInvestorLegPositionField *pQryInvestorLegPosition, int nRequestID) = 0;
///查询合约组信息
virtual int ReqQryInstrumentGroup(CUstpFtdcQryUstpInstrumentGroupField *pQryUstpInstrumentGroup, int nRequestID) = 0;
///查询组合保证金类型
virtual int ReqQryClientMarginCombType(CUstpFtdcQryClientMarginCombTypeField *pQryClientMarginCombType, int nRequestID) = 0;
///行权录入请求
virtual int ReqExecOrderInsert(CUstpFtdcInputExecOrderField *pInputExecOrder, int nRequestID) = 0;
///行权操作请求
virtual int ReqExecOrderAction(CUstpFtdcInputExecOrderActionField *pInputExecOrderAction, int nRequestID) = 0;
///查询系统时间
virtual int ReqQrySystemTime(CUstpFtdcReqQrySystemTimeField *pReqQrySystemTime, int nRequestID) = 0;
protected:
~CUstpFtdcTraderApi(){};
};
#endif

View File

@ -1,865 +0,0 @@
/////////////////////////////////////////////////////////////////////////
///@system 风控前置系统
///@company CFFEX
///@file USTPFtdcUserApiDataType.h
///@brief 定义了客户端接口使用的业务数据类型
///@history
///
/////////////////////////////////////////////////////////////////////////
#ifndef USTP_FTDCDATATYPE_H
#define USTP_FTDCDATATYPE_H
enum USTP_TE_RESUME_TYPE
{
USTP_TERT_RESTART = 0,
USTP_TERT_RESUME,
USTP_TERT_QUICK
};
const int USTP_TSS_DIALOG = 1; //对话流
const int USTP_TSS_PRIVATE = 2; //客户私有流
const int USTP_TSS_PUBLIC = 3; //公共流
const int USTP_TSS_QUERY = 4; //查询
const int USTP_TSS_USER = 5; //用户私有流
const int USTP_TSS_QUOTE = 6; //询价流
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpPriceTickType是一个最小变动价位类型
/////////////////////////////////////////////////////////////////////////
typedef double TUstpFtdcPriceTickType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpPriceType是一个价格类型
/////////////////////////////////////////////////////////////////////////
typedef double TUstpFtdcPriceType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpRatioType是一个比率类型
/////////////////////////////////////////////////////////////////////////
typedef double TUstpFtdcRatioType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpMoneyType是一个资金类型
/////////////////////////////////////////////////////////////////////////
typedef double TUstpFtdcMoneyType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpLargeVolumeType是一个大额数量类型
/////////////////////////////////////////////////////////////////////////
typedef double TUstpFtdcLargeVolumeType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpSequenceNoType是一个序列号类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcSequenceNoType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpMillisecType是一个最后修改毫秒类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcMillisecType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpVolumeType是一个数量类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcVolumeType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpUnderlyingMultipleType是一个合约乘数类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcUnderlyingMultipleType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpVolumeMultipleType是一个数量乘数类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcVolumeMultipleType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpSequenceSeriesType是一个序列系列号类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcSequenceSeriesType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpErrorIDType是一个错误代码类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcErrorIDType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpDataCenterIDType是一个数据中心代码类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcDataCenterIDType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpSettlementIDType是一个结算编号类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcSettlementIDType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpBusinessLocalIDType是一个本地业务标识类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcBusinessLocalIDType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpMeasureSecType是一个度量秒数类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcMeasureSecType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpSeatNoType是一个席位序号类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcSeatNoType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpFileSizeType是一个文件大小类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcFileSizeType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpFemasLifeCycleType是一个飞马生命周期号类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcFemasLifeCycleType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpMonthType是一个月份类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcMonthType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpBoolType是一个布尔型类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcBoolType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpYearType是一个年类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcYearType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpPriorityType是一个优先权类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcPriorityType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpMemTableNameType是一个内存表名类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcMemTableNameType[61];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpOrderSysIDType是一个报单编号类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcOrderSysIDType[31];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpTradeIDType是一个成交编号类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcTradeIDType[21];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpUserIDType是一个用户代码类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcUserIDType[16];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpParticipantIDType是一个会员编号类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcParticipantIDType[11];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpIPAddressType是一个IP地址类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcIPAddressType[21];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpMacAddressType是一个Mac地址类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcMacAddressType[21];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpInstrumentNameType是一个合约名称类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcInstrumentNameType[21];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpInstrumentIDType是一个合约编号类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcInstrumentIDType[31];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpExchangeNameType是一个交易所名称类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcExchangeNameType[31];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpExchangeIDType是一个交易所代码类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcExchangeIDType[11];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpDateType是一个日期类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcDateType[9];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpTimeType是一个时间类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcTimeType[9];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpClientIDType是一个客户编码类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcClientIDType[19];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpAccountIDType是一个资金帐号类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcAccountIDType[13];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpSeatIDType是一个席位号类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcSeatIDType[13];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpProductNameType是一个品种名称类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcProductNameType[41];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpUserOrderLocalIDType是一个用户本地报单号类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcUserOrderLocalIDType[21];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpOrderLocalIDType是一个本地报单编号类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcOrderLocalIDType[13];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpInvestorIDType是一个投资者编号类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcInvestorIDType[19];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpUserNameType是一个用户编码类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcUserNameType[31];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpPasswordType是一个密码类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcPasswordType[41];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpProductInfoType是一个产品信息类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcProductInfoType[41];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpProtocolInfoType是一个协议信息类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcProtocolInfoType[41];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpBusinessUnitType是一个业务单元类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcBusinessUnitType[21];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpTradingSystemNameType是一个交易系统名称类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcTradingSystemNameType[61];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpBrokerIDType是一个经纪公司代码类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcBrokerIDType[11];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpCustomType是一个用户自定义域类型类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcCustomType[65];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpTradingDayType是一个交易日类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcTradingDayType[9];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpDepartmentType是一个营业部类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcDepartmentType[41];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpProductIDType是一个品种编号类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcProductIDType[13];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpAccountSeqNoType是一个资金流水号类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcAccountSeqNoType[21];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpSettlementGroupIDType是一个结算组代码类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcSettlementGroupIDType[9];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpFemasVersionType是一个飞马版本号类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcFemasVersionType[21];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpBankIDType是一个银行机构代码类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcBankIDType[11];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpBankPasswdType是一个银行转账密码类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcBankPasswdType[36];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpAccountPasswdType是一个主席转账密码类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcAccountPasswdType[36];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpTransBankIDType是一个银行代码类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcTransBankIDType[10];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpTransSerialType是一个发起方流水号类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcTransSerialType[34];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpTransBankAccountType是一个银行账号类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcTransBankAccountType[34];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpTransTradeCodeType是一个银期业务功能码类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcTransTradeCodeType[10];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpErrorMsgType是一个错误信息类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcErrorMsgType[81];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpAuthenticate2PasswordType是一个客户认证密码类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcAuthenticate2PasswordType[41];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpTerminalCodeType是一个开发厂商终端编码类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcTerminalCodeType[41];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpVolumeConditionType是一个成交量类型类型
/////////////////////////////////////////////////////////////////////////
///任何数量
#define USTP_FTDC_VC_AV '1'
///最小数量
#define USTP_FTDC_VC_MV '2'
///全部数量
#define USTP_FTDC_VC_CV '3'
typedef char TUstpFtdcVolumeConditionType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpForceCloseReasonType是一个强平原因类型
/////////////////////////////////////////////////////////////////////////
///非强平
#define USTP_FTDC_FCR_NotForceClose '0'
///资金不足
#define USTP_FTDC_FCR_LackDeposit '1'
///客户超仓
#define USTP_FTDC_FCR_ClientOverPositionLimit '2'
///会员超仓
#define USTP_FTDC_FCR_MemberOverPositionLimit '3'
///持仓非整数倍
#define USTP_FTDC_FCR_NotMultiple '4'
///违规
#define USTP_FTDC_FCR_Violation '5'
///其他
#define USTP_FTDC_FCR_Other '6'
///自然人临近交割
#define USTP_FTDC_FCR_PersonDeliv '7'
///客户套保超仓
#define USTP_FTDC_FCR_HedgeOverPositionLimit '8'
typedef char TUstpFtdcForceCloseReasonType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpInstrumentStatusType是一个合约交易状态类型
/////////////////////////////////////////////////////////////////////////
///开盘前
#define USTP_FTDC_IS_BeforeTrading '0'
///非交易
#define USTP_FTDC_IS_NoTrading '1'
///连续交易
#define USTP_FTDC_IS_Continous '2'
///集合竞价报单
#define USTP_FTDC_IS_AuctionOrdering '3'
///集合竞价价格平衡
#define USTP_FTDC_IS_AuctionBalance '4'
///集合竞价撮合
#define USTP_FTDC_IS_AuctionMatch '5'
///收盘
#define USTP_FTDC_IS_Closed '6'
typedef char TUstpFtdcInstrumentStatusType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpOffsetFlagType是一个开平标志类型
/////////////////////////////////////////////////////////////////////////
///开仓
#define USTP_FTDC_OF_Open '0'
///平仓
#define USTP_FTDC_OF_Close '1'
///强平
#define USTP_FTDC_OF_ForceClose '2'
///平今
#define USTP_FTDC_OF_CloseToday '3'
///平昨
#define USTP_FTDC_OF_CloseYesterday '4'
///ALL
#define USTP_FTDC_OF_ALL '9'
typedef char TUstpFtdcOffsetFlagType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpOrderPriceTypeType是一个报单价格条件类型
/////////////////////////////////////////////////////////////////////////
///任意价
#define USTP_FTDC_OPT_AnyPrice '1'
///限价
#define USTP_FTDC_OPT_LimitPrice '2'
///最优价
#define USTP_FTDC_OPT_BestPrice '3'
///五档价
#define USTP_FTDC_OPT_FiveLevelPrice '4'
///止损定单
#define USTP_FTDC_OPT_StopLosPrice '5'
///止盈定单
#define USTP_FTDC_OPT_StopProfitPrice '6'
///限价止损定单
#define USTP_FTDC_OPT_LimitStopLosPrice '7'
///限价止盈定单
#define USTP_FTDC_OPT_LimitStopProfitPrice '8'
typedef char TUstpFtdcOrderPriceTypeType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpOrderStatusType是一个报单状态类型
/////////////////////////////////////////////////////////////////////////
///全部成交
#define USTP_FTDC_OS_AllTraded '0'
///部分成交还在队列中
#define USTP_FTDC_OS_PartTradedQueueing '1'
///部分成交不在队列中
#define USTP_FTDC_OS_PartTradedNotQueueing '2'
///未成交还在队列中
#define USTP_FTDC_OS_NoTradeQueueing '3'
///未成交不在队列中
#define USTP_FTDC_OS_NoTradeNotQueueing '4'
///撤单
#define USTP_FTDC_OS_Canceled '5'
///订单已报入交易所未应答
#define USTP_FTDC_OS_AcceptedNoReply '6'
typedef char TUstpFtdcOrderStatusType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpUserTypeType是一个用户类型类型
/////////////////////////////////////////////////////////////////////////
///自然人
#define USTP_FTDC_UT_Person '1'
///理财产品
#define USTP_FTDC_UT_Product '2'
///期货公司管理员
#define USTP_FTDC_UT_Manager '3'
///席位
#define USTP_FTDC_UT_Seat '4'
typedef char TUstpFtdcUserTypeType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpTradingRightType是一个交易权限类型
/////////////////////////////////////////////////////////////////////////
///可以交易
#define USTP_FTDC_TR_Allow '0'
///只能平仓
#define USTP_FTDC_TR_CloseOnly '1'
///不能交易
#define USTP_FTDC_TR_Forbidden '2'
typedef char TUstpFtdcTradingRightType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpTimeConditionType是一个有效期类型类型
/////////////////////////////////////////////////////////////////////////
///立即完成,否则撤销
#define USTP_FTDC_TC_IOC '1'
///本节有效
#define USTP_FTDC_TC_GFS '2'
///当日有效
#define USTP_FTDC_TC_GFD '3'
///指定日期前有效
#define USTP_FTDC_TC_GTD '4'
///撤销前有效
#define USTP_FTDC_TC_GTC '5'
///集合竞价有效
#define USTP_FTDC_TC_GFA '6'
typedef char TUstpFtdcTimeConditionType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpOrderSourceType是一个报单来源类型
/////////////////////////////////////////////////////////////////////////
///来自参与者
#define USTP_FTDC_OS_Participant '0'
///来自管理员
#define USTP_FTDC_OS_Administrator '1'
///报价单拆分出来的买单或卖单
#define USTP_FTDC_OS_QuoteSplit '2'
///强减单
#define USTP_FTDC_OS_ForceLower '3'
typedef char TUstpFtdcOrderSourceType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpDirectionType是一个买卖方向类型
/////////////////////////////////////////////////////////////////////////
///买
#define USTP_FTDC_D_Buy '0'
///卖
#define USTP_FTDC_D_Sell '1'
///ALL
#define USTP_FTDC_D_ALL '9'
typedef char TUstpFtdcDirectionType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpCurrencyType是一个币种类型
/////////////////////////////////////////////////////////////////////////
///人民币
#define USTP_FTDC_C_RMB '1'
///美元
#define USTP_FTDC_C_UDOLLAR '2'
typedef char TUstpFtdcCurrencyType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpAccountDirectionType是一个出入金方向类型
/////////////////////////////////////////////////////////////////////////
///入金
#define USTP_FTDC_AD_In '1'
///出金
#define USTP_FTDC_AD_Out '2'
typedef char TUstpFtdcAccountDirectionType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpSyncDirectionType是一个出入金通知类型
/////////////////////////////////////////////////////////////////////////
///入金通知
#define USTP_FTDC_AD_In '1'
///出金通知
#define USTP_FTDC_AD_Out '2'
///入金冲销通知
#define USTP_FTDC_AD_InReserval '3'
///出金冲销通知
#define USTP_FTDC_AD_OutReserval '4'
///预出金通知
#define USTP_FTDC_AD_PreOut '5'
///预出金成功通知
#define USTP_FTDC_AD_PreOutSuccess '6'
///预出金失败通知
#define USTP_FTDC_AD_PreOutFailed '7'
typedef char TUstpFtdcSyncDirectionType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpTradeSyncSourceType是一个同步请求发起方类型
/////////////////////////////////////////////////////////////////////////
///终端
#define USTP_FTDC_TSS_Terminal '1'
///次席终端
#define USTP_FTDC_TSS_Terminal_Second '2'
///银行
#define USTP_FTDC_TSS_Bank '3'
///结算
#define USTP_FTDC_TSS_Settle '4'
typedef char TUstpFtdcTradeSyncSourceType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpHedgeFlagType是一个投机套保标志类型
/////////////////////////////////////////////////////////////////////////
///交易/投机
#define USTP_FTDC_CHF_Speculation '1'
///套利
#define USTP_FTDC_CHF_Arbitrage '2'
///套保
#define USTP_FTDC_CHF_Hedge '3'
///做市商
#define USTP_FTDC_CHF_MarketMaker '4'
///投机-套保
#define USTP_FTDC_CHF_SpecHedge '5'
///套保-投机
#define USTP_FTDC_CHF_HedgeSpec '6'
///匹配所有的值
#define USTP_FTDC_CHF_AllValue '9'
typedef char TUstpFtdcHedgeFlagType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpActionFlagType是一个操作标志类型
/////////////////////////////////////////////////////////////////////////
///删除
#define USTP_FTDC_AF_Delete '0'
///挂起
#define USTP_FTDC_AF_Suspend '1'
///激活
#define USTP_FTDC_AF_Active '2'
///修改
#define USTP_FTDC_AF_Modify '3'
typedef char TUstpFtdcActionFlagType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpPositionTypeType是一个持仓类型类型
/////////////////////////////////////////////////////////////////////////
///净持仓
#define USTP_FTDC_PT_Net '1'
///综合持仓
#define USTP_FTDC_PT_Gross '2'
typedef char TUstpFtdcPositionTypeType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpOptionsTypeType是一个期权类型类型
/////////////////////////////////////////////////////////////////////////
///非期权
#define USTP_FTDC_OT_NotOptions '0'
///看涨
#define USTP_FTDC_OT_CallOptions '1'
///看跌
#define USTP_FTDC_OT_PutOptions '2'
///全部
#define USTP_FTDC_OT_ALL '9'
typedef char TUstpFtdcOptionsTypeType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpIsActiveType是一个是否活跃类型
/////////////////////////////////////////////////////////////////////////
///不活跃
#define USTP_FTDC_UIA_NoActive '0'
///活跃
#define USTP_FTDC_UIA_Active '1'
typedef char TUstpFtdcIsActiveType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpCurrencyIDType是一个币种代码类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcCurrencyIDType[5];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpClientMarginCombTypeType是一个组合保证金类型类型
/////////////////////////////////////////////////////////////////////////
///单腿保证金组合
#define USTP_FTDC_MCT_SingleLeg '0'
///合约组大边保证金组合
#define USTP_FTDC_MCT_BigLeg '1'
///手动策略保证金组合
#define USTP_FTDC_MCT_StrategyManual '2'
///自动策略保证金组合
#define USTP_FTDC_MCT_StrategyAuto '3'
///手动策略大边保证金组合
#define USTP_FTDC_MCT_StrategyBigLegManual '4'
///自动策略大边保证金组合
#define USTP_FTDC_MCT_StrategyBigLegAuto '5'
typedef char TUstpFtdcClientMarginCombTypeType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpInstrumentGroupIDType是一个合约组代码类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcInstrumentGroupIDType[31];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpQuoteSysIDType是一个报价编号类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcQuoteSysIDType[31];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpUserQuoteLocalIDType是一个用户本地报价编号类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcUserQuoteLocalIDType[21];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpQuoteLocalIDType是一个飞马本地报价编号类型
/////////////////////////////////////////////////////////////////////////
typedef char TUstpFtdcQuoteLocalIDType[13];
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpGrantFuncSetType是一个授权功能号类型
/////////////////////////////////////////////////////////////////////////
///正常交易
#define USTP_FTDC_FUNC_Trading '0'
///只能平仓
#define USTP_FTDC_FUNC_CloseOnly '1'
///禁止交易
#define USTP_FTDC_FUNC_CanotTrade '2'
typedef char TUstpFtdcGrantFuncSetType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpQuoteStatusType是一个报价单状态类型类型
/////////////////////////////////////////////////////////////////////////
///在飞马中还未进入交易系统
#define USTP_FTDC_QS_Inited_InFEMAS '0'
///已经报入交易系统中
#define USTP_FTDC_QS_Accepted_InTradingSystem '1'
///已经撤掉单腿
#define USTP_FTDC_QS_Canceled_SingleLeg '2'
///已经全部撤掉
#define USTP_FTDC_QS_Canceled_All '3'
///已经有单腿成交
#define USTP_FTDC_QS_Traded_SingleLeg '4'
///已经全部成交
#define USTP_FTDC_QS_Traded_All '5'
///错误的撤消报价请求
#define USTP_FTDC_QS_Error_QuoteAction '6'
typedef char TUstpFtdcQuoteStatusType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpLegMultipleType是一个单腿乘数类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcLegMultipleType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpLegIDType是一个单腿编号类型
/////////////////////////////////////////////////////////////////////////
typedef int TUstpFtdcLegIDType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpCombDirectionType是一个申请保证金组合指令方向类型
/////////////////////////////////////////////////////////////////////////
///申请组合
#define USTP_FTDC_CA_Combine '0'
///申请拆分组合
#define USTP_FTDC_CA_UnCombine '1'
typedef char TUstpFtdcCombDirectionType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpArbiTypeType是一个策略类别类型
/////////////////////////////////////////////////////////////////////////
///基本
#define USTP_FTDC_AT_Basic '0'
///跨期套利
#define USTP_FTDC_AT_SP '1'
///两腿跨品种套利
#define USTP_FTDC_AT_SPC '2'
///压榨套利
#define USTP_FTDC_AT_SPX '3'
///组合
#define USTP_FTDC_AT_Combo '4'
///批量
#define USTP_FTDC_AT_Strip '5'
///期权执行申请
#define USTP_FTDC_AT_Exec '6'
///双边报价
#define USTP_FTDC_AT_Both '7'
///互换
#define USTP_FTDC_AT_Swap '8'
///其他策略
#define USTP_FTDC_AT_Other '9'
///看涨期权垂直价差
#define USTP_FTDC_AT_BUL 'a'
///看跌期权垂直价差
#define USTP_FTDC_AT_BER 'b'
///看涨期权水平价差
#define USTP_FTDC_AT_BLT 'c'
///看跌期权水平价差
#define USTP_FTDC_AT_BRT 'd'
///跨式
#define USTP_FTDC_AT_STD 'e'
///宽跨式
#define USTP_FTDC_AT_STG 'f'
///备兑
#define USTP_FTDC_AT_PRT 'g'
///对锁
#define USTP_FTDC_AT_LOC 'h'
typedef char TUstpFtdcArbiTypeType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpOrderTypeType是一个委托类型类型
/////////////////////////////////////////////////////////////////////////
///普通委托
#define USTP_FTDC_OT_Common '0'
///期权执行
#define USTP_FTDC_OT_OptExec '1'
///放弃执行
#define USTP_FTDC_OT_OptAbandon '2'
///OTC衍生
#define USTP_FTDC_OT_OTCDerived '3'
///期转现衍生
#define USTP_FTDC_OT_EFPDerived '4'
typedef char TUstpFtdcOrderTypeType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpDeliveryFlagType是一个执行类型类型
/////////////////////////////////////////////////////////////////////////
///不对冲
#define USTP_FTDC_DF_ExecOpen '0'
///对冲(期货)
#define USTP_FTDC_DF_Delivery '1'
///对冲(期权)
#define USTP_FTDC_DF_OptDelivery '2'
///保留持仓
#define USTP_FTDC_DF_OptHold '3'
///履约后对冲
#define USTP_FTDC_DF_SellDelivery '4'
typedef char TUstpFtdcDeliveryFlagType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpCombActionStatusType是一个组合操作状态类型
/////////////////////////////////////////////////////////////////////////
///已提交
#define USTP_FTDC_CAS_Submitted '1'
///已接收
#define USTP_FTDC_CAS_Accepted '2'
///已拒绝
#define USTP_FTDC_CAS_Rejected '3'
typedef char TUstpFtdcCombActionStatusType;
/////////////////////////////////////////////////////////////////////////
///TFtdcUstpAuthenticate2TypeType是一个客户认证类型类型
/////////////////////////////////////////////////////////////////////////
///初始值,空,表示未设口令。即不需要进行口令验证
#define USTP_FTDC_A2T_Blank '0'
///短信验证码
#define USTP_FTDC_A2T_ShortMessage '1'
///动态令牌
#define USTP_FTDC_A2T_DynamicToken '2'
///图形验证码
#define USTP_FTDC_A2T_GraphicVerificationCode '3'
typedef char TUstpFtdcAuthenticate2TypeType;
#endif

File diff suppressed because it is too large Load Diff

View File

@ -336,8 +336,10 @@ class ApiGenerator:
if __name__ == "__main__":
md_generator = ApiGenerator("USTPFtdcMduserApi.h", "femas", "md", "MdApi")
md_generator = ApiGenerator(
"../include/femas/USTPFtdcMduserApi.h", "femas", "md", "MdApi")
md_generator.run()
td_generator = ApiGenerator("USTPFtdcTraderApi.h", "femas", "td", "TdApi")
td_generator = ApiGenerator(
"../include/femas/USTPFtdcTraderApi.h", "femas", "td", "TdApi")
td_generator.run()

View File

@ -72,5 +72,6 @@ class DataTypeGenerator:
if __name__ == "__main__":
generator = DataTypeGenerator("USTPFtdcUserApiDataType.h", "femas")
generator = DataTypeGenerator(
"../include/femas/USTPFtdcUserApiDataType.h", "femas")
generator.run()

View File

@ -80,5 +80,6 @@ class StructGenerator:
if __name__ == "__main__":
generator = StructGenerator("USTPFtdcUserApiStruct.h", "femas")
generator = StructGenerator(
"../include/femas/USTPFtdcUserApiStruct.h", "femas")
generator.run()

View File

@ -1,173 +0,0 @@
# encoding: UTF-8
# flake8: noqa
from __future__ import print_function
import sys
from time import sleep
from PyQt4 import QtGui
from vnfemasmd import *
#----------------------------------------------------------------------
def print_dict(d):
"""按照键值打印一个字典"""
for key,value in d.items():
print(key + ':' + str(value))
#----------------------------------------------------------------------
def simple_log(func):
"""简单装饰器用于输出函数名"""
def wrapper(*args, **kw):
print("")
print(str(func.__name__))
return func(*args, **kw)
return wrapper
########################################################################
class TestMdApi(MdApi):
"""测试用实例"""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
super(TestMdApi, self).__init__()
#----------------------------------------------------------------------
@simple_log
def onFrontConnected(self):
"""服务器连接"""
pass
#----------------------------------------------------------------------
@simple_log
def onFrontDisconnected(self, n):
"""服务器断开"""
print(n)
#----------------------------------------------------------------------
@simple_log
def onHeartBeatWarning(self, n):
"""心跳报警"""
print(n)
#----------------------------------------------------------------------
@simple_log
def onRspError(self, error, n, last):
"""错误"""
print_dict(error)
@simple_log
#----------------------------------------------------------------------
def onRspUserLogin(self, data, error, n, last):
"""登陆回报"""
print_dict(data)
print_dict(error)
#----------------------------------------------------------------------
@simple_log
def onRspUserLogout(self, data, error, n, last):
"""登出回报"""
print_dict(data)
print_dict(error)
#----------------------------------------------------------------------
@simple_log
def onRspSubMarketData(self, data, error, n, last):
"""订阅合约回报"""
print_dict(data)
print_dict(error)
#----------------------------------------------------------------------
@simple_log
def onRspUnSubMarketData(self, data, error, n, last):
"""退订合约回报"""
print_dict(data)
print_dict(error)
#----------------------------------------------------------------------
@simple_log
def onRtnDepthMarketData(self, data):
"""行情推送"""
print_dict(data)
#----------------------------------------------------------------------
@simple_log
def onRspQryTopic(self, data, error, n, last):
"""订阅合约回报"""
print_dict(data)
print_dict(error)
#----------------------------------------------------------------------
@simple_log
def onRspSubscribeTopic(self, data, error, n, last):
"""退订合约回报"""
print_dict(data)
print_dict(error)
#----------------------------------------------------------------------
def main():
"""主测试函数出现堵塞时可以考虑使用sleep"""
reqid = 0
# 创建Qt应用对象用于事件循环
app = QtGui.QApplication(sys.argv)
# 创建API对象
api = TestMdApi()
# 在C++环境中创建MdApi对象传入参数是希望用来保存.con文件的地址
api.createFtdcMdApi('')
# 注册前置机地址
api.registerFront("tcp://118.126.16.229:17101")
# 初始化api连接前置机
api.init()
sleep(0.5)
# 登陆
loginReq = {} # 创建一个空字典
loginReq['UserID'] = '' # 参数作为字典键值的方式传入
loginReq['Password'] = '' # 键名和C++中的结构体成员名对应
loginReq['BrokerID'] = ''
reqid = reqid + 1 # 请求数必须保持唯一性
i = api.reqUserLogin(loginReq, 1)
sleep(0.5)
## 登出,测试出错(无此功能)
#reqid = reqid + 1
#i = api.reqUserLogout({}, 1)
#sleep(0.5)
## 安全退出,测试通过
#i = api.exit()
## 获取交易日,目前输出为空
#day = api.getTradingDay()
#print 'Trading Day is:' + str(day)
#sleep(0.5)
## 订阅合约,测试通过
#i = api.subscribeMarketData('IF1505')
## 退订合约,测试通过
#i = api.unSubscribeMarketData('IF1505')
# 订阅询价,测试通过
#i = api.subscribeForQuoteRsp('IO1504-C-3900')
# 退订询价,测试通过
#i = api.unSubscribeForQuoteRsp('IO1504-C-3900')
# 连续运行,用于输出行情
app.exec_()
if __name__ == '__main__':
main()

View File

@ -1,166 +0,0 @@
# encoding: UTF-8
# flake8: noqa
from __future__ import print_function
import sys
from time import sleep
from PyQt4 import QtGui
from vnfemastd import *
#----------------------------------------------------------------------
def print_dict(d):
"""按照键值打印一个字典"""
for key,value in d.items():
print(key + ':' + str(value))
#----------------------------------------------------------------------
def simple_log(func):
"""简单装饰器用于输出函数名"""
def wrapper(*args, **kw):
print("")
print(str(func.__name__))
return func(*args, **kw)
return wrapper
########################################################################
class TestTdApi(TdApi):
"""测试用实例"""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
super(TestTdApi, self).__init__()
#----------------------------------------------------------------------
@simple_log
def onFrontConnected(self):
"""服务器连接"""
pass
#----------------------------------------------------------------------
@simple_log
def onFrontDisconnected(self, n):
"""服务器断开"""
print(n)
#----------------------------------------------------------------------
@simple_log
def onHeartBeatWarning(self, n):
"""心跳报警"""
print(n)
#----------------------------------------------------------------------
@simple_log
def onRspError(self, error, n, last):
"""错误"""
print_dict(error)
#----------------------------------------------------------------------
@simple_log
def onRspUserLogin(self, data, error, n, last):
"""登陆回报"""
print_dict(data)
print_dict(error)
self.brokerID = data['BrokerID']
self.userID = data['UserID']
self.frontID = data['FrontID']
self.sessionID = data['SessionID']
#----------------------------------------------------------------------
@simple_log
def onRspUserLogout(self, data, error, n, last):
"""登出回报"""
print_dict(data)
print_dict(error)
#----------------------------------------------------------------------
@simple_log
def onRspQrySettlementInfo(self, data, error, n, last):
"""查询结算信息回报"""
print_dict(data)
print_dict(error)
#----------------------------------------------------------------------
@simple_log
def onRspSettlementInfoConfirm(self, data, error, n, last):
"""确认结算信息回报"""
print_dict(data)
print_dict(error)
#----------------------------------------------------------------------
@simple_log
def onRspQryInstrument(self, data, error, n, last):
"""查询合约回报"""
print_dict(data)
print_dict(error)
print(n)
print(last)
#----------------------------------------------------------------------
def main():
"""主测试函数出现堵塞时可以考虑使用sleep"""
reqid = 0
# 创建Qt应用对象用于事件循环
app = QtGui.QApplication(sys.argv)
# 创建API对象测试通过
api = TestTdApi()
# 在C++环境中创建MdApi对象传入参数是希望用来保存.con文件的地址测试通过
api.createFtdcTraderApi('')
# 设置数据流重传方式,测试通过
api.subscribePrivateTopic(1)
api.subscribePublicTopic(1)
api.subscribeUserTopic(1)
# 注册前置机地址,测试通过
api.registerFront("tcp://118.126.16.229:17111")
# 初始化api连接前置机测试通过
api.init()
sleep(2)
# 登陆,测试通过
loginReq = {} # 创建一个空字典
loginReq['UserID'] = '' # 参数作为字典键值的方式传入
loginReq['Password'] = '' # 键名和C++中的结构体成员名对应
loginReq['BrokerID'] = ''
reqid = reqid + 1 # 请求数必须保持唯一性
i = api.reqUserLogin(loginReq, reqid)
sleep(0.5)
## 查询合约, 测试通过
#reqid = reqid + 1
#i = api.reqQryInstrument({}, reqid)
## 查询结算, 测试通过
#req = {}
#req['BrokerID'] = api.brokerID
#req['InvestorID'] = api.userID
#reqid = reqid + 1
#i = api.reqQrySettlementInfo(req, reqid)
#sleep(0.5)
## 确认结算, 测试通过
#req = {}
#req['BrokerID'] = api.brokerID
#req['InvestorID'] = api.userID
#reqid = reqid + 1
#i = api.reqSettlementInfoConfirm(req, reqid)
#sleep(0.5)
# 连续运行
app.exec_()
if __name__ == '__main__':
main()

View File

@ -717,7 +717,7 @@ public:
PYBIND11_MODULE(vnfemasmd, m)
{
class_<MdApi, PyMdApi> mdapi(m, "MdApi");
class_<MdApi, PyMdApi> mdapi(m, "MdApi", module_local());
mdapi
.def(init<>())
.def("createFtdcMdApi", &MdApi::createFtdcMdApi)

View File

@ -23,7 +23,7 @@
<ProjectGuid>{F00054FF-282F-4826-848E-D58BFB9E9D9F}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>vnfemasmd</RootNamespace>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
<ProjectName>vnfemasmd</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
@ -95,10 +95,10 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<IncludePath>C:\Python37\include;$(SolutionDir);$(SolutionDir)..\include;$(SolutionDir)..\include\femas;$(IncludePath)</IncludePath>
<IncludePath>C:\Miniconda3\include;$(SolutionDir);$(SolutionDir)..\include;$(SolutionDir)..\include\femas;$(IncludePath)</IncludePath>
<ReferencePath>$(ReferencePath)</ReferencePath>
<TargetExt>.pyd</TargetExt>
<LibraryPath>C:\Python37\libs;$(SolutionDir)..\libs;$(LibraryPath)</LibraryPath>
<LibraryPath>C:\Miniconda3\include\libs;$(SolutionDir)..\libs;$(LibraryPath)</LibraryPath>
<OutDir>$(SolutionDir)..\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@ -181,7 +181,7 @@
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>C:\ProgramData\VNConda\libs;C:\Users\Administrator\Documents\GitHub\vnpy\vnpy\api\femasctp\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>C:\Miniconda3\libs;$(SolutionDir)..\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>USTPmduserapiAF.lib;USTPtraderapiAF.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>

View File

@ -2451,14 +2451,11 @@ void TdApi::processRspQryInvestorAccount(Task *task)
data["Margin"] = task_data->Margin;
data["Premium"] = task_data->Premium;
data["Risk"] = task_data->Risk;
print("processRspQryInvestorAccount");
print(data["AccountID"]);
delete task->task_data;
}
dict error;
if (task->task_error)
{
print("task->task_error");
CUstpFtdcRspInfoField *task_error = (CUstpFtdcRspInfoField*)task->task_error;
error["ErrorID"] = task_error->ErrorID;
error["ErrorMsg"] = toUtf(task_error->ErrorMsg);
@ -4237,7 +4234,7 @@ public:
PYBIND11_MODULE(vnfemastd, m)
{
class_<TdApi, PyTdApi> TdApi(m, "TdApi");
class_<TdApi, PyTdApi> TdApi(m, "TdApi", module_local());
TdApi
.def(init<>())
.def("createFtdcTraderApi", &TdApi::createFtdcTraderApi)

View File

@ -23,7 +23,7 @@
<ProjectGuid>{016732E6-5789-4F7C-9A1C-C46A249080CF}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>vnfemastd</RootNamespace>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
<ProjectName>vnfemastd</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
@ -95,8 +95,8 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<TargetExt>.pyd</TargetExt>
<IncludePath>C:\Python37\include;$(SolutionDir);$(SolutionDir)..\include;$(SolutionDir)..\include\femas;$(IncludePath)</IncludePath>
<LibraryPath>C:\Python37\libs;$(SolutionDir)..\libs;$(LibraryPath)</LibraryPath>
<IncludePath>C:\Miniconda3\include;$(SolutionDir);$(SolutionDir)..\include;$(SolutionDir)..\include\femas;$(IncludePath)</IncludePath>
<LibraryPath>C:\Miniconda3\include\libs;$(SolutionDir)..\libs;$(LibraryPath)</LibraryPath>
<OutDir>$(SolutionDir)..\</OutDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@ -178,7 +178,7 @@
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>C:\ProgramData\VNConda\libs;C:\Users\Administrator\Documents\GitHub\vnpy\vnpy\api\femasctp\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>C:\Miniconda3\libs;$(SolutionDir)..\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>USTPmduserapiAF.lib;USTPtraderapiAF.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -30,7 +30,7 @@ from vnpy.api.femas import (
USTP_FTDC_TC_GFD,
USTP_FTDC_TC_IOC,
USTP_FTDC_VC_AV,
USTP_FTDC_VC_CV,
USTP_FTDC_VC_CV
)
from vnpy.trader.constant import (
Direction,
@ -39,6 +39,7 @@ from vnpy.trader.constant import (
OptionType,
OrderType,
Status,
Product
)
from vnpy.trader.event import EVENT_TIMER
from vnpy.trader.gateway import BaseGateway
@ -86,6 +87,12 @@ OFFSET_VT2FEMAS = {
}
OFFSET_FEMAS2VT = {v: k for k, v in OFFSET_VT2FEMAS.items()}
# PRODUCT_CTP2VT = {
# THOST_FTDC_PC_Futures: Product.FUTURES,
# THOST_FTDC_PC_Options: Product.OPTION,
# THOST_FTDC_PC_Combination: Product.SPREAD
# }
DIRECTION_FEMAS2VT = {v: k for k, v in DIRECTION_VT2FEMAS.items()}
DIRECTION_FEMAS2VT[USTP_FTDC_PD_Long] = Direction.LONG
DIRECTION_FEMAS2VT[USTP_FTDC_PD_Short] = Direction.SHORT
@ -237,16 +244,15 @@ class FemasMdApi(MdApi):
"""
self.connect_status = False
self.login_status = False
self.gateway.write_log(f"行情连接断开,原因{reason}")
self.gateway.write_log(f"行情服务器连接断开,原因{reason}")
def onRspUserLogin(self, data: dict, error: dict, reqid: int, last: bool):
"""
Callback when user is logged in.
"""
if self.gateway.if_error_write_error("行情登录失败", error):
if self.gateway.if_error_write_error("行情服务器登录失败", error):
return
self.login_status = True
self.gateway.write_log("onRspUserLogin行情服务器登录成功")
self.gateway.write_log("行情服务器登录成功")
for symbol in self.subscribed:
@ -354,8 +360,8 @@ class FemasTdApi(TdApi):
self.gateway = gateway
self.gateway_name = gateway.gateway_name
self.reqid = int(10e5)
self.localID = int(10e5 + 8888)
self.reqid = 0
self.localid = int(10e5 + 8888)
self.connect_status = False
self.login_status = False
@ -373,7 +379,7 @@ class FemasTdApi(TdApi):
def onFrontConnected(self):
""""""
self.connect_status = True
self.gateway.write_log("onFrontConnected交易连接成功")
self.gateway.write_log("交易服务器连接成功")
self.login()
@ -381,23 +387,23 @@ class FemasTdApi(TdApi):
""""""
self.connect_status = False
self.login_status = False
self.gateway.write_log(f"交易连接断开,原因{reason}")
self.gateway.write_log(f"交易服务器连接断开,原因{reason}")
def onRspUserLogin(self, data: dict, error: dict, reqid: int, last: bool):
""""""
if not error["ErrorID"]:
if data["MaxOrderLocalID"]:
self.localID = max(
self.localID, int(data["MaxOrderLocalID"])
) # 目前最大本地报单号
self.localid = int(data["MaxOrderLocalID"])
self.login_status = True
self.gateway.write_log("onRspUserLogin交易登录成功")
self.gateway.write_log("交易服务器登录成功")
self.reqid += 1
self.reqQryInstrument({}, self.reqid)
else:
self.login_failed = True
self.gateway.if_error_write_error("交易登录失败", error)
self.gateway.if_error_write_error("交易服务器登录失败", error)
def onRspOrderInsert(self, data: dict, error: dict, reqid: int, last: bool):
""""""
@ -486,28 +492,41 @@ class FemasTdApi(TdApi):
balance=data["PreBalance"],
gateway_name=self.gateway_name,
)
# todo: check for error
self.gateway.on_account(account)
def onRspQryInstrument(self, data: dict, error: dict, reqid: int, last: bool):
"""
Callback of instrument query.
"""
# Femas gateway provides no ProductClass data, so need to determine
# product type using other logic.
option_type = OPTIONTYPE_FEMAS2VT.get(data["OptionsType"], None)
if option_type:
product = Product.OPTION
elif data["InstrumentID_2"]:
product = Product.SPREAD
else:
product = Product.FUTURES
contract = ContractData(
product=data["ProductID"],
symbol=data["InstrumentID"],
exchange=EXCHANGE_FEMAS2VT[data["ExchangeID"]],
name=data["InstrumentName"],
size=data["VolumeMultiple"],
pricetick=data["PriceTick"],
option_underlying=data["UnderlyingInstrID"],
option_type=OPTIONTYPE_FEMAS2VT.get(data["OptionsType"], None),
option_strike=data["StrikePrice"],
option_expiry=datetime.strptime(data["ExpireDate"], "%Y%m%d"),
gateway_name=self.gateway_name,
product=product,
gateway_name=self.gateway_name
)
if product == Product.OPTION:
contract.option_underlying = data["UnderlyingInstrID"]
contract.option_type = OPTIONTYPE_FEMAS2VT.get(
data["OptionsType"], None)
contract.option_strike = data["StrikePrice"]
contract.option_expiry = datetime.strptime(
data["ExpireDate"], "%Y%m%d")
self.gateway.on_contract(contract)
symbol_exchange_map[contract.symbol] = contract.exchange
@ -522,7 +541,8 @@ class FemasTdApi(TdApi):
Callback of order status update.
"""
# 更新最大报单编号
self.localID = max(self.localID, int(data["UserOrderLocalID"])) # 检查并增加本地报单编号
self.localid = max(self.localid, int(
data["UserOrderLocalID"])) # 检查并增加本地报单编号
symbol = data["InstrumentID"]
exchange = symbol_exchange_map.get(symbol, "")
@ -617,8 +637,9 @@ class FemasTdApi(TdApi):
"""
Send new order.
"""
self.localID += 1
strLocalID = str(self.localID).rjust(12, "0")
self.localid += 1
orderid = str(self.localid).rjust(12, "0")
femas_req = {
"InstrumentID": req.symbol,
"ExchangeID": str(req.exchange).split(".")[1],
@ -630,7 +651,7 @@ class FemasTdApi(TdApi):
"OrderPriceType": ORDERTYPE_VT2FEMAS.get(req.type, ""),
"Direction": DIRECTION_VT2FEMAS.get(req.direction, ""),
"OffsetFlag": OFFSET_VT2FEMAS.get(req.offset, ""),
"UserOrderLocalID": strLocalID,
"UserOrderLocalID": orderid,
"HedgeFlag": USTP_FTDC_CHF_Speculation,
"ForceCloseReason": USTP_FTDC_FCR_NotForceClose,
"IsAutoSuspend": 0,
@ -651,8 +672,6 @@ class FemasTdApi(TdApi):
self.reqid += 1
self.reqOrderInsert(femas_req, self.reqid)
orderid = femas_req["UserOrderLocalID"]
req.volume = femas_req["Volume"]
order = req.create_order_data(orderid, self.gateway_name)
self.gateway.on_order(order)
@ -662,13 +681,14 @@ class FemasTdApi(TdApi):
"""
Cancel existing order.
"""
self.localID += 1
strLocalID = str(self.localID)
self.localid += 1
orderid = str(self.localid).rjust(12, "0")
femas_req = {
"InstrumentID": req.symbol,
"ExchangeID": str(req.exchange).split(".")[1],
"UserOrderLocalID": req.orderid,
"UserOrderActionLocalID": strLocalID,
"UserOrderActionLocalID": orderid,
"ActionFlag": USTP_FTDC_AF_Delete,
"BrokerID": self.brokerid,
"InvestorID": self.userid,