From 5ece1a7f368c03377a6456567537c65738ece244 Mon Sep 17 00:00:00 2001 From: WOLF Date: Thu, 26 Mar 2015 15:34:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=AE=8C=E6=88=90vn.ctp?= =?UTF-8?q?=E5=B0=81=E8=A3=85=EF=BC=8C=E5=AE=8C=E6=88=90md=E7=9A=84?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=EF=BC=8Ctd=E7=9A=84=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=8F=AA=E8=BF=9B=E8=A1=8C=E4=BA=86=E5=88=9D=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vn.ctp/ctpapi/ThostFtdcMdApi.h | 158 + vn.ctp/ctpapi/ThostFtdcTraderApi.h | 575 ++ vn.ctp/ctpapi/ThostFtdcUserApiDataType.h | 6267 +++++++++++++ vn.ctp/ctpapi/ThostFtdcUserApiStruct.h | 7430 ++++++++++++++++ vn.ctp/ctpapi/error.dtd | 9 + vn.ctp/ctpapi/error.xml | 118 + vn.ctp/ctpapi/thostmduserapi.dll | Bin 0 -> 610304 bytes vn.ctp/ctpapi/thostmduserapi.lib | Bin 0 -> 3386 bytes vn.ctp/ctpapi/thosttraderapi.dll | Bin 0 -> 1171456 bytes vn.ctp/ctpapi/thosttraderapi.lib | Bin 0 -> 3502 bytes vn.ctp/pyscript/ThostFtdcMdApi.h | 158 + vn.ctp/pyscript/ThostFtdcTraderApi.h | 575 ++ vn.ctp/pyscript/ThostFtdcUserApiDataType.h | 6267 +++++++++++++ vn.ctp/pyscript/ThostFtdcUserApiStruct.h | 7430 ++++++++++++++++ vn.ctp/pyscript/ctp_data_type.py | 6263 +++++++++++++ vn.ctp/pyscript/ctp_md_define.cpp | 12 + vn.ctp/pyscript/ctp_md_function.cpp | 28 + vn.ctp/pyscript/ctp_md_process.cpp | 187 + vn.ctp/pyscript/ctp_md_switch.cpp | 72 + vn.ctp/pyscript/ctp_md_task.cpp | 178 + vn.ctp/pyscript/ctp_struct.py | 7434 ++++++++++++++++ vn.ctp/pyscript/ctp_td_define.cpp | 97 + vn.ctp/pyscript/ctp_td_function.cpp | 915 ++ vn.ctp/pyscript/ctp_td_header_function.h | 118 + vn.ctp/pyscript/ctp_td_header_on.h | 191 + vn.ctp/pyscript/ctp_td_header_process.h | 194 + vn.ctp/pyscript/ctp_td_process.cpp | 3380 +++++++ vn.ctp/pyscript/ctp_td_switch.cpp | 582 ++ vn.ctp/pyscript/ctp_td_task.cpp | 2616 ++++++ vn.ctp/pyscript/ctp_td_wrap.cpp | 1316 +++ vn.ctp/pyscript/generate_data_type.py | 98 + vn.ctp/pyscript/generate_md_functions.py | 207 + vn.ctp/pyscript/generate_struct.py | 56 + vn.ctp/pyscript/generate_td_functions.py | 291 + vn.ctp/vnctpmd/test/mdtest.py | 177 + vn.ctp/vnctpmd/test/thostmduserapi.dll | Bin 0 -> 610304 bytes vn.ctp/vnctpmd/test/vnctpmd.pyd | Bin 0 -> 263168 bytes vn.ctp/vnctpmd/vnctpmd/ReadMe.txt | 32 + vn.ctp/vnctpmd/vnctpmd/dllmain.cpp | 19 + vn.ctp/vnctpmd/vnctpmd/stdafx.cpp | 8 + vn.ctp/vnctpmd/vnctpmd/stdafx.h | 16 + vn.ctp/vnctpmd/vnctpmd/targetver.h | 8 + vn.ctp/vnctpmd/vnctpmd/vnctpmd.cpp | 833 ++ vn.ctp/vnctpmd/vnctpmd/vnctpmd.h | 301 + vn.ctp/vnctptd/test/tdtest.py | 163 + vn.ctp/vnctptd/test/thosttraderapi.dll | Bin 0 -> 1171456 bytes vn.ctp/vnctptd/test/vnctptd.pyd | Bin 0 -> 771072 bytes vn.ctp/vnctptd/vnctptd/ReadMe.txt | 32 + vn.ctp/vnctptd/vnctptd/dllmain.cpp | 19 + vn.ctp/vnctptd/vnctptd/stdafx.cpp | 8 + vn.ctp/vnctptd/vnctptd/stdafx.h | 16 + vn.ctp/vnctptd/vnctptd/targetver.h | 8 + vn.ctp/vnctptd/vnctptd/vnctptd.cpp | 9220 ++++++++++++++++++++ vn.ctp/vnctptd/vnctptd/vnctptd.h | 1101 +++ vn.lts/vnltstd/pyltstd/vnltstd.h | 1 + 55 files changed, 65184 insertions(+) create mode 100644 vn.ctp/ctpapi/ThostFtdcMdApi.h create mode 100644 vn.ctp/ctpapi/ThostFtdcTraderApi.h create mode 100644 vn.ctp/ctpapi/ThostFtdcUserApiDataType.h create mode 100644 vn.ctp/ctpapi/ThostFtdcUserApiStruct.h create mode 100644 vn.ctp/ctpapi/error.dtd create mode 100644 vn.ctp/ctpapi/error.xml create mode 100644 vn.ctp/ctpapi/thostmduserapi.dll create mode 100644 vn.ctp/ctpapi/thostmduserapi.lib create mode 100644 vn.ctp/ctpapi/thosttraderapi.dll create mode 100644 vn.ctp/ctpapi/thosttraderapi.lib create mode 100644 vn.ctp/pyscript/ThostFtdcMdApi.h create mode 100644 vn.ctp/pyscript/ThostFtdcTraderApi.h create mode 100644 vn.ctp/pyscript/ThostFtdcUserApiDataType.h create mode 100644 vn.ctp/pyscript/ThostFtdcUserApiStruct.h create mode 100644 vn.ctp/pyscript/ctp_data_type.py create mode 100644 vn.ctp/pyscript/ctp_md_define.cpp create mode 100644 vn.ctp/pyscript/ctp_md_function.cpp create mode 100644 vn.ctp/pyscript/ctp_md_process.cpp create mode 100644 vn.ctp/pyscript/ctp_md_switch.cpp create mode 100644 vn.ctp/pyscript/ctp_md_task.cpp create mode 100644 vn.ctp/pyscript/ctp_struct.py create mode 100644 vn.ctp/pyscript/ctp_td_define.cpp create mode 100644 vn.ctp/pyscript/ctp_td_function.cpp create mode 100644 vn.ctp/pyscript/ctp_td_header_function.h create mode 100644 vn.ctp/pyscript/ctp_td_header_on.h create mode 100644 vn.ctp/pyscript/ctp_td_header_process.h create mode 100644 vn.ctp/pyscript/ctp_td_process.cpp create mode 100644 vn.ctp/pyscript/ctp_td_switch.cpp create mode 100644 vn.ctp/pyscript/ctp_td_task.cpp create mode 100644 vn.ctp/pyscript/ctp_td_wrap.cpp create mode 100644 vn.ctp/pyscript/generate_data_type.py create mode 100644 vn.ctp/pyscript/generate_md_functions.py create mode 100644 vn.ctp/pyscript/generate_struct.py create mode 100644 vn.ctp/pyscript/generate_td_functions.py create mode 100644 vn.ctp/vnctpmd/test/mdtest.py create mode 100644 vn.ctp/vnctpmd/test/thostmduserapi.dll create mode 100644 vn.ctp/vnctpmd/test/vnctpmd.pyd create mode 100644 vn.ctp/vnctpmd/vnctpmd/ReadMe.txt create mode 100644 vn.ctp/vnctpmd/vnctpmd/dllmain.cpp create mode 100644 vn.ctp/vnctpmd/vnctpmd/stdafx.cpp create mode 100644 vn.ctp/vnctpmd/vnctpmd/stdafx.h create mode 100644 vn.ctp/vnctpmd/vnctpmd/targetver.h create mode 100644 vn.ctp/vnctpmd/vnctpmd/vnctpmd.cpp create mode 100644 vn.ctp/vnctpmd/vnctpmd/vnctpmd.h create mode 100644 vn.ctp/vnctptd/test/tdtest.py create mode 100644 vn.ctp/vnctptd/test/thosttraderapi.dll create mode 100644 vn.ctp/vnctptd/test/vnctptd.pyd create mode 100644 vn.ctp/vnctptd/vnctptd/ReadMe.txt create mode 100644 vn.ctp/vnctptd/vnctptd/dllmain.cpp create mode 100644 vn.ctp/vnctptd/vnctptd/stdafx.cpp create mode 100644 vn.ctp/vnctptd/vnctptd/stdafx.h create mode 100644 vn.ctp/vnctptd/vnctptd/targetver.h create mode 100644 vn.ctp/vnctptd/vnctptd/vnctptd.cpp create mode 100644 vn.ctp/vnctptd/vnctptd/vnctptd.h diff --git a/vn.ctp/ctpapi/ThostFtdcMdApi.h b/vn.ctp/ctpapi/ThostFtdcMdApi.h new file mode 100644 index 00000000..9af915f4 --- /dev/null +++ b/vn.ctp/ctpapi/ThostFtdcMdApi.h @@ -0,0 +1,158 @@ +///////////////////////////////////////////////////////////////////////// +///@system 新一代交易所系统 +///@company 上海期货信息技术有限公司 +///@file ThostFtdcMdApi.h +///@brief 定义了客户端接口 +///@history +///20060106 赵鸿昊 创建该文件 +///////////////////////////////////////////////////////////////////////// + +#if !defined(THOST_FTDCMDAPI_H) +#define THOST_FTDCMDAPI_H + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#include "ThostFtdcUserApiStruct.h" + +#if defined(ISLIB) && defined(WIN32) +#ifdef LIB_MD_API_EXPORT +#define MD_API_EXPORT __declspec(dllexport) +#else +#define MD_API_EXPORT __declspec(dllimport) +#endif +#else +#define MD_API_EXPORT +#endif + +class CThostFtdcMdSpi +{ +public: + ///当客户端与交易后台建立起通信连接时(还未登录前),该方法被调用。 + virtual void OnFrontConnected(){}; + + ///当客户端与交易后台通信连接断开时,该方法被调用。当发生这个情况后,API会自动重新连接,客户端可不做处理。 + ///@param nReason 错误原因 + /// 0x1001 网络读失败 + /// 0x1002 网络写失败 + /// 0x2001 接收心跳超时 + /// 0x2002 发送心跳失败 + /// 0x2003 收到错误报文 + virtual void OnFrontDisconnected(int nReason){}; + + ///心跳超时警告。当长时间未收到报文时,该方法被调用。 + ///@param nTimeLapse 距离上次接收报文的时间 + virtual void OnHeartBeatWarning(int nTimeLapse){}; + + + ///登录请求响应 + virtual void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///登出请求响应 + virtual void OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///错误应答 + virtual void OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///订阅行情应答 + virtual void OnRspSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///取消订阅行情应答 + virtual void OnRspUnSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///订阅询价应答 + virtual void OnRspSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///取消订阅询价应答 + virtual void OnRspUnSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///深度行情通知 + virtual void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData) {}; + + ///询价通知 + virtual void OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp) {}; +}; + +class MD_API_EXPORT CThostFtdcMdApi +{ +public: + ///创建MdApi + ///@param pszFlowPath 存贮订阅信息文件的目录,默认为当前目录 + ///@return 创建出的UserApi + ///modify for udp marketdata + static CThostFtdcMdApi *CreateFtdcMdApi(const char *pszFlowPath = "", const bool bIsUsingUdp=false, const bool bIsMulticast=false); + + ///删除接口对象本身 + ///@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; + + ///注册名字服务器网络地址 + ///@param pszNsAddress:名字服务器网络地址。 + ///@remark 网络地址的格式为:“protocol://ipaddress:port”,如:”tcp://127.0.0.1:12001”。 + ///@remark “tcp”代表传输协议,“127.0.0.1”代表服务器地址。”12001”代表服务器端口号。 + ///@remark RegisterNameServer优先于RegisterFront + virtual void RegisterNameServer(char *pszNsAddress) = 0; + + ///注册名字服务器用户信息 + ///@param pFensUserInfo:用户信息。 + virtual void RegisterFensUserInfo(CThostFtdcFensUserInfoField * pFensUserInfo) = 0; + + ///注册回调接口 + ///@param pSpi 派生自回调接口类的实例 + virtual void RegisterSpi(CThostFtdcMdSpi *pSpi) = 0; + + ///订阅行情。 + ///@param ppInstrumentID 合约ID + ///@param nCount 要订阅/退订行情的合约个数 + ///@remark + virtual int SubscribeMarketData(char *ppInstrumentID[], int nCount) = 0; + + ///退订行情。 + ///@param ppInstrumentID 合约ID + ///@param nCount 要订阅/退订行情的合约个数 + ///@remark + virtual int UnSubscribeMarketData(char *ppInstrumentID[], int nCount) = 0; + + ///订阅询价。 + ///@param ppInstrumentID 合约ID + ///@param nCount 要订阅/退订行情的合约个数 + ///@remark + virtual int SubscribeForQuoteRsp(char *ppInstrumentID[], int nCount) = 0; + + ///退订询价。 + ///@param ppInstrumentID 合约ID + ///@param nCount 要订阅/退订行情的合约个数 + ///@remark + virtual int UnSubscribeForQuoteRsp(char *ppInstrumentID[], int nCount) = 0; + + ///用户登录请求 + virtual int ReqUserLogin(CThostFtdcReqUserLoginField *pReqUserLoginField, int nRequestID) = 0; + + + ///登出请求 + virtual int ReqUserLogout(CThostFtdcUserLogoutField *pUserLogout, int nRequestID) = 0; +protected: + ~CThostFtdcMdApi(){}; +}; + +#endif diff --git a/vn.ctp/ctpapi/ThostFtdcTraderApi.h b/vn.ctp/ctpapi/ThostFtdcTraderApi.h new file mode 100644 index 00000000..93ea0fc7 --- /dev/null +++ b/vn.ctp/ctpapi/ThostFtdcTraderApi.h @@ -0,0 +1,575 @@ +///////////////////////////////////////////////////////////////////////// +///@system 新一代交易所系统 +///@company 上海期货信息技术有限公司 +///@file ThostFtdcTraderApi.h +///@brief 定义了客户端接口 +///@history +///20060106 赵鸿昊 创建该文件 +///////////////////////////////////////////////////////////////////////// + +#if !defined(THOST_FTDCTRADERAPI_H) +#define THOST_FTDCTRADERAPI_H + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#include "ThostFtdcUserApiStruct.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 CThostFtdcTraderSpi +{ +public: + ///当客户端与交易后台建立起通信连接时(还未登录前),该方法被调用。 + virtual void OnFrontConnected(){}; + + ///当客户端与交易后台通信连接断开时,该方法被调用。当发生这个情况后,API会自动重新连接,客户端可不做处理。 + ///@param nReason 错误原因 + /// 0x1001 网络读失败 + /// 0x1002 网络写失败 + /// 0x2001 接收心跳超时 + /// 0x2002 发送心跳失败 + /// 0x2003 收到错误报文 + virtual void OnFrontDisconnected(int nReason){}; + + ///心跳超时警告。当长时间未收到报文时,该方法被调用。 + ///@param nTimeLapse 距离上次接收报文的时间 + virtual void OnHeartBeatWarning(int nTimeLapse){}; + + ///客户端认证响应 + virtual void OnRspAuthenticate(CThostFtdcRspAuthenticateField *pRspAuthenticateField, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + + ///登录请求响应 + virtual void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///登出请求响应 + virtual void OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///用户口令更新请求响应 + virtual void OnRspUserPasswordUpdate(CThostFtdcUserPasswordUpdateField *pUserPasswordUpdate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///资金账户口令更新请求响应 + virtual void OnRspTradingAccountPasswordUpdate(CThostFtdcTradingAccountPasswordUpdateField *pTradingAccountPasswordUpdate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///报单录入请求响应 + virtual void OnRspOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///预埋单录入请求响应 + virtual void OnRspParkedOrderInsert(CThostFtdcParkedOrderField *pParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///预埋撤单录入请求响应 + virtual void OnRspParkedOrderAction(CThostFtdcParkedOrderActionField *pParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///报单操作请求响应 + virtual void OnRspOrderAction(CThostFtdcInputOrderActionField *pInputOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///查询最大报单数量响应 + virtual void OnRspQueryMaxOrderVolume(CThostFtdcQueryMaxOrderVolumeField *pQueryMaxOrderVolume, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///投资者结算结果确认响应 + virtual void OnRspSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///删除预埋单响应 + virtual void OnRspRemoveParkedOrder(CThostFtdcRemoveParkedOrderField *pRemoveParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///删除预埋撤单响应 + virtual void OnRspRemoveParkedOrderAction(CThostFtdcRemoveParkedOrderActionField *pRemoveParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///执行宣告录入请求响应 + virtual void OnRspExecOrderInsert(CThostFtdcInputExecOrderField *pInputExecOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///执行宣告操作请求响应 + virtual void OnRspExecOrderAction(CThostFtdcInputExecOrderActionField *pInputExecOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///询价录入请求响应 + virtual void OnRspForQuoteInsert(CThostFtdcInputForQuoteField *pInputForQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///报价录入请求响应 + virtual void OnRspQuoteInsert(CThostFtdcInputQuoteField *pInputQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///报价操作请求响应 + virtual void OnRspQuoteAction(CThostFtdcInputQuoteActionField *pInputQuoteAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询报单响应 + virtual void OnRspQryOrder(CThostFtdcOrderField *pOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询成交响应 + virtual void OnRspQryTrade(CThostFtdcTradeField *pTrade, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询投资者持仓响应 + virtual void OnRspQryInvestorPosition(CThostFtdcInvestorPositionField *pInvestorPosition, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询资金账户响应 + virtual void OnRspQryTradingAccount(CThostFtdcTradingAccountField *pTradingAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询投资者响应 + virtual void OnRspQryInvestor(CThostFtdcInvestorField *pInvestor, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询交易编码响应 + virtual void OnRspQryTradingCode(CThostFtdcTradingCodeField *pTradingCode, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询合约保证金率响应 + virtual void OnRspQryInstrumentMarginRate(CThostFtdcInstrumentMarginRateField *pInstrumentMarginRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询合约手续费率响应 + virtual void OnRspQryInstrumentCommissionRate(CThostFtdcInstrumentCommissionRateField *pInstrumentCommissionRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询交易所响应 + virtual void OnRspQryExchange(CThostFtdcExchangeField *pExchange, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询产品响应 + virtual void OnRspQryProduct(CThostFtdcProductField *pProduct, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询合约响应 + virtual void OnRspQryInstrument(CThostFtdcInstrumentField *pInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询行情响应 + virtual void OnRspQryDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询投资者结算结果响应 + virtual void OnRspQrySettlementInfo(CThostFtdcSettlementInfoField *pSettlementInfo, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询转帐银行响应 + virtual void OnRspQryTransferBank(CThostFtdcTransferBankField *pTransferBank, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询投资者持仓明细响应 + virtual void OnRspQryInvestorPositionDetail(CThostFtdcInvestorPositionDetailField *pInvestorPositionDetail, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询客户通知响应 + virtual void OnRspQryNotice(CThostFtdcNoticeField *pNotice, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询结算信息确认响应 + virtual void OnRspQrySettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询投资者持仓明细响应 + virtual void OnRspQryInvestorPositionCombineDetail(CThostFtdcInvestorPositionCombineDetailField *pInvestorPositionCombineDetail, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///查询保证金监管系统经纪公司资金账户密钥响应 + virtual void OnRspQryCFMMCTradingAccountKey(CThostFtdcCFMMCTradingAccountKeyField *pCFMMCTradingAccountKey, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询仓单折抵信息响应 + virtual void OnRspQryEWarrantOffset(CThostFtdcEWarrantOffsetField *pEWarrantOffset, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询投资者品种/跨品种保证金响应 + virtual void OnRspQryInvestorProductGroupMargin(CThostFtdcInvestorProductGroupMarginField *pInvestorProductGroupMargin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询交易所保证金率响应 + virtual void OnRspQryExchangeMarginRate(CThostFtdcExchangeMarginRateField *pExchangeMarginRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询交易所调整保证金率响应 + virtual void OnRspQryExchangeMarginRateAdjust(CThostFtdcExchangeMarginRateAdjustField *pExchangeMarginRateAdjust, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询汇率响应 + virtual void OnRspQryExchangeRate(CThostFtdcExchangeRateField *pExchangeRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询二级代理操作员银期权限响应 + virtual void OnRspQrySecAgentACIDMap(CThostFtdcSecAgentACIDMapField *pSecAgentACIDMap, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询期权交易成本响应 + virtual void OnRspQryOptionInstrTradeCost(CThostFtdcOptionInstrTradeCostField *pOptionInstrTradeCost, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询期权合约手续费响应 + virtual void OnRspQryOptionInstrCommRate(CThostFtdcOptionInstrCommRateField *pOptionInstrCommRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询执行宣告响应 + virtual void OnRspQryExecOrder(CThostFtdcExecOrderField *pExecOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询询价响应 + virtual void OnRspQryForQuote(CThostFtdcForQuoteField *pForQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询报价响应 + virtual void OnRspQryQuote(CThostFtdcQuoteField *pQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询转帐流水响应 + virtual void OnRspQryTransferSerial(CThostFtdcTransferSerialField *pTransferSerial, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询银期签约关系响应 + virtual void OnRspQryAccountregister(CThostFtdcAccountregisterField *pAccountregister, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///错误应答 + virtual void OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///报单通知 + virtual void OnRtnOrder(CThostFtdcOrderField *pOrder) {}; + + ///成交通知 + virtual void OnRtnTrade(CThostFtdcTradeField *pTrade) {}; + + ///报单录入错误回报 + virtual void OnErrRtnOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo) {}; + + ///报单操作错误回报 + virtual void OnErrRtnOrderAction(CThostFtdcOrderActionField *pOrderAction, CThostFtdcRspInfoField *pRspInfo) {}; + + ///合约交易状态通知 + virtual void OnRtnInstrumentStatus(CThostFtdcInstrumentStatusField *pInstrumentStatus) {}; + + ///交易通知 + virtual void OnRtnTradingNotice(CThostFtdcTradingNoticeInfoField *pTradingNoticeInfo) {}; + + ///提示条件单校验错误 + virtual void OnRtnErrorConditionalOrder(CThostFtdcErrorConditionalOrderField *pErrorConditionalOrder) {}; + + ///执行宣告通知 + virtual void OnRtnExecOrder(CThostFtdcExecOrderField *pExecOrder) {}; + + ///执行宣告录入错误回报 + virtual void OnErrRtnExecOrderInsert(CThostFtdcInputExecOrderField *pInputExecOrder, CThostFtdcRspInfoField *pRspInfo) {}; + + ///执行宣告操作错误回报 + virtual void OnErrRtnExecOrderAction(CThostFtdcExecOrderActionField *pExecOrderAction, CThostFtdcRspInfoField *pRspInfo) {}; + + ///询价录入错误回报 + virtual void OnErrRtnForQuoteInsert(CThostFtdcInputForQuoteField *pInputForQuote, CThostFtdcRspInfoField *pRspInfo) {}; + + ///报价通知 + virtual void OnRtnQuote(CThostFtdcQuoteField *pQuote) {}; + + ///报价录入错误回报 + virtual void OnErrRtnQuoteInsert(CThostFtdcInputQuoteField *pInputQuote, CThostFtdcRspInfoField *pRspInfo) {}; + + ///报价操作错误回报 + virtual void OnErrRtnQuoteAction(CThostFtdcQuoteActionField *pQuoteAction, CThostFtdcRspInfoField *pRspInfo) {}; + + ///询价通知 + virtual void OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp) {}; + + ///请求查询签约银行响应 + virtual void OnRspQryContractBank(CThostFtdcContractBankField *pContractBank, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询预埋单响应 + virtual void OnRspQryParkedOrder(CThostFtdcParkedOrderField *pParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询预埋撤单响应 + virtual void OnRspQryParkedOrderAction(CThostFtdcParkedOrderActionField *pParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询交易通知响应 + virtual void OnRspQryTradingNotice(CThostFtdcTradingNoticeField *pTradingNotice, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询经纪公司交易参数响应 + virtual void OnRspQryBrokerTradingParams(CThostFtdcBrokerTradingParamsField *pBrokerTradingParams, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询经纪公司交易算法响应 + virtual void OnRspQryBrokerTradingAlgos(CThostFtdcBrokerTradingAlgosField *pBrokerTradingAlgos, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///银行发起银行资金转期货通知 + virtual void OnRtnFromBankToFutureByBank(CThostFtdcRspTransferField *pRspTransfer) {}; + + ///银行发起期货资金转银行通知 + virtual void OnRtnFromFutureToBankByBank(CThostFtdcRspTransferField *pRspTransfer) {}; + + ///银行发起冲正银行转期货通知 + virtual void OnRtnRepealFromBankToFutureByBank(CThostFtdcRspRepealField *pRspRepeal) {}; + + ///银行发起冲正期货转银行通知 + virtual void OnRtnRepealFromFutureToBankByBank(CThostFtdcRspRepealField *pRspRepeal) {}; + + ///期货发起银行资金转期货通知 + virtual void OnRtnFromBankToFutureByFuture(CThostFtdcRspTransferField *pRspTransfer) {}; + + ///期货发起期货资金转银行通知 + virtual void OnRtnFromFutureToBankByFuture(CThostFtdcRspTransferField *pRspTransfer) {}; + + ///系统运行时期货端手工发起冲正银行转期货请求,银行处理完毕后报盘发回的通知 + virtual void OnRtnRepealFromBankToFutureByFutureManual(CThostFtdcRspRepealField *pRspRepeal) {}; + + ///系统运行时期货端手工发起冲正期货转银行请求,银行处理完毕后报盘发回的通知 + virtual void OnRtnRepealFromFutureToBankByFutureManual(CThostFtdcRspRepealField *pRspRepeal) {}; + + ///期货发起查询银行余额通知 + virtual void OnRtnQueryBankBalanceByFuture(CThostFtdcNotifyQueryAccountField *pNotifyQueryAccount) {}; + + ///期货发起银行资金转期货错误回报 + virtual void OnErrRtnBankToFutureByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo) {}; + + ///期货发起期货资金转银行错误回报 + virtual void OnErrRtnFutureToBankByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo) {}; + + ///系统运行时期货端手工发起冲正银行转期货错误回报 + virtual void OnErrRtnRepealBankToFutureByFutureManual(CThostFtdcReqRepealField *pReqRepeal, CThostFtdcRspInfoField *pRspInfo) {}; + + ///系统运行时期货端手工发起冲正期货转银行错误回报 + virtual void OnErrRtnRepealFutureToBankByFutureManual(CThostFtdcReqRepealField *pReqRepeal, CThostFtdcRspInfoField *pRspInfo) {}; + + ///期货发起查询银行余额错误回报 + virtual void OnErrRtnQueryBankBalanceByFuture(CThostFtdcReqQueryAccountField *pReqQueryAccount, CThostFtdcRspInfoField *pRspInfo) {}; + + ///期货发起冲正银行转期货请求,银行处理完毕后报盘发回的通知 + virtual void OnRtnRepealFromBankToFutureByFuture(CThostFtdcRspRepealField *pRspRepeal) {}; + + ///期货发起冲正期货转银行请求,银行处理完毕后报盘发回的通知 + virtual void OnRtnRepealFromFutureToBankByFuture(CThostFtdcRspRepealField *pRspRepeal) {}; + + ///期货发起银行资金转期货应答 + virtual void OnRspFromBankToFutureByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///期货发起期货资金转银行应答 + virtual void OnRspFromFutureToBankByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///期货发起查询银行余额应答 + virtual void OnRspQueryBankAccountMoneyByFuture(CThostFtdcReqQueryAccountField *pReqQueryAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///银行发起银期开户通知 + virtual void OnRtnOpenAccountByBank(CThostFtdcOpenAccountField *pOpenAccount) {}; + + ///银行发起银期销户通知 + virtual void OnRtnCancelAccountByBank(CThostFtdcCancelAccountField *pCancelAccount) {}; + + ///银行发起变更银行账号通知 + virtual void OnRtnChangeAccountByBank(CThostFtdcChangeAccountField *pChangeAccount) {}; +}; + +class TRADER_API_EXPORT CThostFtdcTraderApi +{ +public: + ///创建TraderApi + ///@param pszFlowPath 存贮订阅信息文件的目录,默认为当前目录 + ///@return 创建出的UserApi + static CThostFtdcTraderApi *CreateFtdcTraderApi(const char *pszFlowPath = ""); + + ///删除接口对象本身 + ///@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; + + ///注册名字服务器网络地址 + ///@param pszNsAddress:名字服务器网络地址。 + ///@remark 网络地址的格式为:“protocol://ipaddress:port”,如:”tcp://127.0.0.1:12001”。 + ///@remark “tcp”代表传输协议,“127.0.0.1”代表服务器地址。”12001”代表服务器端口号。 + ///@remark RegisterNameServer优先于RegisterFront + virtual void RegisterNameServer(char *pszNsAddress) = 0; + + ///注册名字服务器用户信息 + ///@param pFensUserInfo:用户信息。 + virtual void RegisterFensUserInfo(CThostFtdcFensUserInfoField * pFensUserInfo) = 0; + + ///注册回调接口 + ///@param pSpi 派生自回调接口类的实例 + virtual void RegisterSpi(CThostFtdcTraderSpi *pSpi) = 0; + + ///订阅私有流。 + ///@param nResumeType 私有流重传方式 + /// THOST_TERT_RESTART:从本交易日开始重传 + /// THOST_TERT_RESUME:从上次收到的续传 + /// THOST_TERT_QUICK:只传送登录后私有流的内容 + ///@remark 该方法要在Init方法前调用。若不调用则不会收到私有流的数据。 + virtual void SubscribePrivateTopic(THOST_TE_RESUME_TYPE nResumeType) = 0; + + ///订阅公共流。 + ///@param nResumeType 公共流重传方式 + /// THOST_TERT_RESTART:从本交易日开始重传 + /// THOST_TERT_RESUME:从上次收到的续传 + /// THOST_TERT_QUICK:只传送登录后公共流的内容 + ///@remark 该方法要在Init方法前调用。若不调用则不会收到公共流的数据。 + virtual void SubscribePublicTopic(THOST_TE_RESUME_TYPE nResumeType) = 0; + + ///客户端认证请求 + virtual int ReqAuthenticate(CThostFtdcReqAuthenticateField *pReqAuthenticateField, int nRequestID) = 0; + + ///用户登录请求 + virtual int ReqUserLogin(CThostFtdcReqUserLoginField *pReqUserLoginField, int nRequestID) = 0; + + + ///登出请求 + virtual int ReqUserLogout(CThostFtdcUserLogoutField *pUserLogout, int nRequestID) = 0; + + ///用户口令更新请求 + virtual int ReqUserPasswordUpdate(CThostFtdcUserPasswordUpdateField *pUserPasswordUpdate, int nRequestID) = 0; + + ///资金账户口令更新请求 + virtual int ReqTradingAccountPasswordUpdate(CThostFtdcTradingAccountPasswordUpdateField *pTradingAccountPasswordUpdate, int nRequestID) = 0; + + ///报单录入请求 + virtual int ReqOrderInsert(CThostFtdcInputOrderField *pInputOrder, int nRequestID) = 0; + + ///预埋单录入请求 + virtual int ReqParkedOrderInsert(CThostFtdcParkedOrderField *pParkedOrder, int nRequestID) = 0; + + ///预埋撤单录入请求 + virtual int ReqParkedOrderAction(CThostFtdcParkedOrderActionField *pParkedOrderAction, int nRequestID) = 0; + + ///报单操作请求 + virtual int ReqOrderAction(CThostFtdcInputOrderActionField *pInputOrderAction, int nRequestID) = 0; + + ///查询最大报单数量请求 + virtual int ReqQueryMaxOrderVolume(CThostFtdcQueryMaxOrderVolumeField *pQueryMaxOrderVolume, int nRequestID) = 0; + + ///投资者结算结果确认 + virtual int ReqSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, int nRequestID) = 0; + + ///请求删除预埋单 + virtual int ReqRemoveParkedOrder(CThostFtdcRemoveParkedOrderField *pRemoveParkedOrder, int nRequestID) = 0; + + ///请求删除预埋撤单 + virtual int ReqRemoveParkedOrderAction(CThostFtdcRemoveParkedOrderActionField *pRemoveParkedOrderAction, int nRequestID) = 0; + + ///执行宣告录入请求 + virtual int ReqExecOrderInsert(CThostFtdcInputExecOrderField *pInputExecOrder, int nRequestID) = 0; + + ///执行宣告操作请求 + virtual int ReqExecOrderAction(CThostFtdcInputExecOrderActionField *pInputExecOrderAction, int nRequestID) = 0; + + ///询价录入请求 + virtual int ReqForQuoteInsert(CThostFtdcInputForQuoteField *pInputForQuote, int nRequestID) = 0; + + ///报价录入请求 + virtual int ReqQuoteInsert(CThostFtdcInputQuoteField *pInputQuote, int nRequestID) = 0; + + ///报价操作请求 + virtual int ReqQuoteAction(CThostFtdcInputQuoteActionField *pInputQuoteAction, int nRequestID) = 0; + + ///请求查询报单 + virtual int ReqQryOrder(CThostFtdcQryOrderField *pQryOrder, int nRequestID) = 0; + + ///请求查询成交 + virtual int ReqQryTrade(CThostFtdcQryTradeField *pQryTrade, int nRequestID) = 0; + + ///请求查询投资者持仓 + virtual int ReqQryInvestorPosition(CThostFtdcQryInvestorPositionField *pQryInvestorPosition, int nRequestID) = 0; + + ///请求查询资金账户 + virtual int ReqQryTradingAccount(CThostFtdcQryTradingAccountField *pQryTradingAccount, int nRequestID) = 0; + + ///请求查询投资者 + virtual int ReqQryInvestor(CThostFtdcQryInvestorField *pQryInvestor, int nRequestID) = 0; + + ///请求查询交易编码 + virtual int ReqQryTradingCode(CThostFtdcQryTradingCodeField *pQryTradingCode, int nRequestID) = 0; + + ///请求查询合约保证金率 + virtual int ReqQryInstrumentMarginRate(CThostFtdcQryInstrumentMarginRateField *pQryInstrumentMarginRate, int nRequestID) = 0; + + ///请求查询合约手续费率 + virtual int ReqQryInstrumentCommissionRate(CThostFtdcQryInstrumentCommissionRateField *pQryInstrumentCommissionRate, int nRequestID) = 0; + + ///请求查询交易所 + virtual int ReqQryExchange(CThostFtdcQryExchangeField *pQryExchange, int nRequestID) = 0; + + ///请求查询产品 + virtual int ReqQryProduct(CThostFtdcQryProductField *pQryProduct, int nRequestID) = 0; + + ///请求查询合约 + virtual int ReqQryInstrument(CThostFtdcQryInstrumentField *pQryInstrument, int nRequestID) = 0; + + ///请求查询行情 + virtual int ReqQryDepthMarketData(CThostFtdcQryDepthMarketDataField *pQryDepthMarketData, int nRequestID) = 0; + + ///请求查询投资者结算结果 + virtual int ReqQrySettlementInfo(CThostFtdcQrySettlementInfoField *pQrySettlementInfo, int nRequestID) = 0; + + ///请求查询转帐银行 + virtual int ReqQryTransferBank(CThostFtdcQryTransferBankField *pQryTransferBank, int nRequestID) = 0; + + ///请求查询投资者持仓明细 + virtual int ReqQryInvestorPositionDetail(CThostFtdcQryInvestorPositionDetailField *pQryInvestorPositionDetail, int nRequestID) = 0; + + ///请求查询客户通知 + virtual int ReqQryNotice(CThostFtdcQryNoticeField *pQryNotice, int nRequestID) = 0; + + ///请求查询结算信息确认 + virtual int ReqQrySettlementInfoConfirm(CThostFtdcQrySettlementInfoConfirmField *pQrySettlementInfoConfirm, int nRequestID) = 0; + + ///请求查询投资者持仓明细 + virtual int ReqQryInvestorPositionCombineDetail(CThostFtdcQryInvestorPositionCombineDetailField *pQryInvestorPositionCombineDetail, int nRequestID) = 0; + + ///请求查询保证金监管系统经纪公司资金账户密钥 + virtual int ReqQryCFMMCTradingAccountKey(CThostFtdcQryCFMMCTradingAccountKeyField *pQryCFMMCTradingAccountKey, int nRequestID) = 0; + + ///请求查询仓单折抵信息 + virtual int ReqQryEWarrantOffset(CThostFtdcQryEWarrantOffsetField *pQryEWarrantOffset, int nRequestID) = 0; + + ///请求查询投资者品种/跨品种保证金 + virtual int ReqQryInvestorProductGroupMargin(CThostFtdcQryInvestorProductGroupMarginField *pQryInvestorProductGroupMargin, int nRequestID) = 0; + + ///请求查询交易所保证金率 + virtual int ReqQryExchangeMarginRate(CThostFtdcQryExchangeMarginRateField *pQryExchangeMarginRate, int nRequestID) = 0; + + ///请求查询交易所调整保证金率 + virtual int ReqQryExchangeMarginRateAdjust(CThostFtdcQryExchangeMarginRateAdjustField *pQryExchangeMarginRateAdjust, int nRequestID) = 0; + + ///请求查询汇率 + virtual int ReqQryExchangeRate(CThostFtdcQryExchangeRateField *pQryExchangeRate, int nRequestID) = 0; + + ///请求查询二级代理操作员银期权限 + virtual int ReqQrySecAgentACIDMap(CThostFtdcQrySecAgentACIDMapField *pQrySecAgentACIDMap, int nRequestID) = 0; + + ///请求查询期权交易成本 + virtual int ReqQryOptionInstrTradeCost(CThostFtdcQryOptionInstrTradeCostField *pQryOptionInstrTradeCost, int nRequestID) = 0; + + ///请求查询期权合约手续费 + virtual int ReqQryOptionInstrCommRate(CThostFtdcQryOptionInstrCommRateField *pQryOptionInstrCommRate, int nRequestID) = 0; + + ///请求查询执行宣告 + virtual int ReqQryExecOrder(CThostFtdcQryExecOrderField *pQryExecOrder, int nRequestID) = 0; + + ///请求查询询价 + virtual int ReqQryForQuote(CThostFtdcQryForQuoteField *pQryForQuote, int nRequestID) = 0; + + ///请求查询报价 + virtual int ReqQryQuote(CThostFtdcQryQuoteField *pQryQuote, int nRequestID) = 0; + + ///请求查询转帐流水 + virtual int ReqQryTransferSerial(CThostFtdcQryTransferSerialField *pQryTransferSerial, int nRequestID) = 0; + + ///请求查询银期签约关系 + virtual int ReqQryAccountregister(CThostFtdcQryAccountregisterField *pQryAccountregister, int nRequestID) = 0; + + ///请求查询签约银行 + virtual int ReqQryContractBank(CThostFtdcQryContractBankField *pQryContractBank, int nRequestID) = 0; + + ///请求查询预埋单 + virtual int ReqQryParkedOrder(CThostFtdcQryParkedOrderField *pQryParkedOrder, int nRequestID) = 0; + + ///请求查询预埋撤单 + virtual int ReqQryParkedOrderAction(CThostFtdcQryParkedOrderActionField *pQryParkedOrderAction, int nRequestID) = 0; + + ///请求查询交易通知 + virtual int ReqQryTradingNotice(CThostFtdcQryTradingNoticeField *pQryTradingNotice, int nRequestID) = 0; + + ///请求查询经纪公司交易参数 + virtual int ReqQryBrokerTradingParams(CThostFtdcQryBrokerTradingParamsField *pQryBrokerTradingParams, int nRequestID) = 0; + + ///请求查询经纪公司交易算法 + virtual int ReqQryBrokerTradingAlgos(CThostFtdcQryBrokerTradingAlgosField *pQryBrokerTradingAlgos, int nRequestID) = 0; + + ///期货发起银行资金转期货请求 + virtual int ReqFromBankToFutureByFuture(CThostFtdcReqTransferField *pReqTransfer, int nRequestID) = 0; + + ///期货发起期货资金转银行请求 + virtual int ReqFromFutureToBankByFuture(CThostFtdcReqTransferField *pReqTransfer, int nRequestID) = 0; + + ///期货发起查询银行余额请求 + virtual int ReqQueryBankAccountMoneyByFuture(CThostFtdcReqQueryAccountField *pReqQueryAccount, int nRequestID) = 0; +protected: + ~CThostFtdcTraderApi(){}; +}; + +#endif diff --git a/vn.ctp/ctpapi/ThostFtdcUserApiDataType.h b/vn.ctp/ctpapi/ThostFtdcUserApiDataType.h new file mode 100644 index 00000000..15c6e00b --- /dev/null +++ b/vn.ctp/ctpapi/ThostFtdcUserApiDataType.h @@ -0,0 +1,6267 @@ +///////////////////////////////////////////////////////////////////////// +///@system 新一代交易所系统 +///@company 上海期货信息技术有限公司 +///@file ThostFtdcUserApiDataType.h +///@brief 定义了客户端接口使用的业务数据类型 +///@history +///20060106 赵鸿昊 创建该文件 +///////////////////////////////////////////////////////////////////////// + +#ifndef THOST_FTDCDATATYPE_H +#define THOST_FTDCDATATYPE_H + +enum THOST_TE_RESUME_TYPE +{ + THOST_TERT_RESTART = 0, + THOST_TERT_RESUME, + THOST_TERT_QUICK +}; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTraderIDType是一个交易所交易员代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTraderIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestorIDType是一个投资者代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInvestorIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrokerIDType是一个经纪公司代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBrokerIDType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrokerAbbrType是一个经纪公司简称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBrokerAbbrType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrokerNameType是一个经纪公司名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBrokerNameType[81]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangeInstIDType是一个合约在交易所的代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcExchangeInstIDType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderRefType是一个报单引用类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOrderRefType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcParticipantIDType是一个会员代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcParticipantIDType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserIDType是一个用户代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUserIDType[16]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPasswordType是一个密码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPasswordType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClientIDType是一个交易编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcClientIDType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstrumentIDType是一个合约代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInstrumentIDType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMarketIDType是一个市场代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcMarketIDType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProductNameType是一个产品名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcProductNameType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangeIDType是一个交易所代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcExchangeIDType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangeNameType是一个交易所名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcExchangeNameType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangeAbbrType是一个交易所简称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcExchangeAbbrType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangeFlagType是一个交易所标志类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcExchangeFlagType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMacAddressType是一个Mac地址类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcMacAddressType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSystemIDType是一个系统编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSystemIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangePropertyType是一个交易所属性类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_EXP_Normal '0' +///根据成交生成报单 +#define THOST_FTDC_EXP_GenOrderByTrade '1' + +typedef char TThostFtdcExchangePropertyType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDateType是一个日期类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDateType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTimeType是一个时间类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTimeType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLongTimeType是一个长时间类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcLongTimeType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstrumentNameType是一个合约名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInstrumentNameType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettlementGroupIDType是一个结算组代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSettlementGroupIDType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderSysIDType是一个报单编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOrderSysIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeIDType是一个成交编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTradeIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCommandTypeType是一个DB命令类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCommandTypeType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIPAddressType是一个IP地址类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcIPAddressType[16]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIPPortType是一个IP端口类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcIPPortType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProductInfoType是一个产品信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcProductInfoType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProtocolInfoType是一个协议信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcProtocolInfoType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBusinessUnitType是一个业务单元类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBusinessUnitType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDepositSeqNoType是一个出入金流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDepositSeqNoType[15]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIdentifiedCardNoType是一个证件号码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcIdentifiedCardNoType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIdCardTypeType是一个证件类型类型 +///////////////////////////////////////////////////////////////////////// +///组织机构代码 +#define THOST_FTDC_ICT_EID '0' +///中国公民身份证 +#define THOST_FTDC_ICT_IDCard '1' +///军官证 +#define THOST_FTDC_ICT_OfficerIDCard '2' +///警官证 +#define THOST_FTDC_ICT_PoliceIDCard '3' +///士兵证 +#define THOST_FTDC_ICT_SoldierIDCard '4' +///户口簿 +#define THOST_FTDC_ICT_HouseholdRegister '5' +///护照 +#define THOST_FTDC_ICT_Passport '6' +///台胞证 +#define THOST_FTDC_ICT_TaiwanCompatriotIDCard '7' +///回乡证 +#define THOST_FTDC_ICT_HomeComingCard '8' +///营业执照号 +#define THOST_FTDC_ICT_LicenseNo '9' +///税务登记号/当地纳税ID +#define THOST_FTDC_ICT_TaxNo 'A' +///港澳居民来往内地通行证 +#define THOST_FTDC_ICT_HMMainlandTravelPermit 'B' +///台湾居民来往大陆通行证 +#define THOST_FTDC_ICT_TwMainlandTravelPermit 'C' +///驾照 +#define THOST_FTDC_ICT_DrivingLicense 'D' +///当地社保ID +#define THOST_FTDC_ICT_SocialID 'F' +///当地身份证 +#define THOST_FTDC_ICT_LocalID 'G' +///商业登记证 +#define THOST_FTDC_ICT_BusinessRegistration 'H' +///港澳永久性居民身份证 +#define THOST_FTDC_ICT_HKMCIDCard 'I' +///其他证件 +#define THOST_FTDC_ICT_OtherCard 'x' + +typedef char TThostFtdcIdCardTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderLocalIDType是一个本地报单编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOrderLocalIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserNameType是一个用户名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUserNameType[81]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPartyNameType是一个参与人名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPartyNameType[81]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcErrorMsgType是一个错误信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcErrorMsgType[81]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFieldNameType是一个字段名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFieldNameType[2049]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFieldContentType是一个字段内容类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFieldContentType[2049]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSystemNameType是一个系统名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSystemNameType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcContentType是一个消息正文类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcContentType[501]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestorRangeType是一个投资者范围类型 +///////////////////////////////////////////////////////////////////////// +///所有 +#define THOST_FTDC_IR_All '1' +///投资者组 +#define THOST_FTDC_IR_Group '2' +///单一投资者 +#define THOST_FTDC_IR_Single '3' + +typedef char TThostFtdcInvestorRangeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDepartmentRangeType是一个投资者范围类型 +///////////////////////////////////////////////////////////////////////// +///所有 +#define THOST_FTDC_DR_All '1' +///组织架构 +#define THOST_FTDC_DR_Group '2' +///单一投资者 +#define THOST_FTDC_DR_Single '3' + +typedef char TThostFtdcDepartmentRangeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDataSyncStatusType是一个数据同步状态类型 +///////////////////////////////////////////////////////////////////////// +///未同步 +#define THOST_FTDC_DS_Asynchronous '1' +///同步中 +#define THOST_FTDC_DS_Synchronizing '2' +///已同步 +#define THOST_FTDC_DS_Synchronized '3' + +typedef char TThostFtdcDataSyncStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrokerDataSyncStatusType是一个经纪公司数据同步状态类型 +///////////////////////////////////////////////////////////////////////// +///已同步 +#define THOST_FTDC_BDS_Synchronized '1' +///同步中 +#define THOST_FTDC_BDS_Synchronizing '2' + +typedef char TThostFtdcBrokerDataSyncStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangeConnectStatusType是一个交易所连接状态类型 +///////////////////////////////////////////////////////////////////////// +///没有任何连接 +#define THOST_FTDC_ECS_NoConnection '1' +///已经发出合约查询请求 +#define THOST_FTDC_ECS_QryInstrumentSent '2' +///已经获取信息 +#define THOST_FTDC_ECS_GotInformation '9' + +typedef char TThostFtdcExchangeConnectStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTraderConnectStatusType是一个交易所交易员连接状态类型 +///////////////////////////////////////////////////////////////////////// +///没有任何连接 +#define THOST_FTDC_TCS_NotConnected '1' +///已经连接 +#define THOST_FTDC_TCS_Connected '2' +///已经发出合约查询请求 +#define THOST_FTDC_TCS_QryInstrumentSent '3' +///订阅私有流 +#define THOST_FTDC_TCS_SubPrivateFlow '4' + +typedef char TThostFtdcTraderConnectStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFunctionCodeType是一个功能代码类型 +///////////////////////////////////////////////////////////////////////// +///数据异步化 +#define THOST_FTDC_FC_DataAsync '1' +///强制用户登出 +#define THOST_FTDC_FC_ForceUserLogout '2' +///变更管理用户口令 +#define THOST_FTDC_FC_UserPasswordUpdate '3' +///变更经纪公司口令 +#define THOST_FTDC_FC_BrokerPasswordUpdate '4' +///变更投资者口令 +#define THOST_FTDC_FC_InvestorPasswordUpdate '5' +///报单插入 +#define THOST_FTDC_FC_OrderInsert '6' +///报单操作 +#define THOST_FTDC_FC_OrderAction '7' +///同步系统数据 +#define THOST_FTDC_FC_SyncSystemData '8' +///同步经纪公司数据 +#define THOST_FTDC_FC_SyncBrokerData '9' +///批量同步经纪公司数据 +#define THOST_FTDC_FC_BachSyncBrokerData 'A' +///超级查询 +#define THOST_FTDC_FC_SuperQuery 'B' +///预埋报单插入 +#define THOST_FTDC_FC_ParkedOrderInsert 'C' +///预埋报单操作 +#define THOST_FTDC_FC_ParkedOrderAction 'D' +///同步动态令牌 +#define THOST_FTDC_FC_SyncOTP 'E' +///删除未知单 +#define THOST_FTDC_FC_DeleteOrder 'F' + +typedef char TThostFtdcFunctionCodeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrokerFunctionCodeType是一个经纪公司功能代码类型 +///////////////////////////////////////////////////////////////////////// +///强制用户登出 +#define THOST_FTDC_BFC_ForceUserLogout '1' +///变更用户口令 +#define THOST_FTDC_BFC_UserPasswordUpdate '2' +///同步经纪公司数据 +#define THOST_FTDC_BFC_SyncBrokerData '3' +///批量同步经纪公司数据 +#define THOST_FTDC_BFC_BachSyncBrokerData '4' +///报单插入 +#define THOST_FTDC_BFC_OrderInsert '5' +///报单操作 +#define THOST_FTDC_BFC_OrderAction '6' +///全部查询 +#define THOST_FTDC_BFC_AllQuery '7' +///系统功能:登入/登出/修改密码等 +#define THOST_FTDC_BFC_log 'a' +///基本查询:查询基础数据,如合约,交易所等常量 +#define THOST_FTDC_BFC_BaseQry 'b' +///交易查询:如查成交,委托 +#define THOST_FTDC_BFC_TradeQry 'c' +///交易功能:报单,撤单 +#define THOST_FTDC_BFC_Trade 'd' +///银期转账 +#define THOST_FTDC_BFC_Virement 'e' +///风险监控 +#define THOST_FTDC_BFC_Risk 'f' +///查询/管理:查询会话,踢人等 +#define THOST_FTDC_BFC_Session 'g' +///风控通知控制 +#define THOST_FTDC_BFC_RiskNoticeCtl 'h' +///风控通知发送 +#define THOST_FTDC_BFC_RiskNotice 'i' +///察看经纪公司资金权限 +#define THOST_FTDC_BFC_BrokerDeposit 'j' +///资金查询 +#define THOST_FTDC_BFC_QueryFund 'k' +///报单查询 +#define THOST_FTDC_BFC_QueryOrder 'l' +///成交查询 +#define THOST_FTDC_BFC_QueryTrade 'm' +///持仓查询 +#define THOST_FTDC_BFC_QueryPosition 'n' +///行情查询 +#define THOST_FTDC_BFC_QueryMarketData 'o' +///用户事件查询 +#define THOST_FTDC_BFC_QueryUserEvent 'p' +///风险通知查询 +#define THOST_FTDC_BFC_QueryRiskNotify 'q' +///出入金查询 +#define THOST_FTDC_BFC_QueryFundChange 'r' +///投资者信息查询 +#define THOST_FTDC_BFC_QueryInvestor 's' +///交易编码查询 +#define THOST_FTDC_BFC_QueryTradingCode 't' +///强平 +#define THOST_FTDC_BFC_ForceClose 'u' +///压力测试 +#define THOST_FTDC_BFC_PressTest 'v' +///权益反算 +#define THOST_FTDC_BFC_RemainCalc 'w' +///净持仓保证金指标 +#define THOST_FTDC_BFC_NetPositionInd 'x' +///风险预算 +#define THOST_FTDC_BFC_RiskPredict 'y' +///数据导出 +#define THOST_FTDC_BFC_DataExport 'z' +///风控指标设置 +#define THOST_FTDC_BFC_RiskTargetSetup 'A' +///行情预警 +#define THOST_FTDC_BFC_MarketDataWarn 'B' +///业务通知查询 +#define THOST_FTDC_BFC_QryBizNotice 'C' +///业务通知模板设置 +#define THOST_FTDC_BFC_CfgBizNotice 'D' +///同步动态令牌 +#define THOST_FTDC_BFC_SyncOTP 'E' +///发送业务通知 +#define THOST_FTDC_BFC_SendBizNotice 'F' +///风险级别标准设置 +#define THOST_FTDC_BFC_CfgRiskLevelStd 'G' +///交易终端应急功能 +#define THOST_FTDC_BFC_TbCommand 'H' +///删除未知单 +#define THOST_FTDC_BFC_DeleteOrder 'J' +///预埋报单插入 +#define THOST_FTDC_BFC_ParkedOrderInsert 'K' +///预埋报单操作 +#define THOST_FTDC_BFC_ParkedOrderAction 'L' + +typedef char TThostFtdcBrokerFunctionCodeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderActionStatusType是一个报单操作状态类型 +///////////////////////////////////////////////////////////////////////// +///已经提交 +#define THOST_FTDC_OAS_Submitted 'a' +///已经接受 +#define THOST_FTDC_OAS_Accepted 'b' +///已经被拒绝 +#define THOST_FTDC_OAS_Rejected 'c' + +typedef char TThostFtdcOrderActionStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderStatusType是一个报单状态类型 +///////////////////////////////////////////////////////////////////////// +///全部成交 +#define THOST_FTDC_OST_AllTraded '0' +///部分成交还在队列中 +#define THOST_FTDC_OST_PartTradedQueueing '1' +///部分成交不在队列中 +#define THOST_FTDC_OST_PartTradedNotQueueing '2' +///未成交还在队列中 +#define THOST_FTDC_OST_NoTradeQueueing '3' +///未成交不在队列中 +#define THOST_FTDC_OST_NoTradeNotQueueing '4' +///撤单 +#define THOST_FTDC_OST_Canceled '5' +///未知 +#define THOST_FTDC_OST_Unknown 'a' +///尚未触发 +#define THOST_FTDC_OST_NotTouched 'b' +///已触发 +#define THOST_FTDC_OST_Touched 'c' + +typedef char TThostFtdcOrderStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderSubmitStatusType是一个报单提交状态类型 +///////////////////////////////////////////////////////////////////////// +///已经提交 +#define THOST_FTDC_OSS_InsertSubmitted '0' +///撤单已经提交 +#define THOST_FTDC_OSS_CancelSubmitted '1' +///修改已经提交 +#define THOST_FTDC_OSS_ModifySubmitted '2' +///已经接受 +#define THOST_FTDC_OSS_Accepted '3' +///报单已经被拒绝 +#define THOST_FTDC_OSS_InsertRejected '4' +///撤单已经被拒绝 +#define THOST_FTDC_OSS_CancelRejected '5' +///改单已经被拒绝 +#define THOST_FTDC_OSS_ModifyRejected '6' + +typedef char TThostFtdcOrderSubmitStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPositionDateType是一个持仓日期类型 +///////////////////////////////////////////////////////////////////////// +///今日持仓 +#define THOST_FTDC_PSD_Today '1' +///历史持仓 +#define THOST_FTDC_PSD_History '2' + +typedef char TThostFtdcPositionDateType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPositionDateTypeType是一个持仓日期类型类型 +///////////////////////////////////////////////////////////////////////// +///使用历史持仓 +#define THOST_FTDC_PDT_UseHistory '1' +///不使用历史持仓 +#define THOST_FTDC_PDT_NoUseHistory '2' + +typedef char TThostFtdcPositionDateTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradingRoleType是一个交易角色类型 +///////////////////////////////////////////////////////////////////////// +///代理 +#define THOST_FTDC_ER_Broker '1' +///自营 +#define THOST_FTDC_ER_Host '2' +///做市商 +#define THOST_FTDC_ER_Maker '3' + +typedef char TThostFtdcTradingRoleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProductClassType是一个产品类型类型 +///////////////////////////////////////////////////////////////////////// +///期货 +#define THOST_FTDC_PC_Futures '1' +///期货期权 +#define THOST_FTDC_PC_Options '2' +///组合 +#define THOST_FTDC_PC_Combination '3' +///即期 +#define THOST_FTDC_PC_Spot '4' +///期转现 +#define THOST_FTDC_PC_EFP '5' +///现货期权 +#define THOST_FTDC_PC_SpotOption '6' + +typedef char TThostFtdcProductClassType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstLifePhaseType是一个合约生命周期状态类型 +///////////////////////////////////////////////////////////////////////// +///未上市 +#define THOST_FTDC_IP_NotStart '0' +///上市 +#define THOST_FTDC_IP_Started '1' +///停牌 +#define THOST_FTDC_IP_Pause '2' +///到期 +#define THOST_FTDC_IP_Expired '3' + +typedef char TThostFtdcInstLifePhaseType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDirectionType是一个买卖方向类型 +///////////////////////////////////////////////////////////////////////// +///买 +#define THOST_FTDC_D_Buy '0' +///卖 +#define THOST_FTDC_D_Sell '1' + +typedef char TThostFtdcDirectionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPositionTypeType是一个持仓类型类型 +///////////////////////////////////////////////////////////////////////// +///净持仓 +#define THOST_FTDC_PT_Net '1' +///综合持仓 +#define THOST_FTDC_PT_Gross '2' + +typedef char TThostFtdcPositionTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPosiDirectionType是一个持仓多空方向类型 +///////////////////////////////////////////////////////////////////////// +///净 +#define THOST_FTDC_PD_Net '1' +///多头 +#define THOST_FTDC_PD_Long '2' +///空头 +#define THOST_FTDC_PD_Short '3' + +typedef char TThostFtdcPosiDirectionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSysSettlementStatusType是一个系统结算状态类型 +///////////////////////////////////////////////////////////////////////// +///不活跃 +#define THOST_FTDC_SS_NonActive '1' +///启动 +#define THOST_FTDC_SS_Startup '2' +///操作 +#define THOST_FTDC_SS_Operating '3' +///结算 +#define THOST_FTDC_SS_Settlement '4' +///结算完成 +#define THOST_FTDC_SS_SettlementFinished '5' + +typedef char TThostFtdcSysSettlementStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRatioAttrType是一个费率属性类型 +///////////////////////////////////////////////////////////////////////// +///交易费率 +#define THOST_FTDC_RA_Trade '0' +///结算费率 +#define THOST_FTDC_RA_Settlement '1' + +typedef char TThostFtdcRatioAttrType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcHedgeFlagType是一个投机套保标志类型 +///////////////////////////////////////////////////////////////////////// +///投机 +#define THOST_FTDC_HF_Speculation '1' +///套利 +#define THOST_FTDC_HF_Arbitrage '2' +///套保 +#define THOST_FTDC_HF_Hedge '3' + +typedef char TThostFtdcHedgeFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBillHedgeFlagType是一个投机套保标志类型 +///////////////////////////////////////////////////////////////////////// +///投机 +#define THOST_FTDC_BHF_Speculation '1' +///套利 +#define THOST_FTDC_BHF_Arbitrage '2' +///套保 +#define THOST_FTDC_BHF_Hedge '3' + +typedef char TThostFtdcBillHedgeFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClientIDTypeType是一个交易编码类型类型 +///////////////////////////////////////////////////////////////////////// +///投机 +#define THOST_FTDC_CIDT_Speculation '1' +///套利 +#define THOST_FTDC_CIDT_Arbitrage '2' +///套保 +#define THOST_FTDC_CIDT_Hedge '3' + +typedef char TThostFtdcClientIDTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderPriceTypeType是一个报单价格条件类型 +///////////////////////////////////////////////////////////////////////// +///任意价 +#define THOST_FTDC_OPT_AnyPrice '1' +///限价 +#define THOST_FTDC_OPT_LimitPrice '2' +///最优价 +#define THOST_FTDC_OPT_BestPrice '3' +///最新价 +#define THOST_FTDC_OPT_LastPrice '4' +///最新价浮动上浮1个ticks +#define THOST_FTDC_OPT_LastPricePlusOneTicks '5' +///最新价浮动上浮2个ticks +#define THOST_FTDC_OPT_LastPricePlusTwoTicks '6' +///最新价浮动上浮3个ticks +#define THOST_FTDC_OPT_LastPricePlusThreeTicks '7' +///卖一价 +#define THOST_FTDC_OPT_AskPrice1 '8' +///卖一价浮动上浮1个ticks +#define THOST_FTDC_OPT_AskPrice1PlusOneTicks '9' +///卖一价浮动上浮2个ticks +#define THOST_FTDC_OPT_AskPrice1PlusTwoTicks 'A' +///卖一价浮动上浮3个ticks +#define THOST_FTDC_OPT_AskPrice1PlusThreeTicks 'B' +///买一价 +#define THOST_FTDC_OPT_BidPrice1 'C' +///买一价浮动上浮1个ticks +#define THOST_FTDC_OPT_BidPrice1PlusOneTicks 'D' +///买一价浮动上浮2个ticks +#define THOST_FTDC_OPT_BidPrice1PlusTwoTicks 'E' +///买一价浮动上浮3个ticks +#define THOST_FTDC_OPT_BidPrice1PlusThreeTicks 'F' + +typedef char TThostFtdcOrderPriceTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOffsetFlagType是一个开平标志类型 +///////////////////////////////////////////////////////////////////////// +///开仓 +#define THOST_FTDC_OF_Open '0' +///平仓 +#define THOST_FTDC_OF_Close '1' +///强平 +#define THOST_FTDC_OF_ForceClose '2' +///平今 +#define THOST_FTDC_OF_CloseToday '3' +///平昨 +#define THOST_FTDC_OF_CloseYesterday '4' +///强减 +#define THOST_FTDC_OF_ForceOff '5' +///本地强平 +#define THOST_FTDC_OF_LocalForceClose '6' + +typedef char TThostFtdcOffsetFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcForceCloseReasonType是一个强平原因类型 +///////////////////////////////////////////////////////////////////////// +///非强平 +#define THOST_FTDC_FCC_NotForceClose '0' +///资金不足 +#define THOST_FTDC_FCC_LackDeposit '1' +///客户超仓 +#define THOST_FTDC_FCC_ClientOverPositionLimit '2' +///会员超仓 +#define THOST_FTDC_FCC_MemberOverPositionLimit '3' +///持仓非整数倍 +#define THOST_FTDC_FCC_NotMultiple '4' +///违规 +#define THOST_FTDC_FCC_Violation '5' +///其它 +#define THOST_FTDC_FCC_Other '6' +///自然人临近交割 +#define THOST_FTDC_FCC_PersonDeliv '7' + +typedef char TThostFtdcForceCloseReasonType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderTypeType是一个报单类型类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_ORDT_Normal '0' +///报价衍生 +#define THOST_FTDC_ORDT_DeriveFromQuote '1' +///组合衍生 +#define THOST_FTDC_ORDT_DeriveFromCombination '2' +///组合报单 +#define THOST_FTDC_ORDT_Combination '3' +///条件单 +#define THOST_FTDC_ORDT_ConditionalOrder '4' +///互换单 +#define THOST_FTDC_ORDT_Swap '5' + +typedef char TThostFtdcOrderTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTimeConditionType是一个有效期类型类型 +///////////////////////////////////////////////////////////////////////// +///立即完成,否则撤销 +#define THOST_FTDC_TC_IOC '1' +///本节有效 +#define THOST_FTDC_TC_GFS '2' +///当日有效 +#define THOST_FTDC_TC_GFD '3' +///指定日期前有效 +#define THOST_FTDC_TC_GTD '4' +///撤销前有效 +#define THOST_FTDC_TC_GTC '5' +///集合竞价有效 +#define THOST_FTDC_TC_GFA '6' + +typedef char TThostFtdcTimeConditionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVolumeConditionType是一个成交量类型类型 +///////////////////////////////////////////////////////////////////////// +///任何数量 +#define THOST_FTDC_VC_AV '1' +///最小数量 +#define THOST_FTDC_VC_MV '2' +///全部数量 +#define THOST_FTDC_VC_CV '3' + +typedef char TThostFtdcVolumeConditionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcContingentConditionType是一个触发条件类型 +///////////////////////////////////////////////////////////////////////// +///立即 +#define THOST_FTDC_CC_Immediately '1' +///止损 +#define THOST_FTDC_CC_Touch '2' +///止赢 +#define THOST_FTDC_CC_TouchProfit '3' +///预埋单 +#define THOST_FTDC_CC_ParkedOrder '4' +///最新价大于条件价 +#define THOST_FTDC_CC_LastPriceGreaterThanStopPrice '5' +///最新价大于等于条件价 +#define THOST_FTDC_CC_LastPriceGreaterEqualStopPrice '6' +///最新价小于条件价 +#define THOST_FTDC_CC_LastPriceLesserThanStopPrice '7' +///最新价小于等于条件价 +#define THOST_FTDC_CC_LastPriceLesserEqualStopPrice '8' +///卖一价大于条件价 +#define THOST_FTDC_CC_AskPriceGreaterThanStopPrice '9' +///卖一价大于等于条件价 +#define THOST_FTDC_CC_AskPriceGreaterEqualStopPrice 'A' +///卖一价小于条件价 +#define THOST_FTDC_CC_AskPriceLesserThanStopPrice 'B' +///卖一价小于等于条件价 +#define THOST_FTDC_CC_AskPriceLesserEqualStopPrice 'C' +///买一价大于条件价 +#define THOST_FTDC_CC_BidPriceGreaterThanStopPrice 'D' +///买一价大于等于条件价 +#define THOST_FTDC_CC_BidPriceGreaterEqualStopPrice 'E' +///买一价小于条件价 +#define THOST_FTDC_CC_BidPriceLesserThanStopPrice 'F' +///买一价小于等于条件价 +#define THOST_FTDC_CC_BidPriceLesserEqualStopPrice 'H' + +typedef char TThostFtdcContingentConditionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcActionFlagType是一个操作标志类型 +///////////////////////////////////////////////////////////////////////// +///删除 +#define THOST_FTDC_AF_Delete '0' +///修改 +#define THOST_FTDC_AF_Modify '3' + +typedef char TThostFtdcActionFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradingRightType是一个交易权限类型 +///////////////////////////////////////////////////////////////////////// +///可以交易 +#define THOST_FTDC_TR_Allow '0' +///只能平仓 +#define THOST_FTDC_TR_CloseOnly '1' +///不能交易 +#define THOST_FTDC_TR_Forbidden '2' + +typedef char TThostFtdcTradingRightType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderSourceType是一个报单来源类型 +///////////////////////////////////////////////////////////////////////// +///来自参与者 +#define THOST_FTDC_OSRC_Participant '0' +///来自管理员 +#define THOST_FTDC_OSRC_Administrator '1' + +typedef char TThostFtdcOrderSourceType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeTypeType是一个成交类型类型 +///////////////////////////////////////////////////////////////////////// +///组合持仓拆分为单一持仓,初始化不应包含该类型的持仓 +#define THOST_FTDC_TRDT_SplitCombination '#' +///普通成交 +#define THOST_FTDC_TRDT_Common '0' +///期权执行 +#define THOST_FTDC_TRDT_OptionsExecution '1' +///OTC成交 +#define THOST_FTDC_TRDT_OTC '2' +///期转现衍生成交 +#define THOST_FTDC_TRDT_EFPDerived '3' +///组合衍生成交 +#define THOST_FTDC_TRDT_CombinationDerived '4' + +typedef char TThostFtdcTradeTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPriceSourceType是一个成交价来源类型 +///////////////////////////////////////////////////////////////////////// +///前成交价 +#define THOST_FTDC_PSRC_LastPrice '0' +///买委托价 +#define THOST_FTDC_PSRC_Buy '1' +///卖委托价 +#define THOST_FTDC_PSRC_Sell '2' + +typedef char TThostFtdcPriceSourceType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstrumentStatusType是一个合约交易状态类型 +///////////////////////////////////////////////////////////////////////// +///开盘前 +#define THOST_FTDC_IS_BeforeTrading '0' +///非交易 +#define THOST_FTDC_IS_NoTrading '1' +///连续交易 +#define THOST_FTDC_IS_Continous '2' +///集合竞价报单 +#define THOST_FTDC_IS_AuctionOrdering '3' +///集合竞价价格平衡 +#define THOST_FTDC_IS_AuctionBalance '4' +///集合竞价撮合 +#define THOST_FTDC_IS_AuctionMatch '5' +///收盘 +#define THOST_FTDC_IS_Closed '6' + +typedef char TThostFtdcInstrumentStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstStatusEnterReasonType是一个品种进入交易状态原因类型 +///////////////////////////////////////////////////////////////////////// +///自动切换 +#define THOST_FTDC_IER_Automatic '1' +///手动切换 +#define THOST_FTDC_IER_Manual '2' +///熔断 +#define THOST_FTDC_IER_Fuse '3' + +typedef char TThostFtdcInstStatusEnterReasonType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderActionRefType是一个报单操作引用类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcOrderActionRefType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstallCountType是一个安装数量类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcInstallCountType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstallIDType是一个安装编号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcInstallIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcErrorIDType是一个错误代码类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcErrorIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettlementIDType是一个结算编号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcSettlementIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVolumeType是一个数量类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcVolumeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFrontIDType是一个前置编号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcFrontIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSessionIDType是一个会话编号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcSessionIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSequenceNoType是一个序号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcSequenceNoType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCommandNoType是一个DB命令序号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcCommandNoType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMillisecType是一个时间(毫秒)类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcMillisecType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVolumeMultipleType是一个合约数量乘数类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcVolumeMultipleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradingSegmentSNType是一个交易阶段编号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcTradingSegmentSNType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRequestIDType是一个请求编号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcRequestIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcYearType是一个年份类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcYearType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMonthType是一个月份类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcMonthType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBoolType是一个布尔型类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcBoolType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPriceType是一个价格类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcPriceType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCombOffsetFlagType是一个组合开平标志类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCombOffsetFlagType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCombHedgeFlagType是一个组合投机套保标志类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCombHedgeFlagType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRatioType是一个比率类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcRatioType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMoneyType是一个资金类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcMoneyType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLargeVolumeType是一个大额数量类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcLargeVolumeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSequenceSeriesType是一个序列系列号类型 +///////////////////////////////////////////////////////////////////////// +typedef short TThostFtdcSequenceSeriesType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCommPhaseNoType是一个通讯时段编号类型 +///////////////////////////////////////////////////////////////////////// +typedef short TThostFtdcCommPhaseNoType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSequenceLabelType是一个序列编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSequenceLabelType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUnderlyingMultipleType是一个基础商品乘数类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcUnderlyingMultipleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPriorityType是一个优先级类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcPriorityType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcContractCodeType是一个合同编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcContractCodeType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCityType是一个市类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCityType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIsStockType是一个是否股民类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcIsStockType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcChannelType是一个渠道类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcChannelType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAddressType是一个通讯地址类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAddressType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcZipCodeType是一个邮政编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcZipCodeType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTelephoneType是一个联系电话类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTelephoneType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFaxType是一个传真类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFaxType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMobileType是一个手机类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcMobileType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcEMailType是一个电子邮件类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcEMailType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMemoType是一个备注类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcMemoType[161]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCompanyCodeType是一个企业代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCompanyCodeType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcWebsiteType是一个网站地址类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcWebsiteType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTaxNoType是一个税务登记号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTaxNoType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBatchStatusType是一个处理状态类型 +///////////////////////////////////////////////////////////////////////// +///未上传 +#define THOST_FTDC_BS_NoUpload '1' +///已上传 +#define THOST_FTDC_BS_Uploaded '2' +///审核失败 +#define THOST_FTDC_BS_Failed '3' + +typedef char TThostFtdcBatchStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPropertyIDType是一个属性代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPropertyIDType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPropertyNameType是一个属性名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPropertyNameType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLicenseNoType是一个营业执照号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcLicenseNoType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAgentIDType是一个经纪人代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAgentIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAgentNameType是一个经纪人名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAgentNameType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAgentGroupIDType是一个经纪人组代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAgentGroupIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAgentGroupNameType是一个经纪人组名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAgentGroupNameType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReturnStyleType是一个按品种返还方式类型 +///////////////////////////////////////////////////////////////////////// +///按所有品种 +#define THOST_FTDC_RS_All '1' +///按品种 +#define THOST_FTDC_RS_ByProduct '2' + +typedef char TThostFtdcReturnStyleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReturnPatternType是一个返还模式类型 +///////////////////////////////////////////////////////////////////////// +///按成交手数 +#define THOST_FTDC_RP_ByVolume '1' +///按留存手续费 +#define THOST_FTDC_RP_ByFeeOnHand '2' + +typedef char TThostFtdcReturnPatternType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReturnLevelType是一个返还级别类型 +///////////////////////////////////////////////////////////////////////// +///级别1 +#define THOST_FTDC_RL_Level1 '1' +///级别2 +#define THOST_FTDC_RL_Level2 '2' +///级别3 +#define THOST_FTDC_RL_Level3 '3' +///级别4 +#define THOST_FTDC_RL_Level4 '4' +///级别5 +#define THOST_FTDC_RL_Level5 '5' +///级别6 +#define THOST_FTDC_RL_Level6 '6' +///级别7 +#define THOST_FTDC_RL_Level7 '7' +///级别8 +#define THOST_FTDC_RL_Level8 '8' +///级别9 +#define THOST_FTDC_RL_Level9 '9' + +typedef char TThostFtdcReturnLevelType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReturnStandardType是一个返还标准类型 +///////////////////////////////////////////////////////////////////////// +///分阶段返还 +#define THOST_FTDC_RSD_ByPeriod '1' +///按某一标准 +#define THOST_FTDC_RSD_ByStandard '2' + +typedef char TThostFtdcReturnStandardType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMortgageTypeType是一个质押类型类型 +///////////////////////////////////////////////////////////////////////// +///质出 +#define THOST_FTDC_MT_Out '0' +///质入 +#define THOST_FTDC_MT_In '1' + +typedef char TThostFtdcMortgageTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestorSettlementParamIDType是一个投资者结算参数代码类型 +///////////////////////////////////////////////////////////////////////// +///质押比例 +#define THOST_FTDC_ISPI_MortgageRatio '4' +///保证金算法 +#define THOST_FTDC_ISPI_MarginWay '5' +///结算单结存是否包含质押 +#define THOST_FTDC_ISPI_BillDeposit '9' + +typedef char TThostFtdcInvestorSettlementParamIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangeSettlementParamIDType是一个交易所结算参数代码类型 +///////////////////////////////////////////////////////////////////////// +///质押比例 +#define THOST_FTDC_ESPI_MortgageRatio '1' +///分项资金导入项 +#define THOST_FTDC_ESPI_OtherFundItem '2' +///分项资金入交易所出入金 +#define THOST_FTDC_ESPI_OtherFundImport '3' +///中金所开户最低可用金额 +#define THOST_FTDC_ESPI_CFFEXMinPrepa '6' +///郑商所结算方式 +#define THOST_FTDC_ESPI_CZCESettlementType '7' +///交易所交割手续费收取方式 +#define THOST_FTDC_ESPI_ExchDelivFeeMode '9' +///投资者交割手续费收取方式 +#define THOST_FTDC_ESPI_DelivFeeMode '0' +///郑商所组合持仓保证金收取方式 +#define THOST_FTDC_ESPI_CZCEComMarginType 'A' +///大商所套利保证金是否优惠 +#define THOST_FTDC_ESPI_DceComMarginType 'B' +///虚值期权保证金优惠比率 +#define THOST_FTDC_ESPI_OptOutDisCountRate 'a' +///最低保障系数 +#define THOST_FTDC_ESPI_OptMiniGuarantee 'b' + +typedef char TThostFtdcExchangeSettlementParamIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSystemParamIDType是一个系统参数代码类型 +///////////////////////////////////////////////////////////////////////// +///投资者代码最小长度 +#define THOST_FTDC_SPI_InvestorIDMinLength '1' +///投资者帐号代码最小长度 +#define THOST_FTDC_SPI_AccountIDMinLength '2' +///投资者开户默认登录权限 +#define THOST_FTDC_SPI_UserRightLogon '3' +///投资者交易结算单成交汇总方式 +#define THOST_FTDC_SPI_SettlementBillTrade '4' +///统一开户更新交易编码方式 +#define THOST_FTDC_SPI_TradingCode '5' +///结算是否判断存在未复核的出入金和分项资金 +#define THOST_FTDC_SPI_CheckFund '6' +///是否启用手续费模板数据权限 +#define THOST_FTDC_SPI_CommModelRight '7' +///是否启用保证金率模板数据权限 +#define THOST_FTDC_SPI_MarginModelRight '9' +///是否规范用户才能激活 +#define THOST_FTDC_SPI_IsStandardActive '8' +///上传的交易所结算文件路径 +#define THOST_FTDC_SPI_UploadSettlementFile 'U' +///上报保证金监控中心文件路径 +#define THOST_FTDC_SPI_DownloadCSRCFile 'D' +///生成的结算单文件路径 +#define THOST_FTDC_SPI_SettlementBillFile 'S' +///证监会文件标识 +#define THOST_FTDC_SPI_CSRCOthersFile 'C' +///投资者照片路径 +#define THOST_FTDC_SPI_InvestorPhoto 'P' +///全结经纪公司上传文件路径 +#define THOST_FTDC_SPI_CSRCData 'R' +///开户密码录入方式 +#define THOST_FTDC_SPI_InvestorPwdModel 'I' +///投资者中金所结算文件下载路径 +#define THOST_FTDC_SPI_CFFEXInvestorSettleFile 'F' +///投资者代码编码方式 +#define THOST_FTDC_SPI_InvestorIDType 'a' +///休眠户最高权益 +#define THOST_FTDC_SPI_FreezeMaxReMain 'r' +///手续费相关操作实时上场开关 +#define THOST_FTDC_SPI_IsSync 'A' +///解除开仓权限限制 +#define THOST_FTDC_SPI_RelieveOpenLimit 'O' +///是否规范用户才能休眠 +#define THOST_FTDC_SPI_IsStandardFreeze 'X' +///郑商所是否开放所有品种套保交易 +#define THOST_FTDC_SPI_CZCENormalProductHedge 'B' + +typedef char TThostFtdcSystemParamIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeParamIDType是一个交易系统参数代码类型 +///////////////////////////////////////////////////////////////////////// +///系统加密算法 +#define THOST_FTDC_TPID_EncryptionStandard 'E' +///系统风险算法 +#define THOST_FTDC_TPID_RiskMode 'R' +///系统风险算法是否全局 0-否 1-是 +#define THOST_FTDC_TPID_RiskModeGlobal 'G' +///密码加密算法 +#define THOST_FTDC_TPID_modeEncode 'P' +///价格小数位数参数 +#define THOST_FTDC_TPID_tickMode 'T' +///用户最大会话数 +#define THOST_FTDC_TPID_SingleUserSessionMaxNum 'S' +///最大连续登录失败数 +#define THOST_FTDC_TPID_LoginFailMaxNum 'L' +///是否强制认证 +#define THOST_FTDC_TPID_IsAuthForce 'A' + +typedef char TThostFtdcTradeParamIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettlementParamValueType是一个参数代码值类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSettlementParamValueType[256]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCounterIDType是一个计数器代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCounterIDType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestorGroupNameType是一个投资者分组名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInvestorGroupNameType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrandCodeType是一个牌号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBrandCodeType[257]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcWarehouseType是一个仓库类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcWarehouseType[257]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProductDateType是一个产期类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcProductDateType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcGradeType是一个等级类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcGradeType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClassifyType是一个类别类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcClassifyType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPositionType是一个货位类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPositionType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcYieldlyType是一个产地类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcYieldlyType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcWeightType是一个公定重量类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcWeightType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSubEntryFundNoType是一个分项资金流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcSubEntryFundNoType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFileIDType是一个文件标识类型 +///////////////////////////////////////////////////////////////////////// +///资金数据 +#define THOST_FTDC_FI_SettlementFund 'F' +///成交数据 +#define THOST_FTDC_FI_Trade 'T' +///投资者持仓数据 +#define THOST_FTDC_FI_InvestorPosition 'P' +///投资者分项资金数据 +#define THOST_FTDC_FI_SubEntryFund 'O' +///组合持仓数据 +#define THOST_FTDC_FI_CZCECombinationPos 'C' +///上报保证金监控中心数据 +#define THOST_FTDC_FI_CSRCData 'R' +///郑商所平仓了结数据 +#define THOST_FTDC_FI_CZCEClose 'L' +///郑商所非平仓了结数据 +#define THOST_FTDC_FI_CZCENoClose 'N' +///持仓明细数据 +#define THOST_FTDC_FI_PositionDtl 'D' +///期权执行文件 +#define THOST_FTDC_FI_OptionStrike 'S' +///结算价比对文件 +#define THOST_FTDC_FI_SettlementPriceComparison 'M' +///上期所非持仓变动明细 +#define THOST_FTDC_FI_NonTradePosChange 'B' + +typedef char TThostFtdcFileIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFileNameType是一个文件名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFileNameType[257]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFileTypeType是一个文件上传类型类型 +///////////////////////////////////////////////////////////////////////// +///结算 +#define THOST_FTDC_FUT_Settlement '0' +///核对 +#define THOST_FTDC_FUT_Check '1' + +typedef char TThostFtdcFileTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFileFormatType是一个文件格式类型 +///////////////////////////////////////////////////////////////////////// +///文本文件(.txt) +#define THOST_FTDC_FFT_Txt '0' +///压缩文件(.zip) +#define THOST_FTDC_FFT_Zip '1' +///DBF文件(.dbf) +#define THOST_FTDC_FFT_DBF '2' + +typedef char TThostFtdcFileFormatType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFileUploadStatusType是一个文件状态类型 +///////////////////////////////////////////////////////////////////////// +///上传成功 +#define THOST_FTDC_FUS_SucceedUpload '1' +///上传失败 +#define THOST_FTDC_FUS_FailedUpload '2' +///导入成功 +#define THOST_FTDC_FUS_SucceedLoad '3' +///导入部分成功 +#define THOST_FTDC_FUS_PartSucceedLoad '4' +///导入失败 +#define THOST_FTDC_FUS_FailedLoad '5' + +typedef char TThostFtdcFileUploadStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTransferDirectionType是一个移仓方向类型 +///////////////////////////////////////////////////////////////////////// +///移出 +#define THOST_FTDC_TD_Out '0' +///移入 +#define THOST_FTDC_TD_In '1' + +typedef char TThostFtdcTransferDirectionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUploadModeType是一个上传文件类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUploadModeType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAccountIDType是一个投资者帐号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAccountIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankFlagType是一个银行统一标识类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankFlagType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankAccountType是一个银行账户类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankAccountType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOpenNameType是一个银行账户的开户人名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOpenNameType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOpenBankType是一个银行账户的开户行类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOpenBankType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankNameType是一个银行名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankNameType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPublishPathType是一个发布路径类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPublishPathType[257]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOperatorIDType是一个操作员代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOperatorIDType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMonthCountType是一个月份数量类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcMonthCountType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAdvanceMonthArrayType是一个月份提前数组类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAdvanceMonthArrayType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDateExprType是一个日期表达式类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDateExprType[1025]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstrumentIDExprType是一个合约代码表达式类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInstrumentIDExprType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstrumentNameExprType是一个合约名称表达式类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInstrumentNameExprType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSpecialCreateRuleType是一个特殊的创建规则类型 +///////////////////////////////////////////////////////////////////////// +///没有特殊创建规则 +#define THOST_FTDC_SC_NoSpecialRule '0' +///不包含春节 +#define THOST_FTDC_SC_NoSpringFestival '1' + +typedef char TThostFtdcSpecialCreateRuleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBasisPriceTypeType是一个挂牌基准价类型类型 +///////////////////////////////////////////////////////////////////////// +///上一合约结算价 +#define THOST_FTDC_IPT_LastSettlement '1' +///上一合约收盘价 +#define THOST_FTDC_IPT_LaseClose '2' + +typedef char TThostFtdcBasisPriceTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProductLifePhaseType是一个产品生命周期状态类型 +///////////////////////////////////////////////////////////////////////// +///活跃 +#define THOST_FTDC_PLP_Active '1' +///不活跃 +#define THOST_FTDC_PLP_NonActive '2' +///注销 +#define THOST_FTDC_PLP_Canceled '3' + +typedef char TThostFtdcProductLifePhaseType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDeliveryModeType是一个交割方式类型 +///////////////////////////////////////////////////////////////////////// +///现金交割 +#define THOST_FTDC_DM_CashDeliv '1' +///实物交割 +#define THOST_FTDC_DM_CommodityDeliv '2' + +typedef char TThostFtdcDeliveryModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLogLevelType是一个日志级别类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcLogLevelType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProcessNameType是一个存储过程名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcProcessNameType[257]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOperationMemoType是一个操作摘要类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOperationMemoType[1025]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundIOTypeType是一个出入金类型类型 +///////////////////////////////////////////////////////////////////////// +///出入金 +#define THOST_FTDC_FIOT_FundIO '1' +///银期转帐 +#define THOST_FTDC_FIOT_Transfer '2' +///银期换汇 +#define THOST_FTDC_FIOT_SwapCurrency '3' + +typedef char TThostFtdcFundIOTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundTypeType是一个资金类型类型 +///////////////////////////////////////////////////////////////////////// +///银行存款 +#define THOST_FTDC_FT_Deposite '1' +///分项资金 +#define THOST_FTDC_FT_ItemFund '2' +///公司调整 +#define THOST_FTDC_FT_Company '3' +///资金内转 +#define THOST_FTDC_FT_InnerTransfer '4' + +typedef char TThostFtdcFundTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundDirectionType是一个出入金方向类型 +///////////////////////////////////////////////////////////////////////// +///入金 +#define THOST_FTDC_FD_In '1' +///出金 +#define THOST_FTDC_FD_Out '2' + +typedef char TThostFtdcFundDirectionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundStatusType是一个资金状态类型 +///////////////////////////////////////////////////////////////////////// +///已录入 +#define THOST_FTDC_FS_Record '1' +///已复核 +#define THOST_FTDC_FS_Check '2' +///已冲销 +#define THOST_FTDC_FS_Charge '3' + +typedef char TThostFtdcFundStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBillNoType是一个票据号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBillNoType[15]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBillNameType是一个票据名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBillNameType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPublishStatusType是一个发布状态类型 +///////////////////////////////////////////////////////////////////////// +///未发布 +#define THOST_FTDC_PS_None '1' +///正在发布 +#define THOST_FTDC_PS_Publishing '2' +///已发布 +#define THOST_FTDC_PS_Published '3' + +typedef char TThostFtdcPublishStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcEnumValueIDType是一个枚举值代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcEnumValueIDType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcEnumValueTypeType是一个枚举值类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcEnumValueTypeType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcEnumValueLabelType是一个枚举值名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcEnumValueLabelType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcEnumValueResultType是一个枚举值结果类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcEnumValueResultType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSystemStatusType是一个系统状态类型 +///////////////////////////////////////////////////////////////////////// +///不活跃 +#define THOST_FTDC_ES_NonActive '1' +///启动 +#define THOST_FTDC_ES_Startup '2' +///交易开始初始化 +#define THOST_FTDC_ES_Initialize '3' +///交易完成初始化 +#define THOST_FTDC_ES_Initialized '4' +///收市开始 +#define THOST_FTDC_ES_Close '5' +///收市完成 +#define THOST_FTDC_ES_Closed '6' +///结算 +#define THOST_FTDC_ES_Settlement '7' + +typedef char TThostFtdcSystemStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettlementStatusType是一个结算状态类型 +///////////////////////////////////////////////////////////////////////// +///初始 +#define THOST_FTDC_STS_Initialize '0' +///结算中 +#define THOST_FTDC_STS_Settlementing '1' +///已结算 +#define THOST_FTDC_STS_Settlemented '2' +///结算完成 +#define THOST_FTDC_STS_Finished '3' + +typedef char TThostFtdcSettlementStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRangeIntTypeType是一个限定值类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRangeIntTypeType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRangeIntFromType是一个限定值下限类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRangeIntFromType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRangeIntToType是一个限定值上限类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRangeIntToType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFunctionIDType是一个功能代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFunctionIDType[25]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFunctionValueCodeType是一个功能编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFunctionValueCodeType[257]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFunctionNameType是一个功能名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFunctionNameType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRoleIDType是一个角色编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRoleIDType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRoleNameType是一个角色名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRoleNameType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDescriptionType是一个描述类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDescriptionType[401]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCombineIDType是一个组合编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCombineIDType[25]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCombineTypeType是一个组合类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCombineTypeType[25]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestorTypeType是一个投资者类型类型 +///////////////////////////////////////////////////////////////////////// +///自然人 +#define THOST_FTDC_CT_Person '0' +///法人 +#define THOST_FTDC_CT_Company '1' +///投资基金 +#define THOST_FTDC_CT_Fund '2' +///特殊法人 +#define THOST_FTDC_CT_SpecialOrgan '3' +///资管户 +#define THOST_FTDC_CT_Asset '4' + +typedef char TThostFtdcInvestorTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrokerTypeType是一个经纪公司类型类型 +///////////////////////////////////////////////////////////////////////// +///交易会员 +#define THOST_FTDC_BT_Trade '0' +///交易结算会员 +#define THOST_FTDC_BT_TradeSettle '1' + +typedef char TThostFtdcBrokerTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRiskLevelType是一个风险等级类型 +///////////////////////////////////////////////////////////////////////// +///低风险客户 +#define THOST_FTDC_FAS_Low '1' +///普通客户 +#define THOST_FTDC_FAS_Normal '2' +///关注客户 +#define THOST_FTDC_FAS_Focus '3' +///风险客户 +#define THOST_FTDC_FAS_Risk '4' + +typedef char TThostFtdcRiskLevelType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFeeAcceptStyleType是一个手续费收取方式类型 +///////////////////////////////////////////////////////////////////////// +///按交易收取 +#define THOST_FTDC_FAS_ByTrade '1' +///按交割收取 +#define THOST_FTDC_FAS_ByDeliv '2' +///不收 +#define THOST_FTDC_FAS_None '3' +///按指定手续费收取 +#define THOST_FTDC_FAS_FixFee '4' + +typedef char TThostFtdcFeeAcceptStyleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPasswordTypeType是一个密码类型类型 +///////////////////////////////////////////////////////////////////////// +///交易密码 +#define THOST_FTDC_PWDT_Trade '1' +///资金密码 +#define THOST_FTDC_PWDT_Account '2' + +typedef char TThostFtdcPasswordTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAlgorithmType是一个盈亏算法类型 +///////////////////////////////////////////////////////////////////////// +///浮盈浮亏都计算 +#define THOST_FTDC_AG_All '1' +///浮盈不计,浮亏计 +#define THOST_FTDC_AG_OnlyLost '2' +///浮盈计,浮亏不计 +#define THOST_FTDC_AG_OnlyGain '3' +///浮盈浮亏都不计算 +#define THOST_FTDC_AG_None '4' + +typedef char TThostFtdcAlgorithmType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIncludeCloseProfitType是一个是否包含平仓盈利类型 +///////////////////////////////////////////////////////////////////////// +///包含平仓盈利 +#define THOST_FTDC_ICP_Include '0' +///不包含平仓盈利 +#define THOST_FTDC_ICP_NotInclude '2' + +typedef char TThostFtdcIncludeCloseProfitType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAllWithoutTradeType是一个是否受可提比例限制类型 +///////////////////////////////////////////////////////////////////////// +///无仓无成交不受可提比例限制 +#define THOST_FTDC_AWT_Enable '0' +///受可提比例限制 +#define THOST_FTDC_AWT_Disable '2' +///无仓不受可提比例限制 +#define THOST_FTDC_AWT_NoHoldEnable '3' + +typedef char TThostFtdcAllWithoutTradeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCommentType是一个盈亏算法说明类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCommentType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVersionType是一个版本号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcVersionType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeCodeType是一个交易代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTradeCodeType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeDateType是一个交易日期类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTradeDateType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeTimeType是一个交易时间类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTradeTimeType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeSerialType是一个发起方流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTradeSerialType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeSerialNoType是一个发起方流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcTradeSerialNoType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureIDType是一个期货公司代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFutureIDType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankIDType是一个银行代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankIDType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankBrchIDType是一个银行分中心代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankBrchIDType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankBranchIDType是一个分中心代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankBranchIDType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOperNoType是一个交易柜员类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOperNoType[17]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDeviceIDType是一个渠道标志类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDeviceIDType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRecordNumType是一个记录数类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRecordNumType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureAccountType是一个期货资金账号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFutureAccountType[22]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFuturePwdFlagType是一个资金密码核对标志类型 +///////////////////////////////////////////////////////////////////////// +///不核对 +#define THOST_FTDC_FPWD_UnCheck '0' +///核对 +#define THOST_FTDC_FPWD_Check '1' + +typedef char TThostFtdcFuturePwdFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTransferTypeType是一个银期转账类型类型 +///////////////////////////////////////////////////////////////////////// +///银行转期货 +#define THOST_FTDC_TT_BankToFuture '0' +///期货转银行 +#define THOST_FTDC_TT_FutureToBank '1' + +typedef char TThostFtdcTransferTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureAccPwdType是一个期货资金密码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFutureAccPwdType[17]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCurrencyCodeType是一个币种类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCurrencyCodeType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRetCodeType是一个响应代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRetCodeType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRetInfoType是一个响应信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRetInfoType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeAmtType是一个银行总余额类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTradeAmtType[20]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUseAmtType是一个银行可用余额类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUseAmtType[20]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFetchAmtType是一个银行可取余额类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFetchAmtType[20]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTransferValidFlagType是一个转账有效标志类型 +///////////////////////////////////////////////////////////////////////// +///无效或失败 +#define THOST_FTDC_TVF_Invalid '0' +///有效 +#define THOST_FTDC_TVF_Valid '1' +///冲正 +#define THOST_FTDC_TVF_Reverse '2' + +typedef char TThostFtdcTransferValidFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCertCodeType是一个证件号码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCertCodeType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReasonType是一个事由类型 +///////////////////////////////////////////////////////////////////////// +///错单 +#define THOST_FTDC_RN_CD '0' +///资金在途 +#define THOST_FTDC_RN_ZT '1' +///其它 +#define THOST_FTDC_RN_QT '2' + +typedef char TThostFtdcReasonType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundProjectIDType是一个资金项目编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFundProjectIDType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSexType是一个性别类型 +///////////////////////////////////////////////////////////////////////// +///未知 +#define THOST_FTDC_SEX_None '0' +///男 +#define THOST_FTDC_SEX_Man '1' +///女 +#define THOST_FTDC_SEX_Woman '2' + +typedef char TThostFtdcSexType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProfessionType是一个职业类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcProfessionType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcNationalType是一个国籍类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcNationalType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProvinceType是一个省类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcProvinceType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRegionType是一个区类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRegionType[16]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCountryType是一个国家类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCountryType[16]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLicenseNOType是一个营业执照类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcLicenseNOType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCompanyTypeType是一个企业性质类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCompanyTypeType[16]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBusinessScopeType是一个经营范围类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBusinessScopeType[1001]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCapitalCurrencyType是一个注册资本币种类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCapitalCurrencyType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserTypeType是一个用户类型类型 +///////////////////////////////////////////////////////////////////////// +///投资者 +#define THOST_FTDC_UT_Investor '0' +///操作员 +#define THOST_FTDC_UT_Operator '1' +///管理员 +#define THOST_FTDC_UT_SuperUser '2' + +typedef char TThostFtdcUserTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRateTypeType是一个费率类型类型 +///////////////////////////////////////////////////////////////////////// +///保证金率 +#define THOST_FTDC_RATETYPE_MarginRate '2' + +typedef char TThostFtdcRateTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcNoteTypeType是一个通知类型类型 +///////////////////////////////////////////////////////////////////////// +///交易结算单 +#define THOST_FTDC_NOTETYPE_TradeSettleBill '1' +///交易结算月报 +#define THOST_FTDC_NOTETYPE_TradeSettleMonth '2' +///追加保证金通知书 +#define THOST_FTDC_NOTETYPE_CallMarginNotes '3' +///强行平仓通知书 +#define THOST_FTDC_NOTETYPE_ForceCloseNotes '4' +///成交通知书 +#define THOST_FTDC_NOTETYPE_TradeNotes '5' +///交割通知书 +#define THOST_FTDC_NOTETYPE_DelivNotes '6' + +typedef char TThostFtdcNoteTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettlementStyleType是一个结算单方式类型 +///////////////////////////////////////////////////////////////////////// +///逐日盯市 +#define THOST_FTDC_SBS_Day '1' +///逐笔对冲 +#define THOST_FTDC_SBS_Volume '2' + +typedef char TThostFtdcSettlementStyleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrokerDNSType是一个域名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBrokerDNSType[256]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSentenceType是一个语句类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSentenceType[501]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettlementBillTypeType是一个结算单类型类型 +///////////////////////////////////////////////////////////////////////// +///日报 +#define THOST_FTDC_ST_Day '0' +///月报 +#define THOST_FTDC_ST_Month '1' + +typedef char TThostFtdcSettlementBillTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserRightTypeType是一个客户权限类型类型 +///////////////////////////////////////////////////////////////////////// +///登录 +#define THOST_FTDC_URT_Logon '1' +///银期转帐 +#define THOST_FTDC_URT_Transfer '2' +///邮寄结算单 +#define THOST_FTDC_URT_EMail '3' +///传真结算单 +#define THOST_FTDC_URT_Fax '4' +///条件单 +#define THOST_FTDC_URT_ConditionOrder '5' + +typedef char TThostFtdcUserRightTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMarginPriceTypeType是一个保证金价格类型类型 +///////////////////////////////////////////////////////////////////////// +///昨结算价 +#define THOST_FTDC_MPT_PreSettlementPrice '1' +///最新价 +#define THOST_FTDC_MPT_SettlementPrice '2' +///成交均价 +#define THOST_FTDC_MPT_AveragePrice '3' +///开仓价 +#define THOST_FTDC_MPT_OpenPrice '4' + +typedef char TThostFtdcMarginPriceTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBillGenStatusType是一个结算单生成状态类型 +///////////////////////////////////////////////////////////////////////// +///未生成 +#define THOST_FTDC_BGS_None '0' +///生成中 +#define THOST_FTDC_BGS_NoGenerated '1' +///已生成 +#define THOST_FTDC_BGS_Generated '2' + +typedef char TThostFtdcBillGenStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAlgoTypeType是一个算法类型类型 +///////////////////////////////////////////////////////////////////////// +///持仓处理算法 +#define THOST_FTDC_AT_HandlePositionAlgo '1' +///寻找保证金率算法 +#define THOST_FTDC_AT_FindMarginRateAlgo '2' + +typedef char TThostFtdcAlgoTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcHandlePositionAlgoIDType是一个持仓处理算法编号类型 +///////////////////////////////////////////////////////////////////////// +///基本 +#define THOST_FTDC_HPA_Base '1' +///大连商品交易所 +#define THOST_FTDC_HPA_DCE '2' +///郑州商品交易所 +#define THOST_FTDC_HPA_CZCE '3' + +typedef char TThostFtdcHandlePositionAlgoIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFindMarginRateAlgoIDType是一个寻找保证金率算法编号类型 +///////////////////////////////////////////////////////////////////////// +///基本 +#define THOST_FTDC_FMRA_Base '1' +///大连商品交易所 +#define THOST_FTDC_FMRA_DCE '2' +///郑州商品交易所 +#define THOST_FTDC_FMRA_CZCE '3' + +typedef char TThostFtdcFindMarginRateAlgoIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcHandleTradingAccountAlgoIDType是一个资金处理算法编号类型 +///////////////////////////////////////////////////////////////////////// +///基本 +#define THOST_FTDC_HTAA_Base '1' +///大连商品交易所 +#define THOST_FTDC_HTAA_DCE '2' +///郑州商品交易所 +#define THOST_FTDC_HTAA_CZCE '3' + +typedef char TThostFtdcHandleTradingAccountAlgoIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPersonTypeType是一个联系人类型类型 +///////////////////////////////////////////////////////////////////////// +///指定下单人 +#define THOST_FTDC_PST_Order '1' +///开户授权人 +#define THOST_FTDC_PST_Open '2' +///资金调拨人 +#define THOST_FTDC_PST_Fund '3' +///结算单确认人 +#define THOST_FTDC_PST_Settlement '4' +///法人 +#define THOST_FTDC_PST_Company '5' +///法人代表 +#define THOST_FTDC_PST_Corporation '6' +///投资者联系人 +#define THOST_FTDC_PST_LinkMan '7' +///分户管理资产负责人 +#define THOST_FTDC_PST_Ledger '8' +///托(保)管人 +#define THOST_FTDC_PST_Trustee '9' +///托(保)管机构法人代表 +#define THOST_FTDC_PST_TrusteeCorporation 'A' +///托(保)管机构开户授权人 +#define THOST_FTDC_PST_TrusteeOpen 'B' +///托(保)管机构联系人 +#define THOST_FTDC_PST_TrusteeContact 'C' +///境外自然人参考证件 +#define THOST_FTDC_PST_ForeignerRefer 'D' +///法人代表参考证件 +#define THOST_FTDC_PST_CorporationRefer 'E' + +typedef char TThostFtdcPersonTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcQueryInvestorRangeType是一个查询范围类型 +///////////////////////////////////////////////////////////////////////// +///所有 +#define THOST_FTDC_QIR_All '1' +///查询分类 +#define THOST_FTDC_QIR_Group '2' +///单一投资者 +#define THOST_FTDC_QIR_Single '3' + +typedef char TThostFtdcQueryInvestorRangeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestorRiskStatusType是一个投资者风险状态类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_IRS_Normal '1' +///警告 +#define THOST_FTDC_IRS_Warn '2' +///追保 +#define THOST_FTDC_IRS_Call '3' +///强平 +#define THOST_FTDC_IRS_Force '4' +///异常 +#define THOST_FTDC_IRS_Exception '5' + +typedef char TThostFtdcInvestorRiskStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLegIDType是一个单腿编号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcLegIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLegMultipleType是一个单腿乘数类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcLegMultipleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcImplyLevelType是一个派生层数类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcImplyLevelType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClearAccountType是一个结算账户类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcClearAccountType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrganNOType是一个结算账户类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOrganNOType[6]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClearbarchIDType是一个结算账户联行号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcClearbarchIDType[6]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserEventTypeType是一个用户事件类型类型 +///////////////////////////////////////////////////////////////////////// +///登录 +#define THOST_FTDC_UET_Login '1' +///登出 +#define THOST_FTDC_UET_Logout '2' +///交易成功 +#define THOST_FTDC_UET_Trading '3' +///交易失败 +#define THOST_FTDC_UET_TradingError '4' +///修改密码 +#define THOST_FTDC_UET_UpdatePassword '5' +///客户端认证 +#define THOST_FTDC_UET_Authenticate '6' +///其他 +#define THOST_FTDC_UET_Other '9' + +typedef char TThostFtdcUserEventTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserEventInfoType是一个用户事件信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUserEventInfoType[1025]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCloseStyleType是一个平仓方式类型 +///////////////////////////////////////////////////////////////////////// +///先开先平 +#define THOST_FTDC_ICS_Close '0' +///先平今再平昨 +#define THOST_FTDC_ICS_CloseToday '1' + +typedef char TThostFtdcCloseStyleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcStatModeType是一个统计方式类型 +///////////////////////////////////////////////////////////////////////// +///---- +#define THOST_FTDC_SM_Non '0' +///按合约统计 +#define THOST_FTDC_SM_Instrument '1' +///按产品统计 +#define THOST_FTDC_SM_Product '2' +///按投资者统计 +#define THOST_FTDC_SM_Investor '3' + +typedef char TThostFtdcStatModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcParkedOrderStatusType是一个预埋单状态类型 +///////////////////////////////////////////////////////////////////////// +///未发送 +#define THOST_FTDC_PAOS_NotSend '1' +///已发送 +#define THOST_FTDC_PAOS_Send '2' +///已删除 +#define THOST_FTDC_PAOS_Deleted '3' + +typedef char TThostFtdcParkedOrderStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcParkedOrderIDType是一个预埋报单编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcParkedOrderIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcParkedOrderActionIDType是一个预埋撤单编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcParkedOrderActionIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVirDealStatusType是一个处理状态类型 +///////////////////////////////////////////////////////////////////////// +///正在处理 +#define THOST_FTDC_VDS_Dealing '1' +///处理成功 +#define THOST_FTDC_VDS_DeaclSucceed '2' + +typedef char TThostFtdcVirDealStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrgSystemIDType是一个原有系统代码类型 +///////////////////////////////////////////////////////////////////////// +///综合交易平台 +#define THOST_FTDC_ORGS_Standard '0' +///易盛系统 +#define THOST_FTDC_ORGS_ESunny '1' +///金仕达V6系统 +#define THOST_FTDC_ORGS_KingStarV6 '2' + +typedef char TThostFtdcOrgSystemIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVirTradeStatusType是一个交易状态类型 +///////////////////////////////////////////////////////////////////////// +///正常处理中 +#define THOST_FTDC_VTS_NaturalDeal '0' +///成功结束 +#define THOST_FTDC_VTS_SucceedEnd '1' +///失败结束 +#define THOST_FTDC_VTS_FailedEND '2' +///异常中 +#define THOST_FTDC_VTS_Exception '3' +///已人工异常处理 +#define THOST_FTDC_VTS_ManualDeal '4' +///通讯异常 ,请人工处理 +#define THOST_FTDC_VTS_MesException '5' +///系统出错,请人工处理 +#define THOST_FTDC_VTS_SysException '6' + +typedef char TThostFtdcVirTradeStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVirBankAccTypeType是一个银行帐户类型类型 +///////////////////////////////////////////////////////////////////////// +///存折 +#define THOST_FTDC_VBAT_BankBook '1' +///储蓄卡 +#define THOST_FTDC_VBAT_BankCard '2' +///信用卡 +#define THOST_FTDC_VBAT_CreditCard '3' + +typedef char TThostFtdcVirBankAccTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVirementStatusType是一个银行帐户类型类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_VMS_Natural '0' +///销户 +#define THOST_FTDC_VMS_Canceled '9' + +typedef char TThostFtdcVirementStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVirementAvailAbilityType是一个有效标志类型 +///////////////////////////////////////////////////////////////////////// +///未确认 +#define THOST_FTDC_VAA_NoAvailAbility '0' +///有效 +#define THOST_FTDC_VAA_AvailAbility '1' +///冲正 +#define THOST_FTDC_VAA_Repeal '2' + +typedef char TThostFtdcVirementAvailAbilityType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVirementTradeCodeType是一个交易代码类型 +///////////////////////////////////////////////////////////////////////// +///银行发起银行资金转期货 +#define THOST_FTDC_VTC_BankBankToFuture '102001' +///银行发起期货资金转银行 +#define THOST_FTDC_VTC_BankFutureToBank '102002' +///期货发起银行资金转期货 +#define THOST_FTDC_VTC_FutureBankToFuture '202001' +///期货发起期货资金转银行 +#define THOST_FTDC_VTC_FutureFutureToBank '202002' + +typedef char TThostFtdcVirementTradeCodeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPhotoTypeNameType是一个影像类型名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPhotoTypeNameType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPhotoTypeIDType是一个影像类型代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPhotoTypeIDType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPhotoNameType是一个影像名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPhotoNameType[161]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTopicIDType是一个主题代码类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcTopicIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReportTypeIDType是一个交易报告类型标识类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcReportTypeIDType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCharacterIDType是一个交易特征代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCharacterIDType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLParamIDType是一个参数代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLParamIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLInvestorTypeType是一个投资者类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLInvestorTypeType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLIdCardTypeType是一个证件类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLIdCardTypeType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLTradeDirectType是一个资金进出方向类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLTradeDirectType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLTradeModelType是一个资金进出方式类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLTradeModelType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLParamIDType是一个参数代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLParamIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLOpParamValueType是一个业务参数代码值类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcAMLOpParamValueType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLCustomerCardTypeType是一个客户身份证件/证明文件类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLCustomerCardTypeType[81]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLInstitutionNameType是一个金融机构网点名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLInstitutionNameType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLDistrictIDType是一个金融机构网点所在地区行政区划代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLDistrictIDType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLRelationShipType是一个金融机构网点与大额交易的关系类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLRelationShipType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLInstitutionTypeType是一个金融机构网点代码类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLInstitutionTypeType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLInstitutionIDType是一个金融机构网点代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLInstitutionIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLAccountTypeType是一个账户类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLAccountTypeType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLTradingTypeType是一个交易方式类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLTradingTypeType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLTransactClassType是一个涉外收支交易分类与代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLTransactClassType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLCapitalIOType是一个资金收付标识类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLCapitalIOType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLSiteType是一个交易地点类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLSiteType[10]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLCapitalPurposeType是一个资金用途类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLCapitalPurposeType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLReportTypeType是一个报文类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLReportTypeType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLSerialNoType是一个编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLSerialNoType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLStatusType是一个状态类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLStatusType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLGenStatusType是一个Aml生成方式类型 +///////////////////////////////////////////////////////////////////////// +///程序生成 +#define THOST_FTDC_GEN_Program '0' +///人工生成 +#define THOST_FTDC_GEN_HandWork '1' + +typedef char TThostFtdcAMLGenStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLSeqCodeType是一个业务标识号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLSeqCodeType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLFileNameType是一个AML文件名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLFileNameType[257]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLMoneyType是一个反洗钱资金类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcAMLMoneyType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLFileAmountType是一个反洗钱资金类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcAMLFileAmountType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCFMMCKeyType是一个密钥类型(保证金监管)类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCFMMCKeyType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCFMMCKeyKindType是一个动态密钥类别(保证金监管)类型 +///////////////////////////////////////////////////////////////////////// +///主动请求更新 +#define THOST_FTDC_CFMMCKK_REQUEST 'R' +///CFMMC自动更新 +#define THOST_FTDC_CFMMCKK_AUTO 'A' +///CFMMC手动更新 +#define THOST_FTDC_CFMMCKK_MANUAL 'M' + +typedef char TThostFtdcCFMMCKeyKindType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLReportNameType是一个报文名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLReportNameType[81]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIndividualNameType是一个个人姓名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcIndividualNameType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCurrencyIDType是一个币种代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCurrencyIDType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCustNumberType是一个客户编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCustNumberType[36]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrganCodeType是一个机构编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOrganCodeType[36]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrganNameType是一个机构名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOrganNameType[71]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSuperOrganCodeType是一个上级机构编码,即期货公司总部、银行总行类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSuperOrganCodeType[12]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSubBranchIDType是一个分支机构类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSubBranchIDType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSubBranchNameType是一个分支机构名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSubBranchNameType[71]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBranchNetCodeType是一个机构网点号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBranchNetCodeType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBranchNetNameType是一个机构网点名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBranchNetNameType[71]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrganFlagType是一个机构标识类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOrganFlagType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankCodingForFutureType是一个银行对期货公司的编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankCodingForFutureType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankReturnCodeType是一个银行对返回码的定义类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankReturnCodeType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPlateReturnCodeType是一个银期转帐平台对返回码的定义类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPlateReturnCodeType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankSubBranchIDType是一个银行分支机构编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankSubBranchIDType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureBranchIDType是一个期货分支机构编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFutureBranchIDType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReturnCodeType是一个返回代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcReturnCodeType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOperatorCodeType是一个操作员类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOperatorCodeType[17]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClearDepIDType是一个机构结算帐户机构号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcClearDepIDType[6]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClearBrchIDType是一个机构结算帐户联行号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcClearBrchIDType[6]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClearNameType是一个机构结算帐户名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcClearNameType[71]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankAccountNameType是一个银行帐户名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankAccountNameType[71]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvDepIDType是一个机构投资人账号机构号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInvDepIDType[6]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvBrchIDType是一个机构投资人联行号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInvBrchIDType[6]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMessageFormatVersionType是一个信息格式版本类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcMessageFormatVersionType[36]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDigestType是一个摘要类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDigestType[36]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAuthenticDataType是一个认证数据类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAuthenticDataType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPasswordKeyType是一个密钥类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPasswordKeyType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureAccountNameType是一个期货帐户名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFutureAccountNameType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMobilePhoneType是一个手机类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcMobilePhoneType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureMainKeyType是一个期货公司主密钥类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFutureMainKeyType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureWorkKeyType是一个期货公司工作密钥类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFutureWorkKeyType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureTransKeyType是一个期货公司传输密钥类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFutureTransKeyType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankMainKeyType是一个银行主密钥类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankMainKeyType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankWorkKeyType是一个银行工作密钥类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankWorkKeyType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankTransKeyType是一个银行传输密钥类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankTransKeyType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankServerDescriptionType是一个银行服务器描述信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankServerDescriptionType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAddInfoType是一个附加信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAddInfoType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDescrInfoForReturnCodeType是一个返回码描述类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDescrInfoForReturnCodeType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCountryCodeType是一个国家代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCountryCodeType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSerialType是一个流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcSerialType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPlateSerialType是一个平台流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcPlateSerialType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankSerialType是一个银行流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankSerialType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCorrectSerialType是一个被冲正交易流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcCorrectSerialType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureSerialType是一个期货公司流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcFutureSerialType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcApplicationIDType是一个应用标识类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcApplicationIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankProxyIDType是一个银行代理标识类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcBankProxyIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBTCoreIDType是一个银期转帐核心系统标识类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcFBTCoreIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcServerPortType是一个服务端口号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcServerPortType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRepealedTimesType是一个已经冲正次数类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcRepealedTimesType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRepealTimeIntervalType是一个冲正时间间隔类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcRepealTimeIntervalType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTotalTimesType是一个每日累计转帐次数类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcTotalTimesType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBTRequestIDType是一个请求ID类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcFBTRequestIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTIDType是一个交易ID类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcTIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeAmountType是一个交易金额(元)类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcTradeAmountType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCustFeeType是一个应收客户费用(元)类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcCustFeeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureFeeType是一个应收期货公司费用(元)类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcFutureFeeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSingleMaxAmtType是一个单笔最高限额类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcSingleMaxAmtType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSingleMinAmtType是一个单笔最低限额类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcSingleMinAmtType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTotalAmtType是一个每日累计转帐额度类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcTotalAmtType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCertificationTypeType是一个证件类型类型 +///////////////////////////////////////////////////////////////////////// +///身份证 +#define THOST_FTDC_CFT_IDCard '0' +///护照 +#define THOST_FTDC_CFT_Passport '1' +///军官证 +#define THOST_FTDC_CFT_OfficerIDCard '2' +///士兵证 +#define THOST_FTDC_CFT_SoldierIDCard '3' +///回乡证 +#define THOST_FTDC_CFT_HomeComingCard '4' +///户口簿 +#define THOST_FTDC_CFT_HouseholdRegister '5' +///营业执照号 +#define THOST_FTDC_CFT_LicenseNo '6' +///组织机构代码证 +#define THOST_FTDC_CFT_InstitutionCodeCard '7' +///临时营业执照号 +#define THOST_FTDC_CFT_TempLicenseNo '8' +///民办非企业登记证书 +#define THOST_FTDC_CFT_NoEnterpriseLicenseNo '9' +///其他证件 +#define THOST_FTDC_CFT_OtherCard 'x' +///主管部门批文 +#define THOST_FTDC_CFT_SuperDepAgree 'a' + +typedef char TThostFtdcCertificationTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFileBusinessCodeType是一个文件业务功能类型 +///////////////////////////////////////////////////////////////////////// +///其他 +#define THOST_FTDC_FBC_Others '0' +///转账交易明细对账 +#define THOST_FTDC_FBC_TransferDetails '1' +///客户账户状态对账 +#define THOST_FTDC_FBC_CustAccStatus '2' +///账户类交易明细对账 +#define THOST_FTDC_FBC_AccountTradeDetails '3' +///期货账户信息变更明细对账 +#define THOST_FTDC_FBC_FutureAccountChangeInfoDetails '4' +///客户资金台账余额明细对账 +#define THOST_FTDC_FBC_CustMoneyDetail '5' +///客户销户结息明细对账 +#define THOST_FTDC_FBC_CustCancelAccountInfo '6' +///客户资金余额对账结果 +#define THOST_FTDC_FBC_CustMoneyResult '7' +///其它对账异常结果文件 +#define THOST_FTDC_FBC_OthersExceptionResult '8' +///客户结息净额明细 +#define THOST_FTDC_FBC_CustInterestNetMoneyDetails '9' +///客户资金交收明细 +#define THOST_FTDC_FBC_CustMoneySendAndReceiveDetails 'a' +///法人存管银行资金交收汇总 +#define THOST_FTDC_FBC_CorporationMoneyTotal 'b' +///主体间资金交收汇总 +#define THOST_FTDC_FBC_MainbodyMoneyTotal 'c' +///总分平衡监管数据 +#define THOST_FTDC_FBC_MainPartMonitorData 'd' +///存管银行备付金余额 +#define THOST_FTDC_FBC_PreparationMoney 'e' +///协办存管银行资金监管数据 +#define THOST_FTDC_FBC_BankMoneyMonitorData 'f' + +typedef char TThostFtdcFileBusinessCodeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCashExchangeCodeType是一个汇钞标志类型 +///////////////////////////////////////////////////////////////////////// +///汇 +#define THOST_FTDC_CEC_Exchange '1' +///钞 +#define THOST_FTDC_CEC_Cash '2' + +typedef char TThostFtdcCashExchangeCodeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcYesNoIndicatorType是一个是或否标识类型 +///////////////////////////////////////////////////////////////////////// +///是 +#define THOST_FTDC_YNI_Yes '0' +///否 +#define THOST_FTDC_YNI_No '1' + +typedef char TThostFtdcYesNoIndicatorType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBanlanceTypeType是一个余额类型类型 +///////////////////////////////////////////////////////////////////////// +///当前余额 +#define THOST_FTDC_BLT_CurrentMoney '0' +///可用余额 +#define THOST_FTDC_BLT_UsableMoney '1' +///可取余额 +#define THOST_FTDC_BLT_FetchableMoney '2' +///冻结余额 +#define THOST_FTDC_BLT_FreezeMoney '3' + +typedef char TThostFtdcBanlanceTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcGenderType是一个性别类型 +///////////////////////////////////////////////////////////////////////// +///未知状态 +#define THOST_FTDC_GD_Unknown '0' +///男 +#define THOST_FTDC_GD_Male '1' +///女 +#define THOST_FTDC_GD_Female '2' + +typedef char TThostFtdcGenderType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFeePayFlagType是一个费用支付标志类型 +///////////////////////////////////////////////////////////////////////// +///由受益方支付费用 +#define THOST_FTDC_FPF_BEN '0' +///由发送方支付费用 +#define THOST_FTDC_FPF_OUR '1' +///由发送方支付发起的费用,受益方支付接受的费用 +#define THOST_FTDC_FPF_SHA '2' + +typedef char TThostFtdcFeePayFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPassWordKeyTypeType是一个密钥类型类型 +///////////////////////////////////////////////////////////////////////// +///交换密钥 +#define THOST_FTDC_PWKT_ExchangeKey '0' +///密码密钥 +#define THOST_FTDC_PWKT_PassWordKey '1' +///MAC密钥 +#define THOST_FTDC_PWKT_MACKey '2' +///报文密钥 +#define THOST_FTDC_PWKT_MessageKey '3' + +typedef char TThostFtdcPassWordKeyTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBTPassWordTypeType是一个密码类型类型 +///////////////////////////////////////////////////////////////////////// +///查询 +#define THOST_FTDC_PWT_Query '0' +///取款 +#define THOST_FTDC_PWT_Fetch '1' +///转帐 +#define THOST_FTDC_PWT_Transfer '2' +///交易 +#define THOST_FTDC_PWT_Trade '3' + +typedef char TThostFtdcFBTPassWordTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBTEncryModeType是一个加密方式类型 +///////////////////////////////////////////////////////////////////////// +///不加密 +#define THOST_FTDC_EM_NoEncry '0' +///DES +#define THOST_FTDC_EM_DES '1' +///3DES +#define THOST_FTDC_EM_3DES '2' + +typedef char TThostFtdcFBTEncryModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankRepealFlagType是一个银行冲正标志类型 +///////////////////////////////////////////////////////////////////////// +///银行无需自动冲正 +#define THOST_FTDC_BRF_BankNotNeedRepeal '0' +///银行待自动冲正 +#define THOST_FTDC_BRF_BankWaitingRepeal '1' +///银行已自动冲正 +#define THOST_FTDC_BRF_BankBeenRepealed '2' + +typedef char TThostFtdcBankRepealFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrokerRepealFlagType是一个期商冲正标志类型 +///////////////////////////////////////////////////////////////////////// +///期商无需自动冲正 +#define THOST_FTDC_BRORF_BrokerNotNeedRepeal '0' +///期商待自动冲正 +#define THOST_FTDC_BRORF_BrokerWaitingRepeal '1' +///期商已自动冲正 +#define THOST_FTDC_BRORF_BrokerBeenRepealed '2' + +typedef char TThostFtdcBrokerRepealFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstitutionTypeType是一个机构类别类型 +///////////////////////////////////////////////////////////////////////// +///银行 +#define THOST_FTDC_TS_Bank '0' +///期商 +#define THOST_FTDC_TS_Future '1' +///券商 +#define THOST_FTDC_TS_Store '2' + +typedef char TThostFtdcInstitutionTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLastFragmentType是一个最后分片标志类型 +///////////////////////////////////////////////////////////////////////// +///是最后分片 +#define THOST_FTDC_LF_Yes '0' +///不是最后分片 +#define THOST_FTDC_LF_No '1' + +typedef char TThostFtdcLastFragmentType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankAccStatusType是一个银行账户状态类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_BAS_Normal '0' +///冻结 +#define THOST_FTDC_BAS_Freeze '1' +///挂失 +#define THOST_FTDC_BAS_ReportLoss '2' + +typedef char TThostFtdcBankAccStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMoneyAccountStatusType是一个资金账户状态类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_MAS_Normal '0' +///销户 +#define THOST_FTDC_MAS_Cancel '1' + +typedef char TThostFtdcMoneyAccountStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcManageStatusType是一个存管状态类型 +///////////////////////////////////////////////////////////////////////// +///指定存管 +#define THOST_FTDC_MSS_Point '0' +///预指定 +#define THOST_FTDC_MSS_PrePoint '1' +///撤销指定 +#define THOST_FTDC_MSS_CancelPoint '2' + +typedef char TThostFtdcManageStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSystemTypeType是一个应用系统类型类型 +///////////////////////////////////////////////////////////////////////// +///银期转帐 +#define THOST_FTDC_SYT_FutureBankTransfer '0' +///银证转帐 +#define THOST_FTDC_SYT_StockBankTransfer '1' +///第三方存管 +#define THOST_FTDC_SYT_TheThirdPartStore '2' + +typedef char TThostFtdcSystemTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTxnEndFlagType是一个银期转帐划转结果标志类型 +///////////////////////////////////////////////////////////////////////// +///正常处理中 +#define THOST_FTDC_TEF_NormalProcessing '0' +///成功结束 +#define THOST_FTDC_TEF_Success '1' +///失败结束 +#define THOST_FTDC_TEF_Failed '2' +///异常中 +#define THOST_FTDC_TEF_Abnormal '3' +///已人工异常处理 +#define THOST_FTDC_TEF_ManualProcessedForException '4' +///通讯异常 ,请人工处理 +#define THOST_FTDC_TEF_CommuFailedNeedManualProcess '5' +///系统出错,请人工处理 +#define THOST_FTDC_TEF_SysErrorNeedManualProcess '6' + +typedef char TThostFtdcTxnEndFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProcessStatusType是一个银期转帐服务处理状态类型 +///////////////////////////////////////////////////////////////////////// +///未处理 +#define THOST_FTDC_PSS_NotProcess '0' +///开始处理 +#define THOST_FTDC_PSS_StartProcess '1' +///处理完成 +#define THOST_FTDC_PSS_Finished '2' + +typedef char TThostFtdcProcessStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCustTypeType是一个客户类型类型 +///////////////////////////////////////////////////////////////////////// +///自然人 +#define THOST_FTDC_CUSTT_Person '0' +///机构户 +#define THOST_FTDC_CUSTT_Institution '1' + +typedef char TThostFtdcCustTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBTTransferDirectionType是一个银期转帐方向类型 +///////////////////////////////////////////////////////////////////////// +///入金,银行转期货 +#define THOST_FTDC_FBTTD_FromBankToFuture '1' +///出金,期货转银行 +#define THOST_FTDC_FBTTD_FromFutureToBank '2' + +typedef char TThostFtdcFBTTransferDirectionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOpenOrDestroyType是一个开销户类别类型 +///////////////////////////////////////////////////////////////////////// +///开户 +#define THOST_FTDC_OOD_Open '1' +///销户 +#define THOST_FTDC_OOD_Destroy '0' + +typedef char TThostFtdcOpenOrDestroyType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAvailabilityFlagType是一个有效标志类型 +///////////////////////////////////////////////////////////////////////// +///未确认 +#define THOST_FTDC_AVAF_Invalid '0' +///有效 +#define THOST_FTDC_AVAF_Valid '1' +///冲正 +#define THOST_FTDC_AVAF_Repeal '2' + +typedef char TThostFtdcAvailabilityFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrganTypeType是一个机构类型类型 +///////////////////////////////////////////////////////////////////////// +///银行代理 +#define THOST_FTDC_OT_Bank '1' +///交易前置 +#define THOST_FTDC_OT_Future '2' +///银期转帐平台管理 +#define THOST_FTDC_OT_PlateForm '9' + +typedef char TThostFtdcOrganTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrganLevelType是一个机构级别类型 +///////////////////////////////////////////////////////////////////////// +///银行总行或期商总部 +#define THOST_FTDC_OL_HeadQuarters '1' +///银行分中心或期货公司营业部 +#define THOST_FTDC_OL_Branch '2' + +typedef char TThostFtdcOrganLevelType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProtocalIDType是一个协议类型类型 +///////////////////////////////////////////////////////////////////////// +///期商协议 +#define THOST_FTDC_PID_FutureProtocal '0' +///工行协议 +#define THOST_FTDC_PID_ICBCProtocal '1' +///农行协议 +#define THOST_FTDC_PID_ABCProtocal '2' +///中国银行协议 +#define THOST_FTDC_PID_CBCProtocal '3' +///建行协议 +#define THOST_FTDC_PID_CCBProtocal '4' +///交行协议 +#define THOST_FTDC_PID_BOCOMProtocal '5' +///银期转帐平台协议 +#define THOST_FTDC_PID_FBTPlateFormProtocal 'X' + +typedef char TThostFtdcProtocalIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcConnectModeType是一个套接字连接方式类型 +///////////////////////////////////////////////////////////////////////// +///短连接 +#define THOST_FTDC_CM_ShortConnect '0' +///长连接 +#define THOST_FTDC_CM_LongConnect '1' + +typedef char TThostFtdcConnectModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSyncModeType是一个套接字通信方式类型 +///////////////////////////////////////////////////////////////////////// +///异步 +#define THOST_FTDC_SRM_ASync '0' +///同步 +#define THOST_FTDC_SRM_Sync '1' + +typedef char TThostFtdcSyncModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankAccTypeType是一个银行帐号类型类型 +///////////////////////////////////////////////////////////////////////// +///银行存折 +#define THOST_FTDC_BAT_BankBook '1' +///储蓄卡 +#define THOST_FTDC_BAT_SavingCard '2' +///信用卡 +#define THOST_FTDC_BAT_CreditCard '3' + +typedef char TThostFtdcBankAccTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureAccTypeType是一个期货公司帐号类型类型 +///////////////////////////////////////////////////////////////////////// +///银行存折 +#define THOST_FTDC_FAT_BankBook '1' +///储蓄卡 +#define THOST_FTDC_FAT_SavingCard '2' +///信用卡 +#define THOST_FTDC_FAT_CreditCard '3' + +typedef char TThostFtdcFutureAccTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrganStatusType是一个接入机构状态类型 +///////////////////////////////////////////////////////////////////////// +///启用 +#define THOST_FTDC_OS_Ready '0' +///签到 +#define THOST_FTDC_OS_CheckIn '1' +///签退 +#define THOST_FTDC_OS_CheckOut '2' +///对帐文件到达 +#define THOST_FTDC_OS_CheckFileArrived '3' +///对帐 +#define THOST_FTDC_OS_CheckDetail '4' +///日终清理 +#define THOST_FTDC_OS_DayEndClean '5' +///注销 +#define THOST_FTDC_OS_Invalid '9' + +typedef char TThostFtdcOrganStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCCBFeeModeType是一个建行收费模式类型 +///////////////////////////////////////////////////////////////////////// +///按金额扣收 +#define THOST_FTDC_CCBFM_ByAmount '1' +///按月扣收 +#define THOST_FTDC_CCBFM_ByMonth '2' + +typedef char TThostFtdcCCBFeeModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCommApiTypeType是一个通讯API类型类型 +///////////////////////////////////////////////////////////////////////// +///客户端 +#define THOST_FTDC_CAPIT_Client '1' +///服务端 +#define THOST_FTDC_CAPIT_Server '2' +///交易系统的UserApi +#define THOST_FTDC_CAPIT_UserApi '3' + +typedef char TThostFtdcCommApiTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcServiceIDType是一个服务编号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcServiceIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcServiceLineNoType是一个服务线路编号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcServiceLineNoType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcServiceNameType是一个服务名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcServiceNameType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLinkStatusType是一个连接状态类型 +///////////////////////////////////////////////////////////////////////// +///已经连接 +#define THOST_FTDC_LS_Connected '1' +///没有连接 +#define THOST_FTDC_LS_Disconnected '2' + +typedef char TThostFtdcLinkStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCommApiPointerType是一个通讯API指针类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcCommApiPointerType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPwdFlagType是一个密码核对标志类型 +///////////////////////////////////////////////////////////////////////// +///不核对 +#define THOST_FTDC_BPWDF_NoCheck '0' +///明文核对 +#define THOST_FTDC_BPWDF_BlankCheck '1' +///密文核对 +#define THOST_FTDC_BPWDF_EncryptCheck '2' + +typedef char TThostFtdcPwdFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSecuAccTypeType是一个期货帐号类型类型 +///////////////////////////////////////////////////////////////////////// +///资金帐号 +#define THOST_FTDC_SAT_AccountID '1' +///资金卡号 +#define THOST_FTDC_SAT_CardID '2' +///上海股东帐号 +#define THOST_FTDC_SAT_SHStockholderID '3' +///深圳股东帐号 +#define THOST_FTDC_SAT_SZStockholderID '4' + +typedef char TThostFtdcSecuAccTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTransferStatusType是一个转账交易状态类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_TRFS_Normal '0' +///被冲正 +#define THOST_FTDC_TRFS_Repealed '1' + +typedef char TThostFtdcTransferStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSponsorTypeType是一个发起方类型 +///////////////////////////////////////////////////////////////////////// +///期商 +#define THOST_FTDC_SPTYPE_Broker '0' +///银行 +#define THOST_FTDC_SPTYPE_Bank '1' + +typedef char TThostFtdcSponsorTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReqRspTypeType是一个请求响应类别类型 +///////////////////////////////////////////////////////////////////////// +///请求 +#define THOST_FTDC_REQRSP_Request '0' +///响应 +#define THOST_FTDC_REQRSP_Response '1' + +typedef char TThostFtdcReqRspTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBTUserEventTypeType是一个银期转帐用户事件类型类型 +///////////////////////////////////////////////////////////////////////// +///签到 +#define THOST_FTDC_FBTUET_SignIn '0' +///银行转期货 +#define THOST_FTDC_FBTUET_FromBankToFuture '1' +///期货转银行 +#define THOST_FTDC_FBTUET_FromFutureToBank '2' +///开户 +#define THOST_FTDC_FBTUET_OpenAccount '3' +///销户 +#define THOST_FTDC_FBTUET_CancelAccount '4' +///变更银行账户 +#define THOST_FTDC_FBTUET_ChangeAccount '5' +///冲正银行转期货 +#define THOST_FTDC_FBTUET_RepealFromBankToFuture '6' +///冲正期货转银行 +#define THOST_FTDC_FBTUET_RepealFromFutureToBank '7' +///查询银行账户 +#define THOST_FTDC_FBTUET_QueryBankAccount '8' +///查询期货账户 +#define THOST_FTDC_FBTUET_QueryFutureAccount '9' +///签退 +#define THOST_FTDC_FBTUET_SignOut 'A' +///密钥同步 +#define THOST_FTDC_FBTUET_SyncKey 'B' +///其他 +#define THOST_FTDC_FBTUET_Other 'Z' + +typedef char TThostFtdcFBTUserEventTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankIDByBankType是一个银行自己的编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankIDByBankType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankOperNoType是一个银行操作员号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankOperNoType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankCustNoType是一个银行客户号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankCustNoType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDBOPSeqNoType是一个递增的序列号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcDBOPSeqNoType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTableNameType是一个FBT表名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTableNameType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPKNameType是一个FBT表操作主键名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPKNameType[201]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPKValueType是一个FBT表操作主键值类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPKValueType[501]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDBOperationType是一个记录操作类型类型 +///////////////////////////////////////////////////////////////////////// +///插入 +#define THOST_FTDC_DBOP_Insert '0' +///更新 +#define THOST_FTDC_DBOP_Update '1' +///删除 +#define THOST_FTDC_DBOP_Delete '2' + +typedef char TThostFtdcDBOperationType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSyncFlagType是一个同步标记类型 +///////////////////////////////////////////////////////////////////////// +///已同步 +#define THOST_FTDC_SYNF_Yes '0' +///未同步 +#define THOST_FTDC_SYNF_No '1' + +typedef char TThostFtdcSyncFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTargetIDType是一个同步目标编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTargetIDType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSyncTypeType是一个同步类型类型 +///////////////////////////////////////////////////////////////////////// +///一次同步 +#define THOST_FTDC_SYNT_OneOffSync '0' +///定时同步 +#define THOST_FTDC_SYNT_TimerSync '1' +///定时完全同步 +#define THOST_FTDC_SYNT_TimerFullSync '2' + +typedef char TThostFtdcSyncTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBETimeType是一个各种换汇时间类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBETimeType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEBankNoType是一个换汇银行行号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEBankNoType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBECertNoType是一个换汇凭证号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBECertNoType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExDirectionType是一个换汇方向类型 +///////////////////////////////////////////////////////////////////////// +///结汇 +#define THOST_FTDC_FBEDIR_Settlement '0' +///售汇 +#define THOST_FTDC_FBEDIR_Sale '1' + +typedef char TThostFtdcExDirectionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEBankAccountType是一个换汇银行账户类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEBankAccountType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEBankAccountNameType是一个换汇银行账户名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEBankAccountNameType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEAmtType是一个各种换汇金额类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcFBEAmtType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEBusinessTypeType是一个换汇业务类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEBusinessTypeType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEPostScriptType是一个换汇附言类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEPostScriptType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBERemarkType是一个换汇备注类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBERemarkType[71]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExRateType是一个换汇汇率类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcExRateType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEResultFlagType是一个换汇成功标志类型 +///////////////////////////////////////////////////////////////////////// +///成功 +#define THOST_FTDC_FBERES_Success '0' +///账户余额不足 +#define THOST_FTDC_FBERES_InsufficientBalance '1' +///交易结果未知 +#define THOST_FTDC_FBERES_UnknownTrading '8' +///失败 +#define THOST_FTDC_FBERES_Fail 'x' + +typedef char TThostFtdcFBEResultFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBERtnMsgType是一个换汇返回信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBERtnMsgType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEExtendMsgType是一个换汇扩展信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEExtendMsgType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEBusinessSerialType是一个换汇记账流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEBusinessSerialType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBESystemSerialType是一个换汇流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBESystemSerialType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBETotalExCntType是一个换汇交易总笔数类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcFBETotalExCntType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEExchStatusType是一个换汇交易状态类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_FBEES_Normal '0' +///交易重发 +#define THOST_FTDC_FBEES_ReExchange '1' + +typedef char TThostFtdcFBEExchStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEFileFlagType是一个换汇文件标志类型 +///////////////////////////////////////////////////////////////////////// +///数据包 +#define THOST_FTDC_FBEFG_DataPackage '0' +///文件 +#define THOST_FTDC_FBEFG_File '1' + +typedef char TThostFtdcFBEFileFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEAlreadyTradeType是一个换汇已交易标志类型 +///////////////////////////////////////////////////////////////////////// +///未交易 +#define THOST_FTDC_FBEAT_NotTrade '0' +///已交易 +#define THOST_FTDC_FBEAT_Trade '1' + +typedef char TThostFtdcFBEAlreadyTradeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEOpenBankType是一个换汇账户开户行类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEOpenBankType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEUserEventTypeType是一个银期换汇用户事件类型类型 +///////////////////////////////////////////////////////////////////////// +///签到 +#define THOST_FTDC_FBEUET_SignIn '0' +///换汇 +#define THOST_FTDC_FBEUET_Exchange '1' +///换汇重发 +#define THOST_FTDC_FBEUET_ReExchange '2' +///银行账户查询 +#define THOST_FTDC_FBEUET_QueryBankAccount '3' +///换汇明细查询 +#define THOST_FTDC_FBEUET_QueryExchDetial '4' +///换汇汇总查询 +#define THOST_FTDC_FBEUET_QueryExchSummary '5' +///换汇汇率查询 +#define THOST_FTDC_FBEUET_QueryExchRate '6' +///对账文件通知 +#define THOST_FTDC_FBEUET_CheckBankAccount '7' +///签退 +#define THOST_FTDC_FBEUET_SignOut '8' +///其他 +#define THOST_FTDC_FBEUET_Other 'Z' + +typedef char TThostFtdcFBEUserEventTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEFileNameType是一个换汇相关文件名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEFileNameType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEBatchSerialType是一个换汇批次号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEBatchSerialType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEReqFlagType是一个换汇发送标志类型 +///////////////////////////////////////////////////////////////////////// +///未处理 +#define THOST_FTDC_FBERF_UnProcessed '0' +///等待发送 +#define THOST_FTDC_FBERF_WaitSend '1' +///发送成功 +#define THOST_FTDC_FBERF_SendSuccess '2' +///发送失败 +#define THOST_FTDC_FBERF_SendFailed '3' +///等待重发 +#define THOST_FTDC_FBERF_WaitReSend '4' + +typedef char TThostFtdcFBEReqFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcNotifyClassType是一个风险通知类型类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_NC_NOERROR '0' +///警示 +#define THOST_FTDC_NC_Warn '1' +///追保 +#define THOST_FTDC_NC_Call '2' +///强平 +#define THOST_FTDC_NC_Force '3' +///穿仓 +#define THOST_FTDC_NC_CHUANCANG '4' +///异常 +#define THOST_FTDC_NC_Exception '5' + +typedef char TThostFtdcNotifyClassType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRiskNofityInfoType是一个客户风险通知消息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRiskNofityInfoType[257]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcForceCloseSceneIdType是一个强平场景编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcForceCloseSceneIdType[24]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcForceCloseTypeType是一个强平单类型类型 +///////////////////////////////////////////////////////////////////////// +///手工强平 +#define THOST_FTDC_FCT_Manual '0' +///单一投资者辅助强平 +#define THOST_FTDC_FCT_Single '1' +///批量投资者辅助强平 +#define THOST_FTDC_FCT_Group '2' + +typedef char TThostFtdcForceCloseTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstrumentIDsType是一个多个产品代码,用+分隔,如cu+zn类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInstrumentIDsType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRiskNotifyMethodType是一个风险通知途径类型 +///////////////////////////////////////////////////////////////////////// +///系统通知 +#define THOST_FTDC_RNM_System '0' +///短信通知 +#define THOST_FTDC_RNM_SMS '1' +///邮件通知 +#define THOST_FTDC_RNM_EMail '2' +///人工通知 +#define THOST_FTDC_RNM_Manual '3' + +typedef char TThostFtdcRiskNotifyMethodType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRiskNotifyStatusType是一个风险通知状态类型 +///////////////////////////////////////////////////////////////////////// +///未生成 +#define THOST_FTDC_RNS_NotGen '0' +///已生成未发送 +#define THOST_FTDC_RNS_Generated '1' +///发送失败 +#define THOST_FTDC_RNS_SendError '2' +///已发送未接收 +#define THOST_FTDC_RNS_SendOk '3' +///已接收未确认 +#define THOST_FTDC_RNS_Received '4' +///已确认 +#define THOST_FTDC_RNS_Confirmed '5' + +typedef char TThostFtdcRiskNotifyStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRiskUserEventType是一个风控用户操作事件类型 +///////////////////////////////////////////////////////////////////////// +///导出数据 +#define THOST_FTDC_RUE_ExportData '0' + +typedef char TThostFtdcRiskUserEventType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcParamIDType是一个参数代码类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcParamIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcParamNameType是一个参数名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcParamNameType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcParamValueType是一个参数值类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcParamValueType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcConditionalOrderSortTypeType是一个条件单索引条件类型 +///////////////////////////////////////////////////////////////////////// +///使用最新价升序 +#define THOST_FTDC_COST_LastPriceAsc '0' +///使用最新价降序 +#define THOST_FTDC_COST_LastPriceDesc '1' +///使用卖价升序 +#define THOST_FTDC_COST_AskPriceAsc '2' +///使用卖价降序 +#define THOST_FTDC_COST_AskPriceDesc '3' +///使用买价升序 +#define THOST_FTDC_COST_BidPriceAsc '4' +///使用买价降序 +#define THOST_FTDC_COST_BidPriceDesc '5' + +typedef char TThostFtdcConditionalOrderSortTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSendTypeType是一个报送状态类型 +///////////////////////////////////////////////////////////////////////// +///未发送 +#define THOST_FTDC_UOAST_NoSend '0' +///已发送 +#define THOST_FTDC_UOAST_Sended '1' +///已生成 +#define THOST_FTDC_UOAST_Generated '2' +///报送失败 +#define THOST_FTDC_UOAST_SendFail '3' +///接收成功 +#define THOST_FTDC_UOAST_Success '4' +///接收失败 +#define THOST_FTDC_UOAST_Fail '5' +///取消报送 +#define THOST_FTDC_UOAST_Cancel '6' + +typedef char TThostFtdcSendTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClientIDStatusType是一个交易编码状态类型 +///////////////////////////////////////////////////////////////////////// +///未申请 +#define THOST_FTDC_UOACS_NoApply '1' +///已提交申请 +#define THOST_FTDC_UOACS_Submited '2' +///已发送申请 +#define THOST_FTDC_UOACS_Sended '3' +///完成 +#define THOST_FTDC_UOACS_Success '4' +///拒绝 +#define THOST_FTDC_UOACS_Refuse '5' +///已撤销编码 +#define THOST_FTDC_UOACS_Cancel '6' + +typedef char TThostFtdcClientIDStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIndustryIDType是一个行业编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcIndustryIDType[17]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcQuestionIDType是一个特有信息编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcQuestionIDType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcQuestionContentType是一个特有信息说明类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcQuestionContentType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOptionIDType是一个选项编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOptionIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOptionContentType是一个选项说明类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOptionContentType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcQuestionTypeType是一个特有信息类型类型 +///////////////////////////////////////////////////////////////////////// +///单选 +#define THOST_FTDC_QT_Radio '1' +///多选 +#define THOST_FTDC_QT_Option '2' +///填空 +#define THOST_FTDC_QT_Blank '3' + +typedef char TThostFtdcQuestionTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProcessIDType是一个业务流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcProcessIDType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSeqNoType是一个流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcSeqNoType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOAProcessStatusType是一个流程状态类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUOAProcessStatusType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProcessTypeType是一个流程功能类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcProcessTypeType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBusinessTypeType是一个业务类型类型 +///////////////////////////////////////////////////////////////////////// +///请求 +#define THOST_FTDC_BT_Request '1' +///应答 +#define THOST_FTDC_BT_Response '2' +///通知 +#define THOST_FTDC_BT_Notice '3' + +typedef char TThostFtdcBusinessTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCfmmcReturnCodeType是一个监控中心返回码类型 +///////////////////////////////////////////////////////////////////////// +///成功 +#define THOST_FTDC_CRC_Success '0' +///该客户已经有流程在处理中 +#define THOST_FTDC_CRC_Working '1' +///监控中客户资料检查失败 +#define THOST_FTDC_CRC_InfoFail '2' +///监控中实名制检查失败 +#define THOST_FTDC_CRC_IDCardFail '3' +///其他错误 +#define THOST_FTDC_CRC_OtherFail '4' + +typedef char TThostFtdcCfmmcReturnCodeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExReturnCodeType是一个交易所返回码类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcExReturnCodeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClientTypeType是一个客户类型类型 +///////////////////////////////////////////////////////////////////////// +///所有 +#define THOST_FTDC_CfMMCCT_All '0' +///个人 +#define THOST_FTDC_CfMMCCT_Person '1' +///单位 +#define THOST_FTDC_CfMMCCT_Company '2' +///其他 +#define THOST_FTDC_CfMMCCT_Other '3' +///特殊法人 +#define THOST_FTDC_CfMMCCT_SpecialOrgan '4' +///资管户 +#define THOST_FTDC_CfMMCCT_Asset '5' + +typedef char TThostFtdcClientTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangeIDTypeType是一个交易所编号类型 +///////////////////////////////////////////////////////////////////////// +///上海期货交易所 +#define THOST_FTDC_EIDT_SHFE 'S' +///郑州商品交易所 +#define THOST_FTDC_EIDT_CZCE 'Z' +///大连商品交易所 +#define THOST_FTDC_EIDT_DCE 'D' +///中国金融期货交易所 +#define THOST_FTDC_EIDT_CFFEX 'J' +///上海国际能源交易中心股份有限公司 +#define THOST_FTDC_EIDT_INE 'N' + +typedef char TThostFtdcExchangeIDTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExClientIDTypeType是一个交易编码类型类型 +///////////////////////////////////////////////////////////////////////// +///套保 +#define THOST_FTDC_ECIDT_Hedge '1' +///套利 +#define THOST_FTDC_ECIDT_Arbitrage '2' +///投机 +#define THOST_FTDC_ECIDT_Speculation '3' + +typedef char TThostFtdcExClientIDTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClientClassifyType是一个客户分类码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcClientClassifyType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOAOrganTypeType是一个单位性质类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUOAOrganTypeType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOACountryCodeType是一个国家代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUOACountryCodeType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAreaCodeType是一个区号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAreaCodeType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFuturesIDType是一个监控中心为客户分配的代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFuturesIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCffmcDateType是一个日期类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCffmcDateType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCffmcTimeType是一个时间类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCffmcTimeType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcNocIDType是一个组织机构代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcNocIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUpdateFlagType是一个更新状态类型 +///////////////////////////////////////////////////////////////////////// +///未更新 +#define THOST_FTDC_UF_NoUpdate '0' +///更新全部信息成功 +#define THOST_FTDC_UF_Success '1' +///更新全部信息失败 +#define THOST_FTDC_UF_Fail '2' +///更新交易编码成功 +#define THOST_FTDC_UF_TCSuccess '3' +///更新交易编码失败 +#define THOST_FTDC_UF_TCFail '4' +///已丢弃 +#define THOST_FTDC_UF_Cancel '5' + +typedef char TThostFtdcUpdateFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcApplyOperateIDType是一个申请动作类型 +///////////////////////////////////////////////////////////////////////// +///开户 +#define THOST_FTDC_AOID_OpenInvestor '1' +///修改身份信息 +#define THOST_FTDC_AOID_ModifyIDCard '2' +///修改一般信息 +#define THOST_FTDC_AOID_ModifyNoIDCard '3' +///申请交易编码 +#define THOST_FTDC_AOID_ApplyTradingCode '4' +///撤销交易编码 +#define THOST_FTDC_AOID_CancelTradingCode '5' +///销户 +#define THOST_FTDC_AOID_CancelInvestor '6' +///账户休眠 +#define THOST_FTDC_AOID_FreezeAccount '8' +///激活休眠账户 +#define THOST_FTDC_AOID_ActiveFreezeAccount '9' + +typedef char TThostFtdcApplyOperateIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcApplyStatusIDType是一个申请状态类型 +///////////////////////////////////////////////////////////////////////// +///未补全 +#define THOST_FTDC_ASID_NoComplete '1' +///已提交 +#define THOST_FTDC_ASID_Submited '2' +///已审核 +#define THOST_FTDC_ASID_Checked '3' +///已拒绝 +#define THOST_FTDC_ASID_Refused '4' +///已删除 +#define THOST_FTDC_ASID_Deleted '5' + +typedef char TThostFtdcApplyStatusIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSendMethodType是一个发送方式类型 +///////////////////////////////////////////////////////////////////////// +///文件发送 +#define THOST_FTDC_UOASM_ByAPI '1' +///电子发送 +#define THOST_FTDC_UOASM_ByFile '2' + +typedef char TThostFtdcSendMethodType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcEventTypeType是一个业务操作类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcEventTypeType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcEventModeType是一个操作方法类型 +///////////////////////////////////////////////////////////////////////// +///增加 +#define THOST_FTDC_EvM_ADD '1' +///修改 +#define THOST_FTDC_EvM_UPDATE '2' +///删除 +#define THOST_FTDC_EvM_DELETE '3' +///复核 +#define THOST_FTDC_EvM_CHECK '4' +///复制 +#define THOST_FTDC_EvM_COPY '5' +///注销 +#define THOST_FTDC_EvM_CANCEL '6' +///冲销 +#define THOST_FTDC_EvM_Reverse '7' + +typedef char TThostFtdcEventModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOAAutoSendType是一个统一开户申请自动发送类型 +///////////////////////////////////////////////////////////////////////// +///自动发送并接收 +#define THOST_FTDC_UOAA_ASR '1' +///自动发送,不自动接收 +#define THOST_FTDC_UOAA_ASNR '2' +///不自动发送,自动接收 +#define THOST_FTDC_UOAA_NSAR '3' +///不自动发送,也不自动接收 +#define THOST_FTDC_UOAA_NSR '4' + +typedef char TThostFtdcUOAAutoSendType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcQueryDepthType是一个查询深度类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcQueryDepthType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDataCenterIDType是一个数据中心代码类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcDataCenterIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFlowIDType是一个流程ID类型 +///////////////////////////////////////////////////////////////////////// +///投资者对应投资者组设置 +#define THOST_FTDC_EvM_InvestorGroupFlow '1' +///投资者手续费率设置 +#define THOST_FTDC_EvM_InvestorRate '2' +///投资者手续费率模板关系设置 +#define THOST_FTDC_EvM_InvestorCommRateModel '3' + +typedef char TThostFtdcFlowIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCheckLevelType是一个复核级别类型 +///////////////////////////////////////////////////////////////////////// +///零级复核 +#define THOST_FTDC_CL_Zero '0' +///一级复核 +#define THOST_FTDC_CL_One '1' +///二级复核 +#define THOST_FTDC_CL_Two '2' + +typedef char TThostFtdcCheckLevelType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCheckNoType是一个操作次数类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcCheckNoType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCheckStatusType是一个复核级别类型 +///////////////////////////////////////////////////////////////////////// +///未复核 +#define THOST_FTDC_CHS_Init '0' +///复核中 +#define THOST_FTDC_CHS_Checking '1' +///已复核 +#define THOST_FTDC_CHS_Checked '2' +///拒绝 +#define THOST_FTDC_CHS_Refuse '3' +///作废 +#define THOST_FTDC_CHS_Cancel '4' + +typedef char TThostFtdcCheckStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUsedStatusType是一个生效状态类型 +///////////////////////////////////////////////////////////////////////// +///未生效 +#define THOST_FTDC_CHU_Unused '0' +///已生效 +#define THOST_FTDC_CHU_Used '1' +///生效失败 +#define THOST_FTDC_CHU_Fail '2' + +typedef char TThostFtdcUsedStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRateTemplateNameType是一个模型名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRateTemplateNameType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPropertyStringType是一个用于查询的投资属性字段类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPropertyStringType[2049]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankAcountOriginType是一个账户来源类型 +///////////////////////////////////////////////////////////////////////// +///手工录入 +#define THOST_FTDC_BAO_ByAccProperty '0' +///银期转账 +#define THOST_FTDC_BAO_ByFBTransfer '1' + +typedef char TThostFtdcBankAcountOriginType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMonthBillTradeSumType是一个结算单月报成交汇总方式类型 +///////////////////////////////////////////////////////////////////////// +///同日同合约 +#define THOST_FTDC_MBTS_ByInstrument '0' +///同日同合约同价格 +#define THOST_FTDC_MBTS_ByDayInsPrc '1' +///同合约 +#define THOST_FTDC_MBTS_ByDayIns '2' + +typedef char TThostFtdcMonthBillTradeSumType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBTTradeCodeEnumType是一个银期交易代码枚举类型 +///////////////////////////////////////////////////////////////////////// +///银行发起银行转期货 +#define THOST_FTDC_FTC_BankLaunchBankToBroker '102001' +///期货发起银行转期货 +#define THOST_FTDC_FTC_BrokerLaunchBankToBroker '202001' +///银行发起期货转银行 +#define THOST_FTDC_FTC_BankLaunchBrokerToBank '102002' +///期货发起期货转银行 +#define THOST_FTDC_FTC_BrokerLaunchBrokerToBank '202002' + +typedef char TThostFtdcFBTTradeCodeEnumType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRateTemplateIDType是一个模型代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRateTemplateIDType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRiskRateType是一个风险度类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRiskRateType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTimestampType是一个时间戳类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcTimestampType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestorIDRuleNameType是一个号段规则名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInvestorIDRuleNameType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestorIDRuleExprType是一个号段规则表达式类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInvestorIDRuleExprType[513]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLastDriftType是一个上次OTP漂移值类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcLastDriftType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLastSuccessType是一个上次OTP成功值类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcLastSuccessType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAuthKeyType是一个令牌密钥类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAuthKeyType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSerialNumberType是一个序列号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSerialNumberType[17]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOTPTypeType是一个动态令牌类型类型 +///////////////////////////////////////////////////////////////////////// +///无动态令牌 +#define THOST_FTDC_OTP_NONE '0' +///时间令牌 +#define THOST_FTDC_OTP_TOTP '1' + +typedef char TThostFtdcOTPTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOTPVendorsIDType是一个动态令牌提供商类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOTPVendorsIDType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOTPVendorsNameType是一个动态令牌提供商名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOTPVendorsNameType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOTPStatusType是一个动态令牌状态类型 +///////////////////////////////////////////////////////////////////////// +///未使用 +#define THOST_FTDC_OTPS_Unused '0' +///已使用 +#define THOST_FTDC_OTPS_Used '1' +///注销 +#define THOST_FTDC_OTPS_Disuse '2' + +typedef char TThostFtdcOTPStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrokerUserTypeType是一个经济公司用户类型类型 +///////////////////////////////////////////////////////////////////////// +///投资者 +#define THOST_FTDC_BUT_Investor '1' +///操作员 +#define THOST_FTDC_BUT_BrokerUser '2' + +typedef char TThostFtdcBrokerUserTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureTypeType是一个期货类型类型 +///////////////////////////////////////////////////////////////////////// +///商品期货 +#define THOST_FTDC_FUTT_Commodity '1' +///金融期货 +#define THOST_FTDC_FUTT_Financial '2' + +typedef char TThostFtdcFutureTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundEventTypeType是一个资金管理操作类型类型 +///////////////////////////////////////////////////////////////////////// +///转账限额 +#define THOST_FTDC_FET_Restriction '0' +///当日转账限额 +#define THOST_FTDC_FET_TodayRestriction '1' +///期商流水 +#define THOST_FTDC_FET_Transfer '2' +///资金冻结 +#define THOST_FTDC_FET_Credit '3' +///投资者可提资金比例 +#define THOST_FTDC_FET_InvestorWithdrawAlm '4' +///单个银行帐户转账限额 +#define THOST_FTDC_FET_BankRestriction '5' +///银期签约账户 +#define THOST_FTDC_FET_Accountregister '6' +///交易所出入金 +#define THOST_FTDC_FET_ExchangeFundIO '7' +///投资者出入金 +#define THOST_FTDC_FET_InvestorFundIO '8' + +typedef char TThostFtdcFundEventTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAccountSourceTypeType是一个资金账户来源类型 +///////////////////////////////////////////////////////////////////////// +///银期同步 +#define THOST_FTDC_AST_FBTransfer '0' +///手工录入 +#define THOST_FTDC_AST_ManualEntry '1' + +typedef char TThostFtdcAccountSourceTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCodeSourceTypeType是一个交易编码来源类型 +///////////////////////////////////////////////////////////////////////// +///统一开户(已规范) +#define THOST_FTDC_CST_UnifyAccount '0' +///手工录入(未规范) +#define THOST_FTDC_CST_ManualEntry '1' + +typedef char TThostFtdcCodeSourceTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserRangeType是一个操作员范围类型 +///////////////////////////////////////////////////////////////////////// +///所有 +#define THOST_FTDC_UR_All '0' +///单一操作员 +#define THOST_FTDC_UR_Single '1' + +typedef char TThostFtdcUserRangeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTimeSpanType是一个时间跨度类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTimeSpanType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcImportSequenceIDType是一个动态令牌导入批次编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcImportSequenceIDType[17]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcByGroupType是一个交易统计表按客户统计方式类型 +///////////////////////////////////////////////////////////////////////// +///按投资者统计 +#define THOST_FTDC_BG_Investor '2' +///按类统计 +#define THOST_FTDC_BG_Group '1' + +typedef char TThostFtdcByGroupType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeSumStatModeType是一个交易统计表按范围统计方式类型 +///////////////////////////////////////////////////////////////////////// +///按合约统计 +#define THOST_FTDC_TSSM_Instrument '1' +///按产品统计 +#define THOST_FTDC_TSSM_Product '2' +///按交易所统计 +#define THOST_FTDC_TSSM_Exchange '3' + +typedef char TThostFtdcTradeSumStatModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcComTypeType是一个组合成交类型类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcComTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserProductIDType是一个产品标识类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUserProductIDType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserProductNameType是一个产品名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUserProductNameType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserProductMemoType是一个产品说明类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUserProductMemoType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCCancelFlagType是一个新增或变更标志类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCCancelFlagType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCDateType是一个日期类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCDateType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCInvestorNameType是一个客户名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCInvestorNameType[201]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCOpenInvestorNameType是一个客户名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCOpenInvestorNameType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCInvestorIDType是一个客户代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCInvestorIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCIdentifiedCardNoType是一个证件号码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCIdentifiedCardNoType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCClientIDType是一个交易编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCClientIDType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCBankFlagType是一个银行标识类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCBankFlagType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCBankAccountType是一个银行账户类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCBankAccountType[23]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCOpenNameType是一个开户人类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCOpenNameType[401]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCMemoType是一个说明类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCMemoType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCTimeType是一个时间类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCTimeType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCTradeIDType是一个成交流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCTradeIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCExchangeInstIDType是一个合约代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCExchangeInstIDType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCMortgageNameType是一个质押品名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCMortgageNameType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCReasonType是一个事由类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCReasonType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIsSettlementType是一个是否为非结算会员类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcIsSettlementType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCMoneyType是一个资金类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcCSRCMoneyType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCPriceType是一个价格类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcCSRCPriceType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCOptionsTypeType是一个期权类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCOptionsTypeType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCStrikePriceType是一个执行价类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcCSRCStrikePriceType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCTargetProductIDType是一个标的品种类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCTargetProductIDType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCTargetInstrIDType是一个标的合约类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCTargetInstrIDType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCommModelNameType是一个手续费率模板名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCommModelNameType[161]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCommModelMemoType是一个手续费率模板备注类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCommModelMemoType[1025]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExprSetModeType是一个日期表达式设置类型类型 +///////////////////////////////////////////////////////////////////////// +///相对已有规则设置 +#define THOST_FTDC_ESM_Relative '1' +///典型设置 +#define THOST_FTDC_ESM_Typical '2' + +typedef char TThostFtdcExprSetModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRateInvestorRangeType是一个投资者范围类型 +///////////////////////////////////////////////////////////////////////// +///公司标准 +#define THOST_FTDC_RIR_All '1' +///模板 +#define THOST_FTDC_RIR_Model '2' +///单一投资者 +#define THOST_FTDC_RIR_Single '3' + +typedef char TThostFtdcRateInvestorRangeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAgentBrokerIDType是一个代理经纪公司代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAgentBrokerIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDRIdentityIDType是一个交易中心代码类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcDRIdentityIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDRIdentityNameType是一个交易中心名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDRIdentityNameType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDBLinkIDType是一个DBLink标识号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDBLinkIDType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSyncDataStatusType是一个主次用系统数据同步状态类型 +///////////////////////////////////////////////////////////////////////// +///未同步 +#define THOST_FTDC_SDS_Initialize '0' +///同步中 +#define THOST_FTDC_SDS_Settlementing '1' +///已同步 +#define THOST_FTDC_SDS_Settlemented '2' + +typedef char TThostFtdcSyncDataStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeSourceType是一个成交来源类型 +///////////////////////////////////////////////////////////////////////// +///来自交易所普通回报 +#define THOST_FTDC_TSRC_NORMAL '0' +///来自查询 +#define THOST_FTDC_TSRC_QUERY '1' + +typedef char TThostFtdcTradeSourceType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFlexStatModeType是一个产品合约统计方式类型 +///////////////////////////////////////////////////////////////////////// +///产品统计 +#define THOST_FTDC_FSM_Product '1' +///交易所统计 +#define THOST_FTDC_FSM_Exchange '2' +///统计所有 +#define THOST_FTDC_FSM_All '3' + +typedef char TThostFtdcFlexStatModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcByInvestorRangeType是一个投资者范围统计方式类型 +///////////////////////////////////////////////////////////////////////// +///属性统计 +#define THOST_FTDC_BIR_Property '1' +///统计所有 +#define THOST_FTDC_BIR_All '2' + +typedef char TThostFtdcByInvestorRangeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSRiskRateType是一个风险度类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSRiskRateType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSequenceNo12Type是一个序号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcSequenceNo12Type; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPropertyInvestorRangeType是一个投资者范围类型 +///////////////////////////////////////////////////////////////////////// +///所有 +#define THOST_FTDC_PIR_All '1' +///投资者属性 +#define THOST_FTDC_PIR_Property '2' +///单一投资者 +#define THOST_FTDC_PIR_Single '3' + +typedef char TThostFtdcPropertyInvestorRangeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFileStatusType是一个文件状态类型 +///////////////////////////////////////////////////////////////////////// +///未生成 +#define THOST_FTDC_FIS_NoCreate '0' +///已生成 +#define THOST_FTDC_FIS_Created '1' +///生成失败 +#define THOST_FTDC_FIS_Failed '2' + +typedef char TThostFtdcFileStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFileGenStyleType是一个文件生成方式类型 +///////////////////////////////////////////////////////////////////////// +///下发 +#define THOST_FTDC_FGS_FileTransmit '0' +///生成 +#define THOST_FTDC_FGS_FileGen '1' + +typedef char TThostFtdcFileGenStyleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSysOperModeType是一个系统日志操作方法类型 +///////////////////////////////////////////////////////////////////////// +///增加 +#define THOST_FTDC_SoM_Add '1' +///修改 +#define THOST_FTDC_SoM_Update '2' +///删除 +#define THOST_FTDC_SoM_Delete '3' +///复制 +#define THOST_FTDC_SoM_Copy '4' +///激活 +#define THOST_FTDC_SoM_AcTive '5' +///注销 +#define THOST_FTDC_SoM_CanCel '6' +///重置 +#define THOST_FTDC_SoM_ReSet '7' + +typedef char TThostFtdcSysOperModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSysOperTypeType是一个系统日志操作类型类型 +///////////////////////////////////////////////////////////////////////// +///修改操作员密码 +#define THOST_FTDC_SoT_UpdatePassword '0' +///操作员组织架构关系 +#define THOST_FTDC_SoT_UserDepartment '1' +///角色管理 +#define THOST_FTDC_SoT_RoleManager '2' +///角色功能设置 +#define THOST_FTDC_SoT_RoleFunction '3' +///基础参数设置 +#define THOST_FTDC_SoT_BaseParam '4' +///设置操作员 +#define THOST_FTDC_SoT_SetUserID '5' +///用户角色设置 +#define THOST_FTDC_SoT_SetUserRole '6' +///用户IP限制 +#define THOST_FTDC_SoT_UserIpRestriction '7' +///组织架构管理 +#define THOST_FTDC_SoT_DepartmentManager '8' +///组织架构向查询分类复制 +#define THOST_FTDC_SoT_DepartmentCopy '9' +///交易编码管理 +#define THOST_FTDC_SoT_Tradingcode 'A' +///投资者状态维护 +#define THOST_FTDC_SoT_InvestorStatus 'B' +///投资者权限管理 +#define THOST_FTDC_SoT_InvestorAuthority 'C' +///属性设置 +#define THOST_FTDC_SoT_PropertySet 'D' +///重置投资者密码 +#define THOST_FTDC_SoT_ReSetInvestorPasswd 'E' +///投资者个性信息维护 +#define THOST_FTDC_SoT_InvestorPersonalityInfo 'F' + +typedef char TThostFtdcSysOperTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCDataQueyTypeType是一个上报数据查询类型类型 +///////////////////////////////////////////////////////////////////////// +///查询当前交易日报送的数据 +#define THOST_FTDC_CSRCQ_Current '0' +///查询历史报送的代理经纪公司的数据 +#define THOST_FTDC_CSRCQ_History '1' + +typedef char TThostFtdcCSRCDataQueyTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFreezeStatusType是一个休眠状态类型 +///////////////////////////////////////////////////////////////////////// +///活跃 +#define THOST_FTDC_FRS_Normal '1' +///休眠 +#define THOST_FTDC_FRS_Freeze '0' + +typedef char TThostFtdcFreezeStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcStandardStatusType是一个规范状态类型 +///////////////////////////////////////////////////////////////////////// +///已规范 +#define THOST_FTDC_STST_Standard '0' +///未规范 +#define THOST_FTDC_STST_NonStandard '1' + +typedef char TThostFtdcStandardStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCFreezeStatusType是一个休眠状态类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCFreezeStatusType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRightParamTypeType是一个配置类型类型 +///////////////////////////////////////////////////////////////////////// +///休眠户 +#define THOST_FTDC_RPT_Freeze '1' +///激活休眠户 +#define THOST_FTDC_RPT_FreezeActive '2' +///开仓权限限制 +#define THOST_FTDC_RPT_OpenLimit '3' +///解除开仓权限限制 +#define THOST_FTDC_RPT_RelieveOpenLimit '4' + +typedef char TThostFtdcRightParamTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRightTemplateIDType是一个模板代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRightTemplateIDType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRightTemplateNameType是一个模板名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRightTemplateNameType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDataStatusType是一个反洗钱审核表数据状态类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_AMLDS_Normal '0' +///已删除 +#define THOST_FTDC_AMLDS_Deleted '1' + +typedef char TThostFtdcDataStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLCheckStatusType是一个审核状态类型 +///////////////////////////////////////////////////////////////////////// +///未复核 +#define THOST_FTDC_AMLCHS_Init '0' +///复核中 +#define THOST_FTDC_AMLCHS_Checking '1' +///已复核 +#define THOST_FTDC_AMLCHS_Checked '2' +///拒绝上报 +#define THOST_FTDC_AMLCHS_RefuseReport '3' + +typedef char TThostFtdcAMLCheckStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAmlDateTypeType是一个日期类型类型 +///////////////////////////////////////////////////////////////////////// +///检查日期 +#define THOST_FTDC_AMLDT_DrawDay '0' +///发生日期 +#define THOST_FTDC_AMLDT_TouchDay '1' + +typedef char TThostFtdcAmlDateTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAmlCheckLevelType是一个审核级别类型 +///////////////////////////////////////////////////////////////////////// +///零级审核 +#define THOST_FTDC_AMLCL_CheckLevel0 '0' +///一级审核 +#define THOST_FTDC_AMLCL_CheckLevel1 '1' +///二级审核 +#define THOST_FTDC_AMLCL_CheckLevel2 '2' +///三级审核 +#define THOST_FTDC_AMLCL_CheckLevel3 '3' + +typedef char TThostFtdcAmlCheckLevelType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAmlCheckFlowType是一个反洗钱数据抽取审核流程类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAmlCheckFlowType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDataTypeType是一个数据类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDataTypeType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExportFileTypeType是一个导出文件类型类型 +///////////////////////////////////////////////////////////////////////// +///CSV +#define THOST_FTDC_EFT_CSV '0' +///Excel +#define THOST_FTDC_EFT_EXCEL '1' +///DBF +#define THOST_FTDC_EFT_DBF '2' + +typedef char TThostFtdcExportFileTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettleManagerTypeType是一个结算配置类型类型 +///////////////////////////////////////////////////////////////////////// +///结算前准备 +#define THOST_FTDC_SMT_Before '1' +///结算 +#define THOST_FTDC_SMT_Settlement '2' +///结算后核对 +#define THOST_FTDC_SMT_After '3' +///结算后处理 +#define THOST_FTDC_SMT_Settlemented '4' + +typedef char TThostFtdcSettleManagerTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettleManagerIDType是一个结算配置代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSettleManagerIDType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettleManagerNameType是一个结算配置名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSettleManagerNameType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettleManagerLevelType是一个结算配置等级类型 +///////////////////////////////////////////////////////////////////////// +///必要 +#define THOST_FTDC_SML_Must '1' +///警告 +#define THOST_FTDC_SML_Alarm '2' +///提示 +#define THOST_FTDC_SML_Prompt '3' +///不检查 +#define THOST_FTDC_SML_Ignore '4' + +typedef char TThostFtdcSettleManagerLevelType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettleManagerGroupType是一个模块分组类型 +///////////////////////////////////////////////////////////////////////// +///交易所核对 +#define THOST_FTDC_SMG_Exhcange '1' +///内部核对 +#define THOST_FTDC_SMG_ASP '2' +///上报数据核对 +#define THOST_FTDC_SMG_CSRC '3' + +typedef char TThostFtdcSettleManagerGroupType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCheckResultMemoType是一个核对结果说明类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCheckResultMemoType[1025]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFunctionUrlType是一个功能链接类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFunctionUrlType[1025]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAuthInfoType是一个客户端认证信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAuthInfoType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAuthCodeType是一个客户端认证码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAuthCodeType[17]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLimitUseTypeType是一个保值额度使用类型类型 +///////////////////////////////////////////////////////////////////////// +///可重复使用 +#define THOST_FTDC_LUT_Repeatable '1' +///不可重复使用 +#define THOST_FTDC_LUT_Unrepeatable '2' + +typedef char TThostFtdcLimitUseTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDataResourceType是一个数据来源类型 +///////////////////////////////////////////////////////////////////////// +///本系统 +#define THOST_FTDC_DAR_Settle '1' +///交易所 +#define THOST_FTDC_DAR_Exchange '2' +///报送数据 +#define THOST_FTDC_DAR_CSRC '3' + +typedef char TThostFtdcDataResourceType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMarginTypeType是一个保证金类型类型 +///////////////////////////////////////////////////////////////////////// +///交易所保证金率 +#define THOST_FTDC_MGT_ExchMarginRate '0' +///投资者保证金率 +#define THOST_FTDC_MGT_InstrMarginRate '1' +///投资者交易保证金率 +#define THOST_FTDC_MGT_InstrMarginRateTrade '2' + +typedef char TThostFtdcMarginTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcActiveTypeType是一个生效类型类型 +///////////////////////////////////////////////////////////////////////// +///仅当日生效 +#define THOST_FTDC_ACT_Intraday '1' +///长期生效 +#define THOST_FTDC_ACT_Long '2' + +typedef char TThostFtdcActiveTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMarginRateTypeType是一个冲突保证金率类型类型 +///////////////////////////////////////////////////////////////////////// +///交易所保证金率 +#define THOST_FTDC_MRT_Exchange '1' +///投资者保证金率 +#define THOST_FTDC_MRT_Investor '2' +///投资者交易保证金率 +#define THOST_FTDC_MRT_InvestorTrade '3' + +typedef char TThostFtdcMarginRateTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBackUpStatusType是一个备份数据状态类型 +///////////////////////////////////////////////////////////////////////// +///未生成备份数据 +#define THOST_FTDC_BUS_UnBak '0' +///备份数据生成中 +#define THOST_FTDC_BUS_BakUp '1' +///已生成备份数据 +#define THOST_FTDC_BUS_BakUped '2' +///备份数据失败 +#define THOST_FTDC_BUS_BakFail '3' + +typedef char TThostFtdcBackUpStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInitSettlementType是一个结算初始化状态类型 +///////////////////////////////////////////////////////////////////////// +///结算初始化未开始 +#define THOST_FTDC_SIS_UnInitialize '0' +///结算初始化中 +#define THOST_FTDC_SIS_Initialize '1' +///结算初始化完成 +#define THOST_FTDC_SIS_Initialized '2' + +typedef char TThostFtdcInitSettlementType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReportStatusType是一个报表数据生成状态类型 +///////////////////////////////////////////////////////////////////////// +///未生成报表数据 +#define THOST_FTDC_SRS_NoCreate '0' +///报表数据生成中 +#define THOST_FTDC_SRS_Create '1' +///已生成报表数据 +#define THOST_FTDC_SRS_Created '2' +///生成报表数据失败 +#define THOST_FTDC_SRS_CreateFail '3' + +typedef char TThostFtdcReportStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSaveStatusType是一个数据归档状态类型 +///////////////////////////////////////////////////////////////////////// +///归档未完成 +#define THOST_FTDC_SSS_UnSaveData '0' +///归档完成 +#define THOST_FTDC_SSS_SaveDatad '1' + +typedef char TThostFtdcSaveStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettArchiveStatusType是一个结算确认数据归档状态类型 +///////////////////////////////////////////////////////////////////////// +///未归档数据 +#define THOST_FTDC_SAS_UnArchived '0' +///数据归档中 +#define THOST_FTDC_SAS_Archiving '1' +///已归档数据 +#define THOST_FTDC_SAS_Archived '2' +///归档数据失败 +#define THOST_FTDC_SAS_ArchiveFail '3' + +typedef char TThostFtdcSettArchiveStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCTPTypeType是一个CTP交易系统类型类型 +///////////////////////////////////////////////////////////////////////// +///未知类型 +#define THOST_FTDC_CTPT_Unkown '0' +///主中心 +#define THOST_FTDC_CTPT_MainCenter '1' +///备中心 +#define THOST_FTDC_CTPT_BackUp '2' + +typedef char TThostFtdcCTPTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcToolIDType是一个工具代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcToolIDType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcToolNameType是一个工具名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcToolNameType[81]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCloseDealTypeType是一个平仓处理类型类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_CDT_Normal '0' +///投机平仓优先 +#define THOST_FTDC_CDT_SpecFirst '1' + +typedef char TThostFtdcCloseDealTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMortgageFundUseRangeType是一个货币质押资金可用范围类型 +///////////////////////////////////////////////////////////////////////// +///不能使用 +#define THOST_FTDC_MFUR_None '0' +///用于保证金 +#define THOST_FTDC_MFUR_Margin '1' +///用于手续费、盈亏、保证金 +#define THOST_FTDC_MFUR_All '2' + +typedef char TThostFtdcMortgageFundUseRangeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCurrencyUnitType是一个币种单位数量类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcCurrencyUnitType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangeRateType是一个汇率类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcExchangeRateType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSpecProductTypeType是一个特殊产品类型类型 +///////////////////////////////////////////////////////////////////////// +///郑商所套保产品 +#define THOST_FTDC_SPT_CzceHedge '1' +///货币质押产品 +#define THOST_FTDC_SPT_IneForeignCurrency '2' +///大连短线开平仓产品 +#define THOST_FTDC_SPT_DceOpenClose '3' + +typedef char TThostFtdcSpecProductTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundMortgageTypeType是一个货币质押类型类型 +///////////////////////////////////////////////////////////////////////// +///质押 +#define THOST_FTDC_FMT_Mortgage '1' +///解质 +#define THOST_FTDC_FMT_Redemption '2' + +typedef char TThostFtdcFundMortgageTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAccountSettlementParamIDType是一个投资者账户结算参数代码类型 +///////////////////////////////////////////////////////////////////////// +///基础保证金 +#define THOST_FTDC_ASPI_BaseMargin '1' +///最低权益标准 +#define THOST_FTDC_ASPI_LowestInterest '2' + +typedef char TThostFtdcAccountSettlementParamIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCurrencyNameType是一个币种名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCurrencyNameType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCurrencySignType是一个币种符号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCurrencySignType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundMortDirectionType是一个货币质押方向类型 +///////////////////////////////////////////////////////////////////////// +///货币质入 +#define THOST_FTDC_FMD_In '1' +///货币质出 +#define THOST_FTDC_FMD_Out '2' + +typedef char TThostFtdcFundMortDirectionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBusinessClassType是一个换汇类别类型 +///////////////////////////////////////////////////////////////////////// +///盈利 +#define THOST_FTDC_BT_Profit '0' +///亏损 +#define THOST_FTDC_BT_Loss '1' +///其他 +#define THOST_FTDC_BT_Other 'Z' + +typedef char TThostFtdcBusinessClassType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSwapSourceTypeType是一个换汇数据来源类型 +///////////////////////////////////////////////////////////////////////// +///手工 +#define THOST_FTDC_SST_Manual '0' +///自动生成 +#define THOST_FTDC_SST_Automatic '1' + +typedef char TThostFtdcSwapSourceTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCurrExDirectionType是一个换汇类型类型 +///////////////////////////////////////////////////////////////////////// +///结汇 +#define THOST_FTDC_CED_Settlement '0' +///售汇 +#define THOST_FTDC_CED_Sale '1' + +typedef char TThostFtdcCurrExDirectionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCurrencySwapStatusType是一个申请状态类型 +///////////////////////////////////////////////////////////////////////// +///已录入 +#define THOST_FTDC_CSS_Entry '1' +///已审核 +#define THOST_FTDC_CSS_Approve '2' +///已拒绝 +#define THOST_FTDC_CSS_Refuse '3' +///已撤销 +#define THOST_FTDC_CSS_Revoke '4' +///已发送 +#define THOST_FTDC_CSS_Send '5' +///换汇成功 +#define THOST_FTDC_CSS_Success '6' +///换汇失败 +#define THOST_FTDC_CSS_Failure '7' + +typedef char TThostFtdcCurrencySwapStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCurrExchCertNoType是一个凭证号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCurrExchCertNoType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBatchSerialNoType是一个批次号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBatchSerialNoType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReqFlagType是一个换汇发送标志类型 +///////////////////////////////////////////////////////////////////////// +///未发送 +#define THOST_FTDC_REQF_NoSend '0' +///发送成功 +#define THOST_FTDC_REQF_SendSuccess '1' +///发送失败 +#define THOST_FTDC_REQF_SendFailed '2' +///等待重发 +#define THOST_FTDC_REQF_WaitReSend '3' + +typedef char TThostFtdcReqFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcResFlagType是一个换汇返回成功标志类型 +///////////////////////////////////////////////////////////////////////// +///成功 +#define THOST_FTDC_RESF_Success '0' +///账户余额不足 +#define THOST_FTDC_RESF_InsuffiCient '1' +///交易结果未知 +#define THOST_FTDC_RESF_UnKnown '8' + +typedef char TThostFtdcResFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPageControlType是一个换汇页面控制类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPageControlType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRecordCountType是一个记录数类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcRecordCountType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCurrencySwapMemoType是一个换汇需确认信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCurrencySwapMemoType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExStatusType是一个修改状态类型 +///////////////////////////////////////////////////////////////////////// +///修改前 +#define THOST_FTDC_EXS_Before '0' +///修改后 +#define THOST_FTDC_EXS_After '1' + +typedef char TThostFtdcExStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClientRegionType是一个开户客户地域类型 +///////////////////////////////////////////////////////////////////////// +///国内客户 +#define THOST_FTDC_CR_Domestic '1' +///港澳台客户 +#define THOST_FTDC_CR_GMT '2' +///国外客户 +#define THOST_FTDC_CR_Foreign '3' + +typedef char TThostFtdcClientRegionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcWorkPlaceType是一个工作单位类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcWorkPlaceType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBusinessPeriodType是一个经营期限类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBusinessPeriodType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcWebSiteType是一个网址类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcWebSiteType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOAIdCardTypeType是一个统一开户证件类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUOAIdCardTypeType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClientModeType是一个开户模式类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcClientModeType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestorFullNameType是一个投资者全称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInvestorFullNameType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOABrokerIDType是一个境外中介机构ID类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUOABrokerIDType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOAZipCodeType是一个邮政编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUOAZipCodeType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOAEMailType是一个电子邮箱类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUOAEMailType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOldCityType是一个城市类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOldCityType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCorporateIdentifiedCardNoType是一个法人代表证件号码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCorporateIdentifiedCardNoType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcHasBoardType是一个是否有董事会类型 +///////////////////////////////////////////////////////////////////////// +///没有 +#define THOST_FTDC_HB_No '0' +///有 +#define THOST_FTDC_HB_Yes '1' + +typedef char TThostFtdcHasBoardType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcStartModeType是一个启动模式类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_SM_Normal '1' +///应急 +#define THOST_FTDC_SM_Emerge '2' +///恢复 +#define THOST_FTDC_SM_Restore '3' + +typedef char TThostFtdcStartModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTemplateTypeType是一个模型类型类型 +///////////////////////////////////////////////////////////////////////// +///全量 +#define THOST_FTDC_TPT_Full '1' +///增量 +#define THOST_FTDC_TPT_Increment '2' +///备份 +#define THOST_FTDC_TPT_BackUp '3' + +typedef char TThostFtdcTemplateTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLoginModeType是一个登录模式类型 +///////////////////////////////////////////////////////////////////////// +///交易 +#define THOST_FTDC_LM_Trade '0' +///转账 +#define THOST_FTDC_LM_Transfer '1' + +typedef char TThostFtdcLoginModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPromptTypeType是一个日历提示类型类型 +///////////////////////////////////////////////////////////////////////// +///合约上下市 +#define THOST_FTDC_CPT_Instrument '1' +///保证金分段生效 +#define THOST_FTDC_CPT_Margin '2' + +typedef char TThostFtdcPromptTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLedgerManageIDType是一个分户管理资产编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcLedgerManageIDType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestVarietyType是一个投资品种类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInvestVarietyType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankAccountTypeType是一个账户类别类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankAccountTypeType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLedgerManageBankType是一个开户银行类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcLedgerManageBankType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCffexDepartmentNameType是一个开户营业部类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCffexDepartmentNameType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCffexDepartmentCodeType是一个营业部代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCffexDepartmentCodeType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcHasTrusteeType是一个是否有托管人类型 +///////////////////////////////////////////////////////////////////////// +///有 +#define THOST_FTDC_HT_Yes '1' +///没有 +#define THOST_FTDC_HT_No '0' + +typedef char TThostFtdcHasTrusteeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCMemo1Type是一个说明类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCMemo1Type[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAssetmgrCFullNameType是一个代理资产管理业务的期货公司全称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAssetmgrCFullNameType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAssetmgrApprovalNOType是一个资产管理业务批文号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAssetmgrApprovalNOType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAssetmgrMgrNameType是一个资产管理业务负责人姓名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAssetmgrMgrNameType[401]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAmTypeType是一个机构类型类型 +///////////////////////////////////////////////////////////////////////// +///银行 +#define THOST_FTDC_AMT_Bank '1' +///证券公司 +#define THOST_FTDC_AMT_Securities '2' +///基金公司 +#define THOST_FTDC_AMT_Fund '3' +///保险公司 +#define THOST_FTDC_AMT_Insurance '4' +///信托公司 +#define THOST_FTDC_AMT_Trust '5' +///其他 +#define THOST_FTDC_AMT_Other '9' + +typedef char TThostFtdcAmTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCAmTypeType是一个机构类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCAmTypeType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCFundIOTypeType是一个出入金类型类型 +///////////////////////////////////////////////////////////////////////// +///出入金 +#define THOST_FTDC_CFIOT_FundIO '0' +///银期换汇 +#define THOST_FTDC_CFIOT_SwapCurrency '1' + +typedef char TThostFtdcCSRCFundIOTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCusAccountTypeType是一个结算账户类型类型 +///////////////////////////////////////////////////////////////////////// +///期货结算账户 +#define THOST_FTDC_CAT_Futures '1' +///纯期货资管业务下的资管结算账户 +#define THOST_FTDC_CAT_AssetmgrFuture '2' +///综合类资管业务下的期货资管托管账户 +#define THOST_FTDC_CAT_AssetmgrTrustee '3' +///综合类资管业务下的资金中转账户 +#define THOST_FTDC_CAT_AssetmgrTransfer '4' + +typedef char TThostFtdcCusAccountTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCNationalType是一个国籍类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCNationalType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCSecAgentIDType是一个二级代理ID类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCSecAgentIDType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLanguageTypeType是一个通知语言类型类型 +///////////////////////////////////////////////////////////////////////// +///中文 +#define THOST_FTDC_LT_Chinese '1' +///英文 +#define THOST_FTDC_LT_English '2' + +typedef char TThostFtdcLanguageTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAmAccountType是一个投资账户类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAmAccountType[23]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAssetmgrClientTypeType是一个资产管理客户类型类型 +///////////////////////////////////////////////////////////////////////// +///个人资管客户 +#define THOST_FTDC_AMCT_Person '1' +///单位资管客户 +#define THOST_FTDC_AMCT_Organ '2' +///特殊单位资管客户 +#define THOST_FTDC_AMCT_SpecialOrgan '4' + +typedef char TThostFtdcAssetmgrClientTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAssetmgrTypeType是一个投资类型类型 +///////////////////////////////////////////////////////////////////////// +///期货类 +#define THOST_FTDC_ASST_Futures '3' +///综合类 +#define THOST_FTDC_ASST_SpecialOrgan '4' + +typedef char TThostFtdcAssetmgrTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOMType是一个计量单位类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUOMType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSHFEInstLifePhaseType是一个上期所合约生命周期状态类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSHFEInstLifePhaseType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSHFEProductClassType是一个产品类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSHFEProductClassType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPriceDecimalType是一个价格小数位类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPriceDecimalType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInTheMoneyFlagType是一个平值期权标志类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInTheMoneyFlagType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCheckInstrTypeType是一个合约比较类型类型 +///////////////////////////////////////////////////////////////////////// +///合约交易所不存在 +#define THOST_FTDC_CIT_HasExch '0' +///合约本系统不存在 +#define THOST_FTDC_CIT_HasATP '1' +///合约比较不一致 +#define THOST_FTDC_CIT_HasDiff '2' + +typedef char TThostFtdcCheckInstrTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDeliveryTypeType是一个交割类型类型 +///////////////////////////////////////////////////////////////////////// +///手工交割 +#define THOST_FTDC_DT_HandDeliv '1' +///到期交割 +#define THOST_FTDC_DT_PersonDeliv '2' + +typedef char TThostFtdcDeliveryTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBigMoneyType是一个资金类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcBigMoneyType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMaxMarginSideAlgorithmType是一个大额单边保证金算法类型 +///////////////////////////////////////////////////////////////////////// +///不使用大额单边保证金算法 +#define THOST_FTDC_MMSA_NO '0' +///使用大额单边保证金算法 +#define THOST_FTDC_MMSA_YES '1' + +typedef char TThostFtdcMaxMarginSideAlgorithmType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDAClientTypeType是一个资产管理客户类型类型 +///////////////////////////////////////////////////////////////////////// +///自然人 +#define THOST_FTDC_CACT_Person '0' +///法人 +#define THOST_FTDC_CACT_Company '1' +///其他 +#define THOST_FTDC_CACT_Other '2' + +typedef char TThostFtdcDAClientTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCombinInstrIDType是一个套利合约代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCombinInstrIDType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCombinSettlePriceType是一个各腿结算价类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCombinSettlePriceType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDCEPriorityType是一个优先级类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcDCEPriorityType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeGroupIDType是一个成交组号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcTradeGroupIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIsCheckPrepaType是一个是否校验开户可用资金类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcIsCheckPrepaType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOAAssetmgrTypeType是一个投资类型类型 +///////////////////////////////////////////////////////////////////////// +///期货类 +#define THOST_FTDC_UOAAT_Futures '1' +///综合类 +#define THOST_FTDC_UOAAT_SpecialOrgan '2' + +typedef char TThostFtdcUOAAssetmgrTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDirectionEnType是一个买卖方向类型 +///////////////////////////////////////////////////////////////////////// +///Buy +#define THOST_FTDC_DEN_Buy '0' +///Sell +#define THOST_FTDC_DEN_Sell '1' + +typedef char TThostFtdcDirectionEnType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOffsetFlagEnType是一个开平标志类型 +///////////////////////////////////////////////////////////////////////// +///Position Opening +#define THOST_FTDC_OFEN_Open '0' +///Position Close +#define THOST_FTDC_OFEN_Close '1' +///Forced Liquidation +#define THOST_FTDC_OFEN_ForceClose '2' +///Close Today +#define THOST_FTDC_OFEN_CloseToday '3' +///Close Prev. +#define THOST_FTDC_OFEN_CloseYesterday '4' +///Forced Reduction +#define THOST_FTDC_OFEN_ForceOff '5' +///Local Forced Liquidation +#define THOST_FTDC_OFEN_LocalForceClose '6' + +typedef char TThostFtdcOffsetFlagEnType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcHedgeFlagEnType是一个投机套保标志类型 +///////////////////////////////////////////////////////////////////////// +///Speculation +#define THOST_FTDC_HFEN_Speculation '1' +///Arbitrage +#define THOST_FTDC_HFEN_Arbitrage '2' +///Hedge +#define THOST_FTDC_HFEN_Hedge '3' + +typedef char TThostFtdcHedgeFlagEnType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundIOTypeEnType是一个出入金类型类型 +///////////////////////////////////////////////////////////////////////// +///Deposit/Withdrawal +#define THOST_FTDC_FIOTEN_FundIO '1' +///Bank-Futures Transfer +#define THOST_FTDC_FIOTEN_Transfer '2' +///Bank-Futures FX Exchange +#define THOST_FTDC_FIOTEN_SwapCurrency '3' + +typedef char TThostFtdcFundIOTypeEnType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundTypeEnType是一个资金类型类型 +///////////////////////////////////////////////////////////////////////// +///Bank Deposit +#define THOST_FTDC_FTEN_Deposite '1' +///Payment/Fee +#define THOST_FTDC_FTEN_ItemFund '2' +///Brokerage Adj +#define THOST_FTDC_FTEN_Company '3' +///Internal Transfer +#define THOST_FTDC_FTEN_InnerTransfer '4' + +typedef char TThostFtdcFundTypeEnType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundDirectionEnType是一个出入金方向类型 +///////////////////////////////////////////////////////////////////////// +///Deposit +#define THOST_FTDC_FDEN_In '1' +///Withdrawal +#define THOST_FTDC_FDEN_Out '2' + +typedef char TThostFtdcFundDirectionEnType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundMortDirectionEnType是一个货币质押方向类型 +///////////////////////////////////////////////////////////////////////// +///Pledge +#define THOST_FTDC_FMDEN_In '1' +///Redemption +#define THOST_FTDC_FMDEN_Out '2' + +typedef char TThostFtdcFundMortDirectionEnType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSwapBusinessTypeType是一个换汇业务种类类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSwapBusinessTypeType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOptionsTypeType是一个期权类型类型 +///////////////////////////////////////////////////////////////////////// +///看涨 +#define THOST_FTDC_CP_CallOptions '1' +///看跌 +#define THOST_FTDC_CP_PutOptions '2' + +typedef char TThostFtdcOptionsTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcStrikeModeType是一个执行方式类型 +///////////////////////////////////////////////////////////////////////// +///欧式 +#define THOST_FTDC_STM_Continental '0' +///美式 +#define THOST_FTDC_STM_American '1' +///百慕大 +#define THOST_FTDC_STM_Bermuda '2' + +typedef char TThostFtdcStrikeModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcStrikeTypeType是一个执行类型类型 +///////////////////////////////////////////////////////////////////////// +///自身对冲 +#define THOST_FTDC_STT_Hedge '0' +///匹配执行 +#define THOST_FTDC_STT_Match '1' + +typedef char TThostFtdcStrikeTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcApplyTypeType是一个中金所期权放弃执行申请类型类型 +///////////////////////////////////////////////////////////////////////// +///不执行数量 +#define THOST_FTDC_APPT_NotStrikeNum '4' + +typedef char TThostFtdcApplyTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcGiveUpDataSourceType是一个放弃执行申请数据来源类型 +///////////////////////////////////////////////////////////////////////// +///系统生成 +#define THOST_FTDC_GUDS_Gen '0' +///手工添加 +#define THOST_FTDC_GUDS_Hand '1' + +typedef char TThostFtdcGiveUpDataSourceType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExecOrderSysIDType是一个执行宣告系统编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcExecOrderSysIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExecResultType是一个执行结果类型 +///////////////////////////////////////////////////////////////////////// +///没有执行 +#define THOST_FTDC_OER_NoExec 'n' +///已经取消 +#define THOST_FTDC_OER_Canceled 'c' +///执行成功 +#define THOST_FTDC_OER_OK '0' +///期权持仓不够 +#define THOST_FTDC_OER_NoPosition '1' +///资金不够 +#define THOST_FTDC_OER_NoDeposit '2' +///会员不存在 +#define THOST_FTDC_OER_NoParticipant '3' +///客户不存在 +#define THOST_FTDC_OER_NoClient '4' +///合约不存在 +#define THOST_FTDC_OER_NoInstrument '6' +///没有执行权限 +#define THOST_FTDC_OER_NoRight '7' +///不合理的数量 +#define THOST_FTDC_OER_InvalidVolume '8' +///没有足够的历史成交 +#define THOST_FTDC_OER_NoEnoughHistoryTrade '9' +///未知 +#define THOST_FTDC_OER_Unknown 'a' + +typedef char TThostFtdcExecResultType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcStrikeSequenceType是一个执行序号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcStrikeSequenceType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcStrikeTimeType是一个执行时间类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcStrikeTimeType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCombinationTypeType是一个组合类型类型 +///////////////////////////////////////////////////////////////////////// +///期货组合 +#define THOST_FTDC_COMBT_Future '0' +///垂直价差BUL +#define THOST_FTDC_COMBT_BUL '1' +///垂直价差BER +#define THOST_FTDC_COMBT_BER '2' +///跨式组合 +#define THOST_FTDC_COMBT_STD '3' +///宽跨式组合 +#define THOST_FTDC_COMBT_STG '4' +///备兑组合 +#define THOST_FTDC_COMBT_PRT '5' + +typedef char TThostFtdcCombinationTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOptionRoyaltyPriceTypeType是一个期权权利金价格类型类型 +///////////////////////////////////////////////////////////////////////// +///昨结算价 +#define THOST_FTDC_ORPT_PreSettlementPrice '1' +///开仓价 +#define THOST_FTDC_ORPT_OpenPrice '4' + +typedef char TThostFtdcOptionRoyaltyPriceTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBalanceAlgorithmType是一个权益算法类型 +///////////////////////////////////////////////////////////////////////// +///不计算期权市值盈亏 +#define THOST_FTDC_BLAG_Default '1' +///计算期权市值亏损 +#define THOST_FTDC_BLAG_IncludeOptValLost '2' + +typedef char TThostFtdcBalanceAlgorithmType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcActionTypeType是一个执行类型类型 +///////////////////////////////////////////////////////////////////////// +///执行 +#define THOST_FTDC_ACTP_Exec '1' +///放弃 +#define THOST_FTDC_ACTP_Abandon '2' + +typedef char TThostFtdcActionTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcForQuoteStatusType是一个询价状态类型 +///////////////////////////////////////////////////////////////////////// +///已经提交 +#define THOST_FTDC_FQST_Submitted 'a' +///已经接受 +#define THOST_FTDC_FQST_Accepted 'b' +///已经被拒绝 +#define THOST_FTDC_FQST_Rejected 'c' + +typedef char TThostFtdcForQuoteStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcQuotStatusType是一个报价状态类型 +///////////////////////////////////////////////////////////////////////// +///未知 +#define THOST_FTDC_QTST_Unknown 'a' +///已经接受 +#define THOST_FTDC_QTST_Accepted 'b' +///已经撤销 +#define THOST_FTDC_QTST_Canceled 'c' + +typedef char TThostFtdcQuotStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcValueMethodType是一个取值方式类型 +///////////////////////////////////////////////////////////////////////// +///按绝对值 +#define THOST_FTDC_VM_Absolute '0' +///按比率 +#define THOST_FTDC_VM_Ratio '1' + +typedef char TThostFtdcValueMethodType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExecOrderPositionFlagType是一个期权行权后是否保留期货头寸的标记类型 +///////////////////////////////////////////////////////////////////////// +///保留 +#define THOST_FTDC_EOPF_Reserve '0' +///不保留 +#define THOST_FTDC_EOPF_UnReserve '1' + +typedef char TThostFtdcExecOrderPositionFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExecOrderCloseFlagType是一个期权行权后生成的头寸是否自动平仓类型 +///////////////////////////////////////////////////////////////////////// +///自动平仓 +#define THOST_FTDC_EOCF_AutoClose '0' +///免于自动平仓 +#define THOST_FTDC_EOCF_NotToClose '1' + +typedef char TThostFtdcExecOrderCloseFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProductTypeType是一个产品类型类型 +///////////////////////////////////////////////////////////////////////// +///期货 +#define THOST_FTDC_PTE_Futures '1' +///期权 +#define THOST_FTDC_PTE_Options '2' + +typedef char TThostFtdcProductTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCZCEUploadFileNameType是一个郑商所结算文件名类型 +///////////////////////////////////////////////////////////////////////// +///^\d{8}_zz_\d{4} +#define THOST_FTDC_CUFN_CUFN_O 'O' +///^\d{8}成交表 +#define THOST_FTDC_CUFN_CUFN_T 'T' +///^\d{8}单腿持仓表new +#define THOST_FTDC_CUFN_CUFN_P 'P' +///^\d{8}非平仓了结表 +#define THOST_FTDC_CUFN_CUFN_N 'N' +///^\d{8}平仓表 +#define THOST_FTDC_CUFN_CUFN_L 'L' +///^\d{8}资金表 +#define THOST_FTDC_CUFN_CUFN_F 'F' +///^\d{8}组合持仓表 +#define THOST_FTDC_CUFN_CUFN_C 'C' +///^\d{8}保证金参数表 +#define THOST_FTDC_CUFN_CUFN_M 'M' + +typedef char TThostFtdcCZCEUploadFileNameType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDCEUploadFileNameType是一个大商所结算文件名类型 +///////////////////////////////////////////////////////////////////////// +///^\d{8}_dl_\d{3} +#define THOST_FTDC_DUFN_DUFN_O 'O' +///^\d{8}_成交表 +#define THOST_FTDC_DUFN_DUFN_T 'T' +///^\d{8}_持仓表 +#define THOST_FTDC_DUFN_DUFN_P 'P' +///^\d{8}_资金结算表 +#define THOST_FTDC_DUFN_DUFN_F 'F' +///^\d{8}_优惠组合持仓明细表 +#define THOST_FTDC_DUFN_DUFN_C 'C' +///^\d{8}_持仓明细表 +#define THOST_FTDC_DUFN_DUFN_D 'D' +///^\d{8}_保证金参数表 +#define THOST_FTDC_DUFN_DUFN_M 'M' +///^\d{8}_期权执行表 +#define THOST_FTDC_DUFN_DUFN_S 'S' + +typedef char TThostFtdcDCEUploadFileNameType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSHFEUploadFileNameType是一个上期所结算文件名类型 +///////////////////////////////////////////////////////////////////////// +///^\d{4}_\d{8}_\d{8}_DailyFundChg +#define THOST_FTDC_SUFN_SUFN_O 'O' +///^\d{4}_\d{8}_\d{8}_Trade +#define THOST_FTDC_SUFN_SUFN_T 'T' +///^\d{4}_\d{8}_\d{8}_SettlementDetail +#define THOST_FTDC_SUFN_SUFN_P 'P' +///^\d{4}_\d{8}_\d{8}_Capital +#define THOST_FTDC_SUFN_SUFN_F 'F' + +typedef char TThostFtdcSHFEUploadFileNameType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCFFEXUploadFileNameType是一个中金所结算文件名类型 +///////////////////////////////////////////////////////////////////////// +///^\d{4}_SG\d{1}_\d{8}_\d{1}_Trade +#define THOST_FTDC_CFUFN_SUFN_T 'T' +///^\d{4}_SG\d{1}_\d{8}_\d{1}_SettlementDetail +#define THOST_FTDC_CFUFN_SUFN_P 'P' +///^\d{4}_SG\d{1}_\d{8}_\d{1}_Capital +#define THOST_FTDC_CFUFN_SUFN_F 'F' +///^\d{4}_SG\d{1}_\d{8}_\d{1}_OptionExec +#define THOST_FTDC_CFUFN_SUFN_S 'S' + +typedef char TThostFtdcCFFEXUploadFileNameType; + +#endif diff --git a/vn.ctp/ctpapi/ThostFtdcUserApiStruct.h b/vn.ctp/ctpapi/ThostFtdcUserApiStruct.h new file mode 100644 index 00000000..ada148c8 --- /dev/null +++ b/vn.ctp/ctpapi/ThostFtdcUserApiStruct.h @@ -0,0 +1,7430 @@ +///////////////////////////////////////////////////////////////////////// +///@system 新一代交易所系统 +///@company 上海期货信息技术有限公司 +///@file ThostFtdcUserApiStruct.h +///@brief 定义了客户端接口使用的业务数据结构 +///@history +///20060106 赵鸿昊 创建该文件 +///////////////////////////////////////////////////////////////////////// + +#if !defined(THOST_FTDCSTRUCT_H) +#define THOST_FTDCSTRUCT_H + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#include "ThostFtdcUserApiDataType.h" + +///信息分发 +struct CThostFtdcDisseminationField +{ + ///序列系列号 + TThostFtdcSequenceSeriesType SequenceSeries; + ///序列号 + TThostFtdcSequenceNoType SequenceNo; +}; + +///用户登录请求 +struct CThostFtdcReqUserLoginField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///密码 + TThostFtdcPasswordType Password; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; + ///接口端产品信息 + TThostFtdcProductInfoType InterfaceProductInfo; + ///协议信息 + TThostFtdcProtocolInfoType ProtocolInfo; + ///Mac地址 + TThostFtdcMacAddressType MacAddress; + ///动态密码 + TThostFtdcPasswordType OneTimePassword; + ///终端IP地址 + TThostFtdcIPAddressType ClientIPAddress; +}; + +///用户登录应答 +struct CThostFtdcRspUserLoginField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///登录成功时间 + TThostFtdcTimeType LoginTime; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///交易系统名称 + TThostFtdcSystemNameType SystemName; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///最大报单引用 + TThostFtdcOrderRefType MaxOrderRef; + ///上期所时间 + TThostFtdcTimeType SHFETime; + ///大商所时间 + TThostFtdcTimeType DCETime; + ///郑商所时间 + TThostFtdcTimeType CZCETime; + ///中金所时间 + TThostFtdcTimeType FFEXTime; + ///能源中心时间 + TThostFtdcTimeType INETime; +}; + +///用户登出请求 +struct CThostFtdcUserLogoutField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///强制交易员退出 +struct CThostFtdcForceUserLogoutField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///客户端认证请求 +struct CThostFtdcReqAuthenticateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; + ///认证码 + TThostFtdcAuthCodeType AuthCode; +}; + +///客户端认证响应 +struct CThostFtdcRspAuthenticateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; +}; + +///客户端认证信息 +struct CThostFtdcAuthenticationInfoField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; + ///认证信息 + TThostFtdcAuthInfoType AuthInfo; + ///是否为认证结果 + TThostFtdcBoolType IsResult; +}; + +///银期转帐报文头 +struct CThostFtdcTransferHeaderField +{ + ///版本号,常量,1.0 + TThostFtdcVersionType Version; + ///交易代码,必填 + TThostFtdcTradeCodeType TradeCode; + ///交易日期,必填,格式:yyyymmdd + TThostFtdcTradeDateType TradeDate; + ///交易时间,必填,格式:hhmmss + TThostFtdcTradeTimeType TradeTime; + ///发起方流水号,N/A + TThostFtdcTradeSerialType TradeSerial; + ///期货公司代码,必填 + TThostFtdcFutureIDType FutureID; + ///银行代码,根据查询银行得到,必填 + TThostFtdcBankIDType BankID; + ///银行分中心代码,根据查询银行得到,必填 + TThostFtdcBankBrchIDType BankBrchID; + ///操作员,N/A + TThostFtdcOperNoType OperNo; + ///交易设备类型,N/A + TThostFtdcDeviceIDType DeviceID; + ///记录数,N/A + TThostFtdcRecordNumType RecordNum; + ///会话编号,N/A + TThostFtdcSessionIDType SessionID; + ///请求编号,N/A + TThostFtdcRequestIDType RequestID; +}; + +///银行资金转期货请求,TradeCode=202001 +struct CThostFtdcTransferBankToFutureReqField +{ + ///期货资金账户 + TThostFtdcAccountIDType FutureAccount; + ///密码标志 + TThostFtdcFuturePwdFlagType FuturePwdFlag; + ///密码 + TThostFtdcFutureAccPwdType FutureAccPwd; + ///转账金额 + TThostFtdcMoneyType TradeAmt; + ///客户手续费 + TThostFtdcMoneyType CustFee; + ///币种:RMB-人民币 USD-美圆 HKD-港元 + TThostFtdcCurrencyCodeType CurrencyCode; +}; + +///银行资金转期货请求响应 +struct CThostFtdcTransferBankToFutureRspField +{ + ///响应代码 + TThostFtdcRetCodeType RetCode; + ///响应信息 + TThostFtdcRetInfoType RetInfo; + ///资金账户 + TThostFtdcAccountIDType FutureAccount; + ///转帐金额 + TThostFtdcMoneyType TradeAmt; + ///应收客户手续费 + TThostFtdcMoneyType CustFee; + ///币种 + TThostFtdcCurrencyCodeType CurrencyCode; +}; + +///期货资金转银行请求,TradeCode=202002 +struct CThostFtdcTransferFutureToBankReqField +{ + ///期货资金账户 + TThostFtdcAccountIDType FutureAccount; + ///密码标志 + TThostFtdcFuturePwdFlagType FuturePwdFlag; + ///密码 + TThostFtdcFutureAccPwdType FutureAccPwd; + ///转账金额 + TThostFtdcMoneyType TradeAmt; + ///客户手续费 + TThostFtdcMoneyType CustFee; + ///币种:RMB-人民币 USD-美圆 HKD-港元 + TThostFtdcCurrencyCodeType CurrencyCode; +}; + +///期货资金转银行请求响应 +struct CThostFtdcTransferFutureToBankRspField +{ + ///响应代码 + TThostFtdcRetCodeType RetCode; + ///响应信息 + TThostFtdcRetInfoType RetInfo; + ///资金账户 + TThostFtdcAccountIDType FutureAccount; + ///转帐金额 + TThostFtdcMoneyType TradeAmt; + ///应收客户手续费 + TThostFtdcMoneyType CustFee; + ///币种 + TThostFtdcCurrencyCodeType CurrencyCode; +}; + +///查询银行资金请求,TradeCode=204002 +struct CThostFtdcTransferQryBankReqField +{ + ///期货资金账户 + TThostFtdcAccountIDType FutureAccount; + ///密码标志 + TThostFtdcFuturePwdFlagType FuturePwdFlag; + ///密码 + TThostFtdcFutureAccPwdType FutureAccPwd; + ///币种:RMB-人民币 USD-美圆 HKD-港元 + TThostFtdcCurrencyCodeType CurrencyCode; +}; + +///查询银行资金请求响应 +struct CThostFtdcTransferQryBankRspField +{ + ///响应代码 + TThostFtdcRetCodeType RetCode; + ///响应信息 + TThostFtdcRetInfoType RetInfo; + ///资金账户 + TThostFtdcAccountIDType FutureAccount; + ///银行余额 + TThostFtdcMoneyType TradeAmt; + ///银行可用余额 + TThostFtdcMoneyType UseAmt; + ///银行可取余额 + TThostFtdcMoneyType FetchAmt; + ///币种 + TThostFtdcCurrencyCodeType CurrencyCode; +}; + +///查询银行交易明细请求,TradeCode=204999 +struct CThostFtdcTransferQryDetailReqField +{ + ///期货资金账户 + TThostFtdcAccountIDType FutureAccount; +}; + +///查询银行交易明细请求响应 +struct CThostFtdcTransferQryDetailRspField +{ + ///交易日期 + TThostFtdcDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///交易代码 + TThostFtdcTradeCodeType TradeCode; + ///期货流水号 + TThostFtdcTradeSerialNoType FutureSerial; + ///期货公司代码 + TThostFtdcFutureIDType FutureID; + ///资金帐号 + TThostFtdcFutureAccountType FutureAccount; + ///银行流水号 + TThostFtdcTradeSerialNoType BankSerial; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分中心代码 + TThostFtdcBankBrchIDType BankBrchID; + ///银行账号 + TThostFtdcBankAccountType BankAccount; + ///证件号码 + TThostFtdcCertCodeType CertCode; + ///货币代码 + TThostFtdcCurrencyCodeType CurrencyCode; + ///发生金额 + TThostFtdcMoneyType TxAmount; + ///有效标志 + TThostFtdcTransferValidFlagType Flag; +}; + +///响应信息 +struct CThostFtdcRspInfoField +{ + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///交易所 +struct CThostFtdcExchangeField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所名称 + TThostFtdcExchangeNameType ExchangeName; + ///交易所属性 + TThostFtdcExchangePropertyType ExchangeProperty; +}; + +///产品 +struct CThostFtdcProductField +{ + ///产品代码 + TThostFtdcInstrumentIDType ProductID; + ///产品名称 + TThostFtdcProductNameType ProductName; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///产品类型 + TThostFtdcProductClassType ProductClass; + ///合约数量乘数 + TThostFtdcVolumeMultipleType VolumeMultiple; + ///最小变动价位 + TThostFtdcPriceType PriceTick; + ///市价单最大下单量 + TThostFtdcVolumeType MaxMarketOrderVolume; + ///市价单最小下单量 + TThostFtdcVolumeType MinMarketOrderVolume; + ///限价单最大下单量 + TThostFtdcVolumeType MaxLimitOrderVolume; + ///限价单最小下单量 + TThostFtdcVolumeType MinLimitOrderVolume; + ///持仓类型 + TThostFtdcPositionTypeType PositionType; + ///持仓日期类型 + TThostFtdcPositionDateTypeType PositionDateType; + ///平仓处理类型 + TThostFtdcCloseDealTypeType CloseDealType; + ///交易币种类型 + TThostFtdcCurrencyIDType TradeCurrencyID; + ///质押资金可用范围 + TThostFtdcMortgageFundUseRangeType MortgageFundUseRange; + ///交易所产品代码 + TThostFtdcInstrumentIDType ExchangeProductID; + ///合约基础商品乘数 + TThostFtdcUnderlyingMultipleType UnderlyingMultiple; +}; + +///合约 +struct CThostFtdcInstrumentField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约名称 + TThostFtdcInstrumentNameType InstrumentName; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///产品代码 + TThostFtdcInstrumentIDType ProductID; + ///产品类型 + TThostFtdcProductClassType ProductClass; + ///交割年份 + TThostFtdcYearType DeliveryYear; + ///交割月 + TThostFtdcMonthType DeliveryMonth; + ///市价单最大下单量 + TThostFtdcVolumeType MaxMarketOrderVolume; + ///市价单最小下单量 + TThostFtdcVolumeType MinMarketOrderVolume; + ///限价单最大下单量 + TThostFtdcVolumeType MaxLimitOrderVolume; + ///限价单最小下单量 + TThostFtdcVolumeType MinLimitOrderVolume; + ///合约数量乘数 + TThostFtdcVolumeMultipleType VolumeMultiple; + ///最小变动价位 + TThostFtdcPriceType PriceTick; + ///创建日 + TThostFtdcDateType CreateDate; + ///上市日 + TThostFtdcDateType OpenDate; + ///到期日 + TThostFtdcDateType ExpireDate; + ///开始交割日 + TThostFtdcDateType StartDelivDate; + ///结束交割日 + TThostFtdcDateType EndDelivDate; + ///合约生命周期状态 + TThostFtdcInstLifePhaseType InstLifePhase; + ///当前是否交易 + TThostFtdcBoolType IsTrading; + ///持仓类型 + TThostFtdcPositionTypeType PositionType; + ///持仓日期类型 + TThostFtdcPositionDateTypeType PositionDateType; + ///多头保证金率 + TThostFtdcRatioType LongMarginRatio; + ///空头保证金率 + TThostFtdcRatioType ShortMarginRatio; + ///是否使用大额单边保证金算法 + TThostFtdcMaxMarginSideAlgorithmType MaxMarginSideAlgorithm; + ///基础商品代码 + TThostFtdcInstrumentIDType UnderlyingInstrID; + ///执行价 + TThostFtdcPriceType StrikePrice; + ///期权类型 + TThostFtdcOptionsTypeType OptionsType; + ///合约基础商品乘数 + TThostFtdcUnderlyingMultipleType UnderlyingMultiple; + ///组合类型 + TThostFtdcCombinationTypeType CombinationType; +}; + +///经纪公司 +struct CThostFtdcBrokerField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///经纪公司简称 + TThostFtdcBrokerAbbrType BrokerAbbr; + ///经纪公司名称 + TThostFtdcBrokerNameType BrokerName; + ///是否活跃 + TThostFtdcBoolType IsActive; +}; + +///交易所交易员 +struct CThostFtdcTraderField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///密码 + TThostFtdcPasswordType Password; + ///安装数量 + TThostFtdcInstallCountType InstallCount; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; +}; + +///投资者 +struct CThostFtdcInvestorField +{ + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者分组代码 + TThostFtdcInvestorIDType InvestorGroupID; + ///投资者名称 + TThostFtdcPartyNameType InvestorName; + ///证件类型 + TThostFtdcIdCardTypeType IdentifiedCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///是否活跃 + TThostFtdcBoolType IsActive; + ///联系电话 + TThostFtdcTelephoneType Telephone; + ///通讯地址 + TThostFtdcAddressType Address; + ///开户日期 + TThostFtdcDateType OpenDate; + ///手机 + TThostFtdcMobileType Mobile; + ///手续费率模板代码 + TThostFtdcInvestorIDType CommModelID; + ///保证金率模板代码 + TThostFtdcInvestorIDType MarginModelID; +}; + +///交易编码 +struct CThostFtdcTradingCodeField +{ + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///是否活跃 + TThostFtdcBoolType IsActive; + ///交易编码类型 + TThostFtdcClientIDTypeType ClientIDType; +}; + +///会员编码和经纪公司编码对照表 +struct CThostFtdcPartBrokerField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///是否活跃 + TThostFtdcBoolType IsActive; +}; + +///管理用户 +struct CThostFtdcSuperUserField +{ + ///用户代码 + TThostFtdcUserIDType UserID; + ///用户名称 + TThostFtdcUserNameType UserName; + ///密码 + TThostFtdcPasswordType Password; + ///是否活跃 + TThostFtdcBoolType IsActive; +}; + +///管理用户功能权限 +struct CThostFtdcSuperUserFunctionField +{ + ///用户代码 + TThostFtdcUserIDType UserID; + ///功能代码 + TThostFtdcFunctionCodeType FunctionCode; +}; + +///投资者组 +struct CThostFtdcInvestorGroupField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者分组代码 + TThostFtdcInvestorIDType InvestorGroupID; + ///投资者分组名称 + TThostFtdcInvestorGroupNameType InvestorGroupName; +}; + +///资金账户 +struct CThostFtdcTradingAccountField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///上次质押金额 + TThostFtdcMoneyType PreMortgage; + ///上次信用额度 + TThostFtdcMoneyType PreCredit; + ///上次存款额 + TThostFtdcMoneyType PreDeposit; + ///上次结算准备金 + TThostFtdcMoneyType PreBalance; + ///上次占用的保证金 + TThostFtdcMoneyType PreMargin; + ///利息基数 + TThostFtdcMoneyType InterestBase; + ///利息收入 + TThostFtdcMoneyType Interest; + ///入金金额 + TThostFtdcMoneyType Deposit; + ///出金金额 + TThostFtdcMoneyType Withdraw; + ///冻结的保证金 + TThostFtdcMoneyType FrozenMargin; + ///冻结的资金 + TThostFtdcMoneyType FrozenCash; + ///冻结的手续费 + TThostFtdcMoneyType FrozenCommission; + ///当前保证金总额 + TThostFtdcMoneyType CurrMargin; + ///资金差额 + TThostFtdcMoneyType CashIn; + ///手续费 + TThostFtdcMoneyType Commission; + ///平仓盈亏 + TThostFtdcMoneyType CloseProfit; + ///持仓盈亏 + TThostFtdcMoneyType PositionProfit; + ///期货结算准备金 + TThostFtdcMoneyType Balance; + ///可用资金 + TThostFtdcMoneyType Available; + ///可取资金 + TThostFtdcMoneyType WithdrawQuota; + ///基本准备金 + TThostFtdcMoneyType Reserve; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///信用额度 + TThostFtdcMoneyType Credit; + ///质押金额 + TThostFtdcMoneyType Mortgage; + ///交易所保证金 + TThostFtdcMoneyType ExchangeMargin; + ///投资者交割保证金 + TThostFtdcMoneyType DeliveryMargin; + ///交易所交割保证金 + TThostFtdcMoneyType ExchangeDeliveryMargin; + ///保底期货结算准备金 + TThostFtdcMoneyType ReserveBalance; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///上次货币质入金额 + TThostFtdcMoneyType PreFundMortgageIn; + ///上次货币质出金额 + TThostFtdcMoneyType PreFundMortgageOut; + ///货币质入金额 + TThostFtdcMoneyType FundMortgageIn; + ///货币质出金额 + TThostFtdcMoneyType FundMortgageOut; + ///货币质押余额 + TThostFtdcMoneyType FundMortgageAvailable; + ///可质押货币金额 + TThostFtdcMoneyType MortgageableFund; + ///特殊产品占用保证金 + TThostFtdcMoneyType SpecProductMargin; + ///特殊产品冻结保证金 + TThostFtdcMoneyType SpecProductFrozenMargin; + ///特殊产品手续费 + TThostFtdcMoneyType SpecProductCommission; + ///特殊产品冻结手续费 + TThostFtdcMoneyType SpecProductFrozenCommission; + ///特殊产品持仓盈亏 + TThostFtdcMoneyType SpecProductPositionProfit; + ///特殊产品平仓盈亏 + TThostFtdcMoneyType SpecProductCloseProfit; + ///根据持仓盈亏算法计算的特殊产品持仓盈亏 + TThostFtdcMoneyType SpecProductPositionProfitByAlg; + ///特殊产品交易所保证金 + TThostFtdcMoneyType SpecProductExchangeMargin; + ///期权平仓盈亏 + TThostFtdcMoneyType OptionCloseProfit; + ///期权市值 + TThostFtdcMoneyType OptionValue; +}; + +///投资者持仓 +struct CThostFtdcInvestorPositionField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///持仓多空方向 + TThostFtdcPosiDirectionType PosiDirection; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///持仓日期 + TThostFtdcPositionDateType PositionDate; + ///上日持仓 + TThostFtdcVolumeType YdPosition; + ///今日持仓 + TThostFtdcVolumeType Position; + ///多头冻结 + TThostFtdcVolumeType LongFrozen; + ///空头冻结 + TThostFtdcVolumeType ShortFrozen; + ///开仓冻结金额 + TThostFtdcMoneyType LongFrozenAmount; + ///开仓冻结金额 + TThostFtdcMoneyType ShortFrozenAmount; + ///开仓量 + TThostFtdcVolumeType OpenVolume; + ///平仓量 + TThostFtdcVolumeType CloseVolume; + ///开仓金额 + TThostFtdcMoneyType OpenAmount; + ///平仓金额 + TThostFtdcMoneyType CloseAmount; + ///持仓成本 + TThostFtdcMoneyType PositionCost; + ///上次占用的保证金 + TThostFtdcMoneyType PreMargin; + ///占用的保证金 + TThostFtdcMoneyType UseMargin; + ///冻结的保证金 + TThostFtdcMoneyType FrozenMargin; + ///冻结的资金 + TThostFtdcMoneyType FrozenCash; + ///冻结的手续费 + TThostFtdcMoneyType FrozenCommission; + ///资金差额 + TThostFtdcMoneyType CashIn; + ///手续费 + TThostFtdcMoneyType Commission; + ///平仓盈亏 + TThostFtdcMoneyType CloseProfit; + ///持仓盈亏 + TThostFtdcMoneyType PositionProfit; + ///上次结算价 + TThostFtdcPriceType PreSettlementPrice; + ///本次结算价 + TThostFtdcPriceType SettlementPrice; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///开仓成本 + TThostFtdcMoneyType OpenCost; + ///交易所保证金 + TThostFtdcMoneyType ExchangeMargin; + ///组合成交形成的持仓 + TThostFtdcVolumeType CombPosition; + ///组合多头冻结 + TThostFtdcVolumeType CombLongFrozen; + ///组合空头冻结 + TThostFtdcVolumeType CombShortFrozen; + ///逐日盯市平仓盈亏 + TThostFtdcMoneyType CloseProfitByDate; + ///逐笔对冲平仓盈亏 + TThostFtdcMoneyType CloseProfitByTrade; + ///今日持仓 + TThostFtdcVolumeType TodayPosition; + ///保证金率 + TThostFtdcRatioType MarginRateByMoney; + ///保证金率(按手数) + TThostFtdcRatioType MarginRateByVolume; + ///执行冻结 + TThostFtdcVolumeType StrikeFrozen; + ///执行冻结金额 + TThostFtdcMoneyType StrikeFrozenAmount; + ///放弃执行冻结 + TThostFtdcVolumeType AbandonFrozen; + ///期权市值 + TThostFtdcMoneyType OptionValue; +}; + +///合约保证金率 +struct CThostFtdcInstrumentMarginRateField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///多头保证金率 + TThostFtdcRatioType LongMarginRatioByMoney; + ///多头保证金费 + TThostFtdcMoneyType LongMarginRatioByVolume; + ///空头保证金率 + TThostFtdcRatioType ShortMarginRatioByMoney; + ///空头保证金费 + TThostFtdcMoneyType ShortMarginRatioByVolume; + ///是否相对交易所收取 + TThostFtdcBoolType IsRelative; +}; + +///合约手续费率 +struct CThostFtdcInstrumentCommissionRateField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///开仓手续费率 + TThostFtdcRatioType OpenRatioByMoney; + ///开仓手续费 + TThostFtdcRatioType OpenRatioByVolume; + ///平仓手续费率 + TThostFtdcRatioType CloseRatioByMoney; + ///平仓手续费 + TThostFtdcRatioType CloseRatioByVolume; + ///平今手续费率 + TThostFtdcRatioType CloseTodayRatioByMoney; + ///平今手续费 + TThostFtdcRatioType CloseTodayRatioByVolume; +}; + +///深度行情 +struct CThostFtdcDepthMarketDataField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///最新价 + TThostFtdcPriceType LastPrice; + ///上次结算价 + TThostFtdcPriceType PreSettlementPrice; + ///昨收盘 + TThostFtdcPriceType PreClosePrice; + ///昨持仓量 + TThostFtdcLargeVolumeType PreOpenInterest; + ///今开盘 + TThostFtdcPriceType OpenPrice; + ///最高价 + TThostFtdcPriceType HighestPrice; + ///最低价 + TThostFtdcPriceType LowestPrice; + ///数量 + TThostFtdcVolumeType Volume; + ///成交金额 + TThostFtdcMoneyType Turnover; + ///持仓量 + TThostFtdcLargeVolumeType OpenInterest; + ///今收盘 + TThostFtdcPriceType ClosePrice; + ///本次结算价 + TThostFtdcPriceType SettlementPrice; + ///涨停板价 + TThostFtdcPriceType UpperLimitPrice; + ///跌停板价 + TThostFtdcPriceType LowerLimitPrice; + ///昨虚实度 + TThostFtdcRatioType PreDelta; + ///今虚实度 + TThostFtdcRatioType CurrDelta; + ///最后修改时间 + TThostFtdcTimeType UpdateTime; + ///最后修改毫秒 + TThostFtdcMillisecType UpdateMillisec; + ///申买价一 + TThostFtdcPriceType BidPrice1; + ///申买量一 + TThostFtdcVolumeType BidVolume1; + ///申卖价一 + TThostFtdcPriceType AskPrice1; + ///申卖量一 + TThostFtdcVolumeType AskVolume1; + ///申买价二 + TThostFtdcPriceType BidPrice2; + ///申买量二 + TThostFtdcVolumeType BidVolume2; + ///申卖价二 + TThostFtdcPriceType AskPrice2; + ///申卖量二 + TThostFtdcVolumeType AskVolume2; + ///申买价三 + TThostFtdcPriceType BidPrice3; + ///申买量三 + TThostFtdcVolumeType BidVolume3; + ///申卖价三 + TThostFtdcPriceType AskPrice3; + ///申卖量三 + TThostFtdcVolumeType AskVolume3; + ///申买价四 + TThostFtdcPriceType BidPrice4; + ///申买量四 + TThostFtdcVolumeType BidVolume4; + ///申卖价四 + TThostFtdcPriceType AskPrice4; + ///申卖量四 + TThostFtdcVolumeType AskVolume4; + ///申买价五 + TThostFtdcPriceType BidPrice5; + ///申买量五 + TThostFtdcVolumeType BidVolume5; + ///申卖价五 + TThostFtdcPriceType AskPrice5; + ///申卖量五 + TThostFtdcVolumeType AskVolume5; + ///当日均价 + TThostFtdcPriceType AveragePrice; + ///业务日期 + TThostFtdcDateType ActionDay; +}; + +///投资者合约交易权限 +struct CThostFtdcInstrumentTradingRightField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易权限 + TThostFtdcTradingRightType TradingRight; +}; + +///经纪公司用户 +struct CThostFtdcBrokerUserField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///用户名称 + TThostFtdcUserNameType UserName; + ///用户类型 + TThostFtdcUserTypeType UserType; + ///是否活跃 + TThostFtdcBoolType IsActive; + ///是否使用令牌 + TThostFtdcBoolType IsUsingOTP; +}; + +///经纪公司用户口令 +struct CThostFtdcBrokerUserPasswordField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///密码 + TThostFtdcPasswordType Password; +}; + +///经纪公司用户功能权限 +struct CThostFtdcBrokerUserFunctionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///经纪公司功能代码 + TThostFtdcBrokerFunctionCodeType BrokerFunctionCode; +}; + +///交易所交易员报盘机 +struct CThostFtdcTraderOfferField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///交易所交易员连接状态 + TThostFtdcTraderConnectStatusType TraderConnectStatus; + ///发出连接请求的日期 + TThostFtdcDateType ConnectRequestDate; + ///发出连接请求的时间 + TThostFtdcTimeType ConnectRequestTime; + ///上次报告日期 + TThostFtdcDateType LastReportDate; + ///上次报告时间 + TThostFtdcTimeType LastReportTime; + ///完成连接日期 + TThostFtdcDateType ConnectDate; + ///完成连接时间 + TThostFtdcTimeType ConnectTime; + ///启动日期 + TThostFtdcDateType StartDate; + ///启动时间 + TThostFtdcTimeType StartTime; + ///交易日 + TThostFtdcDateType TradingDay; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///本席位最大成交编号 + TThostFtdcTradeIDType MaxTradeID; + ///本席位最大报单备拷 + TThostFtdcReturnCodeType MaxOrderMessageReference; +}; + +///投资者结算结果 +struct CThostFtdcSettlementInfoField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///序号 + TThostFtdcSequenceNoType SequenceNo; + ///消息正文 + TThostFtdcContentType Content; +}; + +///合约保证金率调整 +struct CThostFtdcInstrumentMarginRateAdjustField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///多头保证金率 + TThostFtdcRatioType LongMarginRatioByMoney; + ///多头保证金费 + TThostFtdcMoneyType LongMarginRatioByVolume; + ///空头保证金率 + TThostFtdcRatioType ShortMarginRatioByMoney; + ///空头保证金费 + TThostFtdcMoneyType ShortMarginRatioByVolume; + ///是否相对交易所收取 + TThostFtdcBoolType IsRelative; +}; + +///交易所保证金率 +struct CThostFtdcExchangeMarginRateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///多头保证金率 + TThostFtdcRatioType LongMarginRatioByMoney; + ///多头保证金费 + TThostFtdcMoneyType LongMarginRatioByVolume; + ///空头保证金率 + TThostFtdcRatioType ShortMarginRatioByMoney; + ///空头保证金费 + TThostFtdcMoneyType ShortMarginRatioByVolume; +}; + +///交易所保证金率调整 +struct CThostFtdcExchangeMarginRateAdjustField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///跟随交易所投资者多头保证金率 + TThostFtdcRatioType LongMarginRatioByMoney; + ///跟随交易所投资者多头保证金费 + TThostFtdcMoneyType LongMarginRatioByVolume; + ///跟随交易所投资者空头保证金率 + TThostFtdcRatioType ShortMarginRatioByMoney; + ///跟随交易所投资者空头保证金费 + TThostFtdcMoneyType ShortMarginRatioByVolume; + ///交易所多头保证金率 + TThostFtdcRatioType ExchLongMarginRatioByMoney; + ///交易所多头保证金费 + TThostFtdcMoneyType ExchLongMarginRatioByVolume; + ///交易所空头保证金率 + TThostFtdcRatioType ExchShortMarginRatioByMoney; + ///交易所空头保证金费 + TThostFtdcMoneyType ExchShortMarginRatioByVolume; + ///不跟随交易所投资者多头保证金率 + TThostFtdcRatioType NoLongMarginRatioByMoney; + ///不跟随交易所投资者多头保证金费 + TThostFtdcMoneyType NoLongMarginRatioByVolume; + ///不跟随交易所投资者空头保证金率 + TThostFtdcRatioType NoShortMarginRatioByMoney; + ///不跟随交易所投资者空头保证金费 + TThostFtdcMoneyType NoShortMarginRatioByVolume; +}; + +///汇率 +struct CThostFtdcExchangeRateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///源币种 + TThostFtdcCurrencyIDType FromCurrencyID; + ///源币种单位数量 + TThostFtdcCurrencyUnitType FromCurrencyUnit; + ///目标币种 + TThostFtdcCurrencyIDType ToCurrencyID; + ///汇率 + TThostFtdcExchangeRateType ExchangeRate; +}; + +///结算引用 +struct CThostFtdcSettlementRefField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; +}; + +///当前时间 +struct CThostFtdcCurrentTimeField +{ + ///当前日期 + TThostFtdcDateType CurrDate; + ///当前时间 + TThostFtdcTimeType CurrTime; + ///当前时间(毫秒) + TThostFtdcMillisecType CurrMillisec; + ///业务日期 + TThostFtdcDateType ActionDay; +}; + +///通讯阶段 +struct CThostFtdcCommPhaseField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///通讯时段编号 + TThostFtdcCommPhaseNoType CommPhaseNo; + ///系统编号 + TThostFtdcSystemIDType SystemID; +}; + +///登录信息 +struct CThostFtdcLoginInfoField +{ + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///登录日期 + TThostFtdcDateType LoginDate; + ///登录时间 + TThostFtdcTimeType LoginTime; + ///IP地址 + TThostFtdcIPAddressType IPAddress; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; + ///接口端产品信息 + TThostFtdcProductInfoType InterfaceProductInfo; + ///协议信息 + TThostFtdcProtocolInfoType ProtocolInfo; + ///系统名称 + TThostFtdcSystemNameType SystemName; + ///密码 + TThostFtdcPasswordType Password; + ///最大报单引用 + TThostFtdcOrderRefType MaxOrderRef; + ///上期所时间 + TThostFtdcTimeType SHFETime; + ///大商所时间 + TThostFtdcTimeType DCETime; + ///郑商所时间 + TThostFtdcTimeType CZCETime; + ///中金所时间 + TThostFtdcTimeType FFEXTime; + ///Mac地址 + TThostFtdcMacAddressType MacAddress; + ///动态密码 + TThostFtdcPasswordType OneTimePassword; + ///能源中心时间 + TThostFtdcTimeType INETime; +}; + +///登录信息 +struct CThostFtdcLogoutAllField +{ + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///系统名称 + TThostFtdcSystemNameType SystemName; +}; + +///前置状态 +struct CThostFtdcFrontStatusField +{ + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///上次报告日期 + TThostFtdcDateType LastReportDate; + ///上次报告时间 + TThostFtdcTimeType LastReportTime; + ///是否活跃 + TThostFtdcBoolType IsActive; +}; + +///用户口令变更 +struct CThostFtdcUserPasswordUpdateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///原来的口令 + TThostFtdcPasswordType OldPassword; + ///新的口令 + TThostFtdcPasswordType NewPassword; +}; + +///输入报单 +struct CThostFtdcInputOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///报单价格条件 + TThostFtdcOrderPriceTypeType OrderPriceType; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///组合开平标志 + TThostFtdcCombOffsetFlagType CombOffsetFlag; + ///组合投机套保标志 + TThostFtdcCombHedgeFlagType CombHedgeFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量 + TThostFtdcVolumeType VolumeTotalOriginal; + ///有效期类型 + TThostFtdcTimeConditionType TimeCondition; + ///GTD日期 + TThostFtdcDateType GTDDate; + ///成交量类型 + TThostFtdcVolumeConditionType VolumeCondition; + ///最小成交量 + TThostFtdcVolumeType MinVolume; + ///触发条件 + TThostFtdcContingentConditionType ContingentCondition; + ///止损价 + TThostFtdcPriceType StopPrice; + ///强平原因 + TThostFtdcForceCloseReasonType ForceCloseReason; + ///自动挂起标志 + TThostFtdcBoolType IsAutoSuspend; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///用户强评标志 + TThostFtdcBoolType UserForceClose; + ///互换单标志 + TThostFtdcBoolType IsSwapOrder; +}; + +///报单 +struct CThostFtdcOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///报单价格条件 + TThostFtdcOrderPriceTypeType OrderPriceType; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///组合开平标志 + TThostFtdcCombOffsetFlagType CombOffsetFlag; + ///组合投机套保标志 + TThostFtdcCombHedgeFlagType CombHedgeFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量 + TThostFtdcVolumeType VolumeTotalOriginal; + ///有效期类型 + TThostFtdcTimeConditionType TimeCondition; + ///GTD日期 + TThostFtdcDateType GTDDate; + ///成交量类型 + TThostFtdcVolumeConditionType VolumeCondition; + ///最小成交量 + TThostFtdcVolumeType MinVolume; + ///触发条件 + TThostFtdcContingentConditionType ContingentCondition; + ///止损价 + TThostFtdcPriceType StopPrice; + ///强平原因 + TThostFtdcForceCloseReasonType ForceCloseReason; + ///自动挂起标志 + TThostFtdcBoolType IsAutoSuspend; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///报单提交状态 + TThostFtdcOrderSubmitStatusType OrderSubmitStatus; + ///报单提示序号 + TThostFtdcSequenceNoType NotifySequence; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///报单来源 + TThostFtdcOrderSourceType OrderSource; + ///报单状态 + TThostFtdcOrderStatusType OrderStatus; + ///报单类型 + TThostFtdcOrderTypeType OrderType; + ///今成交数量 + TThostFtdcVolumeType VolumeTraded; + ///剩余数量 + TThostFtdcVolumeType VolumeTotal; + ///报单日期 + TThostFtdcDateType InsertDate; + ///委托时间 + TThostFtdcTimeType InsertTime; + ///激活时间 + TThostFtdcTimeType ActiveTime; + ///挂起时间 + TThostFtdcTimeType SuspendTime; + ///最后修改时间 + TThostFtdcTimeType UpdateTime; + ///撤销时间 + TThostFtdcTimeType CancelTime; + ///最后修改交易所交易员代码 + TThostFtdcTraderIDType ActiveTraderID; + ///结算会员编号 + TThostFtdcParticipantIDType ClearingPartID; + ///序号 + TThostFtdcSequenceNoType SequenceNo; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; + ///状态信息 + TThostFtdcErrorMsgType StatusMsg; + ///用户强评标志 + TThostFtdcBoolType UserForceClose; + ///操作用户代码 + TThostFtdcUserIDType ActiveUserID; + ///经纪公司报单编号 + TThostFtdcSequenceNoType BrokerOrderSeq; + ///相关报单 + TThostFtdcOrderSysIDType RelativeOrderSysID; + ///郑商所成交数量 + TThostFtdcVolumeType ZCETotalTradedVolume; + ///互换单标志 + TThostFtdcBoolType IsSwapOrder; +}; + +///交易所报单 +struct CThostFtdcExchangeOrderField +{ + ///报单价格条件 + TThostFtdcOrderPriceTypeType OrderPriceType; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///组合开平标志 + TThostFtdcCombOffsetFlagType CombOffsetFlag; + ///组合投机套保标志 + TThostFtdcCombHedgeFlagType CombHedgeFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量 + TThostFtdcVolumeType VolumeTotalOriginal; + ///有效期类型 + TThostFtdcTimeConditionType TimeCondition; + ///GTD日期 + TThostFtdcDateType GTDDate; + ///成交量类型 + TThostFtdcVolumeConditionType VolumeCondition; + ///最小成交量 + TThostFtdcVolumeType MinVolume; + ///触发条件 + TThostFtdcContingentConditionType ContingentCondition; + ///止损价 + TThostFtdcPriceType StopPrice; + ///强平原因 + TThostFtdcForceCloseReasonType ForceCloseReason; + ///自动挂起标志 + TThostFtdcBoolType IsAutoSuspend; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///报单提交状态 + TThostFtdcOrderSubmitStatusType OrderSubmitStatus; + ///报单提示序号 + TThostFtdcSequenceNoType NotifySequence; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///报单来源 + TThostFtdcOrderSourceType OrderSource; + ///报单状态 + TThostFtdcOrderStatusType OrderStatus; + ///报单类型 + TThostFtdcOrderTypeType OrderType; + ///今成交数量 + TThostFtdcVolumeType VolumeTraded; + ///剩余数量 + TThostFtdcVolumeType VolumeTotal; + ///报单日期 + TThostFtdcDateType InsertDate; + ///委托时间 + TThostFtdcTimeType InsertTime; + ///激活时间 + TThostFtdcTimeType ActiveTime; + ///挂起时间 + TThostFtdcTimeType SuspendTime; + ///最后修改时间 + TThostFtdcTimeType UpdateTime; + ///撤销时间 + TThostFtdcTimeType CancelTime; + ///最后修改交易所交易员代码 + TThostFtdcTraderIDType ActiveTraderID; + ///结算会员编号 + TThostFtdcParticipantIDType ClearingPartID; + ///序号 + TThostFtdcSequenceNoType SequenceNo; +}; + +///交易所报单插入失败 +struct CThostFtdcExchangeOrderInsertErrorField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///输入报单操作 +struct CThostFtdcInputOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///报单操作引用 + TThostFtdcOrderActionRefType OrderActionRef; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量变化 + TThostFtdcVolumeType VolumeChange; + ///用户代码 + TThostFtdcUserIDType UserID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///报单操作 +struct CThostFtdcOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///报单操作引用 + TThostFtdcOrderActionRefType OrderActionRef; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量变化 + TThostFtdcVolumeType VolumeChange; + ///操作日期 + TThostFtdcDateType ActionDate; + ///操作时间 + TThostFtdcTimeType ActionTime; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///操作本地编号 + TThostFtdcOrderLocalIDType ActionLocalID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///报单操作状态 + TThostFtdcOrderActionStatusType OrderActionStatus; + ///用户代码 + TThostFtdcUserIDType UserID; + ///状态信息 + TThostFtdcErrorMsgType StatusMsg; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///交易所报单操作 +struct CThostFtdcExchangeOrderActionField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量变化 + TThostFtdcVolumeType VolumeChange; + ///操作日期 + TThostFtdcDateType ActionDate; + ///操作时间 + TThostFtdcTimeType ActionTime; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///操作本地编号 + TThostFtdcOrderLocalIDType ActionLocalID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///报单操作状态 + TThostFtdcOrderActionStatusType OrderActionStatus; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///交易所报单操作失败 +struct CThostFtdcExchangeOrderActionErrorField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///操作本地编号 + TThostFtdcOrderLocalIDType ActionLocalID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///交易所成交 +struct CThostFtdcExchangeTradeField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///成交编号 + TThostFtdcTradeIDType TradeID; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///交易角色 + TThostFtdcTradingRoleType TradingRole; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///开平标志 + TThostFtdcOffsetFlagType OffsetFlag; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///价格 + TThostFtdcPriceType Price; + ///数量 + TThostFtdcVolumeType Volume; + ///成交时期 + TThostFtdcDateType TradeDate; + ///成交时间 + TThostFtdcTimeType TradeTime; + ///成交类型 + TThostFtdcTradeTypeType TradeType; + ///成交价来源 + TThostFtdcPriceSourceType PriceSource; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///结算会员编号 + TThostFtdcParticipantIDType ClearingPartID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///序号 + TThostFtdcSequenceNoType SequenceNo; + ///成交来源 + TThostFtdcTradeSourceType TradeSource; +}; + +///成交 +struct CThostFtdcTradeField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///成交编号 + TThostFtdcTradeIDType TradeID; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///交易角色 + TThostFtdcTradingRoleType TradingRole; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///开平标志 + TThostFtdcOffsetFlagType OffsetFlag; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///价格 + TThostFtdcPriceType Price; + ///数量 + TThostFtdcVolumeType Volume; + ///成交时期 + TThostFtdcDateType TradeDate; + ///成交时间 + TThostFtdcTimeType TradeTime; + ///成交类型 + TThostFtdcTradeTypeType TradeType; + ///成交价来源 + TThostFtdcPriceSourceType PriceSource; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///结算会员编号 + TThostFtdcParticipantIDType ClearingPartID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///序号 + TThostFtdcSequenceNoType SequenceNo; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///经纪公司报单编号 + TThostFtdcSequenceNoType BrokerOrderSeq; + ///成交来源 + TThostFtdcTradeSourceType TradeSource; +}; + +///用户会话 +struct CThostFtdcUserSessionField +{ + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///登录日期 + TThostFtdcDateType LoginDate; + ///登录时间 + TThostFtdcTimeType LoginTime; + ///IP地址 + TThostFtdcIPAddressType IPAddress; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; + ///接口端产品信息 + TThostFtdcProductInfoType InterfaceProductInfo; + ///协议信息 + TThostFtdcProtocolInfoType ProtocolInfo; + ///Mac地址 + TThostFtdcMacAddressType MacAddress; +}; + +///查询最大报单数量 +struct CThostFtdcQueryMaxOrderVolumeField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///开平标志 + TThostFtdcOffsetFlagType OffsetFlag; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///最大允许报单数量 + TThostFtdcVolumeType MaxVolume; +}; + +///投资者结算结果确认信息 +struct CThostFtdcSettlementInfoConfirmField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///确认日期 + TThostFtdcDateType ConfirmDate; + ///确认时间 + TThostFtdcTimeType ConfirmTime; +}; + +///出入金同步 +struct CThostFtdcSyncDepositField +{ + ///出入金流水号 + TThostFtdcDepositSeqNoType DepositSeqNo; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///入金金额 + TThostFtdcMoneyType Deposit; + ///是否强制进行 + TThostFtdcBoolType IsForce; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///货币质押同步 +struct CThostFtdcSyncFundMortgageField +{ + ///货币质押流水号 + TThostFtdcDepositSeqNoType MortgageSeqNo; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///源币种 + TThostFtdcCurrencyIDType FromCurrencyID; + ///质押金额 + TThostFtdcMoneyType MortgageAmount; + ///目标币种 + TThostFtdcCurrencyIDType ToCurrencyID; +}; + +///经纪公司同步 +struct CThostFtdcBrokerSyncField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; +}; + +///正在同步中的投资者 +struct CThostFtdcSyncingInvestorField +{ + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者分组代码 + TThostFtdcInvestorIDType InvestorGroupID; + ///投资者名称 + TThostFtdcPartyNameType InvestorName; + ///证件类型 + TThostFtdcIdCardTypeType IdentifiedCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///是否活跃 + TThostFtdcBoolType IsActive; + ///联系电话 + TThostFtdcTelephoneType Telephone; + ///通讯地址 + TThostFtdcAddressType Address; + ///开户日期 + TThostFtdcDateType OpenDate; + ///手机 + TThostFtdcMobileType Mobile; + ///手续费率模板代码 + TThostFtdcInvestorIDType CommModelID; + ///保证金率模板代码 + TThostFtdcInvestorIDType MarginModelID; +}; + +///正在同步中的交易代码 +struct CThostFtdcSyncingTradingCodeField +{ + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///是否活跃 + TThostFtdcBoolType IsActive; + ///交易编码类型 + TThostFtdcClientIDTypeType ClientIDType; +}; + +///正在同步中的投资者分组 +struct CThostFtdcSyncingInvestorGroupField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者分组代码 + TThostFtdcInvestorIDType InvestorGroupID; + ///投资者分组名称 + TThostFtdcInvestorGroupNameType InvestorGroupName; +}; + +///正在同步中的交易账号 +struct CThostFtdcSyncingTradingAccountField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///上次质押金额 + TThostFtdcMoneyType PreMortgage; + ///上次信用额度 + TThostFtdcMoneyType PreCredit; + ///上次存款额 + TThostFtdcMoneyType PreDeposit; + ///上次结算准备金 + TThostFtdcMoneyType PreBalance; + ///上次占用的保证金 + TThostFtdcMoneyType PreMargin; + ///利息基数 + TThostFtdcMoneyType InterestBase; + ///利息收入 + TThostFtdcMoneyType Interest; + ///入金金额 + TThostFtdcMoneyType Deposit; + ///出金金额 + TThostFtdcMoneyType Withdraw; + ///冻结的保证金 + TThostFtdcMoneyType FrozenMargin; + ///冻结的资金 + TThostFtdcMoneyType FrozenCash; + ///冻结的手续费 + TThostFtdcMoneyType FrozenCommission; + ///当前保证金总额 + TThostFtdcMoneyType CurrMargin; + ///资金差额 + TThostFtdcMoneyType CashIn; + ///手续费 + TThostFtdcMoneyType Commission; + ///平仓盈亏 + TThostFtdcMoneyType CloseProfit; + ///持仓盈亏 + TThostFtdcMoneyType PositionProfit; + ///期货结算准备金 + TThostFtdcMoneyType Balance; + ///可用资金 + TThostFtdcMoneyType Available; + ///可取资金 + TThostFtdcMoneyType WithdrawQuota; + ///基本准备金 + TThostFtdcMoneyType Reserve; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///信用额度 + TThostFtdcMoneyType Credit; + ///质押金额 + TThostFtdcMoneyType Mortgage; + ///交易所保证金 + TThostFtdcMoneyType ExchangeMargin; + ///投资者交割保证金 + TThostFtdcMoneyType DeliveryMargin; + ///交易所交割保证金 + TThostFtdcMoneyType ExchangeDeliveryMargin; + ///保底期货结算准备金 + TThostFtdcMoneyType ReserveBalance; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///上次货币质入金额 + TThostFtdcMoneyType PreFundMortgageIn; + ///上次货币质出金额 + TThostFtdcMoneyType PreFundMortgageOut; + ///货币质入金额 + TThostFtdcMoneyType FundMortgageIn; + ///货币质出金额 + TThostFtdcMoneyType FundMortgageOut; + ///货币质押余额 + TThostFtdcMoneyType FundMortgageAvailable; + ///可质押货币金额 + TThostFtdcMoneyType MortgageableFund; + ///特殊产品占用保证金 + TThostFtdcMoneyType SpecProductMargin; + ///特殊产品冻结保证金 + TThostFtdcMoneyType SpecProductFrozenMargin; + ///特殊产品手续费 + TThostFtdcMoneyType SpecProductCommission; + ///特殊产品冻结手续费 + TThostFtdcMoneyType SpecProductFrozenCommission; + ///特殊产品持仓盈亏 + TThostFtdcMoneyType SpecProductPositionProfit; + ///特殊产品平仓盈亏 + TThostFtdcMoneyType SpecProductCloseProfit; + ///根据持仓盈亏算法计算的特殊产品持仓盈亏 + TThostFtdcMoneyType SpecProductPositionProfitByAlg; + ///特殊产品交易所保证金 + TThostFtdcMoneyType SpecProductExchangeMargin; + ///期权平仓盈亏 + TThostFtdcMoneyType OptionCloseProfit; + ///期权市值 + TThostFtdcMoneyType OptionValue; +}; + +///正在同步中的投资者持仓 +struct CThostFtdcSyncingInvestorPositionField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///持仓多空方向 + TThostFtdcPosiDirectionType PosiDirection; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///持仓日期 + TThostFtdcPositionDateType PositionDate; + ///上日持仓 + TThostFtdcVolumeType YdPosition; + ///今日持仓 + TThostFtdcVolumeType Position; + ///多头冻结 + TThostFtdcVolumeType LongFrozen; + ///空头冻结 + TThostFtdcVolumeType ShortFrozen; + ///开仓冻结金额 + TThostFtdcMoneyType LongFrozenAmount; + ///开仓冻结金额 + TThostFtdcMoneyType ShortFrozenAmount; + ///开仓量 + TThostFtdcVolumeType OpenVolume; + ///平仓量 + TThostFtdcVolumeType CloseVolume; + ///开仓金额 + TThostFtdcMoneyType OpenAmount; + ///平仓金额 + TThostFtdcMoneyType CloseAmount; + ///持仓成本 + TThostFtdcMoneyType PositionCost; + ///上次占用的保证金 + TThostFtdcMoneyType PreMargin; + ///占用的保证金 + TThostFtdcMoneyType UseMargin; + ///冻结的保证金 + TThostFtdcMoneyType FrozenMargin; + ///冻结的资金 + TThostFtdcMoneyType FrozenCash; + ///冻结的手续费 + TThostFtdcMoneyType FrozenCommission; + ///资金差额 + TThostFtdcMoneyType CashIn; + ///手续费 + TThostFtdcMoneyType Commission; + ///平仓盈亏 + TThostFtdcMoneyType CloseProfit; + ///持仓盈亏 + TThostFtdcMoneyType PositionProfit; + ///上次结算价 + TThostFtdcPriceType PreSettlementPrice; + ///本次结算价 + TThostFtdcPriceType SettlementPrice; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///开仓成本 + TThostFtdcMoneyType OpenCost; + ///交易所保证金 + TThostFtdcMoneyType ExchangeMargin; + ///组合成交形成的持仓 + TThostFtdcVolumeType CombPosition; + ///组合多头冻结 + TThostFtdcVolumeType CombLongFrozen; + ///组合空头冻结 + TThostFtdcVolumeType CombShortFrozen; + ///逐日盯市平仓盈亏 + TThostFtdcMoneyType CloseProfitByDate; + ///逐笔对冲平仓盈亏 + TThostFtdcMoneyType CloseProfitByTrade; + ///今日持仓 + TThostFtdcVolumeType TodayPosition; + ///保证金率 + TThostFtdcRatioType MarginRateByMoney; + ///保证金率(按手数) + TThostFtdcRatioType MarginRateByVolume; + ///执行冻结 + TThostFtdcVolumeType StrikeFrozen; + ///执行冻结金额 + TThostFtdcMoneyType StrikeFrozenAmount; + ///放弃执行冻结 + TThostFtdcVolumeType AbandonFrozen; + ///期权市值 + TThostFtdcMoneyType OptionValue; +}; + +///正在同步中的合约保证金率 +struct CThostFtdcSyncingInstrumentMarginRateField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///多头保证金率 + TThostFtdcRatioType LongMarginRatioByMoney; + ///多头保证金费 + TThostFtdcMoneyType LongMarginRatioByVolume; + ///空头保证金率 + TThostFtdcRatioType ShortMarginRatioByMoney; + ///空头保证金费 + TThostFtdcMoneyType ShortMarginRatioByVolume; + ///是否相对交易所收取 + TThostFtdcBoolType IsRelative; +}; + +///正在同步中的合约手续费率 +struct CThostFtdcSyncingInstrumentCommissionRateField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///开仓手续费率 + TThostFtdcRatioType OpenRatioByMoney; + ///开仓手续费 + TThostFtdcRatioType OpenRatioByVolume; + ///平仓手续费率 + TThostFtdcRatioType CloseRatioByMoney; + ///平仓手续费 + TThostFtdcRatioType CloseRatioByVolume; + ///平今手续费率 + TThostFtdcRatioType CloseTodayRatioByMoney; + ///平今手续费 + TThostFtdcRatioType CloseTodayRatioByVolume; +}; + +///正在同步中的合约交易权限 +struct CThostFtdcSyncingInstrumentTradingRightField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易权限 + TThostFtdcTradingRightType TradingRight; +}; + +///查询报单 +struct CThostFtdcQryOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///开始时间 + TThostFtdcTimeType InsertTimeStart; + ///结束时间 + TThostFtdcTimeType InsertTimeEnd; +}; + +///查询成交 +struct CThostFtdcQryTradeField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///成交编号 + TThostFtdcTradeIDType TradeID; + ///开始时间 + TThostFtdcTimeType TradeTimeStart; + ///结束时间 + TThostFtdcTimeType TradeTimeEnd; +}; + +///查询投资者持仓 +struct CThostFtdcQryInvestorPositionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///查询资金账户 +struct CThostFtdcQryTradingAccountField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///查询投资者 +struct CThostFtdcQryInvestorField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; +}; + +///查询交易编码 +struct CThostFtdcQryTradingCodeField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///交易编码类型 + TThostFtdcClientIDTypeType ClientIDType; +}; + +///查询投资者组 +struct CThostFtdcQryInvestorGroupField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; +}; + +///查询合约保证金率 +struct CThostFtdcQryInstrumentMarginRateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; +}; + +///查询手续费率 +struct CThostFtdcQryInstrumentCommissionRateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///查询合约交易权限 +struct CThostFtdcQryInstrumentTradingRightField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///查询经纪公司 +struct CThostFtdcQryBrokerField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; +}; + +///查询交易员 +struct CThostFtdcQryTraderField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///查询管理用户功能权限 +struct CThostFtdcQrySuperUserFunctionField +{ + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///查询用户会话 +struct CThostFtdcQryUserSessionField +{ + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///查询经纪公司会员代码 +struct CThostFtdcQryPartBrokerField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; +}; + +///查询前置状态 +struct CThostFtdcQryFrontStatusField +{ + ///前置编号 + TThostFtdcFrontIDType FrontID; +}; + +///查询交易所报单 +struct CThostFtdcQryExchangeOrderField +{ + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///查询报单操作 +struct CThostFtdcQryOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; +}; + +///查询交易所报单操作 +struct CThostFtdcQryExchangeOrderActionField +{ + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///查询管理用户 +struct CThostFtdcQrySuperUserField +{ + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///查询交易所 +struct CThostFtdcQryExchangeField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; +}; + +///查询产品 +struct CThostFtdcQryProductField +{ + ///产品代码 + TThostFtdcInstrumentIDType ProductID; + ///产品类型 + TThostFtdcProductClassType ProductClass; +}; + +///查询合约 +struct CThostFtdcQryInstrumentField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///产品代码 + TThostFtdcInstrumentIDType ProductID; +}; + +///查询行情 +struct CThostFtdcQryDepthMarketDataField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///查询经纪公司用户 +struct CThostFtdcQryBrokerUserField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///查询经纪公司用户权限 +struct CThostFtdcQryBrokerUserFunctionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///查询交易员报盘机 +struct CThostFtdcQryTraderOfferField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///查询出入金流水 +struct CThostFtdcQrySyncDepositField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///出入金流水号 + TThostFtdcDepositSeqNoType DepositSeqNo; +}; + +///查询投资者结算结果 +struct CThostFtdcQrySettlementInfoField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易日 + TThostFtdcDateType TradingDay; +}; + +///查询交易所保证金率 +struct CThostFtdcQryExchangeMarginRateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; +}; + +///查询交易所调整保证金率 +struct CThostFtdcQryExchangeMarginRateAdjustField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; +}; + +///查询汇率 +struct CThostFtdcQryExchangeRateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///源币种 + TThostFtdcCurrencyIDType FromCurrencyID; + ///目标币种 + TThostFtdcCurrencyIDType ToCurrencyID; +}; + +///查询货币质押流水 +struct CThostFtdcQrySyncFundMortgageField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///货币质押流水号 + TThostFtdcDepositSeqNoType MortgageSeqNo; +}; + +///查询报单 +struct CThostFtdcQryHisOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///开始时间 + TThostFtdcTimeType InsertTimeStart; + ///结束时间 + TThostFtdcTimeType InsertTimeEnd; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; +}; + +///当前期权合约最小保证金 +struct CThostFtdcOptionInstrMiniMarginField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///单位(手)期权合约最小保证金 + TThostFtdcMoneyType MinMargin; + ///取值方式 + TThostFtdcValueMethodType ValueMethod; + ///是否跟随交易所收取 + TThostFtdcBoolType IsRelative; +}; + +///当前期权合约保证金调整系数 +struct CThostFtdcOptionInstrMarginAdjustField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///投机空头保证金调整系数 + TThostFtdcRatioType SShortMarginRatioByMoney; + ///投机空头保证金调整系数 + TThostFtdcMoneyType SShortMarginRatioByVolume; + ///保值空头保证金调整系数 + TThostFtdcRatioType HShortMarginRatioByMoney; + ///保值空头保证金调整系数 + TThostFtdcMoneyType HShortMarginRatioByVolume; + ///套利空头保证金调整系数 + TThostFtdcRatioType AShortMarginRatioByMoney; + ///套利空头保证金调整系数 + TThostFtdcMoneyType AShortMarginRatioByVolume; + ///是否跟随交易所收取 + TThostFtdcBoolType IsRelative; +}; + +///当前期权合约手续费的详细内容 +struct CThostFtdcOptionInstrCommRateField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///开仓手续费率 + TThostFtdcRatioType OpenRatioByMoney; + ///开仓手续费 + TThostFtdcRatioType OpenRatioByVolume; + ///平仓手续费率 + TThostFtdcRatioType CloseRatioByMoney; + ///平仓手续费 + TThostFtdcRatioType CloseRatioByVolume; + ///平今手续费率 + TThostFtdcRatioType CloseTodayRatioByMoney; + ///平今手续费 + TThostFtdcRatioType CloseTodayRatioByVolume; + ///执行手续费率 + TThostFtdcRatioType StrikeRatioByMoney; + ///执行手续费 + TThostFtdcRatioType StrikeRatioByVolume; +}; + +///期权交易成本 +struct CThostFtdcOptionInstrTradeCostField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///期权合约保证金不变部分 + TThostFtdcMoneyType FixedMargin; + ///期权合约最小保证金 + TThostFtdcMoneyType MiniMargin; + ///期权合约权利金 + TThostFtdcMoneyType Royalty; + ///交易所期权合约保证金不变部分 + TThostFtdcMoneyType ExchFixedMargin; + ///交易所期权合约最小保证金 + TThostFtdcMoneyType ExchMiniMargin; +}; + +///期权交易成本查询 +struct CThostFtdcQryOptionInstrTradeCostField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///期权合约报价 + TThostFtdcPriceType InputPrice; + ///标的价格,填0则用昨结算价 + TThostFtdcPriceType UnderlyingPrice; +}; + +///期权手续费率查询 +struct CThostFtdcQryOptionInstrCommRateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///股指现货指数 +struct CThostFtdcIndexPriceField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///指数现货收盘价 + TThostFtdcPriceType ClosePrice; +}; + +///输入的执行宣告 +struct CThostFtdcInputExecOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///执行宣告引用 + TThostFtdcOrderRefType ExecOrderRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///数量 + TThostFtdcVolumeType Volume; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///开平标志 + TThostFtdcOffsetFlagType OffsetFlag; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///执行类型 + TThostFtdcActionTypeType ActionType; + ///保留头寸申请的持仓方向 + TThostFtdcPosiDirectionType PosiDirection; + ///期权行权后是否保留期货头寸的标记 + TThostFtdcExecOrderPositionFlagType ReservePositionFlag; + ///期权行权后生成的头寸是否自动平仓 + TThostFtdcExecOrderCloseFlagType CloseFlag; +}; + +///输入执行宣告操作 +struct CThostFtdcInputExecOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///执行宣告操作引用 + TThostFtdcOrderActionRefType ExecOrderActionRef; + ///执行宣告引用 + TThostFtdcOrderRefType ExecOrderRef; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///执行宣告操作编号 + TThostFtdcExecOrderSysIDType ExecOrderSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///用户代码 + TThostFtdcUserIDType UserID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///执行宣告 +struct CThostFtdcExecOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///执行宣告引用 + TThostFtdcOrderRefType ExecOrderRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///数量 + TThostFtdcVolumeType Volume; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///开平标志 + TThostFtdcOffsetFlagType OffsetFlag; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///执行类型 + TThostFtdcActionTypeType ActionType; + ///保留头寸申请的持仓方向 + TThostFtdcPosiDirectionType PosiDirection; + ///期权行权后是否保留期货头寸的标记 + TThostFtdcExecOrderPositionFlagType ReservePositionFlag; + ///期权行权后生成的头寸是否自动平仓 + TThostFtdcExecOrderCloseFlagType CloseFlag; + ///本地执行宣告编号 + TThostFtdcOrderLocalIDType ExecOrderLocalID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///执行宣告提交状态 + TThostFtdcOrderSubmitStatusType OrderSubmitStatus; + ///报单提示序号 + TThostFtdcSequenceNoType NotifySequence; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///执行宣告编号 + TThostFtdcExecOrderSysIDType ExecOrderSysID; + ///报单日期 + TThostFtdcDateType InsertDate; + ///插入时间 + TThostFtdcTimeType InsertTime; + ///撤销时间 + TThostFtdcTimeType CancelTime; + ///执行结果 + TThostFtdcExecResultType ExecResult; + ///结算会员编号 + TThostFtdcParticipantIDType ClearingPartID; + ///序号 + TThostFtdcSequenceNoType SequenceNo; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; + ///状态信息 + TThostFtdcErrorMsgType StatusMsg; + ///操作用户代码 + TThostFtdcUserIDType ActiveUserID; + ///经纪公司报单编号 + TThostFtdcSequenceNoType BrokerExecOrderSeq; +}; + +///执行宣告操作 +struct CThostFtdcExecOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///执行宣告操作引用 + TThostFtdcOrderActionRefType ExecOrderActionRef; + ///执行宣告引用 + TThostFtdcOrderRefType ExecOrderRef; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///执行宣告操作编号 + TThostFtdcExecOrderSysIDType ExecOrderSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///操作日期 + TThostFtdcDateType ActionDate; + ///操作时间 + TThostFtdcTimeType ActionTime; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地执行宣告编号 + TThostFtdcOrderLocalIDType ExecOrderLocalID; + ///操作本地编号 + TThostFtdcOrderLocalIDType ActionLocalID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///报单操作状态 + TThostFtdcOrderActionStatusType OrderActionStatus; + ///用户代码 + TThostFtdcUserIDType UserID; + ///执行类型 + TThostFtdcActionTypeType ActionType; + ///状态信息 + TThostFtdcErrorMsgType StatusMsg; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///执行宣告查询 +struct CThostFtdcQryExecOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///执行宣告编号 + TThostFtdcExecOrderSysIDType ExecOrderSysID; + ///开始时间 + TThostFtdcTimeType InsertTimeStart; + ///结束时间 + TThostFtdcTimeType InsertTimeEnd; +}; + +///交易所执行宣告信息 +struct CThostFtdcExchangeExecOrderField +{ + ///数量 + TThostFtdcVolumeType Volume; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///开平标志 + TThostFtdcOffsetFlagType OffsetFlag; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///执行类型 + TThostFtdcActionTypeType ActionType; + ///保留头寸申请的持仓方向 + TThostFtdcPosiDirectionType PosiDirection; + ///期权行权后是否保留期货头寸的标记 + TThostFtdcExecOrderPositionFlagType ReservePositionFlag; + ///期权行权后生成的头寸是否自动平仓 + TThostFtdcExecOrderCloseFlagType CloseFlag; + ///本地执行宣告编号 + TThostFtdcOrderLocalIDType ExecOrderLocalID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///执行宣告提交状态 + TThostFtdcOrderSubmitStatusType OrderSubmitStatus; + ///报单提示序号 + TThostFtdcSequenceNoType NotifySequence; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///执行宣告编号 + TThostFtdcExecOrderSysIDType ExecOrderSysID; + ///报单日期 + TThostFtdcDateType InsertDate; + ///插入时间 + TThostFtdcTimeType InsertTime; + ///撤销时间 + TThostFtdcTimeType CancelTime; + ///执行结果 + TThostFtdcExecResultType ExecResult; + ///结算会员编号 + TThostFtdcParticipantIDType ClearingPartID; + ///序号 + TThostFtdcSequenceNoType SequenceNo; +}; + +///交易所执行宣告查询 +struct CThostFtdcQryExchangeExecOrderField +{ + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///执行宣告操作查询 +struct CThostFtdcQryExecOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; +}; + +///交易所执行宣告操作 +struct CThostFtdcExchangeExecOrderActionField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///执行宣告操作编号 + TThostFtdcExecOrderSysIDType ExecOrderSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///操作日期 + TThostFtdcDateType ActionDate; + ///操作时间 + TThostFtdcTimeType ActionTime; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地执行宣告编号 + TThostFtdcOrderLocalIDType ExecOrderLocalID; + ///操作本地编号 + TThostFtdcOrderLocalIDType ActionLocalID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///报单操作状态 + TThostFtdcOrderActionStatusType OrderActionStatus; + ///用户代码 + TThostFtdcUserIDType UserID; + ///执行类型 + TThostFtdcActionTypeType ActionType; +}; + +///交易所执行宣告操作查询 +struct CThostFtdcQryExchangeExecOrderActionField +{ + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///错误执行宣告 +struct CThostFtdcErrExecOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///执行宣告引用 + TThostFtdcOrderRefType ExecOrderRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///数量 + TThostFtdcVolumeType Volume; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///开平标志 + TThostFtdcOffsetFlagType OffsetFlag; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///执行类型 + TThostFtdcActionTypeType ActionType; + ///保留头寸申请的持仓方向 + TThostFtdcPosiDirectionType PosiDirection; + ///期权行权后是否保留期货头寸的标记 + TThostFtdcExecOrderPositionFlagType ReservePositionFlag; + ///期权行权后生成的头寸是否自动平仓 + TThostFtdcExecOrderCloseFlagType CloseFlag; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///查询错误执行宣告 +struct CThostFtdcQryErrExecOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; +}; + +///错误执行宣告操作 +struct CThostFtdcErrExecOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///执行宣告操作引用 + TThostFtdcOrderActionRefType ExecOrderActionRef; + ///执行宣告引用 + TThostFtdcOrderRefType ExecOrderRef; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///执行宣告操作编号 + TThostFtdcExecOrderSysIDType ExecOrderSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///用户代码 + TThostFtdcUserIDType UserID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///查询错误执行宣告操作 +struct CThostFtdcQryErrExecOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; +}; + +///投资者期权合约交易权限 +struct CThostFtdcOptionInstrTradingRightField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///交易权限 + TThostFtdcTradingRightType TradingRight; +}; + +///查询期权合约交易权限 +struct CThostFtdcQryOptionInstrTradingRightField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///买卖方向 + TThostFtdcDirectionType Direction; +}; + +///输入的询价 +struct CThostFtdcInputForQuoteField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///询价引用 + TThostFtdcOrderRefType ForQuoteRef; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///询价 +struct CThostFtdcForQuoteField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///询价引用 + TThostFtdcOrderRefType ForQuoteRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///本地询价编号 + TThostFtdcOrderLocalIDType ForQuoteLocalID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///报单日期 + TThostFtdcDateType InsertDate; + ///插入时间 + TThostFtdcTimeType InsertTime; + ///询价状态 + TThostFtdcForQuoteStatusType ForQuoteStatus; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///状态信息 + TThostFtdcErrorMsgType StatusMsg; + ///操作用户代码 + TThostFtdcUserIDType ActiveUserID; + ///经纪公司询价编号 + TThostFtdcSequenceNoType BrokerForQutoSeq; +}; + +///询价查询 +struct CThostFtdcQryForQuoteField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///开始时间 + TThostFtdcTimeType InsertTimeStart; + ///结束时间 + TThostFtdcTimeType InsertTimeEnd; +}; + +///交易所询价信息 +struct CThostFtdcExchangeForQuoteField +{ + ///本地询价编号 + TThostFtdcOrderLocalIDType ForQuoteLocalID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///报单日期 + TThostFtdcDateType InsertDate; + ///插入时间 + TThostFtdcTimeType InsertTime; + ///询价状态 + TThostFtdcForQuoteStatusType ForQuoteStatus; +}; + +///交易所询价查询 +struct CThostFtdcQryExchangeForQuoteField +{ + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///输入的报价 +struct CThostFtdcInputQuoteField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///报价引用 + TThostFtdcOrderRefType QuoteRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///卖价格 + TThostFtdcPriceType AskPrice; + ///买价格 + TThostFtdcPriceType BidPrice; + ///卖数量 + TThostFtdcVolumeType AskVolume; + ///买数量 + TThostFtdcVolumeType BidVolume; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///卖开平标志 + TThostFtdcOffsetFlagType AskOffsetFlag; + ///买开平标志 + TThostFtdcOffsetFlagType BidOffsetFlag; + ///卖投机套保标志 + TThostFtdcHedgeFlagType AskHedgeFlag; + ///买投机套保标志 + TThostFtdcHedgeFlagType BidHedgeFlag; +}; + +///输入报价操作 +struct CThostFtdcInputQuoteActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///报价操作引用 + TThostFtdcOrderActionRefType QuoteActionRef; + ///报价引用 + TThostFtdcOrderRefType QuoteRef; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报价操作编号 + TThostFtdcOrderSysIDType QuoteSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///用户代码 + TThostFtdcUserIDType UserID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///报价 +struct CThostFtdcQuoteField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///报价引用 + TThostFtdcOrderRefType QuoteRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///卖价格 + TThostFtdcPriceType AskPrice; + ///买价格 + TThostFtdcPriceType BidPrice; + ///卖数量 + TThostFtdcVolumeType AskVolume; + ///买数量 + TThostFtdcVolumeType BidVolume; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///卖开平标志 + TThostFtdcOffsetFlagType AskOffsetFlag; + ///买开平标志 + TThostFtdcOffsetFlagType BidOffsetFlag; + ///卖投机套保标志 + TThostFtdcHedgeFlagType AskHedgeFlag; + ///买投机套保标志 + TThostFtdcHedgeFlagType BidHedgeFlag; + ///本地报价编号 + TThostFtdcOrderLocalIDType QuoteLocalID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///报价提示序号 + TThostFtdcSequenceNoType NotifySequence; + ///报价提交状态 + TThostFtdcOrderSubmitStatusType OrderSubmitStatus; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///报价编号 + TThostFtdcOrderSysIDType QuoteSysID; + ///报单日期 + TThostFtdcDateType InsertDate; + ///插入时间 + TThostFtdcTimeType InsertTime; + ///撤销时间 + TThostFtdcTimeType CancelTime; + ///报价状态 + TThostFtdcOrderStatusType QuoteStatus; + ///结算会员编号 + TThostFtdcParticipantIDType ClearingPartID; + ///序号 + TThostFtdcSequenceNoType SequenceNo; + ///卖方报单编号 + TThostFtdcOrderSysIDType AskOrderSysID; + ///买方报单编号 + TThostFtdcOrderSysIDType BidOrderSysID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; + ///状态信息 + TThostFtdcErrorMsgType StatusMsg; + ///操作用户代码 + TThostFtdcUserIDType ActiveUserID; + ///经纪公司报价编号 + TThostFtdcSequenceNoType BrokerQuoteSeq; +}; + +///报价操作 +struct CThostFtdcQuoteActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///报价操作引用 + TThostFtdcOrderActionRefType QuoteActionRef; + ///报价引用 + TThostFtdcOrderRefType QuoteRef; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报价操作编号 + TThostFtdcOrderSysIDType QuoteSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///操作日期 + TThostFtdcDateType ActionDate; + ///操作时间 + TThostFtdcTimeType ActionTime; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地报价编号 + TThostFtdcOrderLocalIDType QuoteLocalID; + ///操作本地编号 + TThostFtdcOrderLocalIDType ActionLocalID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///报单操作状态 + TThostFtdcOrderActionStatusType OrderActionStatus; + ///用户代码 + TThostFtdcUserIDType UserID; + ///状态信息 + TThostFtdcErrorMsgType StatusMsg; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///报价查询 +struct CThostFtdcQryQuoteField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报价编号 + TThostFtdcOrderSysIDType QuoteSysID; + ///开始时间 + TThostFtdcTimeType InsertTimeStart; + ///结束时间 + TThostFtdcTimeType InsertTimeEnd; +}; + +///交易所报价信息 +struct CThostFtdcExchangeQuoteField +{ + ///卖价格 + TThostFtdcPriceType AskPrice; + ///买价格 + TThostFtdcPriceType BidPrice; + ///卖数量 + TThostFtdcVolumeType AskVolume; + ///买数量 + TThostFtdcVolumeType BidVolume; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///卖开平标志 + TThostFtdcOffsetFlagType AskOffsetFlag; + ///买开平标志 + TThostFtdcOffsetFlagType BidOffsetFlag; + ///卖投机套保标志 + TThostFtdcHedgeFlagType AskHedgeFlag; + ///买投机套保标志 + TThostFtdcHedgeFlagType BidHedgeFlag; + ///本地报价编号 + TThostFtdcOrderLocalIDType QuoteLocalID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///报价提示序号 + TThostFtdcSequenceNoType NotifySequence; + ///报价提交状态 + TThostFtdcOrderSubmitStatusType OrderSubmitStatus; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///报价编号 + TThostFtdcOrderSysIDType QuoteSysID; + ///报单日期 + TThostFtdcDateType InsertDate; + ///插入时间 + TThostFtdcTimeType InsertTime; + ///撤销时间 + TThostFtdcTimeType CancelTime; + ///报价状态 + TThostFtdcOrderStatusType QuoteStatus; + ///结算会员编号 + TThostFtdcParticipantIDType ClearingPartID; + ///序号 + TThostFtdcSequenceNoType SequenceNo; + ///卖方报单编号 + TThostFtdcOrderSysIDType AskOrderSysID; + ///买方报单编号 + TThostFtdcOrderSysIDType BidOrderSysID; +}; + +///交易所报价查询 +struct CThostFtdcQryExchangeQuoteField +{ + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///报价操作查询 +struct CThostFtdcQryQuoteActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; +}; + +///交易所报价操作 +struct CThostFtdcExchangeQuoteActionField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报价操作编号 + TThostFtdcOrderSysIDType QuoteSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///操作日期 + TThostFtdcDateType ActionDate; + ///操作时间 + TThostFtdcTimeType ActionTime; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地报价编号 + TThostFtdcOrderLocalIDType QuoteLocalID; + ///操作本地编号 + TThostFtdcOrderLocalIDType ActionLocalID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///报单操作状态 + TThostFtdcOrderActionStatusType OrderActionStatus; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///交易所报价操作查询 +struct CThostFtdcQryExchangeQuoteActionField +{ + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///期权合约delta值 +struct CThostFtdcOptionInstrDeltaField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///Delta值 + TThostFtdcRatioType Delta; +}; + +///发给做市商的询价请求 +struct CThostFtdcForQuoteRspField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///询价编号 + TThostFtdcOrderSysIDType ForQuoteSysID; + ///询价时间 + TThostFtdcTimeType ForQuoteTime; + ///业务日期 + TThostFtdcDateType ActionDay; +}; + +///当前期权合约执行偏移值的详细内容 +struct CThostFtdcStrikeOffsetField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///执行偏移值 + TThostFtdcMoneyType Offset; +}; + +///期权执行偏移值查询 +struct CThostFtdcQryStrikeOffsetField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///市场行情 +struct CThostFtdcMarketDataField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///最新价 + TThostFtdcPriceType LastPrice; + ///上次结算价 + TThostFtdcPriceType PreSettlementPrice; + ///昨收盘 + TThostFtdcPriceType PreClosePrice; + ///昨持仓量 + TThostFtdcLargeVolumeType PreOpenInterest; + ///今开盘 + TThostFtdcPriceType OpenPrice; + ///最高价 + TThostFtdcPriceType HighestPrice; + ///最低价 + TThostFtdcPriceType LowestPrice; + ///数量 + TThostFtdcVolumeType Volume; + ///成交金额 + TThostFtdcMoneyType Turnover; + ///持仓量 + TThostFtdcLargeVolumeType OpenInterest; + ///今收盘 + TThostFtdcPriceType ClosePrice; + ///本次结算价 + TThostFtdcPriceType SettlementPrice; + ///涨停板价 + TThostFtdcPriceType UpperLimitPrice; + ///跌停板价 + TThostFtdcPriceType LowerLimitPrice; + ///昨虚实度 + TThostFtdcRatioType PreDelta; + ///今虚实度 + TThostFtdcRatioType CurrDelta; + ///最后修改时间 + TThostFtdcTimeType UpdateTime; + ///最后修改毫秒 + TThostFtdcMillisecType UpdateMillisec; + ///业务日期 + TThostFtdcDateType ActionDay; +}; + +///行情基础属性 +struct CThostFtdcMarketDataBaseField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///上次结算价 + TThostFtdcPriceType PreSettlementPrice; + ///昨收盘 + TThostFtdcPriceType PreClosePrice; + ///昨持仓量 + TThostFtdcLargeVolumeType PreOpenInterest; + ///昨虚实度 + TThostFtdcRatioType PreDelta; +}; + +///行情静态属性 +struct CThostFtdcMarketDataStaticField +{ + ///今开盘 + TThostFtdcPriceType OpenPrice; + ///最高价 + TThostFtdcPriceType HighestPrice; + ///最低价 + TThostFtdcPriceType LowestPrice; + ///今收盘 + TThostFtdcPriceType ClosePrice; + ///涨停板价 + TThostFtdcPriceType UpperLimitPrice; + ///跌停板价 + TThostFtdcPriceType LowerLimitPrice; + ///本次结算价 + TThostFtdcPriceType SettlementPrice; + ///今虚实度 + TThostFtdcRatioType CurrDelta; +}; + +///行情最新成交属性 +struct CThostFtdcMarketDataLastMatchField +{ + ///最新价 + TThostFtdcPriceType LastPrice; + ///数量 + TThostFtdcVolumeType Volume; + ///成交金额 + TThostFtdcMoneyType Turnover; + ///持仓量 + TThostFtdcLargeVolumeType OpenInterest; +}; + +///行情最优价属性 +struct CThostFtdcMarketDataBestPriceField +{ + ///申买价一 + TThostFtdcPriceType BidPrice1; + ///申买量一 + TThostFtdcVolumeType BidVolume1; + ///申卖价一 + TThostFtdcPriceType AskPrice1; + ///申卖量一 + TThostFtdcVolumeType AskVolume1; +}; + +///行情申买二、三属性 +struct CThostFtdcMarketDataBid23Field +{ + ///申买价二 + TThostFtdcPriceType BidPrice2; + ///申买量二 + TThostFtdcVolumeType BidVolume2; + ///申买价三 + TThostFtdcPriceType BidPrice3; + ///申买量三 + TThostFtdcVolumeType BidVolume3; +}; + +///行情申卖二、三属性 +struct CThostFtdcMarketDataAsk23Field +{ + ///申卖价二 + TThostFtdcPriceType AskPrice2; + ///申卖量二 + TThostFtdcVolumeType AskVolume2; + ///申卖价三 + TThostFtdcPriceType AskPrice3; + ///申卖量三 + TThostFtdcVolumeType AskVolume3; +}; + +///行情申买四、五属性 +struct CThostFtdcMarketDataBid45Field +{ + ///申买价四 + TThostFtdcPriceType BidPrice4; + ///申买量四 + TThostFtdcVolumeType BidVolume4; + ///申买价五 + TThostFtdcPriceType BidPrice5; + ///申买量五 + TThostFtdcVolumeType BidVolume5; +}; + +///行情申卖四、五属性 +struct CThostFtdcMarketDataAsk45Field +{ + ///申卖价四 + TThostFtdcPriceType AskPrice4; + ///申卖量四 + TThostFtdcVolumeType AskVolume4; + ///申卖价五 + TThostFtdcPriceType AskPrice5; + ///申卖量五 + TThostFtdcVolumeType AskVolume5; +}; + +///行情更新时间属性 +struct CThostFtdcMarketDataUpdateTimeField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///最后修改时间 + TThostFtdcTimeType UpdateTime; + ///最后修改毫秒 + TThostFtdcMillisecType UpdateMillisec; + ///业务日期 + TThostFtdcDateType ActionDay; +}; + +///行情交易所代码属性 +struct CThostFtdcMarketDataExchangeField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; +}; + +///指定的合约 +struct CThostFtdcSpecificInstrumentField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///合约状态 +struct CThostFtdcInstrumentStatusField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///结算组代码 + TThostFtdcSettlementGroupIDType SettlementGroupID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///合约交易状态 + TThostFtdcInstrumentStatusType InstrumentStatus; + ///交易阶段编号 + TThostFtdcTradingSegmentSNType TradingSegmentSN; + ///进入本状态时间 + TThostFtdcTimeType EnterTime; + ///进入本状态原因 + TThostFtdcInstStatusEnterReasonType EnterReason; +}; + +///查询合约状态 +struct CThostFtdcQryInstrumentStatusField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; +}; + +///投资者账户 +struct CThostFtdcInvestorAccountField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///浮动盈亏算法 +struct CThostFtdcPositionProfitAlgorithmField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///盈亏算法 + TThostFtdcAlgorithmType Algorithm; + ///备注 + TThostFtdcMemoType Memo; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///会员资金折扣 +struct CThostFtdcDiscountField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///资金折扣比例 + TThostFtdcRatioType Discount; +}; + +///查询转帐银行 +struct CThostFtdcQryTransferBankField +{ + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分中心代码 + TThostFtdcBankBrchIDType BankBrchID; +}; + +///转帐银行 +struct CThostFtdcTransferBankField +{ + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分中心代码 + TThostFtdcBankBrchIDType BankBrchID; + ///银行名称 + TThostFtdcBankNameType BankName; + ///是否活跃 + TThostFtdcBoolType IsActive; +}; + +///查询投资者持仓明细 +struct CThostFtdcQryInvestorPositionDetailField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///投资者持仓明细 +struct CThostFtdcInvestorPositionDetailField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///买卖 + TThostFtdcDirectionType Direction; + ///开仓日期 + TThostFtdcDateType OpenDate; + ///成交编号 + TThostFtdcTradeIDType TradeID; + ///数量 + TThostFtdcVolumeType Volume; + ///开仓价 + TThostFtdcPriceType OpenPrice; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///成交类型 + TThostFtdcTradeTypeType TradeType; + ///组合合约代码 + TThostFtdcInstrumentIDType CombInstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///逐日盯市平仓盈亏 + TThostFtdcMoneyType CloseProfitByDate; + ///逐笔对冲平仓盈亏 + TThostFtdcMoneyType CloseProfitByTrade; + ///逐日盯市持仓盈亏 + TThostFtdcMoneyType PositionProfitByDate; + ///逐笔对冲持仓盈亏 + TThostFtdcMoneyType PositionProfitByTrade; + ///投资者保证金 + TThostFtdcMoneyType Margin; + ///交易所保证金 + TThostFtdcMoneyType ExchMargin; + ///保证金率 + TThostFtdcRatioType MarginRateByMoney; + ///保证金率(按手数) + TThostFtdcRatioType MarginRateByVolume; + ///昨结算价 + TThostFtdcPriceType LastSettlementPrice; + ///结算价 + TThostFtdcPriceType SettlementPrice; + ///平仓量 + TThostFtdcVolumeType CloseVolume; + ///平仓金额 + TThostFtdcMoneyType CloseAmount; +}; + +///资金账户口令域 +struct CThostFtdcTradingAccountPasswordField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///密码 + TThostFtdcPasswordType Password; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///交易所行情报盘机 +struct CThostFtdcMDTraderOfferField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///交易所交易员连接状态 + TThostFtdcTraderConnectStatusType TraderConnectStatus; + ///发出连接请求的日期 + TThostFtdcDateType ConnectRequestDate; + ///发出连接请求的时间 + TThostFtdcTimeType ConnectRequestTime; + ///上次报告日期 + TThostFtdcDateType LastReportDate; + ///上次报告时间 + TThostFtdcTimeType LastReportTime; + ///完成连接日期 + TThostFtdcDateType ConnectDate; + ///完成连接时间 + TThostFtdcTimeType ConnectTime; + ///启动日期 + TThostFtdcDateType StartDate; + ///启动时间 + TThostFtdcTimeType StartTime; + ///交易日 + TThostFtdcDateType TradingDay; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///本席位最大成交编号 + TThostFtdcTradeIDType MaxTradeID; + ///本席位最大报单备拷 + TThostFtdcReturnCodeType MaxOrderMessageReference; +}; + +///查询行情报盘机 +struct CThostFtdcQryMDTraderOfferField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///查询客户通知 +struct CThostFtdcQryNoticeField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; +}; + +///客户通知 +struct CThostFtdcNoticeField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///消息正文 + TThostFtdcContentType Content; + ///经纪公司通知内容序列号 + TThostFtdcSequenceLabelType SequenceLabel; +}; + +///用户权限 +struct CThostFtdcUserRightField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///客户权限类型 + TThostFtdcUserRightTypeType UserRightType; + ///是否禁止 + TThostFtdcBoolType IsForbidden; +}; + +///查询结算信息确认域 +struct CThostFtdcQrySettlementInfoConfirmField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; +}; + +///装载结算信息 +struct CThostFtdcLoadSettlementInfoField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; +}; + +///经纪公司可提资金算法表 +struct CThostFtdcBrokerWithdrawAlgorithmField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///可提资金算法 + TThostFtdcAlgorithmType WithdrawAlgorithm; + ///资金使用率 + TThostFtdcRatioType UsingRatio; + ///可提是否包含平仓盈利 + TThostFtdcIncludeCloseProfitType IncludeCloseProfit; + ///本日无仓且无成交客户是否受可提比例限制 + TThostFtdcAllWithoutTradeType AllWithoutTrade; + ///可用是否包含平仓盈利 + TThostFtdcIncludeCloseProfitType AvailIncludeCloseProfit; + ///是否启用用户事件 + TThostFtdcBoolType IsBrokerUserEvent; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///货币质押比率 + TThostFtdcRatioType FundMortgageRatio; + ///权益算法 + TThostFtdcBalanceAlgorithmType BalanceAlgorithm; +}; + +///资金账户口令变更域 +struct CThostFtdcTradingAccountPasswordUpdateV1Field +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///原来的口令 + TThostFtdcPasswordType OldPassword; + ///新的口令 + TThostFtdcPasswordType NewPassword; +}; + +///资金账户口令变更域 +struct CThostFtdcTradingAccountPasswordUpdateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///原来的口令 + TThostFtdcPasswordType OldPassword; + ///新的口令 + TThostFtdcPasswordType NewPassword; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///查询组合合约分腿 +struct CThostFtdcQryCombinationLegField +{ + ///组合合约代码 + TThostFtdcInstrumentIDType CombInstrumentID; + ///单腿编号 + TThostFtdcLegIDType LegID; + ///单腿合约代码 + TThostFtdcInstrumentIDType LegInstrumentID; +}; + +///查询组合合约分腿 +struct CThostFtdcQrySyncStatusField +{ + ///交易日 + TThostFtdcDateType TradingDay; +}; + +///组合交易合约的单腿 +struct CThostFtdcCombinationLegField +{ + ///组合合约代码 + TThostFtdcInstrumentIDType CombInstrumentID; + ///单腿编号 + TThostFtdcLegIDType LegID; + ///单腿合约代码 + TThostFtdcInstrumentIDType LegInstrumentID; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///单腿乘数 + TThostFtdcLegMultipleType LegMultiple; + ///派生层数 + TThostFtdcImplyLevelType ImplyLevel; +}; + +///数据同步状态 +struct CThostFtdcSyncStatusField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///数据同步状态 + TThostFtdcDataSyncStatusType DataSyncStatus; +}; + +///查询联系人 +struct CThostFtdcQryLinkManField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; +}; + +///联系人 +struct CThostFtdcLinkManField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///联系人类型 + TThostFtdcPersonTypeType PersonType; + ///证件类型 + TThostFtdcIdCardTypeType IdentifiedCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///名称 + TThostFtdcPartyNameType PersonName; + ///联系电话 + TThostFtdcTelephoneType Telephone; + ///通讯地址 + TThostFtdcAddressType Address; + ///邮政编码 + TThostFtdcZipCodeType ZipCode; + ///优先级 + TThostFtdcPriorityType Priority; + ///开户邮政编码 + TThostFtdcUOAZipCodeType UOAZipCode; + ///全称 + TThostFtdcInvestorFullNameType PersonFullName; +}; + +///查询经纪公司用户事件 +struct CThostFtdcQryBrokerUserEventField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///用户事件类型 + TThostFtdcUserEventTypeType UserEventType; +}; + +///查询经纪公司用户事件 +struct CThostFtdcBrokerUserEventField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///用户事件类型 + TThostFtdcUserEventTypeType UserEventType; + ///用户事件序号 + TThostFtdcSequenceNoType EventSequenceNo; + ///事件发生日期 + TThostFtdcDateType EventDate; + ///事件发生时间 + TThostFtdcTimeType EventTime; + ///用户事件信息 + TThostFtdcUserEventInfoType UserEventInfo; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///查询签约银行请求 +struct CThostFtdcQryContractBankField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分中心代码 + TThostFtdcBankBrchIDType BankBrchID; +}; + +///查询签约银行响应 +struct CThostFtdcContractBankField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分中心代码 + TThostFtdcBankBrchIDType BankBrchID; + ///银行名称 + TThostFtdcBankNameType BankName; +}; + +///投资者组合持仓明细 +struct CThostFtdcInvestorPositionCombineDetailField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///开仓日期 + TThostFtdcDateType OpenDate; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///组合编号 + TThostFtdcTradeIDType ComTradeID; + ///撮合编号 + TThostFtdcTradeIDType TradeID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///买卖 + TThostFtdcDirectionType Direction; + ///持仓量 + TThostFtdcVolumeType TotalAmt; + ///投资者保证金 + TThostFtdcMoneyType Margin; + ///交易所保证金 + TThostFtdcMoneyType ExchMargin; + ///保证金率 + TThostFtdcRatioType MarginRateByMoney; + ///保证金率(按手数) + TThostFtdcRatioType MarginRateByVolume; + ///单腿编号 + TThostFtdcLegIDType LegID; + ///单腿乘数 + TThostFtdcLegMultipleType LegMultiple; + ///组合持仓合约编码 + TThostFtdcInstrumentIDType CombInstrumentID; + ///成交组号 + TThostFtdcTradeGroupIDType TradeGroupID; +}; + +///预埋单 +struct CThostFtdcParkedOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///报单价格条件 + TThostFtdcOrderPriceTypeType OrderPriceType; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///组合开平标志 + TThostFtdcCombOffsetFlagType CombOffsetFlag; + ///组合投机套保标志 + TThostFtdcCombHedgeFlagType CombHedgeFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量 + TThostFtdcVolumeType VolumeTotalOriginal; + ///有效期类型 + TThostFtdcTimeConditionType TimeCondition; + ///GTD日期 + TThostFtdcDateType GTDDate; + ///成交量类型 + TThostFtdcVolumeConditionType VolumeCondition; + ///最小成交量 + TThostFtdcVolumeType MinVolume; + ///触发条件 + TThostFtdcContingentConditionType ContingentCondition; + ///止损价 + TThostFtdcPriceType StopPrice; + ///强平原因 + TThostFtdcForceCloseReasonType ForceCloseReason; + ///自动挂起标志 + TThostFtdcBoolType IsAutoSuspend; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///用户强评标志 + TThostFtdcBoolType UserForceClose; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///预埋报单编号 + TThostFtdcParkedOrderIDType ParkedOrderID; + ///用户类型 + TThostFtdcUserTypeType UserType; + ///预埋单状态 + TThostFtdcParkedOrderStatusType Status; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; + ///互换单标志 + TThostFtdcBoolType IsSwapOrder; +}; + +///输入预埋单操作 +struct CThostFtdcParkedOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///报单操作引用 + TThostFtdcOrderActionRefType OrderActionRef; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量变化 + TThostFtdcVolumeType VolumeChange; + ///用户代码 + TThostFtdcUserIDType UserID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///预埋撤单单编号 + TThostFtdcParkedOrderActionIDType ParkedOrderActionID; + ///用户类型 + TThostFtdcUserTypeType UserType; + ///预埋撤单状态 + TThostFtdcParkedOrderStatusType Status; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///查询预埋单 +struct CThostFtdcQryParkedOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; +}; + +///查询预埋撤单 +struct CThostFtdcQryParkedOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; +}; + +///删除预埋单 +struct CThostFtdcRemoveParkedOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///预埋报单编号 + TThostFtdcParkedOrderIDType ParkedOrderID; +}; + +///删除预埋撤单 +struct CThostFtdcRemoveParkedOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///预埋撤单编号 + TThostFtdcParkedOrderActionIDType ParkedOrderActionID; +}; + +///经纪公司可提资金算法表 +struct CThostFtdcInvestorWithdrawAlgorithmField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///可提资金比例 + TThostFtdcRatioType UsingRatio; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///货币质押比率 + TThostFtdcRatioType FundMortgageRatio; +}; + +///查询组合持仓明细 +struct CThostFtdcQryInvestorPositionCombineDetailField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///组合持仓合约编码 + TThostFtdcInstrumentIDType CombInstrumentID; +}; + +///成交均价 +struct CThostFtdcMarketDataAveragePriceField +{ + ///当日均价 + TThostFtdcPriceType AveragePrice; +}; + +///校验投资者密码 +struct CThostFtdcVerifyInvestorPasswordField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///密码 + TThostFtdcPasswordType Password; +}; + +///用户IP +struct CThostFtdcUserIPField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///IP地址 + TThostFtdcIPAddressType IPAddress; + ///IP地址掩码 + TThostFtdcIPAddressType IPMask; + ///Mac地址 + TThostFtdcMacAddressType MacAddress; +}; + +///用户事件通知信息 +struct CThostFtdcTradingNoticeInfoField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///发送时间 + TThostFtdcTimeType SendTime; + ///消息正文 + TThostFtdcContentType FieldContent; + ///序列系列号 + TThostFtdcSequenceSeriesType SequenceSeries; + ///序列号 + TThostFtdcSequenceNoType SequenceNo; +}; + +///用户事件通知 +struct CThostFtdcTradingNoticeField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///序列系列号 + TThostFtdcSequenceSeriesType SequenceSeries; + ///用户代码 + TThostFtdcUserIDType UserID; + ///发送时间 + TThostFtdcTimeType SendTime; + ///序列号 + TThostFtdcSequenceNoType SequenceNo; + ///消息正文 + TThostFtdcContentType FieldContent; +}; + +///查询交易事件通知 +struct CThostFtdcQryTradingNoticeField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; +}; + +///查询错误报单 +struct CThostFtdcQryErrOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; +}; + +///错误报单 +struct CThostFtdcErrOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///报单价格条件 + TThostFtdcOrderPriceTypeType OrderPriceType; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///组合开平标志 + TThostFtdcCombOffsetFlagType CombOffsetFlag; + ///组合投机套保标志 + TThostFtdcCombHedgeFlagType CombHedgeFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量 + TThostFtdcVolumeType VolumeTotalOriginal; + ///有效期类型 + TThostFtdcTimeConditionType TimeCondition; + ///GTD日期 + TThostFtdcDateType GTDDate; + ///成交量类型 + TThostFtdcVolumeConditionType VolumeCondition; + ///最小成交量 + TThostFtdcVolumeType MinVolume; + ///触发条件 + TThostFtdcContingentConditionType ContingentCondition; + ///止损价 + TThostFtdcPriceType StopPrice; + ///强平原因 + TThostFtdcForceCloseReasonType ForceCloseReason; + ///自动挂起标志 + TThostFtdcBoolType IsAutoSuspend; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///用户强评标志 + TThostFtdcBoolType UserForceClose; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; + ///互换单标志 + TThostFtdcBoolType IsSwapOrder; +}; + +///查询错误报单操作 +struct CThostFtdcErrorConditionalOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///报单价格条件 + TThostFtdcOrderPriceTypeType OrderPriceType; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///组合开平标志 + TThostFtdcCombOffsetFlagType CombOffsetFlag; + ///组合投机套保标志 + TThostFtdcCombHedgeFlagType CombHedgeFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量 + TThostFtdcVolumeType VolumeTotalOriginal; + ///有效期类型 + TThostFtdcTimeConditionType TimeCondition; + ///GTD日期 + TThostFtdcDateType GTDDate; + ///成交量类型 + TThostFtdcVolumeConditionType VolumeCondition; + ///最小成交量 + TThostFtdcVolumeType MinVolume; + ///触发条件 + TThostFtdcContingentConditionType ContingentCondition; + ///止损价 + TThostFtdcPriceType StopPrice; + ///强平原因 + TThostFtdcForceCloseReasonType ForceCloseReason; + ///自动挂起标志 + TThostFtdcBoolType IsAutoSuspend; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///报单提交状态 + TThostFtdcOrderSubmitStatusType OrderSubmitStatus; + ///报单提示序号 + TThostFtdcSequenceNoType NotifySequence; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///报单来源 + TThostFtdcOrderSourceType OrderSource; + ///报单状态 + TThostFtdcOrderStatusType OrderStatus; + ///报单类型 + TThostFtdcOrderTypeType OrderType; + ///今成交数量 + TThostFtdcVolumeType VolumeTraded; + ///剩余数量 + TThostFtdcVolumeType VolumeTotal; + ///报单日期 + TThostFtdcDateType InsertDate; + ///委托时间 + TThostFtdcTimeType InsertTime; + ///激活时间 + TThostFtdcTimeType ActiveTime; + ///挂起时间 + TThostFtdcTimeType SuspendTime; + ///最后修改时间 + TThostFtdcTimeType UpdateTime; + ///撤销时间 + TThostFtdcTimeType CancelTime; + ///最后修改交易所交易员代码 + TThostFtdcTraderIDType ActiveTraderID; + ///结算会员编号 + TThostFtdcParticipantIDType ClearingPartID; + ///序号 + TThostFtdcSequenceNoType SequenceNo; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; + ///状态信息 + TThostFtdcErrorMsgType StatusMsg; + ///用户强评标志 + TThostFtdcBoolType UserForceClose; + ///操作用户代码 + TThostFtdcUserIDType ActiveUserID; + ///经纪公司报单编号 + TThostFtdcSequenceNoType BrokerOrderSeq; + ///相关报单 + TThostFtdcOrderSysIDType RelativeOrderSysID; + ///郑商所成交数量 + TThostFtdcVolumeType ZCETotalTradedVolume; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; + ///互换单标志 + TThostFtdcBoolType IsSwapOrder; +}; + +///查询错误报单操作 +struct CThostFtdcQryErrOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; +}; + +///错误报单操作 +struct CThostFtdcErrOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///报单操作引用 + TThostFtdcOrderActionRefType OrderActionRef; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量变化 + TThostFtdcVolumeType VolumeChange; + ///操作日期 + TThostFtdcDateType ActionDate; + ///操作时间 + TThostFtdcTimeType ActionTime; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///操作本地编号 + TThostFtdcOrderLocalIDType ActionLocalID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///报单操作状态 + TThostFtdcOrderActionStatusType OrderActionStatus; + ///用户代码 + TThostFtdcUserIDType UserID; + ///状态信息 + TThostFtdcErrorMsgType StatusMsg; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///查询交易所状态 +struct CThostFtdcQryExchangeSequenceField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; +}; + +///交易所状态 +struct CThostFtdcExchangeSequenceField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///序号 + TThostFtdcSequenceNoType SequenceNo; + ///合约交易状态 + TThostFtdcInstrumentStatusType MarketStatus; +}; + +///根据价格查询最大报单数量 +struct CThostFtdcQueryMaxOrderVolumeWithPriceField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///开平标志 + TThostFtdcOffsetFlagType OffsetFlag; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///最大允许报单数量 + TThostFtdcVolumeType MaxVolume; + ///报单价格 + TThostFtdcPriceType Price; +}; + +///查询经纪公司交易参数 +struct CThostFtdcQryBrokerTradingParamsField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///经纪公司交易参数 +struct CThostFtdcBrokerTradingParamsField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///保证金价格类型 + TThostFtdcMarginPriceTypeType MarginPriceType; + ///盈亏算法 + TThostFtdcAlgorithmType Algorithm; + ///可用是否包含平仓盈利 + TThostFtdcIncludeCloseProfitType AvailIncludeCloseProfit; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///期权权利金价格类型 + TThostFtdcOptionRoyaltyPriceTypeType OptionRoyaltyPriceType; +}; + +///查询经纪公司交易算法 +struct CThostFtdcQryBrokerTradingAlgosField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///经纪公司交易算法 +struct CThostFtdcBrokerTradingAlgosField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///持仓处理算法编号 + TThostFtdcHandlePositionAlgoIDType HandlePositionAlgoID; + ///寻找保证金率算法编号 + TThostFtdcFindMarginRateAlgoIDType FindMarginRateAlgoID; + ///资金处理算法编号 + TThostFtdcHandleTradingAccountAlgoIDType HandleTradingAccountAlgoID; +}; + +///查询经纪公司资金 +struct CThostFtdcQueryBrokerDepositField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; +}; + +///经纪公司资金 +struct CThostFtdcBrokerDepositField +{ + ///交易日期 + TThostFtdcTradeDateType TradingDay; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///上次结算准备金 + TThostFtdcMoneyType PreBalance; + ///当前保证金总额 + TThostFtdcMoneyType CurrMargin; + ///平仓盈亏 + TThostFtdcMoneyType CloseProfit; + ///期货结算准备金 + TThostFtdcMoneyType Balance; + ///入金金额 + TThostFtdcMoneyType Deposit; + ///出金金额 + TThostFtdcMoneyType Withdraw; + ///可提资金 + TThostFtdcMoneyType Available; + ///基本准备金 + TThostFtdcMoneyType Reserve; + ///冻结的保证金 + TThostFtdcMoneyType FrozenMargin; +}; + +///查询保证金监管系统经纪公司密钥 +struct CThostFtdcQryCFMMCBrokerKeyField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; +}; + +///保证金监管系统经纪公司密钥 +struct CThostFtdcCFMMCBrokerKeyField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///经纪公司统一编码 + TThostFtdcParticipantIDType ParticipantID; + ///密钥生成日期 + TThostFtdcDateType CreateDate; + ///密钥生成时间 + TThostFtdcTimeType CreateTime; + ///密钥编号 + TThostFtdcSequenceNoType KeyID; + ///动态密钥 + TThostFtdcCFMMCKeyType CurrentKey; + ///动态密钥类型 + TThostFtdcCFMMCKeyKindType KeyKind; +}; + +///保证金监管系统经纪公司资金账户密钥 +struct CThostFtdcCFMMCTradingAccountKeyField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///经纪公司统一编码 + TThostFtdcParticipantIDType ParticipantID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///密钥编号 + TThostFtdcSequenceNoType KeyID; + ///动态密钥 + TThostFtdcCFMMCKeyType CurrentKey; +}; + +///请求查询保证金监管系统经纪公司资金账户密钥 +struct CThostFtdcQryCFMMCTradingAccountKeyField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; +}; + +///用户动态令牌参数 +struct CThostFtdcBrokerUserOTPParamField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///动态令牌提供商 + TThostFtdcOTPVendorsIDType OTPVendorsID; + ///动态令牌序列号 + TThostFtdcSerialNumberType SerialNumber; + ///令牌密钥 + TThostFtdcAuthKeyType AuthKey; + ///漂移值 + TThostFtdcLastDriftType LastDrift; + ///成功值 + TThostFtdcLastSuccessType LastSuccess; + ///动态令牌类型 + TThostFtdcOTPTypeType OTPType; +}; + +///手工同步用户动态令牌 +struct CThostFtdcManualSyncBrokerUserOTPField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///动态令牌类型 + TThostFtdcOTPTypeType OTPType; + ///第一个动态密码 + TThostFtdcPasswordType FirstOTP; + ///第二个动态密码 + TThostFtdcPasswordType SecondOTP; +}; + +///投资者手续费率模板 +struct CThostFtdcCommRateModelField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///手续费率模板代码 + TThostFtdcInvestorIDType CommModelID; + ///模板名称 + TThostFtdcCommModelNameType CommModelName; +}; + +///请求查询投资者手续费率模板 +struct CThostFtdcQryCommRateModelField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///手续费率模板代码 + TThostFtdcInvestorIDType CommModelID; +}; + +///投资者保证金率模板 +struct CThostFtdcMarginModelField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///保证金率模板代码 + TThostFtdcInvestorIDType MarginModelID; + ///模板名称 + TThostFtdcCommModelNameType MarginModelName; +}; + +///请求查询投资者保证金率模板 +struct CThostFtdcQryMarginModelField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///保证金率模板代码 + TThostFtdcInvestorIDType MarginModelID; +}; + +///仓单折抵信息 +struct CThostFtdcEWarrantOffsetField +{ + ///交易日期 + TThostFtdcTradeDateType TradingDay; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///数量 + TThostFtdcVolumeType Volume; +}; + +///查询仓单折抵信息 +struct CThostFtdcQryEWarrantOffsetField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///查询投资者品种/跨品种保证金 +struct CThostFtdcQryInvestorProductGroupMarginField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///品种/跨品种标示 + TThostFtdcInstrumentIDType ProductGroupID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; +}; + +///投资者品种/跨品种保证金 +struct CThostFtdcInvestorProductGroupMarginField +{ + ///品种/跨品种标示 + TThostFtdcInstrumentIDType ProductGroupID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///冻结的保证金 + TThostFtdcMoneyType FrozenMargin; + ///多头冻结的保证金 + TThostFtdcMoneyType LongFrozenMargin; + ///空头冻结的保证金 + TThostFtdcMoneyType ShortFrozenMargin; + ///占用的保证金 + TThostFtdcMoneyType UseMargin; + ///多头保证金 + TThostFtdcMoneyType LongUseMargin; + ///空头保证金 + TThostFtdcMoneyType ShortUseMargin; + ///交易所保证金 + TThostFtdcMoneyType ExchMargin; + ///交易所多头保证金 + TThostFtdcMoneyType LongExchMargin; + ///交易所空头保证金 + TThostFtdcMoneyType ShortExchMargin; + ///平仓盈亏 + TThostFtdcMoneyType CloseProfit; + ///冻结的手续费 + TThostFtdcMoneyType FrozenCommission; + ///手续费 + TThostFtdcMoneyType Commission; + ///冻结的资金 + TThostFtdcMoneyType FrozenCash; + ///资金差额 + TThostFtdcMoneyType CashIn; + ///持仓盈亏 + TThostFtdcMoneyType PositionProfit; + ///折抵总金额 + TThostFtdcMoneyType OffsetAmount; + ///多头折抵总金额 + TThostFtdcMoneyType LongOffsetAmount; + ///空头折抵总金额 + TThostFtdcMoneyType ShortOffsetAmount; + ///交易所折抵总金额 + TThostFtdcMoneyType ExchOffsetAmount; + ///交易所多头折抵总金额 + TThostFtdcMoneyType LongExchOffsetAmount; + ///交易所空头折抵总金额 + TThostFtdcMoneyType ShortExchOffsetAmount; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; +}; + +///转帐开户请求 +struct CThostFtdcReqOpenAccountField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///性别 + TThostFtdcGenderType Gender; + ///国家代码 + TThostFtdcCountryCodeType CountryCode; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///地址 + TThostFtdcAddressType Address; + ///邮编 + TThostFtdcZipCodeType ZipCode; + ///电话号码 + TThostFtdcTelephoneType Telephone; + ///手机 + TThostFtdcMobilePhoneType MobilePhone; + ///传真 + TThostFtdcFaxType Fax; + ///电子邮件 + TThostFtdcEMailType EMail; + ///资金账户状态 + TThostFtdcMoneyAccountStatusType MoneyAccountStatus; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///汇钞标志 + TThostFtdcCashExchangeCodeType CashExchangeCode; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///交易ID + TThostFtdcTIDType TID; + ///用户标识 + TThostFtdcUserIDType UserID; +}; + +///转帐销户请求 +struct CThostFtdcReqCancelAccountField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///性别 + TThostFtdcGenderType Gender; + ///国家代码 + TThostFtdcCountryCodeType CountryCode; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///地址 + TThostFtdcAddressType Address; + ///邮编 + TThostFtdcZipCodeType ZipCode; + ///电话号码 + TThostFtdcTelephoneType Telephone; + ///手机 + TThostFtdcMobilePhoneType MobilePhone; + ///传真 + TThostFtdcFaxType Fax; + ///电子邮件 + TThostFtdcEMailType EMail; + ///资金账户状态 + TThostFtdcMoneyAccountStatusType MoneyAccountStatus; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///汇钞标志 + TThostFtdcCashExchangeCodeType CashExchangeCode; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///交易ID + TThostFtdcTIDType TID; + ///用户标识 + TThostFtdcUserIDType UserID; +}; + +///变更银行账户请求 +struct CThostFtdcReqChangeAccountField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///性别 + TThostFtdcGenderType Gender; + ///国家代码 + TThostFtdcCountryCodeType CountryCode; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///地址 + TThostFtdcAddressType Address; + ///邮编 + TThostFtdcZipCodeType ZipCode; + ///电话号码 + TThostFtdcTelephoneType Telephone; + ///手机 + TThostFtdcMobilePhoneType MobilePhone; + ///传真 + TThostFtdcFaxType Fax; + ///电子邮件 + TThostFtdcEMailType EMail; + ///资金账户状态 + TThostFtdcMoneyAccountStatusType MoneyAccountStatus; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///新银行帐号 + TThostFtdcBankAccountType NewBankAccount; + ///新银行密码 + TThostFtdcPasswordType NewBankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易ID + TThostFtdcTIDType TID; + ///摘要 + TThostFtdcDigestType Digest; +}; + +///转账请求 +struct CThostFtdcReqTransferField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///期货公司流水号 + TThostFtdcFutureSerialType FutureSerial; + ///用户标识 + TThostFtdcUserIDType UserID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///转帐金额 + TThostFtdcTradeAmountType TradeAmount; + ///期货可取金额 + TThostFtdcTradeAmountType FutureFetchAmount; + ///费用支付标志 + TThostFtdcFeePayFlagType FeePayFlag; + ///应收客户费用 + TThostFtdcCustFeeType CustFee; + ///应收期货公司费用 + TThostFtdcFutureFeeType BrokerFee; + ///发送方给接收方的消息 + TThostFtdcAddInfoType Message; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///转账交易状态 + TThostFtdcTransferStatusType TransferStatus; +}; + +///银行发起银行资金转期货响应 +struct CThostFtdcRspTransferField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///期货公司流水号 + TThostFtdcFutureSerialType FutureSerial; + ///用户标识 + TThostFtdcUserIDType UserID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///转帐金额 + TThostFtdcTradeAmountType TradeAmount; + ///期货可取金额 + TThostFtdcTradeAmountType FutureFetchAmount; + ///费用支付标志 + TThostFtdcFeePayFlagType FeePayFlag; + ///应收客户费用 + TThostFtdcCustFeeType CustFee; + ///应收期货公司费用 + TThostFtdcFutureFeeType BrokerFee; + ///发送方给接收方的消息 + TThostFtdcAddInfoType Message; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///转账交易状态 + TThostFtdcTransferStatusType TransferStatus; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///冲正请求 +struct CThostFtdcReqRepealField +{ + ///冲正时间间隔 + TThostFtdcRepealTimeIntervalType RepealTimeInterval; + ///已经冲正次数 + TThostFtdcRepealedTimesType RepealedTimes; + ///银行冲正标志 + TThostFtdcBankRepealFlagType BankRepealFlag; + ///期商冲正标志 + TThostFtdcBrokerRepealFlagType BrokerRepealFlag; + ///被冲正平台流水号 + TThostFtdcPlateSerialType PlateRepealSerial; + ///被冲正银行流水号 + TThostFtdcBankSerialType BankRepealSerial; + ///被冲正期货流水号 + TThostFtdcFutureSerialType FutureRepealSerial; + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///期货公司流水号 + TThostFtdcFutureSerialType FutureSerial; + ///用户标识 + TThostFtdcUserIDType UserID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///转帐金额 + TThostFtdcTradeAmountType TradeAmount; + ///期货可取金额 + TThostFtdcTradeAmountType FutureFetchAmount; + ///费用支付标志 + TThostFtdcFeePayFlagType FeePayFlag; + ///应收客户费用 + TThostFtdcCustFeeType CustFee; + ///应收期货公司费用 + TThostFtdcFutureFeeType BrokerFee; + ///发送方给接收方的消息 + TThostFtdcAddInfoType Message; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///转账交易状态 + TThostFtdcTransferStatusType TransferStatus; +}; + +///冲正响应 +struct CThostFtdcRspRepealField +{ + ///冲正时间间隔 + TThostFtdcRepealTimeIntervalType RepealTimeInterval; + ///已经冲正次数 + TThostFtdcRepealedTimesType RepealedTimes; + ///银行冲正标志 + TThostFtdcBankRepealFlagType BankRepealFlag; + ///期商冲正标志 + TThostFtdcBrokerRepealFlagType BrokerRepealFlag; + ///被冲正平台流水号 + TThostFtdcPlateSerialType PlateRepealSerial; + ///被冲正银行流水号 + TThostFtdcBankSerialType BankRepealSerial; + ///被冲正期货流水号 + TThostFtdcFutureSerialType FutureRepealSerial; + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///期货公司流水号 + TThostFtdcFutureSerialType FutureSerial; + ///用户标识 + TThostFtdcUserIDType UserID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///转帐金额 + TThostFtdcTradeAmountType TradeAmount; + ///期货可取金额 + TThostFtdcTradeAmountType FutureFetchAmount; + ///费用支付标志 + TThostFtdcFeePayFlagType FeePayFlag; + ///应收客户费用 + TThostFtdcCustFeeType CustFee; + ///应收期货公司费用 + TThostFtdcFutureFeeType BrokerFee; + ///发送方给接收方的消息 + TThostFtdcAddInfoType Message; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///转账交易状态 + TThostFtdcTransferStatusType TransferStatus; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///查询账户信息请求 +struct CThostFtdcReqQueryAccountField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///期货公司流水号 + TThostFtdcFutureSerialType FutureSerial; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; +}; + +///查询账户信息响应 +struct CThostFtdcRspQueryAccountField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///期货公司流水号 + TThostFtdcFutureSerialType FutureSerial; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///银行可用金额 + TThostFtdcTradeAmountType BankUseAmount; + ///银行可取金额 + TThostFtdcTradeAmountType BankFetchAmount; +}; + +///期商签到签退 +struct CThostFtdcFutureSignIOField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///摘要 + TThostFtdcDigestType Digest; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; +}; + +///期商签到响应 +struct CThostFtdcRspFutureSignInField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///摘要 + TThostFtdcDigestType Digest; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; + ///PIN密钥 + TThostFtdcPasswordKeyType PinKey; + ///MAC密钥 + TThostFtdcPasswordKeyType MacKey; +}; + +///期商签退请求 +struct CThostFtdcReqFutureSignOutField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///摘要 + TThostFtdcDigestType Digest; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; +}; + +///期商签退响应 +struct CThostFtdcRspFutureSignOutField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///摘要 + TThostFtdcDigestType Digest; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///查询指定流水号的交易结果请求 +struct CThostFtdcReqQueryTradeResultBySerialField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///流水号 + TThostFtdcSerialType Reference; + ///本流水号发布者的机构类型 + TThostFtdcInstitutionTypeType RefrenceIssureType; + ///本流水号发布者机构编码 + TThostFtdcOrganCodeType RefrenceIssure; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///转帐金额 + TThostFtdcTradeAmountType TradeAmount; + ///摘要 + TThostFtdcDigestType Digest; +}; + +///查询指定流水号的交易结果响应 +struct CThostFtdcRspQueryTradeResultBySerialField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; + ///流水号 + TThostFtdcSerialType Reference; + ///本流水号发布者的机构类型 + TThostFtdcInstitutionTypeType RefrenceIssureType; + ///本流水号发布者机构编码 + TThostFtdcOrganCodeType RefrenceIssure; + ///原始返回代码 + TThostFtdcReturnCodeType OriginReturnCode; + ///原始返回码描述 + TThostFtdcDescrInfoForReturnCodeType OriginDescrInfoForReturnCode; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///转帐金额 + TThostFtdcTradeAmountType TradeAmount; + ///摘要 + TThostFtdcDigestType Digest; +}; + +///日终文件就绪请求 +struct CThostFtdcReqDayEndFileReadyField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///文件业务功能 + TThostFtdcFileBusinessCodeType FileBusinessCode; + ///摘要 + TThostFtdcDigestType Digest; +}; + +///返回结果 +struct CThostFtdcReturnResultField +{ + ///返回代码 + TThostFtdcReturnCodeType ReturnCode; + ///返回码描述 + TThostFtdcDescrInfoForReturnCodeType DescrInfoForReturnCode; +}; + +///验证期货资金密码 +struct CThostFtdcVerifyFuturePasswordField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///交易ID + TThostFtdcTIDType TID; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///验证客户信息 +struct CThostFtdcVerifyCustInfoField +{ + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; +}; + +///验证期货资金密码和客户信息 +struct CThostFtdcVerifyFuturePasswordAndCustInfoField +{ + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///验证期货资金密码和客户信息 +struct CThostFtdcDepositResultInformField +{ + ///出入金流水号,该流水号为银期报盘返回的流水号 + TThostFtdcDepositSeqNoType DepositSeqNo; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///入金金额 + TThostFtdcMoneyType Deposit; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///返回代码 + TThostFtdcReturnCodeType ReturnCode; + ///返回码描述 + TThostFtdcDescrInfoForReturnCodeType DescrInfoForReturnCode; +}; + +///交易核心向银期报盘发出密钥同步请求 +struct CThostFtdcReqSyncKeyField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///交易核心给银期报盘的消息 + TThostFtdcAddInfoType Message; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; +}; + +///交易核心向银期报盘发出密钥同步响应 +struct CThostFtdcRspSyncKeyField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///交易核心给银期报盘的消息 + TThostFtdcAddInfoType Message; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///查询账户信息通知 +struct CThostFtdcNotifyQueryAccountField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///期货公司流水号 + TThostFtdcFutureSerialType FutureSerial; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///银行可用金额 + TThostFtdcTradeAmountType BankUseAmount; + ///银行可取金额 + TThostFtdcTradeAmountType BankFetchAmount; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///银期转账交易流水表 +struct CThostFtdcTransferSerialField +{ + ///平台流水号 + TThostFtdcPlateSerialType PlateSerial; + ///交易发起方日期 + TThostFtdcTradeDateType TradeDate; + ///交易日期 + TThostFtdcDateType TradingDay; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///交易代码 + TThostFtdcTradeCodeType TradeCode; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///银行编码 + TThostFtdcBankIDType BankID; + ///银行分支机构编码 + TThostFtdcBankBrchIDType BankBranchID; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///期货公司编码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///期货公司帐号类型 + TThostFtdcFutureAccTypeType FutureAccType; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///期货公司流水号 + TThostFtdcFutureSerialType FutureSerial; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///交易金额 + TThostFtdcTradeAmountType TradeAmount; + ///应收客户费用 + TThostFtdcCustFeeType CustFee; + ///应收期货公司费用 + TThostFtdcFutureFeeType BrokerFee; + ///有效标志 + TThostFtdcAvailabilityFlagType AvailabilityFlag; + ///操作员 + TThostFtdcOperatorCodeType OperatorCode; + ///新银行帐号 + TThostFtdcBankAccountType BankNewAccount; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///请求查询转帐流水 +struct CThostFtdcQryTransferSerialField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///银行编码 + TThostFtdcBankIDType BankID; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///期商签到通知 +struct CThostFtdcNotifyFutureSignInField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///摘要 + TThostFtdcDigestType Digest; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; + ///PIN密钥 + TThostFtdcPasswordKeyType PinKey; + ///MAC密钥 + TThostFtdcPasswordKeyType MacKey; +}; + +///期商签退通知 +struct CThostFtdcNotifyFutureSignOutField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///摘要 + TThostFtdcDigestType Digest; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///交易核心向银期报盘发出密钥同步处理结果的通知 +struct CThostFtdcNotifySyncKeyField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///交易核心给银期报盘的消息 + TThostFtdcAddInfoType Message; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///请求查询银期签约关系 +struct CThostFtdcQryAccountregisterField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///银行编码 + TThostFtdcBankIDType BankID; + ///银行分支机构编码 + TThostFtdcBankBrchIDType BankBranchID; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///客户开销户信息表 +struct CThostFtdcAccountregisterField +{ + ///交易日期 + TThostFtdcTradeDateType TradeDay; + ///银行编码 + TThostFtdcBankIDType BankID; + ///银行分支机构编码 + TThostFtdcBankBrchIDType BankBranchID; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///期货公司编码 + TThostFtdcBrokerIDType BrokerID; + ///期货公司分支机构编码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///开销户类别 + TThostFtdcOpenOrDestroyType OpenOrDestroy; + ///签约日期 + TThostFtdcTradeDateType RegDate; + ///解约日期 + TThostFtdcTradeDateType OutDate; + ///交易ID + TThostFtdcTIDType TID; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; +}; + +///银期开户信息 +struct CThostFtdcOpenAccountField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///性别 + TThostFtdcGenderType Gender; + ///国家代码 + TThostFtdcCountryCodeType CountryCode; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///地址 + TThostFtdcAddressType Address; + ///邮编 + TThostFtdcZipCodeType ZipCode; + ///电话号码 + TThostFtdcTelephoneType Telephone; + ///手机 + TThostFtdcMobilePhoneType MobilePhone; + ///传真 + TThostFtdcFaxType Fax; + ///电子邮件 + TThostFtdcEMailType EMail; + ///资金账户状态 + TThostFtdcMoneyAccountStatusType MoneyAccountStatus; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///汇钞标志 + TThostFtdcCashExchangeCodeType CashExchangeCode; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///交易ID + TThostFtdcTIDType TID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///银期销户信息 +struct CThostFtdcCancelAccountField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///性别 + TThostFtdcGenderType Gender; + ///国家代码 + TThostFtdcCountryCodeType CountryCode; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///地址 + TThostFtdcAddressType Address; + ///邮编 + TThostFtdcZipCodeType ZipCode; + ///电话号码 + TThostFtdcTelephoneType Telephone; + ///手机 + TThostFtdcMobilePhoneType MobilePhone; + ///传真 + TThostFtdcFaxType Fax; + ///电子邮件 + TThostFtdcEMailType EMail; + ///资金账户状态 + TThostFtdcMoneyAccountStatusType MoneyAccountStatus; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///汇钞标志 + TThostFtdcCashExchangeCodeType CashExchangeCode; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///交易ID + TThostFtdcTIDType TID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///银期变更银行账号信息 +struct CThostFtdcChangeAccountField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///性别 + TThostFtdcGenderType Gender; + ///国家代码 + TThostFtdcCountryCodeType CountryCode; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///地址 + TThostFtdcAddressType Address; + ///邮编 + TThostFtdcZipCodeType ZipCode; + ///电话号码 + TThostFtdcTelephoneType Telephone; + ///手机 + TThostFtdcMobilePhoneType MobilePhone; + ///传真 + TThostFtdcFaxType Fax; + ///电子邮件 + TThostFtdcEMailType EMail; + ///资金账户状态 + TThostFtdcMoneyAccountStatusType MoneyAccountStatus; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///新银行帐号 + TThostFtdcBankAccountType NewBankAccount; + ///新银行密码 + TThostFtdcPasswordType NewBankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易ID + TThostFtdcTIDType TID; + ///摘要 + TThostFtdcDigestType Digest; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///二级代理操作员银期权限 +struct CThostFtdcSecAgentACIDMapField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///资金账户 + TThostFtdcAccountIDType AccountID; + ///币种 + TThostFtdcCurrencyIDType CurrencyID; + ///境外中介机构资金帐号 + TThostFtdcAccountIDType BrokerSecAgentID; +}; + +///二级代理操作员银期权限查询 +struct CThostFtdcQrySecAgentACIDMapField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///资金账户 + TThostFtdcAccountIDType AccountID; + ///币种 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///灾备中心交易权限 +struct CThostFtdcUserRightsAssignField +{ + ///应用单元代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///交易中心代码 + TThostFtdcDRIdentityIDType DRIdentityID; +}; + +///经济公司是否有在本标示的交易权限 +struct CThostFtdcBrokerUserRightAssignField +{ + ///应用单元代码 + TThostFtdcBrokerIDType BrokerID; + ///交易中心代码 + TThostFtdcDRIdentityIDType DRIdentityID; + ///能否交易 + TThostFtdcBoolType Tradeable; +}; + +///灾备交易转换报文 +struct CThostFtdcDRTransferField +{ + ///原交易中心代码 + TThostFtdcDRIdentityIDType OrigDRIdentityID; + ///目标交易中心代码 + TThostFtdcDRIdentityIDType DestDRIdentityID; + ///原应用单元代码 + TThostFtdcBrokerIDType OrigBrokerID; + ///目标易用单元代码 + TThostFtdcBrokerIDType DestBrokerID; +}; + +///Fens用户信息 +struct CThostFtdcFensUserInfoField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///登录模式 + TThostFtdcLoginModeType LoginMode; +}; + +///当前银期所属交易中心 +struct CThostFtdcCurrTransferIdentityField +{ + ///交易中心代码 + TThostFtdcDRIdentityIDType IdentityID; +}; + +///禁止登录用户 +struct CThostFtdcLoginForbiddenUserField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///查询禁止登录用户 +struct CThostFtdcQryLoginForbiddenUserField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///UDP组播组信息 +struct CThostFtdcMulticastGroupInfoField +{ + ///组播组IP地址 + TThostFtdcIPAddressType GroupIP; + ///组播组IP端口 + TThostFtdcIPPortType GroupPort; + ///源地址 + TThostFtdcIPAddressType SourceIP; +}; + +///资金账户基本准备金 +struct CThostFtdcTradingAccountReserveField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///基本准备金 + TThostFtdcMoneyType Reserve; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + + + +#endif diff --git a/vn.ctp/ctpapi/error.dtd b/vn.ctp/ctpapi/error.dtd new file mode 100644 index 00000000..15e50b73 --- /dev/null +++ b/vn.ctp/ctpapi/error.dtd @@ -0,0 +1,9 @@ + + + + + diff --git a/vn.ctp/ctpapi/error.xml b/vn.ctp/ctpapi/error.xml new file mode 100644 index 00000000..419c018d --- /dev/null +++ b/vn.ctp/ctpapi/error.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vn.ctp/ctpapi/thostmduserapi.dll b/vn.ctp/ctpapi/thostmduserapi.dll new file mode 100644 index 0000000000000000000000000000000000000000..c7402a3538be8630f00a8a6d5c13efd2a06917f1 GIT binary patch literal 610304 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 z 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
  • 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 z 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

    y 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 literal 0 HcmV?d00001 diff --git a/vn.ctp/ctpapi/thostmduserapi.lib b/vn.ctp/ctpapi/thostmduserapi.lib new file mode 100644 index 0000000000000000000000000000000000000000..2321240527242d8193b9e274bfdcebfc444fa656 GIT binary patch literal 3386 zcmcIm-EI;=6#jrB?UtCPdSi^q+SC*iLxHkD6C=B{HIh<_KpW%Df`FE!4TRFGUf2il zA$q~Buh7((^bNf5!Uymv>Y3dceq?`GV<(xvvuDrwX68F*=IP6NuW|HBT9+qFJQ<5A z=}jfEF)5GnsiLI$s3rlp4+Jwn=mMC(0v1=y8jb+cfLED%s*9Iq4U;@P(DnRYX}?_6 zw|6RA<$S5SU)K9aozwnF^X#5vz39%x?8s^?qx#QB$@nT1h*MtEJqwUW|`Wdj8Kl(^8v5rY!)-1c8eX za5WFCECP`*Fdz=fR4-{hpgGYIA>6|p=CJ@D{KHw0<^kK|6B}oDM8q5i&dhQo|FY5l z9wCAN&Qx;N@)9lXL=(Pj;);Lv%qq83Ag%wE;N0?CT#!z#Nt0pl(&DMvrPpcJk3gl_|A=COmF4M$M(|*XVvRz^EDY}2&GKHm(d(Rc zKKA8E`MF%k7kByh$&Mn?_>)-x1tSZ}C2A>xX*BJPAT>HCUBbS0bB^0v;g|i%3Ipqh z*a8(W;2#Nzu~>#QAS6kqLjnwSl#ztV*I2^~vrY(%)@=N!(cmtxD9=1fD4Ah4EcpBe zkG>H|6TCH#n&xVT?HG?Xgpl#$tC;Yf@rc>IGk(l++D{08?F+zb6ec#sb7mBUzsP~p z?m0xE!Z*sGHjBdXG8TnNA!kJXDJHzXlU<%=XIBY;d*1Yz=hAUbPs*DxLb%{#xy~fo zoa@bNkrX_~NGfHGAxaDO(OEg%?iTL7a?HuQ-|%kxD*X@M(~9-l)3o-0;obd?wt(UN q43gG3UJ#Bsx&X3Sn-_qEbFU|m8N0j3Ik-cnUeFG{tfM zgeT74>RkB5*^4`_TOC-r>W05tbst9+{d@h&HT)jEYtqWzFFRM3m{+gd zrOP{3UajBXu<}OzyKZH_{=HfMHeL6*4r%jbBM8rTI2Jm`Io=MgYtEK=-cfS)B&W;a z*y08OI^naiEu;Y&7qaXea_rPh`0E}7qyx8a0#(49+FEbv2OU9ak zFIyqtaD3*xRo7kb^QN4yO`tJvQxS9FdhaczXktMuK&DM zt5;evW8i%ZypMtR zG4MVH-p9cE7{KH1YBJJ++VKiqNn zdv33~{KAQj#7M0*;2Okhza!5qr?oifx9W_h^uFHy_!XUQ z4Q^tmVa^L0z5S_qLA^VT`K^V)0APb@ zo>omEhP^Q8y4IX5JzdGzx4Siz0;&C9t93+4>9@d{Gd7`B?bY*PScCS6cy2f;lq##B zPbu)Dq5}5(T4k0?=GfmclTy*v^i$T=!9ZfCyZ2!CbZdrH(otrYNA8ko4vd1 zVxcE5<*O*)RxlO1QHGMNH^Qm1*#MNDUO^c>^!)gq_=Gf&MSz}fYcOgZONO1v%N(0s ziGF9#?)cHl?OcS_YZvI!=6GwbwNKtV`$`f6&ct?SPk;P1Mkyfs%ms#dh098{w~d|v zYmQL_qBX}=bf0oA1kj;>o;%T=I6W2eNPUS%xmoiU0i8$R9(p$thupop*LZ4nN7NL% z9J8<^u`6A(|LBp#h;#LyL8&*)Vlki{pU{e0K4+q%BQODy;%S7(F5PK*RtAo27mUzo z4MRl#Muk+F6v~p0F47DkxB$Ag%@ zD~weWtQLp4IOrQT%ZubaRy{W<1gD z_nP&-Ri)P7I|hvk$Fg<+S-Ra-Ozu_SPC-L5UHyPI9;SXBv{;l`?;0HfA`l9vtQ$tU^6nbj)l&$Zvf+`0>2iBA( zXMP~r=zT0V~b=(=w1_#SaPMR=KTKqe(qwQ*);yRqq!YTdH1D zL#Jb~-f*ZAm}Yj~v%k!U3#MdLZXXyak;URox_f2dl}CE}yWNqdNUQp>4J^~K1O9m= z(;ur)U1RrG)1T>&`Rl7U3KwnS=Ad_#Va@UGNb+ybo=9^`YqX=f$Llp&S1ISUdKqih za7F`9t<^?owd*FA8i6!ekJh>R>3Ub~dgG>X>II(m9*h~G-^IqMUvU#Uy1J$JV0@g~ zB{!>GtH!BqT*<<%EsJ^VCqLu~JZShQ*2TKD1+GNOm25OB2N*QN^p^IQ_J6MvP&G^-PZj=!21@tWPfRUWI}XouLc&A?rY zZkr8zaVOgh=CPE8ydzrrtENa;mCv?mSk^5Kl~|__8X-px9(#;Tw{_%%7G%63wd#Cf z51B@-R$uA9(64SfL!QwVqxXd?hpE0-J;NH4LAo4TNZBL3_}uJB%dJLVL`M4i<9ei* z+WoCM6L8BJ>MNO{(yE4Tu+$-KF_0F9(SnrCvY!)%F^c8*)cO$ZtTH${@?q zp%f!VVi_W_g1lNRuhh5csiSJ5mRLcNSQTBej26LS^23nsvg zhzdm2qo@@%{hjIDJcJV|cV-%xkSH?|WF}OcHKHfMo1KLA!db`zz?|9gay834RVE-7 zUraA=(lVYOGSz=a28`ojRIUoYb|3ZiJjKT{Nc3^$x@#gFxMLGX0-?#hLM3OaY(c;gnRG)Jjx#fd%gQ( zL95=a<#uS-YQKPqa&1jDy@`H9FwV@fY8i$r^bCFfN3HG!nb69*^T}j;AUC0NDVOPw z^%W{uUpduEFEC$rfz=#Lm5Jn@b;c58cKo7@u$+lD-sx4>eN0n9Xh&?4xx_G+xXdMP z+2*jO%jq%w9TCEV-Fl(uh*poY%@2bma|A5-@|sz6-iHDNI&|8Ah+y8c(yl2Zyw*kJ}aHBi=W-$aJU@m z*B=IByR5Q1H@zUP@6zos-2tTL!dnbBOpAkV>mqB{zz{ox+YD*KVa^_~nhbOCfRQM3 zvR44B&8^8RjcAIs?r_w+WgWN1vrp!>WrSJZUei?#z5Q9qmvx=jA~v4CpH_s3_a|MruSQWmz%fD zq$l+V#jX1CusZZ1MoNjP)&XlSECF^RyV>q@xA5A2(c}&{OXV41Yi>oewKu)beopa} zGrcb~()G(`)u-V$+S_XSm)amgPaTEyg!We;G5lGAf_jrHT%GAKn}+iA^aiF!7OX%$ z)tc+7Nz1CC%N*#2fZkXhQRj~aT?1bA{|5KI1&n`@2-OU2)btD6%hT4fEOCj72CzVy zfwH?ACYY%u8^mIA6M1zs|0=EB4iyn)I#N zgH{avkJZ|JUPth5x3}XyK<{`1F46H_5#$R|PSkE;4YKKf5bZ6o(^u2qC#)~n8bx^2 zGYKLzr$YKoCmn{Ux*#WZk&K(}tf{hXsbCX3*9{7wb!%$VUqA!(>Cv5I1MH)zRE*R7 zE)3 zwYp{Iv|Q*cHU*h*4?6U6Q$GjP-rX^mtUzxR)K1EhIpQO~G_oth9s=-Gocq`Gv%f;` zu}|3~4Z&GWzHoX!rkJy=@vJyu+ZV{v95r2_dEzY!2C60Pm7Q zcng?QPM^1zgR5vcRI^_RJq70U276Til5*upN`qLW&hHSTiC!={azIKn!K>9(1QN+x zElC#NW-q6dv0Y{)QSWmWwX6qJ+;ZV)G(AdV5a7TnU#CF`feNu>yEcx_`6b(^_SE_seDB?Q00s%Z3u2G&nQaq(FtnZ*Rd8vZn^{!!6VuMW-x$m-^ZkmVns z090&$ll7$N=O+5Cdh)GwdSka6Oo(Rdgi}DAz8u+Gk5WC5=L{k={cN-g$Yl@uthNZ) zutx#D`$8eYCn|S^8vR`#(?FkLum8CQOh*HaCIqC*L{nwozE{lhJhJIr_Rd2yVM3a{I;mO)}xtrG+4sFWj~tRHs5xZP+Hb}tnD*y+lIj|&9G*m zPrFNxmF`PcofUfNrU~q=0%pD28WBu1hoj2Enhm8o+qAh@8!fOOi9Vze!F(^x&v)^1 z$?5~gWK^BL)cB1o5wqQ`{J?}26PH3P80dYA>DGEd?CfUqOjTX30XFN6R6VhYVh(Vp z>NRzubiZY;G0ZiA7fDKZGprG{C3=7&;IlMWq)8I;G)v@Ugr%`$cE>DjTE z-7XqsU0Zt@#cr$FrJFWC&5q!5m-;*#0!CD@z=hb{qlk?e7X7{v`=fSmxI-h|Sgf5l zyDL-X9GTC=T9;!(U5nM>WjA+jbE;0`&1y3+GETED#l+ct#zYkIwfu$pmdcJ+y8#T) z?8;tdo(Mr%mq};rk4r(X?R=OK+TK-SZ8yuTIqsYtMH3%?B1t1C9v?#(uG$8(IC|jp ze(cK`gQLI?+11fx_jK%`$Tw9%DSJ@8{Tp5>X3?$IjRq9r6w-;E8AX3LtZr;Z4?rcY z>OM^?uHLkDH2x>8s|x+^qP;x*+vJorYJg;8>sh_Sk)uNcZ;!XO52&+Bw_n%41#qpW zD)+^zt${leFO-&w`BV8>BPvSHI<&9 zZM?h6;Y|m7zsAqjv%ts>=|7@w0z$|?(OzVSHhOG1#DYcP*|G+z^H%7%blQDtv-&CY zDo)XzM(Fp+`^)|w^mPsWT;@D9+F`d!z{vRvDf#uTgpa*4}x&1ph{ zz8&yA*&79TJA=2pS(bSt1>FDo^?MfOXqm)734p%ot~GWJm)`mpV7rH91cwv%47q^aA7e{Ie4uanzj zQ)PF3ALGRIjI3ZV3uN_U|E*ce7_wSA1p5X!wgzerJ|eAHuRSPC z7bkMt(zr_#HwzyJm|^W2`U*{HDD!`|N~Jvc?`iF<$b-aMyj6O~tbFTaBe_Sel3)d;~$NFp@y9N zT&^e3IkuGyRmVaaaBz(I;dR9%#LcrotwR-+Wh=`&5LCG)U? ztrYdCjmuJf1=qgS>e5X%W!gNh-Ti*y8i_}V%BT)?uJqixhWb$KvMV8@Eq4LNHT=6N z^UvZpJHbWc=^H(s=k<6-WIW3l&s`VT<9P?T0aUfyEMs_%jOQKT1}4>+c~~Xmd52+( zBe*y7@Kljk@?7vCFJ^1--9kGV@H>~}Io0#P{^bMP*<-)vc_30^U+%|%y4-|J9@uXkuN(=zz1%$C zoa62~&AM4E!sC{QJ{d1H=Xgu^nGv@b2x8yQS?ct9^oo7lHUt=Y{f5>33{cDL>x)$Y zJfm7!aM{X<z8st9qn-J%x+aXKim#gsr5?X8u64!UA3*<4rl``Ou#zBDZ^F{kg1& z_{f3YYIl{k8=eOaC%a}Cq2sGuwx!PHSPp%9mk*>|%Ln>h%hAbv%Mo2OsO&RKsNSBO zYa|!XFxnV#kx!ly!lqo{hf7>58qsEi2Zq`pgBZvgQ-DVbNqHHl3wHJ}gjiTa9`oM7 zz22n0X}>H)f$$qYk8}Lyxl@Yx4fPG+MeK*s!x)lW0XgD zX{b+Y(vxR`FKOSU@!N0`{L1s8H?#ItDX$9QX&eR5K+W!y<9h0t4G>j>%WQBLPMOdP zAwDL|Ud*%U{mW%H43f}(#XM9vc7cz0lhho2sK{Wh;pZrh$1nB9!$f&S&8dRJ^x zs-Dp}9J*P%6GOHz>HS!2UG3UnMJ3TG^xHajliW06@9FLDG7|M}F=XeVuvJ=kjJO_{ zqAteX+rPdHQv-5ODEF}m@VGK|oMMT&*I7*N(5K*H=o3_v;n?(Ch`%Y*ismyS1c6j@ z2R%KHpx?>%*jnPk8PBaLaMSyixzZIYMa-F(5@{noi_49er*@7jKF++-HS9L8 zbPtagw3t_wTPt0Q(yy~ni-ig|%^!Ff+R-ka;05+WvrWjZAS^KDyn`_$28gq9NpZi4qg8VAlK9FQ`|fmQq^XQOHlWO)lam>=#sizc6LUL-+mPTY7Hn3*vS=hmY(107m*JC(=KPMyE_0&+} zm}~Voy{8C01#zsNx=j~45*l1n21_fqp0d8+F5QlNRDoYX-_S^ zh^i*SJa5cYzEso%g3Br@kCYykUW`mH-k6)vt0vW87bH^2Z9QqdSJQ9z0!(&n!JCux zL^{`ren6<{GPBvh=2PIimK7!PuwJ-gZM|#F_)e#?v?7K12eTb4KeeW$as*MAnEjw5 z?!_SWFwLS@vt==jheZ1{w)Xb7#{!@R&xh%?B8G`9L!k+a9>w~{5o9)a6ZPKFvQ7F& z@z5Xy0eX_vfZsKUgWZS0B8tfXH=kh}RNZ13;Ga)skALNAt`NXYzQka<)p}CRTvXx^ z*SxP#S)hH<nN9#@MnhbJx#IJIR=dIH=oG`=IzRN4J3D)puDL_pLVx+%eV zw~MVm%ep+@(v2r_e9hz&bD&r-f*Yxv;=dxrmtGO!= zhhA%2KTbau)n8K{lMQLfwxFC@Tfw}fh@|4bjNX;8$qI5cVDO*QKc2JqM^54o7L6|N zZh%T>fCWJpieYa*7?rRo+XgJ+Ex=}paPlpXy2M#ndqr?{`&3$JzsT;(VlPnUz$f@Y zz&dwW5npN8U{D~43x*BCfOz!yyT=LcY}+x_nGY}c_c}IA5XI9i-jSjSfJQU>1D9Pf zuS!aFTi*uEoIXFrRm87}8gV`>%zqAH4?cA+McHEr$y)=`k^Ock&huP*9WrbL1iBy! z58BRD+rNSGjS)NS7DES9n=8MSSJqh6!XKao&jXMF67jlzg|Dh~pfg}L`b3_#&FgFPs$ZAMsKl#}c&BDnY3zd%J^|G{ z_5pDj)M9Yc=nlMhxqHpuqs#!jJbPN6DSb!>#{dTp z_`i=O4)(CE)#p3n=crBiR{`WSkX#VA(GVHL8DzW8WkWgY0Ey^JvkKSWZAKCOCk}Zj zLKDu+_}JOud&LLJ!VatX=VxmN>JL`J){J8>qfNT}6DoYYg_l7{gfWE+8Nq*a$Z z6kl^ycIn78RY|ZTFk~p9Ax8-fLJ19FO$iM^IM1epd3j10$@i+Ab|K7Mvj!jxJO$c3Sa34aHQA`W&R@FiYTO5TF{>GRRkh>A+9d< z_r%Q>6%lxd6y?>IWJ{T3NozWXqr1KnQ&o`L}-TETV7d?|7d6B4hhMC8FC~^Kwf|OR6kD&sj!XE|M7M zWa=S_0y+AEXUl-ZuN{4M(yoZQW*XMDbK|4h`k0Htv8ZBlm1;vV++&jHgyoGD7>hEVyz0hMbVXAVZEzse8#UVF@yHP z5c^IpR#jja)qkSfC*sK!pJBC@H?eVpN91ctq?F&BQ*OU2dU3Mx)cZu8BSJ{@9+x>4 zJChkPP+GL=f{N$HG=OcE@EkLOyz$Yt)j-#c1lCFTkZqB|d=;wq#u}iRXwukd&EAwW zHqoNnthLq}CYI8*F7sv=wk7js8b#Z8g9Pfh+Pg~8AM%LIw8!Y|_H9F07W~op03h@? zHUhCzZGKwojhBfH3NBJtjwbeM2C~X%hTnD@N%zKD-&d0EuTWAHA2#|)3)jKqYp0wI6&eL2WSs!<>zViAHWGk#Y-R+!!g8~$g)jIs@GX8rfgxiUwl zTx6Ac-hV9jzKj_$OqX3oB5s-RWP`|8;X!U|nmIMg7qa~e{fQydoWPHHnGwo`MZ`{x zihW~NSl#ok9wNclRx18VyR0wuFZQ#H@}3`$c#PSqhpp;pa@|5J9ZFlW=TTR>Id1f3 z?849*gTqIca|f)x+D2D=y8UPtk21>t;H68P_QP|e+=asri7CiN5&Wm3I=>%adsh&F zmW{vA{72pQCN`3T$?ksU&?kwL$skbZ;Q*7JqlfNyis%7&m*nBaep0B;F3gB)y=S_58_j%5HchLWI=vlB z02aw9Zr2Jqw8C#th#6(n=TN_TT$@x}Vy~~@)e?E7zOpB8QmK$5AyxWF$VHBc1Y=78 z$HL&ktk^~BhC!+JbA*#OF62-hDvCF(4+eb?3h#7s#Pfg(0Tos|3>NKe=4qK($Wo83 z&&&QHRkjj%w6?W_Ex~POxN#EcSJ`DAfcxr6kJDfw@h792>ir zIHIu+Fd=>d!WM#k9VDtg1_B4`mtZsrCs!=AE(pDBt(O(CK!7{y>G>Dx0wmymf+vY? zmm_wQ+H(vRrni49C;clY7=AjWZB5eV-;b{sh=o z05aUXYijp7faB+sS>x{v2OQ65H+6chn#8!-&&Fq(kA0NNI0d^Vcc0Y~R?~|rzQFF% z?r*LuTXC;EyKv~zF$cKmP!M%UxFU*s6#@JJXs@zJ^7ddg@`O`f%&iV%Rj;s4z^*s} zCdhhGXHc0M?r^6B!Bk0|nNmmMN2nD55qc%drcB|8RTTrkw&e_8H_!Yp0__IsgdkNP2o0AxAWUEubtXnuusZ znRRM8bGlC^kg9kAOMBLYaHkVJXff3i%9$x=^W)6<;zAZDzEhhik2+r*7f(C(q`jH5 z!V;()n;_2!W`PE{aO;=MOggctKeF5QBbnAf1-M|0wf2{|W9pb_s*`X#=*m z)1hv~(l2L=+5cpUb!UEO=;C)t@joGAVEGhZMsf6i@jt%78`#8&?nmq=@-B}f@dqU9 zWxiWG4u>7I)9LsxXL|Y)aAgOVjBC4~f9a04%{z3YPx?bw^QMS@rl)^~M>V@c_3k#$ z?E{;&ohDntx{NS%a4#o31o1}?ic z`c83<;uh71RG%6N9b5m&7J|NCFiL+Ny2`!!qt?d&pmeYKQLEE1uQRMpmwBDbYSK#U zE<7%GR&JMCU5_t=N`|vIP9p2&lwbnPv{;Bzqz`LDLZT26nCxI0}x5xj0@(sRvci(iL;7sb;@2tWLPW|6acJ`PqAe1wAR>%E<(xw2_~#G= zWep~F`k|Xr?Ce(-?g{Y6h=X+jK8#qsbp_rw#t@s`Y8?)(ag%1?AJ8SaViv#5mH2;V zh=&R^?bFzJwfP*;kY1sA^b|iS2z|OJ|P40%UJ&29!nk~^yj+^ zh0Fis{Pf-ZWBDIHi!2z!|2P?TCxB-DgTJQAg0M>Mb{9|W*AHt3o7t=6+!i{HCsig~ zwP1PdvE}2w!XfxhCLfPj^En(KJM=}*Ti6m>{wM-bP7j-ll-Y6!H~&G-5VyH24-6bP zto7dBw5R9ys24gOAb-5rkaNx+PBlD(pY-R<_UQMePllfLB#xnrNKTJz>8CjreUMYp zoK4mN1roxpr(cS5Dq5cE{$0BN(%;L;%RO>bxX~D#k8z~M+hj6=7GD#G%jV;y%;p67 z7fwDv+Q~)FN1`INqoOu7y0VpWHPHL6mqQYA${PDF{pHVk8**AZHX)+Uc-0ng^L+z< zFiH;${Fyg6-E{!GaiYcmT#I}W_2*Y~EfLS^W3Nxp{AZcl+E@AXz}rUX8FRjO^)=R$ zFl=*?k5IfYCpJ}Bz+_)RApxC&m2V6D3=3V$p|-GMnX=6BYD#drx>;SN2kRaS5@5BS z3|k|W$HH_Y85mxcCcs;?8E?Jv$lW4ea{luY4%n3mS^}JT`Tuf}{Li1y z)><)4@n%V7~6E_N37Pv)`~aicP25f{LHe(oArmu0c6&{fgCa^v4AL+cLexwURi2L z3>=1PA|}e1R+mu0qoOaJhH-|&Gc#d0nNdiXFr$#87OY`U&sp44n{zQka@?#Y&8eSQ zaG@Q~!$5j>dwK?Btl)&j|CDfuw>^m;%cI3p+@Ti#8p^~bWHg*r6Vy6%TxcPXnm0v9 z4-TJE{C;WXy*1zeQHn@W3QU#`@{L@WDO7r-mB@gng%@OzdAhv%f)Vgo}XRr zjkGqCwqfZ}J=_XNL-Zz)B&U2A4sjwK&f<5rl=tpV&9{BuaL?Zl+3W#lOV$!(n>uFN z`?ywP(V~*;K;CB{8Ky;p?dfUa4v{2g8qRcBYYg^>p*7++ ztwUM3b_60>BRPhy;>tQtERBRhqAaZTi{T$VA;204dcHhST3zF+T_dD(t`u%JLhUlz z05_W#28U%oQ%UWD8>@aME9j`%DZm45NZ56%`QKl^sOK(SkuN<;L@~1zyxI z4vXB4VUiqQv@(<33=>_3%Gw-dIPU`C;i$w zyy->m90SjLCmkjnVcs-#v*{>pRmc$oGsr(*wu5CjrIG-15*fr}r;s(x#o05{rsF^eH*# z!!gPTUQvp7dYjY)+mNuF2rI(ug{{vFdmea_5>4u5+iJk$usYLLEkwQqa(p=}Wn_P@ zXgVjK+g>b^&sls-(@x1URW7_qPQ~kxYi%&`>fJ}Q+4g*sKhE0QHMKcPtk$anbE=#epLIuleAx=zEaSbZr@N{1&<2b&&_9fdcQ6@PEstn)I!Q{ zE}UQDL#~BFQgwLg^})1a0wTj%5&dZVfs-8m&iqpm{v_UHZ9#h}r`+WU=3BmAFNT=- z#I1fVz9V<}mkdB1q;UzBnQXsG+-x|Aq~cVf9R<;GKh1TX*Ks>P_Q|08k!9+9VWSd1 zdiJ3SNKn>rpF=ZHP3CqGmt_AqOx)Kvo!LZNw@~?bIKnmOqV+ZVFPrfSGWqW$^))pR z27&oZ4D@3(lG!I0!S7E$Z^Iuhfd37|hq_T^;J;@0MEEs9a0-M4b+c9zS+?@joN4)U@nyN*E5rQ6p(P2Fa*dkT1;6 zr}^#QBPRC3n#}p-$(wmUm28?l`{PF|pX4Ia99A!hwSn!rJK5m0(wik#Q@l zU5^OI?z|{$&Uc&Zz2-8Xx!$i@q?yC$>Ea@I7Gd9aCY3f`^6_}t#%|}wV;MwNbyN!? z?ffUmOto89yUu?i1gjD0PYjlraqp}%V?O+oo6BZj6!XshIJrayoy^Fq8!x#iUfy@+ z=6Zpuhv3`T6y8qE-p5~)PF=ctGwzS7U$dR>L>u<8W9_J*_po|O$6~`ZJiX_MUNYbP zNPrjC;RiV=>ZsWdCA|K<*cFfX?T12iHT!vTv32+nFVE~^{XEGGtFhyq9Q%mB#jsxc zV`f+{2%*@+vKINRmcS_d#si&otv?rxs%g)G!Vyr2JM5g!iw4I#T2c7a@!v@cVy>A$ zRzhe3+BD6ViCho^pstXMdKhUv z7i?^Dih#`y_4+T0H#}39%lX?k9lD(<${tzn3Ccn1R<>81BRkSrk}BIrx64!L1{~?( zXG)2kQ*W>*IF*t->k0lN7uPztxI?Kr=8Roh9lKu0d{P$KABl>F>CmADck$ zc>@$w2s;u2^=r9quk>4k0u&w>4jUh4em3otd(DK1hophOz>h9rnpunac!C)Dm+|OW z$J9!8HhSmS(Y@T**qR#e|FJ%n>!)#tI!^<-KBCUzf)j>-d`Lh(r{kA7kVmk5sJL)E z0r~S2zp%)&q_btL?|uW!N$$`29z^ zR=f-)198E5jQ9ssl4lp!e1w!BlR)M8i{(2^@#hGgLY|DSzxsswQ`91!oh$Xl15&In zpf3_t$9q&vf$-jJU_^#~h#<`p$2>N`m$@Z>02-dFN&Mq(vD&F=y33ePvwXyfk7=v@ ztxSV|2k?e^$?g`G~PH)B@4u-kxEVECXca~T~YOO$pY+nC~j)wn)Y~RKs-Vxxc^FtjYv}y|^ z<2B}d)AN}*zfp@%PW|*b^r8OpaC2u_EBm}Ebq>uDxjwn$0Cm-mXbd`}kT_&J4V+A@ zEDBbrw;wSa!)3O=M3m(wn{aqnuI}a?jnt_-xezLR&W5PIW2-=OPH*ydec9Bip5_I5rq`P9z@OP_Jz=gVhs^Lg z7HoMq3KFX#QORYDrC~Ohng#V$6UQs*4QHz5R1T%$p4QZSW2In!H4la_?mmy&LDKBj z>BeJc(TrDo%0eSetu#@t2{>ZE?rBvau4rR1ZQwq=HP}Ew+22FafA_2~BB_~M%upQm zqosNK(HQnGg6Vft6J)VX0%3HjP2J=mkt3l5L|-Y}-cg1y7fSJo&+PuJzt-QCC+*KK z{S9IK8{M{?J~;6i{mJ^g15-*)e|+wM9!!?MGXAXv@DxVpjlG zD{h-Slz7CkgRkj7<&=U$pQj*q8sEeD{)&Rzv;D>JW!Af`>F><vjn zY+mBL=qhJ?N}|6cvAv|{VEm6*$H$TT9dU zU}9g8LkSvddEhfoTh*JdX&j&MM(E}A3v%|x|2z0E?{ukap2^Z#A^fKU{?F_wKLMPR zf&bRYz}NI3@k%***!$}udPp29&oW=+pxy&jkit;i&IERr5jBiXVcg5qAAd;JJ1240 zS9Tl_o;#!CUVdy2w}oAyntYI!g~Pq8RWw^QXmo3~>kVf(sz{*#ljBg|r9o>0rIP(Qh)DuO-)}NNtStbdRct0M zTi!QG;~IdMAJnY7Sv|*vuoj+WoDpdqLP9EkkXDVIq_!Y3_Tu=JZOk|7iWv zjee;oWi}m1UX(KC-+q6>d>*r+ZmmRt0$)T%@7Fx^VyP;^bb32s|Ctfg3rBAl3HNgE9~a8KSMG40F|uuYzNev z;66)+XcGZ-KRRrydhS(00Y~08T%WY_!-QLDT_Qw-f?xIZw>6FuBc*Z8NScUK;~l<} z;ZqYMC7#}|QA#)rFZ8R5aPkUgL_PXbSOWQ&j-R<ad#h7);BrdY=+B>jPB~lO4TASB_XiROC}!d;p3W*5nGT zg_duVRg#O5)A1zMbp68EoXg~w-_J4g_Y}^&Z2XE`ay`Mj^HcvUbLUgDh8g_hAmv_} zBmPU3?vpwH4A0fN$64FEEd`s;9GS3>OI-JahPx)+`|@`LobC&?|Ekkar!gW~Y6d6d zbv#-p$C-5A$TCTA_bn-H&fJReAoOn6lO6qQ99}hj58u0Zz62(GocU6Na&;fH5>^(= zoue|Bx>Nvp7FOq^rC)E&TekkM0^FPP?#C+QOuTn(*Q>Bqe~0YCBkHbQ5Dg4s2NRMji!wWeA0Eu(D;qedvu9`Zp(7G!gAdS}+*j}MZuVX@6@_R&3Q^d3Q6!@f z4U}LLD^iH$!$RICHI7CpL}!Tw0-BpD9<~D2O$_)a>O|S6;;sMYOJmn4ATY5XVg!qZ zu^Q@0T>7TqPu&k%!G-$aZV37Svv#n%vK9MPhR9|<$Yf2kW^gD%f-_syC--X5Ws;6} z{iaP%8lV2LT@C8O-!Ms=9_G)(dqw0vv25v3$&m11;a_VD`P(Zton%><qvJ;Gx9mAjy%ff8r{U^>O_(UdJlG8NOTXXsGQ0ZgRkm+x$CrMJY6$(>Z0mA z`CTAQ!EzqTBurp69#50acZM}rVjPfzJ9r}>U$GM^6h(AtaNO2-&ZitfW^yPgh-Y+K z?VM^NLocf!2;_}nVyNO165TT$q{L{PiG`d{tn_|uln_~+WzBjPtT{ok_OpJ8{tF8C zXrK|=8sPEka*tidY^caqqI}JMM9_J5KwY|aWi@`;eO6rsT4<&Nge zPgmso)Tf&Z=3kl@8$Ow7wEPl47$b))Ff4vW(1ms<={jfN`jbxt$dJ9(i2B2J-if89 z2tAySC))hV^4cr?%v|zjpM+N76`jah#M_ET zb`+n_9S7>C(znlQlC&QC?H7JtFsR{el7dO63AN{27`5P>_&)JTXLC2SCTC_7C7hKR z4MN;ahVG6FYI6G*{V}ABzAs| zZFiMXX~4&lLVWyB;_Djj94o%AK)S zuM@xjf#QO`6lk))|8cwCW*2<_L-d-z@coZndNTfZ-~SLXMwHqZ-~ae0ppm@_Z;QVF z@ekP7PW=7{?PS0I@z0vh3cvrMtNbs%|G_Rh7hkrB8wmmb8@~TRN%Ysz-~W*MvOgZ< z`ybG=m8a*E<%?iJky(Vp;;FL3qG^>0VcAX1$)(xmsQXC%S@IXBqQ-2X8kO) zzM7OfW_^WOKhtbwt5l^;Kn2-?(T}pHJPYF8io)Ig-@iw4>aX;u3&YwZU)-p$Ht^z- zd^w_qu))PwX+^4>EmhXC^4ewo)@0llh50_t4m0BSpTu z_z|nkRof=)`cA1a2&*$fgK)CVx=wrs+8#E*y=pp(kN(PA)Vh(Zl#txh_IVW9Uw(%? zoT>U*!q2k0h_C_pQ=)s8BYvuCk}R5RYtaOn+z~bf>HQ$vs-Kk?w!$yw%nBh=u z<*o4Qjl0na#B31kh#@M}O?X(~o zi|o3sD$e7g7Var*L2SSU_V|G6v|Ab95e9esEvORxN!!_nI+@k58b>wjilDYRZLF1o8@v?UP$9?gGA8v?n^XrR!N|p= zey)1_KV)FEGZT=8K1e%-W_4^j5%rJS6X717pjs&`_AYJP@?%T?G7rFAP^lH( zK3(!#b3k5Sf4*(#UD@#2Z3M_aBah?LGW&nN$74Ty`$i)q>5d5G z--q6>n;b^W3Ba+kwxMs)HZOB-S&0>r(2ygN6HvyZ)tL)02x;w$^Bx~Yy&-Bndr$D+ zGJ%f(D)-iAH5)0zre-+BCJYmUvqR=e&3HtZMkfCeP1~(rm2YKr;|Z;f&$X(?(@ZZ-lOV-p{6vhjMBqF3$glU6ym|CuJ`(qhKmnCNX%&3?%L=FzA0$ zP1ud89W$=-!Zz|JmF)3TUh7kG662IdG{?!DK`%a#ktNun%kRyaCUpahm(wk7YmJw@ z;e!aae)Lg!aD|slVx_x6N7z*z=G?^H@;vG;je0|`LBn_IVlJ}EO{$dOWXrf0(1eE= z_Z7k@5+X;ybp-@G^8^B}mnK;jVhJ3OuCk-{dqAX%Bze}Xm zQ@_xC!AskQKKP#*`$56``*QD9DX%e(*&j{5(|%qk$nEJ7d(MtR{i|Sem9yuFKP^>u zHvq7wvV9MaLSov5={*CTI;BhFQ zZ0GjMcrBpspp6cC#$0_KVet+D3zk@l`$XHfyZ zC3*P9&iDA&zE?TR8f!oJ8c)YKZ}oK+afWs>_~|R^zsPt>qJyl_eA5PDOJ}WG*m+9L zTOE5y?vmp^5PbOjAn4KhSrjukR`!TJWch z!8v4u@p4jeNOHJ_ZggRZ;&8x|>cvk2RlU)-gfAD7Yta~-OF<+@gMoshR1Luc>#S+I zy%}S*H@qx#ezvWLC_PqNb)vVB(UHRyQ#XDQl|s_EX41z*CGQ`}em`vtPvKFhByN}! zNox3Mm+2(@QtJr?VccsDW-F(9R2X$bpSn=wwT>Rt%f^!uE~{`rBGK{|%$& z|LW{{7MhA_ZDnES=@7v4HUR`=Ix_??69Nc2)DQYJ0r-UgW6g5%O~qEr_K@r zm@S`4P^Z9ltOJxMq7v>s-Tr(jp5UVtngD`ypbX$2nIU|H8%%(;a+< z8T_mE$(F2!kMaCkygy@%fno!Kmv_iWc{ zFL%XP=>p@eL2T~BpO31CGG(}n3T{s^r-mqISVx9W(_P(d=Sga)30* z6kTf6`hi9APBN#QkCj;=aX;a_+W(*SxTf_G-i!B}PC+~@2=xsL}pbrd4B?Xc%-13kOt z5sb*eUcOGR-q;^{c3Z#Zw2V(Y(u6aMG=m>{;~#BlB?AbeWtlL=UD`Zf&LIg>0!f|> zIS#}}!sK&O>hdF$pb3H?Lh~K#r+|J^x|u5VRfb9xV((+sQtC_ll_@8Va|4h|Y?g^{sGy*)6&QG0!`D*h>3Aj+q>&%Z<% zjbS3la!IXB`-%QEnXK({{Q+TyfF<3Vu*RO5%c(=dXT6>)$Ah|C9XH_LhO<{o<1OOZlt&>|RcqzxosR z>9zP*@>l22H)qlcv+>WaJ=S>k`_sQcxy#v~pAb#&WcKId5^9$H{`7Y!d7}L}DfLfc ze`fu`VkPZSG=4UPfxW6BhAIlC#!{{>3lfrB3ZA29B|b%E=HD$(C_1w z)U2|`hc0z{k`f3kd-Y(m-O$r-q|-}v+Gx9}-j{)z)gT|(KEzaqelL~d=Su%51z~sS zR8R7C1i5ZR4$A_~ZKE2o#@Alz?p_ML2ia5v(Ss_~7heWq`QSlC?Hu>|*%@<^ZY6eV z#BQg4R67|MKR)U)jjvw~KsYgdg?)&(P5tB*&AG{KMOW&L3WJQLAh04n-tvSR-0LsO z=wG^LYj13NvwW3(4{>>gXdpr>sva2iP}0w$f9zGy$>iz`&`XzbUb4<;M-#FJGP5B| zR@)ac`Ou>}A^Jram+WNdP}b;t=x+7HA43d<`Os%?g@=en!6$P~k0{J&zu4;*xFj=V zK`6cE5a^;B%BNG3F?49kz{^Fk?|HcV1s985M?O#{eeqp-2 z?DrETU7njxBvkPSVx@O&p?$WW_(vdfXvUE$E7&fp@jt;r^ND0*3=O;7sVao!Lo%J^ za$jOLUO!mB(y9LOM|uHE1Y>VMZ~UdPNpSXE+8-%-x6S&Fu{VB zfAR=Cc(nh7N{J+Rt^b z4_c={XYO!RBxtKvLO@?Y(5L<++`gL3FLEAGEd&&@DRMQJtK|7Da0n~Qrun2D*;(g(ZnM~=}L4_o=jUysEJEVJ78)g+1Bx23TKk=|@g@m|x z)>h5_qc;UP?}P0A4K^0ZFdi88i&PbQlS9<&WVt=57W4VKc0MtV5DAcEb)xKiI6ChB zSJ}X{x=iC=6ZI9&Op?9=ihTTmz+}NqDsh**5YbjHd)oMZu5u14(f5)AWTzDkr0MPZ|Di+PnyH= z-M-3W1L+cmew6nW)^GGnPtSbmEMq6Hh0%Eu@=eyz69v}u1FK3nf>``yoSKZ4hc=S4 zwV}sydsNw4o)zy?^y_V z9Anf@gS?6U00!1s(onZIY3M!64bh_yVXi?0`R1yD6F>wyl*ad{NK zz?xc_8B3=mlOU8MvH%;J2&(I1e41XrC8C!?VfCB4HML*RKlDwRgLyhfbzP)|D&eLU zZ0C|JzET1#7waP$*9VuV9k-%Q0*+OiM7@@gp%_$eLF{tuCFY{4KlBo^cjW_Oo%Qrg zpk?err#fPM_=A@W z2~@V*n3yTYLph})M}u~))-L^9+1P3uH}QP}jQBOSklzN;AisZJI6GmjZ0`bpK$Dd5mlv?z_U9$m5l0IG<}e<CrOICf_Flx)^|0sZeP?0-yskf4iX_bh^*B`Czs zJ!v)01_Z4Os)~m-^?!g40<4Ijon<>E;5n@E;o(aG2^J%t^U>maB45@5gDH8>mpbay zCoyHQe5TMSp9qqPGrg2qm~F~BHIp2iN29`O3Pio8Ac-A|N|xtvCVwN?Kz;ZSjvUUe zk}3TizG#+gd`EwuFaBW>XUAP#&x%uwSWMxGc_MiDQpMvkV~zlgegG;09Ur4=n6Ywl z;_pD91dVi6NTwgN2hPe4DDILkcE0QC+Ga&(XAmGq_oVH7SJoA?a8FH+0&P*W&!ReYI}Rvui4!XcWP+jfKz5lhNBP`)4!ABl*T8{kRx33hV{{t0GsV+z zD3JrsM%}iyc0i(0I&J5Js72c5N#YNgjGR5P?OUVQ_sHKskF%5AG6#k9SSP6^vNRe0 zpe9B(x|fl%kdvFN-pH32$X+|Y)~QXybqJw==#Y|QjDu4zfFZb9Wupr(c_2q}#O;hl zb#ydMIsPuzg2EM8=>L;-Q4v;O_&Ovx zZWb~7e6fPz24xZPfj8K~Ai<()Gn%`|TG9cP>SAKPPHQ6`UpB7n=%8Tdw2pcFWWIlg z!B^e*U1mX!T3v&nP1p%4IPygR2qJMec zfI5*XdsxOlM*ehpJ~W>qnxv$>Li@J2e@cq?7d>2wzZokiYoHxIoon}r8Wmgd_ zoB5@6JX|FlZ}#(|oZGY-992czrzX~tihZhff+qU^$bumEFf^po7G$gI_@C~eHmbP^18)op z!E!o5tZQ57ZM40|x-38mjKVtks~j53_G~xF{5@STe}CcoDuQk_^I(SqA`Q2wZ==>G zyUSDKC8D)cq;)_jk%N1JfblYZmHxNvtlNvb+!>qL!Xyp?sZ1g(f)7e!A!|Z!;*1RI zKjPoMrKit(#}2>NN+_3%)?n!HVw{k{9~yE2Q@oc9#YE+(^Or{(}B~o<6XD8#1#udAPB8Mju{c2vzm>Cc{C8}Abg#2>cHb@c(R|-6 z_wrZm`qwPl#>IcdR1^&Zxl2$Dbk46C7YIr#_J6|1lR3m_2OwZUCE!V0}5 zK;y}UWrSazLIHs@s zQ{S1b<(_Q|s{`h3k{p0dK<-WA)e=>4fUuKWD&&p+tL2J^fC(!c+<1{AHV!iLI1}kI z&#eZXZN29QKls7XKQ~*y85rg`hqeb)?l^ityzcK6Gz#bw-;u-`t# zVL#$q8?+%MgI8u_-rs;AUlwt3;yKp!&;=0mA2WlvtmRz9~S)l}@CnYml_DNx*0 zHG5EVRLj4}=2_?|PiCn(a(X16A_8m}i4h$k`O%Hr?$zY6f{ZIPm)Lf<+{Qm|FG}*! z{U_{NcGiiJtM-K9u>%6%V@WjE6r(1F07p7R+Yk-(nb?{Tqln=EXH zr{_+6qetZFxs@9XA8vKM7*>f0>6A0G)l$;bBTzfPn&koPZ6MexCr19;^x)8pL@}C^ zQH;dFp$BA54O?@?CSJ`LlegVPV-b7wsu%Ym`h~D=y7j5)Ntn0v|1~bGTZA33W&VT^ zqd)moVF_rgpAkdLZSsyKD<5O`s-zUx2xZrS3Fhmxo1OH%YQsO-tq$HISaqgu>8Bz2 zkFiy03H^2Q&S;G`n6=`HJv@l+mcdgjo}Kl|T(EWOmiz5y5DjBjPUsR&OaI*YNGZjS zrilry$hBe5FJHeLy8)R3q~t95Y}#J+5$K8;Jpo3zBJ}W2d3uNxC8WsdI~o5*kTwE3 z4B$l!RJKr=&FZW<*jdin;|oD!%ACG$+zb4D-w?XVVAA}C5UlwPnSS#df>rYyJN4gP z{7v2RFwdbVhq~?dEY$?{cO?DJ*p${}D@LSU%9$~$o41HeGryr_fLLvEy9?VZP_*S0 z`MMPv&FMQ+>>jf6Ro;(CfZHb8OxBmn$KQ4_Mq(K4&HKOomliBpO*7?`w?luTik2~+ zpUo*cQN|bEMB8;)E8LYT@vgCcyqs*1?VkhJ({iivwB-W>u4c~z&u%&{)V$nmJPlmB z*K|icKkH`e+tt}U4sp`;xkP%yhBlbiDeS?biS0%c(1q2lfHUm1p=|`(hBUXA$G_tgGU??U1vGr(gO{D|8OoX5QSk-{> z)#aXt6d^S`L#?F)aD@Z0?}bhowVJ0QUK;qyiiKymlR+7n@>ycCixQECGuf>Hz+x zo4Y7qL{L0xzy<&FE+}DyyuO7cXSKYml~7)NxtFKq z2MwFeYyO>a(_4J@x7T0f0buju@8&h_;bwKU<{#nmUVnjUlx30iD2Cb|QqC?54%@gR z4zHZ|W7Y7Lo5gf817~FQFceHhv{!%La z#T|{ye8ujKS$uqz;d9F}wx}ewXk=??8O+a3!gu@`BL>$>%a4<96S>mx)@p-9BezFN z+PCnF!j~`JBvf!9pRc(!q5t~!XVV*F2vxSyvv75DTyfF3G4qZMwj{5WEy*0jd+aiu z`{b1tRu`3)%^B3ZXg~JlMj{T}92=n9f#=J1Af4}mAeS{KRZA|&$}24?DlMOPyarsg zpBCz!tv?uTmkNLc>OsNAqz}EH5U=qx18B zy!3BuGKJcAA|X~G(0~2>fgvbjm0$z$E1s_Q->u#|Vp4LfVoXi6ck{^cY!{*S>rn3| zOf&kFWKrz{Z+Vx*N=M>_ofN*W0|^Xm+Uy>6=^PQT+b7q0;E`YN{quo~Z`2UlYeT%f zcD?@N{yXxKgP}Ov>5l1^%o#4giFECBv>F*l+q!2zf(7-1%ly`?Iu4o1Sk+X)X8n4x z=Mt=`aWZMGsk3EGoy|4%fu}SH!#&fx>TuGl>5-)glBjFrg#9zN_e|+e-$h1{wN4vl zrWLdPh9{#XEyx_6ia$5@mRW38$7aaTG@gcs+6yb<{olPPJ7K>Q_2rcznt1zn6WTw2 z$MTZzA)@^JSxCGK;e8$O_DVPr2z4X1CExI6%EE3k+|F>5YE$q?d6xHm>P04QnN{Is z#1FhG{D9WsyC0V|BNo;%nenf%)3<49Li*%9tp0`psk}efYl1iVX*46bnAUvV7&NQ> zj1oJ@7|E(9Lf~dpxEH6PR5GD_J)S$y-oG*1<*^4=dORxJ2@gvz#C@$7n?_IfdLuY& zo5wp0v=N$T7gKi)CNyxl=ZqiY;1laW_nPpqYk2WC2cT##4wjGRhcBXMz#Wdud*WN+ z)Z}Qoe*J6(a?zHubG?4uiLXn0P_Z5{;SVg3nJ6v&%B7W*dysOALxY?gv3Tkuk^nAG$>tVc=6+aL9xr}7Y-BE9Z-l!H5NqMm_F zNUO-(jD<@N$XRwM6bVWz?_%t@&pDQ5G#(E}w~iVBdzMex5%2`(VFnLB2oCW`p`3q#Mf$IrwQPWwP0qc+<+Pkpn&@x@B&Cd%0POGsgNE5r?! zGU(_L#Mt5Wi90T81C{41WYcyYoKrU8(E_YaYg6`>=|IOm zb>4Bv-!Tn4(%r3#225xUosO+`Z<8FBr={-M+1(@=?*&2Ibj}JU`ckGEXLXWjDmwGC z-FfgCHXu@}j6sMLo|Ghx*f1H<$=-yTkf06eM3)K9Xj#G^-(hGP7AB6AIA~=ehR-ya z2ba`7T(h3Su1ozl>rS@cr0hb%B_*4Ac1Ky|wT%f-h_ zPibh$^jCgb(6Fb*D95Gwt4^$EE2!d{hGpj|Gh{d2I|r%7#4s}{+J8nvX(SmxhrBu0 z7+AMcqPY2cGNy$&2BI(NsuS4czd_ao}FU5&9H3%^~&e5kWuwG5WGB`FayQwP6R%xOC6$m*P-*0V57(Wx%U&$*m z(fl?B!1(%0?hmt9!+4pyCRPxepJq%!EIPJ%dIWFhhTOCtHPYl#-4PAXCc`vWd1yg9 zCa5|ua&KA&vEW`bix;7*%5@j)R}fq{-A%(NlnML5CG3>gB|t}5jw^be*Bd^>q8+bp zWy3`_dR5V$h5fL9y5P|yyko%Ec>=#nWS*YY3 zRN)9zZ#L@h652z@6-7MKmyD;zf@&TJHv_erGbvTw;y=Xe`F+&$b8h7{chtz#EvZ}Z z*kQSM^GcD}&11{FqmkAj9kGRzV+*Id%~ETXv!vH%dqs)K7>lMRh9H~oi=bgbF;3It z-yROqa}3gRjHaj0fsJlGhY`Gc&?u3Oot4^>+EQL!;k_rP@oCLtqu$M^|Jc(_h$Hs& za{R0Fv4qZzdcb<&()fJhaPAkgq7V0e@ka}~xLAa{d(zRLpt2_ zP3$Utzm^knrtkd2O5f^u`ntaVe5m_-h2ya8j)fA{S0k7`O=QFHJ_POR{`1WV_xDhL z-v1i^>aktLKd0;X2Obdrup)atdhq?6+I;W#3q`(g=HF>EXClv0REr>=6G)j_)^~Ou z?Btvb=dzQ-32A;Ub==`AUwobV7=|m{HYoNdqHW#pMw`G~zMeAd2y{sP?C6a2F7{8( zJ-gng;r!ge3e6W;DDOq_{2qKiAR$g9M3wQzVFSu7orTSHN95g2Xnzebq%tn*y?ix) z8i}8ZMU>9)e=74<^CxRP{s(+L=z9EM_s1qMpX*<0Z}>Dkx7!n8w6LO=pe-=B&oc+T zKbC{V%zuA>Z0jwUaHBzU5eL!x75B#;giE^mukMe{Hl7c8f2>R$9`yd$$KR8>IK=%i z%#*vmpEs8)s;^hREf@SRxcslnw~z6B$ny0XC6p(obr|VB8oDY zI@G8)f9fFfk%aqJ?9X3u->Mk?|A+fl2gdi=SI4(u{{IwTaQ`L!@x#0TBlbXF^d>+V zZR!kHZ@^&t>M*as{MYflz52h35AyT3arv2Ww+2EoI4Z(L!U^7PTnEHFCtnPQjjbKy z&ALvS5QdL@Yxw9xDN|Jmdw1)-_aN6~6LlYUl=8=8RK=x`aSjBqY;j=!W2n~?qeLY} z_cOT5lpyz~VACNj;dqVnqiyl@cKtr!r=lqeML@i5-mxY9@fPeyaftK&vqzR-BVnuH z(RqH-vGI%K$fj`g2)gW$WnG33`2i`H=t$}Guy_;QH@77$TpDD_-9<-+Nyvl6Epx>J*kM@p~^ z4S7GpwjU&6!T3t(BmbB_JMG@EB;`#*r0-%YeP5x!#dPVQExXa)nO7i*08o4sg9S4Mu*U%E)O-_x1SKy$H`52h9YVA0amb8mU;a zY>}A&qwMg~Jt>l)U36Z&Back)a30{?SQb52H|k4uqyGGajrxY`v77L5^N9UiK&H`d z(n)LFi!$9lRdW1;;s|$a#)c4j$8avwqifJyL+w+B#ivG6qOu<@_wiv05NrSauV7c= zd?@H(&%wJERY+Ta-akR1G>(?+ppE_S<`FK=@%9MRO>r&DK z3aWh-W>w-@zkj8^B;Ds?eDU2&Qqx4g7rQ(;-iH66Nb&c+50F%(bpOjtDQjB)ll@vu zLw*0K-?!rR3w@G<9cN}Br@53=<#j5|cegYWn-AU1NNo1dSdBhaYE6x$Ut32`9Ivw=p5pC)c0&7?`h>m3kB}$a z$&44IDL~vW!Y}b1Cyux1uy}xu&o!<`p@p&SI;<=QPmI#cDK6FFXDUi%@QBH(84Zx> zS!MUf;}X-ex&)f>@#r@EeCRC+-yzk~8n?)XkTeZQ7WZTK+2~Pby$-!FylIKVtVza! z(Fg9Dytcf}?q_vb?#AZXw3q1HW1O0|sU~&Jl(qE>(OHge=z!+z(xaOAYr}tNY7n;e z>e}<3o0{5M1C7aGpS5Av(B@DCcLxgbtb6+7kPPXMPmCOq4g5qpZ_$8a822NWC&xAsG1zbe%BbCyIim14!85V`%rSEsQcv#NFy2q+u0ij`Cp;ZrsQ)tbcFF-lENQy@$c5191A{f1x{39kmeOpzqVy{luHc$p7u$ zAujOzeM`gh9Sxs#AV)c|#iEoL9k`l{!Pp&Q1HwR)>m2tl@H!O1!4H%~a(Nno|Dvbh zS}A$DAQUIIs)@xC~edf+1>coZxey4HzY|cm`T(jmhFN+i)9kk9>fK=er z>$dUKgzTsr<2B>cy=<6XgRoxFZa7}AI|s?S6<=s*ylkx!(ajneJ#%Xk4z+Wz40AK6UG4wp4Bj9FHTUSry^A}{DBt%zo_6{(rCA5 zSVSm_oblCOyRy`VO(A%b0*0qS&056e)!zERK?<5<4uW|sAb7%xTTmui)BQJa1}M+L z!&J>aluMTTVQt5d_o`yK-WrG%%*UYD_$|EL0E_lFBPyIeknqT3rb zK|vK?rb@wK_?>boGQY?x+7~?$C7(6EwxcR^$eauJfV@9{KPn_iCzB^*MMG>0BSF*V>x-YqEfWAy19w6o(lk<4KO8%l4UcpCsU zsD^b}Y)*^QA498LIwo?|Qj`yjq~{PE(=;Y>Les>^i2x@xZbL>QNzs1Jmuv-iXk$W! z_d4`e5g}VLu8EZ=TP9))@0QHEyQ3Gm&tW*q!T%@V{}U0+Ny(k;#WqiZ>Fncr-t<{_ zB=5$fnkNoD*?lhW)urL4v=p4SEv6|498jXA(L9J#PzNzl+u{8NqdoJxFD07pU2%yi zz4l#j(>(LIp0!Dp(#NX3Z{auCHTklmF4HT*=Z1Z~qHlR;$R`-9D*Cvt#jl*`l*Vm% zBxrIZ!(D6VNFvR97ST34$zDMabKMd|1Iz4t$Hk-AiqDMVU2l_o3PraS;qAU}p-ZCR zG9;*q)!cZ&*NFR?mn_W?Hw4lfzk$T#Kqn)d-pKA(2x*hvcnm(VMg}&Q-QVzOYWgjk z;kP5wJn7A(j3D6yoDHZ~hohSJs7yVfxX}I%TsjX0KinPsz$@hF4Y;=M-HcSGKQ<;Z zDE+aCkyE&8VPvOPkmZjruW%;8e>?Y&jfaXudD#3I)Y!jmT%U9(*ClkFZ(M&o_7I8L zhgpK=^2NDq!8xlb)ZJy$11VRa;`gXS)id_jwad@>ds4<+{C^+*--7@B9(~iUt?(G{ z&#&Mc`tv*ZgASU8j~+g9IP#I*9`c?oTo(CA-DcLEI2=lLN%M|fjXs++6=`8$NXKAF z2jf}W*nyUx-7R`V{rS8AJP-yS_$Qe%gAqupsH~-{)9K(FDc)bOwQ1V-DPF^vP|_3? z4{&Wqvi>{FtVB}9Dm%G0sbNhDJAeN8N^c7M`ECDvd}hOZ-8)M@g`zLArccHNh@#!m zLEiD8HC;z?MLZHoX>CWPcbcER4m{Vr>rZGS_h12w$*!!=W2@hl

    ThT=#O7JvKe;y-)$1ZKKixEW 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%0D755b;6%VPN|5 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

    6ZAJR4^g>5?jCm8U&D&fR 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

    p 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 @B3T771@|Qp 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 literal 0 HcmV?d00001 diff --git a/vn.ctp/pyscript/ThostFtdcMdApi.h b/vn.ctp/pyscript/ThostFtdcMdApi.h new file mode 100644 index 00000000..9af915f4 --- /dev/null +++ b/vn.ctp/pyscript/ThostFtdcMdApi.h @@ -0,0 +1,158 @@ +///////////////////////////////////////////////////////////////////////// +///@system 新一代交易所系统 +///@company 上海期货信息技术有限公司 +///@file ThostFtdcMdApi.h +///@brief 定义了客户端接口 +///@history +///20060106 赵鸿昊 创建该文件 +///////////////////////////////////////////////////////////////////////// + +#if !defined(THOST_FTDCMDAPI_H) +#define THOST_FTDCMDAPI_H + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#include "ThostFtdcUserApiStruct.h" + +#if defined(ISLIB) && defined(WIN32) +#ifdef LIB_MD_API_EXPORT +#define MD_API_EXPORT __declspec(dllexport) +#else +#define MD_API_EXPORT __declspec(dllimport) +#endif +#else +#define MD_API_EXPORT +#endif + +class CThostFtdcMdSpi +{ +public: + ///当客户端与交易后台建立起通信连接时(还未登录前),该方法被调用。 + virtual void OnFrontConnected(){}; + + ///当客户端与交易后台通信连接断开时,该方法被调用。当发生这个情况后,API会自动重新连接,客户端可不做处理。 + ///@param nReason 错误原因 + /// 0x1001 网络读失败 + /// 0x1002 网络写失败 + /// 0x2001 接收心跳超时 + /// 0x2002 发送心跳失败 + /// 0x2003 收到错误报文 + virtual void OnFrontDisconnected(int nReason){}; + + ///心跳超时警告。当长时间未收到报文时,该方法被调用。 + ///@param nTimeLapse 距离上次接收报文的时间 + virtual void OnHeartBeatWarning(int nTimeLapse){}; + + + ///登录请求响应 + virtual void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///登出请求响应 + virtual void OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///错误应答 + virtual void OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///订阅行情应答 + virtual void OnRspSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///取消订阅行情应答 + virtual void OnRspUnSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///订阅询价应答 + virtual void OnRspSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///取消订阅询价应答 + virtual void OnRspUnSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///深度行情通知 + virtual void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData) {}; + + ///询价通知 + virtual void OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp) {}; +}; + +class MD_API_EXPORT CThostFtdcMdApi +{ +public: + ///创建MdApi + ///@param pszFlowPath 存贮订阅信息文件的目录,默认为当前目录 + ///@return 创建出的UserApi + ///modify for udp marketdata + static CThostFtdcMdApi *CreateFtdcMdApi(const char *pszFlowPath = "", const bool bIsUsingUdp=false, const bool bIsMulticast=false); + + ///删除接口对象本身 + ///@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; + + ///注册名字服务器网络地址 + ///@param pszNsAddress:名字服务器网络地址。 + ///@remark 网络地址的格式为:“protocol://ipaddress:port”,如:”tcp://127.0.0.1:12001”。 + ///@remark “tcp”代表传输协议,“127.0.0.1”代表服务器地址。”12001”代表服务器端口号。 + ///@remark RegisterNameServer优先于RegisterFront + virtual void RegisterNameServer(char *pszNsAddress) = 0; + + ///注册名字服务器用户信息 + ///@param pFensUserInfo:用户信息。 + virtual void RegisterFensUserInfo(CThostFtdcFensUserInfoField * pFensUserInfo) = 0; + + ///注册回调接口 + ///@param pSpi 派生自回调接口类的实例 + virtual void RegisterSpi(CThostFtdcMdSpi *pSpi) = 0; + + ///订阅行情。 + ///@param ppInstrumentID 合约ID + ///@param nCount 要订阅/退订行情的合约个数 + ///@remark + virtual int SubscribeMarketData(char *ppInstrumentID[], int nCount) = 0; + + ///退订行情。 + ///@param ppInstrumentID 合约ID + ///@param nCount 要订阅/退订行情的合约个数 + ///@remark + virtual int UnSubscribeMarketData(char *ppInstrumentID[], int nCount) = 0; + + ///订阅询价。 + ///@param ppInstrumentID 合约ID + ///@param nCount 要订阅/退订行情的合约个数 + ///@remark + virtual int SubscribeForQuoteRsp(char *ppInstrumentID[], int nCount) = 0; + + ///退订询价。 + ///@param ppInstrumentID 合约ID + ///@param nCount 要订阅/退订行情的合约个数 + ///@remark + virtual int UnSubscribeForQuoteRsp(char *ppInstrumentID[], int nCount) = 0; + + ///用户登录请求 + virtual int ReqUserLogin(CThostFtdcReqUserLoginField *pReqUserLoginField, int nRequestID) = 0; + + + ///登出请求 + virtual int ReqUserLogout(CThostFtdcUserLogoutField *pUserLogout, int nRequestID) = 0; +protected: + ~CThostFtdcMdApi(){}; +}; + +#endif diff --git a/vn.ctp/pyscript/ThostFtdcTraderApi.h b/vn.ctp/pyscript/ThostFtdcTraderApi.h new file mode 100644 index 00000000..93ea0fc7 --- /dev/null +++ b/vn.ctp/pyscript/ThostFtdcTraderApi.h @@ -0,0 +1,575 @@ +///////////////////////////////////////////////////////////////////////// +///@system 新一代交易所系统 +///@company 上海期货信息技术有限公司 +///@file ThostFtdcTraderApi.h +///@brief 定义了客户端接口 +///@history +///20060106 赵鸿昊 创建该文件 +///////////////////////////////////////////////////////////////////////// + +#if !defined(THOST_FTDCTRADERAPI_H) +#define THOST_FTDCTRADERAPI_H + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#include "ThostFtdcUserApiStruct.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 CThostFtdcTraderSpi +{ +public: + ///当客户端与交易后台建立起通信连接时(还未登录前),该方法被调用。 + virtual void OnFrontConnected(){}; + + ///当客户端与交易后台通信连接断开时,该方法被调用。当发生这个情况后,API会自动重新连接,客户端可不做处理。 + ///@param nReason 错误原因 + /// 0x1001 网络读失败 + /// 0x1002 网络写失败 + /// 0x2001 接收心跳超时 + /// 0x2002 发送心跳失败 + /// 0x2003 收到错误报文 + virtual void OnFrontDisconnected(int nReason){}; + + ///心跳超时警告。当长时间未收到报文时,该方法被调用。 + ///@param nTimeLapse 距离上次接收报文的时间 + virtual void OnHeartBeatWarning(int nTimeLapse){}; + + ///客户端认证响应 + virtual void OnRspAuthenticate(CThostFtdcRspAuthenticateField *pRspAuthenticateField, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + + ///登录请求响应 + virtual void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///登出请求响应 + virtual void OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///用户口令更新请求响应 + virtual void OnRspUserPasswordUpdate(CThostFtdcUserPasswordUpdateField *pUserPasswordUpdate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///资金账户口令更新请求响应 + virtual void OnRspTradingAccountPasswordUpdate(CThostFtdcTradingAccountPasswordUpdateField *pTradingAccountPasswordUpdate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///报单录入请求响应 + virtual void OnRspOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///预埋单录入请求响应 + virtual void OnRspParkedOrderInsert(CThostFtdcParkedOrderField *pParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///预埋撤单录入请求响应 + virtual void OnRspParkedOrderAction(CThostFtdcParkedOrderActionField *pParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///报单操作请求响应 + virtual void OnRspOrderAction(CThostFtdcInputOrderActionField *pInputOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///查询最大报单数量响应 + virtual void OnRspQueryMaxOrderVolume(CThostFtdcQueryMaxOrderVolumeField *pQueryMaxOrderVolume, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///投资者结算结果确认响应 + virtual void OnRspSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///删除预埋单响应 + virtual void OnRspRemoveParkedOrder(CThostFtdcRemoveParkedOrderField *pRemoveParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///删除预埋撤单响应 + virtual void OnRspRemoveParkedOrderAction(CThostFtdcRemoveParkedOrderActionField *pRemoveParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///执行宣告录入请求响应 + virtual void OnRspExecOrderInsert(CThostFtdcInputExecOrderField *pInputExecOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///执行宣告操作请求响应 + virtual void OnRspExecOrderAction(CThostFtdcInputExecOrderActionField *pInputExecOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///询价录入请求响应 + virtual void OnRspForQuoteInsert(CThostFtdcInputForQuoteField *pInputForQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///报价录入请求响应 + virtual void OnRspQuoteInsert(CThostFtdcInputQuoteField *pInputQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///报价操作请求响应 + virtual void OnRspQuoteAction(CThostFtdcInputQuoteActionField *pInputQuoteAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询报单响应 + virtual void OnRspQryOrder(CThostFtdcOrderField *pOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询成交响应 + virtual void OnRspQryTrade(CThostFtdcTradeField *pTrade, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询投资者持仓响应 + virtual void OnRspQryInvestorPosition(CThostFtdcInvestorPositionField *pInvestorPosition, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询资金账户响应 + virtual void OnRspQryTradingAccount(CThostFtdcTradingAccountField *pTradingAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询投资者响应 + virtual void OnRspQryInvestor(CThostFtdcInvestorField *pInvestor, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询交易编码响应 + virtual void OnRspQryTradingCode(CThostFtdcTradingCodeField *pTradingCode, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询合约保证金率响应 + virtual void OnRspQryInstrumentMarginRate(CThostFtdcInstrumentMarginRateField *pInstrumentMarginRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询合约手续费率响应 + virtual void OnRspQryInstrumentCommissionRate(CThostFtdcInstrumentCommissionRateField *pInstrumentCommissionRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询交易所响应 + virtual void OnRspQryExchange(CThostFtdcExchangeField *pExchange, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询产品响应 + virtual void OnRspQryProduct(CThostFtdcProductField *pProduct, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询合约响应 + virtual void OnRspQryInstrument(CThostFtdcInstrumentField *pInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询行情响应 + virtual void OnRspQryDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询投资者结算结果响应 + virtual void OnRspQrySettlementInfo(CThostFtdcSettlementInfoField *pSettlementInfo, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询转帐银行响应 + virtual void OnRspQryTransferBank(CThostFtdcTransferBankField *pTransferBank, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询投资者持仓明细响应 + virtual void OnRspQryInvestorPositionDetail(CThostFtdcInvestorPositionDetailField *pInvestorPositionDetail, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询客户通知响应 + virtual void OnRspQryNotice(CThostFtdcNoticeField *pNotice, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询结算信息确认响应 + virtual void OnRspQrySettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询投资者持仓明细响应 + virtual void OnRspQryInvestorPositionCombineDetail(CThostFtdcInvestorPositionCombineDetailField *pInvestorPositionCombineDetail, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///查询保证金监管系统经纪公司资金账户密钥响应 + virtual void OnRspQryCFMMCTradingAccountKey(CThostFtdcCFMMCTradingAccountKeyField *pCFMMCTradingAccountKey, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询仓单折抵信息响应 + virtual void OnRspQryEWarrantOffset(CThostFtdcEWarrantOffsetField *pEWarrantOffset, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询投资者品种/跨品种保证金响应 + virtual void OnRspQryInvestorProductGroupMargin(CThostFtdcInvestorProductGroupMarginField *pInvestorProductGroupMargin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询交易所保证金率响应 + virtual void OnRspQryExchangeMarginRate(CThostFtdcExchangeMarginRateField *pExchangeMarginRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询交易所调整保证金率响应 + virtual void OnRspQryExchangeMarginRateAdjust(CThostFtdcExchangeMarginRateAdjustField *pExchangeMarginRateAdjust, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询汇率响应 + virtual void OnRspQryExchangeRate(CThostFtdcExchangeRateField *pExchangeRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询二级代理操作员银期权限响应 + virtual void OnRspQrySecAgentACIDMap(CThostFtdcSecAgentACIDMapField *pSecAgentACIDMap, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询期权交易成本响应 + virtual void OnRspQryOptionInstrTradeCost(CThostFtdcOptionInstrTradeCostField *pOptionInstrTradeCost, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询期权合约手续费响应 + virtual void OnRspQryOptionInstrCommRate(CThostFtdcOptionInstrCommRateField *pOptionInstrCommRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询执行宣告响应 + virtual void OnRspQryExecOrder(CThostFtdcExecOrderField *pExecOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询询价响应 + virtual void OnRspQryForQuote(CThostFtdcForQuoteField *pForQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询报价响应 + virtual void OnRspQryQuote(CThostFtdcQuoteField *pQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询转帐流水响应 + virtual void OnRspQryTransferSerial(CThostFtdcTransferSerialField *pTransferSerial, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询银期签约关系响应 + virtual void OnRspQryAccountregister(CThostFtdcAccountregisterField *pAccountregister, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///错误应答 + virtual void OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///报单通知 + virtual void OnRtnOrder(CThostFtdcOrderField *pOrder) {}; + + ///成交通知 + virtual void OnRtnTrade(CThostFtdcTradeField *pTrade) {}; + + ///报单录入错误回报 + virtual void OnErrRtnOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo) {}; + + ///报单操作错误回报 + virtual void OnErrRtnOrderAction(CThostFtdcOrderActionField *pOrderAction, CThostFtdcRspInfoField *pRspInfo) {}; + + ///合约交易状态通知 + virtual void OnRtnInstrumentStatus(CThostFtdcInstrumentStatusField *pInstrumentStatus) {}; + + ///交易通知 + virtual void OnRtnTradingNotice(CThostFtdcTradingNoticeInfoField *pTradingNoticeInfo) {}; + + ///提示条件单校验错误 + virtual void OnRtnErrorConditionalOrder(CThostFtdcErrorConditionalOrderField *pErrorConditionalOrder) {}; + + ///执行宣告通知 + virtual void OnRtnExecOrder(CThostFtdcExecOrderField *pExecOrder) {}; + + ///执行宣告录入错误回报 + virtual void OnErrRtnExecOrderInsert(CThostFtdcInputExecOrderField *pInputExecOrder, CThostFtdcRspInfoField *pRspInfo) {}; + + ///执行宣告操作错误回报 + virtual void OnErrRtnExecOrderAction(CThostFtdcExecOrderActionField *pExecOrderAction, CThostFtdcRspInfoField *pRspInfo) {}; + + ///询价录入错误回报 + virtual void OnErrRtnForQuoteInsert(CThostFtdcInputForQuoteField *pInputForQuote, CThostFtdcRspInfoField *pRspInfo) {}; + + ///报价通知 + virtual void OnRtnQuote(CThostFtdcQuoteField *pQuote) {}; + + ///报价录入错误回报 + virtual void OnErrRtnQuoteInsert(CThostFtdcInputQuoteField *pInputQuote, CThostFtdcRspInfoField *pRspInfo) {}; + + ///报价操作错误回报 + virtual void OnErrRtnQuoteAction(CThostFtdcQuoteActionField *pQuoteAction, CThostFtdcRspInfoField *pRspInfo) {}; + + ///询价通知 + virtual void OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp) {}; + + ///请求查询签约银行响应 + virtual void OnRspQryContractBank(CThostFtdcContractBankField *pContractBank, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询预埋单响应 + virtual void OnRspQryParkedOrder(CThostFtdcParkedOrderField *pParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询预埋撤单响应 + virtual void OnRspQryParkedOrderAction(CThostFtdcParkedOrderActionField *pParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询交易通知响应 + virtual void OnRspQryTradingNotice(CThostFtdcTradingNoticeField *pTradingNotice, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询经纪公司交易参数响应 + virtual void OnRspQryBrokerTradingParams(CThostFtdcBrokerTradingParamsField *pBrokerTradingParams, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///请求查询经纪公司交易算法响应 + virtual void OnRspQryBrokerTradingAlgos(CThostFtdcBrokerTradingAlgosField *pBrokerTradingAlgos, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///银行发起银行资金转期货通知 + virtual void OnRtnFromBankToFutureByBank(CThostFtdcRspTransferField *pRspTransfer) {}; + + ///银行发起期货资金转银行通知 + virtual void OnRtnFromFutureToBankByBank(CThostFtdcRspTransferField *pRspTransfer) {}; + + ///银行发起冲正银行转期货通知 + virtual void OnRtnRepealFromBankToFutureByBank(CThostFtdcRspRepealField *pRspRepeal) {}; + + ///银行发起冲正期货转银行通知 + virtual void OnRtnRepealFromFutureToBankByBank(CThostFtdcRspRepealField *pRspRepeal) {}; + + ///期货发起银行资金转期货通知 + virtual void OnRtnFromBankToFutureByFuture(CThostFtdcRspTransferField *pRspTransfer) {}; + + ///期货发起期货资金转银行通知 + virtual void OnRtnFromFutureToBankByFuture(CThostFtdcRspTransferField *pRspTransfer) {}; + + ///系统运行时期货端手工发起冲正银行转期货请求,银行处理完毕后报盘发回的通知 + virtual void OnRtnRepealFromBankToFutureByFutureManual(CThostFtdcRspRepealField *pRspRepeal) {}; + + ///系统运行时期货端手工发起冲正期货转银行请求,银行处理完毕后报盘发回的通知 + virtual void OnRtnRepealFromFutureToBankByFutureManual(CThostFtdcRspRepealField *pRspRepeal) {}; + + ///期货发起查询银行余额通知 + virtual void OnRtnQueryBankBalanceByFuture(CThostFtdcNotifyQueryAccountField *pNotifyQueryAccount) {}; + + ///期货发起银行资金转期货错误回报 + virtual void OnErrRtnBankToFutureByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo) {}; + + ///期货发起期货资金转银行错误回报 + virtual void OnErrRtnFutureToBankByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo) {}; + + ///系统运行时期货端手工发起冲正银行转期货错误回报 + virtual void OnErrRtnRepealBankToFutureByFutureManual(CThostFtdcReqRepealField *pReqRepeal, CThostFtdcRspInfoField *pRspInfo) {}; + + ///系统运行时期货端手工发起冲正期货转银行错误回报 + virtual void OnErrRtnRepealFutureToBankByFutureManual(CThostFtdcReqRepealField *pReqRepeal, CThostFtdcRspInfoField *pRspInfo) {}; + + ///期货发起查询银行余额错误回报 + virtual void OnErrRtnQueryBankBalanceByFuture(CThostFtdcReqQueryAccountField *pReqQueryAccount, CThostFtdcRspInfoField *pRspInfo) {}; + + ///期货发起冲正银行转期货请求,银行处理完毕后报盘发回的通知 + virtual void OnRtnRepealFromBankToFutureByFuture(CThostFtdcRspRepealField *pRspRepeal) {}; + + ///期货发起冲正期货转银行请求,银行处理完毕后报盘发回的通知 + virtual void OnRtnRepealFromFutureToBankByFuture(CThostFtdcRspRepealField *pRspRepeal) {}; + + ///期货发起银行资金转期货应答 + virtual void OnRspFromBankToFutureByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///期货发起期货资金转银行应答 + virtual void OnRspFromFutureToBankByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///期货发起查询银行余额应答 + virtual void OnRspQueryBankAccountMoneyByFuture(CThostFtdcReqQueryAccountField *pReqQueryAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {}; + + ///银行发起银期开户通知 + virtual void OnRtnOpenAccountByBank(CThostFtdcOpenAccountField *pOpenAccount) {}; + + ///银行发起银期销户通知 + virtual void OnRtnCancelAccountByBank(CThostFtdcCancelAccountField *pCancelAccount) {}; + + ///银行发起变更银行账号通知 + virtual void OnRtnChangeAccountByBank(CThostFtdcChangeAccountField *pChangeAccount) {}; +}; + +class TRADER_API_EXPORT CThostFtdcTraderApi +{ +public: + ///创建TraderApi + ///@param pszFlowPath 存贮订阅信息文件的目录,默认为当前目录 + ///@return 创建出的UserApi + static CThostFtdcTraderApi *CreateFtdcTraderApi(const char *pszFlowPath = ""); + + ///删除接口对象本身 + ///@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; + + ///注册名字服务器网络地址 + ///@param pszNsAddress:名字服务器网络地址。 + ///@remark 网络地址的格式为:“protocol://ipaddress:port”,如:”tcp://127.0.0.1:12001”。 + ///@remark “tcp”代表传输协议,“127.0.0.1”代表服务器地址。”12001”代表服务器端口号。 + ///@remark RegisterNameServer优先于RegisterFront + virtual void RegisterNameServer(char *pszNsAddress) = 0; + + ///注册名字服务器用户信息 + ///@param pFensUserInfo:用户信息。 + virtual void RegisterFensUserInfo(CThostFtdcFensUserInfoField * pFensUserInfo) = 0; + + ///注册回调接口 + ///@param pSpi 派生自回调接口类的实例 + virtual void RegisterSpi(CThostFtdcTraderSpi *pSpi) = 0; + + ///订阅私有流。 + ///@param nResumeType 私有流重传方式 + /// THOST_TERT_RESTART:从本交易日开始重传 + /// THOST_TERT_RESUME:从上次收到的续传 + /// THOST_TERT_QUICK:只传送登录后私有流的内容 + ///@remark 该方法要在Init方法前调用。若不调用则不会收到私有流的数据。 + virtual void SubscribePrivateTopic(THOST_TE_RESUME_TYPE nResumeType) = 0; + + ///订阅公共流。 + ///@param nResumeType 公共流重传方式 + /// THOST_TERT_RESTART:从本交易日开始重传 + /// THOST_TERT_RESUME:从上次收到的续传 + /// THOST_TERT_QUICK:只传送登录后公共流的内容 + ///@remark 该方法要在Init方法前调用。若不调用则不会收到公共流的数据。 + virtual void SubscribePublicTopic(THOST_TE_RESUME_TYPE nResumeType) = 0; + + ///客户端认证请求 + virtual int ReqAuthenticate(CThostFtdcReqAuthenticateField *pReqAuthenticateField, int nRequestID) = 0; + + ///用户登录请求 + virtual int ReqUserLogin(CThostFtdcReqUserLoginField *pReqUserLoginField, int nRequestID) = 0; + + + ///登出请求 + virtual int ReqUserLogout(CThostFtdcUserLogoutField *pUserLogout, int nRequestID) = 0; + + ///用户口令更新请求 + virtual int ReqUserPasswordUpdate(CThostFtdcUserPasswordUpdateField *pUserPasswordUpdate, int nRequestID) = 0; + + ///资金账户口令更新请求 + virtual int ReqTradingAccountPasswordUpdate(CThostFtdcTradingAccountPasswordUpdateField *pTradingAccountPasswordUpdate, int nRequestID) = 0; + + ///报单录入请求 + virtual int ReqOrderInsert(CThostFtdcInputOrderField *pInputOrder, int nRequestID) = 0; + + ///预埋单录入请求 + virtual int ReqParkedOrderInsert(CThostFtdcParkedOrderField *pParkedOrder, int nRequestID) = 0; + + ///预埋撤单录入请求 + virtual int ReqParkedOrderAction(CThostFtdcParkedOrderActionField *pParkedOrderAction, int nRequestID) = 0; + + ///报单操作请求 + virtual int ReqOrderAction(CThostFtdcInputOrderActionField *pInputOrderAction, int nRequestID) = 0; + + ///查询最大报单数量请求 + virtual int ReqQueryMaxOrderVolume(CThostFtdcQueryMaxOrderVolumeField *pQueryMaxOrderVolume, int nRequestID) = 0; + + ///投资者结算结果确认 + virtual int ReqSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, int nRequestID) = 0; + + ///请求删除预埋单 + virtual int ReqRemoveParkedOrder(CThostFtdcRemoveParkedOrderField *pRemoveParkedOrder, int nRequestID) = 0; + + ///请求删除预埋撤单 + virtual int ReqRemoveParkedOrderAction(CThostFtdcRemoveParkedOrderActionField *pRemoveParkedOrderAction, int nRequestID) = 0; + + ///执行宣告录入请求 + virtual int ReqExecOrderInsert(CThostFtdcInputExecOrderField *pInputExecOrder, int nRequestID) = 0; + + ///执行宣告操作请求 + virtual int ReqExecOrderAction(CThostFtdcInputExecOrderActionField *pInputExecOrderAction, int nRequestID) = 0; + + ///询价录入请求 + virtual int ReqForQuoteInsert(CThostFtdcInputForQuoteField *pInputForQuote, int nRequestID) = 0; + + ///报价录入请求 + virtual int ReqQuoteInsert(CThostFtdcInputQuoteField *pInputQuote, int nRequestID) = 0; + + ///报价操作请求 + virtual int ReqQuoteAction(CThostFtdcInputQuoteActionField *pInputQuoteAction, int nRequestID) = 0; + + ///请求查询报单 + virtual int ReqQryOrder(CThostFtdcQryOrderField *pQryOrder, int nRequestID) = 0; + + ///请求查询成交 + virtual int ReqQryTrade(CThostFtdcQryTradeField *pQryTrade, int nRequestID) = 0; + + ///请求查询投资者持仓 + virtual int ReqQryInvestorPosition(CThostFtdcQryInvestorPositionField *pQryInvestorPosition, int nRequestID) = 0; + + ///请求查询资金账户 + virtual int ReqQryTradingAccount(CThostFtdcQryTradingAccountField *pQryTradingAccount, int nRequestID) = 0; + + ///请求查询投资者 + virtual int ReqQryInvestor(CThostFtdcQryInvestorField *pQryInvestor, int nRequestID) = 0; + + ///请求查询交易编码 + virtual int ReqQryTradingCode(CThostFtdcQryTradingCodeField *pQryTradingCode, int nRequestID) = 0; + + ///请求查询合约保证金率 + virtual int ReqQryInstrumentMarginRate(CThostFtdcQryInstrumentMarginRateField *pQryInstrumentMarginRate, int nRequestID) = 0; + + ///请求查询合约手续费率 + virtual int ReqQryInstrumentCommissionRate(CThostFtdcQryInstrumentCommissionRateField *pQryInstrumentCommissionRate, int nRequestID) = 0; + + ///请求查询交易所 + virtual int ReqQryExchange(CThostFtdcQryExchangeField *pQryExchange, int nRequestID) = 0; + + ///请求查询产品 + virtual int ReqQryProduct(CThostFtdcQryProductField *pQryProduct, int nRequestID) = 0; + + ///请求查询合约 + virtual int ReqQryInstrument(CThostFtdcQryInstrumentField *pQryInstrument, int nRequestID) = 0; + + ///请求查询行情 + virtual int ReqQryDepthMarketData(CThostFtdcQryDepthMarketDataField *pQryDepthMarketData, int nRequestID) = 0; + + ///请求查询投资者结算结果 + virtual int ReqQrySettlementInfo(CThostFtdcQrySettlementInfoField *pQrySettlementInfo, int nRequestID) = 0; + + ///请求查询转帐银行 + virtual int ReqQryTransferBank(CThostFtdcQryTransferBankField *pQryTransferBank, int nRequestID) = 0; + + ///请求查询投资者持仓明细 + virtual int ReqQryInvestorPositionDetail(CThostFtdcQryInvestorPositionDetailField *pQryInvestorPositionDetail, int nRequestID) = 0; + + ///请求查询客户通知 + virtual int ReqQryNotice(CThostFtdcQryNoticeField *pQryNotice, int nRequestID) = 0; + + ///请求查询结算信息确认 + virtual int ReqQrySettlementInfoConfirm(CThostFtdcQrySettlementInfoConfirmField *pQrySettlementInfoConfirm, int nRequestID) = 0; + + ///请求查询投资者持仓明细 + virtual int ReqQryInvestorPositionCombineDetail(CThostFtdcQryInvestorPositionCombineDetailField *pQryInvestorPositionCombineDetail, int nRequestID) = 0; + + ///请求查询保证金监管系统经纪公司资金账户密钥 + virtual int ReqQryCFMMCTradingAccountKey(CThostFtdcQryCFMMCTradingAccountKeyField *pQryCFMMCTradingAccountKey, int nRequestID) = 0; + + ///请求查询仓单折抵信息 + virtual int ReqQryEWarrantOffset(CThostFtdcQryEWarrantOffsetField *pQryEWarrantOffset, int nRequestID) = 0; + + ///请求查询投资者品种/跨品种保证金 + virtual int ReqQryInvestorProductGroupMargin(CThostFtdcQryInvestorProductGroupMarginField *pQryInvestorProductGroupMargin, int nRequestID) = 0; + + ///请求查询交易所保证金率 + virtual int ReqQryExchangeMarginRate(CThostFtdcQryExchangeMarginRateField *pQryExchangeMarginRate, int nRequestID) = 0; + + ///请求查询交易所调整保证金率 + virtual int ReqQryExchangeMarginRateAdjust(CThostFtdcQryExchangeMarginRateAdjustField *pQryExchangeMarginRateAdjust, int nRequestID) = 0; + + ///请求查询汇率 + virtual int ReqQryExchangeRate(CThostFtdcQryExchangeRateField *pQryExchangeRate, int nRequestID) = 0; + + ///请求查询二级代理操作员银期权限 + virtual int ReqQrySecAgentACIDMap(CThostFtdcQrySecAgentACIDMapField *pQrySecAgentACIDMap, int nRequestID) = 0; + + ///请求查询期权交易成本 + virtual int ReqQryOptionInstrTradeCost(CThostFtdcQryOptionInstrTradeCostField *pQryOptionInstrTradeCost, int nRequestID) = 0; + + ///请求查询期权合约手续费 + virtual int ReqQryOptionInstrCommRate(CThostFtdcQryOptionInstrCommRateField *pQryOptionInstrCommRate, int nRequestID) = 0; + + ///请求查询执行宣告 + virtual int ReqQryExecOrder(CThostFtdcQryExecOrderField *pQryExecOrder, int nRequestID) = 0; + + ///请求查询询价 + virtual int ReqQryForQuote(CThostFtdcQryForQuoteField *pQryForQuote, int nRequestID) = 0; + + ///请求查询报价 + virtual int ReqQryQuote(CThostFtdcQryQuoteField *pQryQuote, int nRequestID) = 0; + + ///请求查询转帐流水 + virtual int ReqQryTransferSerial(CThostFtdcQryTransferSerialField *pQryTransferSerial, int nRequestID) = 0; + + ///请求查询银期签约关系 + virtual int ReqQryAccountregister(CThostFtdcQryAccountregisterField *pQryAccountregister, int nRequestID) = 0; + + ///请求查询签约银行 + virtual int ReqQryContractBank(CThostFtdcQryContractBankField *pQryContractBank, int nRequestID) = 0; + + ///请求查询预埋单 + virtual int ReqQryParkedOrder(CThostFtdcQryParkedOrderField *pQryParkedOrder, int nRequestID) = 0; + + ///请求查询预埋撤单 + virtual int ReqQryParkedOrderAction(CThostFtdcQryParkedOrderActionField *pQryParkedOrderAction, int nRequestID) = 0; + + ///请求查询交易通知 + virtual int ReqQryTradingNotice(CThostFtdcQryTradingNoticeField *pQryTradingNotice, int nRequestID) = 0; + + ///请求查询经纪公司交易参数 + virtual int ReqQryBrokerTradingParams(CThostFtdcQryBrokerTradingParamsField *pQryBrokerTradingParams, int nRequestID) = 0; + + ///请求查询经纪公司交易算法 + virtual int ReqQryBrokerTradingAlgos(CThostFtdcQryBrokerTradingAlgosField *pQryBrokerTradingAlgos, int nRequestID) = 0; + + ///期货发起银行资金转期货请求 + virtual int ReqFromBankToFutureByFuture(CThostFtdcReqTransferField *pReqTransfer, int nRequestID) = 0; + + ///期货发起期货资金转银行请求 + virtual int ReqFromFutureToBankByFuture(CThostFtdcReqTransferField *pReqTransfer, int nRequestID) = 0; + + ///期货发起查询银行余额请求 + virtual int ReqQueryBankAccountMoneyByFuture(CThostFtdcReqQueryAccountField *pReqQueryAccount, int nRequestID) = 0; +protected: + ~CThostFtdcTraderApi(){}; +}; + +#endif diff --git a/vn.ctp/pyscript/ThostFtdcUserApiDataType.h b/vn.ctp/pyscript/ThostFtdcUserApiDataType.h new file mode 100644 index 00000000..15c6e00b --- /dev/null +++ b/vn.ctp/pyscript/ThostFtdcUserApiDataType.h @@ -0,0 +1,6267 @@ +///////////////////////////////////////////////////////////////////////// +///@system 新一代交易所系统 +///@company 上海期货信息技术有限公司 +///@file ThostFtdcUserApiDataType.h +///@brief 定义了客户端接口使用的业务数据类型 +///@history +///20060106 赵鸿昊 创建该文件 +///////////////////////////////////////////////////////////////////////// + +#ifndef THOST_FTDCDATATYPE_H +#define THOST_FTDCDATATYPE_H + +enum THOST_TE_RESUME_TYPE +{ + THOST_TERT_RESTART = 0, + THOST_TERT_RESUME, + THOST_TERT_QUICK +}; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTraderIDType是一个交易所交易员代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTraderIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestorIDType是一个投资者代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInvestorIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrokerIDType是一个经纪公司代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBrokerIDType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrokerAbbrType是一个经纪公司简称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBrokerAbbrType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrokerNameType是一个经纪公司名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBrokerNameType[81]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangeInstIDType是一个合约在交易所的代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcExchangeInstIDType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderRefType是一个报单引用类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOrderRefType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcParticipantIDType是一个会员代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcParticipantIDType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserIDType是一个用户代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUserIDType[16]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPasswordType是一个密码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPasswordType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClientIDType是一个交易编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcClientIDType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstrumentIDType是一个合约代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInstrumentIDType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMarketIDType是一个市场代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcMarketIDType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProductNameType是一个产品名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcProductNameType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangeIDType是一个交易所代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcExchangeIDType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangeNameType是一个交易所名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcExchangeNameType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangeAbbrType是一个交易所简称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcExchangeAbbrType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangeFlagType是一个交易所标志类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcExchangeFlagType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMacAddressType是一个Mac地址类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcMacAddressType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSystemIDType是一个系统编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSystemIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangePropertyType是一个交易所属性类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_EXP_Normal '0' +///根据成交生成报单 +#define THOST_FTDC_EXP_GenOrderByTrade '1' + +typedef char TThostFtdcExchangePropertyType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDateType是一个日期类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDateType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTimeType是一个时间类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTimeType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLongTimeType是一个长时间类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcLongTimeType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstrumentNameType是一个合约名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInstrumentNameType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettlementGroupIDType是一个结算组代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSettlementGroupIDType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderSysIDType是一个报单编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOrderSysIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeIDType是一个成交编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTradeIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCommandTypeType是一个DB命令类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCommandTypeType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIPAddressType是一个IP地址类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcIPAddressType[16]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIPPortType是一个IP端口类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcIPPortType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProductInfoType是一个产品信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcProductInfoType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProtocolInfoType是一个协议信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcProtocolInfoType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBusinessUnitType是一个业务单元类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBusinessUnitType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDepositSeqNoType是一个出入金流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDepositSeqNoType[15]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIdentifiedCardNoType是一个证件号码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcIdentifiedCardNoType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIdCardTypeType是一个证件类型类型 +///////////////////////////////////////////////////////////////////////// +///组织机构代码 +#define THOST_FTDC_ICT_EID '0' +///中国公民身份证 +#define THOST_FTDC_ICT_IDCard '1' +///军官证 +#define THOST_FTDC_ICT_OfficerIDCard '2' +///警官证 +#define THOST_FTDC_ICT_PoliceIDCard '3' +///士兵证 +#define THOST_FTDC_ICT_SoldierIDCard '4' +///户口簿 +#define THOST_FTDC_ICT_HouseholdRegister '5' +///护照 +#define THOST_FTDC_ICT_Passport '6' +///台胞证 +#define THOST_FTDC_ICT_TaiwanCompatriotIDCard '7' +///回乡证 +#define THOST_FTDC_ICT_HomeComingCard '8' +///营业执照号 +#define THOST_FTDC_ICT_LicenseNo '9' +///税务登记号/当地纳税ID +#define THOST_FTDC_ICT_TaxNo 'A' +///港澳居民来往内地通行证 +#define THOST_FTDC_ICT_HMMainlandTravelPermit 'B' +///台湾居民来往大陆通行证 +#define THOST_FTDC_ICT_TwMainlandTravelPermit 'C' +///驾照 +#define THOST_FTDC_ICT_DrivingLicense 'D' +///当地社保ID +#define THOST_FTDC_ICT_SocialID 'F' +///当地身份证 +#define THOST_FTDC_ICT_LocalID 'G' +///商业登记证 +#define THOST_FTDC_ICT_BusinessRegistration 'H' +///港澳永久性居民身份证 +#define THOST_FTDC_ICT_HKMCIDCard 'I' +///其他证件 +#define THOST_FTDC_ICT_OtherCard 'x' + +typedef char TThostFtdcIdCardTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderLocalIDType是一个本地报单编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOrderLocalIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserNameType是一个用户名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUserNameType[81]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPartyNameType是一个参与人名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPartyNameType[81]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcErrorMsgType是一个错误信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcErrorMsgType[81]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFieldNameType是一个字段名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFieldNameType[2049]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFieldContentType是一个字段内容类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFieldContentType[2049]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSystemNameType是一个系统名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSystemNameType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcContentType是一个消息正文类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcContentType[501]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestorRangeType是一个投资者范围类型 +///////////////////////////////////////////////////////////////////////// +///所有 +#define THOST_FTDC_IR_All '1' +///投资者组 +#define THOST_FTDC_IR_Group '2' +///单一投资者 +#define THOST_FTDC_IR_Single '3' + +typedef char TThostFtdcInvestorRangeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDepartmentRangeType是一个投资者范围类型 +///////////////////////////////////////////////////////////////////////// +///所有 +#define THOST_FTDC_DR_All '1' +///组织架构 +#define THOST_FTDC_DR_Group '2' +///单一投资者 +#define THOST_FTDC_DR_Single '3' + +typedef char TThostFtdcDepartmentRangeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDataSyncStatusType是一个数据同步状态类型 +///////////////////////////////////////////////////////////////////////// +///未同步 +#define THOST_FTDC_DS_Asynchronous '1' +///同步中 +#define THOST_FTDC_DS_Synchronizing '2' +///已同步 +#define THOST_FTDC_DS_Synchronized '3' + +typedef char TThostFtdcDataSyncStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrokerDataSyncStatusType是一个经纪公司数据同步状态类型 +///////////////////////////////////////////////////////////////////////// +///已同步 +#define THOST_FTDC_BDS_Synchronized '1' +///同步中 +#define THOST_FTDC_BDS_Synchronizing '2' + +typedef char TThostFtdcBrokerDataSyncStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangeConnectStatusType是一个交易所连接状态类型 +///////////////////////////////////////////////////////////////////////// +///没有任何连接 +#define THOST_FTDC_ECS_NoConnection '1' +///已经发出合约查询请求 +#define THOST_FTDC_ECS_QryInstrumentSent '2' +///已经获取信息 +#define THOST_FTDC_ECS_GotInformation '9' + +typedef char TThostFtdcExchangeConnectStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTraderConnectStatusType是一个交易所交易员连接状态类型 +///////////////////////////////////////////////////////////////////////// +///没有任何连接 +#define THOST_FTDC_TCS_NotConnected '1' +///已经连接 +#define THOST_FTDC_TCS_Connected '2' +///已经发出合约查询请求 +#define THOST_FTDC_TCS_QryInstrumentSent '3' +///订阅私有流 +#define THOST_FTDC_TCS_SubPrivateFlow '4' + +typedef char TThostFtdcTraderConnectStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFunctionCodeType是一个功能代码类型 +///////////////////////////////////////////////////////////////////////// +///数据异步化 +#define THOST_FTDC_FC_DataAsync '1' +///强制用户登出 +#define THOST_FTDC_FC_ForceUserLogout '2' +///变更管理用户口令 +#define THOST_FTDC_FC_UserPasswordUpdate '3' +///变更经纪公司口令 +#define THOST_FTDC_FC_BrokerPasswordUpdate '4' +///变更投资者口令 +#define THOST_FTDC_FC_InvestorPasswordUpdate '5' +///报单插入 +#define THOST_FTDC_FC_OrderInsert '6' +///报单操作 +#define THOST_FTDC_FC_OrderAction '7' +///同步系统数据 +#define THOST_FTDC_FC_SyncSystemData '8' +///同步经纪公司数据 +#define THOST_FTDC_FC_SyncBrokerData '9' +///批量同步经纪公司数据 +#define THOST_FTDC_FC_BachSyncBrokerData 'A' +///超级查询 +#define THOST_FTDC_FC_SuperQuery 'B' +///预埋报单插入 +#define THOST_FTDC_FC_ParkedOrderInsert 'C' +///预埋报单操作 +#define THOST_FTDC_FC_ParkedOrderAction 'D' +///同步动态令牌 +#define THOST_FTDC_FC_SyncOTP 'E' +///删除未知单 +#define THOST_FTDC_FC_DeleteOrder 'F' + +typedef char TThostFtdcFunctionCodeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrokerFunctionCodeType是一个经纪公司功能代码类型 +///////////////////////////////////////////////////////////////////////// +///强制用户登出 +#define THOST_FTDC_BFC_ForceUserLogout '1' +///变更用户口令 +#define THOST_FTDC_BFC_UserPasswordUpdate '2' +///同步经纪公司数据 +#define THOST_FTDC_BFC_SyncBrokerData '3' +///批量同步经纪公司数据 +#define THOST_FTDC_BFC_BachSyncBrokerData '4' +///报单插入 +#define THOST_FTDC_BFC_OrderInsert '5' +///报单操作 +#define THOST_FTDC_BFC_OrderAction '6' +///全部查询 +#define THOST_FTDC_BFC_AllQuery '7' +///系统功能:登入/登出/修改密码等 +#define THOST_FTDC_BFC_log 'a' +///基本查询:查询基础数据,如合约,交易所等常量 +#define THOST_FTDC_BFC_BaseQry 'b' +///交易查询:如查成交,委托 +#define THOST_FTDC_BFC_TradeQry 'c' +///交易功能:报单,撤单 +#define THOST_FTDC_BFC_Trade 'd' +///银期转账 +#define THOST_FTDC_BFC_Virement 'e' +///风险监控 +#define THOST_FTDC_BFC_Risk 'f' +///查询/管理:查询会话,踢人等 +#define THOST_FTDC_BFC_Session 'g' +///风控通知控制 +#define THOST_FTDC_BFC_RiskNoticeCtl 'h' +///风控通知发送 +#define THOST_FTDC_BFC_RiskNotice 'i' +///察看经纪公司资金权限 +#define THOST_FTDC_BFC_BrokerDeposit 'j' +///资金查询 +#define THOST_FTDC_BFC_QueryFund 'k' +///报单查询 +#define THOST_FTDC_BFC_QueryOrder 'l' +///成交查询 +#define THOST_FTDC_BFC_QueryTrade 'm' +///持仓查询 +#define THOST_FTDC_BFC_QueryPosition 'n' +///行情查询 +#define THOST_FTDC_BFC_QueryMarketData 'o' +///用户事件查询 +#define THOST_FTDC_BFC_QueryUserEvent 'p' +///风险通知查询 +#define THOST_FTDC_BFC_QueryRiskNotify 'q' +///出入金查询 +#define THOST_FTDC_BFC_QueryFundChange 'r' +///投资者信息查询 +#define THOST_FTDC_BFC_QueryInvestor 's' +///交易编码查询 +#define THOST_FTDC_BFC_QueryTradingCode 't' +///强平 +#define THOST_FTDC_BFC_ForceClose 'u' +///压力测试 +#define THOST_FTDC_BFC_PressTest 'v' +///权益反算 +#define THOST_FTDC_BFC_RemainCalc 'w' +///净持仓保证金指标 +#define THOST_FTDC_BFC_NetPositionInd 'x' +///风险预算 +#define THOST_FTDC_BFC_RiskPredict 'y' +///数据导出 +#define THOST_FTDC_BFC_DataExport 'z' +///风控指标设置 +#define THOST_FTDC_BFC_RiskTargetSetup 'A' +///行情预警 +#define THOST_FTDC_BFC_MarketDataWarn 'B' +///业务通知查询 +#define THOST_FTDC_BFC_QryBizNotice 'C' +///业务通知模板设置 +#define THOST_FTDC_BFC_CfgBizNotice 'D' +///同步动态令牌 +#define THOST_FTDC_BFC_SyncOTP 'E' +///发送业务通知 +#define THOST_FTDC_BFC_SendBizNotice 'F' +///风险级别标准设置 +#define THOST_FTDC_BFC_CfgRiskLevelStd 'G' +///交易终端应急功能 +#define THOST_FTDC_BFC_TbCommand 'H' +///删除未知单 +#define THOST_FTDC_BFC_DeleteOrder 'J' +///预埋报单插入 +#define THOST_FTDC_BFC_ParkedOrderInsert 'K' +///预埋报单操作 +#define THOST_FTDC_BFC_ParkedOrderAction 'L' + +typedef char TThostFtdcBrokerFunctionCodeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderActionStatusType是一个报单操作状态类型 +///////////////////////////////////////////////////////////////////////// +///已经提交 +#define THOST_FTDC_OAS_Submitted 'a' +///已经接受 +#define THOST_FTDC_OAS_Accepted 'b' +///已经被拒绝 +#define THOST_FTDC_OAS_Rejected 'c' + +typedef char TThostFtdcOrderActionStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderStatusType是一个报单状态类型 +///////////////////////////////////////////////////////////////////////// +///全部成交 +#define THOST_FTDC_OST_AllTraded '0' +///部分成交还在队列中 +#define THOST_FTDC_OST_PartTradedQueueing '1' +///部分成交不在队列中 +#define THOST_FTDC_OST_PartTradedNotQueueing '2' +///未成交还在队列中 +#define THOST_FTDC_OST_NoTradeQueueing '3' +///未成交不在队列中 +#define THOST_FTDC_OST_NoTradeNotQueueing '4' +///撤单 +#define THOST_FTDC_OST_Canceled '5' +///未知 +#define THOST_FTDC_OST_Unknown 'a' +///尚未触发 +#define THOST_FTDC_OST_NotTouched 'b' +///已触发 +#define THOST_FTDC_OST_Touched 'c' + +typedef char TThostFtdcOrderStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderSubmitStatusType是一个报单提交状态类型 +///////////////////////////////////////////////////////////////////////// +///已经提交 +#define THOST_FTDC_OSS_InsertSubmitted '0' +///撤单已经提交 +#define THOST_FTDC_OSS_CancelSubmitted '1' +///修改已经提交 +#define THOST_FTDC_OSS_ModifySubmitted '2' +///已经接受 +#define THOST_FTDC_OSS_Accepted '3' +///报单已经被拒绝 +#define THOST_FTDC_OSS_InsertRejected '4' +///撤单已经被拒绝 +#define THOST_FTDC_OSS_CancelRejected '5' +///改单已经被拒绝 +#define THOST_FTDC_OSS_ModifyRejected '6' + +typedef char TThostFtdcOrderSubmitStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPositionDateType是一个持仓日期类型 +///////////////////////////////////////////////////////////////////////// +///今日持仓 +#define THOST_FTDC_PSD_Today '1' +///历史持仓 +#define THOST_FTDC_PSD_History '2' + +typedef char TThostFtdcPositionDateType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPositionDateTypeType是一个持仓日期类型类型 +///////////////////////////////////////////////////////////////////////// +///使用历史持仓 +#define THOST_FTDC_PDT_UseHistory '1' +///不使用历史持仓 +#define THOST_FTDC_PDT_NoUseHistory '2' + +typedef char TThostFtdcPositionDateTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradingRoleType是一个交易角色类型 +///////////////////////////////////////////////////////////////////////// +///代理 +#define THOST_FTDC_ER_Broker '1' +///自营 +#define THOST_FTDC_ER_Host '2' +///做市商 +#define THOST_FTDC_ER_Maker '3' + +typedef char TThostFtdcTradingRoleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProductClassType是一个产品类型类型 +///////////////////////////////////////////////////////////////////////// +///期货 +#define THOST_FTDC_PC_Futures '1' +///期货期权 +#define THOST_FTDC_PC_Options '2' +///组合 +#define THOST_FTDC_PC_Combination '3' +///即期 +#define THOST_FTDC_PC_Spot '4' +///期转现 +#define THOST_FTDC_PC_EFP '5' +///现货期权 +#define THOST_FTDC_PC_SpotOption '6' + +typedef char TThostFtdcProductClassType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstLifePhaseType是一个合约生命周期状态类型 +///////////////////////////////////////////////////////////////////////// +///未上市 +#define THOST_FTDC_IP_NotStart '0' +///上市 +#define THOST_FTDC_IP_Started '1' +///停牌 +#define THOST_FTDC_IP_Pause '2' +///到期 +#define THOST_FTDC_IP_Expired '3' + +typedef char TThostFtdcInstLifePhaseType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDirectionType是一个买卖方向类型 +///////////////////////////////////////////////////////////////////////// +///买 +#define THOST_FTDC_D_Buy '0' +///卖 +#define THOST_FTDC_D_Sell '1' + +typedef char TThostFtdcDirectionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPositionTypeType是一个持仓类型类型 +///////////////////////////////////////////////////////////////////////// +///净持仓 +#define THOST_FTDC_PT_Net '1' +///综合持仓 +#define THOST_FTDC_PT_Gross '2' + +typedef char TThostFtdcPositionTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPosiDirectionType是一个持仓多空方向类型 +///////////////////////////////////////////////////////////////////////// +///净 +#define THOST_FTDC_PD_Net '1' +///多头 +#define THOST_FTDC_PD_Long '2' +///空头 +#define THOST_FTDC_PD_Short '3' + +typedef char TThostFtdcPosiDirectionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSysSettlementStatusType是一个系统结算状态类型 +///////////////////////////////////////////////////////////////////////// +///不活跃 +#define THOST_FTDC_SS_NonActive '1' +///启动 +#define THOST_FTDC_SS_Startup '2' +///操作 +#define THOST_FTDC_SS_Operating '3' +///结算 +#define THOST_FTDC_SS_Settlement '4' +///结算完成 +#define THOST_FTDC_SS_SettlementFinished '5' + +typedef char TThostFtdcSysSettlementStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRatioAttrType是一个费率属性类型 +///////////////////////////////////////////////////////////////////////// +///交易费率 +#define THOST_FTDC_RA_Trade '0' +///结算费率 +#define THOST_FTDC_RA_Settlement '1' + +typedef char TThostFtdcRatioAttrType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcHedgeFlagType是一个投机套保标志类型 +///////////////////////////////////////////////////////////////////////// +///投机 +#define THOST_FTDC_HF_Speculation '1' +///套利 +#define THOST_FTDC_HF_Arbitrage '2' +///套保 +#define THOST_FTDC_HF_Hedge '3' + +typedef char TThostFtdcHedgeFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBillHedgeFlagType是一个投机套保标志类型 +///////////////////////////////////////////////////////////////////////// +///投机 +#define THOST_FTDC_BHF_Speculation '1' +///套利 +#define THOST_FTDC_BHF_Arbitrage '2' +///套保 +#define THOST_FTDC_BHF_Hedge '3' + +typedef char TThostFtdcBillHedgeFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClientIDTypeType是一个交易编码类型类型 +///////////////////////////////////////////////////////////////////////// +///投机 +#define THOST_FTDC_CIDT_Speculation '1' +///套利 +#define THOST_FTDC_CIDT_Arbitrage '2' +///套保 +#define THOST_FTDC_CIDT_Hedge '3' + +typedef char TThostFtdcClientIDTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderPriceTypeType是一个报单价格条件类型 +///////////////////////////////////////////////////////////////////////// +///任意价 +#define THOST_FTDC_OPT_AnyPrice '1' +///限价 +#define THOST_FTDC_OPT_LimitPrice '2' +///最优价 +#define THOST_FTDC_OPT_BestPrice '3' +///最新价 +#define THOST_FTDC_OPT_LastPrice '4' +///最新价浮动上浮1个ticks +#define THOST_FTDC_OPT_LastPricePlusOneTicks '5' +///最新价浮动上浮2个ticks +#define THOST_FTDC_OPT_LastPricePlusTwoTicks '6' +///最新价浮动上浮3个ticks +#define THOST_FTDC_OPT_LastPricePlusThreeTicks '7' +///卖一价 +#define THOST_FTDC_OPT_AskPrice1 '8' +///卖一价浮动上浮1个ticks +#define THOST_FTDC_OPT_AskPrice1PlusOneTicks '9' +///卖一价浮动上浮2个ticks +#define THOST_FTDC_OPT_AskPrice1PlusTwoTicks 'A' +///卖一价浮动上浮3个ticks +#define THOST_FTDC_OPT_AskPrice1PlusThreeTicks 'B' +///买一价 +#define THOST_FTDC_OPT_BidPrice1 'C' +///买一价浮动上浮1个ticks +#define THOST_FTDC_OPT_BidPrice1PlusOneTicks 'D' +///买一价浮动上浮2个ticks +#define THOST_FTDC_OPT_BidPrice1PlusTwoTicks 'E' +///买一价浮动上浮3个ticks +#define THOST_FTDC_OPT_BidPrice1PlusThreeTicks 'F' + +typedef char TThostFtdcOrderPriceTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOffsetFlagType是一个开平标志类型 +///////////////////////////////////////////////////////////////////////// +///开仓 +#define THOST_FTDC_OF_Open '0' +///平仓 +#define THOST_FTDC_OF_Close '1' +///强平 +#define THOST_FTDC_OF_ForceClose '2' +///平今 +#define THOST_FTDC_OF_CloseToday '3' +///平昨 +#define THOST_FTDC_OF_CloseYesterday '4' +///强减 +#define THOST_FTDC_OF_ForceOff '5' +///本地强平 +#define THOST_FTDC_OF_LocalForceClose '6' + +typedef char TThostFtdcOffsetFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcForceCloseReasonType是一个强平原因类型 +///////////////////////////////////////////////////////////////////////// +///非强平 +#define THOST_FTDC_FCC_NotForceClose '0' +///资金不足 +#define THOST_FTDC_FCC_LackDeposit '1' +///客户超仓 +#define THOST_FTDC_FCC_ClientOverPositionLimit '2' +///会员超仓 +#define THOST_FTDC_FCC_MemberOverPositionLimit '3' +///持仓非整数倍 +#define THOST_FTDC_FCC_NotMultiple '4' +///违规 +#define THOST_FTDC_FCC_Violation '5' +///其它 +#define THOST_FTDC_FCC_Other '6' +///自然人临近交割 +#define THOST_FTDC_FCC_PersonDeliv '7' + +typedef char TThostFtdcForceCloseReasonType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderTypeType是一个报单类型类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_ORDT_Normal '0' +///报价衍生 +#define THOST_FTDC_ORDT_DeriveFromQuote '1' +///组合衍生 +#define THOST_FTDC_ORDT_DeriveFromCombination '2' +///组合报单 +#define THOST_FTDC_ORDT_Combination '3' +///条件单 +#define THOST_FTDC_ORDT_ConditionalOrder '4' +///互换单 +#define THOST_FTDC_ORDT_Swap '5' + +typedef char TThostFtdcOrderTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTimeConditionType是一个有效期类型类型 +///////////////////////////////////////////////////////////////////////// +///立即完成,否则撤销 +#define THOST_FTDC_TC_IOC '1' +///本节有效 +#define THOST_FTDC_TC_GFS '2' +///当日有效 +#define THOST_FTDC_TC_GFD '3' +///指定日期前有效 +#define THOST_FTDC_TC_GTD '4' +///撤销前有效 +#define THOST_FTDC_TC_GTC '5' +///集合竞价有效 +#define THOST_FTDC_TC_GFA '6' + +typedef char TThostFtdcTimeConditionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVolumeConditionType是一个成交量类型类型 +///////////////////////////////////////////////////////////////////////// +///任何数量 +#define THOST_FTDC_VC_AV '1' +///最小数量 +#define THOST_FTDC_VC_MV '2' +///全部数量 +#define THOST_FTDC_VC_CV '3' + +typedef char TThostFtdcVolumeConditionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcContingentConditionType是一个触发条件类型 +///////////////////////////////////////////////////////////////////////// +///立即 +#define THOST_FTDC_CC_Immediately '1' +///止损 +#define THOST_FTDC_CC_Touch '2' +///止赢 +#define THOST_FTDC_CC_TouchProfit '3' +///预埋单 +#define THOST_FTDC_CC_ParkedOrder '4' +///最新价大于条件价 +#define THOST_FTDC_CC_LastPriceGreaterThanStopPrice '5' +///最新价大于等于条件价 +#define THOST_FTDC_CC_LastPriceGreaterEqualStopPrice '6' +///最新价小于条件价 +#define THOST_FTDC_CC_LastPriceLesserThanStopPrice '7' +///最新价小于等于条件价 +#define THOST_FTDC_CC_LastPriceLesserEqualStopPrice '8' +///卖一价大于条件价 +#define THOST_FTDC_CC_AskPriceGreaterThanStopPrice '9' +///卖一价大于等于条件价 +#define THOST_FTDC_CC_AskPriceGreaterEqualStopPrice 'A' +///卖一价小于条件价 +#define THOST_FTDC_CC_AskPriceLesserThanStopPrice 'B' +///卖一价小于等于条件价 +#define THOST_FTDC_CC_AskPriceLesserEqualStopPrice 'C' +///买一价大于条件价 +#define THOST_FTDC_CC_BidPriceGreaterThanStopPrice 'D' +///买一价大于等于条件价 +#define THOST_FTDC_CC_BidPriceGreaterEqualStopPrice 'E' +///买一价小于条件价 +#define THOST_FTDC_CC_BidPriceLesserThanStopPrice 'F' +///买一价小于等于条件价 +#define THOST_FTDC_CC_BidPriceLesserEqualStopPrice 'H' + +typedef char TThostFtdcContingentConditionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcActionFlagType是一个操作标志类型 +///////////////////////////////////////////////////////////////////////// +///删除 +#define THOST_FTDC_AF_Delete '0' +///修改 +#define THOST_FTDC_AF_Modify '3' + +typedef char TThostFtdcActionFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradingRightType是一个交易权限类型 +///////////////////////////////////////////////////////////////////////// +///可以交易 +#define THOST_FTDC_TR_Allow '0' +///只能平仓 +#define THOST_FTDC_TR_CloseOnly '1' +///不能交易 +#define THOST_FTDC_TR_Forbidden '2' + +typedef char TThostFtdcTradingRightType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderSourceType是一个报单来源类型 +///////////////////////////////////////////////////////////////////////// +///来自参与者 +#define THOST_FTDC_OSRC_Participant '0' +///来自管理员 +#define THOST_FTDC_OSRC_Administrator '1' + +typedef char TThostFtdcOrderSourceType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeTypeType是一个成交类型类型 +///////////////////////////////////////////////////////////////////////// +///组合持仓拆分为单一持仓,初始化不应包含该类型的持仓 +#define THOST_FTDC_TRDT_SplitCombination '#' +///普通成交 +#define THOST_FTDC_TRDT_Common '0' +///期权执行 +#define THOST_FTDC_TRDT_OptionsExecution '1' +///OTC成交 +#define THOST_FTDC_TRDT_OTC '2' +///期转现衍生成交 +#define THOST_FTDC_TRDT_EFPDerived '3' +///组合衍生成交 +#define THOST_FTDC_TRDT_CombinationDerived '4' + +typedef char TThostFtdcTradeTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPriceSourceType是一个成交价来源类型 +///////////////////////////////////////////////////////////////////////// +///前成交价 +#define THOST_FTDC_PSRC_LastPrice '0' +///买委托价 +#define THOST_FTDC_PSRC_Buy '1' +///卖委托价 +#define THOST_FTDC_PSRC_Sell '2' + +typedef char TThostFtdcPriceSourceType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstrumentStatusType是一个合约交易状态类型 +///////////////////////////////////////////////////////////////////////// +///开盘前 +#define THOST_FTDC_IS_BeforeTrading '0' +///非交易 +#define THOST_FTDC_IS_NoTrading '1' +///连续交易 +#define THOST_FTDC_IS_Continous '2' +///集合竞价报单 +#define THOST_FTDC_IS_AuctionOrdering '3' +///集合竞价价格平衡 +#define THOST_FTDC_IS_AuctionBalance '4' +///集合竞价撮合 +#define THOST_FTDC_IS_AuctionMatch '5' +///收盘 +#define THOST_FTDC_IS_Closed '6' + +typedef char TThostFtdcInstrumentStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstStatusEnterReasonType是一个品种进入交易状态原因类型 +///////////////////////////////////////////////////////////////////////// +///自动切换 +#define THOST_FTDC_IER_Automatic '1' +///手动切换 +#define THOST_FTDC_IER_Manual '2' +///熔断 +#define THOST_FTDC_IER_Fuse '3' + +typedef char TThostFtdcInstStatusEnterReasonType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrderActionRefType是一个报单操作引用类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcOrderActionRefType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstallCountType是一个安装数量类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcInstallCountType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstallIDType是一个安装编号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcInstallIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcErrorIDType是一个错误代码类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcErrorIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettlementIDType是一个结算编号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcSettlementIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVolumeType是一个数量类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcVolumeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFrontIDType是一个前置编号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcFrontIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSessionIDType是一个会话编号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcSessionIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSequenceNoType是一个序号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcSequenceNoType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCommandNoType是一个DB命令序号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcCommandNoType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMillisecType是一个时间(毫秒)类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcMillisecType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVolumeMultipleType是一个合约数量乘数类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcVolumeMultipleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradingSegmentSNType是一个交易阶段编号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcTradingSegmentSNType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRequestIDType是一个请求编号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcRequestIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcYearType是一个年份类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcYearType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMonthType是一个月份类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcMonthType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBoolType是一个布尔型类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcBoolType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPriceType是一个价格类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcPriceType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCombOffsetFlagType是一个组合开平标志类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCombOffsetFlagType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCombHedgeFlagType是一个组合投机套保标志类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCombHedgeFlagType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRatioType是一个比率类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcRatioType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMoneyType是一个资金类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcMoneyType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLargeVolumeType是一个大额数量类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcLargeVolumeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSequenceSeriesType是一个序列系列号类型 +///////////////////////////////////////////////////////////////////////// +typedef short TThostFtdcSequenceSeriesType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCommPhaseNoType是一个通讯时段编号类型 +///////////////////////////////////////////////////////////////////////// +typedef short TThostFtdcCommPhaseNoType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSequenceLabelType是一个序列编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSequenceLabelType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUnderlyingMultipleType是一个基础商品乘数类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcUnderlyingMultipleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPriorityType是一个优先级类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcPriorityType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcContractCodeType是一个合同编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcContractCodeType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCityType是一个市类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCityType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIsStockType是一个是否股民类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcIsStockType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcChannelType是一个渠道类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcChannelType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAddressType是一个通讯地址类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAddressType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcZipCodeType是一个邮政编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcZipCodeType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTelephoneType是一个联系电话类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTelephoneType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFaxType是一个传真类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFaxType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMobileType是一个手机类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcMobileType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcEMailType是一个电子邮件类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcEMailType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMemoType是一个备注类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcMemoType[161]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCompanyCodeType是一个企业代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCompanyCodeType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcWebsiteType是一个网站地址类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcWebsiteType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTaxNoType是一个税务登记号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTaxNoType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBatchStatusType是一个处理状态类型 +///////////////////////////////////////////////////////////////////////// +///未上传 +#define THOST_FTDC_BS_NoUpload '1' +///已上传 +#define THOST_FTDC_BS_Uploaded '2' +///审核失败 +#define THOST_FTDC_BS_Failed '3' + +typedef char TThostFtdcBatchStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPropertyIDType是一个属性代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPropertyIDType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPropertyNameType是一个属性名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPropertyNameType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLicenseNoType是一个营业执照号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcLicenseNoType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAgentIDType是一个经纪人代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAgentIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAgentNameType是一个经纪人名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAgentNameType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAgentGroupIDType是一个经纪人组代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAgentGroupIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAgentGroupNameType是一个经纪人组名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAgentGroupNameType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReturnStyleType是一个按品种返还方式类型 +///////////////////////////////////////////////////////////////////////// +///按所有品种 +#define THOST_FTDC_RS_All '1' +///按品种 +#define THOST_FTDC_RS_ByProduct '2' + +typedef char TThostFtdcReturnStyleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReturnPatternType是一个返还模式类型 +///////////////////////////////////////////////////////////////////////// +///按成交手数 +#define THOST_FTDC_RP_ByVolume '1' +///按留存手续费 +#define THOST_FTDC_RP_ByFeeOnHand '2' + +typedef char TThostFtdcReturnPatternType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReturnLevelType是一个返还级别类型 +///////////////////////////////////////////////////////////////////////// +///级别1 +#define THOST_FTDC_RL_Level1 '1' +///级别2 +#define THOST_FTDC_RL_Level2 '2' +///级别3 +#define THOST_FTDC_RL_Level3 '3' +///级别4 +#define THOST_FTDC_RL_Level4 '4' +///级别5 +#define THOST_FTDC_RL_Level5 '5' +///级别6 +#define THOST_FTDC_RL_Level6 '6' +///级别7 +#define THOST_FTDC_RL_Level7 '7' +///级别8 +#define THOST_FTDC_RL_Level8 '8' +///级别9 +#define THOST_FTDC_RL_Level9 '9' + +typedef char TThostFtdcReturnLevelType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReturnStandardType是一个返还标准类型 +///////////////////////////////////////////////////////////////////////// +///分阶段返还 +#define THOST_FTDC_RSD_ByPeriod '1' +///按某一标准 +#define THOST_FTDC_RSD_ByStandard '2' + +typedef char TThostFtdcReturnStandardType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMortgageTypeType是一个质押类型类型 +///////////////////////////////////////////////////////////////////////// +///质出 +#define THOST_FTDC_MT_Out '0' +///质入 +#define THOST_FTDC_MT_In '1' + +typedef char TThostFtdcMortgageTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestorSettlementParamIDType是一个投资者结算参数代码类型 +///////////////////////////////////////////////////////////////////////// +///质押比例 +#define THOST_FTDC_ISPI_MortgageRatio '4' +///保证金算法 +#define THOST_FTDC_ISPI_MarginWay '5' +///结算单结存是否包含质押 +#define THOST_FTDC_ISPI_BillDeposit '9' + +typedef char TThostFtdcInvestorSettlementParamIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangeSettlementParamIDType是一个交易所结算参数代码类型 +///////////////////////////////////////////////////////////////////////// +///质押比例 +#define THOST_FTDC_ESPI_MortgageRatio '1' +///分项资金导入项 +#define THOST_FTDC_ESPI_OtherFundItem '2' +///分项资金入交易所出入金 +#define THOST_FTDC_ESPI_OtherFundImport '3' +///中金所开户最低可用金额 +#define THOST_FTDC_ESPI_CFFEXMinPrepa '6' +///郑商所结算方式 +#define THOST_FTDC_ESPI_CZCESettlementType '7' +///交易所交割手续费收取方式 +#define THOST_FTDC_ESPI_ExchDelivFeeMode '9' +///投资者交割手续费收取方式 +#define THOST_FTDC_ESPI_DelivFeeMode '0' +///郑商所组合持仓保证金收取方式 +#define THOST_FTDC_ESPI_CZCEComMarginType 'A' +///大商所套利保证金是否优惠 +#define THOST_FTDC_ESPI_DceComMarginType 'B' +///虚值期权保证金优惠比率 +#define THOST_FTDC_ESPI_OptOutDisCountRate 'a' +///最低保障系数 +#define THOST_FTDC_ESPI_OptMiniGuarantee 'b' + +typedef char TThostFtdcExchangeSettlementParamIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSystemParamIDType是一个系统参数代码类型 +///////////////////////////////////////////////////////////////////////// +///投资者代码最小长度 +#define THOST_FTDC_SPI_InvestorIDMinLength '1' +///投资者帐号代码最小长度 +#define THOST_FTDC_SPI_AccountIDMinLength '2' +///投资者开户默认登录权限 +#define THOST_FTDC_SPI_UserRightLogon '3' +///投资者交易结算单成交汇总方式 +#define THOST_FTDC_SPI_SettlementBillTrade '4' +///统一开户更新交易编码方式 +#define THOST_FTDC_SPI_TradingCode '5' +///结算是否判断存在未复核的出入金和分项资金 +#define THOST_FTDC_SPI_CheckFund '6' +///是否启用手续费模板数据权限 +#define THOST_FTDC_SPI_CommModelRight '7' +///是否启用保证金率模板数据权限 +#define THOST_FTDC_SPI_MarginModelRight '9' +///是否规范用户才能激活 +#define THOST_FTDC_SPI_IsStandardActive '8' +///上传的交易所结算文件路径 +#define THOST_FTDC_SPI_UploadSettlementFile 'U' +///上报保证金监控中心文件路径 +#define THOST_FTDC_SPI_DownloadCSRCFile 'D' +///生成的结算单文件路径 +#define THOST_FTDC_SPI_SettlementBillFile 'S' +///证监会文件标识 +#define THOST_FTDC_SPI_CSRCOthersFile 'C' +///投资者照片路径 +#define THOST_FTDC_SPI_InvestorPhoto 'P' +///全结经纪公司上传文件路径 +#define THOST_FTDC_SPI_CSRCData 'R' +///开户密码录入方式 +#define THOST_FTDC_SPI_InvestorPwdModel 'I' +///投资者中金所结算文件下载路径 +#define THOST_FTDC_SPI_CFFEXInvestorSettleFile 'F' +///投资者代码编码方式 +#define THOST_FTDC_SPI_InvestorIDType 'a' +///休眠户最高权益 +#define THOST_FTDC_SPI_FreezeMaxReMain 'r' +///手续费相关操作实时上场开关 +#define THOST_FTDC_SPI_IsSync 'A' +///解除开仓权限限制 +#define THOST_FTDC_SPI_RelieveOpenLimit 'O' +///是否规范用户才能休眠 +#define THOST_FTDC_SPI_IsStandardFreeze 'X' +///郑商所是否开放所有品种套保交易 +#define THOST_FTDC_SPI_CZCENormalProductHedge 'B' + +typedef char TThostFtdcSystemParamIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeParamIDType是一个交易系统参数代码类型 +///////////////////////////////////////////////////////////////////////// +///系统加密算法 +#define THOST_FTDC_TPID_EncryptionStandard 'E' +///系统风险算法 +#define THOST_FTDC_TPID_RiskMode 'R' +///系统风险算法是否全局 0-否 1-是 +#define THOST_FTDC_TPID_RiskModeGlobal 'G' +///密码加密算法 +#define THOST_FTDC_TPID_modeEncode 'P' +///价格小数位数参数 +#define THOST_FTDC_TPID_tickMode 'T' +///用户最大会话数 +#define THOST_FTDC_TPID_SingleUserSessionMaxNum 'S' +///最大连续登录失败数 +#define THOST_FTDC_TPID_LoginFailMaxNum 'L' +///是否强制认证 +#define THOST_FTDC_TPID_IsAuthForce 'A' + +typedef char TThostFtdcTradeParamIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettlementParamValueType是一个参数代码值类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSettlementParamValueType[256]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCounterIDType是一个计数器代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCounterIDType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestorGroupNameType是一个投资者分组名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInvestorGroupNameType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrandCodeType是一个牌号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBrandCodeType[257]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcWarehouseType是一个仓库类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcWarehouseType[257]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProductDateType是一个产期类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcProductDateType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcGradeType是一个等级类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcGradeType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClassifyType是一个类别类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcClassifyType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPositionType是一个货位类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPositionType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcYieldlyType是一个产地类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcYieldlyType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcWeightType是一个公定重量类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcWeightType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSubEntryFundNoType是一个分项资金流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcSubEntryFundNoType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFileIDType是一个文件标识类型 +///////////////////////////////////////////////////////////////////////// +///资金数据 +#define THOST_FTDC_FI_SettlementFund 'F' +///成交数据 +#define THOST_FTDC_FI_Trade 'T' +///投资者持仓数据 +#define THOST_FTDC_FI_InvestorPosition 'P' +///投资者分项资金数据 +#define THOST_FTDC_FI_SubEntryFund 'O' +///组合持仓数据 +#define THOST_FTDC_FI_CZCECombinationPos 'C' +///上报保证金监控中心数据 +#define THOST_FTDC_FI_CSRCData 'R' +///郑商所平仓了结数据 +#define THOST_FTDC_FI_CZCEClose 'L' +///郑商所非平仓了结数据 +#define THOST_FTDC_FI_CZCENoClose 'N' +///持仓明细数据 +#define THOST_FTDC_FI_PositionDtl 'D' +///期权执行文件 +#define THOST_FTDC_FI_OptionStrike 'S' +///结算价比对文件 +#define THOST_FTDC_FI_SettlementPriceComparison 'M' +///上期所非持仓变动明细 +#define THOST_FTDC_FI_NonTradePosChange 'B' + +typedef char TThostFtdcFileIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFileNameType是一个文件名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFileNameType[257]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFileTypeType是一个文件上传类型类型 +///////////////////////////////////////////////////////////////////////// +///结算 +#define THOST_FTDC_FUT_Settlement '0' +///核对 +#define THOST_FTDC_FUT_Check '1' + +typedef char TThostFtdcFileTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFileFormatType是一个文件格式类型 +///////////////////////////////////////////////////////////////////////// +///文本文件(.txt) +#define THOST_FTDC_FFT_Txt '0' +///压缩文件(.zip) +#define THOST_FTDC_FFT_Zip '1' +///DBF文件(.dbf) +#define THOST_FTDC_FFT_DBF '2' + +typedef char TThostFtdcFileFormatType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFileUploadStatusType是一个文件状态类型 +///////////////////////////////////////////////////////////////////////// +///上传成功 +#define THOST_FTDC_FUS_SucceedUpload '1' +///上传失败 +#define THOST_FTDC_FUS_FailedUpload '2' +///导入成功 +#define THOST_FTDC_FUS_SucceedLoad '3' +///导入部分成功 +#define THOST_FTDC_FUS_PartSucceedLoad '4' +///导入失败 +#define THOST_FTDC_FUS_FailedLoad '5' + +typedef char TThostFtdcFileUploadStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTransferDirectionType是一个移仓方向类型 +///////////////////////////////////////////////////////////////////////// +///移出 +#define THOST_FTDC_TD_Out '0' +///移入 +#define THOST_FTDC_TD_In '1' + +typedef char TThostFtdcTransferDirectionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUploadModeType是一个上传文件类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUploadModeType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAccountIDType是一个投资者帐号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAccountIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankFlagType是一个银行统一标识类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankFlagType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankAccountType是一个银行账户类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankAccountType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOpenNameType是一个银行账户的开户人名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOpenNameType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOpenBankType是一个银行账户的开户行类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOpenBankType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankNameType是一个银行名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankNameType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPublishPathType是一个发布路径类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPublishPathType[257]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOperatorIDType是一个操作员代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOperatorIDType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMonthCountType是一个月份数量类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcMonthCountType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAdvanceMonthArrayType是一个月份提前数组类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAdvanceMonthArrayType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDateExprType是一个日期表达式类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDateExprType[1025]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstrumentIDExprType是一个合约代码表达式类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInstrumentIDExprType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstrumentNameExprType是一个合约名称表达式类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInstrumentNameExprType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSpecialCreateRuleType是一个特殊的创建规则类型 +///////////////////////////////////////////////////////////////////////// +///没有特殊创建规则 +#define THOST_FTDC_SC_NoSpecialRule '0' +///不包含春节 +#define THOST_FTDC_SC_NoSpringFestival '1' + +typedef char TThostFtdcSpecialCreateRuleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBasisPriceTypeType是一个挂牌基准价类型类型 +///////////////////////////////////////////////////////////////////////// +///上一合约结算价 +#define THOST_FTDC_IPT_LastSettlement '1' +///上一合约收盘价 +#define THOST_FTDC_IPT_LaseClose '2' + +typedef char TThostFtdcBasisPriceTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProductLifePhaseType是一个产品生命周期状态类型 +///////////////////////////////////////////////////////////////////////// +///活跃 +#define THOST_FTDC_PLP_Active '1' +///不活跃 +#define THOST_FTDC_PLP_NonActive '2' +///注销 +#define THOST_FTDC_PLP_Canceled '3' + +typedef char TThostFtdcProductLifePhaseType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDeliveryModeType是一个交割方式类型 +///////////////////////////////////////////////////////////////////////// +///现金交割 +#define THOST_FTDC_DM_CashDeliv '1' +///实物交割 +#define THOST_FTDC_DM_CommodityDeliv '2' + +typedef char TThostFtdcDeliveryModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLogLevelType是一个日志级别类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcLogLevelType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProcessNameType是一个存储过程名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcProcessNameType[257]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOperationMemoType是一个操作摘要类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOperationMemoType[1025]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundIOTypeType是一个出入金类型类型 +///////////////////////////////////////////////////////////////////////// +///出入金 +#define THOST_FTDC_FIOT_FundIO '1' +///银期转帐 +#define THOST_FTDC_FIOT_Transfer '2' +///银期换汇 +#define THOST_FTDC_FIOT_SwapCurrency '3' + +typedef char TThostFtdcFundIOTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundTypeType是一个资金类型类型 +///////////////////////////////////////////////////////////////////////// +///银行存款 +#define THOST_FTDC_FT_Deposite '1' +///分项资金 +#define THOST_FTDC_FT_ItemFund '2' +///公司调整 +#define THOST_FTDC_FT_Company '3' +///资金内转 +#define THOST_FTDC_FT_InnerTransfer '4' + +typedef char TThostFtdcFundTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundDirectionType是一个出入金方向类型 +///////////////////////////////////////////////////////////////////////// +///入金 +#define THOST_FTDC_FD_In '1' +///出金 +#define THOST_FTDC_FD_Out '2' + +typedef char TThostFtdcFundDirectionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundStatusType是一个资金状态类型 +///////////////////////////////////////////////////////////////////////// +///已录入 +#define THOST_FTDC_FS_Record '1' +///已复核 +#define THOST_FTDC_FS_Check '2' +///已冲销 +#define THOST_FTDC_FS_Charge '3' + +typedef char TThostFtdcFundStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBillNoType是一个票据号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBillNoType[15]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBillNameType是一个票据名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBillNameType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPublishStatusType是一个发布状态类型 +///////////////////////////////////////////////////////////////////////// +///未发布 +#define THOST_FTDC_PS_None '1' +///正在发布 +#define THOST_FTDC_PS_Publishing '2' +///已发布 +#define THOST_FTDC_PS_Published '3' + +typedef char TThostFtdcPublishStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcEnumValueIDType是一个枚举值代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcEnumValueIDType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcEnumValueTypeType是一个枚举值类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcEnumValueTypeType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcEnumValueLabelType是一个枚举值名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcEnumValueLabelType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcEnumValueResultType是一个枚举值结果类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcEnumValueResultType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSystemStatusType是一个系统状态类型 +///////////////////////////////////////////////////////////////////////// +///不活跃 +#define THOST_FTDC_ES_NonActive '1' +///启动 +#define THOST_FTDC_ES_Startup '2' +///交易开始初始化 +#define THOST_FTDC_ES_Initialize '3' +///交易完成初始化 +#define THOST_FTDC_ES_Initialized '4' +///收市开始 +#define THOST_FTDC_ES_Close '5' +///收市完成 +#define THOST_FTDC_ES_Closed '6' +///结算 +#define THOST_FTDC_ES_Settlement '7' + +typedef char TThostFtdcSystemStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettlementStatusType是一个结算状态类型 +///////////////////////////////////////////////////////////////////////// +///初始 +#define THOST_FTDC_STS_Initialize '0' +///结算中 +#define THOST_FTDC_STS_Settlementing '1' +///已结算 +#define THOST_FTDC_STS_Settlemented '2' +///结算完成 +#define THOST_FTDC_STS_Finished '3' + +typedef char TThostFtdcSettlementStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRangeIntTypeType是一个限定值类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRangeIntTypeType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRangeIntFromType是一个限定值下限类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRangeIntFromType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRangeIntToType是一个限定值上限类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRangeIntToType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFunctionIDType是一个功能代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFunctionIDType[25]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFunctionValueCodeType是一个功能编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFunctionValueCodeType[257]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFunctionNameType是一个功能名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFunctionNameType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRoleIDType是一个角色编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRoleIDType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRoleNameType是一个角色名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRoleNameType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDescriptionType是一个描述类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDescriptionType[401]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCombineIDType是一个组合编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCombineIDType[25]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCombineTypeType是一个组合类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCombineTypeType[25]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestorTypeType是一个投资者类型类型 +///////////////////////////////////////////////////////////////////////// +///自然人 +#define THOST_FTDC_CT_Person '0' +///法人 +#define THOST_FTDC_CT_Company '1' +///投资基金 +#define THOST_FTDC_CT_Fund '2' +///特殊法人 +#define THOST_FTDC_CT_SpecialOrgan '3' +///资管户 +#define THOST_FTDC_CT_Asset '4' + +typedef char TThostFtdcInvestorTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrokerTypeType是一个经纪公司类型类型 +///////////////////////////////////////////////////////////////////////// +///交易会员 +#define THOST_FTDC_BT_Trade '0' +///交易结算会员 +#define THOST_FTDC_BT_TradeSettle '1' + +typedef char TThostFtdcBrokerTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRiskLevelType是一个风险等级类型 +///////////////////////////////////////////////////////////////////////// +///低风险客户 +#define THOST_FTDC_FAS_Low '1' +///普通客户 +#define THOST_FTDC_FAS_Normal '2' +///关注客户 +#define THOST_FTDC_FAS_Focus '3' +///风险客户 +#define THOST_FTDC_FAS_Risk '4' + +typedef char TThostFtdcRiskLevelType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFeeAcceptStyleType是一个手续费收取方式类型 +///////////////////////////////////////////////////////////////////////// +///按交易收取 +#define THOST_FTDC_FAS_ByTrade '1' +///按交割收取 +#define THOST_FTDC_FAS_ByDeliv '2' +///不收 +#define THOST_FTDC_FAS_None '3' +///按指定手续费收取 +#define THOST_FTDC_FAS_FixFee '4' + +typedef char TThostFtdcFeeAcceptStyleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPasswordTypeType是一个密码类型类型 +///////////////////////////////////////////////////////////////////////// +///交易密码 +#define THOST_FTDC_PWDT_Trade '1' +///资金密码 +#define THOST_FTDC_PWDT_Account '2' + +typedef char TThostFtdcPasswordTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAlgorithmType是一个盈亏算法类型 +///////////////////////////////////////////////////////////////////////// +///浮盈浮亏都计算 +#define THOST_FTDC_AG_All '1' +///浮盈不计,浮亏计 +#define THOST_FTDC_AG_OnlyLost '2' +///浮盈计,浮亏不计 +#define THOST_FTDC_AG_OnlyGain '3' +///浮盈浮亏都不计算 +#define THOST_FTDC_AG_None '4' + +typedef char TThostFtdcAlgorithmType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIncludeCloseProfitType是一个是否包含平仓盈利类型 +///////////////////////////////////////////////////////////////////////// +///包含平仓盈利 +#define THOST_FTDC_ICP_Include '0' +///不包含平仓盈利 +#define THOST_FTDC_ICP_NotInclude '2' + +typedef char TThostFtdcIncludeCloseProfitType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAllWithoutTradeType是一个是否受可提比例限制类型 +///////////////////////////////////////////////////////////////////////// +///无仓无成交不受可提比例限制 +#define THOST_FTDC_AWT_Enable '0' +///受可提比例限制 +#define THOST_FTDC_AWT_Disable '2' +///无仓不受可提比例限制 +#define THOST_FTDC_AWT_NoHoldEnable '3' + +typedef char TThostFtdcAllWithoutTradeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCommentType是一个盈亏算法说明类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCommentType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVersionType是一个版本号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcVersionType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeCodeType是一个交易代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTradeCodeType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeDateType是一个交易日期类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTradeDateType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeTimeType是一个交易时间类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTradeTimeType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeSerialType是一个发起方流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTradeSerialType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeSerialNoType是一个发起方流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcTradeSerialNoType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureIDType是一个期货公司代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFutureIDType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankIDType是一个银行代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankIDType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankBrchIDType是一个银行分中心代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankBrchIDType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankBranchIDType是一个分中心代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankBranchIDType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOperNoType是一个交易柜员类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOperNoType[17]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDeviceIDType是一个渠道标志类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDeviceIDType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRecordNumType是一个记录数类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRecordNumType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureAccountType是一个期货资金账号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFutureAccountType[22]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFuturePwdFlagType是一个资金密码核对标志类型 +///////////////////////////////////////////////////////////////////////// +///不核对 +#define THOST_FTDC_FPWD_UnCheck '0' +///核对 +#define THOST_FTDC_FPWD_Check '1' + +typedef char TThostFtdcFuturePwdFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTransferTypeType是一个银期转账类型类型 +///////////////////////////////////////////////////////////////////////// +///银行转期货 +#define THOST_FTDC_TT_BankToFuture '0' +///期货转银行 +#define THOST_FTDC_TT_FutureToBank '1' + +typedef char TThostFtdcTransferTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureAccPwdType是一个期货资金密码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFutureAccPwdType[17]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCurrencyCodeType是一个币种类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCurrencyCodeType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRetCodeType是一个响应代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRetCodeType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRetInfoType是一个响应信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRetInfoType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeAmtType是一个银行总余额类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTradeAmtType[20]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUseAmtType是一个银行可用余额类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUseAmtType[20]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFetchAmtType是一个银行可取余额类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFetchAmtType[20]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTransferValidFlagType是一个转账有效标志类型 +///////////////////////////////////////////////////////////////////////// +///无效或失败 +#define THOST_FTDC_TVF_Invalid '0' +///有效 +#define THOST_FTDC_TVF_Valid '1' +///冲正 +#define THOST_FTDC_TVF_Reverse '2' + +typedef char TThostFtdcTransferValidFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCertCodeType是一个证件号码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCertCodeType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReasonType是一个事由类型 +///////////////////////////////////////////////////////////////////////// +///错单 +#define THOST_FTDC_RN_CD '0' +///资金在途 +#define THOST_FTDC_RN_ZT '1' +///其它 +#define THOST_FTDC_RN_QT '2' + +typedef char TThostFtdcReasonType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundProjectIDType是一个资金项目编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFundProjectIDType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSexType是一个性别类型 +///////////////////////////////////////////////////////////////////////// +///未知 +#define THOST_FTDC_SEX_None '0' +///男 +#define THOST_FTDC_SEX_Man '1' +///女 +#define THOST_FTDC_SEX_Woman '2' + +typedef char TThostFtdcSexType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProfessionType是一个职业类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcProfessionType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcNationalType是一个国籍类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcNationalType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProvinceType是一个省类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcProvinceType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRegionType是一个区类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRegionType[16]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCountryType是一个国家类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCountryType[16]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLicenseNOType是一个营业执照类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcLicenseNOType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCompanyTypeType是一个企业性质类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCompanyTypeType[16]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBusinessScopeType是一个经营范围类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBusinessScopeType[1001]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCapitalCurrencyType是一个注册资本币种类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCapitalCurrencyType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserTypeType是一个用户类型类型 +///////////////////////////////////////////////////////////////////////// +///投资者 +#define THOST_FTDC_UT_Investor '0' +///操作员 +#define THOST_FTDC_UT_Operator '1' +///管理员 +#define THOST_FTDC_UT_SuperUser '2' + +typedef char TThostFtdcUserTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRateTypeType是一个费率类型类型 +///////////////////////////////////////////////////////////////////////// +///保证金率 +#define THOST_FTDC_RATETYPE_MarginRate '2' + +typedef char TThostFtdcRateTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcNoteTypeType是一个通知类型类型 +///////////////////////////////////////////////////////////////////////// +///交易结算单 +#define THOST_FTDC_NOTETYPE_TradeSettleBill '1' +///交易结算月报 +#define THOST_FTDC_NOTETYPE_TradeSettleMonth '2' +///追加保证金通知书 +#define THOST_FTDC_NOTETYPE_CallMarginNotes '3' +///强行平仓通知书 +#define THOST_FTDC_NOTETYPE_ForceCloseNotes '4' +///成交通知书 +#define THOST_FTDC_NOTETYPE_TradeNotes '5' +///交割通知书 +#define THOST_FTDC_NOTETYPE_DelivNotes '6' + +typedef char TThostFtdcNoteTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettlementStyleType是一个结算单方式类型 +///////////////////////////////////////////////////////////////////////// +///逐日盯市 +#define THOST_FTDC_SBS_Day '1' +///逐笔对冲 +#define THOST_FTDC_SBS_Volume '2' + +typedef char TThostFtdcSettlementStyleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrokerDNSType是一个域名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBrokerDNSType[256]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSentenceType是一个语句类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSentenceType[501]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettlementBillTypeType是一个结算单类型类型 +///////////////////////////////////////////////////////////////////////// +///日报 +#define THOST_FTDC_ST_Day '0' +///月报 +#define THOST_FTDC_ST_Month '1' + +typedef char TThostFtdcSettlementBillTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserRightTypeType是一个客户权限类型类型 +///////////////////////////////////////////////////////////////////////// +///登录 +#define THOST_FTDC_URT_Logon '1' +///银期转帐 +#define THOST_FTDC_URT_Transfer '2' +///邮寄结算单 +#define THOST_FTDC_URT_EMail '3' +///传真结算单 +#define THOST_FTDC_URT_Fax '4' +///条件单 +#define THOST_FTDC_URT_ConditionOrder '5' + +typedef char TThostFtdcUserRightTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMarginPriceTypeType是一个保证金价格类型类型 +///////////////////////////////////////////////////////////////////////// +///昨结算价 +#define THOST_FTDC_MPT_PreSettlementPrice '1' +///最新价 +#define THOST_FTDC_MPT_SettlementPrice '2' +///成交均价 +#define THOST_FTDC_MPT_AveragePrice '3' +///开仓价 +#define THOST_FTDC_MPT_OpenPrice '4' + +typedef char TThostFtdcMarginPriceTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBillGenStatusType是一个结算单生成状态类型 +///////////////////////////////////////////////////////////////////////// +///未生成 +#define THOST_FTDC_BGS_None '0' +///生成中 +#define THOST_FTDC_BGS_NoGenerated '1' +///已生成 +#define THOST_FTDC_BGS_Generated '2' + +typedef char TThostFtdcBillGenStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAlgoTypeType是一个算法类型类型 +///////////////////////////////////////////////////////////////////////// +///持仓处理算法 +#define THOST_FTDC_AT_HandlePositionAlgo '1' +///寻找保证金率算法 +#define THOST_FTDC_AT_FindMarginRateAlgo '2' + +typedef char TThostFtdcAlgoTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcHandlePositionAlgoIDType是一个持仓处理算法编号类型 +///////////////////////////////////////////////////////////////////////// +///基本 +#define THOST_FTDC_HPA_Base '1' +///大连商品交易所 +#define THOST_FTDC_HPA_DCE '2' +///郑州商品交易所 +#define THOST_FTDC_HPA_CZCE '3' + +typedef char TThostFtdcHandlePositionAlgoIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFindMarginRateAlgoIDType是一个寻找保证金率算法编号类型 +///////////////////////////////////////////////////////////////////////// +///基本 +#define THOST_FTDC_FMRA_Base '1' +///大连商品交易所 +#define THOST_FTDC_FMRA_DCE '2' +///郑州商品交易所 +#define THOST_FTDC_FMRA_CZCE '3' + +typedef char TThostFtdcFindMarginRateAlgoIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcHandleTradingAccountAlgoIDType是一个资金处理算法编号类型 +///////////////////////////////////////////////////////////////////////// +///基本 +#define THOST_FTDC_HTAA_Base '1' +///大连商品交易所 +#define THOST_FTDC_HTAA_DCE '2' +///郑州商品交易所 +#define THOST_FTDC_HTAA_CZCE '3' + +typedef char TThostFtdcHandleTradingAccountAlgoIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPersonTypeType是一个联系人类型类型 +///////////////////////////////////////////////////////////////////////// +///指定下单人 +#define THOST_FTDC_PST_Order '1' +///开户授权人 +#define THOST_FTDC_PST_Open '2' +///资金调拨人 +#define THOST_FTDC_PST_Fund '3' +///结算单确认人 +#define THOST_FTDC_PST_Settlement '4' +///法人 +#define THOST_FTDC_PST_Company '5' +///法人代表 +#define THOST_FTDC_PST_Corporation '6' +///投资者联系人 +#define THOST_FTDC_PST_LinkMan '7' +///分户管理资产负责人 +#define THOST_FTDC_PST_Ledger '8' +///托(保)管人 +#define THOST_FTDC_PST_Trustee '9' +///托(保)管机构法人代表 +#define THOST_FTDC_PST_TrusteeCorporation 'A' +///托(保)管机构开户授权人 +#define THOST_FTDC_PST_TrusteeOpen 'B' +///托(保)管机构联系人 +#define THOST_FTDC_PST_TrusteeContact 'C' +///境外自然人参考证件 +#define THOST_FTDC_PST_ForeignerRefer 'D' +///法人代表参考证件 +#define THOST_FTDC_PST_CorporationRefer 'E' + +typedef char TThostFtdcPersonTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcQueryInvestorRangeType是一个查询范围类型 +///////////////////////////////////////////////////////////////////////// +///所有 +#define THOST_FTDC_QIR_All '1' +///查询分类 +#define THOST_FTDC_QIR_Group '2' +///单一投资者 +#define THOST_FTDC_QIR_Single '3' + +typedef char TThostFtdcQueryInvestorRangeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestorRiskStatusType是一个投资者风险状态类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_IRS_Normal '1' +///警告 +#define THOST_FTDC_IRS_Warn '2' +///追保 +#define THOST_FTDC_IRS_Call '3' +///强平 +#define THOST_FTDC_IRS_Force '4' +///异常 +#define THOST_FTDC_IRS_Exception '5' + +typedef char TThostFtdcInvestorRiskStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLegIDType是一个单腿编号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcLegIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLegMultipleType是一个单腿乘数类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcLegMultipleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcImplyLevelType是一个派生层数类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcImplyLevelType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClearAccountType是一个结算账户类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcClearAccountType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrganNOType是一个结算账户类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOrganNOType[6]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClearbarchIDType是一个结算账户联行号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcClearbarchIDType[6]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserEventTypeType是一个用户事件类型类型 +///////////////////////////////////////////////////////////////////////// +///登录 +#define THOST_FTDC_UET_Login '1' +///登出 +#define THOST_FTDC_UET_Logout '2' +///交易成功 +#define THOST_FTDC_UET_Trading '3' +///交易失败 +#define THOST_FTDC_UET_TradingError '4' +///修改密码 +#define THOST_FTDC_UET_UpdatePassword '5' +///客户端认证 +#define THOST_FTDC_UET_Authenticate '6' +///其他 +#define THOST_FTDC_UET_Other '9' + +typedef char TThostFtdcUserEventTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserEventInfoType是一个用户事件信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUserEventInfoType[1025]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCloseStyleType是一个平仓方式类型 +///////////////////////////////////////////////////////////////////////// +///先开先平 +#define THOST_FTDC_ICS_Close '0' +///先平今再平昨 +#define THOST_FTDC_ICS_CloseToday '1' + +typedef char TThostFtdcCloseStyleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcStatModeType是一个统计方式类型 +///////////////////////////////////////////////////////////////////////// +///---- +#define THOST_FTDC_SM_Non '0' +///按合约统计 +#define THOST_FTDC_SM_Instrument '1' +///按产品统计 +#define THOST_FTDC_SM_Product '2' +///按投资者统计 +#define THOST_FTDC_SM_Investor '3' + +typedef char TThostFtdcStatModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcParkedOrderStatusType是一个预埋单状态类型 +///////////////////////////////////////////////////////////////////////// +///未发送 +#define THOST_FTDC_PAOS_NotSend '1' +///已发送 +#define THOST_FTDC_PAOS_Send '2' +///已删除 +#define THOST_FTDC_PAOS_Deleted '3' + +typedef char TThostFtdcParkedOrderStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcParkedOrderIDType是一个预埋报单编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcParkedOrderIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcParkedOrderActionIDType是一个预埋撤单编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcParkedOrderActionIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVirDealStatusType是一个处理状态类型 +///////////////////////////////////////////////////////////////////////// +///正在处理 +#define THOST_FTDC_VDS_Dealing '1' +///处理成功 +#define THOST_FTDC_VDS_DeaclSucceed '2' + +typedef char TThostFtdcVirDealStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrgSystemIDType是一个原有系统代码类型 +///////////////////////////////////////////////////////////////////////// +///综合交易平台 +#define THOST_FTDC_ORGS_Standard '0' +///易盛系统 +#define THOST_FTDC_ORGS_ESunny '1' +///金仕达V6系统 +#define THOST_FTDC_ORGS_KingStarV6 '2' + +typedef char TThostFtdcOrgSystemIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVirTradeStatusType是一个交易状态类型 +///////////////////////////////////////////////////////////////////////// +///正常处理中 +#define THOST_FTDC_VTS_NaturalDeal '0' +///成功结束 +#define THOST_FTDC_VTS_SucceedEnd '1' +///失败结束 +#define THOST_FTDC_VTS_FailedEND '2' +///异常中 +#define THOST_FTDC_VTS_Exception '3' +///已人工异常处理 +#define THOST_FTDC_VTS_ManualDeal '4' +///通讯异常 ,请人工处理 +#define THOST_FTDC_VTS_MesException '5' +///系统出错,请人工处理 +#define THOST_FTDC_VTS_SysException '6' + +typedef char TThostFtdcVirTradeStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVirBankAccTypeType是一个银行帐户类型类型 +///////////////////////////////////////////////////////////////////////// +///存折 +#define THOST_FTDC_VBAT_BankBook '1' +///储蓄卡 +#define THOST_FTDC_VBAT_BankCard '2' +///信用卡 +#define THOST_FTDC_VBAT_CreditCard '3' + +typedef char TThostFtdcVirBankAccTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVirementStatusType是一个银行帐户类型类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_VMS_Natural '0' +///销户 +#define THOST_FTDC_VMS_Canceled '9' + +typedef char TThostFtdcVirementStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVirementAvailAbilityType是一个有效标志类型 +///////////////////////////////////////////////////////////////////////// +///未确认 +#define THOST_FTDC_VAA_NoAvailAbility '0' +///有效 +#define THOST_FTDC_VAA_AvailAbility '1' +///冲正 +#define THOST_FTDC_VAA_Repeal '2' + +typedef char TThostFtdcVirementAvailAbilityType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcVirementTradeCodeType是一个交易代码类型 +///////////////////////////////////////////////////////////////////////// +///银行发起银行资金转期货 +#define THOST_FTDC_VTC_BankBankToFuture '102001' +///银行发起期货资金转银行 +#define THOST_FTDC_VTC_BankFutureToBank '102002' +///期货发起银行资金转期货 +#define THOST_FTDC_VTC_FutureBankToFuture '202001' +///期货发起期货资金转银行 +#define THOST_FTDC_VTC_FutureFutureToBank '202002' + +typedef char TThostFtdcVirementTradeCodeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPhotoTypeNameType是一个影像类型名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPhotoTypeNameType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPhotoTypeIDType是一个影像类型代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPhotoTypeIDType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPhotoNameType是一个影像名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPhotoNameType[161]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTopicIDType是一个主题代码类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcTopicIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReportTypeIDType是一个交易报告类型标识类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcReportTypeIDType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCharacterIDType是一个交易特征代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCharacterIDType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLParamIDType是一个参数代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLParamIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLInvestorTypeType是一个投资者类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLInvestorTypeType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLIdCardTypeType是一个证件类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLIdCardTypeType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLTradeDirectType是一个资金进出方向类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLTradeDirectType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLTradeModelType是一个资金进出方式类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLTradeModelType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLParamIDType是一个参数代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLParamIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLOpParamValueType是一个业务参数代码值类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcAMLOpParamValueType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLCustomerCardTypeType是一个客户身份证件/证明文件类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLCustomerCardTypeType[81]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLInstitutionNameType是一个金融机构网点名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLInstitutionNameType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLDistrictIDType是一个金融机构网点所在地区行政区划代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLDistrictIDType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLRelationShipType是一个金融机构网点与大额交易的关系类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLRelationShipType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLInstitutionTypeType是一个金融机构网点代码类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLInstitutionTypeType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLInstitutionIDType是一个金融机构网点代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLInstitutionIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLAccountTypeType是一个账户类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLAccountTypeType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLTradingTypeType是一个交易方式类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLTradingTypeType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLTransactClassType是一个涉外收支交易分类与代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLTransactClassType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLCapitalIOType是一个资金收付标识类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLCapitalIOType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLSiteType是一个交易地点类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLSiteType[10]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLCapitalPurposeType是一个资金用途类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLCapitalPurposeType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLReportTypeType是一个报文类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLReportTypeType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLSerialNoType是一个编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLSerialNoType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLStatusType是一个状态类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLStatusType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLGenStatusType是一个Aml生成方式类型 +///////////////////////////////////////////////////////////////////////// +///程序生成 +#define THOST_FTDC_GEN_Program '0' +///人工生成 +#define THOST_FTDC_GEN_HandWork '1' + +typedef char TThostFtdcAMLGenStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLSeqCodeType是一个业务标识号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLSeqCodeType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLFileNameType是一个AML文件名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLFileNameType[257]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLMoneyType是一个反洗钱资金类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcAMLMoneyType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLFileAmountType是一个反洗钱资金类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcAMLFileAmountType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCFMMCKeyType是一个密钥类型(保证金监管)类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCFMMCKeyType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCFMMCKeyKindType是一个动态密钥类别(保证金监管)类型 +///////////////////////////////////////////////////////////////////////// +///主动请求更新 +#define THOST_FTDC_CFMMCKK_REQUEST 'R' +///CFMMC自动更新 +#define THOST_FTDC_CFMMCKK_AUTO 'A' +///CFMMC手动更新 +#define THOST_FTDC_CFMMCKK_MANUAL 'M' + +typedef char TThostFtdcCFMMCKeyKindType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLReportNameType是一个报文名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAMLReportNameType[81]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIndividualNameType是一个个人姓名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcIndividualNameType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCurrencyIDType是一个币种代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCurrencyIDType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCustNumberType是一个客户编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCustNumberType[36]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrganCodeType是一个机构编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOrganCodeType[36]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrganNameType是一个机构名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOrganNameType[71]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSuperOrganCodeType是一个上级机构编码,即期货公司总部、银行总行类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSuperOrganCodeType[12]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSubBranchIDType是一个分支机构类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSubBranchIDType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSubBranchNameType是一个分支机构名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSubBranchNameType[71]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBranchNetCodeType是一个机构网点号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBranchNetCodeType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBranchNetNameType是一个机构网点名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBranchNetNameType[71]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrganFlagType是一个机构标识类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOrganFlagType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankCodingForFutureType是一个银行对期货公司的编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankCodingForFutureType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankReturnCodeType是一个银行对返回码的定义类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankReturnCodeType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPlateReturnCodeType是一个银期转帐平台对返回码的定义类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPlateReturnCodeType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankSubBranchIDType是一个银行分支机构编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankSubBranchIDType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureBranchIDType是一个期货分支机构编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFutureBranchIDType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReturnCodeType是一个返回代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcReturnCodeType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOperatorCodeType是一个操作员类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOperatorCodeType[17]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClearDepIDType是一个机构结算帐户机构号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcClearDepIDType[6]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClearBrchIDType是一个机构结算帐户联行号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcClearBrchIDType[6]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClearNameType是一个机构结算帐户名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcClearNameType[71]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankAccountNameType是一个银行帐户名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankAccountNameType[71]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvDepIDType是一个机构投资人账号机构号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInvDepIDType[6]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvBrchIDType是一个机构投资人联行号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInvBrchIDType[6]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMessageFormatVersionType是一个信息格式版本类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcMessageFormatVersionType[36]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDigestType是一个摘要类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDigestType[36]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAuthenticDataType是一个认证数据类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAuthenticDataType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPasswordKeyType是一个密钥类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPasswordKeyType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureAccountNameType是一个期货帐户名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFutureAccountNameType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMobilePhoneType是一个手机类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcMobilePhoneType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureMainKeyType是一个期货公司主密钥类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFutureMainKeyType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureWorkKeyType是一个期货公司工作密钥类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFutureWorkKeyType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureTransKeyType是一个期货公司传输密钥类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFutureTransKeyType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankMainKeyType是一个银行主密钥类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankMainKeyType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankWorkKeyType是一个银行工作密钥类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankWorkKeyType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankTransKeyType是一个银行传输密钥类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankTransKeyType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankServerDescriptionType是一个银行服务器描述信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankServerDescriptionType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAddInfoType是一个附加信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAddInfoType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDescrInfoForReturnCodeType是一个返回码描述类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDescrInfoForReturnCodeType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCountryCodeType是一个国家代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCountryCodeType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSerialType是一个流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcSerialType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPlateSerialType是一个平台流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcPlateSerialType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankSerialType是一个银行流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankSerialType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCorrectSerialType是一个被冲正交易流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcCorrectSerialType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureSerialType是一个期货公司流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcFutureSerialType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcApplicationIDType是一个应用标识类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcApplicationIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankProxyIDType是一个银行代理标识类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcBankProxyIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBTCoreIDType是一个银期转帐核心系统标识类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcFBTCoreIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcServerPortType是一个服务端口号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcServerPortType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRepealedTimesType是一个已经冲正次数类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcRepealedTimesType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRepealTimeIntervalType是一个冲正时间间隔类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcRepealTimeIntervalType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTotalTimesType是一个每日累计转帐次数类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcTotalTimesType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBTRequestIDType是一个请求ID类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcFBTRequestIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTIDType是一个交易ID类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcTIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeAmountType是一个交易金额(元)类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcTradeAmountType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCustFeeType是一个应收客户费用(元)类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcCustFeeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureFeeType是一个应收期货公司费用(元)类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcFutureFeeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSingleMaxAmtType是一个单笔最高限额类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcSingleMaxAmtType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSingleMinAmtType是一个单笔最低限额类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcSingleMinAmtType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTotalAmtType是一个每日累计转帐额度类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcTotalAmtType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCertificationTypeType是一个证件类型类型 +///////////////////////////////////////////////////////////////////////// +///身份证 +#define THOST_FTDC_CFT_IDCard '0' +///护照 +#define THOST_FTDC_CFT_Passport '1' +///军官证 +#define THOST_FTDC_CFT_OfficerIDCard '2' +///士兵证 +#define THOST_FTDC_CFT_SoldierIDCard '3' +///回乡证 +#define THOST_FTDC_CFT_HomeComingCard '4' +///户口簿 +#define THOST_FTDC_CFT_HouseholdRegister '5' +///营业执照号 +#define THOST_FTDC_CFT_LicenseNo '6' +///组织机构代码证 +#define THOST_FTDC_CFT_InstitutionCodeCard '7' +///临时营业执照号 +#define THOST_FTDC_CFT_TempLicenseNo '8' +///民办非企业登记证书 +#define THOST_FTDC_CFT_NoEnterpriseLicenseNo '9' +///其他证件 +#define THOST_FTDC_CFT_OtherCard 'x' +///主管部门批文 +#define THOST_FTDC_CFT_SuperDepAgree 'a' + +typedef char TThostFtdcCertificationTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFileBusinessCodeType是一个文件业务功能类型 +///////////////////////////////////////////////////////////////////////// +///其他 +#define THOST_FTDC_FBC_Others '0' +///转账交易明细对账 +#define THOST_FTDC_FBC_TransferDetails '1' +///客户账户状态对账 +#define THOST_FTDC_FBC_CustAccStatus '2' +///账户类交易明细对账 +#define THOST_FTDC_FBC_AccountTradeDetails '3' +///期货账户信息变更明细对账 +#define THOST_FTDC_FBC_FutureAccountChangeInfoDetails '4' +///客户资金台账余额明细对账 +#define THOST_FTDC_FBC_CustMoneyDetail '5' +///客户销户结息明细对账 +#define THOST_FTDC_FBC_CustCancelAccountInfo '6' +///客户资金余额对账结果 +#define THOST_FTDC_FBC_CustMoneyResult '7' +///其它对账异常结果文件 +#define THOST_FTDC_FBC_OthersExceptionResult '8' +///客户结息净额明细 +#define THOST_FTDC_FBC_CustInterestNetMoneyDetails '9' +///客户资金交收明细 +#define THOST_FTDC_FBC_CustMoneySendAndReceiveDetails 'a' +///法人存管银行资金交收汇总 +#define THOST_FTDC_FBC_CorporationMoneyTotal 'b' +///主体间资金交收汇总 +#define THOST_FTDC_FBC_MainbodyMoneyTotal 'c' +///总分平衡监管数据 +#define THOST_FTDC_FBC_MainPartMonitorData 'd' +///存管银行备付金余额 +#define THOST_FTDC_FBC_PreparationMoney 'e' +///协办存管银行资金监管数据 +#define THOST_FTDC_FBC_BankMoneyMonitorData 'f' + +typedef char TThostFtdcFileBusinessCodeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCashExchangeCodeType是一个汇钞标志类型 +///////////////////////////////////////////////////////////////////////// +///汇 +#define THOST_FTDC_CEC_Exchange '1' +///钞 +#define THOST_FTDC_CEC_Cash '2' + +typedef char TThostFtdcCashExchangeCodeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcYesNoIndicatorType是一个是或否标识类型 +///////////////////////////////////////////////////////////////////////// +///是 +#define THOST_FTDC_YNI_Yes '0' +///否 +#define THOST_FTDC_YNI_No '1' + +typedef char TThostFtdcYesNoIndicatorType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBanlanceTypeType是一个余额类型类型 +///////////////////////////////////////////////////////////////////////// +///当前余额 +#define THOST_FTDC_BLT_CurrentMoney '0' +///可用余额 +#define THOST_FTDC_BLT_UsableMoney '1' +///可取余额 +#define THOST_FTDC_BLT_FetchableMoney '2' +///冻结余额 +#define THOST_FTDC_BLT_FreezeMoney '3' + +typedef char TThostFtdcBanlanceTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcGenderType是一个性别类型 +///////////////////////////////////////////////////////////////////////// +///未知状态 +#define THOST_FTDC_GD_Unknown '0' +///男 +#define THOST_FTDC_GD_Male '1' +///女 +#define THOST_FTDC_GD_Female '2' + +typedef char TThostFtdcGenderType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFeePayFlagType是一个费用支付标志类型 +///////////////////////////////////////////////////////////////////////// +///由受益方支付费用 +#define THOST_FTDC_FPF_BEN '0' +///由发送方支付费用 +#define THOST_FTDC_FPF_OUR '1' +///由发送方支付发起的费用,受益方支付接受的费用 +#define THOST_FTDC_FPF_SHA '2' + +typedef char TThostFtdcFeePayFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPassWordKeyTypeType是一个密钥类型类型 +///////////////////////////////////////////////////////////////////////// +///交换密钥 +#define THOST_FTDC_PWKT_ExchangeKey '0' +///密码密钥 +#define THOST_FTDC_PWKT_PassWordKey '1' +///MAC密钥 +#define THOST_FTDC_PWKT_MACKey '2' +///报文密钥 +#define THOST_FTDC_PWKT_MessageKey '3' + +typedef char TThostFtdcPassWordKeyTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBTPassWordTypeType是一个密码类型类型 +///////////////////////////////////////////////////////////////////////// +///查询 +#define THOST_FTDC_PWT_Query '0' +///取款 +#define THOST_FTDC_PWT_Fetch '1' +///转帐 +#define THOST_FTDC_PWT_Transfer '2' +///交易 +#define THOST_FTDC_PWT_Trade '3' + +typedef char TThostFtdcFBTPassWordTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBTEncryModeType是一个加密方式类型 +///////////////////////////////////////////////////////////////////////// +///不加密 +#define THOST_FTDC_EM_NoEncry '0' +///DES +#define THOST_FTDC_EM_DES '1' +///3DES +#define THOST_FTDC_EM_3DES '2' + +typedef char TThostFtdcFBTEncryModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankRepealFlagType是一个银行冲正标志类型 +///////////////////////////////////////////////////////////////////////// +///银行无需自动冲正 +#define THOST_FTDC_BRF_BankNotNeedRepeal '0' +///银行待自动冲正 +#define THOST_FTDC_BRF_BankWaitingRepeal '1' +///银行已自动冲正 +#define THOST_FTDC_BRF_BankBeenRepealed '2' + +typedef char TThostFtdcBankRepealFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrokerRepealFlagType是一个期商冲正标志类型 +///////////////////////////////////////////////////////////////////////// +///期商无需自动冲正 +#define THOST_FTDC_BRORF_BrokerNotNeedRepeal '0' +///期商待自动冲正 +#define THOST_FTDC_BRORF_BrokerWaitingRepeal '1' +///期商已自动冲正 +#define THOST_FTDC_BRORF_BrokerBeenRepealed '2' + +typedef char TThostFtdcBrokerRepealFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstitutionTypeType是一个机构类别类型 +///////////////////////////////////////////////////////////////////////// +///银行 +#define THOST_FTDC_TS_Bank '0' +///期商 +#define THOST_FTDC_TS_Future '1' +///券商 +#define THOST_FTDC_TS_Store '2' + +typedef char TThostFtdcInstitutionTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLastFragmentType是一个最后分片标志类型 +///////////////////////////////////////////////////////////////////////// +///是最后分片 +#define THOST_FTDC_LF_Yes '0' +///不是最后分片 +#define THOST_FTDC_LF_No '1' + +typedef char TThostFtdcLastFragmentType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankAccStatusType是一个银行账户状态类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_BAS_Normal '0' +///冻结 +#define THOST_FTDC_BAS_Freeze '1' +///挂失 +#define THOST_FTDC_BAS_ReportLoss '2' + +typedef char TThostFtdcBankAccStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMoneyAccountStatusType是一个资金账户状态类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_MAS_Normal '0' +///销户 +#define THOST_FTDC_MAS_Cancel '1' + +typedef char TThostFtdcMoneyAccountStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcManageStatusType是一个存管状态类型 +///////////////////////////////////////////////////////////////////////// +///指定存管 +#define THOST_FTDC_MSS_Point '0' +///预指定 +#define THOST_FTDC_MSS_PrePoint '1' +///撤销指定 +#define THOST_FTDC_MSS_CancelPoint '2' + +typedef char TThostFtdcManageStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSystemTypeType是一个应用系统类型类型 +///////////////////////////////////////////////////////////////////////// +///银期转帐 +#define THOST_FTDC_SYT_FutureBankTransfer '0' +///银证转帐 +#define THOST_FTDC_SYT_StockBankTransfer '1' +///第三方存管 +#define THOST_FTDC_SYT_TheThirdPartStore '2' + +typedef char TThostFtdcSystemTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTxnEndFlagType是一个银期转帐划转结果标志类型 +///////////////////////////////////////////////////////////////////////// +///正常处理中 +#define THOST_FTDC_TEF_NormalProcessing '0' +///成功结束 +#define THOST_FTDC_TEF_Success '1' +///失败结束 +#define THOST_FTDC_TEF_Failed '2' +///异常中 +#define THOST_FTDC_TEF_Abnormal '3' +///已人工异常处理 +#define THOST_FTDC_TEF_ManualProcessedForException '4' +///通讯异常 ,请人工处理 +#define THOST_FTDC_TEF_CommuFailedNeedManualProcess '5' +///系统出错,请人工处理 +#define THOST_FTDC_TEF_SysErrorNeedManualProcess '6' + +typedef char TThostFtdcTxnEndFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProcessStatusType是一个银期转帐服务处理状态类型 +///////////////////////////////////////////////////////////////////////// +///未处理 +#define THOST_FTDC_PSS_NotProcess '0' +///开始处理 +#define THOST_FTDC_PSS_StartProcess '1' +///处理完成 +#define THOST_FTDC_PSS_Finished '2' + +typedef char TThostFtdcProcessStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCustTypeType是一个客户类型类型 +///////////////////////////////////////////////////////////////////////// +///自然人 +#define THOST_FTDC_CUSTT_Person '0' +///机构户 +#define THOST_FTDC_CUSTT_Institution '1' + +typedef char TThostFtdcCustTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBTTransferDirectionType是一个银期转帐方向类型 +///////////////////////////////////////////////////////////////////////// +///入金,银行转期货 +#define THOST_FTDC_FBTTD_FromBankToFuture '1' +///出金,期货转银行 +#define THOST_FTDC_FBTTD_FromFutureToBank '2' + +typedef char TThostFtdcFBTTransferDirectionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOpenOrDestroyType是一个开销户类别类型 +///////////////////////////////////////////////////////////////////////// +///开户 +#define THOST_FTDC_OOD_Open '1' +///销户 +#define THOST_FTDC_OOD_Destroy '0' + +typedef char TThostFtdcOpenOrDestroyType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAvailabilityFlagType是一个有效标志类型 +///////////////////////////////////////////////////////////////////////// +///未确认 +#define THOST_FTDC_AVAF_Invalid '0' +///有效 +#define THOST_FTDC_AVAF_Valid '1' +///冲正 +#define THOST_FTDC_AVAF_Repeal '2' + +typedef char TThostFtdcAvailabilityFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrganTypeType是一个机构类型类型 +///////////////////////////////////////////////////////////////////////// +///银行代理 +#define THOST_FTDC_OT_Bank '1' +///交易前置 +#define THOST_FTDC_OT_Future '2' +///银期转帐平台管理 +#define THOST_FTDC_OT_PlateForm '9' + +typedef char TThostFtdcOrganTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrganLevelType是一个机构级别类型 +///////////////////////////////////////////////////////////////////////// +///银行总行或期商总部 +#define THOST_FTDC_OL_HeadQuarters '1' +///银行分中心或期货公司营业部 +#define THOST_FTDC_OL_Branch '2' + +typedef char TThostFtdcOrganLevelType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProtocalIDType是一个协议类型类型 +///////////////////////////////////////////////////////////////////////// +///期商协议 +#define THOST_FTDC_PID_FutureProtocal '0' +///工行协议 +#define THOST_FTDC_PID_ICBCProtocal '1' +///农行协议 +#define THOST_FTDC_PID_ABCProtocal '2' +///中国银行协议 +#define THOST_FTDC_PID_CBCProtocal '3' +///建行协议 +#define THOST_FTDC_PID_CCBProtocal '4' +///交行协议 +#define THOST_FTDC_PID_BOCOMProtocal '5' +///银期转帐平台协议 +#define THOST_FTDC_PID_FBTPlateFormProtocal 'X' + +typedef char TThostFtdcProtocalIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcConnectModeType是一个套接字连接方式类型 +///////////////////////////////////////////////////////////////////////// +///短连接 +#define THOST_FTDC_CM_ShortConnect '0' +///长连接 +#define THOST_FTDC_CM_LongConnect '1' + +typedef char TThostFtdcConnectModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSyncModeType是一个套接字通信方式类型 +///////////////////////////////////////////////////////////////////////// +///异步 +#define THOST_FTDC_SRM_ASync '0' +///同步 +#define THOST_FTDC_SRM_Sync '1' + +typedef char TThostFtdcSyncModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankAccTypeType是一个银行帐号类型类型 +///////////////////////////////////////////////////////////////////////// +///银行存折 +#define THOST_FTDC_BAT_BankBook '1' +///储蓄卡 +#define THOST_FTDC_BAT_SavingCard '2' +///信用卡 +#define THOST_FTDC_BAT_CreditCard '3' + +typedef char TThostFtdcBankAccTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureAccTypeType是一个期货公司帐号类型类型 +///////////////////////////////////////////////////////////////////////// +///银行存折 +#define THOST_FTDC_FAT_BankBook '1' +///储蓄卡 +#define THOST_FTDC_FAT_SavingCard '2' +///信用卡 +#define THOST_FTDC_FAT_CreditCard '3' + +typedef char TThostFtdcFutureAccTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOrganStatusType是一个接入机构状态类型 +///////////////////////////////////////////////////////////////////////// +///启用 +#define THOST_FTDC_OS_Ready '0' +///签到 +#define THOST_FTDC_OS_CheckIn '1' +///签退 +#define THOST_FTDC_OS_CheckOut '2' +///对帐文件到达 +#define THOST_FTDC_OS_CheckFileArrived '3' +///对帐 +#define THOST_FTDC_OS_CheckDetail '4' +///日终清理 +#define THOST_FTDC_OS_DayEndClean '5' +///注销 +#define THOST_FTDC_OS_Invalid '9' + +typedef char TThostFtdcOrganStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCCBFeeModeType是一个建行收费模式类型 +///////////////////////////////////////////////////////////////////////// +///按金额扣收 +#define THOST_FTDC_CCBFM_ByAmount '1' +///按月扣收 +#define THOST_FTDC_CCBFM_ByMonth '2' + +typedef char TThostFtdcCCBFeeModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCommApiTypeType是一个通讯API类型类型 +///////////////////////////////////////////////////////////////////////// +///客户端 +#define THOST_FTDC_CAPIT_Client '1' +///服务端 +#define THOST_FTDC_CAPIT_Server '2' +///交易系统的UserApi +#define THOST_FTDC_CAPIT_UserApi '3' + +typedef char TThostFtdcCommApiTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcServiceIDType是一个服务编号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcServiceIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcServiceLineNoType是一个服务线路编号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcServiceLineNoType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcServiceNameType是一个服务名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcServiceNameType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLinkStatusType是一个连接状态类型 +///////////////////////////////////////////////////////////////////////// +///已经连接 +#define THOST_FTDC_LS_Connected '1' +///没有连接 +#define THOST_FTDC_LS_Disconnected '2' + +typedef char TThostFtdcLinkStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCommApiPointerType是一个通讯API指针类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcCommApiPointerType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPwdFlagType是一个密码核对标志类型 +///////////////////////////////////////////////////////////////////////// +///不核对 +#define THOST_FTDC_BPWDF_NoCheck '0' +///明文核对 +#define THOST_FTDC_BPWDF_BlankCheck '1' +///密文核对 +#define THOST_FTDC_BPWDF_EncryptCheck '2' + +typedef char TThostFtdcPwdFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSecuAccTypeType是一个期货帐号类型类型 +///////////////////////////////////////////////////////////////////////// +///资金帐号 +#define THOST_FTDC_SAT_AccountID '1' +///资金卡号 +#define THOST_FTDC_SAT_CardID '2' +///上海股东帐号 +#define THOST_FTDC_SAT_SHStockholderID '3' +///深圳股东帐号 +#define THOST_FTDC_SAT_SZStockholderID '4' + +typedef char TThostFtdcSecuAccTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTransferStatusType是一个转账交易状态类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_TRFS_Normal '0' +///被冲正 +#define THOST_FTDC_TRFS_Repealed '1' + +typedef char TThostFtdcTransferStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSponsorTypeType是一个发起方类型 +///////////////////////////////////////////////////////////////////////// +///期商 +#define THOST_FTDC_SPTYPE_Broker '0' +///银行 +#define THOST_FTDC_SPTYPE_Bank '1' + +typedef char TThostFtdcSponsorTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReqRspTypeType是一个请求响应类别类型 +///////////////////////////////////////////////////////////////////////// +///请求 +#define THOST_FTDC_REQRSP_Request '0' +///响应 +#define THOST_FTDC_REQRSP_Response '1' + +typedef char TThostFtdcReqRspTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBTUserEventTypeType是一个银期转帐用户事件类型类型 +///////////////////////////////////////////////////////////////////////// +///签到 +#define THOST_FTDC_FBTUET_SignIn '0' +///银行转期货 +#define THOST_FTDC_FBTUET_FromBankToFuture '1' +///期货转银行 +#define THOST_FTDC_FBTUET_FromFutureToBank '2' +///开户 +#define THOST_FTDC_FBTUET_OpenAccount '3' +///销户 +#define THOST_FTDC_FBTUET_CancelAccount '4' +///变更银行账户 +#define THOST_FTDC_FBTUET_ChangeAccount '5' +///冲正银行转期货 +#define THOST_FTDC_FBTUET_RepealFromBankToFuture '6' +///冲正期货转银行 +#define THOST_FTDC_FBTUET_RepealFromFutureToBank '7' +///查询银行账户 +#define THOST_FTDC_FBTUET_QueryBankAccount '8' +///查询期货账户 +#define THOST_FTDC_FBTUET_QueryFutureAccount '9' +///签退 +#define THOST_FTDC_FBTUET_SignOut 'A' +///密钥同步 +#define THOST_FTDC_FBTUET_SyncKey 'B' +///其他 +#define THOST_FTDC_FBTUET_Other 'Z' + +typedef char TThostFtdcFBTUserEventTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankIDByBankType是一个银行自己的编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankIDByBankType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankOperNoType是一个银行操作员号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankOperNoType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankCustNoType是一个银行客户号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankCustNoType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDBOPSeqNoType是一个递增的序列号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcDBOPSeqNoType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTableNameType是一个FBT表名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTableNameType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPKNameType是一个FBT表操作主键名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPKNameType[201]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPKValueType是一个FBT表操作主键值类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPKValueType[501]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDBOperationType是一个记录操作类型类型 +///////////////////////////////////////////////////////////////////////// +///插入 +#define THOST_FTDC_DBOP_Insert '0' +///更新 +#define THOST_FTDC_DBOP_Update '1' +///删除 +#define THOST_FTDC_DBOP_Delete '2' + +typedef char TThostFtdcDBOperationType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSyncFlagType是一个同步标记类型 +///////////////////////////////////////////////////////////////////////// +///已同步 +#define THOST_FTDC_SYNF_Yes '0' +///未同步 +#define THOST_FTDC_SYNF_No '1' + +typedef char TThostFtdcSyncFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTargetIDType是一个同步目标编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTargetIDType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSyncTypeType是一个同步类型类型 +///////////////////////////////////////////////////////////////////////// +///一次同步 +#define THOST_FTDC_SYNT_OneOffSync '0' +///定时同步 +#define THOST_FTDC_SYNT_TimerSync '1' +///定时完全同步 +#define THOST_FTDC_SYNT_TimerFullSync '2' + +typedef char TThostFtdcSyncTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBETimeType是一个各种换汇时间类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBETimeType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEBankNoType是一个换汇银行行号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEBankNoType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBECertNoType是一个换汇凭证号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBECertNoType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExDirectionType是一个换汇方向类型 +///////////////////////////////////////////////////////////////////////// +///结汇 +#define THOST_FTDC_FBEDIR_Settlement '0' +///售汇 +#define THOST_FTDC_FBEDIR_Sale '1' + +typedef char TThostFtdcExDirectionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEBankAccountType是一个换汇银行账户类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEBankAccountType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEBankAccountNameType是一个换汇银行账户名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEBankAccountNameType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEAmtType是一个各种换汇金额类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcFBEAmtType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEBusinessTypeType是一个换汇业务类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEBusinessTypeType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEPostScriptType是一个换汇附言类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEPostScriptType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBERemarkType是一个换汇备注类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBERemarkType[71]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExRateType是一个换汇汇率类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcExRateType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEResultFlagType是一个换汇成功标志类型 +///////////////////////////////////////////////////////////////////////// +///成功 +#define THOST_FTDC_FBERES_Success '0' +///账户余额不足 +#define THOST_FTDC_FBERES_InsufficientBalance '1' +///交易结果未知 +#define THOST_FTDC_FBERES_UnknownTrading '8' +///失败 +#define THOST_FTDC_FBERES_Fail 'x' + +typedef char TThostFtdcFBEResultFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBERtnMsgType是一个换汇返回信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBERtnMsgType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEExtendMsgType是一个换汇扩展信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEExtendMsgType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEBusinessSerialType是一个换汇记账流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEBusinessSerialType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBESystemSerialType是一个换汇流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBESystemSerialType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBETotalExCntType是一个换汇交易总笔数类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcFBETotalExCntType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEExchStatusType是一个换汇交易状态类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_FBEES_Normal '0' +///交易重发 +#define THOST_FTDC_FBEES_ReExchange '1' + +typedef char TThostFtdcFBEExchStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEFileFlagType是一个换汇文件标志类型 +///////////////////////////////////////////////////////////////////////// +///数据包 +#define THOST_FTDC_FBEFG_DataPackage '0' +///文件 +#define THOST_FTDC_FBEFG_File '1' + +typedef char TThostFtdcFBEFileFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEAlreadyTradeType是一个换汇已交易标志类型 +///////////////////////////////////////////////////////////////////////// +///未交易 +#define THOST_FTDC_FBEAT_NotTrade '0' +///已交易 +#define THOST_FTDC_FBEAT_Trade '1' + +typedef char TThostFtdcFBEAlreadyTradeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEOpenBankType是一个换汇账户开户行类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEOpenBankType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEUserEventTypeType是一个银期换汇用户事件类型类型 +///////////////////////////////////////////////////////////////////////// +///签到 +#define THOST_FTDC_FBEUET_SignIn '0' +///换汇 +#define THOST_FTDC_FBEUET_Exchange '1' +///换汇重发 +#define THOST_FTDC_FBEUET_ReExchange '2' +///银行账户查询 +#define THOST_FTDC_FBEUET_QueryBankAccount '3' +///换汇明细查询 +#define THOST_FTDC_FBEUET_QueryExchDetial '4' +///换汇汇总查询 +#define THOST_FTDC_FBEUET_QueryExchSummary '5' +///换汇汇率查询 +#define THOST_FTDC_FBEUET_QueryExchRate '6' +///对账文件通知 +#define THOST_FTDC_FBEUET_CheckBankAccount '7' +///签退 +#define THOST_FTDC_FBEUET_SignOut '8' +///其他 +#define THOST_FTDC_FBEUET_Other 'Z' + +typedef char TThostFtdcFBEUserEventTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEFileNameType是一个换汇相关文件名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEFileNameType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEBatchSerialType是一个换汇批次号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFBEBatchSerialType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBEReqFlagType是一个换汇发送标志类型 +///////////////////////////////////////////////////////////////////////// +///未处理 +#define THOST_FTDC_FBERF_UnProcessed '0' +///等待发送 +#define THOST_FTDC_FBERF_WaitSend '1' +///发送成功 +#define THOST_FTDC_FBERF_SendSuccess '2' +///发送失败 +#define THOST_FTDC_FBERF_SendFailed '3' +///等待重发 +#define THOST_FTDC_FBERF_WaitReSend '4' + +typedef char TThostFtdcFBEReqFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcNotifyClassType是一个风险通知类型类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_NC_NOERROR '0' +///警示 +#define THOST_FTDC_NC_Warn '1' +///追保 +#define THOST_FTDC_NC_Call '2' +///强平 +#define THOST_FTDC_NC_Force '3' +///穿仓 +#define THOST_FTDC_NC_CHUANCANG '4' +///异常 +#define THOST_FTDC_NC_Exception '5' + +typedef char TThostFtdcNotifyClassType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRiskNofityInfoType是一个客户风险通知消息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRiskNofityInfoType[257]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcForceCloseSceneIdType是一个强平场景编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcForceCloseSceneIdType[24]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcForceCloseTypeType是一个强平单类型类型 +///////////////////////////////////////////////////////////////////////// +///手工强平 +#define THOST_FTDC_FCT_Manual '0' +///单一投资者辅助强平 +#define THOST_FTDC_FCT_Single '1' +///批量投资者辅助强平 +#define THOST_FTDC_FCT_Group '2' + +typedef char TThostFtdcForceCloseTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInstrumentIDsType是一个多个产品代码,用+分隔,如cu+zn类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInstrumentIDsType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRiskNotifyMethodType是一个风险通知途径类型 +///////////////////////////////////////////////////////////////////////// +///系统通知 +#define THOST_FTDC_RNM_System '0' +///短信通知 +#define THOST_FTDC_RNM_SMS '1' +///邮件通知 +#define THOST_FTDC_RNM_EMail '2' +///人工通知 +#define THOST_FTDC_RNM_Manual '3' + +typedef char TThostFtdcRiskNotifyMethodType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRiskNotifyStatusType是一个风险通知状态类型 +///////////////////////////////////////////////////////////////////////// +///未生成 +#define THOST_FTDC_RNS_NotGen '0' +///已生成未发送 +#define THOST_FTDC_RNS_Generated '1' +///发送失败 +#define THOST_FTDC_RNS_SendError '2' +///已发送未接收 +#define THOST_FTDC_RNS_SendOk '3' +///已接收未确认 +#define THOST_FTDC_RNS_Received '4' +///已确认 +#define THOST_FTDC_RNS_Confirmed '5' + +typedef char TThostFtdcRiskNotifyStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRiskUserEventType是一个风控用户操作事件类型 +///////////////////////////////////////////////////////////////////////// +///导出数据 +#define THOST_FTDC_RUE_ExportData '0' + +typedef char TThostFtdcRiskUserEventType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcParamIDType是一个参数代码类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcParamIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcParamNameType是一个参数名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcParamNameType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcParamValueType是一个参数值类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcParamValueType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcConditionalOrderSortTypeType是一个条件单索引条件类型 +///////////////////////////////////////////////////////////////////////// +///使用最新价升序 +#define THOST_FTDC_COST_LastPriceAsc '0' +///使用最新价降序 +#define THOST_FTDC_COST_LastPriceDesc '1' +///使用卖价升序 +#define THOST_FTDC_COST_AskPriceAsc '2' +///使用卖价降序 +#define THOST_FTDC_COST_AskPriceDesc '3' +///使用买价升序 +#define THOST_FTDC_COST_BidPriceAsc '4' +///使用买价降序 +#define THOST_FTDC_COST_BidPriceDesc '5' + +typedef char TThostFtdcConditionalOrderSortTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSendTypeType是一个报送状态类型 +///////////////////////////////////////////////////////////////////////// +///未发送 +#define THOST_FTDC_UOAST_NoSend '0' +///已发送 +#define THOST_FTDC_UOAST_Sended '1' +///已生成 +#define THOST_FTDC_UOAST_Generated '2' +///报送失败 +#define THOST_FTDC_UOAST_SendFail '3' +///接收成功 +#define THOST_FTDC_UOAST_Success '4' +///接收失败 +#define THOST_FTDC_UOAST_Fail '5' +///取消报送 +#define THOST_FTDC_UOAST_Cancel '6' + +typedef char TThostFtdcSendTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClientIDStatusType是一个交易编码状态类型 +///////////////////////////////////////////////////////////////////////// +///未申请 +#define THOST_FTDC_UOACS_NoApply '1' +///已提交申请 +#define THOST_FTDC_UOACS_Submited '2' +///已发送申请 +#define THOST_FTDC_UOACS_Sended '3' +///完成 +#define THOST_FTDC_UOACS_Success '4' +///拒绝 +#define THOST_FTDC_UOACS_Refuse '5' +///已撤销编码 +#define THOST_FTDC_UOACS_Cancel '6' + +typedef char TThostFtdcClientIDStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIndustryIDType是一个行业编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcIndustryIDType[17]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcQuestionIDType是一个特有信息编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcQuestionIDType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcQuestionContentType是一个特有信息说明类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcQuestionContentType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOptionIDType是一个选项编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOptionIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOptionContentType是一个选项说明类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOptionContentType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcQuestionTypeType是一个特有信息类型类型 +///////////////////////////////////////////////////////////////////////// +///单选 +#define THOST_FTDC_QT_Radio '1' +///多选 +#define THOST_FTDC_QT_Option '2' +///填空 +#define THOST_FTDC_QT_Blank '3' + +typedef char TThostFtdcQuestionTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProcessIDType是一个业务流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcProcessIDType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSeqNoType是一个流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcSeqNoType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOAProcessStatusType是一个流程状态类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUOAProcessStatusType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProcessTypeType是一个流程功能类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcProcessTypeType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBusinessTypeType是一个业务类型类型 +///////////////////////////////////////////////////////////////////////// +///请求 +#define THOST_FTDC_BT_Request '1' +///应答 +#define THOST_FTDC_BT_Response '2' +///通知 +#define THOST_FTDC_BT_Notice '3' + +typedef char TThostFtdcBusinessTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCfmmcReturnCodeType是一个监控中心返回码类型 +///////////////////////////////////////////////////////////////////////// +///成功 +#define THOST_FTDC_CRC_Success '0' +///该客户已经有流程在处理中 +#define THOST_FTDC_CRC_Working '1' +///监控中客户资料检查失败 +#define THOST_FTDC_CRC_InfoFail '2' +///监控中实名制检查失败 +#define THOST_FTDC_CRC_IDCardFail '3' +///其他错误 +#define THOST_FTDC_CRC_OtherFail '4' + +typedef char TThostFtdcCfmmcReturnCodeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExReturnCodeType是一个交易所返回码类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcExReturnCodeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClientTypeType是一个客户类型类型 +///////////////////////////////////////////////////////////////////////// +///所有 +#define THOST_FTDC_CfMMCCT_All '0' +///个人 +#define THOST_FTDC_CfMMCCT_Person '1' +///单位 +#define THOST_FTDC_CfMMCCT_Company '2' +///其他 +#define THOST_FTDC_CfMMCCT_Other '3' +///特殊法人 +#define THOST_FTDC_CfMMCCT_SpecialOrgan '4' +///资管户 +#define THOST_FTDC_CfMMCCT_Asset '5' + +typedef char TThostFtdcClientTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangeIDTypeType是一个交易所编号类型 +///////////////////////////////////////////////////////////////////////// +///上海期货交易所 +#define THOST_FTDC_EIDT_SHFE 'S' +///郑州商品交易所 +#define THOST_FTDC_EIDT_CZCE 'Z' +///大连商品交易所 +#define THOST_FTDC_EIDT_DCE 'D' +///中国金融期货交易所 +#define THOST_FTDC_EIDT_CFFEX 'J' +///上海国际能源交易中心股份有限公司 +#define THOST_FTDC_EIDT_INE 'N' + +typedef char TThostFtdcExchangeIDTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExClientIDTypeType是一个交易编码类型类型 +///////////////////////////////////////////////////////////////////////// +///套保 +#define THOST_FTDC_ECIDT_Hedge '1' +///套利 +#define THOST_FTDC_ECIDT_Arbitrage '2' +///投机 +#define THOST_FTDC_ECIDT_Speculation '3' + +typedef char TThostFtdcExClientIDTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClientClassifyType是一个客户分类码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcClientClassifyType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOAOrganTypeType是一个单位性质类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUOAOrganTypeType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOACountryCodeType是一个国家代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUOACountryCodeType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAreaCodeType是一个区号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAreaCodeType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFuturesIDType是一个监控中心为客户分配的代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFuturesIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCffmcDateType是一个日期类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCffmcDateType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCffmcTimeType是一个时间类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCffmcTimeType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcNocIDType是一个组织机构代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcNocIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUpdateFlagType是一个更新状态类型 +///////////////////////////////////////////////////////////////////////// +///未更新 +#define THOST_FTDC_UF_NoUpdate '0' +///更新全部信息成功 +#define THOST_FTDC_UF_Success '1' +///更新全部信息失败 +#define THOST_FTDC_UF_Fail '2' +///更新交易编码成功 +#define THOST_FTDC_UF_TCSuccess '3' +///更新交易编码失败 +#define THOST_FTDC_UF_TCFail '4' +///已丢弃 +#define THOST_FTDC_UF_Cancel '5' + +typedef char TThostFtdcUpdateFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcApplyOperateIDType是一个申请动作类型 +///////////////////////////////////////////////////////////////////////// +///开户 +#define THOST_FTDC_AOID_OpenInvestor '1' +///修改身份信息 +#define THOST_FTDC_AOID_ModifyIDCard '2' +///修改一般信息 +#define THOST_FTDC_AOID_ModifyNoIDCard '3' +///申请交易编码 +#define THOST_FTDC_AOID_ApplyTradingCode '4' +///撤销交易编码 +#define THOST_FTDC_AOID_CancelTradingCode '5' +///销户 +#define THOST_FTDC_AOID_CancelInvestor '6' +///账户休眠 +#define THOST_FTDC_AOID_FreezeAccount '8' +///激活休眠账户 +#define THOST_FTDC_AOID_ActiveFreezeAccount '9' + +typedef char TThostFtdcApplyOperateIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcApplyStatusIDType是一个申请状态类型 +///////////////////////////////////////////////////////////////////////// +///未补全 +#define THOST_FTDC_ASID_NoComplete '1' +///已提交 +#define THOST_FTDC_ASID_Submited '2' +///已审核 +#define THOST_FTDC_ASID_Checked '3' +///已拒绝 +#define THOST_FTDC_ASID_Refused '4' +///已删除 +#define THOST_FTDC_ASID_Deleted '5' + +typedef char TThostFtdcApplyStatusIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSendMethodType是一个发送方式类型 +///////////////////////////////////////////////////////////////////////// +///文件发送 +#define THOST_FTDC_UOASM_ByAPI '1' +///电子发送 +#define THOST_FTDC_UOASM_ByFile '2' + +typedef char TThostFtdcSendMethodType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcEventTypeType是一个业务操作类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcEventTypeType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcEventModeType是一个操作方法类型 +///////////////////////////////////////////////////////////////////////// +///增加 +#define THOST_FTDC_EvM_ADD '1' +///修改 +#define THOST_FTDC_EvM_UPDATE '2' +///删除 +#define THOST_FTDC_EvM_DELETE '3' +///复核 +#define THOST_FTDC_EvM_CHECK '4' +///复制 +#define THOST_FTDC_EvM_COPY '5' +///注销 +#define THOST_FTDC_EvM_CANCEL '6' +///冲销 +#define THOST_FTDC_EvM_Reverse '7' + +typedef char TThostFtdcEventModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOAAutoSendType是一个统一开户申请自动发送类型 +///////////////////////////////////////////////////////////////////////// +///自动发送并接收 +#define THOST_FTDC_UOAA_ASR '1' +///自动发送,不自动接收 +#define THOST_FTDC_UOAA_ASNR '2' +///不自动发送,自动接收 +#define THOST_FTDC_UOAA_NSAR '3' +///不自动发送,也不自动接收 +#define THOST_FTDC_UOAA_NSR '4' + +typedef char TThostFtdcUOAAutoSendType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcQueryDepthType是一个查询深度类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcQueryDepthType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDataCenterIDType是一个数据中心代码类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcDataCenterIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFlowIDType是一个流程ID类型 +///////////////////////////////////////////////////////////////////////// +///投资者对应投资者组设置 +#define THOST_FTDC_EvM_InvestorGroupFlow '1' +///投资者手续费率设置 +#define THOST_FTDC_EvM_InvestorRate '2' +///投资者手续费率模板关系设置 +#define THOST_FTDC_EvM_InvestorCommRateModel '3' + +typedef char TThostFtdcFlowIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCheckLevelType是一个复核级别类型 +///////////////////////////////////////////////////////////////////////// +///零级复核 +#define THOST_FTDC_CL_Zero '0' +///一级复核 +#define THOST_FTDC_CL_One '1' +///二级复核 +#define THOST_FTDC_CL_Two '2' + +typedef char TThostFtdcCheckLevelType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCheckNoType是一个操作次数类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcCheckNoType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCheckStatusType是一个复核级别类型 +///////////////////////////////////////////////////////////////////////// +///未复核 +#define THOST_FTDC_CHS_Init '0' +///复核中 +#define THOST_FTDC_CHS_Checking '1' +///已复核 +#define THOST_FTDC_CHS_Checked '2' +///拒绝 +#define THOST_FTDC_CHS_Refuse '3' +///作废 +#define THOST_FTDC_CHS_Cancel '4' + +typedef char TThostFtdcCheckStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUsedStatusType是一个生效状态类型 +///////////////////////////////////////////////////////////////////////// +///未生效 +#define THOST_FTDC_CHU_Unused '0' +///已生效 +#define THOST_FTDC_CHU_Used '1' +///生效失败 +#define THOST_FTDC_CHU_Fail '2' + +typedef char TThostFtdcUsedStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRateTemplateNameType是一个模型名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRateTemplateNameType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPropertyStringType是一个用于查询的投资属性字段类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPropertyStringType[2049]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankAcountOriginType是一个账户来源类型 +///////////////////////////////////////////////////////////////////////// +///手工录入 +#define THOST_FTDC_BAO_ByAccProperty '0' +///银期转账 +#define THOST_FTDC_BAO_ByFBTransfer '1' + +typedef char TThostFtdcBankAcountOriginType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMonthBillTradeSumType是一个结算单月报成交汇总方式类型 +///////////////////////////////////////////////////////////////////////// +///同日同合约 +#define THOST_FTDC_MBTS_ByInstrument '0' +///同日同合约同价格 +#define THOST_FTDC_MBTS_ByDayInsPrc '1' +///同合约 +#define THOST_FTDC_MBTS_ByDayIns '2' + +typedef char TThostFtdcMonthBillTradeSumType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFBTTradeCodeEnumType是一个银期交易代码枚举类型 +///////////////////////////////////////////////////////////////////////// +///银行发起银行转期货 +#define THOST_FTDC_FTC_BankLaunchBankToBroker '102001' +///期货发起银行转期货 +#define THOST_FTDC_FTC_BrokerLaunchBankToBroker '202001' +///银行发起期货转银行 +#define THOST_FTDC_FTC_BankLaunchBrokerToBank '102002' +///期货发起期货转银行 +#define THOST_FTDC_FTC_BrokerLaunchBrokerToBank '202002' + +typedef char TThostFtdcFBTTradeCodeEnumType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRateTemplateIDType是一个模型代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRateTemplateIDType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRiskRateType是一个风险度类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRiskRateType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTimestampType是一个时间戳类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcTimestampType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestorIDRuleNameType是一个号段规则名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInvestorIDRuleNameType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestorIDRuleExprType是一个号段规则表达式类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInvestorIDRuleExprType[513]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLastDriftType是一个上次OTP漂移值类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcLastDriftType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLastSuccessType是一个上次OTP成功值类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcLastSuccessType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAuthKeyType是一个令牌密钥类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAuthKeyType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSerialNumberType是一个序列号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSerialNumberType[17]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOTPTypeType是一个动态令牌类型类型 +///////////////////////////////////////////////////////////////////////// +///无动态令牌 +#define THOST_FTDC_OTP_NONE '0' +///时间令牌 +#define THOST_FTDC_OTP_TOTP '1' + +typedef char TThostFtdcOTPTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOTPVendorsIDType是一个动态令牌提供商类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOTPVendorsIDType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOTPVendorsNameType是一个动态令牌提供商名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOTPVendorsNameType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOTPStatusType是一个动态令牌状态类型 +///////////////////////////////////////////////////////////////////////// +///未使用 +#define THOST_FTDC_OTPS_Unused '0' +///已使用 +#define THOST_FTDC_OTPS_Used '1' +///注销 +#define THOST_FTDC_OTPS_Disuse '2' + +typedef char TThostFtdcOTPStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBrokerUserTypeType是一个经济公司用户类型类型 +///////////////////////////////////////////////////////////////////////// +///投资者 +#define THOST_FTDC_BUT_Investor '1' +///操作员 +#define THOST_FTDC_BUT_BrokerUser '2' + +typedef char TThostFtdcBrokerUserTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFutureTypeType是一个期货类型类型 +///////////////////////////////////////////////////////////////////////// +///商品期货 +#define THOST_FTDC_FUTT_Commodity '1' +///金融期货 +#define THOST_FTDC_FUTT_Financial '2' + +typedef char TThostFtdcFutureTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundEventTypeType是一个资金管理操作类型类型 +///////////////////////////////////////////////////////////////////////// +///转账限额 +#define THOST_FTDC_FET_Restriction '0' +///当日转账限额 +#define THOST_FTDC_FET_TodayRestriction '1' +///期商流水 +#define THOST_FTDC_FET_Transfer '2' +///资金冻结 +#define THOST_FTDC_FET_Credit '3' +///投资者可提资金比例 +#define THOST_FTDC_FET_InvestorWithdrawAlm '4' +///单个银行帐户转账限额 +#define THOST_FTDC_FET_BankRestriction '5' +///银期签约账户 +#define THOST_FTDC_FET_Accountregister '6' +///交易所出入金 +#define THOST_FTDC_FET_ExchangeFundIO '7' +///投资者出入金 +#define THOST_FTDC_FET_InvestorFundIO '8' + +typedef char TThostFtdcFundEventTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAccountSourceTypeType是一个资金账户来源类型 +///////////////////////////////////////////////////////////////////////// +///银期同步 +#define THOST_FTDC_AST_FBTransfer '0' +///手工录入 +#define THOST_FTDC_AST_ManualEntry '1' + +typedef char TThostFtdcAccountSourceTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCodeSourceTypeType是一个交易编码来源类型 +///////////////////////////////////////////////////////////////////////// +///统一开户(已规范) +#define THOST_FTDC_CST_UnifyAccount '0' +///手工录入(未规范) +#define THOST_FTDC_CST_ManualEntry '1' + +typedef char TThostFtdcCodeSourceTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserRangeType是一个操作员范围类型 +///////////////////////////////////////////////////////////////////////// +///所有 +#define THOST_FTDC_UR_All '0' +///单一操作员 +#define THOST_FTDC_UR_Single '1' + +typedef char TThostFtdcUserRangeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTimeSpanType是一个时间跨度类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcTimeSpanType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcImportSequenceIDType是一个动态令牌导入批次编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcImportSequenceIDType[17]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcByGroupType是一个交易统计表按客户统计方式类型 +///////////////////////////////////////////////////////////////////////// +///按投资者统计 +#define THOST_FTDC_BG_Investor '2' +///按类统计 +#define THOST_FTDC_BG_Group '1' + +typedef char TThostFtdcByGroupType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeSumStatModeType是一个交易统计表按范围统计方式类型 +///////////////////////////////////////////////////////////////////////// +///按合约统计 +#define THOST_FTDC_TSSM_Instrument '1' +///按产品统计 +#define THOST_FTDC_TSSM_Product '2' +///按交易所统计 +#define THOST_FTDC_TSSM_Exchange '3' + +typedef char TThostFtdcTradeSumStatModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcComTypeType是一个组合成交类型类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcComTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserProductIDType是一个产品标识类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUserProductIDType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserProductNameType是一个产品名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUserProductNameType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUserProductMemoType是一个产品说明类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUserProductMemoType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCCancelFlagType是一个新增或变更标志类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCCancelFlagType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCDateType是一个日期类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCDateType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCInvestorNameType是一个客户名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCInvestorNameType[201]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCOpenInvestorNameType是一个客户名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCOpenInvestorNameType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCInvestorIDType是一个客户代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCInvestorIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCIdentifiedCardNoType是一个证件号码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCIdentifiedCardNoType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCClientIDType是一个交易编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCClientIDType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCBankFlagType是一个银行标识类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCBankFlagType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCBankAccountType是一个银行账户类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCBankAccountType[23]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCOpenNameType是一个开户人类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCOpenNameType[401]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCMemoType是一个说明类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCMemoType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCTimeType是一个时间类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCTimeType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCTradeIDType是一个成交流水号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCTradeIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCExchangeInstIDType是一个合约代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCExchangeInstIDType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCMortgageNameType是一个质押品名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCMortgageNameType[7]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCReasonType是一个事由类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCReasonType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIsSettlementType是一个是否为非结算会员类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcIsSettlementType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCMoneyType是一个资金类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcCSRCMoneyType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCPriceType是一个价格类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcCSRCPriceType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCOptionsTypeType是一个期权类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCOptionsTypeType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCStrikePriceType是一个执行价类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcCSRCStrikePriceType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCTargetProductIDType是一个标的品种类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCTargetProductIDType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCTargetInstrIDType是一个标的合约类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCTargetInstrIDType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCommModelNameType是一个手续费率模板名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCommModelNameType[161]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCommModelMemoType是一个手续费率模板备注类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCommModelMemoType[1025]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExprSetModeType是一个日期表达式设置类型类型 +///////////////////////////////////////////////////////////////////////// +///相对已有规则设置 +#define THOST_FTDC_ESM_Relative '1' +///典型设置 +#define THOST_FTDC_ESM_Typical '2' + +typedef char TThostFtdcExprSetModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRateInvestorRangeType是一个投资者范围类型 +///////////////////////////////////////////////////////////////////////// +///公司标准 +#define THOST_FTDC_RIR_All '1' +///模板 +#define THOST_FTDC_RIR_Model '2' +///单一投资者 +#define THOST_FTDC_RIR_Single '3' + +typedef char TThostFtdcRateInvestorRangeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAgentBrokerIDType是一个代理经纪公司代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAgentBrokerIDType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDRIdentityIDType是一个交易中心代码类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcDRIdentityIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDRIdentityNameType是一个交易中心名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDRIdentityNameType[65]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDBLinkIDType是一个DBLink标识号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDBLinkIDType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSyncDataStatusType是一个主次用系统数据同步状态类型 +///////////////////////////////////////////////////////////////////////// +///未同步 +#define THOST_FTDC_SDS_Initialize '0' +///同步中 +#define THOST_FTDC_SDS_Settlementing '1' +///已同步 +#define THOST_FTDC_SDS_Settlemented '2' + +typedef char TThostFtdcSyncDataStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeSourceType是一个成交来源类型 +///////////////////////////////////////////////////////////////////////// +///来自交易所普通回报 +#define THOST_FTDC_TSRC_NORMAL '0' +///来自查询 +#define THOST_FTDC_TSRC_QUERY '1' + +typedef char TThostFtdcTradeSourceType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFlexStatModeType是一个产品合约统计方式类型 +///////////////////////////////////////////////////////////////////////// +///产品统计 +#define THOST_FTDC_FSM_Product '1' +///交易所统计 +#define THOST_FTDC_FSM_Exchange '2' +///统计所有 +#define THOST_FTDC_FSM_All '3' + +typedef char TThostFtdcFlexStatModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcByInvestorRangeType是一个投资者范围统计方式类型 +///////////////////////////////////////////////////////////////////////// +///属性统计 +#define THOST_FTDC_BIR_Property '1' +///统计所有 +#define THOST_FTDC_BIR_All '2' + +typedef char TThostFtdcByInvestorRangeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSRiskRateType是一个风险度类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSRiskRateType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSequenceNo12Type是一个序号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcSequenceNo12Type; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPropertyInvestorRangeType是一个投资者范围类型 +///////////////////////////////////////////////////////////////////////// +///所有 +#define THOST_FTDC_PIR_All '1' +///投资者属性 +#define THOST_FTDC_PIR_Property '2' +///单一投资者 +#define THOST_FTDC_PIR_Single '3' + +typedef char TThostFtdcPropertyInvestorRangeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFileStatusType是一个文件状态类型 +///////////////////////////////////////////////////////////////////////// +///未生成 +#define THOST_FTDC_FIS_NoCreate '0' +///已生成 +#define THOST_FTDC_FIS_Created '1' +///生成失败 +#define THOST_FTDC_FIS_Failed '2' + +typedef char TThostFtdcFileStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFileGenStyleType是一个文件生成方式类型 +///////////////////////////////////////////////////////////////////////// +///下发 +#define THOST_FTDC_FGS_FileTransmit '0' +///生成 +#define THOST_FTDC_FGS_FileGen '1' + +typedef char TThostFtdcFileGenStyleType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSysOperModeType是一个系统日志操作方法类型 +///////////////////////////////////////////////////////////////////////// +///增加 +#define THOST_FTDC_SoM_Add '1' +///修改 +#define THOST_FTDC_SoM_Update '2' +///删除 +#define THOST_FTDC_SoM_Delete '3' +///复制 +#define THOST_FTDC_SoM_Copy '4' +///激活 +#define THOST_FTDC_SoM_AcTive '5' +///注销 +#define THOST_FTDC_SoM_CanCel '6' +///重置 +#define THOST_FTDC_SoM_ReSet '7' + +typedef char TThostFtdcSysOperModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSysOperTypeType是一个系统日志操作类型类型 +///////////////////////////////////////////////////////////////////////// +///修改操作员密码 +#define THOST_FTDC_SoT_UpdatePassword '0' +///操作员组织架构关系 +#define THOST_FTDC_SoT_UserDepartment '1' +///角色管理 +#define THOST_FTDC_SoT_RoleManager '2' +///角色功能设置 +#define THOST_FTDC_SoT_RoleFunction '3' +///基础参数设置 +#define THOST_FTDC_SoT_BaseParam '4' +///设置操作员 +#define THOST_FTDC_SoT_SetUserID '5' +///用户角色设置 +#define THOST_FTDC_SoT_SetUserRole '6' +///用户IP限制 +#define THOST_FTDC_SoT_UserIpRestriction '7' +///组织架构管理 +#define THOST_FTDC_SoT_DepartmentManager '8' +///组织架构向查询分类复制 +#define THOST_FTDC_SoT_DepartmentCopy '9' +///交易编码管理 +#define THOST_FTDC_SoT_Tradingcode 'A' +///投资者状态维护 +#define THOST_FTDC_SoT_InvestorStatus 'B' +///投资者权限管理 +#define THOST_FTDC_SoT_InvestorAuthority 'C' +///属性设置 +#define THOST_FTDC_SoT_PropertySet 'D' +///重置投资者密码 +#define THOST_FTDC_SoT_ReSetInvestorPasswd 'E' +///投资者个性信息维护 +#define THOST_FTDC_SoT_InvestorPersonalityInfo 'F' + +typedef char TThostFtdcSysOperTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCDataQueyTypeType是一个上报数据查询类型类型 +///////////////////////////////////////////////////////////////////////// +///查询当前交易日报送的数据 +#define THOST_FTDC_CSRCQ_Current '0' +///查询历史报送的代理经纪公司的数据 +#define THOST_FTDC_CSRCQ_History '1' + +typedef char TThostFtdcCSRCDataQueyTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFreezeStatusType是一个休眠状态类型 +///////////////////////////////////////////////////////////////////////// +///活跃 +#define THOST_FTDC_FRS_Normal '1' +///休眠 +#define THOST_FTDC_FRS_Freeze '0' + +typedef char TThostFtdcFreezeStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcStandardStatusType是一个规范状态类型 +///////////////////////////////////////////////////////////////////////// +///已规范 +#define THOST_FTDC_STST_Standard '0' +///未规范 +#define THOST_FTDC_STST_NonStandard '1' + +typedef char TThostFtdcStandardStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCFreezeStatusType是一个休眠状态类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCFreezeStatusType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRightParamTypeType是一个配置类型类型 +///////////////////////////////////////////////////////////////////////// +///休眠户 +#define THOST_FTDC_RPT_Freeze '1' +///激活休眠户 +#define THOST_FTDC_RPT_FreezeActive '2' +///开仓权限限制 +#define THOST_FTDC_RPT_OpenLimit '3' +///解除开仓权限限制 +#define THOST_FTDC_RPT_RelieveOpenLimit '4' + +typedef char TThostFtdcRightParamTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRightTemplateIDType是一个模板代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRightTemplateIDType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRightTemplateNameType是一个模板名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcRightTemplateNameType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDataStatusType是一个反洗钱审核表数据状态类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_AMLDS_Normal '0' +///已删除 +#define THOST_FTDC_AMLDS_Deleted '1' + +typedef char TThostFtdcDataStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAMLCheckStatusType是一个审核状态类型 +///////////////////////////////////////////////////////////////////////// +///未复核 +#define THOST_FTDC_AMLCHS_Init '0' +///复核中 +#define THOST_FTDC_AMLCHS_Checking '1' +///已复核 +#define THOST_FTDC_AMLCHS_Checked '2' +///拒绝上报 +#define THOST_FTDC_AMLCHS_RefuseReport '3' + +typedef char TThostFtdcAMLCheckStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAmlDateTypeType是一个日期类型类型 +///////////////////////////////////////////////////////////////////////// +///检查日期 +#define THOST_FTDC_AMLDT_DrawDay '0' +///发生日期 +#define THOST_FTDC_AMLDT_TouchDay '1' + +typedef char TThostFtdcAmlDateTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAmlCheckLevelType是一个审核级别类型 +///////////////////////////////////////////////////////////////////////// +///零级审核 +#define THOST_FTDC_AMLCL_CheckLevel0 '0' +///一级审核 +#define THOST_FTDC_AMLCL_CheckLevel1 '1' +///二级审核 +#define THOST_FTDC_AMLCL_CheckLevel2 '2' +///三级审核 +#define THOST_FTDC_AMLCL_CheckLevel3 '3' + +typedef char TThostFtdcAmlCheckLevelType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAmlCheckFlowType是一个反洗钱数据抽取审核流程类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAmlCheckFlowType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDataTypeType是一个数据类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcDataTypeType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExportFileTypeType是一个导出文件类型类型 +///////////////////////////////////////////////////////////////////////// +///CSV +#define THOST_FTDC_EFT_CSV '0' +///Excel +#define THOST_FTDC_EFT_EXCEL '1' +///DBF +#define THOST_FTDC_EFT_DBF '2' + +typedef char TThostFtdcExportFileTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettleManagerTypeType是一个结算配置类型类型 +///////////////////////////////////////////////////////////////////////// +///结算前准备 +#define THOST_FTDC_SMT_Before '1' +///结算 +#define THOST_FTDC_SMT_Settlement '2' +///结算后核对 +#define THOST_FTDC_SMT_After '3' +///结算后处理 +#define THOST_FTDC_SMT_Settlemented '4' + +typedef char TThostFtdcSettleManagerTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettleManagerIDType是一个结算配置代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSettleManagerIDType[33]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettleManagerNameType是一个结算配置名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSettleManagerNameType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettleManagerLevelType是一个结算配置等级类型 +///////////////////////////////////////////////////////////////////////// +///必要 +#define THOST_FTDC_SML_Must '1' +///警告 +#define THOST_FTDC_SML_Alarm '2' +///提示 +#define THOST_FTDC_SML_Prompt '3' +///不检查 +#define THOST_FTDC_SML_Ignore '4' + +typedef char TThostFtdcSettleManagerLevelType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettleManagerGroupType是一个模块分组类型 +///////////////////////////////////////////////////////////////////////// +///交易所核对 +#define THOST_FTDC_SMG_Exhcange '1' +///内部核对 +#define THOST_FTDC_SMG_ASP '2' +///上报数据核对 +#define THOST_FTDC_SMG_CSRC '3' + +typedef char TThostFtdcSettleManagerGroupType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCheckResultMemoType是一个核对结果说明类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCheckResultMemoType[1025]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFunctionUrlType是一个功能链接类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcFunctionUrlType[1025]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAuthInfoType是一个客户端认证信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAuthInfoType[129]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAuthCodeType是一个客户端认证码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAuthCodeType[17]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLimitUseTypeType是一个保值额度使用类型类型 +///////////////////////////////////////////////////////////////////////// +///可重复使用 +#define THOST_FTDC_LUT_Repeatable '1' +///不可重复使用 +#define THOST_FTDC_LUT_Unrepeatable '2' + +typedef char TThostFtdcLimitUseTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDataResourceType是一个数据来源类型 +///////////////////////////////////////////////////////////////////////// +///本系统 +#define THOST_FTDC_DAR_Settle '1' +///交易所 +#define THOST_FTDC_DAR_Exchange '2' +///报送数据 +#define THOST_FTDC_DAR_CSRC '3' + +typedef char TThostFtdcDataResourceType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMarginTypeType是一个保证金类型类型 +///////////////////////////////////////////////////////////////////////// +///交易所保证金率 +#define THOST_FTDC_MGT_ExchMarginRate '0' +///投资者保证金率 +#define THOST_FTDC_MGT_InstrMarginRate '1' +///投资者交易保证金率 +#define THOST_FTDC_MGT_InstrMarginRateTrade '2' + +typedef char TThostFtdcMarginTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcActiveTypeType是一个生效类型类型 +///////////////////////////////////////////////////////////////////////// +///仅当日生效 +#define THOST_FTDC_ACT_Intraday '1' +///长期生效 +#define THOST_FTDC_ACT_Long '2' + +typedef char TThostFtdcActiveTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMarginRateTypeType是一个冲突保证金率类型类型 +///////////////////////////////////////////////////////////////////////// +///交易所保证金率 +#define THOST_FTDC_MRT_Exchange '1' +///投资者保证金率 +#define THOST_FTDC_MRT_Investor '2' +///投资者交易保证金率 +#define THOST_FTDC_MRT_InvestorTrade '3' + +typedef char TThostFtdcMarginRateTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBackUpStatusType是一个备份数据状态类型 +///////////////////////////////////////////////////////////////////////// +///未生成备份数据 +#define THOST_FTDC_BUS_UnBak '0' +///备份数据生成中 +#define THOST_FTDC_BUS_BakUp '1' +///已生成备份数据 +#define THOST_FTDC_BUS_BakUped '2' +///备份数据失败 +#define THOST_FTDC_BUS_BakFail '3' + +typedef char TThostFtdcBackUpStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInitSettlementType是一个结算初始化状态类型 +///////////////////////////////////////////////////////////////////////// +///结算初始化未开始 +#define THOST_FTDC_SIS_UnInitialize '0' +///结算初始化中 +#define THOST_FTDC_SIS_Initialize '1' +///结算初始化完成 +#define THOST_FTDC_SIS_Initialized '2' + +typedef char TThostFtdcInitSettlementType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReportStatusType是一个报表数据生成状态类型 +///////////////////////////////////////////////////////////////////////// +///未生成报表数据 +#define THOST_FTDC_SRS_NoCreate '0' +///报表数据生成中 +#define THOST_FTDC_SRS_Create '1' +///已生成报表数据 +#define THOST_FTDC_SRS_Created '2' +///生成报表数据失败 +#define THOST_FTDC_SRS_CreateFail '3' + +typedef char TThostFtdcReportStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSaveStatusType是一个数据归档状态类型 +///////////////////////////////////////////////////////////////////////// +///归档未完成 +#define THOST_FTDC_SSS_UnSaveData '0' +///归档完成 +#define THOST_FTDC_SSS_SaveDatad '1' + +typedef char TThostFtdcSaveStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSettArchiveStatusType是一个结算确认数据归档状态类型 +///////////////////////////////////////////////////////////////////////// +///未归档数据 +#define THOST_FTDC_SAS_UnArchived '0' +///数据归档中 +#define THOST_FTDC_SAS_Archiving '1' +///已归档数据 +#define THOST_FTDC_SAS_Archived '2' +///归档数据失败 +#define THOST_FTDC_SAS_ArchiveFail '3' + +typedef char TThostFtdcSettArchiveStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCTPTypeType是一个CTP交易系统类型类型 +///////////////////////////////////////////////////////////////////////// +///未知类型 +#define THOST_FTDC_CTPT_Unkown '0' +///主中心 +#define THOST_FTDC_CTPT_MainCenter '1' +///备中心 +#define THOST_FTDC_CTPT_BackUp '2' + +typedef char TThostFtdcCTPTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcToolIDType是一个工具代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcToolIDType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcToolNameType是一个工具名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcToolNameType[81]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCloseDealTypeType是一个平仓处理类型类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_CDT_Normal '0' +///投机平仓优先 +#define THOST_FTDC_CDT_SpecFirst '1' + +typedef char TThostFtdcCloseDealTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMortgageFundUseRangeType是一个货币质押资金可用范围类型 +///////////////////////////////////////////////////////////////////////// +///不能使用 +#define THOST_FTDC_MFUR_None '0' +///用于保证金 +#define THOST_FTDC_MFUR_Margin '1' +///用于手续费、盈亏、保证金 +#define THOST_FTDC_MFUR_All '2' + +typedef char TThostFtdcMortgageFundUseRangeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCurrencyUnitType是一个币种单位数量类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcCurrencyUnitType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExchangeRateType是一个汇率类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcExchangeRateType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSpecProductTypeType是一个特殊产品类型类型 +///////////////////////////////////////////////////////////////////////// +///郑商所套保产品 +#define THOST_FTDC_SPT_CzceHedge '1' +///货币质押产品 +#define THOST_FTDC_SPT_IneForeignCurrency '2' +///大连短线开平仓产品 +#define THOST_FTDC_SPT_DceOpenClose '3' + +typedef char TThostFtdcSpecProductTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundMortgageTypeType是一个货币质押类型类型 +///////////////////////////////////////////////////////////////////////// +///质押 +#define THOST_FTDC_FMT_Mortgage '1' +///解质 +#define THOST_FTDC_FMT_Redemption '2' + +typedef char TThostFtdcFundMortgageTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAccountSettlementParamIDType是一个投资者账户结算参数代码类型 +///////////////////////////////////////////////////////////////////////// +///基础保证金 +#define THOST_FTDC_ASPI_BaseMargin '1' +///最低权益标准 +#define THOST_FTDC_ASPI_LowestInterest '2' + +typedef char TThostFtdcAccountSettlementParamIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCurrencyNameType是一个币种名称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCurrencyNameType[31]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCurrencySignType是一个币种符号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCurrencySignType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundMortDirectionType是一个货币质押方向类型 +///////////////////////////////////////////////////////////////////////// +///货币质入 +#define THOST_FTDC_FMD_In '1' +///货币质出 +#define THOST_FTDC_FMD_Out '2' + +typedef char TThostFtdcFundMortDirectionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBusinessClassType是一个换汇类别类型 +///////////////////////////////////////////////////////////////////////// +///盈利 +#define THOST_FTDC_BT_Profit '0' +///亏损 +#define THOST_FTDC_BT_Loss '1' +///其他 +#define THOST_FTDC_BT_Other 'Z' + +typedef char TThostFtdcBusinessClassType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSwapSourceTypeType是一个换汇数据来源类型 +///////////////////////////////////////////////////////////////////////// +///手工 +#define THOST_FTDC_SST_Manual '0' +///自动生成 +#define THOST_FTDC_SST_Automatic '1' + +typedef char TThostFtdcSwapSourceTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCurrExDirectionType是一个换汇类型类型 +///////////////////////////////////////////////////////////////////////// +///结汇 +#define THOST_FTDC_CED_Settlement '0' +///售汇 +#define THOST_FTDC_CED_Sale '1' + +typedef char TThostFtdcCurrExDirectionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCurrencySwapStatusType是一个申请状态类型 +///////////////////////////////////////////////////////////////////////// +///已录入 +#define THOST_FTDC_CSS_Entry '1' +///已审核 +#define THOST_FTDC_CSS_Approve '2' +///已拒绝 +#define THOST_FTDC_CSS_Refuse '3' +///已撤销 +#define THOST_FTDC_CSS_Revoke '4' +///已发送 +#define THOST_FTDC_CSS_Send '5' +///换汇成功 +#define THOST_FTDC_CSS_Success '6' +///换汇失败 +#define THOST_FTDC_CSS_Failure '7' + +typedef char TThostFtdcCurrencySwapStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCurrExchCertNoType是一个凭证号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCurrExchCertNoType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBatchSerialNoType是一个批次号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBatchSerialNoType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcReqFlagType是一个换汇发送标志类型 +///////////////////////////////////////////////////////////////////////// +///未发送 +#define THOST_FTDC_REQF_NoSend '0' +///发送成功 +#define THOST_FTDC_REQF_SendSuccess '1' +///发送失败 +#define THOST_FTDC_REQF_SendFailed '2' +///等待重发 +#define THOST_FTDC_REQF_WaitReSend '3' + +typedef char TThostFtdcReqFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcResFlagType是一个换汇返回成功标志类型 +///////////////////////////////////////////////////////////////////////// +///成功 +#define THOST_FTDC_RESF_Success '0' +///账户余额不足 +#define THOST_FTDC_RESF_InsuffiCient '1' +///交易结果未知 +#define THOST_FTDC_RESF_UnKnown '8' + +typedef char TThostFtdcResFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPageControlType是一个换汇页面控制类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPageControlType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcRecordCountType是一个记录数类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcRecordCountType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCurrencySwapMemoType是一个换汇需确认信息类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCurrencySwapMemoType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExStatusType是一个修改状态类型 +///////////////////////////////////////////////////////////////////////// +///修改前 +#define THOST_FTDC_EXS_Before '0' +///修改后 +#define THOST_FTDC_EXS_After '1' + +typedef char TThostFtdcExStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClientRegionType是一个开户客户地域类型 +///////////////////////////////////////////////////////////////////////// +///国内客户 +#define THOST_FTDC_CR_Domestic '1' +///港澳台客户 +#define THOST_FTDC_CR_GMT '2' +///国外客户 +#define THOST_FTDC_CR_Foreign '3' + +typedef char TThostFtdcClientRegionType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcWorkPlaceType是一个工作单位类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcWorkPlaceType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBusinessPeriodType是一个经营期限类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBusinessPeriodType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcWebSiteType是一个网址类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcWebSiteType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOAIdCardTypeType是一个统一开户证件类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUOAIdCardTypeType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcClientModeType是一个开户模式类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcClientModeType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestorFullNameType是一个投资者全称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInvestorFullNameType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOABrokerIDType是一个境外中介机构ID类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUOABrokerIDType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOAZipCodeType是一个邮政编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUOAZipCodeType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOAEMailType是一个电子邮箱类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUOAEMailType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOldCityType是一个城市类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcOldCityType[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCorporateIdentifiedCardNoType是一个法人代表证件号码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCorporateIdentifiedCardNoType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcHasBoardType是一个是否有董事会类型 +///////////////////////////////////////////////////////////////////////// +///没有 +#define THOST_FTDC_HB_No '0' +///有 +#define THOST_FTDC_HB_Yes '1' + +typedef char TThostFtdcHasBoardType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcStartModeType是一个启动模式类型 +///////////////////////////////////////////////////////////////////////// +///正常 +#define THOST_FTDC_SM_Normal '1' +///应急 +#define THOST_FTDC_SM_Emerge '2' +///恢复 +#define THOST_FTDC_SM_Restore '3' + +typedef char TThostFtdcStartModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTemplateTypeType是一个模型类型类型 +///////////////////////////////////////////////////////////////////////// +///全量 +#define THOST_FTDC_TPT_Full '1' +///增量 +#define THOST_FTDC_TPT_Increment '2' +///备份 +#define THOST_FTDC_TPT_BackUp '3' + +typedef char TThostFtdcTemplateTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLoginModeType是一个登录模式类型 +///////////////////////////////////////////////////////////////////////// +///交易 +#define THOST_FTDC_LM_Trade '0' +///转账 +#define THOST_FTDC_LM_Transfer '1' + +typedef char TThostFtdcLoginModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPromptTypeType是一个日历提示类型类型 +///////////////////////////////////////////////////////////////////////// +///合约上下市 +#define THOST_FTDC_CPT_Instrument '1' +///保证金分段生效 +#define THOST_FTDC_CPT_Margin '2' + +typedef char TThostFtdcPromptTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLedgerManageIDType是一个分户管理资产编码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcLedgerManageIDType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInvestVarietyType是一个投资品种类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInvestVarietyType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBankAccountTypeType是一个账户类别类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcBankAccountTypeType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLedgerManageBankType是一个开户银行类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcLedgerManageBankType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCffexDepartmentNameType是一个开户营业部类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCffexDepartmentNameType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCffexDepartmentCodeType是一个营业部代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCffexDepartmentCodeType[9]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcHasTrusteeType是一个是否有托管人类型 +///////////////////////////////////////////////////////////////////////// +///有 +#define THOST_FTDC_HT_Yes '1' +///没有 +#define THOST_FTDC_HT_No '0' + +typedef char TThostFtdcHasTrusteeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCMemo1Type是一个说明类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCMemo1Type[41]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAssetmgrCFullNameType是一个代理资产管理业务的期货公司全称类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAssetmgrCFullNameType[101]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAssetmgrApprovalNOType是一个资产管理业务批文号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAssetmgrApprovalNOType[51]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAssetmgrMgrNameType是一个资产管理业务负责人姓名类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAssetmgrMgrNameType[401]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAmTypeType是一个机构类型类型 +///////////////////////////////////////////////////////////////////////// +///银行 +#define THOST_FTDC_AMT_Bank '1' +///证券公司 +#define THOST_FTDC_AMT_Securities '2' +///基金公司 +#define THOST_FTDC_AMT_Fund '3' +///保险公司 +#define THOST_FTDC_AMT_Insurance '4' +///信托公司 +#define THOST_FTDC_AMT_Trust '5' +///其他 +#define THOST_FTDC_AMT_Other '9' + +typedef char TThostFtdcAmTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCAmTypeType是一个机构类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCAmTypeType[5]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCFundIOTypeType是一个出入金类型类型 +///////////////////////////////////////////////////////////////////////// +///出入金 +#define THOST_FTDC_CFIOT_FundIO '0' +///银期换汇 +#define THOST_FTDC_CFIOT_SwapCurrency '1' + +typedef char TThostFtdcCSRCFundIOTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCusAccountTypeType是一个结算账户类型类型 +///////////////////////////////////////////////////////////////////////// +///期货结算账户 +#define THOST_FTDC_CAT_Futures '1' +///纯期货资管业务下的资管结算账户 +#define THOST_FTDC_CAT_AssetmgrFuture '2' +///综合类资管业务下的期货资管托管账户 +#define THOST_FTDC_CAT_AssetmgrTrustee '3' +///综合类资管业务下的资金中转账户 +#define THOST_FTDC_CAT_AssetmgrTransfer '4' + +typedef char TThostFtdcCusAccountTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCNationalType是一个国籍类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCNationalType[4]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCSRCSecAgentIDType是一个二级代理ID类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCSRCSecAgentIDType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcLanguageTypeType是一个通知语言类型类型 +///////////////////////////////////////////////////////////////////////// +///中文 +#define THOST_FTDC_LT_Chinese '1' +///英文 +#define THOST_FTDC_LT_English '2' + +typedef char TThostFtdcLanguageTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAmAccountType是一个投资账户类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcAmAccountType[23]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAssetmgrClientTypeType是一个资产管理客户类型类型 +///////////////////////////////////////////////////////////////////////// +///个人资管客户 +#define THOST_FTDC_AMCT_Person '1' +///单位资管客户 +#define THOST_FTDC_AMCT_Organ '2' +///特殊单位资管客户 +#define THOST_FTDC_AMCT_SpecialOrgan '4' + +typedef char TThostFtdcAssetmgrClientTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcAssetmgrTypeType是一个投资类型类型 +///////////////////////////////////////////////////////////////////////// +///期货类 +#define THOST_FTDC_ASST_Futures '3' +///综合类 +#define THOST_FTDC_ASST_SpecialOrgan '4' + +typedef char TThostFtdcAssetmgrTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOMType是一个计量单位类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcUOMType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSHFEInstLifePhaseType是一个上期所合约生命周期状态类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSHFEInstLifePhaseType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSHFEProductClassType是一个产品类型类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSHFEProductClassType[11]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcPriceDecimalType是一个价格小数位类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcPriceDecimalType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcInTheMoneyFlagType是一个平值期权标志类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcInTheMoneyFlagType[2]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCheckInstrTypeType是一个合约比较类型类型 +///////////////////////////////////////////////////////////////////////// +///合约交易所不存在 +#define THOST_FTDC_CIT_HasExch '0' +///合约本系统不存在 +#define THOST_FTDC_CIT_HasATP '1' +///合约比较不一致 +#define THOST_FTDC_CIT_HasDiff '2' + +typedef char TThostFtdcCheckInstrTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDeliveryTypeType是一个交割类型类型 +///////////////////////////////////////////////////////////////////////// +///手工交割 +#define THOST_FTDC_DT_HandDeliv '1' +///到期交割 +#define THOST_FTDC_DT_PersonDeliv '2' + +typedef char TThostFtdcDeliveryTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBigMoneyType是一个资金类型 +///////////////////////////////////////////////////////////////////////// +typedef double TThostFtdcBigMoneyType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcMaxMarginSideAlgorithmType是一个大额单边保证金算法类型 +///////////////////////////////////////////////////////////////////////// +///不使用大额单边保证金算法 +#define THOST_FTDC_MMSA_NO '0' +///使用大额单边保证金算法 +#define THOST_FTDC_MMSA_YES '1' + +typedef char TThostFtdcMaxMarginSideAlgorithmType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDAClientTypeType是一个资产管理客户类型类型 +///////////////////////////////////////////////////////////////////////// +///自然人 +#define THOST_FTDC_CACT_Person '0' +///法人 +#define THOST_FTDC_CACT_Company '1' +///其他 +#define THOST_FTDC_CACT_Other '2' + +typedef char TThostFtdcDAClientTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCombinInstrIDType是一个套利合约代码类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCombinInstrIDType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCombinSettlePriceType是一个各腿结算价类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcCombinSettlePriceType[61]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDCEPriorityType是一个优先级类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcDCEPriorityType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcTradeGroupIDType是一个成交组号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcTradeGroupIDType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcIsCheckPrepaType是一个是否校验开户可用资金类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcIsCheckPrepaType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcUOAAssetmgrTypeType是一个投资类型类型 +///////////////////////////////////////////////////////////////////////// +///期货类 +#define THOST_FTDC_UOAAT_Futures '1' +///综合类 +#define THOST_FTDC_UOAAT_SpecialOrgan '2' + +typedef char TThostFtdcUOAAssetmgrTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDirectionEnType是一个买卖方向类型 +///////////////////////////////////////////////////////////////////////// +///Buy +#define THOST_FTDC_DEN_Buy '0' +///Sell +#define THOST_FTDC_DEN_Sell '1' + +typedef char TThostFtdcDirectionEnType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOffsetFlagEnType是一个开平标志类型 +///////////////////////////////////////////////////////////////////////// +///Position Opening +#define THOST_FTDC_OFEN_Open '0' +///Position Close +#define THOST_FTDC_OFEN_Close '1' +///Forced Liquidation +#define THOST_FTDC_OFEN_ForceClose '2' +///Close Today +#define THOST_FTDC_OFEN_CloseToday '3' +///Close Prev. +#define THOST_FTDC_OFEN_CloseYesterday '4' +///Forced Reduction +#define THOST_FTDC_OFEN_ForceOff '5' +///Local Forced Liquidation +#define THOST_FTDC_OFEN_LocalForceClose '6' + +typedef char TThostFtdcOffsetFlagEnType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcHedgeFlagEnType是一个投机套保标志类型 +///////////////////////////////////////////////////////////////////////// +///Speculation +#define THOST_FTDC_HFEN_Speculation '1' +///Arbitrage +#define THOST_FTDC_HFEN_Arbitrage '2' +///Hedge +#define THOST_FTDC_HFEN_Hedge '3' + +typedef char TThostFtdcHedgeFlagEnType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundIOTypeEnType是一个出入金类型类型 +///////////////////////////////////////////////////////////////////////// +///Deposit/Withdrawal +#define THOST_FTDC_FIOTEN_FundIO '1' +///Bank-Futures Transfer +#define THOST_FTDC_FIOTEN_Transfer '2' +///Bank-Futures FX Exchange +#define THOST_FTDC_FIOTEN_SwapCurrency '3' + +typedef char TThostFtdcFundIOTypeEnType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundTypeEnType是一个资金类型类型 +///////////////////////////////////////////////////////////////////////// +///Bank Deposit +#define THOST_FTDC_FTEN_Deposite '1' +///Payment/Fee +#define THOST_FTDC_FTEN_ItemFund '2' +///Brokerage Adj +#define THOST_FTDC_FTEN_Company '3' +///Internal Transfer +#define THOST_FTDC_FTEN_InnerTransfer '4' + +typedef char TThostFtdcFundTypeEnType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundDirectionEnType是一个出入金方向类型 +///////////////////////////////////////////////////////////////////////// +///Deposit +#define THOST_FTDC_FDEN_In '1' +///Withdrawal +#define THOST_FTDC_FDEN_Out '2' + +typedef char TThostFtdcFundDirectionEnType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcFundMortDirectionEnType是一个货币质押方向类型 +///////////////////////////////////////////////////////////////////////// +///Pledge +#define THOST_FTDC_FMDEN_In '1' +///Redemption +#define THOST_FTDC_FMDEN_Out '2' + +typedef char TThostFtdcFundMortDirectionEnType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSwapBusinessTypeType是一个换汇业务种类类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcSwapBusinessTypeType[3]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOptionsTypeType是一个期权类型类型 +///////////////////////////////////////////////////////////////////////// +///看涨 +#define THOST_FTDC_CP_CallOptions '1' +///看跌 +#define THOST_FTDC_CP_PutOptions '2' + +typedef char TThostFtdcOptionsTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcStrikeModeType是一个执行方式类型 +///////////////////////////////////////////////////////////////////////// +///欧式 +#define THOST_FTDC_STM_Continental '0' +///美式 +#define THOST_FTDC_STM_American '1' +///百慕大 +#define THOST_FTDC_STM_Bermuda '2' + +typedef char TThostFtdcStrikeModeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcStrikeTypeType是一个执行类型类型 +///////////////////////////////////////////////////////////////////////// +///自身对冲 +#define THOST_FTDC_STT_Hedge '0' +///匹配执行 +#define THOST_FTDC_STT_Match '1' + +typedef char TThostFtdcStrikeTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcApplyTypeType是一个中金所期权放弃执行申请类型类型 +///////////////////////////////////////////////////////////////////////// +///不执行数量 +#define THOST_FTDC_APPT_NotStrikeNum '4' + +typedef char TThostFtdcApplyTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcGiveUpDataSourceType是一个放弃执行申请数据来源类型 +///////////////////////////////////////////////////////////////////////// +///系统生成 +#define THOST_FTDC_GUDS_Gen '0' +///手工添加 +#define THOST_FTDC_GUDS_Hand '1' + +typedef char TThostFtdcGiveUpDataSourceType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExecOrderSysIDType是一个执行宣告系统编号类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcExecOrderSysIDType[21]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExecResultType是一个执行结果类型 +///////////////////////////////////////////////////////////////////////// +///没有执行 +#define THOST_FTDC_OER_NoExec 'n' +///已经取消 +#define THOST_FTDC_OER_Canceled 'c' +///执行成功 +#define THOST_FTDC_OER_OK '0' +///期权持仓不够 +#define THOST_FTDC_OER_NoPosition '1' +///资金不够 +#define THOST_FTDC_OER_NoDeposit '2' +///会员不存在 +#define THOST_FTDC_OER_NoParticipant '3' +///客户不存在 +#define THOST_FTDC_OER_NoClient '4' +///合约不存在 +#define THOST_FTDC_OER_NoInstrument '6' +///没有执行权限 +#define THOST_FTDC_OER_NoRight '7' +///不合理的数量 +#define THOST_FTDC_OER_InvalidVolume '8' +///没有足够的历史成交 +#define THOST_FTDC_OER_NoEnoughHistoryTrade '9' +///未知 +#define THOST_FTDC_OER_Unknown 'a' + +typedef char TThostFtdcExecResultType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcStrikeSequenceType是一个执行序号类型 +///////////////////////////////////////////////////////////////////////// +typedef int TThostFtdcStrikeSequenceType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcStrikeTimeType是一个执行时间类型 +///////////////////////////////////////////////////////////////////////// +typedef char TThostFtdcStrikeTimeType[13]; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCombinationTypeType是一个组合类型类型 +///////////////////////////////////////////////////////////////////////// +///期货组合 +#define THOST_FTDC_COMBT_Future '0' +///垂直价差BUL +#define THOST_FTDC_COMBT_BUL '1' +///垂直价差BER +#define THOST_FTDC_COMBT_BER '2' +///跨式组合 +#define THOST_FTDC_COMBT_STD '3' +///宽跨式组合 +#define THOST_FTDC_COMBT_STG '4' +///备兑组合 +#define THOST_FTDC_COMBT_PRT '5' + +typedef char TThostFtdcCombinationTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcOptionRoyaltyPriceTypeType是一个期权权利金价格类型类型 +///////////////////////////////////////////////////////////////////////// +///昨结算价 +#define THOST_FTDC_ORPT_PreSettlementPrice '1' +///开仓价 +#define THOST_FTDC_ORPT_OpenPrice '4' + +typedef char TThostFtdcOptionRoyaltyPriceTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcBalanceAlgorithmType是一个权益算法类型 +///////////////////////////////////////////////////////////////////////// +///不计算期权市值盈亏 +#define THOST_FTDC_BLAG_Default '1' +///计算期权市值亏损 +#define THOST_FTDC_BLAG_IncludeOptValLost '2' + +typedef char TThostFtdcBalanceAlgorithmType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcActionTypeType是一个执行类型类型 +///////////////////////////////////////////////////////////////////////// +///执行 +#define THOST_FTDC_ACTP_Exec '1' +///放弃 +#define THOST_FTDC_ACTP_Abandon '2' + +typedef char TThostFtdcActionTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcForQuoteStatusType是一个询价状态类型 +///////////////////////////////////////////////////////////////////////// +///已经提交 +#define THOST_FTDC_FQST_Submitted 'a' +///已经接受 +#define THOST_FTDC_FQST_Accepted 'b' +///已经被拒绝 +#define THOST_FTDC_FQST_Rejected 'c' + +typedef char TThostFtdcForQuoteStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcQuotStatusType是一个报价状态类型 +///////////////////////////////////////////////////////////////////////// +///未知 +#define THOST_FTDC_QTST_Unknown 'a' +///已经接受 +#define THOST_FTDC_QTST_Accepted 'b' +///已经撤销 +#define THOST_FTDC_QTST_Canceled 'c' + +typedef char TThostFtdcQuotStatusType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcValueMethodType是一个取值方式类型 +///////////////////////////////////////////////////////////////////////// +///按绝对值 +#define THOST_FTDC_VM_Absolute '0' +///按比率 +#define THOST_FTDC_VM_Ratio '1' + +typedef char TThostFtdcValueMethodType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExecOrderPositionFlagType是一个期权行权后是否保留期货头寸的标记类型 +///////////////////////////////////////////////////////////////////////// +///保留 +#define THOST_FTDC_EOPF_Reserve '0' +///不保留 +#define THOST_FTDC_EOPF_UnReserve '1' + +typedef char TThostFtdcExecOrderPositionFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcExecOrderCloseFlagType是一个期权行权后生成的头寸是否自动平仓类型 +///////////////////////////////////////////////////////////////////////// +///自动平仓 +#define THOST_FTDC_EOCF_AutoClose '0' +///免于自动平仓 +#define THOST_FTDC_EOCF_NotToClose '1' + +typedef char TThostFtdcExecOrderCloseFlagType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcProductTypeType是一个产品类型类型 +///////////////////////////////////////////////////////////////////////// +///期货 +#define THOST_FTDC_PTE_Futures '1' +///期权 +#define THOST_FTDC_PTE_Options '2' + +typedef char TThostFtdcProductTypeType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCZCEUploadFileNameType是一个郑商所结算文件名类型 +///////////////////////////////////////////////////////////////////////// +///^\d{8}_zz_\d{4} +#define THOST_FTDC_CUFN_CUFN_O 'O' +///^\d{8}成交表 +#define THOST_FTDC_CUFN_CUFN_T 'T' +///^\d{8}单腿持仓表new +#define THOST_FTDC_CUFN_CUFN_P 'P' +///^\d{8}非平仓了结表 +#define THOST_FTDC_CUFN_CUFN_N 'N' +///^\d{8}平仓表 +#define THOST_FTDC_CUFN_CUFN_L 'L' +///^\d{8}资金表 +#define THOST_FTDC_CUFN_CUFN_F 'F' +///^\d{8}组合持仓表 +#define THOST_FTDC_CUFN_CUFN_C 'C' +///^\d{8}保证金参数表 +#define THOST_FTDC_CUFN_CUFN_M 'M' + +typedef char TThostFtdcCZCEUploadFileNameType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcDCEUploadFileNameType是一个大商所结算文件名类型 +///////////////////////////////////////////////////////////////////////// +///^\d{8}_dl_\d{3} +#define THOST_FTDC_DUFN_DUFN_O 'O' +///^\d{8}_成交表 +#define THOST_FTDC_DUFN_DUFN_T 'T' +///^\d{8}_持仓表 +#define THOST_FTDC_DUFN_DUFN_P 'P' +///^\d{8}_资金结算表 +#define THOST_FTDC_DUFN_DUFN_F 'F' +///^\d{8}_优惠组合持仓明细表 +#define THOST_FTDC_DUFN_DUFN_C 'C' +///^\d{8}_持仓明细表 +#define THOST_FTDC_DUFN_DUFN_D 'D' +///^\d{8}_保证金参数表 +#define THOST_FTDC_DUFN_DUFN_M 'M' +///^\d{8}_期权执行表 +#define THOST_FTDC_DUFN_DUFN_S 'S' + +typedef char TThostFtdcDCEUploadFileNameType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcSHFEUploadFileNameType是一个上期所结算文件名类型 +///////////////////////////////////////////////////////////////////////// +///^\d{4}_\d{8}_\d{8}_DailyFundChg +#define THOST_FTDC_SUFN_SUFN_O 'O' +///^\d{4}_\d{8}_\d{8}_Trade +#define THOST_FTDC_SUFN_SUFN_T 'T' +///^\d{4}_\d{8}_\d{8}_SettlementDetail +#define THOST_FTDC_SUFN_SUFN_P 'P' +///^\d{4}_\d{8}_\d{8}_Capital +#define THOST_FTDC_SUFN_SUFN_F 'F' + +typedef char TThostFtdcSHFEUploadFileNameType; + +///////////////////////////////////////////////////////////////////////// +///TFtdcCFFEXUploadFileNameType是一个中金所结算文件名类型 +///////////////////////////////////////////////////////////////////////// +///^\d{4}_SG\d{1}_\d{8}_\d{1}_Trade +#define THOST_FTDC_CFUFN_SUFN_T 'T' +///^\d{4}_SG\d{1}_\d{8}_\d{1}_SettlementDetail +#define THOST_FTDC_CFUFN_SUFN_P 'P' +///^\d{4}_SG\d{1}_\d{8}_\d{1}_Capital +#define THOST_FTDC_CFUFN_SUFN_F 'F' +///^\d{4}_SG\d{1}_\d{8}_\d{1}_OptionExec +#define THOST_FTDC_CFUFN_SUFN_S 'S' + +typedef char TThostFtdcCFFEXUploadFileNameType; + +#endif diff --git a/vn.ctp/pyscript/ThostFtdcUserApiStruct.h b/vn.ctp/pyscript/ThostFtdcUserApiStruct.h new file mode 100644 index 00000000..ada148c8 --- /dev/null +++ b/vn.ctp/pyscript/ThostFtdcUserApiStruct.h @@ -0,0 +1,7430 @@ +///////////////////////////////////////////////////////////////////////// +///@system 新一代交易所系统 +///@company 上海期货信息技术有限公司 +///@file ThostFtdcUserApiStruct.h +///@brief 定义了客户端接口使用的业务数据结构 +///@history +///20060106 赵鸿昊 创建该文件 +///////////////////////////////////////////////////////////////////////// + +#if !defined(THOST_FTDCSTRUCT_H) +#define THOST_FTDCSTRUCT_H + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#include "ThostFtdcUserApiDataType.h" + +///信息分发 +struct CThostFtdcDisseminationField +{ + ///序列系列号 + TThostFtdcSequenceSeriesType SequenceSeries; + ///序列号 + TThostFtdcSequenceNoType SequenceNo; +}; + +///用户登录请求 +struct CThostFtdcReqUserLoginField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///密码 + TThostFtdcPasswordType Password; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; + ///接口端产品信息 + TThostFtdcProductInfoType InterfaceProductInfo; + ///协议信息 + TThostFtdcProtocolInfoType ProtocolInfo; + ///Mac地址 + TThostFtdcMacAddressType MacAddress; + ///动态密码 + TThostFtdcPasswordType OneTimePassword; + ///终端IP地址 + TThostFtdcIPAddressType ClientIPAddress; +}; + +///用户登录应答 +struct CThostFtdcRspUserLoginField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///登录成功时间 + TThostFtdcTimeType LoginTime; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///交易系统名称 + TThostFtdcSystemNameType SystemName; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///最大报单引用 + TThostFtdcOrderRefType MaxOrderRef; + ///上期所时间 + TThostFtdcTimeType SHFETime; + ///大商所时间 + TThostFtdcTimeType DCETime; + ///郑商所时间 + TThostFtdcTimeType CZCETime; + ///中金所时间 + TThostFtdcTimeType FFEXTime; + ///能源中心时间 + TThostFtdcTimeType INETime; +}; + +///用户登出请求 +struct CThostFtdcUserLogoutField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///强制交易员退出 +struct CThostFtdcForceUserLogoutField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///客户端认证请求 +struct CThostFtdcReqAuthenticateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; + ///认证码 + TThostFtdcAuthCodeType AuthCode; +}; + +///客户端认证响应 +struct CThostFtdcRspAuthenticateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; +}; + +///客户端认证信息 +struct CThostFtdcAuthenticationInfoField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; + ///认证信息 + TThostFtdcAuthInfoType AuthInfo; + ///是否为认证结果 + TThostFtdcBoolType IsResult; +}; + +///银期转帐报文头 +struct CThostFtdcTransferHeaderField +{ + ///版本号,常量,1.0 + TThostFtdcVersionType Version; + ///交易代码,必填 + TThostFtdcTradeCodeType TradeCode; + ///交易日期,必填,格式:yyyymmdd + TThostFtdcTradeDateType TradeDate; + ///交易时间,必填,格式:hhmmss + TThostFtdcTradeTimeType TradeTime; + ///发起方流水号,N/A + TThostFtdcTradeSerialType TradeSerial; + ///期货公司代码,必填 + TThostFtdcFutureIDType FutureID; + ///银行代码,根据查询银行得到,必填 + TThostFtdcBankIDType BankID; + ///银行分中心代码,根据查询银行得到,必填 + TThostFtdcBankBrchIDType BankBrchID; + ///操作员,N/A + TThostFtdcOperNoType OperNo; + ///交易设备类型,N/A + TThostFtdcDeviceIDType DeviceID; + ///记录数,N/A + TThostFtdcRecordNumType RecordNum; + ///会话编号,N/A + TThostFtdcSessionIDType SessionID; + ///请求编号,N/A + TThostFtdcRequestIDType RequestID; +}; + +///银行资金转期货请求,TradeCode=202001 +struct CThostFtdcTransferBankToFutureReqField +{ + ///期货资金账户 + TThostFtdcAccountIDType FutureAccount; + ///密码标志 + TThostFtdcFuturePwdFlagType FuturePwdFlag; + ///密码 + TThostFtdcFutureAccPwdType FutureAccPwd; + ///转账金额 + TThostFtdcMoneyType TradeAmt; + ///客户手续费 + TThostFtdcMoneyType CustFee; + ///币种:RMB-人民币 USD-美圆 HKD-港元 + TThostFtdcCurrencyCodeType CurrencyCode; +}; + +///银行资金转期货请求响应 +struct CThostFtdcTransferBankToFutureRspField +{ + ///响应代码 + TThostFtdcRetCodeType RetCode; + ///响应信息 + TThostFtdcRetInfoType RetInfo; + ///资金账户 + TThostFtdcAccountIDType FutureAccount; + ///转帐金额 + TThostFtdcMoneyType TradeAmt; + ///应收客户手续费 + TThostFtdcMoneyType CustFee; + ///币种 + TThostFtdcCurrencyCodeType CurrencyCode; +}; + +///期货资金转银行请求,TradeCode=202002 +struct CThostFtdcTransferFutureToBankReqField +{ + ///期货资金账户 + TThostFtdcAccountIDType FutureAccount; + ///密码标志 + TThostFtdcFuturePwdFlagType FuturePwdFlag; + ///密码 + TThostFtdcFutureAccPwdType FutureAccPwd; + ///转账金额 + TThostFtdcMoneyType TradeAmt; + ///客户手续费 + TThostFtdcMoneyType CustFee; + ///币种:RMB-人民币 USD-美圆 HKD-港元 + TThostFtdcCurrencyCodeType CurrencyCode; +}; + +///期货资金转银行请求响应 +struct CThostFtdcTransferFutureToBankRspField +{ + ///响应代码 + TThostFtdcRetCodeType RetCode; + ///响应信息 + TThostFtdcRetInfoType RetInfo; + ///资金账户 + TThostFtdcAccountIDType FutureAccount; + ///转帐金额 + TThostFtdcMoneyType TradeAmt; + ///应收客户手续费 + TThostFtdcMoneyType CustFee; + ///币种 + TThostFtdcCurrencyCodeType CurrencyCode; +}; + +///查询银行资金请求,TradeCode=204002 +struct CThostFtdcTransferQryBankReqField +{ + ///期货资金账户 + TThostFtdcAccountIDType FutureAccount; + ///密码标志 + TThostFtdcFuturePwdFlagType FuturePwdFlag; + ///密码 + TThostFtdcFutureAccPwdType FutureAccPwd; + ///币种:RMB-人民币 USD-美圆 HKD-港元 + TThostFtdcCurrencyCodeType CurrencyCode; +}; + +///查询银行资金请求响应 +struct CThostFtdcTransferQryBankRspField +{ + ///响应代码 + TThostFtdcRetCodeType RetCode; + ///响应信息 + TThostFtdcRetInfoType RetInfo; + ///资金账户 + TThostFtdcAccountIDType FutureAccount; + ///银行余额 + TThostFtdcMoneyType TradeAmt; + ///银行可用余额 + TThostFtdcMoneyType UseAmt; + ///银行可取余额 + TThostFtdcMoneyType FetchAmt; + ///币种 + TThostFtdcCurrencyCodeType CurrencyCode; +}; + +///查询银行交易明细请求,TradeCode=204999 +struct CThostFtdcTransferQryDetailReqField +{ + ///期货资金账户 + TThostFtdcAccountIDType FutureAccount; +}; + +///查询银行交易明细请求响应 +struct CThostFtdcTransferQryDetailRspField +{ + ///交易日期 + TThostFtdcDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///交易代码 + TThostFtdcTradeCodeType TradeCode; + ///期货流水号 + TThostFtdcTradeSerialNoType FutureSerial; + ///期货公司代码 + TThostFtdcFutureIDType FutureID; + ///资金帐号 + TThostFtdcFutureAccountType FutureAccount; + ///银行流水号 + TThostFtdcTradeSerialNoType BankSerial; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分中心代码 + TThostFtdcBankBrchIDType BankBrchID; + ///银行账号 + TThostFtdcBankAccountType BankAccount; + ///证件号码 + TThostFtdcCertCodeType CertCode; + ///货币代码 + TThostFtdcCurrencyCodeType CurrencyCode; + ///发生金额 + TThostFtdcMoneyType TxAmount; + ///有效标志 + TThostFtdcTransferValidFlagType Flag; +}; + +///响应信息 +struct CThostFtdcRspInfoField +{ + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///交易所 +struct CThostFtdcExchangeField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所名称 + TThostFtdcExchangeNameType ExchangeName; + ///交易所属性 + TThostFtdcExchangePropertyType ExchangeProperty; +}; + +///产品 +struct CThostFtdcProductField +{ + ///产品代码 + TThostFtdcInstrumentIDType ProductID; + ///产品名称 + TThostFtdcProductNameType ProductName; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///产品类型 + TThostFtdcProductClassType ProductClass; + ///合约数量乘数 + TThostFtdcVolumeMultipleType VolumeMultiple; + ///最小变动价位 + TThostFtdcPriceType PriceTick; + ///市价单最大下单量 + TThostFtdcVolumeType MaxMarketOrderVolume; + ///市价单最小下单量 + TThostFtdcVolumeType MinMarketOrderVolume; + ///限价单最大下单量 + TThostFtdcVolumeType MaxLimitOrderVolume; + ///限价单最小下单量 + TThostFtdcVolumeType MinLimitOrderVolume; + ///持仓类型 + TThostFtdcPositionTypeType PositionType; + ///持仓日期类型 + TThostFtdcPositionDateTypeType PositionDateType; + ///平仓处理类型 + TThostFtdcCloseDealTypeType CloseDealType; + ///交易币种类型 + TThostFtdcCurrencyIDType TradeCurrencyID; + ///质押资金可用范围 + TThostFtdcMortgageFundUseRangeType MortgageFundUseRange; + ///交易所产品代码 + TThostFtdcInstrumentIDType ExchangeProductID; + ///合约基础商品乘数 + TThostFtdcUnderlyingMultipleType UnderlyingMultiple; +}; + +///合约 +struct CThostFtdcInstrumentField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约名称 + TThostFtdcInstrumentNameType InstrumentName; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///产品代码 + TThostFtdcInstrumentIDType ProductID; + ///产品类型 + TThostFtdcProductClassType ProductClass; + ///交割年份 + TThostFtdcYearType DeliveryYear; + ///交割月 + TThostFtdcMonthType DeliveryMonth; + ///市价单最大下单量 + TThostFtdcVolumeType MaxMarketOrderVolume; + ///市价单最小下单量 + TThostFtdcVolumeType MinMarketOrderVolume; + ///限价单最大下单量 + TThostFtdcVolumeType MaxLimitOrderVolume; + ///限价单最小下单量 + TThostFtdcVolumeType MinLimitOrderVolume; + ///合约数量乘数 + TThostFtdcVolumeMultipleType VolumeMultiple; + ///最小变动价位 + TThostFtdcPriceType PriceTick; + ///创建日 + TThostFtdcDateType CreateDate; + ///上市日 + TThostFtdcDateType OpenDate; + ///到期日 + TThostFtdcDateType ExpireDate; + ///开始交割日 + TThostFtdcDateType StartDelivDate; + ///结束交割日 + TThostFtdcDateType EndDelivDate; + ///合约生命周期状态 + TThostFtdcInstLifePhaseType InstLifePhase; + ///当前是否交易 + TThostFtdcBoolType IsTrading; + ///持仓类型 + TThostFtdcPositionTypeType PositionType; + ///持仓日期类型 + TThostFtdcPositionDateTypeType PositionDateType; + ///多头保证金率 + TThostFtdcRatioType LongMarginRatio; + ///空头保证金率 + TThostFtdcRatioType ShortMarginRatio; + ///是否使用大额单边保证金算法 + TThostFtdcMaxMarginSideAlgorithmType MaxMarginSideAlgorithm; + ///基础商品代码 + TThostFtdcInstrumentIDType UnderlyingInstrID; + ///执行价 + TThostFtdcPriceType StrikePrice; + ///期权类型 + TThostFtdcOptionsTypeType OptionsType; + ///合约基础商品乘数 + TThostFtdcUnderlyingMultipleType UnderlyingMultiple; + ///组合类型 + TThostFtdcCombinationTypeType CombinationType; +}; + +///经纪公司 +struct CThostFtdcBrokerField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///经纪公司简称 + TThostFtdcBrokerAbbrType BrokerAbbr; + ///经纪公司名称 + TThostFtdcBrokerNameType BrokerName; + ///是否活跃 + TThostFtdcBoolType IsActive; +}; + +///交易所交易员 +struct CThostFtdcTraderField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///密码 + TThostFtdcPasswordType Password; + ///安装数量 + TThostFtdcInstallCountType InstallCount; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; +}; + +///投资者 +struct CThostFtdcInvestorField +{ + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者分组代码 + TThostFtdcInvestorIDType InvestorGroupID; + ///投资者名称 + TThostFtdcPartyNameType InvestorName; + ///证件类型 + TThostFtdcIdCardTypeType IdentifiedCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///是否活跃 + TThostFtdcBoolType IsActive; + ///联系电话 + TThostFtdcTelephoneType Telephone; + ///通讯地址 + TThostFtdcAddressType Address; + ///开户日期 + TThostFtdcDateType OpenDate; + ///手机 + TThostFtdcMobileType Mobile; + ///手续费率模板代码 + TThostFtdcInvestorIDType CommModelID; + ///保证金率模板代码 + TThostFtdcInvestorIDType MarginModelID; +}; + +///交易编码 +struct CThostFtdcTradingCodeField +{ + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///是否活跃 + TThostFtdcBoolType IsActive; + ///交易编码类型 + TThostFtdcClientIDTypeType ClientIDType; +}; + +///会员编码和经纪公司编码对照表 +struct CThostFtdcPartBrokerField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///是否活跃 + TThostFtdcBoolType IsActive; +}; + +///管理用户 +struct CThostFtdcSuperUserField +{ + ///用户代码 + TThostFtdcUserIDType UserID; + ///用户名称 + TThostFtdcUserNameType UserName; + ///密码 + TThostFtdcPasswordType Password; + ///是否活跃 + TThostFtdcBoolType IsActive; +}; + +///管理用户功能权限 +struct CThostFtdcSuperUserFunctionField +{ + ///用户代码 + TThostFtdcUserIDType UserID; + ///功能代码 + TThostFtdcFunctionCodeType FunctionCode; +}; + +///投资者组 +struct CThostFtdcInvestorGroupField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者分组代码 + TThostFtdcInvestorIDType InvestorGroupID; + ///投资者分组名称 + TThostFtdcInvestorGroupNameType InvestorGroupName; +}; + +///资金账户 +struct CThostFtdcTradingAccountField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///上次质押金额 + TThostFtdcMoneyType PreMortgage; + ///上次信用额度 + TThostFtdcMoneyType PreCredit; + ///上次存款额 + TThostFtdcMoneyType PreDeposit; + ///上次结算准备金 + TThostFtdcMoneyType PreBalance; + ///上次占用的保证金 + TThostFtdcMoneyType PreMargin; + ///利息基数 + TThostFtdcMoneyType InterestBase; + ///利息收入 + TThostFtdcMoneyType Interest; + ///入金金额 + TThostFtdcMoneyType Deposit; + ///出金金额 + TThostFtdcMoneyType Withdraw; + ///冻结的保证金 + TThostFtdcMoneyType FrozenMargin; + ///冻结的资金 + TThostFtdcMoneyType FrozenCash; + ///冻结的手续费 + TThostFtdcMoneyType FrozenCommission; + ///当前保证金总额 + TThostFtdcMoneyType CurrMargin; + ///资金差额 + TThostFtdcMoneyType CashIn; + ///手续费 + TThostFtdcMoneyType Commission; + ///平仓盈亏 + TThostFtdcMoneyType CloseProfit; + ///持仓盈亏 + TThostFtdcMoneyType PositionProfit; + ///期货结算准备金 + TThostFtdcMoneyType Balance; + ///可用资金 + TThostFtdcMoneyType Available; + ///可取资金 + TThostFtdcMoneyType WithdrawQuota; + ///基本准备金 + TThostFtdcMoneyType Reserve; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///信用额度 + TThostFtdcMoneyType Credit; + ///质押金额 + TThostFtdcMoneyType Mortgage; + ///交易所保证金 + TThostFtdcMoneyType ExchangeMargin; + ///投资者交割保证金 + TThostFtdcMoneyType DeliveryMargin; + ///交易所交割保证金 + TThostFtdcMoneyType ExchangeDeliveryMargin; + ///保底期货结算准备金 + TThostFtdcMoneyType ReserveBalance; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///上次货币质入金额 + TThostFtdcMoneyType PreFundMortgageIn; + ///上次货币质出金额 + TThostFtdcMoneyType PreFundMortgageOut; + ///货币质入金额 + TThostFtdcMoneyType FundMortgageIn; + ///货币质出金额 + TThostFtdcMoneyType FundMortgageOut; + ///货币质押余额 + TThostFtdcMoneyType FundMortgageAvailable; + ///可质押货币金额 + TThostFtdcMoneyType MortgageableFund; + ///特殊产品占用保证金 + TThostFtdcMoneyType SpecProductMargin; + ///特殊产品冻结保证金 + TThostFtdcMoneyType SpecProductFrozenMargin; + ///特殊产品手续费 + TThostFtdcMoneyType SpecProductCommission; + ///特殊产品冻结手续费 + TThostFtdcMoneyType SpecProductFrozenCommission; + ///特殊产品持仓盈亏 + TThostFtdcMoneyType SpecProductPositionProfit; + ///特殊产品平仓盈亏 + TThostFtdcMoneyType SpecProductCloseProfit; + ///根据持仓盈亏算法计算的特殊产品持仓盈亏 + TThostFtdcMoneyType SpecProductPositionProfitByAlg; + ///特殊产品交易所保证金 + TThostFtdcMoneyType SpecProductExchangeMargin; + ///期权平仓盈亏 + TThostFtdcMoneyType OptionCloseProfit; + ///期权市值 + TThostFtdcMoneyType OptionValue; +}; + +///投资者持仓 +struct CThostFtdcInvestorPositionField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///持仓多空方向 + TThostFtdcPosiDirectionType PosiDirection; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///持仓日期 + TThostFtdcPositionDateType PositionDate; + ///上日持仓 + TThostFtdcVolumeType YdPosition; + ///今日持仓 + TThostFtdcVolumeType Position; + ///多头冻结 + TThostFtdcVolumeType LongFrozen; + ///空头冻结 + TThostFtdcVolumeType ShortFrozen; + ///开仓冻结金额 + TThostFtdcMoneyType LongFrozenAmount; + ///开仓冻结金额 + TThostFtdcMoneyType ShortFrozenAmount; + ///开仓量 + TThostFtdcVolumeType OpenVolume; + ///平仓量 + TThostFtdcVolumeType CloseVolume; + ///开仓金额 + TThostFtdcMoneyType OpenAmount; + ///平仓金额 + TThostFtdcMoneyType CloseAmount; + ///持仓成本 + TThostFtdcMoneyType PositionCost; + ///上次占用的保证金 + TThostFtdcMoneyType PreMargin; + ///占用的保证金 + TThostFtdcMoneyType UseMargin; + ///冻结的保证金 + TThostFtdcMoneyType FrozenMargin; + ///冻结的资金 + TThostFtdcMoneyType FrozenCash; + ///冻结的手续费 + TThostFtdcMoneyType FrozenCommission; + ///资金差额 + TThostFtdcMoneyType CashIn; + ///手续费 + TThostFtdcMoneyType Commission; + ///平仓盈亏 + TThostFtdcMoneyType CloseProfit; + ///持仓盈亏 + TThostFtdcMoneyType PositionProfit; + ///上次结算价 + TThostFtdcPriceType PreSettlementPrice; + ///本次结算价 + TThostFtdcPriceType SettlementPrice; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///开仓成本 + TThostFtdcMoneyType OpenCost; + ///交易所保证金 + TThostFtdcMoneyType ExchangeMargin; + ///组合成交形成的持仓 + TThostFtdcVolumeType CombPosition; + ///组合多头冻结 + TThostFtdcVolumeType CombLongFrozen; + ///组合空头冻结 + TThostFtdcVolumeType CombShortFrozen; + ///逐日盯市平仓盈亏 + TThostFtdcMoneyType CloseProfitByDate; + ///逐笔对冲平仓盈亏 + TThostFtdcMoneyType CloseProfitByTrade; + ///今日持仓 + TThostFtdcVolumeType TodayPosition; + ///保证金率 + TThostFtdcRatioType MarginRateByMoney; + ///保证金率(按手数) + TThostFtdcRatioType MarginRateByVolume; + ///执行冻结 + TThostFtdcVolumeType StrikeFrozen; + ///执行冻结金额 + TThostFtdcMoneyType StrikeFrozenAmount; + ///放弃执行冻结 + TThostFtdcVolumeType AbandonFrozen; + ///期权市值 + TThostFtdcMoneyType OptionValue; +}; + +///合约保证金率 +struct CThostFtdcInstrumentMarginRateField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///多头保证金率 + TThostFtdcRatioType LongMarginRatioByMoney; + ///多头保证金费 + TThostFtdcMoneyType LongMarginRatioByVolume; + ///空头保证金率 + TThostFtdcRatioType ShortMarginRatioByMoney; + ///空头保证金费 + TThostFtdcMoneyType ShortMarginRatioByVolume; + ///是否相对交易所收取 + TThostFtdcBoolType IsRelative; +}; + +///合约手续费率 +struct CThostFtdcInstrumentCommissionRateField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///开仓手续费率 + TThostFtdcRatioType OpenRatioByMoney; + ///开仓手续费 + TThostFtdcRatioType OpenRatioByVolume; + ///平仓手续费率 + TThostFtdcRatioType CloseRatioByMoney; + ///平仓手续费 + TThostFtdcRatioType CloseRatioByVolume; + ///平今手续费率 + TThostFtdcRatioType CloseTodayRatioByMoney; + ///平今手续费 + TThostFtdcRatioType CloseTodayRatioByVolume; +}; + +///深度行情 +struct CThostFtdcDepthMarketDataField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///最新价 + TThostFtdcPriceType LastPrice; + ///上次结算价 + TThostFtdcPriceType PreSettlementPrice; + ///昨收盘 + TThostFtdcPriceType PreClosePrice; + ///昨持仓量 + TThostFtdcLargeVolumeType PreOpenInterest; + ///今开盘 + TThostFtdcPriceType OpenPrice; + ///最高价 + TThostFtdcPriceType HighestPrice; + ///最低价 + TThostFtdcPriceType LowestPrice; + ///数量 + TThostFtdcVolumeType Volume; + ///成交金额 + TThostFtdcMoneyType Turnover; + ///持仓量 + TThostFtdcLargeVolumeType OpenInterest; + ///今收盘 + TThostFtdcPriceType ClosePrice; + ///本次结算价 + TThostFtdcPriceType SettlementPrice; + ///涨停板价 + TThostFtdcPriceType UpperLimitPrice; + ///跌停板价 + TThostFtdcPriceType LowerLimitPrice; + ///昨虚实度 + TThostFtdcRatioType PreDelta; + ///今虚实度 + TThostFtdcRatioType CurrDelta; + ///最后修改时间 + TThostFtdcTimeType UpdateTime; + ///最后修改毫秒 + TThostFtdcMillisecType UpdateMillisec; + ///申买价一 + TThostFtdcPriceType BidPrice1; + ///申买量一 + TThostFtdcVolumeType BidVolume1; + ///申卖价一 + TThostFtdcPriceType AskPrice1; + ///申卖量一 + TThostFtdcVolumeType AskVolume1; + ///申买价二 + TThostFtdcPriceType BidPrice2; + ///申买量二 + TThostFtdcVolumeType BidVolume2; + ///申卖价二 + TThostFtdcPriceType AskPrice2; + ///申卖量二 + TThostFtdcVolumeType AskVolume2; + ///申买价三 + TThostFtdcPriceType BidPrice3; + ///申买量三 + TThostFtdcVolumeType BidVolume3; + ///申卖价三 + TThostFtdcPriceType AskPrice3; + ///申卖量三 + TThostFtdcVolumeType AskVolume3; + ///申买价四 + TThostFtdcPriceType BidPrice4; + ///申买量四 + TThostFtdcVolumeType BidVolume4; + ///申卖价四 + TThostFtdcPriceType AskPrice4; + ///申卖量四 + TThostFtdcVolumeType AskVolume4; + ///申买价五 + TThostFtdcPriceType BidPrice5; + ///申买量五 + TThostFtdcVolumeType BidVolume5; + ///申卖价五 + TThostFtdcPriceType AskPrice5; + ///申卖量五 + TThostFtdcVolumeType AskVolume5; + ///当日均价 + TThostFtdcPriceType AveragePrice; + ///业务日期 + TThostFtdcDateType ActionDay; +}; + +///投资者合约交易权限 +struct CThostFtdcInstrumentTradingRightField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易权限 + TThostFtdcTradingRightType TradingRight; +}; + +///经纪公司用户 +struct CThostFtdcBrokerUserField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///用户名称 + TThostFtdcUserNameType UserName; + ///用户类型 + TThostFtdcUserTypeType UserType; + ///是否活跃 + TThostFtdcBoolType IsActive; + ///是否使用令牌 + TThostFtdcBoolType IsUsingOTP; +}; + +///经纪公司用户口令 +struct CThostFtdcBrokerUserPasswordField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///密码 + TThostFtdcPasswordType Password; +}; + +///经纪公司用户功能权限 +struct CThostFtdcBrokerUserFunctionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///经纪公司功能代码 + TThostFtdcBrokerFunctionCodeType BrokerFunctionCode; +}; + +///交易所交易员报盘机 +struct CThostFtdcTraderOfferField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///交易所交易员连接状态 + TThostFtdcTraderConnectStatusType TraderConnectStatus; + ///发出连接请求的日期 + TThostFtdcDateType ConnectRequestDate; + ///发出连接请求的时间 + TThostFtdcTimeType ConnectRequestTime; + ///上次报告日期 + TThostFtdcDateType LastReportDate; + ///上次报告时间 + TThostFtdcTimeType LastReportTime; + ///完成连接日期 + TThostFtdcDateType ConnectDate; + ///完成连接时间 + TThostFtdcTimeType ConnectTime; + ///启动日期 + TThostFtdcDateType StartDate; + ///启动时间 + TThostFtdcTimeType StartTime; + ///交易日 + TThostFtdcDateType TradingDay; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///本席位最大成交编号 + TThostFtdcTradeIDType MaxTradeID; + ///本席位最大报单备拷 + TThostFtdcReturnCodeType MaxOrderMessageReference; +}; + +///投资者结算结果 +struct CThostFtdcSettlementInfoField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///序号 + TThostFtdcSequenceNoType SequenceNo; + ///消息正文 + TThostFtdcContentType Content; +}; + +///合约保证金率调整 +struct CThostFtdcInstrumentMarginRateAdjustField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///多头保证金率 + TThostFtdcRatioType LongMarginRatioByMoney; + ///多头保证金费 + TThostFtdcMoneyType LongMarginRatioByVolume; + ///空头保证金率 + TThostFtdcRatioType ShortMarginRatioByMoney; + ///空头保证金费 + TThostFtdcMoneyType ShortMarginRatioByVolume; + ///是否相对交易所收取 + TThostFtdcBoolType IsRelative; +}; + +///交易所保证金率 +struct CThostFtdcExchangeMarginRateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///多头保证金率 + TThostFtdcRatioType LongMarginRatioByMoney; + ///多头保证金费 + TThostFtdcMoneyType LongMarginRatioByVolume; + ///空头保证金率 + TThostFtdcRatioType ShortMarginRatioByMoney; + ///空头保证金费 + TThostFtdcMoneyType ShortMarginRatioByVolume; +}; + +///交易所保证金率调整 +struct CThostFtdcExchangeMarginRateAdjustField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///跟随交易所投资者多头保证金率 + TThostFtdcRatioType LongMarginRatioByMoney; + ///跟随交易所投资者多头保证金费 + TThostFtdcMoneyType LongMarginRatioByVolume; + ///跟随交易所投资者空头保证金率 + TThostFtdcRatioType ShortMarginRatioByMoney; + ///跟随交易所投资者空头保证金费 + TThostFtdcMoneyType ShortMarginRatioByVolume; + ///交易所多头保证金率 + TThostFtdcRatioType ExchLongMarginRatioByMoney; + ///交易所多头保证金费 + TThostFtdcMoneyType ExchLongMarginRatioByVolume; + ///交易所空头保证金率 + TThostFtdcRatioType ExchShortMarginRatioByMoney; + ///交易所空头保证金费 + TThostFtdcMoneyType ExchShortMarginRatioByVolume; + ///不跟随交易所投资者多头保证金率 + TThostFtdcRatioType NoLongMarginRatioByMoney; + ///不跟随交易所投资者多头保证金费 + TThostFtdcMoneyType NoLongMarginRatioByVolume; + ///不跟随交易所投资者空头保证金率 + TThostFtdcRatioType NoShortMarginRatioByMoney; + ///不跟随交易所投资者空头保证金费 + TThostFtdcMoneyType NoShortMarginRatioByVolume; +}; + +///汇率 +struct CThostFtdcExchangeRateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///源币种 + TThostFtdcCurrencyIDType FromCurrencyID; + ///源币种单位数量 + TThostFtdcCurrencyUnitType FromCurrencyUnit; + ///目标币种 + TThostFtdcCurrencyIDType ToCurrencyID; + ///汇率 + TThostFtdcExchangeRateType ExchangeRate; +}; + +///结算引用 +struct CThostFtdcSettlementRefField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; +}; + +///当前时间 +struct CThostFtdcCurrentTimeField +{ + ///当前日期 + TThostFtdcDateType CurrDate; + ///当前时间 + TThostFtdcTimeType CurrTime; + ///当前时间(毫秒) + TThostFtdcMillisecType CurrMillisec; + ///业务日期 + TThostFtdcDateType ActionDay; +}; + +///通讯阶段 +struct CThostFtdcCommPhaseField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///通讯时段编号 + TThostFtdcCommPhaseNoType CommPhaseNo; + ///系统编号 + TThostFtdcSystemIDType SystemID; +}; + +///登录信息 +struct CThostFtdcLoginInfoField +{ + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///登录日期 + TThostFtdcDateType LoginDate; + ///登录时间 + TThostFtdcTimeType LoginTime; + ///IP地址 + TThostFtdcIPAddressType IPAddress; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; + ///接口端产品信息 + TThostFtdcProductInfoType InterfaceProductInfo; + ///协议信息 + TThostFtdcProtocolInfoType ProtocolInfo; + ///系统名称 + TThostFtdcSystemNameType SystemName; + ///密码 + TThostFtdcPasswordType Password; + ///最大报单引用 + TThostFtdcOrderRefType MaxOrderRef; + ///上期所时间 + TThostFtdcTimeType SHFETime; + ///大商所时间 + TThostFtdcTimeType DCETime; + ///郑商所时间 + TThostFtdcTimeType CZCETime; + ///中金所时间 + TThostFtdcTimeType FFEXTime; + ///Mac地址 + TThostFtdcMacAddressType MacAddress; + ///动态密码 + TThostFtdcPasswordType OneTimePassword; + ///能源中心时间 + TThostFtdcTimeType INETime; +}; + +///登录信息 +struct CThostFtdcLogoutAllField +{ + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///系统名称 + TThostFtdcSystemNameType SystemName; +}; + +///前置状态 +struct CThostFtdcFrontStatusField +{ + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///上次报告日期 + TThostFtdcDateType LastReportDate; + ///上次报告时间 + TThostFtdcTimeType LastReportTime; + ///是否活跃 + TThostFtdcBoolType IsActive; +}; + +///用户口令变更 +struct CThostFtdcUserPasswordUpdateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///原来的口令 + TThostFtdcPasswordType OldPassword; + ///新的口令 + TThostFtdcPasswordType NewPassword; +}; + +///输入报单 +struct CThostFtdcInputOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///报单价格条件 + TThostFtdcOrderPriceTypeType OrderPriceType; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///组合开平标志 + TThostFtdcCombOffsetFlagType CombOffsetFlag; + ///组合投机套保标志 + TThostFtdcCombHedgeFlagType CombHedgeFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量 + TThostFtdcVolumeType VolumeTotalOriginal; + ///有效期类型 + TThostFtdcTimeConditionType TimeCondition; + ///GTD日期 + TThostFtdcDateType GTDDate; + ///成交量类型 + TThostFtdcVolumeConditionType VolumeCondition; + ///最小成交量 + TThostFtdcVolumeType MinVolume; + ///触发条件 + TThostFtdcContingentConditionType ContingentCondition; + ///止损价 + TThostFtdcPriceType StopPrice; + ///强平原因 + TThostFtdcForceCloseReasonType ForceCloseReason; + ///自动挂起标志 + TThostFtdcBoolType IsAutoSuspend; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///用户强评标志 + TThostFtdcBoolType UserForceClose; + ///互换单标志 + TThostFtdcBoolType IsSwapOrder; +}; + +///报单 +struct CThostFtdcOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///报单价格条件 + TThostFtdcOrderPriceTypeType OrderPriceType; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///组合开平标志 + TThostFtdcCombOffsetFlagType CombOffsetFlag; + ///组合投机套保标志 + TThostFtdcCombHedgeFlagType CombHedgeFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量 + TThostFtdcVolumeType VolumeTotalOriginal; + ///有效期类型 + TThostFtdcTimeConditionType TimeCondition; + ///GTD日期 + TThostFtdcDateType GTDDate; + ///成交量类型 + TThostFtdcVolumeConditionType VolumeCondition; + ///最小成交量 + TThostFtdcVolumeType MinVolume; + ///触发条件 + TThostFtdcContingentConditionType ContingentCondition; + ///止损价 + TThostFtdcPriceType StopPrice; + ///强平原因 + TThostFtdcForceCloseReasonType ForceCloseReason; + ///自动挂起标志 + TThostFtdcBoolType IsAutoSuspend; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///报单提交状态 + TThostFtdcOrderSubmitStatusType OrderSubmitStatus; + ///报单提示序号 + TThostFtdcSequenceNoType NotifySequence; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///报单来源 + TThostFtdcOrderSourceType OrderSource; + ///报单状态 + TThostFtdcOrderStatusType OrderStatus; + ///报单类型 + TThostFtdcOrderTypeType OrderType; + ///今成交数量 + TThostFtdcVolumeType VolumeTraded; + ///剩余数量 + TThostFtdcVolumeType VolumeTotal; + ///报单日期 + TThostFtdcDateType InsertDate; + ///委托时间 + TThostFtdcTimeType InsertTime; + ///激活时间 + TThostFtdcTimeType ActiveTime; + ///挂起时间 + TThostFtdcTimeType SuspendTime; + ///最后修改时间 + TThostFtdcTimeType UpdateTime; + ///撤销时间 + TThostFtdcTimeType CancelTime; + ///最后修改交易所交易员代码 + TThostFtdcTraderIDType ActiveTraderID; + ///结算会员编号 + TThostFtdcParticipantIDType ClearingPartID; + ///序号 + TThostFtdcSequenceNoType SequenceNo; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; + ///状态信息 + TThostFtdcErrorMsgType StatusMsg; + ///用户强评标志 + TThostFtdcBoolType UserForceClose; + ///操作用户代码 + TThostFtdcUserIDType ActiveUserID; + ///经纪公司报单编号 + TThostFtdcSequenceNoType BrokerOrderSeq; + ///相关报单 + TThostFtdcOrderSysIDType RelativeOrderSysID; + ///郑商所成交数量 + TThostFtdcVolumeType ZCETotalTradedVolume; + ///互换单标志 + TThostFtdcBoolType IsSwapOrder; +}; + +///交易所报单 +struct CThostFtdcExchangeOrderField +{ + ///报单价格条件 + TThostFtdcOrderPriceTypeType OrderPriceType; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///组合开平标志 + TThostFtdcCombOffsetFlagType CombOffsetFlag; + ///组合投机套保标志 + TThostFtdcCombHedgeFlagType CombHedgeFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量 + TThostFtdcVolumeType VolumeTotalOriginal; + ///有效期类型 + TThostFtdcTimeConditionType TimeCondition; + ///GTD日期 + TThostFtdcDateType GTDDate; + ///成交量类型 + TThostFtdcVolumeConditionType VolumeCondition; + ///最小成交量 + TThostFtdcVolumeType MinVolume; + ///触发条件 + TThostFtdcContingentConditionType ContingentCondition; + ///止损价 + TThostFtdcPriceType StopPrice; + ///强平原因 + TThostFtdcForceCloseReasonType ForceCloseReason; + ///自动挂起标志 + TThostFtdcBoolType IsAutoSuspend; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///报单提交状态 + TThostFtdcOrderSubmitStatusType OrderSubmitStatus; + ///报单提示序号 + TThostFtdcSequenceNoType NotifySequence; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///报单来源 + TThostFtdcOrderSourceType OrderSource; + ///报单状态 + TThostFtdcOrderStatusType OrderStatus; + ///报单类型 + TThostFtdcOrderTypeType OrderType; + ///今成交数量 + TThostFtdcVolumeType VolumeTraded; + ///剩余数量 + TThostFtdcVolumeType VolumeTotal; + ///报单日期 + TThostFtdcDateType InsertDate; + ///委托时间 + TThostFtdcTimeType InsertTime; + ///激活时间 + TThostFtdcTimeType ActiveTime; + ///挂起时间 + TThostFtdcTimeType SuspendTime; + ///最后修改时间 + TThostFtdcTimeType UpdateTime; + ///撤销时间 + TThostFtdcTimeType CancelTime; + ///最后修改交易所交易员代码 + TThostFtdcTraderIDType ActiveTraderID; + ///结算会员编号 + TThostFtdcParticipantIDType ClearingPartID; + ///序号 + TThostFtdcSequenceNoType SequenceNo; +}; + +///交易所报单插入失败 +struct CThostFtdcExchangeOrderInsertErrorField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///输入报单操作 +struct CThostFtdcInputOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///报单操作引用 + TThostFtdcOrderActionRefType OrderActionRef; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量变化 + TThostFtdcVolumeType VolumeChange; + ///用户代码 + TThostFtdcUserIDType UserID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///报单操作 +struct CThostFtdcOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///报单操作引用 + TThostFtdcOrderActionRefType OrderActionRef; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量变化 + TThostFtdcVolumeType VolumeChange; + ///操作日期 + TThostFtdcDateType ActionDate; + ///操作时间 + TThostFtdcTimeType ActionTime; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///操作本地编号 + TThostFtdcOrderLocalIDType ActionLocalID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///报单操作状态 + TThostFtdcOrderActionStatusType OrderActionStatus; + ///用户代码 + TThostFtdcUserIDType UserID; + ///状态信息 + TThostFtdcErrorMsgType StatusMsg; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///交易所报单操作 +struct CThostFtdcExchangeOrderActionField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量变化 + TThostFtdcVolumeType VolumeChange; + ///操作日期 + TThostFtdcDateType ActionDate; + ///操作时间 + TThostFtdcTimeType ActionTime; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///操作本地编号 + TThostFtdcOrderLocalIDType ActionLocalID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///报单操作状态 + TThostFtdcOrderActionStatusType OrderActionStatus; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///交易所报单操作失败 +struct CThostFtdcExchangeOrderActionErrorField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///操作本地编号 + TThostFtdcOrderLocalIDType ActionLocalID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///交易所成交 +struct CThostFtdcExchangeTradeField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///成交编号 + TThostFtdcTradeIDType TradeID; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///交易角色 + TThostFtdcTradingRoleType TradingRole; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///开平标志 + TThostFtdcOffsetFlagType OffsetFlag; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///价格 + TThostFtdcPriceType Price; + ///数量 + TThostFtdcVolumeType Volume; + ///成交时期 + TThostFtdcDateType TradeDate; + ///成交时间 + TThostFtdcTimeType TradeTime; + ///成交类型 + TThostFtdcTradeTypeType TradeType; + ///成交价来源 + TThostFtdcPriceSourceType PriceSource; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///结算会员编号 + TThostFtdcParticipantIDType ClearingPartID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///序号 + TThostFtdcSequenceNoType SequenceNo; + ///成交来源 + TThostFtdcTradeSourceType TradeSource; +}; + +///成交 +struct CThostFtdcTradeField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///成交编号 + TThostFtdcTradeIDType TradeID; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///交易角色 + TThostFtdcTradingRoleType TradingRole; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///开平标志 + TThostFtdcOffsetFlagType OffsetFlag; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///价格 + TThostFtdcPriceType Price; + ///数量 + TThostFtdcVolumeType Volume; + ///成交时期 + TThostFtdcDateType TradeDate; + ///成交时间 + TThostFtdcTimeType TradeTime; + ///成交类型 + TThostFtdcTradeTypeType TradeType; + ///成交价来源 + TThostFtdcPriceSourceType PriceSource; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///结算会员编号 + TThostFtdcParticipantIDType ClearingPartID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///序号 + TThostFtdcSequenceNoType SequenceNo; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///经纪公司报单编号 + TThostFtdcSequenceNoType BrokerOrderSeq; + ///成交来源 + TThostFtdcTradeSourceType TradeSource; +}; + +///用户会话 +struct CThostFtdcUserSessionField +{ + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///登录日期 + TThostFtdcDateType LoginDate; + ///登录时间 + TThostFtdcTimeType LoginTime; + ///IP地址 + TThostFtdcIPAddressType IPAddress; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; + ///接口端产品信息 + TThostFtdcProductInfoType InterfaceProductInfo; + ///协议信息 + TThostFtdcProtocolInfoType ProtocolInfo; + ///Mac地址 + TThostFtdcMacAddressType MacAddress; +}; + +///查询最大报单数量 +struct CThostFtdcQueryMaxOrderVolumeField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///开平标志 + TThostFtdcOffsetFlagType OffsetFlag; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///最大允许报单数量 + TThostFtdcVolumeType MaxVolume; +}; + +///投资者结算结果确认信息 +struct CThostFtdcSettlementInfoConfirmField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///确认日期 + TThostFtdcDateType ConfirmDate; + ///确认时间 + TThostFtdcTimeType ConfirmTime; +}; + +///出入金同步 +struct CThostFtdcSyncDepositField +{ + ///出入金流水号 + TThostFtdcDepositSeqNoType DepositSeqNo; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///入金金额 + TThostFtdcMoneyType Deposit; + ///是否强制进行 + TThostFtdcBoolType IsForce; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///货币质押同步 +struct CThostFtdcSyncFundMortgageField +{ + ///货币质押流水号 + TThostFtdcDepositSeqNoType MortgageSeqNo; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///源币种 + TThostFtdcCurrencyIDType FromCurrencyID; + ///质押金额 + TThostFtdcMoneyType MortgageAmount; + ///目标币种 + TThostFtdcCurrencyIDType ToCurrencyID; +}; + +///经纪公司同步 +struct CThostFtdcBrokerSyncField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; +}; + +///正在同步中的投资者 +struct CThostFtdcSyncingInvestorField +{ + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者分组代码 + TThostFtdcInvestorIDType InvestorGroupID; + ///投资者名称 + TThostFtdcPartyNameType InvestorName; + ///证件类型 + TThostFtdcIdCardTypeType IdentifiedCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///是否活跃 + TThostFtdcBoolType IsActive; + ///联系电话 + TThostFtdcTelephoneType Telephone; + ///通讯地址 + TThostFtdcAddressType Address; + ///开户日期 + TThostFtdcDateType OpenDate; + ///手机 + TThostFtdcMobileType Mobile; + ///手续费率模板代码 + TThostFtdcInvestorIDType CommModelID; + ///保证金率模板代码 + TThostFtdcInvestorIDType MarginModelID; +}; + +///正在同步中的交易代码 +struct CThostFtdcSyncingTradingCodeField +{ + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///是否活跃 + TThostFtdcBoolType IsActive; + ///交易编码类型 + TThostFtdcClientIDTypeType ClientIDType; +}; + +///正在同步中的投资者分组 +struct CThostFtdcSyncingInvestorGroupField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者分组代码 + TThostFtdcInvestorIDType InvestorGroupID; + ///投资者分组名称 + TThostFtdcInvestorGroupNameType InvestorGroupName; +}; + +///正在同步中的交易账号 +struct CThostFtdcSyncingTradingAccountField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///上次质押金额 + TThostFtdcMoneyType PreMortgage; + ///上次信用额度 + TThostFtdcMoneyType PreCredit; + ///上次存款额 + TThostFtdcMoneyType PreDeposit; + ///上次结算准备金 + TThostFtdcMoneyType PreBalance; + ///上次占用的保证金 + TThostFtdcMoneyType PreMargin; + ///利息基数 + TThostFtdcMoneyType InterestBase; + ///利息收入 + TThostFtdcMoneyType Interest; + ///入金金额 + TThostFtdcMoneyType Deposit; + ///出金金额 + TThostFtdcMoneyType Withdraw; + ///冻结的保证金 + TThostFtdcMoneyType FrozenMargin; + ///冻结的资金 + TThostFtdcMoneyType FrozenCash; + ///冻结的手续费 + TThostFtdcMoneyType FrozenCommission; + ///当前保证金总额 + TThostFtdcMoneyType CurrMargin; + ///资金差额 + TThostFtdcMoneyType CashIn; + ///手续费 + TThostFtdcMoneyType Commission; + ///平仓盈亏 + TThostFtdcMoneyType CloseProfit; + ///持仓盈亏 + TThostFtdcMoneyType PositionProfit; + ///期货结算准备金 + TThostFtdcMoneyType Balance; + ///可用资金 + TThostFtdcMoneyType Available; + ///可取资金 + TThostFtdcMoneyType WithdrawQuota; + ///基本准备金 + TThostFtdcMoneyType Reserve; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///信用额度 + TThostFtdcMoneyType Credit; + ///质押金额 + TThostFtdcMoneyType Mortgage; + ///交易所保证金 + TThostFtdcMoneyType ExchangeMargin; + ///投资者交割保证金 + TThostFtdcMoneyType DeliveryMargin; + ///交易所交割保证金 + TThostFtdcMoneyType ExchangeDeliveryMargin; + ///保底期货结算准备金 + TThostFtdcMoneyType ReserveBalance; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///上次货币质入金额 + TThostFtdcMoneyType PreFundMortgageIn; + ///上次货币质出金额 + TThostFtdcMoneyType PreFundMortgageOut; + ///货币质入金额 + TThostFtdcMoneyType FundMortgageIn; + ///货币质出金额 + TThostFtdcMoneyType FundMortgageOut; + ///货币质押余额 + TThostFtdcMoneyType FundMortgageAvailable; + ///可质押货币金额 + TThostFtdcMoneyType MortgageableFund; + ///特殊产品占用保证金 + TThostFtdcMoneyType SpecProductMargin; + ///特殊产品冻结保证金 + TThostFtdcMoneyType SpecProductFrozenMargin; + ///特殊产品手续费 + TThostFtdcMoneyType SpecProductCommission; + ///特殊产品冻结手续费 + TThostFtdcMoneyType SpecProductFrozenCommission; + ///特殊产品持仓盈亏 + TThostFtdcMoneyType SpecProductPositionProfit; + ///特殊产品平仓盈亏 + TThostFtdcMoneyType SpecProductCloseProfit; + ///根据持仓盈亏算法计算的特殊产品持仓盈亏 + TThostFtdcMoneyType SpecProductPositionProfitByAlg; + ///特殊产品交易所保证金 + TThostFtdcMoneyType SpecProductExchangeMargin; + ///期权平仓盈亏 + TThostFtdcMoneyType OptionCloseProfit; + ///期权市值 + TThostFtdcMoneyType OptionValue; +}; + +///正在同步中的投资者持仓 +struct CThostFtdcSyncingInvestorPositionField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///持仓多空方向 + TThostFtdcPosiDirectionType PosiDirection; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///持仓日期 + TThostFtdcPositionDateType PositionDate; + ///上日持仓 + TThostFtdcVolumeType YdPosition; + ///今日持仓 + TThostFtdcVolumeType Position; + ///多头冻结 + TThostFtdcVolumeType LongFrozen; + ///空头冻结 + TThostFtdcVolumeType ShortFrozen; + ///开仓冻结金额 + TThostFtdcMoneyType LongFrozenAmount; + ///开仓冻结金额 + TThostFtdcMoneyType ShortFrozenAmount; + ///开仓量 + TThostFtdcVolumeType OpenVolume; + ///平仓量 + TThostFtdcVolumeType CloseVolume; + ///开仓金额 + TThostFtdcMoneyType OpenAmount; + ///平仓金额 + TThostFtdcMoneyType CloseAmount; + ///持仓成本 + TThostFtdcMoneyType PositionCost; + ///上次占用的保证金 + TThostFtdcMoneyType PreMargin; + ///占用的保证金 + TThostFtdcMoneyType UseMargin; + ///冻结的保证金 + TThostFtdcMoneyType FrozenMargin; + ///冻结的资金 + TThostFtdcMoneyType FrozenCash; + ///冻结的手续费 + TThostFtdcMoneyType FrozenCommission; + ///资金差额 + TThostFtdcMoneyType CashIn; + ///手续费 + TThostFtdcMoneyType Commission; + ///平仓盈亏 + TThostFtdcMoneyType CloseProfit; + ///持仓盈亏 + TThostFtdcMoneyType PositionProfit; + ///上次结算价 + TThostFtdcPriceType PreSettlementPrice; + ///本次结算价 + TThostFtdcPriceType SettlementPrice; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///开仓成本 + TThostFtdcMoneyType OpenCost; + ///交易所保证金 + TThostFtdcMoneyType ExchangeMargin; + ///组合成交形成的持仓 + TThostFtdcVolumeType CombPosition; + ///组合多头冻结 + TThostFtdcVolumeType CombLongFrozen; + ///组合空头冻结 + TThostFtdcVolumeType CombShortFrozen; + ///逐日盯市平仓盈亏 + TThostFtdcMoneyType CloseProfitByDate; + ///逐笔对冲平仓盈亏 + TThostFtdcMoneyType CloseProfitByTrade; + ///今日持仓 + TThostFtdcVolumeType TodayPosition; + ///保证金率 + TThostFtdcRatioType MarginRateByMoney; + ///保证金率(按手数) + TThostFtdcRatioType MarginRateByVolume; + ///执行冻结 + TThostFtdcVolumeType StrikeFrozen; + ///执行冻结金额 + TThostFtdcMoneyType StrikeFrozenAmount; + ///放弃执行冻结 + TThostFtdcVolumeType AbandonFrozen; + ///期权市值 + TThostFtdcMoneyType OptionValue; +}; + +///正在同步中的合约保证金率 +struct CThostFtdcSyncingInstrumentMarginRateField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///多头保证金率 + TThostFtdcRatioType LongMarginRatioByMoney; + ///多头保证金费 + TThostFtdcMoneyType LongMarginRatioByVolume; + ///空头保证金率 + TThostFtdcRatioType ShortMarginRatioByMoney; + ///空头保证金费 + TThostFtdcMoneyType ShortMarginRatioByVolume; + ///是否相对交易所收取 + TThostFtdcBoolType IsRelative; +}; + +///正在同步中的合约手续费率 +struct CThostFtdcSyncingInstrumentCommissionRateField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///开仓手续费率 + TThostFtdcRatioType OpenRatioByMoney; + ///开仓手续费 + TThostFtdcRatioType OpenRatioByVolume; + ///平仓手续费率 + TThostFtdcRatioType CloseRatioByMoney; + ///平仓手续费 + TThostFtdcRatioType CloseRatioByVolume; + ///平今手续费率 + TThostFtdcRatioType CloseTodayRatioByMoney; + ///平今手续费 + TThostFtdcRatioType CloseTodayRatioByVolume; +}; + +///正在同步中的合约交易权限 +struct CThostFtdcSyncingInstrumentTradingRightField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易权限 + TThostFtdcTradingRightType TradingRight; +}; + +///查询报单 +struct CThostFtdcQryOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///开始时间 + TThostFtdcTimeType InsertTimeStart; + ///结束时间 + TThostFtdcTimeType InsertTimeEnd; +}; + +///查询成交 +struct CThostFtdcQryTradeField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///成交编号 + TThostFtdcTradeIDType TradeID; + ///开始时间 + TThostFtdcTimeType TradeTimeStart; + ///结束时间 + TThostFtdcTimeType TradeTimeEnd; +}; + +///查询投资者持仓 +struct CThostFtdcQryInvestorPositionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///查询资金账户 +struct CThostFtdcQryTradingAccountField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///查询投资者 +struct CThostFtdcQryInvestorField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; +}; + +///查询交易编码 +struct CThostFtdcQryTradingCodeField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///交易编码类型 + TThostFtdcClientIDTypeType ClientIDType; +}; + +///查询投资者组 +struct CThostFtdcQryInvestorGroupField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; +}; + +///查询合约保证金率 +struct CThostFtdcQryInstrumentMarginRateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; +}; + +///查询手续费率 +struct CThostFtdcQryInstrumentCommissionRateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///查询合约交易权限 +struct CThostFtdcQryInstrumentTradingRightField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///查询经纪公司 +struct CThostFtdcQryBrokerField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; +}; + +///查询交易员 +struct CThostFtdcQryTraderField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///查询管理用户功能权限 +struct CThostFtdcQrySuperUserFunctionField +{ + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///查询用户会话 +struct CThostFtdcQryUserSessionField +{ + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///查询经纪公司会员代码 +struct CThostFtdcQryPartBrokerField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; +}; + +///查询前置状态 +struct CThostFtdcQryFrontStatusField +{ + ///前置编号 + TThostFtdcFrontIDType FrontID; +}; + +///查询交易所报单 +struct CThostFtdcQryExchangeOrderField +{ + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///查询报单操作 +struct CThostFtdcQryOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; +}; + +///查询交易所报单操作 +struct CThostFtdcQryExchangeOrderActionField +{ + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///查询管理用户 +struct CThostFtdcQrySuperUserField +{ + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///查询交易所 +struct CThostFtdcQryExchangeField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; +}; + +///查询产品 +struct CThostFtdcQryProductField +{ + ///产品代码 + TThostFtdcInstrumentIDType ProductID; + ///产品类型 + TThostFtdcProductClassType ProductClass; +}; + +///查询合约 +struct CThostFtdcQryInstrumentField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///产品代码 + TThostFtdcInstrumentIDType ProductID; +}; + +///查询行情 +struct CThostFtdcQryDepthMarketDataField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///查询经纪公司用户 +struct CThostFtdcQryBrokerUserField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///查询经纪公司用户权限 +struct CThostFtdcQryBrokerUserFunctionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///查询交易员报盘机 +struct CThostFtdcQryTraderOfferField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///查询出入金流水 +struct CThostFtdcQrySyncDepositField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///出入金流水号 + TThostFtdcDepositSeqNoType DepositSeqNo; +}; + +///查询投资者结算结果 +struct CThostFtdcQrySettlementInfoField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易日 + TThostFtdcDateType TradingDay; +}; + +///查询交易所保证金率 +struct CThostFtdcQryExchangeMarginRateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; +}; + +///查询交易所调整保证金率 +struct CThostFtdcQryExchangeMarginRateAdjustField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; +}; + +///查询汇率 +struct CThostFtdcQryExchangeRateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///源币种 + TThostFtdcCurrencyIDType FromCurrencyID; + ///目标币种 + TThostFtdcCurrencyIDType ToCurrencyID; +}; + +///查询货币质押流水 +struct CThostFtdcQrySyncFundMortgageField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///货币质押流水号 + TThostFtdcDepositSeqNoType MortgageSeqNo; +}; + +///查询报单 +struct CThostFtdcQryHisOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///开始时间 + TThostFtdcTimeType InsertTimeStart; + ///结束时间 + TThostFtdcTimeType InsertTimeEnd; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; +}; + +///当前期权合约最小保证金 +struct CThostFtdcOptionInstrMiniMarginField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///单位(手)期权合约最小保证金 + TThostFtdcMoneyType MinMargin; + ///取值方式 + TThostFtdcValueMethodType ValueMethod; + ///是否跟随交易所收取 + TThostFtdcBoolType IsRelative; +}; + +///当前期权合约保证金调整系数 +struct CThostFtdcOptionInstrMarginAdjustField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///投机空头保证金调整系数 + TThostFtdcRatioType SShortMarginRatioByMoney; + ///投机空头保证金调整系数 + TThostFtdcMoneyType SShortMarginRatioByVolume; + ///保值空头保证金调整系数 + TThostFtdcRatioType HShortMarginRatioByMoney; + ///保值空头保证金调整系数 + TThostFtdcMoneyType HShortMarginRatioByVolume; + ///套利空头保证金调整系数 + TThostFtdcRatioType AShortMarginRatioByMoney; + ///套利空头保证金调整系数 + TThostFtdcMoneyType AShortMarginRatioByVolume; + ///是否跟随交易所收取 + TThostFtdcBoolType IsRelative; +}; + +///当前期权合约手续费的详细内容 +struct CThostFtdcOptionInstrCommRateField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///开仓手续费率 + TThostFtdcRatioType OpenRatioByMoney; + ///开仓手续费 + TThostFtdcRatioType OpenRatioByVolume; + ///平仓手续费率 + TThostFtdcRatioType CloseRatioByMoney; + ///平仓手续费 + TThostFtdcRatioType CloseRatioByVolume; + ///平今手续费率 + TThostFtdcRatioType CloseTodayRatioByMoney; + ///平今手续费 + TThostFtdcRatioType CloseTodayRatioByVolume; + ///执行手续费率 + TThostFtdcRatioType StrikeRatioByMoney; + ///执行手续费 + TThostFtdcRatioType StrikeRatioByVolume; +}; + +///期权交易成本 +struct CThostFtdcOptionInstrTradeCostField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///期权合约保证金不变部分 + TThostFtdcMoneyType FixedMargin; + ///期权合约最小保证金 + TThostFtdcMoneyType MiniMargin; + ///期权合约权利金 + TThostFtdcMoneyType Royalty; + ///交易所期权合约保证金不变部分 + TThostFtdcMoneyType ExchFixedMargin; + ///交易所期权合约最小保证金 + TThostFtdcMoneyType ExchMiniMargin; +}; + +///期权交易成本查询 +struct CThostFtdcQryOptionInstrTradeCostField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///期权合约报价 + TThostFtdcPriceType InputPrice; + ///标的价格,填0则用昨结算价 + TThostFtdcPriceType UnderlyingPrice; +}; + +///期权手续费率查询 +struct CThostFtdcQryOptionInstrCommRateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///股指现货指数 +struct CThostFtdcIndexPriceField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///指数现货收盘价 + TThostFtdcPriceType ClosePrice; +}; + +///输入的执行宣告 +struct CThostFtdcInputExecOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///执行宣告引用 + TThostFtdcOrderRefType ExecOrderRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///数量 + TThostFtdcVolumeType Volume; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///开平标志 + TThostFtdcOffsetFlagType OffsetFlag; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///执行类型 + TThostFtdcActionTypeType ActionType; + ///保留头寸申请的持仓方向 + TThostFtdcPosiDirectionType PosiDirection; + ///期权行权后是否保留期货头寸的标记 + TThostFtdcExecOrderPositionFlagType ReservePositionFlag; + ///期权行权后生成的头寸是否自动平仓 + TThostFtdcExecOrderCloseFlagType CloseFlag; +}; + +///输入执行宣告操作 +struct CThostFtdcInputExecOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///执行宣告操作引用 + TThostFtdcOrderActionRefType ExecOrderActionRef; + ///执行宣告引用 + TThostFtdcOrderRefType ExecOrderRef; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///执行宣告操作编号 + TThostFtdcExecOrderSysIDType ExecOrderSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///用户代码 + TThostFtdcUserIDType UserID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///执行宣告 +struct CThostFtdcExecOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///执行宣告引用 + TThostFtdcOrderRefType ExecOrderRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///数量 + TThostFtdcVolumeType Volume; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///开平标志 + TThostFtdcOffsetFlagType OffsetFlag; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///执行类型 + TThostFtdcActionTypeType ActionType; + ///保留头寸申请的持仓方向 + TThostFtdcPosiDirectionType PosiDirection; + ///期权行权后是否保留期货头寸的标记 + TThostFtdcExecOrderPositionFlagType ReservePositionFlag; + ///期权行权后生成的头寸是否自动平仓 + TThostFtdcExecOrderCloseFlagType CloseFlag; + ///本地执行宣告编号 + TThostFtdcOrderLocalIDType ExecOrderLocalID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///执行宣告提交状态 + TThostFtdcOrderSubmitStatusType OrderSubmitStatus; + ///报单提示序号 + TThostFtdcSequenceNoType NotifySequence; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///执行宣告编号 + TThostFtdcExecOrderSysIDType ExecOrderSysID; + ///报单日期 + TThostFtdcDateType InsertDate; + ///插入时间 + TThostFtdcTimeType InsertTime; + ///撤销时间 + TThostFtdcTimeType CancelTime; + ///执行结果 + TThostFtdcExecResultType ExecResult; + ///结算会员编号 + TThostFtdcParticipantIDType ClearingPartID; + ///序号 + TThostFtdcSequenceNoType SequenceNo; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; + ///状态信息 + TThostFtdcErrorMsgType StatusMsg; + ///操作用户代码 + TThostFtdcUserIDType ActiveUserID; + ///经纪公司报单编号 + TThostFtdcSequenceNoType BrokerExecOrderSeq; +}; + +///执行宣告操作 +struct CThostFtdcExecOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///执行宣告操作引用 + TThostFtdcOrderActionRefType ExecOrderActionRef; + ///执行宣告引用 + TThostFtdcOrderRefType ExecOrderRef; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///执行宣告操作编号 + TThostFtdcExecOrderSysIDType ExecOrderSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///操作日期 + TThostFtdcDateType ActionDate; + ///操作时间 + TThostFtdcTimeType ActionTime; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地执行宣告编号 + TThostFtdcOrderLocalIDType ExecOrderLocalID; + ///操作本地编号 + TThostFtdcOrderLocalIDType ActionLocalID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///报单操作状态 + TThostFtdcOrderActionStatusType OrderActionStatus; + ///用户代码 + TThostFtdcUserIDType UserID; + ///执行类型 + TThostFtdcActionTypeType ActionType; + ///状态信息 + TThostFtdcErrorMsgType StatusMsg; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///执行宣告查询 +struct CThostFtdcQryExecOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///执行宣告编号 + TThostFtdcExecOrderSysIDType ExecOrderSysID; + ///开始时间 + TThostFtdcTimeType InsertTimeStart; + ///结束时间 + TThostFtdcTimeType InsertTimeEnd; +}; + +///交易所执行宣告信息 +struct CThostFtdcExchangeExecOrderField +{ + ///数量 + TThostFtdcVolumeType Volume; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///开平标志 + TThostFtdcOffsetFlagType OffsetFlag; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///执行类型 + TThostFtdcActionTypeType ActionType; + ///保留头寸申请的持仓方向 + TThostFtdcPosiDirectionType PosiDirection; + ///期权行权后是否保留期货头寸的标记 + TThostFtdcExecOrderPositionFlagType ReservePositionFlag; + ///期权行权后生成的头寸是否自动平仓 + TThostFtdcExecOrderCloseFlagType CloseFlag; + ///本地执行宣告编号 + TThostFtdcOrderLocalIDType ExecOrderLocalID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///执行宣告提交状态 + TThostFtdcOrderSubmitStatusType OrderSubmitStatus; + ///报单提示序号 + TThostFtdcSequenceNoType NotifySequence; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///执行宣告编号 + TThostFtdcExecOrderSysIDType ExecOrderSysID; + ///报单日期 + TThostFtdcDateType InsertDate; + ///插入时间 + TThostFtdcTimeType InsertTime; + ///撤销时间 + TThostFtdcTimeType CancelTime; + ///执行结果 + TThostFtdcExecResultType ExecResult; + ///结算会员编号 + TThostFtdcParticipantIDType ClearingPartID; + ///序号 + TThostFtdcSequenceNoType SequenceNo; +}; + +///交易所执行宣告查询 +struct CThostFtdcQryExchangeExecOrderField +{ + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///执行宣告操作查询 +struct CThostFtdcQryExecOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; +}; + +///交易所执行宣告操作 +struct CThostFtdcExchangeExecOrderActionField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///执行宣告操作编号 + TThostFtdcExecOrderSysIDType ExecOrderSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///操作日期 + TThostFtdcDateType ActionDate; + ///操作时间 + TThostFtdcTimeType ActionTime; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地执行宣告编号 + TThostFtdcOrderLocalIDType ExecOrderLocalID; + ///操作本地编号 + TThostFtdcOrderLocalIDType ActionLocalID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///报单操作状态 + TThostFtdcOrderActionStatusType OrderActionStatus; + ///用户代码 + TThostFtdcUserIDType UserID; + ///执行类型 + TThostFtdcActionTypeType ActionType; +}; + +///交易所执行宣告操作查询 +struct CThostFtdcQryExchangeExecOrderActionField +{ + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///错误执行宣告 +struct CThostFtdcErrExecOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///执行宣告引用 + TThostFtdcOrderRefType ExecOrderRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///数量 + TThostFtdcVolumeType Volume; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///开平标志 + TThostFtdcOffsetFlagType OffsetFlag; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///执行类型 + TThostFtdcActionTypeType ActionType; + ///保留头寸申请的持仓方向 + TThostFtdcPosiDirectionType PosiDirection; + ///期权行权后是否保留期货头寸的标记 + TThostFtdcExecOrderPositionFlagType ReservePositionFlag; + ///期权行权后生成的头寸是否自动平仓 + TThostFtdcExecOrderCloseFlagType CloseFlag; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///查询错误执行宣告 +struct CThostFtdcQryErrExecOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; +}; + +///错误执行宣告操作 +struct CThostFtdcErrExecOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///执行宣告操作引用 + TThostFtdcOrderActionRefType ExecOrderActionRef; + ///执行宣告引用 + TThostFtdcOrderRefType ExecOrderRef; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///执行宣告操作编号 + TThostFtdcExecOrderSysIDType ExecOrderSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///用户代码 + TThostFtdcUserIDType UserID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///查询错误执行宣告操作 +struct CThostFtdcQryErrExecOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; +}; + +///投资者期权合约交易权限 +struct CThostFtdcOptionInstrTradingRightField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///交易权限 + TThostFtdcTradingRightType TradingRight; +}; + +///查询期权合约交易权限 +struct CThostFtdcQryOptionInstrTradingRightField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///买卖方向 + TThostFtdcDirectionType Direction; +}; + +///输入的询价 +struct CThostFtdcInputForQuoteField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///询价引用 + TThostFtdcOrderRefType ForQuoteRef; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///询价 +struct CThostFtdcForQuoteField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///询价引用 + TThostFtdcOrderRefType ForQuoteRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///本地询价编号 + TThostFtdcOrderLocalIDType ForQuoteLocalID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///报单日期 + TThostFtdcDateType InsertDate; + ///插入时间 + TThostFtdcTimeType InsertTime; + ///询价状态 + TThostFtdcForQuoteStatusType ForQuoteStatus; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///状态信息 + TThostFtdcErrorMsgType StatusMsg; + ///操作用户代码 + TThostFtdcUserIDType ActiveUserID; + ///经纪公司询价编号 + TThostFtdcSequenceNoType BrokerForQutoSeq; +}; + +///询价查询 +struct CThostFtdcQryForQuoteField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///开始时间 + TThostFtdcTimeType InsertTimeStart; + ///结束时间 + TThostFtdcTimeType InsertTimeEnd; +}; + +///交易所询价信息 +struct CThostFtdcExchangeForQuoteField +{ + ///本地询价编号 + TThostFtdcOrderLocalIDType ForQuoteLocalID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///报单日期 + TThostFtdcDateType InsertDate; + ///插入时间 + TThostFtdcTimeType InsertTime; + ///询价状态 + TThostFtdcForQuoteStatusType ForQuoteStatus; +}; + +///交易所询价查询 +struct CThostFtdcQryExchangeForQuoteField +{ + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///输入的报价 +struct CThostFtdcInputQuoteField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///报价引用 + TThostFtdcOrderRefType QuoteRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///卖价格 + TThostFtdcPriceType AskPrice; + ///买价格 + TThostFtdcPriceType BidPrice; + ///卖数量 + TThostFtdcVolumeType AskVolume; + ///买数量 + TThostFtdcVolumeType BidVolume; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///卖开平标志 + TThostFtdcOffsetFlagType AskOffsetFlag; + ///买开平标志 + TThostFtdcOffsetFlagType BidOffsetFlag; + ///卖投机套保标志 + TThostFtdcHedgeFlagType AskHedgeFlag; + ///买投机套保标志 + TThostFtdcHedgeFlagType BidHedgeFlag; +}; + +///输入报价操作 +struct CThostFtdcInputQuoteActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///报价操作引用 + TThostFtdcOrderActionRefType QuoteActionRef; + ///报价引用 + TThostFtdcOrderRefType QuoteRef; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报价操作编号 + TThostFtdcOrderSysIDType QuoteSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///用户代码 + TThostFtdcUserIDType UserID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///报价 +struct CThostFtdcQuoteField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///报价引用 + TThostFtdcOrderRefType QuoteRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///卖价格 + TThostFtdcPriceType AskPrice; + ///买价格 + TThostFtdcPriceType BidPrice; + ///卖数量 + TThostFtdcVolumeType AskVolume; + ///买数量 + TThostFtdcVolumeType BidVolume; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///卖开平标志 + TThostFtdcOffsetFlagType AskOffsetFlag; + ///买开平标志 + TThostFtdcOffsetFlagType BidOffsetFlag; + ///卖投机套保标志 + TThostFtdcHedgeFlagType AskHedgeFlag; + ///买投机套保标志 + TThostFtdcHedgeFlagType BidHedgeFlag; + ///本地报价编号 + TThostFtdcOrderLocalIDType QuoteLocalID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///报价提示序号 + TThostFtdcSequenceNoType NotifySequence; + ///报价提交状态 + TThostFtdcOrderSubmitStatusType OrderSubmitStatus; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///报价编号 + TThostFtdcOrderSysIDType QuoteSysID; + ///报单日期 + TThostFtdcDateType InsertDate; + ///插入时间 + TThostFtdcTimeType InsertTime; + ///撤销时间 + TThostFtdcTimeType CancelTime; + ///报价状态 + TThostFtdcOrderStatusType QuoteStatus; + ///结算会员编号 + TThostFtdcParticipantIDType ClearingPartID; + ///序号 + TThostFtdcSequenceNoType SequenceNo; + ///卖方报单编号 + TThostFtdcOrderSysIDType AskOrderSysID; + ///买方报单编号 + TThostFtdcOrderSysIDType BidOrderSysID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; + ///状态信息 + TThostFtdcErrorMsgType StatusMsg; + ///操作用户代码 + TThostFtdcUserIDType ActiveUserID; + ///经纪公司报价编号 + TThostFtdcSequenceNoType BrokerQuoteSeq; +}; + +///报价操作 +struct CThostFtdcQuoteActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///报价操作引用 + TThostFtdcOrderActionRefType QuoteActionRef; + ///报价引用 + TThostFtdcOrderRefType QuoteRef; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报价操作编号 + TThostFtdcOrderSysIDType QuoteSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///操作日期 + TThostFtdcDateType ActionDate; + ///操作时间 + TThostFtdcTimeType ActionTime; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地报价编号 + TThostFtdcOrderLocalIDType QuoteLocalID; + ///操作本地编号 + TThostFtdcOrderLocalIDType ActionLocalID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///报单操作状态 + TThostFtdcOrderActionStatusType OrderActionStatus; + ///用户代码 + TThostFtdcUserIDType UserID; + ///状态信息 + TThostFtdcErrorMsgType StatusMsg; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///报价查询 +struct CThostFtdcQryQuoteField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报价编号 + TThostFtdcOrderSysIDType QuoteSysID; + ///开始时间 + TThostFtdcTimeType InsertTimeStart; + ///结束时间 + TThostFtdcTimeType InsertTimeEnd; +}; + +///交易所报价信息 +struct CThostFtdcExchangeQuoteField +{ + ///卖价格 + TThostFtdcPriceType AskPrice; + ///买价格 + TThostFtdcPriceType BidPrice; + ///卖数量 + TThostFtdcVolumeType AskVolume; + ///买数量 + TThostFtdcVolumeType BidVolume; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///卖开平标志 + TThostFtdcOffsetFlagType AskOffsetFlag; + ///买开平标志 + TThostFtdcOffsetFlagType BidOffsetFlag; + ///卖投机套保标志 + TThostFtdcHedgeFlagType AskHedgeFlag; + ///买投机套保标志 + TThostFtdcHedgeFlagType BidHedgeFlag; + ///本地报价编号 + TThostFtdcOrderLocalIDType QuoteLocalID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///报价提示序号 + TThostFtdcSequenceNoType NotifySequence; + ///报价提交状态 + TThostFtdcOrderSubmitStatusType OrderSubmitStatus; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///报价编号 + TThostFtdcOrderSysIDType QuoteSysID; + ///报单日期 + TThostFtdcDateType InsertDate; + ///插入时间 + TThostFtdcTimeType InsertTime; + ///撤销时间 + TThostFtdcTimeType CancelTime; + ///报价状态 + TThostFtdcOrderStatusType QuoteStatus; + ///结算会员编号 + TThostFtdcParticipantIDType ClearingPartID; + ///序号 + TThostFtdcSequenceNoType SequenceNo; + ///卖方报单编号 + TThostFtdcOrderSysIDType AskOrderSysID; + ///买方报单编号 + TThostFtdcOrderSysIDType BidOrderSysID; +}; + +///交易所报价查询 +struct CThostFtdcQryExchangeQuoteField +{ + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///报价操作查询 +struct CThostFtdcQryQuoteActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; +}; + +///交易所报价操作 +struct CThostFtdcExchangeQuoteActionField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报价操作编号 + TThostFtdcOrderSysIDType QuoteSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///操作日期 + TThostFtdcDateType ActionDate; + ///操作时间 + TThostFtdcTimeType ActionTime; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地报价编号 + TThostFtdcOrderLocalIDType QuoteLocalID; + ///操作本地编号 + TThostFtdcOrderLocalIDType ActionLocalID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///报单操作状态 + TThostFtdcOrderActionStatusType OrderActionStatus; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///交易所报价操作查询 +struct CThostFtdcQryExchangeQuoteActionField +{ + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///期权合约delta值 +struct CThostFtdcOptionInstrDeltaField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///Delta值 + TThostFtdcRatioType Delta; +}; + +///发给做市商的询价请求 +struct CThostFtdcForQuoteRspField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///询价编号 + TThostFtdcOrderSysIDType ForQuoteSysID; + ///询价时间 + TThostFtdcTimeType ForQuoteTime; + ///业务日期 + TThostFtdcDateType ActionDay; +}; + +///当前期权合约执行偏移值的详细内容 +struct CThostFtdcStrikeOffsetField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///执行偏移值 + TThostFtdcMoneyType Offset; +}; + +///期权执行偏移值查询 +struct CThostFtdcQryStrikeOffsetField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///市场行情 +struct CThostFtdcMarketDataField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///最新价 + TThostFtdcPriceType LastPrice; + ///上次结算价 + TThostFtdcPriceType PreSettlementPrice; + ///昨收盘 + TThostFtdcPriceType PreClosePrice; + ///昨持仓量 + TThostFtdcLargeVolumeType PreOpenInterest; + ///今开盘 + TThostFtdcPriceType OpenPrice; + ///最高价 + TThostFtdcPriceType HighestPrice; + ///最低价 + TThostFtdcPriceType LowestPrice; + ///数量 + TThostFtdcVolumeType Volume; + ///成交金额 + TThostFtdcMoneyType Turnover; + ///持仓量 + TThostFtdcLargeVolumeType OpenInterest; + ///今收盘 + TThostFtdcPriceType ClosePrice; + ///本次结算价 + TThostFtdcPriceType SettlementPrice; + ///涨停板价 + TThostFtdcPriceType UpperLimitPrice; + ///跌停板价 + TThostFtdcPriceType LowerLimitPrice; + ///昨虚实度 + TThostFtdcRatioType PreDelta; + ///今虚实度 + TThostFtdcRatioType CurrDelta; + ///最后修改时间 + TThostFtdcTimeType UpdateTime; + ///最后修改毫秒 + TThostFtdcMillisecType UpdateMillisec; + ///业务日期 + TThostFtdcDateType ActionDay; +}; + +///行情基础属性 +struct CThostFtdcMarketDataBaseField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///上次结算价 + TThostFtdcPriceType PreSettlementPrice; + ///昨收盘 + TThostFtdcPriceType PreClosePrice; + ///昨持仓量 + TThostFtdcLargeVolumeType PreOpenInterest; + ///昨虚实度 + TThostFtdcRatioType PreDelta; +}; + +///行情静态属性 +struct CThostFtdcMarketDataStaticField +{ + ///今开盘 + TThostFtdcPriceType OpenPrice; + ///最高价 + TThostFtdcPriceType HighestPrice; + ///最低价 + TThostFtdcPriceType LowestPrice; + ///今收盘 + TThostFtdcPriceType ClosePrice; + ///涨停板价 + TThostFtdcPriceType UpperLimitPrice; + ///跌停板价 + TThostFtdcPriceType LowerLimitPrice; + ///本次结算价 + TThostFtdcPriceType SettlementPrice; + ///今虚实度 + TThostFtdcRatioType CurrDelta; +}; + +///行情最新成交属性 +struct CThostFtdcMarketDataLastMatchField +{ + ///最新价 + TThostFtdcPriceType LastPrice; + ///数量 + TThostFtdcVolumeType Volume; + ///成交金额 + TThostFtdcMoneyType Turnover; + ///持仓量 + TThostFtdcLargeVolumeType OpenInterest; +}; + +///行情最优价属性 +struct CThostFtdcMarketDataBestPriceField +{ + ///申买价一 + TThostFtdcPriceType BidPrice1; + ///申买量一 + TThostFtdcVolumeType BidVolume1; + ///申卖价一 + TThostFtdcPriceType AskPrice1; + ///申卖量一 + TThostFtdcVolumeType AskVolume1; +}; + +///行情申买二、三属性 +struct CThostFtdcMarketDataBid23Field +{ + ///申买价二 + TThostFtdcPriceType BidPrice2; + ///申买量二 + TThostFtdcVolumeType BidVolume2; + ///申买价三 + TThostFtdcPriceType BidPrice3; + ///申买量三 + TThostFtdcVolumeType BidVolume3; +}; + +///行情申卖二、三属性 +struct CThostFtdcMarketDataAsk23Field +{ + ///申卖价二 + TThostFtdcPriceType AskPrice2; + ///申卖量二 + TThostFtdcVolumeType AskVolume2; + ///申卖价三 + TThostFtdcPriceType AskPrice3; + ///申卖量三 + TThostFtdcVolumeType AskVolume3; +}; + +///行情申买四、五属性 +struct CThostFtdcMarketDataBid45Field +{ + ///申买价四 + TThostFtdcPriceType BidPrice4; + ///申买量四 + TThostFtdcVolumeType BidVolume4; + ///申买价五 + TThostFtdcPriceType BidPrice5; + ///申买量五 + TThostFtdcVolumeType BidVolume5; +}; + +///行情申卖四、五属性 +struct CThostFtdcMarketDataAsk45Field +{ + ///申卖价四 + TThostFtdcPriceType AskPrice4; + ///申卖量四 + TThostFtdcVolumeType AskVolume4; + ///申卖价五 + TThostFtdcPriceType AskPrice5; + ///申卖量五 + TThostFtdcVolumeType AskVolume5; +}; + +///行情更新时间属性 +struct CThostFtdcMarketDataUpdateTimeField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///最后修改时间 + TThostFtdcTimeType UpdateTime; + ///最后修改毫秒 + TThostFtdcMillisecType UpdateMillisec; + ///业务日期 + TThostFtdcDateType ActionDay; +}; + +///行情交易所代码属性 +struct CThostFtdcMarketDataExchangeField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; +}; + +///指定的合约 +struct CThostFtdcSpecificInstrumentField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///合约状态 +struct CThostFtdcInstrumentStatusField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///结算组代码 + TThostFtdcSettlementGroupIDType SettlementGroupID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///合约交易状态 + TThostFtdcInstrumentStatusType InstrumentStatus; + ///交易阶段编号 + TThostFtdcTradingSegmentSNType TradingSegmentSN; + ///进入本状态时间 + TThostFtdcTimeType EnterTime; + ///进入本状态原因 + TThostFtdcInstStatusEnterReasonType EnterReason; +}; + +///查询合约状态 +struct CThostFtdcQryInstrumentStatusField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; +}; + +///投资者账户 +struct CThostFtdcInvestorAccountField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///浮动盈亏算法 +struct CThostFtdcPositionProfitAlgorithmField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///盈亏算法 + TThostFtdcAlgorithmType Algorithm; + ///备注 + TThostFtdcMemoType Memo; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///会员资金折扣 +struct CThostFtdcDiscountField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///资金折扣比例 + TThostFtdcRatioType Discount; +}; + +///查询转帐银行 +struct CThostFtdcQryTransferBankField +{ + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分中心代码 + TThostFtdcBankBrchIDType BankBrchID; +}; + +///转帐银行 +struct CThostFtdcTransferBankField +{ + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分中心代码 + TThostFtdcBankBrchIDType BankBrchID; + ///银行名称 + TThostFtdcBankNameType BankName; + ///是否活跃 + TThostFtdcBoolType IsActive; +}; + +///查询投资者持仓明细 +struct CThostFtdcQryInvestorPositionDetailField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///投资者持仓明细 +struct CThostFtdcInvestorPositionDetailField +{ + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///买卖 + TThostFtdcDirectionType Direction; + ///开仓日期 + TThostFtdcDateType OpenDate; + ///成交编号 + TThostFtdcTradeIDType TradeID; + ///数量 + TThostFtdcVolumeType Volume; + ///开仓价 + TThostFtdcPriceType OpenPrice; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///成交类型 + TThostFtdcTradeTypeType TradeType; + ///组合合约代码 + TThostFtdcInstrumentIDType CombInstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///逐日盯市平仓盈亏 + TThostFtdcMoneyType CloseProfitByDate; + ///逐笔对冲平仓盈亏 + TThostFtdcMoneyType CloseProfitByTrade; + ///逐日盯市持仓盈亏 + TThostFtdcMoneyType PositionProfitByDate; + ///逐笔对冲持仓盈亏 + TThostFtdcMoneyType PositionProfitByTrade; + ///投资者保证金 + TThostFtdcMoneyType Margin; + ///交易所保证金 + TThostFtdcMoneyType ExchMargin; + ///保证金率 + TThostFtdcRatioType MarginRateByMoney; + ///保证金率(按手数) + TThostFtdcRatioType MarginRateByVolume; + ///昨结算价 + TThostFtdcPriceType LastSettlementPrice; + ///结算价 + TThostFtdcPriceType SettlementPrice; + ///平仓量 + TThostFtdcVolumeType CloseVolume; + ///平仓金额 + TThostFtdcMoneyType CloseAmount; +}; + +///资金账户口令域 +struct CThostFtdcTradingAccountPasswordField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///密码 + TThostFtdcPasswordType Password; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///交易所行情报盘机 +struct CThostFtdcMDTraderOfferField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///交易所交易员连接状态 + TThostFtdcTraderConnectStatusType TraderConnectStatus; + ///发出连接请求的日期 + TThostFtdcDateType ConnectRequestDate; + ///发出连接请求的时间 + TThostFtdcTimeType ConnectRequestTime; + ///上次报告日期 + TThostFtdcDateType LastReportDate; + ///上次报告时间 + TThostFtdcTimeType LastReportTime; + ///完成连接日期 + TThostFtdcDateType ConnectDate; + ///完成连接时间 + TThostFtdcTimeType ConnectTime; + ///启动日期 + TThostFtdcDateType StartDate; + ///启动时间 + TThostFtdcTimeType StartTime; + ///交易日 + TThostFtdcDateType TradingDay; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///本席位最大成交编号 + TThostFtdcTradeIDType MaxTradeID; + ///本席位最大报单备拷 + TThostFtdcReturnCodeType MaxOrderMessageReference; +}; + +///查询行情报盘机 +struct CThostFtdcQryMDTraderOfferField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; +}; + +///查询客户通知 +struct CThostFtdcQryNoticeField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; +}; + +///客户通知 +struct CThostFtdcNoticeField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///消息正文 + TThostFtdcContentType Content; + ///经纪公司通知内容序列号 + TThostFtdcSequenceLabelType SequenceLabel; +}; + +///用户权限 +struct CThostFtdcUserRightField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///客户权限类型 + TThostFtdcUserRightTypeType UserRightType; + ///是否禁止 + TThostFtdcBoolType IsForbidden; +}; + +///查询结算信息确认域 +struct CThostFtdcQrySettlementInfoConfirmField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; +}; + +///装载结算信息 +struct CThostFtdcLoadSettlementInfoField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; +}; + +///经纪公司可提资金算法表 +struct CThostFtdcBrokerWithdrawAlgorithmField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///可提资金算法 + TThostFtdcAlgorithmType WithdrawAlgorithm; + ///资金使用率 + TThostFtdcRatioType UsingRatio; + ///可提是否包含平仓盈利 + TThostFtdcIncludeCloseProfitType IncludeCloseProfit; + ///本日无仓且无成交客户是否受可提比例限制 + TThostFtdcAllWithoutTradeType AllWithoutTrade; + ///可用是否包含平仓盈利 + TThostFtdcIncludeCloseProfitType AvailIncludeCloseProfit; + ///是否启用用户事件 + TThostFtdcBoolType IsBrokerUserEvent; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///货币质押比率 + TThostFtdcRatioType FundMortgageRatio; + ///权益算法 + TThostFtdcBalanceAlgorithmType BalanceAlgorithm; +}; + +///资金账户口令变更域 +struct CThostFtdcTradingAccountPasswordUpdateV1Field +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///原来的口令 + TThostFtdcPasswordType OldPassword; + ///新的口令 + TThostFtdcPasswordType NewPassword; +}; + +///资金账户口令变更域 +struct CThostFtdcTradingAccountPasswordUpdateField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///原来的口令 + TThostFtdcPasswordType OldPassword; + ///新的口令 + TThostFtdcPasswordType NewPassword; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///查询组合合约分腿 +struct CThostFtdcQryCombinationLegField +{ + ///组合合约代码 + TThostFtdcInstrumentIDType CombInstrumentID; + ///单腿编号 + TThostFtdcLegIDType LegID; + ///单腿合约代码 + TThostFtdcInstrumentIDType LegInstrumentID; +}; + +///查询组合合约分腿 +struct CThostFtdcQrySyncStatusField +{ + ///交易日 + TThostFtdcDateType TradingDay; +}; + +///组合交易合约的单腿 +struct CThostFtdcCombinationLegField +{ + ///组合合约代码 + TThostFtdcInstrumentIDType CombInstrumentID; + ///单腿编号 + TThostFtdcLegIDType LegID; + ///单腿合约代码 + TThostFtdcInstrumentIDType LegInstrumentID; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///单腿乘数 + TThostFtdcLegMultipleType LegMultiple; + ///派生层数 + TThostFtdcImplyLevelType ImplyLevel; +}; + +///数据同步状态 +struct CThostFtdcSyncStatusField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///数据同步状态 + TThostFtdcDataSyncStatusType DataSyncStatus; +}; + +///查询联系人 +struct CThostFtdcQryLinkManField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; +}; + +///联系人 +struct CThostFtdcLinkManField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///联系人类型 + TThostFtdcPersonTypeType PersonType; + ///证件类型 + TThostFtdcIdCardTypeType IdentifiedCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///名称 + TThostFtdcPartyNameType PersonName; + ///联系电话 + TThostFtdcTelephoneType Telephone; + ///通讯地址 + TThostFtdcAddressType Address; + ///邮政编码 + TThostFtdcZipCodeType ZipCode; + ///优先级 + TThostFtdcPriorityType Priority; + ///开户邮政编码 + TThostFtdcUOAZipCodeType UOAZipCode; + ///全称 + TThostFtdcInvestorFullNameType PersonFullName; +}; + +///查询经纪公司用户事件 +struct CThostFtdcQryBrokerUserEventField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///用户事件类型 + TThostFtdcUserEventTypeType UserEventType; +}; + +///查询经纪公司用户事件 +struct CThostFtdcBrokerUserEventField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///用户事件类型 + TThostFtdcUserEventTypeType UserEventType; + ///用户事件序号 + TThostFtdcSequenceNoType EventSequenceNo; + ///事件发生日期 + TThostFtdcDateType EventDate; + ///事件发生时间 + TThostFtdcTimeType EventTime; + ///用户事件信息 + TThostFtdcUserEventInfoType UserEventInfo; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///查询签约银行请求 +struct CThostFtdcQryContractBankField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分中心代码 + TThostFtdcBankBrchIDType BankBrchID; +}; + +///查询签约银行响应 +struct CThostFtdcContractBankField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分中心代码 + TThostFtdcBankBrchIDType BankBrchID; + ///银行名称 + TThostFtdcBankNameType BankName; +}; + +///投资者组合持仓明细 +struct CThostFtdcInvestorPositionCombineDetailField +{ + ///交易日 + TThostFtdcDateType TradingDay; + ///开仓日期 + TThostFtdcDateType OpenDate; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///组合编号 + TThostFtdcTradeIDType ComTradeID; + ///撮合编号 + TThostFtdcTradeIDType TradeID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///买卖 + TThostFtdcDirectionType Direction; + ///持仓量 + TThostFtdcVolumeType TotalAmt; + ///投资者保证金 + TThostFtdcMoneyType Margin; + ///交易所保证金 + TThostFtdcMoneyType ExchMargin; + ///保证金率 + TThostFtdcRatioType MarginRateByMoney; + ///保证金率(按手数) + TThostFtdcRatioType MarginRateByVolume; + ///单腿编号 + TThostFtdcLegIDType LegID; + ///单腿乘数 + TThostFtdcLegMultipleType LegMultiple; + ///组合持仓合约编码 + TThostFtdcInstrumentIDType CombInstrumentID; + ///成交组号 + TThostFtdcTradeGroupIDType TradeGroupID; +}; + +///预埋单 +struct CThostFtdcParkedOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///报单价格条件 + TThostFtdcOrderPriceTypeType OrderPriceType; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///组合开平标志 + TThostFtdcCombOffsetFlagType CombOffsetFlag; + ///组合投机套保标志 + TThostFtdcCombHedgeFlagType CombHedgeFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量 + TThostFtdcVolumeType VolumeTotalOriginal; + ///有效期类型 + TThostFtdcTimeConditionType TimeCondition; + ///GTD日期 + TThostFtdcDateType GTDDate; + ///成交量类型 + TThostFtdcVolumeConditionType VolumeCondition; + ///最小成交量 + TThostFtdcVolumeType MinVolume; + ///触发条件 + TThostFtdcContingentConditionType ContingentCondition; + ///止损价 + TThostFtdcPriceType StopPrice; + ///强平原因 + TThostFtdcForceCloseReasonType ForceCloseReason; + ///自动挂起标志 + TThostFtdcBoolType IsAutoSuspend; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///用户强评标志 + TThostFtdcBoolType UserForceClose; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///预埋报单编号 + TThostFtdcParkedOrderIDType ParkedOrderID; + ///用户类型 + TThostFtdcUserTypeType UserType; + ///预埋单状态 + TThostFtdcParkedOrderStatusType Status; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; + ///互换单标志 + TThostFtdcBoolType IsSwapOrder; +}; + +///输入预埋单操作 +struct CThostFtdcParkedOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///报单操作引用 + TThostFtdcOrderActionRefType OrderActionRef; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量变化 + TThostFtdcVolumeType VolumeChange; + ///用户代码 + TThostFtdcUserIDType UserID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///预埋撤单单编号 + TThostFtdcParkedOrderActionIDType ParkedOrderActionID; + ///用户类型 + TThostFtdcUserTypeType UserType; + ///预埋撤单状态 + TThostFtdcParkedOrderStatusType Status; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///查询预埋单 +struct CThostFtdcQryParkedOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; +}; + +///查询预埋撤单 +struct CThostFtdcQryParkedOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; +}; + +///删除预埋单 +struct CThostFtdcRemoveParkedOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///预埋报单编号 + TThostFtdcParkedOrderIDType ParkedOrderID; +}; + +///删除预埋撤单 +struct CThostFtdcRemoveParkedOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///预埋撤单编号 + TThostFtdcParkedOrderActionIDType ParkedOrderActionID; +}; + +///经纪公司可提资金算法表 +struct CThostFtdcInvestorWithdrawAlgorithmField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///可提资金比例 + TThostFtdcRatioType UsingRatio; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///货币质押比率 + TThostFtdcRatioType FundMortgageRatio; +}; + +///查询组合持仓明细 +struct CThostFtdcQryInvestorPositionCombineDetailField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///组合持仓合约编码 + TThostFtdcInstrumentIDType CombInstrumentID; +}; + +///成交均价 +struct CThostFtdcMarketDataAveragePriceField +{ + ///当日均价 + TThostFtdcPriceType AveragePrice; +}; + +///校验投资者密码 +struct CThostFtdcVerifyInvestorPasswordField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///密码 + TThostFtdcPasswordType Password; +}; + +///用户IP +struct CThostFtdcUserIPField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///IP地址 + TThostFtdcIPAddressType IPAddress; + ///IP地址掩码 + TThostFtdcIPAddressType IPMask; + ///Mac地址 + TThostFtdcMacAddressType MacAddress; +}; + +///用户事件通知信息 +struct CThostFtdcTradingNoticeInfoField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///发送时间 + TThostFtdcTimeType SendTime; + ///消息正文 + TThostFtdcContentType FieldContent; + ///序列系列号 + TThostFtdcSequenceSeriesType SequenceSeries; + ///序列号 + TThostFtdcSequenceNoType SequenceNo; +}; + +///用户事件通知 +struct CThostFtdcTradingNoticeField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者范围 + TThostFtdcInvestorRangeType InvestorRange; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///序列系列号 + TThostFtdcSequenceSeriesType SequenceSeries; + ///用户代码 + TThostFtdcUserIDType UserID; + ///发送时间 + TThostFtdcTimeType SendTime; + ///序列号 + TThostFtdcSequenceNoType SequenceNo; + ///消息正文 + TThostFtdcContentType FieldContent; +}; + +///查询交易事件通知 +struct CThostFtdcQryTradingNoticeField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; +}; + +///查询错误报单 +struct CThostFtdcQryErrOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; +}; + +///错误报单 +struct CThostFtdcErrOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///报单价格条件 + TThostFtdcOrderPriceTypeType OrderPriceType; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///组合开平标志 + TThostFtdcCombOffsetFlagType CombOffsetFlag; + ///组合投机套保标志 + TThostFtdcCombHedgeFlagType CombHedgeFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量 + TThostFtdcVolumeType VolumeTotalOriginal; + ///有效期类型 + TThostFtdcTimeConditionType TimeCondition; + ///GTD日期 + TThostFtdcDateType GTDDate; + ///成交量类型 + TThostFtdcVolumeConditionType VolumeCondition; + ///最小成交量 + TThostFtdcVolumeType MinVolume; + ///触发条件 + TThostFtdcContingentConditionType ContingentCondition; + ///止损价 + TThostFtdcPriceType StopPrice; + ///强平原因 + TThostFtdcForceCloseReasonType ForceCloseReason; + ///自动挂起标志 + TThostFtdcBoolType IsAutoSuspend; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///用户强评标志 + TThostFtdcBoolType UserForceClose; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; + ///互换单标志 + TThostFtdcBoolType IsSwapOrder; +}; + +///查询错误报单操作 +struct CThostFtdcErrorConditionalOrderField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///用户代码 + TThostFtdcUserIDType UserID; + ///报单价格条件 + TThostFtdcOrderPriceTypeType OrderPriceType; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///组合开平标志 + TThostFtdcCombOffsetFlagType CombOffsetFlag; + ///组合投机套保标志 + TThostFtdcCombHedgeFlagType CombHedgeFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量 + TThostFtdcVolumeType VolumeTotalOriginal; + ///有效期类型 + TThostFtdcTimeConditionType TimeCondition; + ///GTD日期 + TThostFtdcDateType GTDDate; + ///成交量类型 + TThostFtdcVolumeConditionType VolumeCondition; + ///最小成交量 + TThostFtdcVolumeType MinVolume; + ///触发条件 + TThostFtdcContingentConditionType ContingentCondition; + ///止损价 + TThostFtdcPriceType StopPrice; + ///强平原因 + TThostFtdcForceCloseReasonType ForceCloseReason; + ///自动挂起标志 + TThostFtdcBoolType IsAutoSuspend; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///合约在交易所的代码 + TThostFtdcExchangeInstIDType ExchangeInstID; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///报单提交状态 + TThostFtdcOrderSubmitStatusType OrderSubmitStatus; + ///报单提示序号 + TThostFtdcSequenceNoType NotifySequence; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///报单来源 + TThostFtdcOrderSourceType OrderSource; + ///报单状态 + TThostFtdcOrderStatusType OrderStatus; + ///报单类型 + TThostFtdcOrderTypeType OrderType; + ///今成交数量 + TThostFtdcVolumeType VolumeTraded; + ///剩余数量 + TThostFtdcVolumeType VolumeTotal; + ///报单日期 + TThostFtdcDateType InsertDate; + ///委托时间 + TThostFtdcTimeType InsertTime; + ///激活时间 + TThostFtdcTimeType ActiveTime; + ///挂起时间 + TThostFtdcTimeType SuspendTime; + ///最后修改时间 + TThostFtdcTimeType UpdateTime; + ///撤销时间 + TThostFtdcTimeType CancelTime; + ///最后修改交易所交易员代码 + TThostFtdcTraderIDType ActiveTraderID; + ///结算会员编号 + TThostFtdcParticipantIDType ClearingPartID; + ///序号 + TThostFtdcSequenceNoType SequenceNo; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///用户端产品信息 + TThostFtdcProductInfoType UserProductInfo; + ///状态信息 + TThostFtdcErrorMsgType StatusMsg; + ///用户强评标志 + TThostFtdcBoolType UserForceClose; + ///操作用户代码 + TThostFtdcUserIDType ActiveUserID; + ///经纪公司报单编号 + TThostFtdcSequenceNoType BrokerOrderSeq; + ///相关报单 + TThostFtdcOrderSysIDType RelativeOrderSysID; + ///郑商所成交数量 + TThostFtdcVolumeType ZCETotalTradedVolume; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; + ///互换单标志 + TThostFtdcBoolType IsSwapOrder; +}; + +///查询错误报单操作 +struct CThostFtdcQryErrOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; +}; + +///错误报单操作 +struct CThostFtdcErrOrderActionField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///报单操作引用 + TThostFtdcOrderActionRefType OrderActionRef; + ///报单引用 + TThostFtdcOrderRefType OrderRef; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///前置编号 + TThostFtdcFrontIDType FrontID; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///报单编号 + TThostFtdcOrderSysIDType OrderSysID; + ///操作标志 + TThostFtdcActionFlagType ActionFlag; + ///价格 + TThostFtdcPriceType LimitPrice; + ///数量变化 + TThostFtdcVolumeType VolumeChange; + ///操作日期 + TThostFtdcDateType ActionDate; + ///操作时间 + TThostFtdcTimeType ActionTime; + ///交易所交易员代码 + TThostFtdcTraderIDType TraderID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///本地报单编号 + TThostFtdcOrderLocalIDType OrderLocalID; + ///操作本地编号 + TThostFtdcOrderLocalIDType ActionLocalID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///客户代码 + TThostFtdcClientIDType ClientID; + ///业务单元 + TThostFtdcBusinessUnitType BusinessUnit; + ///报单操作状态 + TThostFtdcOrderActionStatusType OrderActionStatus; + ///用户代码 + TThostFtdcUserIDType UserID; + ///状态信息 + TThostFtdcErrorMsgType StatusMsg; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///查询交易所状态 +struct CThostFtdcQryExchangeSequenceField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; +}; + +///交易所状态 +struct CThostFtdcExchangeSequenceField +{ + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///序号 + TThostFtdcSequenceNoType SequenceNo; + ///合约交易状态 + TThostFtdcInstrumentStatusType MarketStatus; +}; + +///根据价格查询最大报单数量 +struct CThostFtdcQueryMaxOrderVolumeWithPriceField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///开平标志 + TThostFtdcOffsetFlagType OffsetFlag; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///最大允许报单数量 + TThostFtdcVolumeType MaxVolume; + ///报单价格 + TThostFtdcPriceType Price; +}; + +///查询经纪公司交易参数 +struct CThostFtdcQryBrokerTradingParamsField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///经纪公司交易参数 +struct CThostFtdcBrokerTradingParamsField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///保证金价格类型 + TThostFtdcMarginPriceTypeType MarginPriceType; + ///盈亏算法 + TThostFtdcAlgorithmType Algorithm; + ///可用是否包含平仓盈利 + TThostFtdcIncludeCloseProfitType AvailIncludeCloseProfit; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///期权权利金价格类型 + TThostFtdcOptionRoyaltyPriceTypeType OptionRoyaltyPriceType; +}; + +///查询经纪公司交易算法 +struct CThostFtdcQryBrokerTradingAlgosField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///经纪公司交易算法 +struct CThostFtdcBrokerTradingAlgosField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///持仓处理算法编号 + TThostFtdcHandlePositionAlgoIDType HandlePositionAlgoID; + ///寻找保证金率算法编号 + TThostFtdcFindMarginRateAlgoIDType FindMarginRateAlgoID; + ///资金处理算法编号 + TThostFtdcHandleTradingAccountAlgoIDType HandleTradingAccountAlgoID; +}; + +///查询经纪公司资金 +struct CThostFtdcQueryBrokerDepositField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; +}; + +///经纪公司资金 +struct CThostFtdcBrokerDepositField +{ + ///交易日期 + TThostFtdcTradeDateType TradingDay; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///会员代码 + TThostFtdcParticipantIDType ParticipantID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///上次结算准备金 + TThostFtdcMoneyType PreBalance; + ///当前保证金总额 + TThostFtdcMoneyType CurrMargin; + ///平仓盈亏 + TThostFtdcMoneyType CloseProfit; + ///期货结算准备金 + TThostFtdcMoneyType Balance; + ///入金金额 + TThostFtdcMoneyType Deposit; + ///出金金额 + TThostFtdcMoneyType Withdraw; + ///可提资金 + TThostFtdcMoneyType Available; + ///基本准备金 + TThostFtdcMoneyType Reserve; + ///冻结的保证金 + TThostFtdcMoneyType FrozenMargin; +}; + +///查询保证金监管系统经纪公司密钥 +struct CThostFtdcQryCFMMCBrokerKeyField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; +}; + +///保证金监管系统经纪公司密钥 +struct CThostFtdcCFMMCBrokerKeyField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///经纪公司统一编码 + TThostFtdcParticipantIDType ParticipantID; + ///密钥生成日期 + TThostFtdcDateType CreateDate; + ///密钥生成时间 + TThostFtdcTimeType CreateTime; + ///密钥编号 + TThostFtdcSequenceNoType KeyID; + ///动态密钥 + TThostFtdcCFMMCKeyType CurrentKey; + ///动态密钥类型 + TThostFtdcCFMMCKeyKindType KeyKind; +}; + +///保证金监管系统经纪公司资金账户密钥 +struct CThostFtdcCFMMCTradingAccountKeyField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///经纪公司统一编码 + TThostFtdcParticipantIDType ParticipantID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///密钥编号 + TThostFtdcSequenceNoType KeyID; + ///动态密钥 + TThostFtdcCFMMCKeyType CurrentKey; +}; + +///请求查询保证金监管系统经纪公司资金账户密钥 +struct CThostFtdcQryCFMMCTradingAccountKeyField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; +}; + +///用户动态令牌参数 +struct CThostFtdcBrokerUserOTPParamField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///动态令牌提供商 + TThostFtdcOTPVendorsIDType OTPVendorsID; + ///动态令牌序列号 + TThostFtdcSerialNumberType SerialNumber; + ///令牌密钥 + TThostFtdcAuthKeyType AuthKey; + ///漂移值 + TThostFtdcLastDriftType LastDrift; + ///成功值 + TThostFtdcLastSuccessType LastSuccess; + ///动态令牌类型 + TThostFtdcOTPTypeType OTPType; +}; + +///手工同步用户动态令牌 +struct CThostFtdcManualSyncBrokerUserOTPField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///动态令牌类型 + TThostFtdcOTPTypeType OTPType; + ///第一个动态密码 + TThostFtdcPasswordType FirstOTP; + ///第二个动态密码 + TThostFtdcPasswordType SecondOTP; +}; + +///投资者手续费率模板 +struct CThostFtdcCommRateModelField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///手续费率模板代码 + TThostFtdcInvestorIDType CommModelID; + ///模板名称 + TThostFtdcCommModelNameType CommModelName; +}; + +///请求查询投资者手续费率模板 +struct CThostFtdcQryCommRateModelField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///手续费率模板代码 + TThostFtdcInvestorIDType CommModelID; +}; + +///投资者保证金率模板 +struct CThostFtdcMarginModelField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///保证金率模板代码 + TThostFtdcInvestorIDType MarginModelID; + ///模板名称 + TThostFtdcCommModelNameType MarginModelName; +}; + +///请求查询投资者保证金率模板 +struct CThostFtdcQryMarginModelField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///保证金率模板代码 + TThostFtdcInvestorIDType MarginModelID; +}; + +///仓单折抵信息 +struct CThostFtdcEWarrantOffsetField +{ + ///交易日期 + TThostFtdcTradeDateType TradingDay; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; + ///买卖方向 + TThostFtdcDirectionType Direction; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; + ///数量 + TThostFtdcVolumeType Volume; +}; + +///查询仓单折抵信息 +struct CThostFtdcQryEWarrantOffsetField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易所代码 + TThostFtdcExchangeIDType ExchangeID; + ///合约代码 + TThostFtdcInstrumentIDType InstrumentID; +}; + +///查询投资者品种/跨品种保证金 +struct CThostFtdcQryInvestorProductGroupMarginField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///品种/跨品种标示 + TThostFtdcInstrumentIDType ProductGroupID; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; +}; + +///投资者品种/跨品种保证金 +struct CThostFtdcInvestorProductGroupMarginField +{ + ///品种/跨品种标示 + TThostFtdcInstrumentIDType ProductGroupID; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///交易日 + TThostFtdcDateType TradingDay; + ///结算编号 + TThostFtdcSettlementIDType SettlementID; + ///冻结的保证金 + TThostFtdcMoneyType FrozenMargin; + ///多头冻结的保证金 + TThostFtdcMoneyType LongFrozenMargin; + ///空头冻结的保证金 + TThostFtdcMoneyType ShortFrozenMargin; + ///占用的保证金 + TThostFtdcMoneyType UseMargin; + ///多头保证金 + TThostFtdcMoneyType LongUseMargin; + ///空头保证金 + TThostFtdcMoneyType ShortUseMargin; + ///交易所保证金 + TThostFtdcMoneyType ExchMargin; + ///交易所多头保证金 + TThostFtdcMoneyType LongExchMargin; + ///交易所空头保证金 + TThostFtdcMoneyType ShortExchMargin; + ///平仓盈亏 + TThostFtdcMoneyType CloseProfit; + ///冻结的手续费 + TThostFtdcMoneyType FrozenCommission; + ///手续费 + TThostFtdcMoneyType Commission; + ///冻结的资金 + TThostFtdcMoneyType FrozenCash; + ///资金差额 + TThostFtdcMoneyType CashIn; + ///持仓盈亏 + TThostFtdcMoneyType PositionProfit; + ///折抵总金额 + TThostFtdcMoneyType OffsetAmount; + ///多头折抵总金额 + TThostFtdcMoneyType LongOffsetAmount; + ///空头折抵总金额 + TThostFtdcMoneyType ShortOffsetAmount; + ///交易所折抵总金额 + TThostFtdcMoneyType ExchOffsetAmount; + ///交易所多头折抵总金额 + TThostFtdcMoneyType LongExchOffsetAmount; + ///交易所空头折抵总金额 + TThostFtdcMoneyType ShortExchOffsetAmount; + ///投机套保标志 + TThostFtdcHedgeFlagType HedgeFlag; +}; + +///转帐开户请求 +struct CThostFtdcReqOpenAccountField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///性别 + TThostFtdcGenderType Gender; + ///国家代码 + TThostFtdcCountryCodeType CountryCode; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///地址 + TThostFtdcAddressType Address; + ///邮编 + TThostFtdcZipCodeType ZipCode; + ///电话号码 + TThostFtdcTelephoneType Telephone; + ///手机 + TThostFtdcMobilePhoneType MobilePhone; + ///传真 + TThostFtdcFaxType Fax; + ///电子邮件 + TThostFtdcEMailType EMail; + ///资金账户状态 + TThostFtdcMoneyAccountStatusType MoneyAccountStatus; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///汇钞标志 + TThostFtdcCashExchangeCodeType CashExchangeCode; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///交易ID + TThostFtdcTIDType TID; + ///用户标识 + TThostFtdcUserIDType UserID; +}; + +///转帐销户请求 +struct CThostFtdcReqCancelAccountField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///性别 + TThostFtdcGenderType Gender; + ///国家代码 + TThostFtdcCountryCodeType CountryCode; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///地址 + TThostFtdcAddressType Address; + ///邮编 + TThostFtdcZipCodeType ZipCode; + ///电话号码 + TThostFtdcTelephoneType Telephone; + ///手机 + TThostFtdcMobilePhoneType MobilePhone; + ///传真 + TThostFtdcFaxType Fax; + ///电子邮件 + TThostFtdcEMailType EMail; + ///资金账户状态 + TThostFtdcMoneyAccountStatusType MoneyAccountStatus; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///汇钞标志 + TThostFtdcCashExchangeCodeType CashExchangeCode; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///交易ID + TThostFtdcTIDType TID; + ///用户标识 + TThostFtdcUserIDType UserID; +}; + +///变更银行账户请求 +struct CThostFtdcReqChangeAccountField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///性别 + TThostFtdcGenderType Gender; + ///国家代码 + TThostFtdcCountryCodeType CountryCode; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///地址 + TThostFtdcAddressType Address; + ///邮编 + TThostFtdcZipCodeType ZipCode; + ///电话号码 + TThostFtdcTelephoneType Telephone; + ///手机 + TThostFtdcMobilePhoneType MobilePhone; + ///传真 + TThostFtdcFaxType Fax; + ///电子邮件 + TThostFtdcEMailType EMail; + ///资金账户状态 + TThostFtdcMoneyAccountStatusType MoneyAccountStatus; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///新银行帐号 + TThostFtdcBankAccountType NewBankAccount; + ///新银行密码 + TThostFtdcPasswordType NewBankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易ID + TThostFtdcTIDType TID; + ///摘要 + TThostFtdcDigestType Digest; +}; + +///转账请求 +struct CThostFtdcReqTransferField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///期货公司流水号 + TThostFtdcFutureSerialType FutureSerial; + ///用户标识 + TThostFtdcUserIDType UserID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///转帐金额 + TThostFtdcTradeAmountType TradeAmount; + ///期货可取金额 + TThostFtdcTradeAmountType FutureFetchAmount; + ///费用支付标志 + TThostFtdcFeePayFlagType FeePayFlag; + ///应收客户费用 + TThostFtdcCustFeeType CustFee; + ///应收期货公司费用 + TThostFtdcFutureFeeType BrokerFee; + ///发送方给接收方的消息 + TThostFtdcAddInfoType Message; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///转账交易状态 + TThostFtdcTransferStatusType TransferStatus; +}; + +///银行发起银行资金转期货响应 +struct CThostFtdcRspTransferField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///期货公司流水号 + TThostFtdcFutureSerialType FutureSerial; + ///用户标识 + TThostFtdcUserIDType UserID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///转帐金额 + TThostFtdcTradeAmountType TradeAmount; + ///期货可取金额 + TThostFtdcTradeAmountType FutureFetchAmount; + ///费用支付标志 + TThostFtdcFeePayFlagType FeePayFlag; + ///应收客户费用 + TThostFtdcCustFeeType CustFee; + ///应收期货公司费用 + TThostFtdcFutureFeeType BrokerFee; + ///发送方给接收方的消息 + TThostFtdcAddInfoType Message; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///转账交易状态 + TThostFtdcTransferStatusType TransferStatus; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///冲正请求 +struct CThostFtdcReqRepealField +{ + ///冲正时间间隔 + TThostFtdcRepealTimeIntervalType RepealTimeInterval; + ///已经冲正次数 + TThostFtdcRepealedTimesType RepealedTimes; + ///银行冲正标志 + TThostFtdcBankRepealFlagType BankRepealFlag; + ///期商冲正标志 + TThostFtdcBrokerRepealFlagType BrokerRepealFlag; + ///被冲正平台流水号 + TThostFtdcPlateSerialType PlateRepealSerial; + ///被冲正银行流水号 + TThostFtdcBankSerialType BankRepealSerial; + ///被冲正期货流水号 + TThostFtdcFutureSerialType FutureRepealSerial; + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///期货公司流水号 + TThostFtdcFutureSerialType FutureSerial; + ///用户标识 + TThostFtdcUserIDType UserID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///转帐金额 + TThostFtdcTradeAmountType TradeAmount; + ///期货可取金额 + TThostFtdcTradeAmountType FutureFetchAmount; + ///费用支付标志 + TThostFtdcFeePayFlagType FeePayFlag; + ///应收客户费用 + TThostFtdcCustFeeType CustFee; + ///应收期货公司费用 + TThostFtdcFutureFeeType BrokerFee; + ///发送方给接收方的消息 + TThostFtdcAddInfoType Message; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///转账交易状态 + TThostFtdcTransferStatusType TransferStatus; +}; + +///冲正响应 +struct CThostFtdcRspRepealField +{ + ///冲正时间间隔 + TThostFtdcRepealTimeIntervalType RepealTimeInterval; + ///已经冲正次数 + TThostFtdcRepealedTimesType RepealedTimes; + ///银行冲正标志 + TThostFtdcBankRepealFlagType BankRepealFlag; + ///期商冲正标志 + TThostFtdcBrokerRepealFlagType BrokerRepealFlag; + ///被冲正平台流水号 + TThostFtdcPlateSerialType PlateRepealSerial; + ///被冲正银行流水号 + TThostFtdcBankSerialType BankRepealSerial; + ///被冲正期货流水号 + TThostFtdcFutureSerialType FutureRepealSerial; + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///期货公司流水号 + TThostFtdcFutureSerialType FutureSerial; + ///用户标识 + TThostFtdcUserIDType UserID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///转帐金额 + TThostFtdcTradeAmountType TradeAmount; + ///期货可取金额 + TThostFtdcTradeAmountType FutureFetchAmount; + ///费用支付标志 + TThostFtdcFeePayFlagType FeePayFlag; + ///应收客户费用 + TThostFtdcCustFeeType CustFee; + ///应收期货公司费用 + TThostFtdcFutureFeeType BrokerFee; + ///发送方给接收方的消息 + TThostFtdcAddInfoType Message; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///转账交易状态 + TThostFtdcTransferStatusType TransferStatus; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///查询账户信息请求 +struct CThostFtdcReqQueryAccountField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///期货公司流水号 + TThostFtdcFutureSerialType FutureSerial; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; +}; + +///查询账户信息响应 +struct CThostFtdcRspQueryAccountField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///期货公司流水号 + TThostFtdcFutureSerialType FutureSerial; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///银行可用金额 + TThostFtdcTradeAmountType BankUseAmount; + ///银行可取金额 + TThostFtdcTradeAmountType BankFetchAmount; +}; + +///期商签到签退 +struct CThostFtdcFutureSignIOField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///摘要 + TThostFtdcDigestType Digest; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; +}; + +///期商签到响应 +struct CThostFtdcRspFutureSignInField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///摘要 + TThostFtdcDigestType Digest; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; + ///PIN密钥 + TThostFtdcPasswordKeyType PinKey; + ///MAC密钥 + TThostFtdcPasswordKeyType MacKey; +}; + +///期商签退请求 +struct CThostFtdcReqFutureSignOutField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///摘要 + TThostFtdcDigestType Digest; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; +}; + +///期商签退响应 +struct CThostFtdcRspFutureSignOutField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///摘要 + TThostFtdcDigestType Digest; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///查询指定流水号的交易结果请求 +struct CThostFtdcReqQueryTradeResultBySerialField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///流水号 + TThostFtdcSerialType Reference; + ///本流水号发布者的机构类型 + TThostFtdcInstitutionTypeType RefrenceIssureType; + ///本流水号发布者机构编码 + TThostFtdcOrganCodeType RefrenceIssure; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///转帐金额 + TThostFtdcTradeAmountType TradeAmount; + ///摘要 + TThostFtdcDigestType Digest; +}; + +///查询指定流水号的交易结果响应 +struct CThostFtdcRspQueryTradeResultBySerialField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; + ///流水号 + TThostFtdcSerialType Reference; + ///本流水号发布者的机构类型 + TThostFtdcInstitutionTypeType RefrenceIssureType; + ///本流水号发布者机构编码 + TThostFtdcOrganCodeType RefrenceIssure; + ///原始返回代码 + TThostFtdcReturnCodeType OriginReturnCode; + ///原始返回码描述 + TThostFtdcDescrInfoForReturnCodeType OriginDescrInfoForReturnCode; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///转帐金额 + TThostFtdcTradeAmountType TradeAmount; + ///摘要 + TThostFtdcDigestType Digest; +}; + +///日终文件就绪请求 +struct CThostFtdcReqDayEndFileReadyField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///文件业务功能 + TThostFtdcFileBusinessCodeType FileBusinessCode; + ///摘要 + TThostFtdcDigestType Digest; +}; + +///返回结果 +struct CThostFtdcReturnResultField +{ + ///返回代码 + TThostFtdcReturnCodeType ReturnCode; + ///返回码描述 + TThostFtdcDescrInfoForReturnCodeType DescrInfoForReturnCode; +}; + +///验证期货资金密码 +struct CThostFtdcVerifyFuturePasswordField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///交易ID + TThostFtdcTIDType TID; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///验证客户信息 +struct CThostFtdcVerifyCustInfoField +{ + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; +}; + +///验证期货资金密码和客户信息 +struct CThostFtdcVerifyFuturePasswordAndCustInfoField +{ + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///验证期货资金密码和客户信息 +struct CThostFtdcDepositResultInformField +{ + ///出入金流水号,该流水号为银期报盘返回的流水号 + TThostFtdcDepositSeqNoType DepositSeqNo; + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///入金金额 + TThostFtdcMoneyType Deposit; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///返回代码 + TThostFtdcReturnCodeType ReturnCode; + ///返回码描述 + TThostFtdcDescrInfoForReturnCodeType DescrInfoForReturnCode; +}; + +///交易核心向银期报盘发出密钥同步请求 +struct CThostFtdcReqSyncKeyField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///交易核心给银期报盘的消息 + TThostFtdcAddInfoType Message; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; +}; + +///交易核心向银期报盘发出密钥同步响应 +struct CThostFtdcRspSyncKeyField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///交易核心给银期报盘的消息 + TThostFtdcAddInfoType Message; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///查询账户信息通知 +struct CThostFtdcNotifyQueryAccountField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///期货公司流水号 + TThostFtdcFutureSerialType FutureSerial; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///银行可用金额 + TThostFtdcTradeAmountType BankUseAmount; + ///银行可取金额 + TThostFtdcTradeAmountType BankFetchAmount; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///银期转账交易流水表 +struct CThostFtdcTransferSerialField +{ + ///平台流水号 + TThostFtdcPlateSerialType PlateSerial; + ///交易发起方日期 + TThostFtdcTradeDateType TradeDate; + ///交易日期 + TThostFtdcDateType TradingDay; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///交易代码 + TThostFtdcTradeCodeType TradeCode; + ///会话编号 + TThostFtdcSessionIDType SessionID; + ///银行编码 + TThostFtdcBankIDType BankID; + ///银行分支机构编码 + TThostFtdcBankBrchIDType BankBranchID; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///期货公司编码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///期货公司帐号类型 + TThostFtdcFutureAccTypeType FutureAccType; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///投资者代码 + TThostFtdcInvestorIDType InvestorID; + ///期货公司流水号 + TThostFtdcFutureSerialType FutureSerial; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///交易金额 + TThostFtdcTradeAmountType TradeAmount; + ///应收客户费用 + TThostFtdcCustFeeType CustFee; + ///应收期货公司费用 + TThostFtdcFutureFeeType BrokerFee; + ///有效标志 + TThostFtdcAvailabilityFlagType AvailabilityFlag; + ///操作员 + TThostFtdcOperatorCodeType OperatorCode; + ///新银行帐号 + TThostFtdcBankAccountType BankNewAccount; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///请求查询转帐流水 +struct CThostFtdcQryTransferSerialField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///银行编码 + TThostFtdcBankIDType BankID; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///期商签到通知 +struct CThostFtdcNotifyFutureSignInField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///摘要 + TThostFtdcDigestType Digest; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; + ///PIN密钥 + TThostFtdcPasswordKeyType PinKey; + ///MAC密钥 + TThostFtdcPasswordKeyType MacKey; +}; + +///期商签退通知 +struct CThostFtdcNotifyFutureSignOutField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///摘要 + TThostFtdcDigestType Digest; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///交易核心向银期报盘发出密钥同步处理结果的通知 +struct CThostFtdcNotifySyncKeyField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///交易核心给银期报盘的消息 + TThostFtdcAddInfoType Message; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///请求编号 + TThostFtdcRequestIDType RequestID; + ///交易ID + TThostFtdcTIDType TID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///请求查询银期签约关系 +struct CThostFtdcQryAccountregisterField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///银行编码 + TThostFtdcBankIDType BankID; + ///银行分支机构编码 + TThostFtdcBankBrchIDType BankBranchID; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///客户开销户信息表 +struct CThostFtdcAccountregisterField +{ + ///交易日期 + TThostFtdcTradeDateType TradeDay; + ///银行编码 + TThostFtdcBankIDType BankID; + ///银行分支机构编码 + TThostFtdcBankBrchIDType BankBranchID; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///期货公司编码 + TThostFtdcBrokerIDType BrokerID; + ///期货公司分支机构编码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///开销户类别 + TThostFtdcOpenOrDestroyType OpenOrDestroy; + ///签约日期 + TThostFtdcTradeDateType RegDate; + ///解约日期 + TThostFtdcTradeDateType OutDate; + ///交易ID + TThostFtdcTIDType TID; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; +}; + +///银期开户信息 +struct CThostFtdcOpenAccountField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///性别 + TThostFtdcGenderType Gender; + ///国家代码 + TThostFtdcCountryCodeType CountryCode; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///地址 + TThostFtdcAddressType Address; + ///邮编 + TThostFtdcZipCodeType ZipCode; + ///电话号码 + TThostFtdcTelephoneType Telephone; + ///手机 + TThostFtdcMobilePhoneType MobilePhone; + ///传真 + TThostFtdcFaxType Fax; + ///电子邮件 + TThostFtdcEMailType EMail; + ///资金账户状态 + TThostFtdcMoneyAccountStatusType MoneyAccountStatus; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///汇钞标志 + TThostFtdcCashExchangeCodeType CashExchangeCode; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///交易ID + TThostFtdcTIDType TID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///银期销户信息 +struct CThostFtdcCancelAccountField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///性别 + TThostFtdcGenderType Gender; + ///国家代码 + TThostFtdcCountryCodeType CountryCode; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///地址 + TThostFtdcAddressType Address; + ///邮编 + TThostFtdcZipCodeType ZipCode; + ///电话号码 + TThostFtdcTelephoneType Telephone; + ///手机 + TThostFtdcMobilePhoneType MobilePhone; + ///传真 + TThostFtdcFaxType Fax; + ///电子邮件 + TThostFtdcEMailType EMail; + ///资金账户状态 + TThostFtdcMoneyAccountStatusType MoneyAccountStatus; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///汇钞标志 + TThostFtdcCashExchangeCodeType CashExchangeCode; + ///摘要 + TThostFtdcDigestType Digest; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///渠道标志 + TThostFtdcDeviceIDType DeviceID; + ///期货单位帐号类型 + TThostFtdcBankAccTypeType BankSecuAccType; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///期货单位帐号 + TThostFtdcBankAccountType BankSecuAcc; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易柜员 + TThostFtdcOperNoType OperNo; + ///交易ID + TThostFtdcTIDType TID; + ///用户标识 + TThostFtdcUserIDType UserID; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///银期变更银行账号信息 +struct CThostFtdcChangeAccountField +{ + ///业务功能码 + TThostFtdcTradeCodeType TradeCode; + ///银行代码 + TThostFtdcBankIDType BankID; + ///银行分支机构代码 + TThostFtdcBankBrchIDType BankBranchID; + ///期商代码 + TThostFtdcBrokerIDType BrokerID; + ///期商分支机构代码 + TThostFtdcFutureBranchIDType BrokerBranchID; + ///交易日期 + TThostFtdcTradeDateType TradeDate; + ///交易时间 + TThostFtdcTradeTimeType TradeTime; + ///银行流水号 + TThostFtdcBankSerialType BankSerial; + ///交易系统日期 + TThostFtdcTradeDateType TradingDay; + ///银期平台消息流水号 + TThostFtdcSerialType PlateSerial; + ///最后分片标志 + TThostFtdcLastFragmentType LastFragment; + ///会话号 + TThostFtdcSessionIDType SessionID; + ///客户姓名 + TThostFtdcIndividualNameType CustomerName; + ///证件类型 + TThostFtdcIdCardTypeType IdCardType; + ///证件号码 + TThostFtdcIdentifiedCardNoType IdentifiedCardNo; + ///性别 + TThostFtdcGenderType Gender; + ///国家代码 + TThostFtdcCountryCodeType CountryCode; + ///客户类型 + TThostFtdcCustTypeType CustType; + ///地址 + TThostFtdcAddressType Address; + ///邮编 + TThostFtdcZipCodeType ZipCode; + ///电话号码 + TThostFtdcTelephoneType Telephone; + ///手机 + TThostFtdcMobilePhoneType MobilePhone; + ///传真 + TThostFtdcFaxType Fax; + ///电子邮件 + TThostFtdcEMailType EMail; + ///资金账户状态 + TThostFtdcMoneyAccountStatusType MoneyAccountStatus; + ///银行帐号 + TThostFtdcBankAccountType BankAccount; + ///银行密码 + TThostFtdcPasswordType BankPassWord; + ///新银行帐号 + TThostFtdcBankAccountType NewBankAccount; + ///新银行密码 + TThostFtdcPasswordType NewBankPassWord; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///期货密码 + TThostFtdcPasswordType Password; + ///银行帐号类型 + TThostFtdcBankAccTypeType BankAccType; + ///安装编号 + TThostFtdcInstallIDType InstallID; + ///验证客户证件号码标志 + TThostFtdcYesNoIndicatorType VerifyCertNoFlag; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; + ///期货公司银行编码 + TThostFtdcBankCodingForFutureType BrokerIDByBank; + ///银行密码标志 + TThostFtdcPwdFlagType BankPwdFlag; + ///期货资金密码核对标志 + TThostFtdcPwdFlagType SecuPwdFlag; + ///交易ID + TThostFtdcTIDType TID; + ///摘要 + TThostFtdcDigestType Digest; + ///错误代码 + TThostFtdcErrorIDType ErrorID; + ///错误信息 + TThostFtdcErrorMsgType ErrorMsg; +}; + +///二级代理操作员银期权限 +struct CThostFtdcSecAgentACIDMapField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///资金账户 + TThostFtdcAccountIDType AccountID; + ///币种 + TThostFtdcCurrencyIDType CurrencyID; + ///境外中介机构资金帐号 + TThostFtdcAccountIDType BrokerSecAgentID; +}; + +///二级代理操作员银期权限查询 +struct CThostFtdcQrySecAgentACIDMapField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///资金账户 + TThostFtdcAccountIDType AccountID; + ///币种 + TThostFtdcCurrencyIDType CurrencyID; +}; + +///灾备中心交易权限 +struct CThostFtdcUserRightsAssignField +{ + ///应用单元代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///交易中心代码 + TThostFtdcDRIdentityIDType DRIdentityID; +}; + +///经济公司是否有在本标示的交易权限 +struct CThostFtdcBrokerUserRightAssignField +{ + ///应用单元代码 + TThostFtdcBrokerIDType BrokerID; + ///交易中心代码 + TThostFtdcDRIdentityIDType DRIdentityID; + ///能否交易 + TThostFtdcBoolType Tradeable; +}; + +///灾备交易转换报文 +struct CThostFtdcDRTransferField +{ + ///原交易中心代码 + TThostFtdcDRIdentityIDType OrigDRIdentityID; + ///目标交易中心代码 + TThostFtdcDRIdentityIDType DestDRIdentityID; + ///原应用单元代码 + TThostFtdcBrokerIDType OrigBrokerID; + ///目标易用单元代码 + TThostFtdcBrokerIDType DestBrokerID; +}; + +///Fens用户信息 +struct CThostFtdcFensUserInfoField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; + ///登录模式 + TThostFtdcLoginModeType LoginMode; +}; + +///当前银期所属交易中心 +struct CThostFtdcCurrTransferIdentityField +{ + ///交易中心代码 + TThostFtdcDRIdentityIDType IdentityID; +}; + +///禁止登录用户 +struct CThostFtdcLoginForbiddenUserField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///查询禁止登录用户 +struct CThostFtdcQryLoginForbiddenUserField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///用户代码 + TThostFtdcUserIDType UserID; +}; + +///UDP组播组信息 +struct CThostFtdcMulticastGroupInfoField +{ + ///组播组IP地址 + TThostFtdcIPAddressType GroupIP; + ///组播组IP端口 + TThostFtdcIPPortType GroupPort; + ///源地址 + TThostFtdcIPAddressType SourceIP; +}; + +///资金账户基本准备金 +struct CThostFtdcTradingAccountReserveField +{ + ///经纪公司代码 + TThostFtdcBrokerIDType BrokerID; + ///投资者帐号 + TThostFtdcAccountIDType AccountID; + ///基本准备金 + TThostFtdcMoneyType Reserve; + ///币种代码 + TThostFtdcCurrencyIDType CurrencyID; +}; + + + +#endif diff --git a/vn.ctp/pyscript/ctp_data_type.py b/vn.ctp/pyscript/ctp_data_type.py new file mode 100644 index 00000000..9b7a4ecf --- /dev/null +++ b/vn.ctp/pyscript/ctp_data_type.py @@ -0,0 +1,6263 @@ +# encoding: UTF-8 + +defineDict = {} +typedefDict = {} + +#////////////////////////////////////////////////////////////////////// +#@system 鏂颁竴浠d氦鏄撴墍绯荤粺 +#@company 涓婃捣鏈熻揣淇℃伅鎶鏈湁闄愬叕鍙 +#@file ThostFtdcUserApiDataType.h +#@brief 瀹氫箟浜嗗鎴风鎺ュ彛浣跨敤鐨勪笟鍔℃暟鎹被鍨 +#@history +#20060106 璧甸缚鏄 鍒涘缓璇ユ枃浠 +#////////////////////////////////////////////////////////////////////// + + + +#////////////////////////////////////////////////////////////////////// +#TFtdcTraderIDType鏄竴涓氦鏄撴墍浜ゆ槗鍛樹唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTraderIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInvestorIDType鏄竴涓姇璧勮呬唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcInvestorIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBrokerIDType鏄竴涓粡绾叕鍙镐唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBrokerIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBrokerAbbrType鏄竴涓粡绾叕鍙哥畝绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBrokerAbbrType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBrokerNameType鏄竴涓粡绾叕鍙稿悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBrokerNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExchangeInstIDType鏄竴涓悎绾﹀湪浜ゆ槗鎵鐨勪唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcExchangeInstIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOrderRefType鏄竴涓姤鍗曞紩鐢ㄧ被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOrderRefType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcParticipantIDType鏄竴涓細鍛樹唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcParticipantIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUserIDType鏄竴涓敤鎴蜂唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcUserIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPasswordType鏄竴涓瘑鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPasswordType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcClientIDType鏄竴涓氦鏄撶紪鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcClientIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInstrumentIDType鏄竴涓悎绾︿唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcInstrumentIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcMarketIDType鏄竴涓競鍦轰唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcMarketIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcProductNameType鏄竴涓骇鍝佸悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcProductNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExchangeIDType鏄竴涓氦鏄撴墍浠g爜绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcExchangeIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExchangeNameType鏄竴涓氦鏄撴墍鍚嶇О绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcExchangeNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExchangeAbbrType鏄竴涓氦鏄撴墍绠绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcExchangeAbbrType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExchangeFlagType鏄竴涓氦鏄撴墍鏍囧織绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcExchangeFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcMacAddressType鏄竴涓狹ac鍦板潃绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcMacAddressType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSystemIDType鏄竴涓郴缁熺紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSystemIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExchangePropertyType鏄竴涓氦鏄撴墍灞炴х被鍨 +#////////////////////////////////////////////////////////////////////// +#姝e父 +defineDict["THOST_FTDC_EXP_Normal"] = '0' +#鏍规嵁鎴愪氦鐢熸垚鎶ュ崟 +defineDict["THOST_FTDC_EXP_GenOrderByTrade"] = '1' + +typedefDict["TThostFtdcExchangePropertyType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDateType鏄竴涓棩鏈熺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcDateType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTimeType鏄竴涓椂闂寸被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTimeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcLongTimeType鏄竴涓暱鏃堕棿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcLongTimeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInstrumentNameType鏄竴涓悎绾﹀悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcInstrumentNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSettlementGroupIDType鏄竴涓粨绠楃粍浠g爜绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSettlementGroupIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOrderSysIDType鏄竴涓姤鍗曠紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOrderSysIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTradeIDType鏄竴涓垚浜ょ紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTradeIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCommandTypeType鏄竴涓狣B鍛戒护绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCommandTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcIPAddressType鏄竴涓狪P鍦板潃绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcIPAddressType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcIPPortType鏄竴涓狪P绔彛绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcIPPortType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcProductInfoType鏄竴涓骇鍝佷俊鎭被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcProductInfoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcProtocolInfoType鏄竴涓崗璁俊鎭被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcProtocolInfoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBusinessUnitType鏄竴涓笟鍔″崟鍏冪被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBusinessUnitType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDepositSeqNoType鏄竴涓嚭鍏ラ噾娴佹按鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcDepositSeqNoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcIdentifiedCardNoType鏄竴涓瘉浠跺彿鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcIdentifiedCardNoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcIdCardTypeType鏄竴涓瘉浠剁被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#缁勭粐鏈烘瀯浠g爜 +defineDict["THOST_FTDC_ICT_EID"] = '0' +#涓浗鍏皯韬唤璇 +defineDict["THOST_FTDC_ICT_IDCard"] = '1' +#鍐涘畼璇 +defineDict["THOST_FTDC_ICT_OfficerIDCard"] = '2' +#璀﹀畼璇 +defineDict["THOST_FTDC_ICT_PoliceIDCard"] = '3' +#澹叺璇 +defineDict["THOST_FTDC_ICT_SoldierIDCard"] = '4' +#鎴峰彛绨 +defineDict["THOST_FTDC_ICT_HouseholdRegister"] = '5' +#鎶ょ収 +defineDict["THOST_FTDC_ICT_Passport"] = '6' +#鍙拌優璇 +defineDict["THOST_FTDC_ICT_TaiwanCompatriotIDCard"] = '7' +#鍥炰埂璇 +defineDict["THOST_FTDC_ICT_HomeComingCard"] = '8' +#钀ヤ笟鎵х収鍙 +defineDict["THOST_FTDC_ICT_LicenseNo"] = '9' +#绋庡姟鐧昏鍙/褰撳湴绾崇◣ID +defineDict["THOST_FTDC_ICT_TaxNo"] = 'A' +#娓境灞呮皯鏉ュ線鍐呭湴閫氳璇 +defineDict["THOST_FTDC_ICT_HMMainlandTravelPermit"] = 'B' +#鍙版咕灞呮皯鏉ュ線澶ч檰閫氳璇 +defineDict["THOST_FTDC_ICT_TwMainlandTravelPermit"] = 'C' +#椹剧収 +defineDict["THOST_FTDC_ICT_DrivingLicense"] = 'D' +#褰撳湴绀句繚ID +defineDict["THOST_FTDC_ICT_SocialID"] = 'F' +#褰撳湴韬唤璇 +defineDict["THOST_FTDC_ICT_LocalID"] = 'G' +#鍟嗕笟鐧昏璇 +defineDict["THOST_FTDC_ICT_BusinessRegistration"] = 'H' +#娓境姘镐箙鎬у眳姘戣韩浠借瘉 +defineDict["THOST_FTDC_ICT_HKMCIDCard"] = 'I' +#鍏朵粬璇佷欢 +defineDict["THOST_FTDC_ICT_OtherCard"] = 'x' + +typedefDict["TThostFtdcIdCardTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOrderLocalIDType鏄竴涓湰鍦版姤鍗曠紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOrderLocalIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUserNameType鏄竴涓敤鎴峰悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcUserNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPartyNameType鏄竴涓弬涓庝汉鍚嶇О绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPartyNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcErrorMsgType鏄竴涓敊璇俊鎭被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcErrorMsgType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFieldNameType鏄竴涓瓧娈靛悕绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFieldNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFieldContentType鏄竴涓瓧娈靛唴瀹圭被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFieldContentType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSystemNameType鏄竴涓郴缁熷悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSystemNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcContentType鏄竴涓秷鎭鏂囩被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcContentType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInvestorRangeType鏄竴涓姇璧勮呰寖鍥寸被鍨 +#////////////////////////////////////////////////////////////////////// +#鎵鏈 +defineDict["THOST_FTDC_IR_All"] = '1' +#鎶曡祫鑰呯粍 +defineDict["THOST_FTDC_IR_Group"] = '2' +#鍗曚竴鎶曡祫鑰 +defineDict["THOST_FTDC_IR_Single"] = '3' + +typedefDict["TThostFtdcInvestorRangeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDepartmentRangeType鏄竴涓姇璧勮呰寖鍥寸被鍨 +#////////////////////////////////////////////////////////////////////// +#鎵鏈 +defineDict["THOST_FTDC_DR_All"] = '1' +#缁勭粐鏋舵瀯 +defineDict["THOST_FTDC_DR_Group"] = '2' +#鍗曚竴鎶曡祫鑰 +defineDict["THOST_FTDC_DR_Single"] = '3' + +typedefDict["TThostFtdcDepartmentRangeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDataSyncStatusType鏄竴涓暟鎹悓姝ョ姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈悓姝 +defineDict["THOST_FTDC_DS_Asynchronous"] = '1' +#鍚屾涓 +defineDict["THOST_FTDC_DS_Synchronizing"] = '2' +#宸插悓姝 +defineDict["THOST_FTDC_DS_Synchronized"] = '3' + +typedefDict["TThostFtdcDataSyncStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBrokerDataSyncStatusType鏄竴涓粡绾叕鍙告暟鎹悓姝ョ姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#宸插悓姝 +defineDict["THOST_FTDC_BDS_Synchronized"] = '1' +#鍚屾涓 +defineDict["THOST_FTDC_BDS_Synchronizing"] = '2' + +typedefDict["TThostFtdcBrokerDataSyncStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExchangeConnectStatusType鏄竴涓氦鏄撴墍杩炴帴鐘舵佺被鍨 +#////////////////////////////////////////////////////////////////////// +#娌℃湁浠讳綍杩炴帴 +defineDict["THOST_FTDC_ECS_NoConnection"] = '1' +#宸茬粡鍙戝嚭鍚堢害鏌ヨ璇锋眰 +defineDict["THOST_FTDC_ECS_QryInstrumentSent"] = '2' +#宸茬粡鑾峰彇淇℃伅 +defineDict["THOST_FTDC_ECS_GotInformation"] = '9' + +typedefDict["TThostFtdcExchangeConnectStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTraderConnectStatusType鏄竴涓氦鏄撴墍浜ゆ槗鍛樿繛鎺ョ姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#娌℃湁浠讳綍杩炴帴 +defineDict["THOST_FTDC_TCS_NotConnected"] = '1' +#宸茬粡杩炴帴 +defineDict["THOST_FTDC_TCS_Connected"] = '2' +#宸茬粡鍙戝嚭鍚堢害鏌ヨ璇锋眰 +defineDict["THOST_FTDC_TCS_QryInstrumentSent"] = '3' +#璁㈤槄绉佹湁娴 +defineDict["THOST_FTDC_TCS_SubPrivateFlow"] = '4' + +typedefDict["TThostFtdcTraderConnectStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFunctionCodeType鏄竴涓姛鑳戒唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏁版嵁寮傛鍖 +defineDict["THOST_FTDC_FC_DataAsync"] = '1' +#寮哄埗鐢ㄦ埛鐧诲嚭 +defineDict["THOST_FTDC_FC_ForceUserLogout"] = '2' +#鍙樻洿绠$悊鐢ㄦ埛鍙d护 +defineDict["THOST_FTDC_FC_UserPasswordUpdate"] = '3' +#鍙樻洿缁忕邯鍏徃鍙d护 +defineDict["THOST_FTDC_FC_BrokerPasswordUpdate"] = '4' +#鍙樻洿鎶曡祫鑰呭彛浠 +defineDict["THOST_FTDC_FC_InvestorPasswordUpdate"] = '5' +#鎶ュ崟鎻掑叆 +defineDict["THOST_FTDC_FC_OrderInsert"] = '6' +#鎶ュ崟鎿嶄綔 +defineDict["THOST_FTDC_FC_OrderAction"] = '7' +#鍚屾绯荤粺鏁版嵁 +defineDict["THOST_FTDC_FC_SyncSystemData"] = '8' +#鍚屾缁忕邯鍏徃鏁版嵁 +defineDict["THOST_FTDC_FC_SyncBrokerData"] = '9' +#鎵归噺鍚屾缁忕邯鍏徃鏁版嵁 +defineDict["THOST_FTDC_FC_BachSyncBrokerData"] = 'A' +#瓒呯骇鏌ヨ +defineDict["THOST_FTDC_FC_SuperQuery"] = 'B' +#棰勫煁鎶ュ崟鎻掑叆 +defineDict["THOST_FTDC_FC_ParkedOrderInsert"] = 'C' +#棰勫煁鎶ュ崟鎿嶄綔 +defineDict["THOST_FTDC_FC_ParkedOrderAction"] = 'D' +#鍚屾鍔ㄦ佷护鐗 +defineDict["THOST_FTDC_FC_SyncOTP"] = 'E' +#鍒犻櫎鏈煡鍗 +defineDict["THOST_FTDC_FC_DeleteOrder"] = 'F' + +typedefDict["TThostFtdcFunctionCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBrokerFunctionCodeType鏄竴涓粡绾叕鍙稿姛鑳戒唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +#寮哄埗鐢ㄦ埛鐧诲嚭 +defineDict["THOST_FTDC_BFC_ForceUserLogout"] = '1' +#鍙樻洿鐢ㄦ埛鍙d护 +defineDict["THOST_FTDC_BFC_UserPasswordUpdate"] = '2' +#鍚屾缁忕邯鍏徃鏁版嵁 +defineDict["THOST_FTDC_BFC_SyncBrokerData"] = '3' +#鎵归噺鍚屾缁忕邯鍏徃鏁版嵁 +defineDict["THOST_FTDC_BFC_BachSyncBrokerData"] = '4' +#鎶ュ崟鎻掑叆 +defineDict["THOST_FTDC_BFC_OrderInsert"] = '5' +#鎶ュ崟鎿嶄綔 +defineDict["THOST_FTDC_BFC_OrderAction"] = '6' +#鍏ㄩ儴鏌ヨ +defineDict["THOST_FTDC_BFC_AllQuery"] = '7' +#绯荤粺鍔熻兘锛氱櫥鍏/鐧诲嚭/淇敼瀵嗙爜绛 +defineDict["THOST_FTDC_BFC_log"] = 'a' +#鍩烘湰鏌ヨ锛氭煡璇㈠熀纭鏁版嵁锛屽鍚堢害锛屼氦鏄撴墍绛夊父閲 +defineDict["THOST_FTDC_BFC_BaseQry"] = 'b' +#浜ゆ槗鏌ヨ锛氬鏌ユ垚浜わ紝濮旀墭 +defineDict["THOST_FTDC_BFC_TradeQry"] = 'c' +#浜ゆ槗鍔熻兘锛氭姤鍗曪紝鎾ゅ崟 +defineDict["THOST_FTDC_BFC_Trade"] = 'd' +#閾舵湡杞处 +defineDict["THOST_FTDC_BFC_Virement"] = 'e' +#椋庨櫓鐩戞帶 +defineDict["THOST_FTDC_BFC_Risk"] = 'f' +#鏌ヨ/绠$悊锛氭煡璇細璇濓紝韪汉绛 +defineDict["THOST_FTDC_BFC_Session"] = 'g' +#椋庢帶閫氱煡鎺у埗 +defineDict["THOST_FTDC_BFC_RiskNoticeCtl"] = 'h' +#椋庢帶閫氱煡鍙戦 +defineDict["THOST_FTDC_BFC_RiskNotice"] = 'i' +#瀵熺湅缁忕邯鍏徃璧勯噾鏉冮檺 +defineDict["THOST_FTDC_BFC_BrokerDeposit"] = 'j' +#璧勯噾鏌ヨ +defineDict["THOST_FTDC_BFC_QueryFund"] = 'k' +#鎶ュ崟鏌ヨ +defineDict["THOST_FTDC_BFC_QueryOrder"] = 'l' +#鎴愪氦鏌ヨ +defineDict["THOST_FTDC_BFC_QueryTrade"] = 'm' +#鎸佷粨鏌ヨ +defineDict["THOST_FTDC_BFC_QueryPosition"] = 'n' +#琛屾儏鏌ヨ +defineDict["THOST_FTDC_BFC_QueryMarketData"] = 'o' +#鐢ㄦ埛浜嬩欢鏌ヨ +defineDict["THOST_FTDC_BFC_QueryUserEvent"] = 'p' +#椋庨櫓閫氱煡鏌ヨ +defineDict["THOST_FTDC_BFC_QueryRiskNotify"] = 'q' +#鍑哄叆閲戞煡璇 +defineDict["THOST_FTDC_BFC_QueryFundChange"] = 'r' +#鎶曡祫鑰呬俊鎭煡璇 +defineDict["THOST_FTDC_BFC_QueryInvestor"] = 's' +#浜ゆ槗缂栫爜鏌ヨ +defineDict["THOST_FTDC_BFC_QueryTradingCode"] = 't' +#寮哄钩 +defineDict["THOST_FTDC_BFC_ForceClose"] = 'u' +#鍘嬪姏娴嬭瘯 +defineDict["THOST_FTDC_BFC_PressTest"] = 'v' +#鏉冪泭鍙嶇畻 +defineDict["THOST_FTDC_BFC_RemainCalc"] = 'w' +#鍑鎸佷粨淇濊瘉閲戞寚鏍 +defineDict["THOST_FTDC_BFC_NetPositionInd"] = 'x' +#椋庨櫓棰勭畻 +defineDict["THOST_FTDC_BFC_RiskPredict"] = 'y' +#鏁版嵁瀵煎嚭 +defineDict["THOST_FTDC_BFC_DataExport"] = 'z' +#椋庢帶鎸囨爣璁剧疆 +defineDict["THOST_FTDC_BFC_RiskTargetSetup"] = 'A' +#琛屾儏棰勮 +defineDict["THOST_FTDC_BFC_MarketDataWarn"] = 'B' +#涓氬姟閫氱煡鏌ヨ +defineDict["THOST_FTDC_BFC_QryBizNotice"] = 'C' +#涓氬姟閫氱煡妯℃澘璁剧疆 +defineDict["THOST_FTDC_BFC_CfgBizNotice"] = 'D' +#鍚屾鍔ㄦ佷护鐗 +defineDict["THOST_FTDC_BFC_SyncOTP"] = 'E' +#鍙戦佷笟鍔¢氱煡 +defineDict["THOST_FTDC_BFC_SendBizNotice"] = 'F' +#椋庨櫓绾у埆鏍囧噯璁剧疆 +defineDict["THOST_FTDC_BFC_CfgRiskLevelStd"] = 'G' +#浜ゆ槗缁堢搴旀ュ姛鑳 +defineDict["THOST_FTDC_BFC_TbCommand"] = 'H' +#鍒犻櫎鏈煡鍗 +defineDict["THOST_FTDC_BFC_DeleteOrder"] = 'J' +#棰勫煁鎶ュ崟鎻掑叆 +defineDict["THOST_FTDC_BFC_ParkedOrderInsert"] = 'K' +#棰勫煁鎶ュ崟鎿嶄綔 +defineDict["THOST_FTDC_BFC_ParkedOrderAction"] = 'L' + +typedefDict["TThostFtdcBrokerFunctionCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOrderActionStatusType鏄竴涓姤鍗曟搷浣滅姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#宸茬粡鎻愪氦 +defineDict["THOST_FTDC_OAS_Submitted"] = 'a' +#宸茬粡鎺ュ彈 +defineDict["THOST_FTDC_OAS_Accepted"] = 'b' +#宸茬粡琚嫆缁 +defineDict["THOST_FTDC_OAS_Rejected"] = 'c' + +typedefDict["TThostFtdcOrderActionStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOrderStatusType鏄竴涓姤鍗曠姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鍏ㄩ儴鎴愪氦 +defineDict["THOST_FTDC_OST_AllTraded"] = '0' +#閮ㄥ垎鎴愪氦杩樺湪闃熷垪涓 +defineDict["THOST_FTDC_OST_PartTradedQueueing"] = '1' +#閮ㄥ垎鎴愪氦涓嶅湪闃熷垪涓 +defineDict["THOST_FTDC_OST_PartTradedNotQueueing"] = '2' +#鏈垚浜よ繕鍦ㄩ槦鍒椾腑 +defineDict["THOST_FTDC_OST_NoTradeQueueing"] = '3' +#鏈垚浜や笉鍦ㄩ槦鍒椾腑 +defineDict["THOST_FTDC_OST_NoTradeNotQueueing"] = '4' +#鎾ゅ崟 +defineDict["THOST_FTDC_OST_Canceled"] = '5' +#鏈煡 +defineDict["THOST_FTDC_OST_Unknown"] = 'a' +#灏氭湭瑙﹀彂 +defineDict["THOST_FTDC_OST_NotTouched"] = 'b' +#宸茶Е鍙 +defineDict["THOST_FTDC_OST_Touched"] = 'c' + +typedefDict["TThostFtdcOrderStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOrderSubmitStatusType鏄竴涓姤鍗曟彁浜ょ姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#宸茬粡鎻愪氦 +defineDict["THOST_FTDC_OSS_InsertSubmitted"] = '0' +#鎾ゅ崟宸茬粡鎻愪氦 +defineDict["THOST_FTDC_OSS_CancelSubmitted"] = '1' +#淇敼宸茬粡鎻愪氦 +defineDict["THOST_FTDC_OSS_ModifySubmitted"] = '2' +#宸茬粡鎺ュ彈 +defineDict["THOST_FTDC_OSS_Accepted"] = '3' +#鎶ュ崟宸茬粡琚嫆缁 +defineDict["THOST_FTDC_OSS_InsertRejected"] = '4' +#鎾ゅ崟宸茬粡琚嫆缁 +defineDict["THOST_FTDC_OSS_CancelRejected"] = '5' +#鏀瑰崟宸茬粡琚嫆缁 +defineDict["THOST_FTDC_OSS_ModifyRejected"] = '6' + +typedefDict["TThostFtdcOrderSubmitStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPositionDateType鏄竴涓寔浠撴棩鏈熺被鍨 +#////////////////////////////////////////////////////////////////////// +#浠婃棩鎸佷粨 +defineDict["THOST_FTDC_PSD_Today"] = '1' +#鍘嗗彶鎸佷粨 +defineDict["THOST_FTDC_PSD_History"] = '2' + +typedefDict["TThostFtdcPositionDateType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPositionDateTypeType鏄竴涓寔浠撴棩鏈熺被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#浣跨敤鍘嗗彶鎸佷粨 +defineDict["THOST_FTDC_PDT_UseHistory"] = '1' +#涓嶄娇鐢ㄥ巻鍙叉寔浠 +defineDict["THOST_FTDC_PDT_NoUseHistory"] = '2' + +typedefDict["TThostFtdcPositionDateTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTradingRoleType鏄竴涓氦鏄撹鑹茬被鍨 +#////////////////////////////////////////////////////////////////////// +#浠g悊 +defineDict["THOST_FTDC_ER_Broker"] = '1' +#鑷惀 +defineDict["THOST_FTDC_ER_Host"] = '2' +#鍋氬競鍟 +defineDict["THOST_FTDC_ER_Maker"] = '3' + +typedefDict["TThostFtdcTradingRoleType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcProductClassType鏄竴涓骇鍝佺被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈熻揣 +defineDict["THOST_FTDC_PC_Futures"] = '1' +#鏈熻揣鏈熸潈 +defineDict["THOST_FTDC_PC_Options"] = '2' +#缁勫悎 +defineDict["THOST_FTDC_PC_Combination"] = '3' +#鍗虫湡 +defineDict["THOST_FTDC_PC_Spot"] = '4' +#鏈熻浆鐜 +defineDict["THOST_FTDC_PC_EFP"] = '5' +#鐜拌揣鏈熸潈 +defineDict["THOST_FTDC_PC_SpotOption"] = '6' + +typedefDict["TThostFtdcProductClassType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInstLifePhaseType鏄竴涓悎绾︾敓鍛藉懆鏈熺姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈笂甯 +defineDict["THOST_FTDC_IP_NotStart"] = '0' +#涓婂競 +defineDict["THOST_FTDC_IP_Started"] = '1' +#鍋滅墝 +defineDict["THOST_FTDC_IP_Pause"] = '2' +#鍒版湡 +defineDict["THOST_FTDC_IP_Expired"] = '3' + +typedefDict["TThostFtdcInstLifePhaseType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDirectionType鏄竴涓拱鍗栨柟鍚戠被鍨 +#////////////////////////////////////////////////////////////////////// +#涔 +defineDict["THOST_FTDC_D_Buy"] = '0' +#鍗 +defineDict["THOST_FTDC_D_Sell"] = '1' + +typedefDict["TThostFtdcDirectionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPositionTypeType鏄竴涓寔浠撶被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鍑鎸佷粨 +defineDict["THOST_FTDC_PT_Net"] = '1' +#缁煎悎鎸佷粨 +defineDict["THOST_FTDC_PT_Gross"] = '2' + +typedefDict["TThostFtdcPositionTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPosiDirectionType鏄竴涓寔浠撳绌烘柟鍚戠被鍨 +#////////////////////////////////////////////////////////////////////// +#鍑 +defineDict["THOST_FTDC_PD_Net"] = '1' +#澶氬ご +defineDict["THOST_FTDC_PD_Long"] = '2' +#绌哄ご +defineDict["THOST_FTDC_PD_Short"] = '3' + +typedefDict["TThostFtdcPosiDirectionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSysSettlementStatusType鏄竴涓郴缁熺粨绠楃姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#涓嶆椿璺 +defineDict["THOST_FTDC_SS_NonActive"] = '1' +#鍚姩 +defineDict["THOST_FTDC_SS_Startup"] = '2' +#鎿嶄綔 +defineDict["THOST_FTDC_SS_Operating"] = '3' +#缁撶畻 +defineDict["THOST_FTDC_SS_Settlement"] = '4' +#缁撶畻瀹屾垚 +defineDict["THOST_FTDC_SS_SettlementFinished"] = '5' + +typedefDict["TThostFtdcSysSettlementStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRatioAttrType鏄竴涓垂鐜囧睘鎬х被鍨 +#////////////////////////////////////////////////////////////////////// +#浜ゆ槗璐圭巼 +defineDict["THOST_FTDC_RA_Trade"] = '0' +#缁撶畻璐圭巼 +defineDict["THOST_FTDC_RA_Settlement"] = '1' + +typedefDict["TThostFtdcRatioAttrType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcHedgeFlagType鏄竴涓姇鏈哄淇濇爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#鎶曟満 +defineDict["THOST_FTDC_HF_Speculation"] = '1' +#濂楀埄 +defineDict["THOST_FTDC_HF_Arbitrage"] = '2' +#濂椾繚 +defineDict["THOST_FTDC_HF_Hedge"] = '3' + +typedefDict["TThostFtdcHedgeFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBillHedgeFlagType鏄竴涓姇鏈哄淇濇爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#鎶曟満 +defineDict["THOST_FTDC_BHF_Speculation"] = '1' +#濂楀埄 +defineDict["THOST_FTDC_BHF_Arbitrage"] = '2' +#濂椾繚 +defineDict["THOST_FTDC_BHF_Hedge"] = '3' + +typedefDict["TThostFtdcBillHedgeFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcClientIDTypeType鏄竴涓氦鏄撶紪鐮佺被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鎶曟満 +defineDict["THOST_FTDC_CIDT_Speculation"] = '1' +#濂楀埄 +defineDict["THOST_FTDC_CIDT_Arbitrage"] = '2' +#濂椾繚 +defineDict["THOST_FTDC_CIDT_Hedge"] = '3' + +typedefDict["TThostFtdcClientIDTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOrderPriceTypeType鏄竴涓姤鍗曚环鏍兼潯浠剁被鍨 +#////////////////////////////////////////////////////////////////////// +#浠绘剰浠 +defineDict["THOST_FTDC_OPT_AnyPrice"] = '1' +#闄愪环 +defineDict["THOST_FTDC_OPT_LimitPrice"] = '2' +#鏈浼樹环 +defineDict["THOST_FTDC_OPT_BestPrice"] = '3' +#鏈鏂颁环 +defineDict["THOST_FTDC_OPT_LastPrice"] = '4' +#鏈鏂颁环娴姩涓婃诞1涓猼icks +defineDict["THOST_FTDC_OPT_LastPricePlusOneTicks"] = '5' +#鏈鏂颁环娴姩涓婃诞2涓猼icks +defineDict["THOST_FTDC_OPT_LastPricePlusTwoTicks"] = '6' +#鏈鏂颁环娴姩涓婃诞3涓猼icks +defineDict["THOST_FTDC_OPT_LastPricePlusThreeTicks"] = '7' +#鍗栦竴浠 +defineDict["THOST_FTDC_OPT_AskPrice1"] = '8' +#鍗栦竴浠锋诞鍔ㄤ笂娴1涓猼icks +defineDict["THOST_FTDC_OPT_AskPrice1PlusOneTicks"] = '9' +#鍗栦竴浠锋诞鍔ㄤ笂娴2涓猼icks +defineDict["THOST_FTDC_OPT_AskPrice1PlusTwoTicks"] = 'A' +#鍗栦竴浠锋诞鍔ㄤ笂娴3涓猼icks +defineDict["THOST_FTDC_OPT_AskPrice1PlusThreeTicks"] = 'B' +#涔颁竴浠 +defineDict["THOST_FTDC_OPT_BidPrice1"] = 'C' +#涔颁竴浠锋诞鍔ㄤ笂娴1涓猼icks +defineDict["THOST_FTDC_OPT_BidPrice1PlusOneTicks"] = 'D' +#涔颁竴浠锋诞鍔ㄤ笂娴2涓猼icks +defineDict["THOST_FTDC_OPT_BidPrice1PlusTwoTicks"] = 'E' +#涔颁竴浠锋诞鍔ㄤ笂娴3涓猼icks +defineDict["THOST_FTDC_OPT_BidPrice1PlusThreeTicks"] = 'F' + +typedefDict["TThostFtdcOrderPriceTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOffsetFlagType鏄竴涓紑骞虫爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#寮浠 +defineDict["THOST_FTDC_OF_Open"] = '0' +#骞充粨 +defineDict["THOST_FTDC_OF_Close"] = '1' +#寮哄钩 +defineDict["THOST_FTDC_OF_ForceClose"] = '2' +#骞充粖 +defineDict["THOST_FTDC_OF_CloseToday"] = '3' +#骞虫槰 +defineDict["THOST_FTDC_OF_CloseYesterday"] = '4' +#寮哄噺 +defineDict["THOST_FTDC_OF_ForceOff"] = '5' +#鏈湴寮哄钩 +defineDict["THOST_FTDC_OF_LocalForceClose"] = '6' + +typedefDict["TThostFtdcOffsetFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcForceCloseReasonType鏄竴涓己骞冲師鍥犵被鍨 +#////////////////////////////////////////////////////////////////////// +#闈炲己骞 +defineDict["THOST_FTDC_FCC_NotForceClose"] = '0' +#璧勯噾涓嶈冻 +defineDict["THOST_FTDC_FCC_LackDeposit"] = '1' +#瀹㈡埛瓒呬粨 +defineDict["THOST_FTDC_FCC_ClientOverPositionLimit"] = '2' +#浼氬憳瓒呬粨 +defineDict["THOST_FTDC_FCC_MemberOverPositionLimit"] = '3' +#鎸佷粨闈炴暣鏁板 +defineDict["THOST_FTDC_FCC_NotMultiple"] = '4' +#杩濊 +defineDict["THOST_FTDC_FCC_Violation"] = '5' +#鍏跺畠 +defineDict["THOST_FTDC_FCC_Other"] = '6' +#鑷劧浜轰复杩戜氦鍓 +defineDict["THOST_FTDC_FCC_PersonDeliv"] = '7' + +typedefDict["TThostFtdcForceCloseReasonType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOrderTypeType鏄竴涓姤鍗曠被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#姝e父 +defineDict["THOST_FTDC_ORDT_Normal"] = '0' +#鎶ヤ环琛嶇敓 +defineDict["THOST_FTDC_ORDT_DeriveFromQuote"] = '1' +#缁勫悎琛嶇敓 +defineDict["THOST_FTDC_ORDT_DeriveFromCombination"] = '2' +#缁勫悎鎶ュ崟 +defineDict["THOST_FTDC_ORDT_Combination"] = '3' +#鏉′欢鍗 +defineDict["THOST_FTDC_ORDT_ConditionalOrder"] = '4' +#浜掓崲鍗 +defineDict["THOST_FTDC_ORDT_Swap"] = '5' + +typedefDict["TThostFtdcOrderTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTimeConditionType鏄竴涓湁鏁堟湡绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#绔嬪嵆瀹屾垚锛屽惁鍒欐挙閿 +defineDict["THOST_FTDC_TC_IOC"] = '1' +#鏈妭鏈夋晥 +defineDict["THOST_FTDC_TC_GFS"] = '2' +#褰撴棩鏈夋晥 +defineDict["THOST_FTDC_TC_GFD"] = '3' +#鎸囧畾鏃ユ湡鍓嶆湁鏁 +defineDict["THOST_FTDC_TC_GTD"] = '4' +#鎾ら攢鍓嶆湁鏁 +defineDict["THOST_FTDC_TC_GTC"] = '5' +#闆嗗悎绔炰环鏈夋晥 +defineDict["THOST_FTDC_TC_GFA"] = '6' + +typedefDict["TThostFtdcTimeConditionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcVolumeConditionType鏄竴涓垚浜ら噺绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#浠讳綍鏁伴噺 +defineDict["THOST_FTDC_VC_AV"] = '1' +#鏈灏忔暟閲 +defineDict["THOST_FTDC_VC_MV"] = '2' +#鍏ㄩ儴鏁伴噺 +defineDict["THOST_FTDC_VC_CV"] = '3' + +typedefDict["TThostFtdcVolumeConditionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcContingentConditionType鏄竴涓Е鍙戞潯浠剁被鍨 +#////////////////////////////////////////////////////////////////////// +#绔嬪嵆 +defineDict["THOST_FTDC_CC_Immediately"] = '1' +#姝㈡崯 +defineDict["THOST_FTDC_CC_Touch"] = '2' +#姝㈣耽 +defineDict["THOST_FTDC_CC_TouchProfit"] = '3' +#棰勫煁鍗 +defineDict["THOST_FTDC_CC_ParkedOrder"] = '4' +#鏈鏂颁环澶т簬鏉′欢浠 +defineDict["THOST_FTDC_CC_LastPriceGreaterThanStopPrice"] = '5' +#鏈鏂颁环澶т簬绛変簬鏉′欢浠 +defineDict["THOST_FTDC_CC_LastPriceGreaterEqualStopPrice"] = '6' +#鏈鏂颁环灏忎簬鏉′欢浠 +defineDict["THOST_FTDC_CC_LastPriceLesserThanStopPrice"] = '7' +#鏈鏂颁环灏忎簬绛変簬鏉′欢浠 +defineDict["THOST_FTDC_CC_LastPriceLesserEqualStopPrice"] = '8' +#鍗栦竴浠峰ぇ浜庢潯浠朵环 +defineDict["THOST_FTDC_CC_AskPriceGreaterThanStopPrice"] = '9' +#鍗栦竴浠峰ぇ浜庣瓑浜庢潯浠朵环 +defineDict["THOST_FTDC_CC_AskPriceGreaterEqualStopPrice"] = 'A' +#鍗栦竴浠峰皬浜庢潯浠朵环 +defineDict["THOST_FTDC_CC_AskPriceLesserThanStopPrice"] = 'B' +#鍗栦竴浠峰皬浜庣瓑浜庢潯浠朵环 +defineDict["THOST_FTDC_CC_AskPriceLesserEqualStopPrice"] = 'C' +#涔颁竴浠峰ぇ浜庢潯浠朵环 +defineDict["THOST_FTDC_CC_BidPriceGreaterThanStopPrice"] = 'D' +#涔颁竴浠峰ぇ浜庣瓑浜庢潯浠朵环 +defineDict["THOST_FTDC_CC_BidPriceGreaterEqualStopPrice"] = 'E' +#涔颁竴浠峰皬浜庢潯浠朵环 +defineDict["THOST_FTDC_CC_BidPriceLesserThanStopPrice"] = 'F' +#涔颁竴浠峰皬浜庣瓑浜庢潯浠朵环 +defineDict["THOST_FTDC_CC_BidPriceLesserEqualStopPrice"] = 'H' + +typedefDict["TThostFtdcContingentConditionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcActionFlagType鏄竴涓搷浣滄爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#鍒犻櫎 +defineDict["THOST_FTDC_AF_Delete"] = '0' +#淇敼 +defineDict["THOST_FTDC_AF_Modify"] = '3' + +typedefDict["TThostFtdcActionFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTradingRightType鏄竴涓氦鏄撴潈闄愮被鍨 +#////////////////////////////////////////////////////////////////////// +#鍙互浜ゆ槗 +defineDict["THOST_FTDC_TR_Allow"] = '0' +#鍙兘骞充粨 +defineDict["THOST_FTDC_TR_CloseOnly"] = '1' +#涓嶈兘浜ゆ槗 +defineDict["THOST_FTDC_TR_Forbidden"] = '2' + +typedefDict["TThostFtdcTradingRightType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOrderSourceType鏄竴涓姤鍗曟潵婧愮被鍨 +#////////////////////////////////////////////////////////////////////// +#鏉ヨ嚜鍙備笌鑰 +defineDict["THOST_FTDC_OSRC_Participant"] = '0' +#鏉ヨ嚜绠$悊鍛 +defineDict["THOST_FTDC_OSRC_Administrator"] = '1' + +typedefDict["TThostFtdcOrderSourceType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTradeTypeType鏄竴涓垚浜ょ被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#缁勫悎鎸佷粨鎷嗗垎涓哄崟涓鎸佷粨,鍒濆鍖栦笉搴斿寘鍚绫诲瀷鐨勬寔浠 +defineDict["THOST_FTDC_TRDT_SplitCombination"] = '#' +#鏅氭垚浜 +defineDict["THOST_FTDC_TRDT_Common"] = '0' +#鏈熸潈鎵ц +defineDict["THOST_FTDC_TRDT_OptionsExecution"] = '1' +#OTC鎴愪氦 +defineDict["THOST_FTDC_TRDT_OTC"] = '2' +#鏈熻浆鐜拌鐢熸垚浜 +defineDict["THOST_FTDC_TRDT_EFPDerived"] = '3' +#缁勫悎琛嶇敓鎴愪氦 +defineDict["THOST_FTDC_TRDT_CombinationDerived"] = '4' + +typedefDict["TThostFtdcTradeTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPriceSourceType鏄竴涓垚浜や环鏉ユ簮绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鍓嶆垚浜や环 +defineDict["THOST_FTDC_PSRC_LastPrice"] = '0' +#涔板鎵樹环 +defineDict["THOST_FTDC_PSRC_Buy"] = '1' +#鍗栧鎵樹环 +defineDict["THOST_FTDC_PSRC_Sell"] = '2' + +typedefDict["TThostFtdcPriceSourceType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInstrumentStatusType鏄竴涓悎绾︿氦鏄撶姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#寮鐩樺墠 +defineDict["THOST_FTDC_IS_BeforeTrading"] = '0' +#闈炰氦鏄 +defineDict["THOST_FTDC_IS_NoTrading"] = '1' +#杩炵画浜ゆ槗 +defineDict["THOST_FTDC_IS_Continous"] = '2' +#闆嗗悎绔炰环鎶ュ崟 +defineDict["THOST_FTDC_IS_AuctionOrdering"] = '3' +#闆嗗悎绔炰环浠锋牸骞宠  +defineDict["THOST_FTDC_IS_AuctionBalance"] = '4' +#闆嗗悎绔炰环鎾悎 +defineDict["THOST_FTDC_IS_AuctionMatch"] = '5' +#鏀剁洏 +defineDict["THOST_FTDC_IS_Closed"] = '6' + +typedefDict["TThostFtdcInstrumentStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInstStatusEnterReasonType鏄竴涓搧绉嶈繘鍏ヤ氦鏄撶姸鎬佸師鍥犵被鍨 +#////////////////////////////////////////////////////////////////////// +#鑷姩鍒囨崲 +defineDict["THOST_FTDC_IER_Automatic"] = '1' +#鎵嬪姩鍒囨崲 +defineDict["THOST_FTDC_IER_Manual"] = '2' +#鐔旀柇 +defineDict["THOST_FTDC_IER_Fuse"] = '3' + +typedefDict["TThostFtdcInstStatusEnterReasonType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOrderActionRefType鏄竴涓姤鍗曟搷浣滃紩鐢ㄧ被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOrderActionRefType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInstallCountType鏄竴涓畨瑁呮暟閲忕被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcInstallCountType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInstallIDType鏄竴涓畨瑁呯紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcInstallIDType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcErrorIDType鏄竴涓敊璇唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcErrorIDType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSettlementIDType鏄竴涓粨绠楃紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSettlementIDType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcVolumeType鏄竴涓暟閲忕被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcVolumeType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFrontIDType鏄竴涓墠缃紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFrontIDType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSessionIDType鏄竴涓細璇濈紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSessionIDType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSequenceNoType鏄竴涓簭鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSequenceNoType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCommandNoType鏄竴涓狣B鍛戒护搴忓彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCommandNoType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcMillisecType鏄竴涓椂闂达紙姣锛夌被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcMillisecType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcVolumeMultipleType鏄竴涓悎绾︽暟閲忎箻鏁扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcVolumeMultipleType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTradingSegmentSNType鏄竴涓氦鏄撻樁娈电紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTradingSegmentSNType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRequestIDType鏄竴涓姹傜紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRequestIDType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcYearType鏄竴涓勾浠界被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcYearType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcMonthType鏄竴涓湀浠界被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcMonthType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBoolType鏄竴涓竷灏斿瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBoolType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPriceType鏄竴涓环鏍肩被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPriceType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCombOffsetFlagType鏄竴涓粍鍚堝紑骞虫爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCombOffsetFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCombHedgeFlagType鏄竴涓粍鍚堟姇鏈哄淇濇爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCombHedgeFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRatioType鏄竴涓瘮鐜囩被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRatioType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcMoneyType鏄竴涓祫閲戠被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcMoneyType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcLargeVolumeType鏄竴涓ぇ棰濇暟閲忕被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcLargeVolumeType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSequenceSeriesType鏄竴涓簭鍒楃郴鍒楀彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSequenceSeriesType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCommPhaseNoType鏄竴涓氳鏃舵缂栧彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCommPhaseNoType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSequenceLabelType鏄竴涓簭鍒楃紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSequenceLabelType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUnderlyingMultipleType鏄竴涓熀纭鍟嗗搧涔樻暟绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcUnderlyingMultipleType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPriorityType鏄竴涓紭鍏堢骇绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPriorityType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcContractCodeType鏄竴涓悎鍚岀紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcContractCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCityType鏄竴涓競绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCityType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcIsStockType鏄竴涓槸鍚﹁偂姘戠被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcIsStockType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcChannelType鏄竴涓笭閬撶被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcChannelType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAddressType鏄竴涓氳鍦板潃绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAddressType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcZipCodeType鏄竴涓偖鏀跨紪鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcZipCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTelephoneType鏄竴涓仈绯荤數璇濈被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTelephoneType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFaxType鏄竴涓紶鐪熺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFaxType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcMobileType鏄竴涓墜鏈虹被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcMobileType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcEMailType鏄竴涓數瀛愰偖浠剁被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcEMailType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcMemoType鏄竴涓娉ㄧ被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcMemoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCompanyCodeType鏄竴涓紒涓氫唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCompanyCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcWebsiteType鏄竴涓綉绔欏湴鍧绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcWebsiteType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTaxNoType鏄竴涓◣鍔$櫥璁板彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTaxNoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBatchStatusType鏄竴涓鐞嗙姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈笂浼 +defineDict["THOST_FTDC_BS_NoUpload"] = '1' +#宸蹭笂浼 +defineDict["THOST_FTDC_BS_Uploaded"] = '2' +#瀹℃牳澶辫触 +defineDict["THOST_FTDC_BS_Failed"] = '3' + +typedefDict["TThostFtdcBatchStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPropertyIDType鏄竴涓睘鎬т唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPropertyIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPropertyNameType鏄竴涓睘鎬у悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPropertyNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcLicenseNoType鏄竴涓惀涓氭墽鐓у彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcLicenseNoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAgentIDType鏄竴涓粡绾汉浠g爜绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAgentIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAgentNameType鏄竴涓粡绾汉鍚嶇О绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAgentNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAgentGroupIDType鏄竴涓粡绾汉缁勪唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAgentGroupIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAgentGroupNameType鏄竴涓粡绾汉缁勫悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAgentGroupNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcReturnStyleType鏄竴涓寜鍝佺杩旇繕鏂瑰紡绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鎸夋墍鏈夊搧绉 +defineDict["THOST_FTDC_RS_All"] = '1' +#鎸夊搧绉 +defineDict["THOST_FTDC_RS_ByProduct"] = '2' + +typedefDict["TThostFtdcReturnStyleType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcReturnPatternType鏄竴涓繑杩樻ā寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +#鎸夋垚浜ゆ墜鏁 +defineDict["THOST_FTDC_RP_ByVolume"] = '1' +#鎸夌暀瀛樻墜缁垂 +defineDict["THOST_FTDC_RP_ByFeeOnHand"] = '2' + +typedefDict["TThostFtdcReturnPatternType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcReturnLevelType鏄竴涓繑杩樼骇鍒被鍨 +#////////////////////////////////////////////////////////////////////// +#绾у埆1 +defineDict["THOST_FTDC_RL_Level1"] = '1' +#绾у埆2 +defineDict["THOST_FTDC_RL_Level2"] = '2' +#绾у埆3 +defineDict["THOST_FTDC_RL_Level3"] = '3' +#绾у埆4 +defineDict["THOST_FTDC_RL_Level4"] = '4' +#绾у埆5 +defineDict["THOST_FTDC_RL_Level5"] = '5' +#绾у埆6 +defineDict["THOST_FTDC_RL_Level6"] = '6' +#绾у埆7 +defineDict["THOST_FTDC_RL_Level7"] = '7' +#绾у埆8 +defineDict["THOST_FTDC_RL_Level8"] = '8' +#绾у埆9 +defineDict["THOST_FTDC_RL_Level9"] = '9' + +typedefDict["TThostFtdcReturnLevelType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcReturnStandardType鏄竴涓繑杩樻爣鍑嗙被鍨 +#////////////////////////////////////////////////////////////////////// +#鍒嗛樁娈佃繑杩 +defineDict["THOST_FTDC_RSD_ByPeriod"] = '1' +#鎸夋煇涓鏍囧噯 +defineDict["THOST_FTDC_RSD_ByStandard"] = '2' + +typedefDict["TThostFtdcReturnStandardType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcMortgageTypeType鏄竴涓川鎶肩被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#璐ㄥ嚭 +defineDict["THOST_FTDC_MT_Out"] = '0' +#璐ㄥ叆 +defineDict["THOST_FTDC_MT_In"] = '1' + +typedefDict["TThostFtdcMortgageTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInvestorSettlementParamIDType鏄竴涓姇璧勮呯粨绠楀弬鏁颁唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +#璐ㄦ娂姣斾緥 +defineDict["THOST_FTDC_ISPI_MortgageRatio"] = '4' +#淇濊瘉閲戠畻娉 +defineDict["THOST_FTDC_ISPI_MarginWay"] = '5' +#缁撶畻鍗曠粨瀛樻槸鍚﹀寘鍚川鎶 +defineDict["THOST_FTDC_ISPI_BillDeposit"] = '9' + +typedefDict["TThostFtdcInvestorSettlementParamIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExchangeSettlementParamIDType鏄竴涓氦鏄撴墍缁撶畻鍙傛暟浠g爜绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#璐ㄦ娂姣斾緥 +defineDict["THOST_FTDC_ESPI_MortgageRatio"] = '1' +#鍒嗛」璧勯噾瀵煎叆椤 +defineDict["THOST_FTDC_ESPI_OtherFundItem"] = '2' +#鍒嗛」璧勯噾鍏ヤ氦鏄撴墍鍑哄叆閲 +defineDict["THOST_FTDC_ESPI_OtherFundImport"] = '3' +#涓噾鎵寮鎴锋渶浣庡彲鐢ㄩ噾棰 +defineDict["THOST_FTDC_ESPI_CFFEXMinPrepa"] = '6' +#閮戝晢鎵缁撶畻鏂瑰紡 +defineDict["THOST_FTDC_ESPI_CZCESettlementType"] = '7' +#浜ゆ槗鎵浜ゅ壊鎵嬬画璐规敹鍙栨柟寮 +defineDict["THOST_FTDC_ESPI_ExchDelivFeeMode"] = '9' +#鎶曡祫鑰呬氦鍓叉墜缁垂鏀跺彇鏂瑰紡 +defineDict["THOST_FTDC_ESPI_DelivFeeMode"] = '0' +#閮戝晢鎵缁勫悎鎸佷粨淇濊瘉閲戞敹鍙栨柟寮 +defineDict["THOST_FTDC_ESPI_CZCEComMarginType"] = 'A' +#澶у晢鎵濂楀埄淇濊瘉閲戞槸鍚︿紭鎯 +defineDict["THOST_FTDC_ESPI_DceComMarginType"] = 'B' +#铏氬兼湡鏉冧繚璇侀噾浼樻儬姣旂巼 +defineDict["THOST_FTDC_ESPI_OptOutDisCountRate"] = 'a' +#鏈浣庝繚闅滅郴鏁 +defineDict["THOST_FTDC_ESPI_OptMiniGuarantee"] = 'b' + +typedefDict["TThostFtdcExchangeSettlementParamIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSystemParamIDType鏄竴涓郴缁熷弬鏁颁唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鎶曡祫鑰呬唬鐮佹渶灏忛暱搴 +defineDict["THOST_FTDC_SPI_InvestorIDMinLength"] = '1' +#鎶曡祫鑰呭笎鍙蜂唬鐮佹渶灏忛暱搴 +defineDict["THOST_FTDC_SPI_AccountIDMinLength"] = '2' +#鎶曡祫鑰呭紑鎴烽粯璁ょ櫥褰曟潈闄 +defineDict["THOST_FTDC_SPI_UserRightLogon"] = '3' +#鎶曡祫鑰呬氦鏄撶粨绠楀崟鎴愪氦姹囨绘柟寮 +defineDict["THOST_FTDC_SPI_SettlementBillTrade"] = '4' +#缁熶竴寮鎴锋洿鏂颁氦鏄撶紪鐮佹柟寮 +defineDict["THOST_FTDC_SPI_TradingCode"] = '5' +#缁撶畻鏄惁鍒ゆ柇瀛樺湪鏈鏍哥殑鍑哄叆閲戝拰鍒嗛」璧勯噾 +defineDict["THOST_FTDC_SPI_CheckFund"] = '6' +#鏄惁鍚敤鎵嬬画璐规ā鏉挎暟鎹潈闄 +defineDict["THOST_FTDC_SPI_CommModelRight"] = '7' +#鏄惁鍚敤淇濊瘉閲戠巼妯℃澘鏁版嵁鏉冮檺 +defineDict["THOST_FTDC_SPI_MarginModelRight"] = '9' +#鏄惁瑙勮寖鐢ㄦ埛鎵嶈兘婵娲 +defineDict["THOST_FTDC_SPI_IsStandardActive"] = '8' +#涓婁紶鐨勪氦鏄撴墍缁撶畻鏂囦欢璺緞 +defineDict["THOST_FTDC_SPI_UploadSettlementFile"] = 'U' +#涓婃姤淇濊瘉閲戠洃鎺т腑蹇冩枃浠惰矾寰 +defineDict["THOST_FTDC_SPI_DownloadCSRCFile"] = 'D' +#鐢熸垚鐨勭粨绠楀崟鏂囦欢璺緞 +defineDict["THOST_FTDC_SPI_SettlementBillFile"] = 'S' +#璇佺洃浼氭枃浠舵爣璇 +defineDict["THOST_FTDC_SPI_CSRCOthersFile"] = 'C' +#鎶曡祫鑰呯収鐗囪矾寰 +defineDict["THOST_FTDC_SPI_InvestorPhoto"] = 'P' +#鍏ㄧ粨缁忕邯鍏徃涓婁紶鏂囦欢璺緞 +defineDict["THOST_FTDC_SPI_CSRCData"] = 'R' +#寮鎴峰瘑鐮佸綍鍏ユ柟寮 +defineDict["THOST_FTDC_SPI_InvestorPwdModel"] = 'I' +#鎶曡祫鑰呬腑閲戞墍缁撶畻鏂囦欢涓嬭浇璺緞 +defineDict["THOST_FTDC_SPI_CFFEXInvestorSettleFile"] = 'F' +#鎶曡祫鑰呬唬鐮佺紪鐮佹柟寮 +defineDict["THOST_FTDC_SPI_InvestorIDType"] = 'a' +#浼戠湢鎴锋渶楂樻潈鐩 +defineDict["THOST_FTDC_SPI_FreezeMaxReMain"] = 'r' +#鎵嬬画璐圭浉鍏虫搷浣滃疄鏃朵笂鍦哄紑鍏 +defineDict["THOST_FTDC_SPI_IsSync"] = 'A' +#瑙i櫎寮浠撴潈闄愰檺鍒 +defineDict["THOST_FTDC_SPI_RelieveOpenLimit"] = 'O' +#鏄惁瑙勮寖鐢ㄦ埛鎵嶈兘浼戠湢 +defineDict["THOST_FTDC_SPI_IsStandardFreeze"] = 'X' +#閮戝晢鎵鏄惁寮鏀炬墍鏈夊搧绉嶅淇濅氦鏄 +defineDict["THOST_FTDC_SPI_CZCENormalProductHedge"] = 'B' + +typedefDict["TThostFtdcSystemParamIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTradeParamIDType鏄竴涓氦鏄撶郴缁熷弬鏁颁唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +#绯荤粺鍔犲瘑绠楁硶 +defineDict["THOST_FTDC_TPID_EncryptionStandard"] = 'E' +#绯荤粺椋庨櫓绠楁硶 +defineDict["THOST_FTDC_TPID_RiskMode"] = 'R' +#绯荤粺椋庨櫓绠楁硶鏄惁鍏ㄥ眬 0-鍚 1-鏄 +defineDict["THOST_FTDC_TPID_RiskModeGlobal"] = 'G' +#瀵嗙爜鍔犲瘑绠楁硶 +defineDict["THOST_FTDC_TPID_modeEncode"] = 'P' +#浠锋牸灏忔暟浣嶆暟鍙傛暟 +defineDict["THOST_FTDC_TPID_tickMode"] = 'T' +#鐢ㄦ埛鏈澶т細璇濇暟 +defineDict["THOST_FTDC_TPID_SingleUserSessionMaxNum"] = 'S' +#鏈澶ц繛缁櫥褰曞け璐ユ暟 +defineDict["THOST_FTDC_TPID_LoginFailMaxNum"] = 'L' +#鏄惁寮哄埗璁よ瘉 +defineDict["THOST_FTDC_TPID_IsAuthForce"] = 'A' + +typedefDict["TThostFtdcTradeParamIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSettlementParamValueType鏄竴涓弬鏁颁唬鐮佸肩被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSettlementParamValueType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCounterIDType鏄竴涓鏁板櫒浠g爜绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCounterIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInvestorGroupNameType鏄竴涓姇璧勮呭垎缁勫悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcInvestorGroupNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBrandCodeType鏄竴涓墝鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBrandCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcWarehouseType鏄竴涓粨搴撶被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcWarehouseType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcProductDateType鏄竴涓骇鏈熺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcProductDateType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcGradeType鏄竴涓瓑绾х被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcGradeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcClassifyType鏄竴涓被鍒被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcClassifyType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPositionType鏄竴涓揣浣嶇被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPositionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcYieldlyType鏄竴涓骇鍦扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcYieldlyType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcWeightType鏄竴涓叕瀹氶噸閲忕被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcWeightType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSubEntryFundNoType鏄竴涓垎椤硅祫閲戞祦姘村彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSubEntryFundNoType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFileIDType鏄竴涓枃浠舵爣璇嗙被鍨 +#////////////////////////////////////////////////////////////////////// +#璧勯噾鏁版嵁 +defineDict["THOST_FTDC_FI_SettlementFund"] = 'F' +#鎴愪氦鏁版嵁 +defineDict["THOST_FTDC_FI_Trade"] = 'T' +#鎶曡祫鑰呮寔浠撴暟鎹 +defineDict["THOST_FTDC_FI_InvestorPosition"] = 'P' +#鎶曡祫鑰呭垎椤硅祫閲戞暟鎹 +defineDict["THOST_FTDC_FI_SubEntryFund"] = 'O' +#缁勫悎鎸佷粨鏁版嵁 +defineDict["THOST_FTDC_FI_CZCECombinationPos"] = 'C' +#涓婃姤淇濊瘉閲戠洃鎺т腑蹇冩暟鎹 +defineDict["THOST_FTDC_FI_CSRCData"] = 'R' +#閮戝晢鎵骞充粨浜嗙粨鏁版嵁 +defineDict["THOST_FTDC_FI_CZCEClose"] = 'L' +#閮戝晢鎵闈炲钩浠撲簡缁撴暟鎹 +defineDict["THOST_FTDC_FI_CZCENoClose"] = 'N' +#鎸佷粨鏄庣粏鏁版嵁 +defineDict["THOST_FTDC_FI_PositionDtl"] = 'D' +#鏈熸潈鎵ц鏂囦欢 +defineDict["THOST_FTDC_FI_OptionStrike"] = 'S' +#缁撶畻浠锋瘮瀵规枃浠 +defineDict["THOST_FTDC_FI_SettlementPriceComparison"] = 'M' +#涓婃湡鎵闈炴寔浠撳彉鍔ㄦ槑缁 +defineDict["THOST_FTDC_FI_NonTradePosChange"] = 'B' + +typedefDict["TThostFtdcFileIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFileNameType鏄竴涓枃浠跺悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFileNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFileTypeType鏄竴涓枃浠朵笂浼犵被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#缁撶畻 +defineDict["THOST_FTDC_FUT_Settlement"] = '0' +#鏍稿 +defineDict["THOST_FTDC_FUT_Check"] = '1' + +typedefDict["TThostFtdcFileTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFileFormatType鏄竴涓枃浠舵牸寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +#鏂囨湰鏂囦欢(.txt) +defineDict["THOST_FTDC_FFT_Txt"] = '0' +#鍘嬬缉鏂囦欢(.zip) +defineDict["THOST_FTDC_FFT_Zip"] = '1' +#DBF鏂囦欢(.dbf) +defineDict["THOST_FTDC_FFT_DBF"] = '2' + +typedefDict["TThostFtdcFileFormatType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFileUploadStatusType鏄竴涓枃浠剁姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#涓婁紶鎴愬姛 +defineDict["THOST_FTDC_FUS_SucceedUpload"] = '1' +#涓婁紶澶辫触 +defineDict["THOST_FTDC_FUS_FailedUpload"] = '2' +#瀵煎叆鎴愬姛 +defineDict["THOST_FTDC_FUS_SucceedLoad"] = '3' +#瀵煎叆閮ㄥ垎鎴愬姛 +defineDict["THOST_FTDC_FUS_PartSucceedLoad"] = '4' +#瀵煎叆澶辫触 +defineDict["THOST_FTDC_FUS_FailedLoad"] = '5' + +typedefDict["TThostFtdcFileUploadStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTransferDirectionType鏄竴涓Щ浠撴柟鍚戠被鍨 +#////////////////////////////////////////////////////////////////////// +#绉诲嚭 +defineDict["THOST_FTDC_TD_Out"] = '0' +#绉诲叆 +defineDict["THOST_FTDC_TD_In"] = '1' + +typedefDict["TThostFtdcTransferDirectionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUploadModeType鏄竴涓笂浼犳枃浠剁被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcUploadModeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAccountIDType鏄竴涓姇璧勮呭笎鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAccountIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankFlagType鏄竴涓摱琛岀粺涓鏍囪瘑绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankAccountType鏄竴涓摱琛岃处鎴风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankAccountType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOpenNameType鏄竴涓摱琛岃处鎴风殑寮鎴蜂汉鍚嶇О绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOpenNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOpenBankType鏄竴涓摱琛岃处鎴风殑寮鎴疯绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOpenBankType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankNameType鏄竴涓摱琛屽悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPublishPathType鏄竴涓彂甯冭矾寰勭被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPublishPathType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOperatorIDType鏄竴涓搷浣滃憳浠g爜绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOperatorIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcMonthCountType鏄竴涓湀浠芥暟閲忕被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcMonthCountType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAdvanceMonthArrayType鏄竴涓湀浠芥彁鍓嶆暟缁勭被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAdvanceMonthArrayType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDateExprType鏄竴涓棩鏈熻〃杈惧紡绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcDateExprType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInstrumentIDExprType鏄竴涓悎绾︿唬鐮佽〃杈惧紡绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcInstrumentIDExprType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInstrumentNameExprType鏄竴涓悎绾﹀悕绉拌〃杈惧紡绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcInstrumentNameExprType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSpecialCreateRuleType鏄竴涓壒娈婄殑鍒涘缓瑙勫垯绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#娌℃湁鐗规畩鍒涘缓瑙勫垯 +defineDict["THOST_FTDC_SC_NoSpecialRule"] = '0' +#涓嶅寘鍚槬鑺 +defineDict["THOST_FTDC_SC_NoSpringFestival"] = '1' + +typedefDict["TThostFtdcSpecialCreateRuleType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBasisPriceTypeType鏄竴涓寕鐗屽熀鍑嗕环绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#涓婁竴鍚堢害缁撶畻浠 +defineDict["THOST_FTDC_IPT_LastSettlement"] = '1' +#涓婁竴鍚堢害鏀剁洏浠 +defineDict["THOST_FTDC_IPT_LaseClose"] = '2' + +typedefDict["TThostFtdcBasisPriceTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcProductLifePhaseType鏄竴涓骇鍝佺敓鍛藉懆鏈熺姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#娲昏穬 +defineDict["THOST_FTDC_PLP_Active"] = '1' +#涓嶆椿璺 +defineDict["THOST_FTDC_PLP_NonActive"] = '2' +#娉ㄩ攢 +defineDict["THOST_FTDC_PLP_Canceled"] = '3' + +typedefDict["TThostFtdcProductLifePhaseType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDeliveryModeType鏄竴涓氦鍓叉柟寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +#鐜伴噾浜ゅ壊 +defineDict["THOST_FTDC_DM_CashDeliv"] = '1' +#瀹炵墿浜ゅ壊 +defineDict["THOST_FTDC_DM_CommodityDeliv"] = '2' + +typedefDict["TThostFtdcDeliveryModeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcLogLevelType鏄竴涓棩蹇楃骇鍒被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcLogLevelType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcProcessNameType鏄竴涓瓨鍌ㄨ繃绋嬪悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcProcessNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOperationMemoType鏄竴涓搷浣滄憳瑕佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOperationMemoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFundIOTypeType鏄竴涓嚭鍏ラ噾绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鍑哄叆閲 +defineDict["THOST_FTDC_FIOT_FundIO"] = '1' +#閾舵湡杞笎 +defineDict["THOST_FTDC_FIOT_Transfer"] = '2' +#閾舵湡鎹㈡眹 +defineDict["THOST_FTDC_FIOT_SwapCurrency"] = '3' + +typedefDict["TThostFtdcFundIOTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFundTypeType鏄竴涓祫閲戠被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#閾惰瀛樻 +defineDict["THOST_FTDC_FT_Deposite"] = '1' +#鍒嗛」璧勯噾 +defineDict["THOST_FTDC_FT_ItemFund"] = '2' +#鍏徃璋冩暣 +defineDict["THOST_FTDC_FT_Company"] = '3' +#璧勯噾鍐呰浆 +defineDict["THOST_FTDC_FT_InnerTransfer"] = '4' + +typedefDict["TThostFtdcFundTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFundDirectionType鏄竴涓嚭鍏ラ噾鏂瑰悜绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鍏ラ噾 +defineDict["THOST_FTDC_FD_In"] = '1' +#鍑洪噾 +defineDict["THOST_FTDC_FD_Out"] = '2' + +typedefDict["TThostFtdcFundDirectionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFundStatusType鏄竴涓祫閲戠姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#宸插綍鍏 +defineDict["THOST_FTDC_FS_Record"] = '1' +#宸插鏍 +defineDict["THOST_FTDC_FS_Check"] = '2' +#宸插啿閿 +defineDict["THOST_FTDC_FS_Charge"] = '3' + +typedefDict["TThostFtdcFundStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBillNoType鏄竴涓エ鎹彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBillNoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBillNameType鏄竴涓エ鎹悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBillNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPublishStatusType鏄竴涓彂甯冪姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈彂甯 +defineDict["THOST_FTDC_PS_None"] = '1' +#姝e湪鍙戝竷 +defineDict["THOST_FTDC_PS_Publishing"] = '2' +#宸插彂甯 +defineDict["THOST_FTDC_PS_Published"] = '3' + +typedefDict["TThostFtdcPublishStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcEnumValueIDType鏄竴涓灇涓惧间唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcEnumValueIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcEnumValueTypeType鏄竴涓灇涓惧肩被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcEnumValueTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcEnumValueLabelType鏄竴涓灇涓惧煎悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcEnumValueLabelType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcEnumValueResultType鏄竴涓灇涓惧肩粨鏋滅被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcEnumValueResultType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSystemStatusType鏄竴涓郴缁熺姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#涓嶆椿璺 +defineDict["THOST_FTDC_ES_NonActive"] = '1' +#鍚姩 +defineDict["THOST_FTDC_ES_Startup"] = '2' +#浜ゆ槗寮濮嬪垵濮嬪寲 +defineDict["THOST_FTDC_ES_Initialize"] = '3' +#浜ゆ槗瀹屾垚鍒濆鍖 +defineDict["THOST_FTDC_ES_Initialized"] = '4' +#鏀跺競寮濮 +defineDict["THOST_FTDC_ES_Close"] = '5' +#鏀跺競瀹屾垚 +defineDict["THOST_FTDC_ES_Closed"] = '6' +#缁撶畻 +defineDict["THOST_FTDC_ES_Settlement"] = '7' + +typedefDict["TThostFtdcSystemStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSettlementStatusType鏄竴涓粨绠楃姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鍒濆 +defineDict["THOST_FTDC_STS_Initialize"] = '0' +#缁撶畻涓 +defineDict["THOST_FTDC_STS_Settlementing"] = '1' +#宸茬粨绠 +defineDict["THOST_FTDC_STS_Settlemented"] = '2' +#缁撶畻瀹屾垚 +defineDict["THOST_FTDC_STS_Finished"] = '3' + +typedefDict["TThostFtdcSettlementStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRangeIntTypeType鏄竴涓檺瀹氬肩被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRangeIntTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRangeIntFromType鏄竴涓檺瀹氬间笅闄愮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRangeIntFromType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRangeIntToType鏄竴涓檺瀹氬间笂闄愮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRangeIntToType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFunctionIDType鏄竴涓姛鑳戒唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFunctionIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFunctionValueCodeType鏄竴涓姛鑳界紪鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFunctionValueCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFunctionNameType鏄竴涓姛鑳藉悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFunctionNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRoleIDType鏄竴涓鑹茬紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRoleIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRoleNameType鏄竴涓鑹插悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRoleNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDescriptionType鏄竴涓弿杩扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcDescriptionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCombineIDType鏄竴涓粍鍚堢紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCombineIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCombineTypeType鏄竴涓粍鍚堢被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCombineTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInvestorTypeType鏄竴涓姇璧勮呯被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鑷劧浜 +defineDict["THOST_FTDC_CT_Person"] = '0' +#娉曚汉 +defineDict["THOST_FTDC_CT_Company"] = '1' +#鎶曡祫鍩洪噾 +defineDict["THOST_FTDC_CT_Fund"] = '2' +#鐗规畩娉曚汉 +defineDict["THOST_FTDC_CT_SpecialOrgan"] = '3' +#璧勭鎴 +defineDict["THOST_FTDC_CT_Asset"] = '4' + +typedefDict["TThostFtdcInvestorTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBrokerTypeType鏄竴涓粡绾叕鍙哥被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#浜ゆ槗浼氬憳 +defineDict["THOST_FTDC_BT_Trade"] = '0' +#浜ゆ槗缁撶畻浼氬憳 +defineDict["THOST_FTDC_BT_TradeSettle"] = '1' + +typedefDict["TThostFtdcBrokerTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRiskLevelType鏄竴涓闄╃瓑绾х被鍨 +#////////////////////////////////////////////////////////////////////// +#浣庨闄╁鎴 +defineDict["THOST_FTDC_FAS_Low"] = '1' +#鏅氬鎴 +defineDict["THOST_FTDC_FAS_Normal"] = '2' +#鍏虫敞瀹㈡埛 +defineDict["THOST_FTDC_FAS_Focus"] = '3' +#椋庨櫓瀹㈡埛 +defineDict["THOST_FTDC_FAS_Risk"] = '4' + +typedefDict["TThostFtdcRiskLevelType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFeeAcceptStyleType鏄竴涓墜缁垂鏀跺彇鏂瑰紡绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鎸変氦鏄撴敹鍙 +defineDict["THOST_FTDC_FAS_ByTrade"] = '1' +#鎸変氦鍓叉敹鍙 +defineDict["THOST_FTDC_FAS_ByDeliv"] = '2' +#涓嶆敹 +defineDict["THOST_FTDC_FAS_None"] = '3' +#鎸夋寚瀹氭墜缁垂鏀跺彇 +defineDict["THOST_FTDC_FAS_FixFee"] = '4' + +typedefDict["TThostFtdcFeeAcceptStyleType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPasswordTypeType鏄竴涓瘑鐮佺被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#浜ゆ槗瀵嗙爜 +defineDict["THOST_FTDC_PWDT_Trade"] = '1' +#璧勯噾瀵嗙爜 +defineDict["THOST_FTDC_PWDT_Account"] = '2' + +typedefDict["TThostFtdcPasswordTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAlgorithmType鏄竴涓泩浜忕畻娉曠被鍨 +#////////////////////////////////////////////////////////////////////// +#娴泩娴簭閮借绠 +defineDict["THOST_FTDC_AG_All"] = '1' +#娴泩涓嶈锛屾诞浜忚 +defineDict["THOST_FTDC_AG_OnlyLost"] = '2' +#娴泩璁★紝娴簭涓嶈 +defineDict["THOST_FTDC_AG_OnlyGain"] = '3' +#娴泩娴簭閮戒笉璁$畻 +defineDict["THOST_FTDC_AG_None"] = '4' + +typedefDict["TThostFtdcAlgorithmType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcIncludeCloseProfitType鏄竴涓槸鍚﹀寘鍚钩浠撶泩鍒╃被鍨 +#////////////////////////////////////////////////////////////////////// +#鍖呭惈骞充粨鐩堝埄 +defineDict["THOST_FTDC_ICP_Include"] = '0' +#涓嶅寘鍚钩浠撶泩鍒 +defineDict["THOST_FTDC_ICP_NotInclude"] = '2' + +typedefDict["TThostFtdcIncludeCloseProfitType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAllWithoutTradeType鏄竴涓槸鍚﹀彈鍙彁姣斾緥闄愬埗绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鏃犱粨鏃犳垚浜や笉鍙楀彲鎻愭瘮渚嬮檺鍒 +defineDict["THOST_FTDC_AWT_Enable"] = '0' +#鍙楀彲鎻愭瘮渚嬮檺鍒 +defineDict["THOST_FTDC_AWT_Disable"] = '2' +#鏃犱粨涓嶅彈鍙彁姣斾緥闄愬埗 +defineDict["THOST_FTDC_AWT_NoHoldEnable"] = '3' + +typedefDict["TThostFtdcAllWithoutTradeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCommentType鏄竴涓泩浜忕畻娉曡鏄庣被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCommentType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcVersionType鏄竴涓増鏈彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcVersionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTradeCodeType鏄竴涓氦鏄撲唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTradeCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTradeDateType鏄竴涓氦鏄撴棩鏈熺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTradeDateType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTradeTimeType鏄竴涓氦鏄撴椂闂寸被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTradeTimeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTradeSerialType鏄竴涓彂璧锋柟娴佹按鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTradeSerialType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTradeSerialNoType鏄竴涓彂璧锋柟娴佹按鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTradeSerialNoType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFutureIDType鏄竴涓湡璐у叕鍙镐唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFutureIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankIDType鏄竴涓摱琛屼唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankBrchIDType鏄竴涓摱琛屽垎涓績浠g爜绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankBrchIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankBranchIDType鏄竴涓垎涓績浠g爜绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankBranchIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOperNoType鏄竴涓氦鏄撴煖鍛樼被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOperNoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDeviceIDType鏄竴涓笭閬撴爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcDeviceIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRecordNumType鏄竴涓褰曟暟绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRecordNumType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFutureAccountType鏄竴涓湡璐ц祫閲戣处鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFutureAccountType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFuturePwdFlagType鏄竴涓祫閲戝瘑鐮佹牳瀵规爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#涓嶆牳瀵 +defineDict["THOST_FTDC_FPWD_UnCheck"] = '0' +#鏍稿 +defineDict["THOST_FTDC_FPWD_Check"] = '1' + +typedefDict["TThostFtdcFuturePwdFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTransferTypeType鏄竴涓摱鏈熻浆璐︾被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#閾惰杞湡璐 +defineDict["THOST_FTDC_TT_BankToFuture"] = '0' +#鏈熻揣杞摱琛 +defineDict["THOST_FTDC_TT_FutureToBank"] = '1' + +typedefDict["TThostFtdcTransferTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFutureAccPwdType鏄竴涓湡璐ц祫閲戝瘑鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFutureAccPwdType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCurrencyCodeType鏄竴涓竵绉嶇被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCurrencyCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRetCodeType鏄竴涓搷搴斾唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRetCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRetInfoType鏄竴涓搷搴斾俊鎭被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRetInfoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTradeAmtType鏄竴涓摱琛屾讳綑棰濈被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTradeAmtType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUseAmtType鏄竴涓摱琛屽彲鐢ㄤ綑棰濈被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcUseAmtType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFetchAmtType鏄竴涓摱琛屽彲鍙栦綑棰濈被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFetchAmtType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTransferValidFlagType鏄竴涓浆璐︽湁鏁堟爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#鏃犳晥鎴栧け璐 +defineDict["THOST_FTDC_TVF_Invalid"] = '0' +#鏈夋晥 +defineDict["THOST_FTDC_TVF_Valid"] = '1' +#鍐叉 +defineDict["THOST_FTDC_TVF_Reverse"] = '2' + +typedefDict["TThostFtdcTransferValidFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCertCodeType鏄竴涓瘉浠跺彿鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCertCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcReasonType鏄竴涓簨鐢辩被鍨 +#////////////////////////////////////////////////////////////////////// +#閿欏崟 +defineDict["THOST_FTDC_RN_CD"] = '0' +#璧勯噾鍦ㄩ +defineDict["THOST_FTDC_RN_ZT"] = '1' +#鍏跺畠 +defineDict["THOST_FTDC_RN_QT"] = '2' + +typedefDict["TThostFtdcReasonType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFundProjectIDType鏄竴涓祫閲戦」鐩紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFundProjectIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSexType鏄竴涓у埆绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鏈煡 +defineDict["THOST_FTDC_SEX_None"] = '0' +#鐢 +defineDict["THOST_FTDC_SEX_Man"] = '1' +#濂 +defineDict["THOST_FTDC_SEX_Woman"] = '2' + +typedefDict["TThostFtdcSexType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcProfessionType鏄竴涓亴涓氱被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcProfessionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcNationalType鏄竴涓浗绫嶇被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcNationalType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcProvinceType鏄竴涓渷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcProvinceType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRegionType鏄竴涓尯绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRegionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCountryType鏄竴涓浗瀹剁被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCountryType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcLicenseNOType鏄竴涓惀涓氭墽鐓х被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcLicenseNOType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCompanyTypeType鏄竴涓紒涓氭ц川绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCompanyTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBusinessScopeType鏄竴涓粡钀ヨ寖鍥寸被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBusinessScopeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCapitalCurrencyType鏄竴涓敞鍐岃祫鏈竵绉嶇被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCapitalCurrencyType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUserTypeType鏄竴涓敤鎴风被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鎶曡祫鑰 +defineDict["THOST_FTDC_UT_Investor"] = '0' +#鎿嶄綔鍛 +defineDict["THOST_FTDC_UT_Operator"] = '1' +#绠$悊鍛 +defineDict["THOST_FTDC_UT_SuperUser"] = '2' + +typedefDict["TThostFtdcUserTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRateTypeType鏄竴涓垂鐜囩被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#淇濊瘉閲戠巼 +defineDict["THOST_FTDC_RATETYPE_MarginRate"] = '2' + +typedefDict["TThostFtdcRateTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcNoteTypeType鏄竴涓氱煡绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#浜ゆ槗缁撶畻鍗 +defineDict["THOST_FTDC_NOTETYPE_TradeSettleBill"] = '1' +#浜ゆ槗缁撶畻鏈堟姤 +defineDict["THOST_FTDC_NOTETYPE_TradeSettleMonth"] = '2' +#杩藉姞淇濊瘉閲戦氱煡涔 +defineDict["THOST_FTDC_NOTETYPE_CallMarginNotes"] = '3' +#寮鸿骞充粨閫氱煡涔 +defineDict["THOST_FTDC_NOTETYPE_ForceCloseNotes"] = '4' +#鎴愪氦閫氱煡涔 +defineDict["THOST_FTDC_NOTETYPE_TradeNotes"] = '5' +#浜ゅ壊閫氱煡涔 +defineDict["THOST_FTDC_NOTETYPE_DelivNotes"] = '6' + +typedefDict["TThostFtdcNoteTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSettlementStyleType鏄竴涓粨绠楀崟鏂瑰紡绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#閫愭棩鐩競 +defineDict["THOST_FTDC_SBS_Day"] = '1' +#閫愮瑪瀵瑰啿 +defineDict["THOST_FTDC_SBS_Volume"] = '2' + +typedefDict["TThostFtdcSettlementStyleType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBrokerDNSType鏄竴涓煙鍚嶇被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBrokerDNSType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSentenceType鏄竴涓鍙ョ被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSentenceType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSettlementBillTypeType鏄竴涓粨绠楀崟绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鏃ユ姤 +defineDict["THOST_FTDC_ST_Day"] = '0' +#鏈堟姤 +defineDict["THOST_FTDC_ST_Month"] = '1' + +typedefDict["TThostFtdcSettlementBillTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUserRightTypeType鏄竴涓鎴锋潈闄愮被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鐧诲綍 +defineDict["THOST_FTDC_URT_Logon"] = '1' +#閾舵湡杞笎 +defineDict["THOST_FTDC_URT_Transfer"] = '2' +#閭瘎缁撶畻鍗 +defineDict["THOST_FTDC_URT_EMail"] = '3' +#浼犵湡缁撶畻鍗 +defineDict["THOST_FTDC_URT_Fax"] = '4' +#鏉′欢鍗 +defineDict["THOST_FTDC_URT_ConditionOrder"] = '5' + +typedefDict["TThostFtdcUserRightTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcMarginPriceTypeType鏄竴涓繚璇侀噾浠锋牸绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鏄ㄧ粨绠椾环 +defineDict["THOST_FTDC_MPT_PreSettlementPrice"] = '1' +#鏈鏂颁环 +defineDict["THOST_FTDC_MPT_SettlementPrice"] = '2' +#鎴愪氦鍧囦环 +defineDict["THOST_FTDC_MPT_AveragePrice"] = '3' +#寮浠撲环 +defineDict["THOST_FTDC_MPT_OpenPrice"] = '4' + +typedefDict["TThostFtdcMarginPriceTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBillGenStatusType鏄竴涓粨绠楀崟鐢熸垚鐘舵佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈敓鎴 +defineDict["THOST_FTDC_BGS_None"] = '0' +#鐢熸垚涓 +defineDict["THOST_FTDC_BGS_NoGenerated"] = '1' +#宸茬敓鎴 +defineDict["THOST_FTDC_BGS_Generated"] = '2' + +typedefDict["TThostFtdcBillGenStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAlgoTypeType鏄竴涓畻娉曠被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鎸佷粨澶勭悊绠楁硶 +defineDict["THOST_FTDC_AT_HandlePositionAlgo"] = '1' +#瀵绘壘淇濊瘉閲戠巼绠楁硶 +defineDict["THOST_FTDC_AT_FindMarginRateAlgo"] = '2' + +typedefDict["TThostFtdcAlgoTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcHandlePositionAlgoIDType鏄竴涓寔浠撳鐞嗙畻娉曠紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +#鍩烘湰 +defineDict["THOST_FTDC_HPA_Base"] = '1' +#澶ц繛鍟嗗搧浜ゆ槗鎵 +defineDict["THOST_FTDC_HPA_DCE"] = '2' +#閮戝窞鍟嗗搧浜ゆ槗鎵 +defineDict["THOST_FTDC_HPA_CZCE"] = '3' + +typedefDict["TThostFtdcHandlePositionAlgoIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFindMarginRateAlgoIDType鏄竴涓鎵句繚璇侀噾鐜囩畻娉曠紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +#鍩烘湰 +defineDict["THOST_FTDC_FMRA_Base"] = '1' +#澶ц繛鍟嗗搧浜ゆ槗鎵 +defineDict["THOST_FTDC_FMRA_DCE"] = '2' +#閮戝窞鍟嗗搧浜ゆ槗鎵 +defineDict["THOST_FTDC_FMRA_CZCE"] = '3' + +typedefDict["TThostFtdcFindMarginRateAlgoIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcHandleTradingAccountAlgoIDType鏄竴涓祫閲戝鐞嗙畻娉曠紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +#鍩烘湰 +defineDict["THOST_FTDC_HTAA_Base"] = '1' +#澶ц繛鍟嗗搧浜ゆ槗鎵 +defineDict["THOST_FTDC_HTAA_DCE"] = '2' +#閮戝窞鍟嗗搧浜ゆ槗鎵 +defineDict["THOST_FTDC_HTAA_CZCE"] = '3' + +typedefDict["TThostFtdcHandleTradingAccountAlgoIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPersonTypeType鏄竴涓仈绯讳汉绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鎸囧畾涓嬪崟浜 +defineDict["THOST_FTDC_PST_Order"] = '1' +#寮鎴锋巿鏉冧汉 +defineDict["THOST_FTDC_PST_Open"] = '2' +#璧勯噾璋冩嫧浜 +defineDict["THOST_FTDC_PST_Fund"] = '3' +#缁撶畻鍗曠‘璁や汉 +defineDict["THOST_FTDC_PST_Settlement"] = '4' +#娉曚汉 +defineDict["THOST_FTDC_PST_Company"] = '5' +#娉曚汉浠h〃 +defineDict["THOST_FTDC_PST_Corporation"] = '6' +#鎶曡祫鑰呰仈绯讳汉 +defineDict["THOST_FTDC_PST_LinkMan"] = '7' +#鍒嗘埛绠$悊璧勪骇璐熻矗浜 +defineDict["THOST_FTDC_PST_Ledger"] = '8' +#鎵橈紙淇濓級绠′汉 +defineDict["THOST_FTDC_PST_Trustee"] = '9' +#鎵橈紙淇濓級绠℃満鏋勬硶浜轰唬琛 +defineDict["THOST_FTDC_PST_TrusteeCorporation"] = 'A' +#鎵橈紙淇濓級绠℃満鏋勫紑鎴锋巿鏉冧汉 +defineDict["THOST_FTDC_PST_TrusteeOpen"] = 'B' +#鎵橈紙淇濓級绠℃満鏋勮仈绯讳汉 +defineDict["THOST_FTDC_PST_TrusteeContact"] = 'C' +#澧冨鑷劧浜哄弬鑰冭瘉浠 +defineDict["THOST_FTDC_PST_ForeignerRefer"] = 'D' +#娉曚汉浠h〃鍙傝冭瘉浠 +defineDict["THOST_FTDC_PST_CorporationRefer"] = 'E' + +typedefDict["TThostFtdcPersonTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcQueryInvestorRangeType鏄竴涓煡璇㈣寖鍥寸被鍨 +#////////////////////////////////////////////////////////////////////// +#鎵鏈 +defineDict["THOST_FTDC_QIR_All"] = '1' +#鏌ヨ鍒嗙被 +defineDict["THOST_FTDC_QIR_Group"] = '2' +#鍗曚竴鎶曡祫鑰 +defineDict["THOST_FTDC_QIR_Single"] = '3' + +typedefDict["TThostFtdcQueryInvestorRangeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInvestorRiskStatusType鏄竴涓姇璧勮呴闄╃姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#姝e父 +defineDict["THOST_FTDC_IRS_Normal"] = '1' +#璀﹀憡 +defineDict["THOST_FTDC_IRS_Warn"] = '2' +#杩戒繚 +defineDict["THOST_FTDC_IRS_Call"] = '3' +#寮哄钩 +defineDict["THOST_FTDC_IRS_Force"] = '4' +#寮傚父 +defineDict["THOST_FTDC_IRS_Exception"] = '5' + +typedefDict["TThostFtdcInvestorRiskStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcLegIDType鏄竴涓崟鑵跨紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcLegIDType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcLegMultipleType鏄竴涓崟鑵夸箻鏁扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcLegMultipleType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcImplyLevelType鏄竴涓淳鐢熷眰鏁扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcImplyLevelType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcClearAccountType鏄竴涓粨绠楄处鎴风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcClearAccountType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOrganNOType鏄竴涓粨绠楄处鎴风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOrganNOType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcClearbarchIDType鏄竴涓粨绠楄处鎴疯仈琛屽彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcClearbarchIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUserEventTypeType鏄竴涓敤鎴蜂簨浠剁被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鐧诲綍 +defineDict["THOST_FTDC_UET_Login"] = '1' +#鐧诲嚭 +defineDict["THOST_FTDC_UET_Logout"] = '2' +#浜ゆ槗鎴愬姛 +defineDict["THOST_FTDC_UET_Trading"] = '3' +#浜ゆ槗澶辫触 +defineDict["THOST_FTDC_UET_TradingError"] = '4' +#淇敼瀵嗙爜 +defineDict["THOST_FTDC_UET_UpdatePassword"] = '5' +#瀹㈡埛绔璇 +defineDict["THOST_FTDC_UET_Authenticate"] = '6' +#鍏朵粬 +defineDict["THOST_FTDC_UET_Other"] = '9' + +typedefDict["TThostFtdcUserEventTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUserEventInfoType鏄竴涓敤鎴蜂簨浠朵俊鎭被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcUserEventInfoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCloseStyleType鏄竴涓钩浠撴柟寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +#鍏堝紑鍏堝钩 +defineDict["THOST_FTDC_ICS_Close"] = '0' +#鍏堝钩浠婂啀骞虫槰 +defineDict["THOST_FTDC_ICS_CloseToday"] = '1' + +typedefDict["TThostFtdcCloseStyleType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcStatModeType鏄竴涓粺璁℃柟寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +#---- +defineDict["THOST_FTDC_SM_Non"] = '0' +#鎸夊悎绾︾粺璁 +defineDict["THOST_FTDC_SM_Instrument"] = '1' +#鎸変骇鍝佺粺璁 +defineDict["THOST_FTDC_SM_Product"] = '2' +#鎸夋姇璧勮呯粺璁 +defineDict["THOST_FTDC_SM_Investor"] = '3' + +typedefDict["TThostFtdcStatModeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcParkedOrderStatusType鏄竴涓鍩嬪崟鐘舵佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈彂閫 +defineDict["THOST_FTDC_PAOS_NotSend"] = '1' +#宸插彂閫 +defineDict["THOST_FTDC_PAOS_Send"] = '2' +#宸插垹闄 +defineDict["THOST_FTDC_PAOS_Deleted"] = '3' + +typedefDict["TThostFtdcParkedOrderStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcParkedOrderIDType鏄竴涓鍩嬫姤鍗曠紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcParkedOrderIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcParkedOrderActionIDType鏄竴涓鍩嬫挙鍗曠紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcParkedOrderActionIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcVirDealStatusType鏄竴涓鐞嗙姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#姝e湪澶勭悊 +defineDict["THOST_FTDC_VDS_Dealing"] = '1' +#澶勭悊鎴愬姛 +defineDict["THOST_FTDC_VDS_DeaclSucceed"] = '2' + +typedefDict["TThostFtdcVirDealStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOrgSystemIDType鏄竴涓師鏈夌郴缁熶唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +#缁煎悎浜ゆ槗骞冲彴 +defineDict["THOST_FTDC_ORGS_Standard"] = '0' +#鏄撶洓绯荤粺 +defineDict["THOST_FTDC_ORGS_ESunny"] = '1' +#閲戜粫杈綱6绯荤粺 +defineDict["THOST_FTDC_ORGS_KingStarV6"] = '2' + +typedefDict["TThostFtdcOrgSystemIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcVirTradeStatusType鏄竴涓氦鏄撶姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#姝e父澶勭悊涓 +defineDict["THOST_FTDC_VTS_NaturalDeal"] = '0' +#鎴愬姛缁撴潫 +defineDict["THOST_FTDC_VTS_SucceedEnd"] = '1' +#澶辫触缁撴潫 +defineDict["THOST_FTDC_VTS_FailedEND"] = '2' +#寮傚父涓 +defineDict["THOST_FTDC_VTS_Exception"] = '3' +#宸蹭汉宸ュ紓甯稿鐞 +defineDict["THOST_FTDC_VTS_ManualDeal"] = '4' +#閫氳寮傚父 锛岃浜哄伐澶勭悊 +defineDict["THOST_FTDC_VTS_MesException"] = '5' +#绯荤粺鍑洪敊锛岃浜哄伐澶勭悊 +defineDict["THOST_FTDC_VTS_SysException"] = '6' + +typedefDict["TThostFtdcVirTradeStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcVirBankAccTypeType鏄竴涓摱琛屽笎鎴风被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#瀛樻姌 +defineDict["THOST_FTDC_VBAT_BankBook"] = '1' +#鍌ㄨ搫鍗 +defineDict["THOST_FTDC_VBAT_BankCard"] = '2' +#淇$敤鍗 +defineDict["THOST_FTDC_VBAT_CreditCard"] = '3' + +typedefDict["TThostFtdcVirBankAccTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcVirementStatusType鏄竴涓摱琛屽笎鎴风被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#姝e父 +defineDict["THOST_FTDC_VMS_Natural"] = '0' +#閿鎴 +defineDict["THOST_FTDC_VMS_Canceled"] = '9' + +typedefDict["TThostFtdcVirementStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcVirementAvailAbilityType鏄竴涓湁鏁堟爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈‘璁 +defineDict["THOST_FTDC_VAA_NoAvailAbility"] = '0' +#鏈夋晥 +defineDict["THOST_FTDC_VAA_AvailAbility"] = '1' +#鍐叉 +defineDict["THOST_FTDC_VAA_Repeal"] = '2' + +typedefDict["TThostFtdcVirementAvailAbilityType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcVirementTradeCodeType鏄竴涓氦鏄撲唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +#閾惰鍙戣捣閾惰璧勯噾杞湡璐 +defineDict["THOST_FTDC_VTC_BankBankToFuture"] = '102001' +#閾惰鍙戣捣鏈熻揣璧勯噾杞摱琛 +defineDict["THOST_FTDC_VTC_BankFutureToBank"] = '102002' +#鏈熻揣鍙戣捣閾惰璧勯噾杞湡璐 +defineDict["THOST_FTDC_VTC_FutureBankToFuture"] = '202001' +#鏈熻揣鍙戣捣鏈熻揣璧勯噾杞摱琛 +defineDict["THOST_FTDC_VTC_FutureFutureToBank"] = '202002' + +typedefDict["TThostFtdcVirementTradeCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPhotoTypeNameType鏄竴涓奖鍍忕被鍨嬪悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPhotoTypeNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPhotoTypeIDType鏄竴涓奖鍍忕被鍨嬩唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPhotoTypeIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPhotoNameType鏄竴涓奖鍍忓悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPhotoNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTopicIDType鏄竴涓富棰樹唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTopicIDType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcReportTypeIDType鏄竴涓氦鏄撴姤鍛婄被鍨嬫爣璇嗙被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcReportTypeIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCharacterIDType鏄竴涓氦鏄撶壒寰佷唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCharacterIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLParamIDType鏄竴涓弬鏁颁唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLParamIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLInvestorTypeType鏄竴涓姇璧勮呯被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLInvestorTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLIdCardTypeType鏄竴涓瘉浠剁被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLIdCardTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLTradeDirectType鏄竴涓祫閲戣繘鍑烘柟鍚戠被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLTradeDirectType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLTradeModelType鏄竴涓祫閲戣繘鍑烘柟寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLTradeModelType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLParamIDType鏄竴涓弬鏁颁唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLParamIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLOpParamValueType鏄竴涓笟鍔″弬鏁颁唬鐮佸肩被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLOpParamValueType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLCustomerCardTypeType鏄竴涓鎴疯韩浠借瘉浠/璇佹槑鏂囦欢绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLCustomerCardTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLInstitutionNameType鏄竴涓噾铻嶆満鏋勭綉鐐瑰悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLInstitutionNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLDistrictIDType鏄竴涓噾铻嶆満鏋勭綉鐐规墍鍦ㄥ湴鍖鸿鏀垮尯鍒掍唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLDistrictIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLRelationShipType鏄竴涓噾铻嶆満鏋勭綉鐐逛笌澶ч浜ゆ槗鐨勫叧绯荤被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLRelationShipType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLInstitutionTypeType鏄竴涓噾铻嶆満鏋勭綉鐐逛唬鐮佺被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLInstitutionTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLInstitutionIDType鏄竴涓噾铻嶆満鏋勭綉鐐逛唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLInstitutionIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLAccountTypeType鏄竴涓处鎴风被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLAccountTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLTradingTypeType鏄竴涓氦鏄撴柟寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLTradingTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLTransactClassType鏄竴涓秹澶栨敹鏀氦鏄撳垎绫讳笌浠g爜绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLTransactClassType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLCapitalIOType鏄竴涓祫閲戞敹浠樻爣璇嗙被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLCapitalIOType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLSiteType鏄竴涓氦鏄撳湴鐐圭被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLSiteType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLCapitalPurposeType鏄竴涓祫閲戠敤閫旂被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLCapitalPurposeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLReportTypeType鏄竴涓姤鏂囩被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLReportTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLSerialNoType鏄竴涓紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLSerialNoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLStatusType鏄竴涓姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLGenStatusType鏄竴涓狝ml鐢熸垚鏂瑰紡绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#绋嬪簭鐢熸垚 +defineDict["THOST_FTDC_GEN_Program"] = '0' +#浜哄伐鐢熸垚 +defineDict["THOST_FTDC_GEN_HandWork"] = '1' + +typedefDict["TThostFtdcAMLGenStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLSeqCodeType鏄竴涓笟鍔℃爣璇嗗彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLSeqCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLFileNameType鏄竴涓狝ML鏂囦欢鍚嶇被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLFileNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLMoneyType鏄竴涓弽娲楅挶璧勯噾绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLMoneyType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLFileAmountType鏄竴涓弽娲楅挶璧勯噾绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLFileAmountType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCFMMCKeyType鏄竴涓瘑閽ョ被鍨(淇濊瘉閲戠洃绠)绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCFMMCKeyType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCFMMCKeyKindType鏄竴涓姩鎬佸瘑閽ョ被鍒(淇濊瘉閲戠洃绠)绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#涓诲姩璇锋眰鏇存柊 +defineDict["THOST_FTDC_CFMMCKK_REQUEST"] = 'R' +#CFMMC鑷姩鏇存柊 +defineDict["THOST_FTDC_CFMMCKK_AUTO"] = 'A' +#CFMMC鎵嬪姩鏇存柊 +defineDict["THOST_FTDC_CFMMCKK_MANUAL"] = 'M' + +typedefDict["TThostFtdcCFMMCKeyKindType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLReportNameType鏄竴涓姤鏂囧悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAMLReportNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcIndividualNameType鏄竴涓釜浜哄鍚嶇被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcIndividualNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCurrencyIDType鏄竴涓竵绉嶄唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCurrencyIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCustNumberType鏄竴涓鎴风紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCustNumberType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOrganCodeType鏄竴涓満鏋勭紪鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOrganCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOrganNameType鏄竴涓満鏋勫悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOrganNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSuperOrganCodeType鏄竴涓笂绾ф満鏋勭紪鐮,鍗虫湡璐у叕鍙告婚儴銆侀摱琛屾昏绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSuperOrganCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSubBranchIDType鏄竴涓垎鏀満鏋勭被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSubBranchIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSubBranchNameType鏄竴涓垎鏀満鏋勫悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSubBranchNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBranchNetCodeType鏄竴涓満鏋勭綉鐐瑰彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBranchNetCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBranchNetNameType鏄竴涓満鏋勭綉鐐瑰悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBranchNetNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOrganFlagType鏄竴涓満鏋勬爣璇嗙被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOrganFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankCodingForFutureType鏄竴涓摱琛屽鏈熻揣鍏徃鐨勭紪鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankCodingForFutureType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankReturnCodeType鏄竴涓摱琛屽杩斿洖鐮佺殑瀹氫箟绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankReturnCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPlateReturnCodeType鏄竴涓摱鏈熻浆甯愬钩鍙板杩斿洖鐮佺殑瀹氫箟绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPlateReturnCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankSubBranchIDType鏄竴涓摱琛屽垎鏀満鏋勭紪鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankSubBranchIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFutureBranchIDType鏄竴涓湡璐у垎鏀満鏋勭紪鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFutureBranchIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcReturnCodeType鏄竴涓繑鍥炰唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcReturnCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOperatorCodeType鏄竴涓搷浣滃憳绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOperatorCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcClearDepIDType鏄竴涓満鏋勭粨绠楀笎鎴锋満鏋勫彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcClearDepIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcClearBrchIDType鏄竴涓満鏋勭粨绠楀笎鎴疯仈琛屽彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcClearBrchIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcClearNameType鏄竴涓満鏋勭粨绠楀笎鎴峰悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcClearNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankAccountNameType鏄竴涓摱琛屽笎鎴峰悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankAccountNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInvDepIDType鏄竴涓満鏋勬姇璧勪汉璐﹀彿鏈烘瀯鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcInvDepIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInvBrchIDType鏄竴涓満鏋勬姇璧勪汉鑱旇鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcInvBrchIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcMessageFormatVersionType鏄竴涓俊鎭牸寮忕増鏈被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcMessageFormatVersionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDigestType鏄竴涓憳瑕佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcDigestType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAuthenticDataType鏄竴涓璇佹暟鎹被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAuthenticDataType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPasswordKeyType鏄竴涓瘑閽ョ被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPasswordKeyType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFutureAccountNameType鏄竴涓湡璐у笎鎴峰悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFutureAccountNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcMobilePhoneType鏄竴涓墜鏈虹被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcMobilePhoneType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFutureMainKeyType鏄竴涓湡璐у叕鍙镐富瀵嗛挜绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFutureMainKeyType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFutureWorkKeyType鏄竴涓湡璐у叕鍙稿伐浣滃瘑閽ョ被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFutureWorkKeyType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFutureTransKeyType鏄竴涓湡璐у叕鍙镐紶杈撳瘑閽ョ被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFutureTransKeyType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankMainKeyType鏄竴涓摱琛屼富瀵嗛挜绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankMainKeyType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankWorkKeyType鏄竴涓摱琛屽伐浣滃瘑閽ョ被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankWorkKeyType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankTransKeyType鏄竴涓摱琛屼紶杈撳瘑閽ョ被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankTransKeyType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankServerDescriptionType鏄竴涓摱琛屾湇鍔″櫒鎻忚堪淇℃伅绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankServerDescriptionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAddInfoType鏄竴涓檮鍔犱俊鎭被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAddInfoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDescrInfoForReturnCodeType鏄竴涓繑鍥炵爜鎻忚堪绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcDescrInfoForReturnCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCountryCodeType鏄竴涓浗瀹朵唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCountryCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSerialType鏄竴涓祦姘村彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSerialType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPlateSerialType鏄竴涓钩鍙版祦姘村彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPlateSerialType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankSerialType鏄竴涓摱琛屾祦姘村彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankSerialType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCorrectSerialType鏄竴涓鍐叉浜ゆ槗娴佹按鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCorrectSerialType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFutureSerialType鏄竴涓湡璐у叕鍙告祦姘村彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFutureSerialType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcApplicationIDType鏄竴涓簲鐢ㄦ爣璇嗙被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcApplicationIDType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankProxyIDType鏄竴涓摱琛屼唬鐞嗘爣璇嗙被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankProxyIDType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBTCoreIDType鏄竴涓摱鏈熻浆甯愭牳蹇冪郴缁熸爣璇嗙被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBTCoreIDType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcServerPortType鏄竴涓湇鍔$鍙e彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcServerPortType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRepealedTimesType鏄竴涓凡缁忓啿姝f鏁扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRepealedTimesType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRepealTimeIntervalType鏄竴涓啿姝f椂闂撮棿闅旂被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRepealTimeIntervalType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTotalTimesType鏄竴涓瘡鏃ョ疮璁¤浆甯愭鏁扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTotalTimesType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBTRequestIDType鏄竴涓姹侷D绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBTRequestIDType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTIDType鏄竴涓氦鏄揑D绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTIDType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTradeAmountType鏄竴涓氦鏄撻噾棰濓紙鍏冿級绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTradeAmountType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCustFeeType鏄竴涓簲鏀跺鎴疯垂鐢紙鍏冿級绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCustFeeType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFutureFeeType鏄竴涓簲鏀舵湡璐у叕鍙歌垂鐢紙鍏冿級绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFutureFeeType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSingleMaxAmtType鏄竴涓崟绗旀渶楂橀檺棰濈被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSingleMaxAmtType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSingleMinAmtType鏄竴涓崟绗旀渶浣庨檺棰濈被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSingleMinAmtType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTotalAmtType鏄竴涓瘡鏃ョ疮璁¤浆甯愰搴︾被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTotalAmtType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCertificationTypeType鏄竴涓瘉浠剁被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#韬唤璇 +defineDict["THOST_FTDC_CFT_IDCard"] = '0' +#鎶ょ収 +defineDict["THOST_FTDC_CFT_Passport"] = '1' +#鍐涘畼璇 +defineDict["THOST_FTDC_CFT_OfficerIDCard"] = '2' +#澹叺璇 +defineDict["THOST_FTDC_CFT_SoldierIDCard"] = '3' +#鍥炰埂璇 +defineDict["THOST_FTDC_CFT_HomeComingCard"] = '4' +#鎴峰彛绨 +defineDict["THOST_FTDC_CFT_HouseholdRegister"] = '5' +#钀ヤ笟鎵х収鍙 +defineDict["THOST_FTDC_CFT_LicenseNo"] = '6' +#缁勭粐鏈烘瀯浠g爜璇 +defineDict["THOST_FTDC_CFT_InstitutionCodeCard"] = '7' +#涓存椂钀ヤ笟鎵х収鍙 +defineDict["THOST_FTDC_CFT_TempLicenseNo"] = '8' +#姘戝姙闈炰紒涓氱櫥璁拌瘉涔 +defineDict["THOST_FTDC_CFT_NoEnterpriseLicenseNo"] = '9' +#鍏朵粬璇佷欢 +defineDict["THOST_FTDC_CFT_OtherCard"] = 'x' +#涓荤閮ㄩ棬鎵规枃 +defineDict["THOST_FTDC_CFT_SuperDepAgree"] = 'a' + +typedefDict["TThostFtdcCertificationTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFileBusinessCodeType鏄竴涓枃浠朵笟鍔″姛鑳界被鍨 +#////////////////////////////////////////////////////////////////////// +#鍏朵粬 +defineDict["THOST_FTDC_FBC_Others"] = '0' +#杞处浜ゆ槗鏄庣粏瀵硅处 +defineDict["THOST_FTDC_FBC_TransferDetails"] = '1' +#瀹㈡埛璐︽埛鐘舵佸璐 +defineDict["THOST_FTDC_FBC_CustAccStatus"] = '2' +#璐︽埛绫讳氦鏄撴槑缁嗗璐 +defineDict["THOST_FTDC_FBC_AccountTradeDetails"] = '3' +#鏈熻揣璐︽埛淇℃伅鍙樻洿鏄庣粏瀵硅处 +defineDict["THOST_FTDC_FBC_FutureAccountChangeInfoDetails"] = '4' +#瀹㈡埛璧勯噾鍙拌处浣欓鏄庣粏瀵硅处 +defineDict["THOST_FTDC_FBC_CustMoneyDetail"] = '5' +#瀹㈡埛閿鎴风粨鎭槑缁嗗璐 +defineDict["THOST_FTDC_FBC_CustCancelAccountInfo"] = '6' +#瀹㈡埛璧勯噾浣欓瀵硅处缁撴灉 +defineDict["THOST_FTDC_FBC_CustMoneyResult"] = '7' +#鍏跺畠瀵硅处寮傚父缁撴灉鏂囦欢 +defineDict["THOST_FTDC_FBC_OthersExceptionResult"] = '8' +#瀹㈡埛缁撴伅鍑棰濇槑缁 +defineDict["THOST_FTDC_FBC_CustInterestNetMoneyDetails"] = '9' +#瀹㈡埛璧勯噾浜ゆ敹鏄庣粏 +defineDict["THOST_FTDC_FBC_CustMoneySendAndReceiveDetails"] = 'a' +#娉曚汉瀛樼閾惰璧勯噾浜ゆ敹姹囨 +defineDict["THOST_FTDC_FBC_CorporationMoneyTotal"] = 'b' +#涓讳綋闂磋祫閲戜氦鏀舵眹鎬 +defineDict["THOST_FTDC_FBC_MainbodyMoneyTotal"] = 'c' +#鎬诲垎骞宠 鐩戠鏁版嵁 +defineDict["THOST_FTDC_FBC_MainPartMonitorData"] = 'd' +#瀛樼閾惰澶囦粯閲戜綑棰 +defineDict["THOST_FTDC_FBC_PreparationMoney"] = 'e' +#鍗忓姙瀛樼閾惰璧勯噾鐩戠鏁版嵁 +defineDict["THOST_FTDC_FBC_BankMoneyMonitorData"] = 'f' + +typedefDict["TThostFtdcFileBusinessCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCashExchangeCodeType鏄竴涓眹閽炴爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#姹 +defineDict["THOST_FTDC_CEC_Exchange"] = '1' +#閽 +defineDict["THOST_FTDC_CEC_Cash"] = '2' + +typedefDict["TThostFtdcCashExchangeCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcYesNoIndicatorType鏄竴涓槸鎴栧惁鏍囪瘑绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鏄 +defineDict["THOST_FTDC_YNI_Yes"] = '0' +#鍚 +defineDict["THOST_FTDC_YNI_No"] = '1' + +typedefDict["TThostFtdcYesNoIndicatorType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBanlanceTypeType鏄竴涓綑棰濈被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#褰撳墠浣欓 +defineDict["THOST_FTDC_BLT_CurrentMoney"] = '0' +#鍙敤浣欓 +defineDict["THOST_FTDC_BLT_UsableMoney"] = '1' +#鍙彇浣欓 +defineDict["THOST_FTDC_BLT_FetchableMoney"] = '2' +#鍐荤粨浣欓 +defineDict["THOST_FTDC_BLT_FreezeMoney"] = '3' + +typedefDict["TThostFtdcBanlanceTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcGenderType鏄竴涓у埆绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鏈煡鐘舵 +defineDict["THOST_FTDC_GD_Unknown"] = '0' +#鐢 +defineDict["THOST_FTDC_GD_Male"] = '1' +#濂 +defineDict["THOST_FTDC_GD_Female"] = '2' + +typedefDict["TThostFtdcGenderType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFeePayFlagType鏄竴涓垂鐢ㄦ敮浠樻爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#鐢卞彈鐩婃柟鏀粯璐圭敤 +defineDict["THOST_FTDC_FPF_BEN"] = '0' +#鐢卞彂閫佹柟鏀粯璐圭敤 +defineDict["THOST_FTDC_FPF_OUR"] = '1' +#鐢卞彂閫佹柟鏀粯鍙戣捣鐨勮垂鐢紝鍙楃泭鏂规敮浠樻帴鍙楃殑璐圭敤 +defineDict["THOST_FTDC_FPF_SHA"] = '2' + +typedefDict["TThostFtdcFeePayFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPassWordKeyTypeType鏄竴涓瘑閽ョ被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#浜ゆ崲瀵嗛挜 +defineDict["THOST_FTDC_PWKT_ExchangeKey"] = '0' +#瀵嗙爜瀵嗛挜 +defineDict["THOST_FTDC_PWKT_PassWordKey"] = '1' +#MAC瀵嗛挜 +defineDict["THOST_FTDC_PWKT_MACKey"] = '2' +#鎶ユ枃瀵嗛挜 +defineDict["THOST_FTDC_PWKT_MessageKey"] = '3' + +typedefDict["TThostFtdcPassWordKeyTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBTPassWordTypeType鏄竴涓瘑鐮佺被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鏌ヨ +defineDict["THOST_FTDC_PWT_Query"] = '0' +#鍙栨 +defineDict["THOST_FTDC_PWT_Fetch"] = '1' +#杞笎 +defineDict["THOST_FTDC_PWT_Transfer"] = '2' +#浜ゆ槗 +defineDict["THOST_FTDC_PWT_Trade"] = '3' + +typedefDict["TThostFtdcFBTPassWordTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBTEncryModeType鏄竴涓姞瀵嗘柟寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +#涓嶅姞瀵 +defineDict["THOST_FTDC_EM_NoEncry"] = '0' +#DES +defineDict["THOST_FTDC_EM_DES"] = '1' +#3DES +defineDict["THOST_FTDC_EM_3DES"] = '2' + +typedefDict["TThostFtdcFBTEncryModeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankRepealFlagType鏄竴涓摱琛屽啿姝f爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#閾惰鏃犻渶鑷姩鍐叉 +defineDict["THOST_FTDC_BRF_BankNotNeedRepeal"] = '0' +#閾惰寰呰嚜鍔ㄥ啿姝 +defineDict["THOST_FTDC_BRF_BankWaitingRepeal"] = '1' +#閾惰宸茶嚜鍔ㄥ啿姝 +defineDict["THOST_FTDC_BRF_BankBeenRepealed"] = '2' + +typedefDict["TThostFtdcBankRepealFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBrokerRepealFlagType鏄竴涓湡鍟嗗啿姝f爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈熷晢鏃犻渶鑷姩鍐叉 +defineDict["THOST_FTDC_BRORF_BrokerNotNeedRepeal"] = '0' +#鏈熷晢寰呰嚜鍔ㄥ啿姝 +defineDict["THOST_FTDC_BRORF_BrokerWaitingRepeal"] = '1' +#鏈熷晢宸茶嚜鍔ㄥ啿姝 +defineDict["THOST_FTDC_BRORF_BrokerBeenRepealed"] = '2' + +typedefDict["TThostFtdcBrokerRepealFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInstitutionTypeType鏄竴涓満鏋勭被鍒被鍨 +#////////////////////////////////////////////////////////////////////// +#閾惰 +defineDict["THOST_FTDC_TS_Bank"] = '0' +#鏈熷晢 +defineDict["THOST_FTDC_TS_Future"] = '1' +#鍒稿晢 +defineDict["THOST_FTDC_TS_Store"] = '2' + +typedefDict["TThostFtdcInstitutionTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcLastFragmentType鏄竴涓渶鍚庡垎鐗囨爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#鏄渶鍚庡垎鐗 +defineDict["THOST_FTDC_LF_Yes"] = '0' +#涓嶆槸鏈鍚庡垎鐗 +defineDict["THOST_FTDC_LF_No"] = '1' + +typedefDict["TThostFtdcLastFragmentType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankAccStatusType鏄竴涓摱琛岃处鎴风姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#姝e父 +defineDict["THOST_FTDC_BAS_Normal"] = '0' +#鍐荤粨 +defineDict["THOST_FTDC_BAS_Freeze"] = '1' +#鎸傚け +defineDict["THOST_FTDC_BAS_ReportLoss"] = '2' + +typedefDict["TThostFtdcBankAccStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcMoneyAccountStatusType鏄竴涓祫閲戣处鎴风姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#姝e父 +defineDict["THOST_FTDC_MAS_Normal"] = '0' +#閿鎴 +defineDict["THOST_FTDC_MAS_Cancel"] = '1' + +typedefDict["TThostFtdcMoneyAccountStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcManageStatusType鏄竴涓瓨绠$姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鎸囧畾瀛樼 +defineDict["THOST_FTDC_MSS_Point"] = '0' +#棰勬寚瀹 +defineDict["THOST_FTDC_MSS_PrePoint"] = '1' +#鎾ら攢鎸囧畾 +defineDict["THOST_FTDC_MSS_CancelPoint"] = '2' + +typedefDict["TThostFtdcManageStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSystemTypeType鏄竴涓簲鐢ㄧ郴缁熺被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#閾舵湡杞笎 +defineDict["THOST_FTDC_SYT_FutureBankTransfer"] = '0' +#閾惰瘉杞笎 +defineDict["THOST_FTDC_SYT_StockBankTransfer"] = '1' +#绗笁鏂瑰瓨绠 +defineDict["THOST_FTDC_SYT_TheThirdPartStore"] = '2' + +typedefDict["TThostFtdcSystemTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTxnEndFlagType鏄竴涓摱鏈熻浆甯愬垝杞粨鏋滄爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#姝e父澶勭悊涓 +defineDict["THOST_FTDC_TEF_NormalProcessing"] = '0' +#鎴愬姛缁撴潫 +defineDict["THOST_FTDC_TEF_Success"] = '1' +#澶辫触缁撴潫 +defineDict["THOST_FTDC_TEF_Failed"] = '2' +#寮傚父涓 +defineDict["THOST_FTDC_TEF_Abnormal"] = '3' +#宸蹭汉宸ュ紓甯稿鐞 +defineDict["THOST_FTDC_TEF_ManualProcessedForException"] = '4' +#閫氳寮傚父 锛岃浜哄伐澶勭悊 +defineDict["THOST_FTDC_TEF_CommuFailedNeedManualProcess"] = '5' +#绯荤粺鍑洪敊锛岃浜哄伐澶勭悊 +defineDict["THOST_FTDC_TEF_SysErrorNeedManualProcess"] = '6' + +typedefDict["TThostFtdcTxnEndFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcProcessStatusType鏄竴涓摱鏈熻浆甯愭湇鍔″鐞嗙姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈鐞 +defineDict["THOST_FTDC_PSS_NotProcess"] = '0' +#寮濮嬪鐞 +defineDict["THOST_FTDC_PSS_StartProcess"] = '1' +#澶勭悊瀹屾垚 +defineDict["THOST_FTDC_PSS_Finished"] = '2' + +typedefDict["TThostFtdcProcessStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCustTypeType鏄竴涓鎴风被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鑷劧浜 +defineDict["THOST_FTDC_CUSTT_Person"] = '0' +#鏈烘瀯鎴 +defineDict["THOST_FTDC_CUSTT_Institution"] = '1' + +typedefDict["TThostFtdcCustTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBTTransferDirectionType鏄竴涓摱鏈熻浆甯愭柟鍚戠被鍨 +#////////////////////////////////////////////////////////////////////// +#鍏ラ噾锛岄摱琛岃浆鏈熻揣 +defineDict["THOST_FTDC_FBTTD_FromBankToFuture"] = '1' +#鍑洪噾锛屾湡璐ц浆閾惰 +defineDict["THOST_FTDC_FBTTD_FromFutureToBank"] = '2' + +typedefDict["TThostFtdcFBTTransferDirectionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOpenOrDestroyType鏄竴涓紑閿鎴风被鍒被鍨 +#////////////////////////////////////////////////////////////////////// +#寮鎴 +defineDict["THOST_FTDC_OOD_Open"] = '1' +#閿鎴 +defineDict["THOST_FTDC_OOD_Destroy"] = '0' + +typedefDict["TThostFtdcOpenOrDestroyType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAvailabilityFlagType鏄竴涓湁鏁堟爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈‘璁 +defineDict["THOST_FTDC_AVAF_Invalid"] = '0' +#鏈夋晥 +defineDict["THOST_FTDC_AVAF_Valid"] = '1' +#鍐叉 +defineDict["THOST_FTDC_AVAF_Repeal"] = '2' + +typedefDict["TThostFtdcAvailabilityFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOrganTypeType鏄竴涓満鏋勭被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#閾惰浠g悊 +defineDict["THOST_FTDC_OT_Bank"] = '1' +#浜ゆ槗鍓嶇疆 +defineDict["THOST_FTDC_OT_Future"] = '2' +#閾舵湡杞笎骞冲彴绠$悊 +defineDict["THOST_FTDC_OT_PlateForm"] = '9' + +typedefDict["TThostFtdcOrganTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOrganLevelType鏄竴涓満鏋勭骇鍒被鍨 +#////////////////////////////////////////////////////////////////////// +#閾惰鎬昏鎴栨湡鍟嗘婚儴 +defineDict["THOST_FTDC_OL_HeadQuarters"] = '1' +#閾惰鍒嗕腑蹇冩垨鏈熻揣鍏徃钀ヤ笟閮 +defineDict["THOST_FTDC_OL_Branch"] = '2' + +typedefDict["TThostFtdcOrganLevelType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcProtocalIDType鏄竴涓崗璁被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈熷晢鍗忚 +defineDict["THOST_FTDC_PID_FutureProtocal"] = '0' +#宸ヨ鍗忚 +defineDict["THOST_FTDC_PID_ICBCProtocal"] = '1' +#鍐滆鍗忚 +defineDict["THOST_FTDC_PID_ABCProtocal"] = '2' +#涓浗閾惰鍗忚 +defineDict["THOST_FTDC_PID_CBCProtocal"] = '3' +#寤鸿鍗忚 +defineDict["THOST_FTDC_PID_CCBProtocal"] = '4' +#浜よ鍗忚 +defineDict["THOST_FTDC_PID_BOCOMProtocal"] = '5' +#閾舵湡杞笎骞冲彴鍗忚 +defineDict["THOST_FTDC_PID_FBTPlateFormProtocal"] = 'X' + +typedefDict["TThostFtdcProtocalIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcConnectModeType鏄竴涓鎺ュ瓧杩炴帴鏂瑰紡绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鐭繛鎺 +defineDict["THOST_FTDC_CM_ShortConnect"] = '0' +#闀胯繛鎺 +defineDict["THOST_FTDC_CM_LongConnect"] = '1' + +typedefDict["TThostFtdcConnectModeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSyncModeType鏄竴涓鎺ュ瓧閫氫俊鏂瑰紡绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#寮傛 +defineDict["THOST_FTDC_SRM_ASync"] = '0' +#鍚屾 +defineDict["THOST_FTDC_SRM_Sync"] = '1' + +typedefDict["TThostFtdcSyncModeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankAccTypeType鏄竴涓摱琛屽笎鍙风被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#閾惰瀛樻姌 +defineDict["THOST_FTDC_BAT_BankBook"] = '1' +#鍌ㄨ搫鍗 +defineDict["THOST_FTDC_BAT_SavingCard"] = '2' +#淇$敤鍗 +defineDict["THOST_FTDC_BAT_CreditCard"] = '3' + +typedefDict["TThostFtdcBankAccTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFutureAccTypeType鏄竴涓湡璐у叕鍙稿笎鍙风被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#閾惰瀛樻姌 +defineDict["THOST_FTDC_FAT_BankBook"] = '1' +#鍌ㄨ搫鍗 +defineDict["THOST_FTDC_FAT_SavingCard"] = '2' +#淇$敤鍗 +defineDict["THOST_FTDC_FAT_CreditCard"] = '3' + +typedefDict["TThostFtdcFutureAccTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOrganStatusType鏄竴涓帴鍏ユ満鏋勭姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鍚敤 +defineDict["THOST_FTDC_OS_Ready"] = '0' +#绛惧埌 +defineDict["THOST_FTDC_OS_CheckIn"] = '1' +#绛鹃 +defineDict["THOST_FTDC_OS_CheckOut"] = '2' +#瀵瑰笎鏂囦欢鍒拌揪 +defineDict["THOST_FTDC_OS_CheckFileArrived"] = '3' +#瀵瑰笎 +defineDict["THOST_FTDC_OS_CheckDetail"] = '4' +#鏃ョ粓娓呯悊 +defineDict["THOST_FTDC_OS_DayEndClean"] = '5' +#娉ㄩ攢 +defineDict["THOST_FTDC_OS_Invalid"] = '9' + +typedefDict["TThostFtdcOrganStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCCBFeeModeType鏄竴涓缓琛屾敹璐规ā寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +#鎸夐噾棰濇墸鏀 +defineDict["THOST_FTDC_CCBFM_ByAmount"] = '1' +#鎸夋湀鎵f敹 +defineDict["THOST_FTDC_CCBFM_ByMonth"] = '2' + +typedefDict["TThostFtdcCCBFeeModeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCommApiTypeType鏄竴涓氳API绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#瀹㈡埛绔 +defineDict["THOST_FTDC_CAPIT_Client"] = '1' +#鏈嶅姟绔 +defineDict["THOST_FTDC_CAPIT_Server"] = '2' +#浜ゆ槗绯荤粺鐨刄serApi +defineDict["THOST_FTDC_CAPIT_UserApi"] = '3' + +typedefDict["TThostFtdcCommApiTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcServiceIDType鏄竴涓湇鍔$紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcServiceIDType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcServiceLineNoType鏄竴涓湇鍔$嚎璺紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcServiceLineNoType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcServiceNameType鏄竴涓湇鍔″悕绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcServiceNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcLinkStatusType鏄竴涓繛鎺ョ姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#宸茬粡杩炴帴 +defineDict["THOST_FTDC_LS_Connected"] = '1' +#娌℃湁杩炴帴 +defineDict["THOST_FTDC_LS_Disconnected"] = '2' + +typedefDict["TThostFtdcLinkStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCommApiPointerType鏄竴涓氳API鎸囬拡绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCommApiPointerType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPwdFlagType鏄竴涓瘑鐮佹牳瀵规爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#涓嶆牳瀵 +defineDict["THOST_FTDC_BPWDF_NoCheck"] = '0' +#鏄庢枃鏍稿 +defineDict["THOST_FTDC_BPWDF_BlankCheck"] = '1' +#瀵嗘枃鏍稿 +defineDict["THOST_FTDC_BPWDF_EncryptCheck"] = '2' + +typedefDict["TThostFtdcPwdFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSecuAccTypeType鏄竴涓湡璐у笎鍙风被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#璧勯噾甯愬彿 +defineDict["THOST_FTDC_SAT_AccountID"] = '1' +#璧勯噾鍗″彿 +defineDict["THOST_FTDC_SAT_CardID"] = '2' +#涓婃捣鑲′笢甯愬彿 +defineDict["THOST_FTDC_SAT_SHStockholderID"] = '3' +#娣卞湷鑲′笢甯愬彿 +defineDict["THOST_FTDC_SAT_SZStockholderID"] = '4' + +typedefDict["TThostFtdcSecuAccTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTransferStatusType鏄竴涓浆璐︿氦鏄撶姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#姝e父 +defineDict["THOST_FTDC_TRFS_Normal"] = '0' +#琚啿姝 +defineDict["THOST_FTDC_TRFS_Repealed"] = '1' + +typedefDict["TThostFtdcTransferStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSponsorTypeType鏄竴涓彂璧锋柟绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鏈熷晢 +defineDict["THOST_FTDC_SPTYPE_Broker"] = '0' +#閾惰 +defineDict["THOST_FTDC_SPTYPE_Bank"] = '1' + +typedefDict["TThostFtdcSponsorTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcReqRspTypeType鏄竴涓姹傚搷搴旂被鍒被鍨 +#////////////////////////////////////////////////////////////////////// +#璇锋眰 +defineDict["THOST_FTDC_REQRSP_Request"] = '0' +#鍝嶅簲 +defineDict["THOST_FTDC_REQRSP_Response"] = '1' + +typedefDict["TThostFtdcReqRspTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBTUserEventTypeType鏄竴涓摱鏈熻浆甯愮敤鎴蜂簨浠剁被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#绛惧埌 +defineDict["THOST_FTDC_FBTUET_SignIn"] = '0' +#閾惰杞湡璐 +defineDict["THOST_FTDC_FBTUET_FromBankToFuture"] = '1' +#鏈熻揣杞摱琛 +defineDict["THOST_FTDC_FBTUET_FromFutureToBank"] = '2' +#寮鎴 +defineDict["THOST_FTDC_FBTUET_OpenAccount"] = '3' +#閿鎴 +defineDict["THOST_FTDC_FBTUET_CancelAccount"] = '4' +#鍙樻洿閾惰璐︽埛 +defineDict["THOST_FTDC_FBTUET_ChangeAccount"] = '5' +#鍐叉閾惰杞湡璐 +defineDict["THOST_FTDC_FBTUET_RepealFromBankToFuture"] = '6' +#鍐叉鏈熻揣杞摱琛 +defineDict["THOST_FTDC_FBTUET_RepealFromFutureToBank"] = '7' +#鏌ヨ閾惰璐︽埛 +defineDict["THOST_FTDC_FBTUET_QueryBankAccount"] = '8' +#鏌ヨ鏈熻揣璐︽埛 +defineDict["THOST_FTDC_FBTUET_QueryFutureAccount"] = '9' +#绛鹃 +defineDict["THOST_FTDC_FBTUET_SignOut"] = 'A' +#瀵嗛挜鍚屾 +defineDict["THOST_FTDC_FBTUET_SyncKey"] = 'B' +#鍏朵粬 +defineDict["THOST_FTDC_FBTUET_Other"] = 'Z' + +typedefDict["TThostFtdcFBTUserEventTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankIDByBankType鏄竴涓摱琛岃嚜宸辩殑缂栫爜绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankIDByBankType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankOperNoType鏄竴涓摱琛屾搷浣滃憳鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankOperNoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankCustNoType鏄竴涓摱琛屽鎴峰彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankCustNoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDBOPSeqNoType鏄竴涓掑鐨勫簭鍒楀彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcDBOPSeqNoType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTableNameType鏄竴涓狥BT琛ㄥ悕绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTableNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPKNameType鏄竴涓狥BT琛ㄦ搷浣滀富閿悕绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPKNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPKValueType鏄竴涓狥BT琛ㄦ搷浣滀富閿肩被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPKValueType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDBOperationType鏄竴涓褰曟搷浣滅被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鎻掑叆 +defineDict["THOST_FTDC_DBOP_Insert"] = '0' +#鏇存柊 +defineDict["THOST_FTDC_DBOP_Update"] = '1' +#鍒犻櫎 +defineDict["THOST_FTDC_DBOP_Delete"] = '2' + +typedefDict["TThostFtdcDBOperationType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSyncFlagType鏄竴涓悓姝ユ爣璁扮被鍨 +#////////////////////////////////////////////////////////////////////// +#宸插悓姝 +defineDict["THOST_FTDC_SYNF_Yes"] = '0' +#鏈悓姝 +defineDict["THOST_FTDC_SYNF_No"] = '1' + +typedefDict["TThostFtdcSyncFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTargetIDType鏄竴涓悓姝ョ洰鏍囩紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTargetIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSyncTypeType鏄竴涓悓姝ョ被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#涓娆″悓姝 +defineDict["THOST_FTDC_SYNT_OneOffSync"] = '0' +#瀹氭椂鍚屾 +defineDict["THOST_FTDC_SYNT_TimerSync"] = '1' +#瀹氭椂瀹屽叏鍚屾 +defineDict["THOST_FTDC_SYNT_TimerFullSync"] = '2' + +typedefDict["TThostFtdcSyncTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBETimeType鏄竴涓悇绉嶆崲姹囨椂闂寸被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBETimeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBEBankNoType鏄竴涓崲姹囬摱琛岃鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBEBankNoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBECertNoType鏄竴涓崲姹囧嚟璇佸彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBECertNoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExDirectionType鏄竴涓崲姹囨柟鍚戠被鍨 +#////////////////////////////////////////////////////////////////////// +#缁撴眹 +defineDict["THOST_FTDC_FBEDIR_Settlement"] = '0' +#鍞眹 +defineDict["THOST_FTDC_FBEDIR_Sale"] = '1' + +typedefDict["TThostFtdcExDirectionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBEBankAccountType鏄竴涓崲姹囬摱琛岃处鎴风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBEBankAccountType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBEBankAccountNameType鏄竴涓崲姹囬摱琛岃处鎴峰悕绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBEBankAccountNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBEAmtType鏄竴涓悇绉嶆崲姹囬噾棰濈被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBEAmtType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBEBusinessTypeType鏄竴涓崲姹囦笟鍔$被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBEBusinessTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBEPostScriptType鏄竴涓崲姹囬檮瑷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBEPostScriptType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBERemarkType鏄竴涓崲姹囧娉ㄧ被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBERemarkType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExRateType鏄竴涓崲姹囨眹鐜囩被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcExRateType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBEResultFlagType鏄竴涓崲姹囨垚鍔熸爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#鎴愬姛 +defineDict["THOST_FTDC_FBERES_Success"] = '0' +#璐︽埛浣欓涓嶈冻 +defineDict["THOST_FTDC_FBERES_InsufficientBalance"] = '1' +#浜ゆ槗缁撴灉鏈煡 +defineDict["THOST_FTDC_FBERES_UnknownTrading"] = '8' +#澶辫触 +defineDict["THOST_FTDC_FBERES_Fail"] = 'x' + +typedefDict["TThostFtdcFBEResultFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBERtnMsgType鏄竴涓崲姹囪繑鍥炰俊鎭被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBERtnMsgType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBEExtendMsgType鏄竴涓崲姹囨墿灞曚俊鎭被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBEExtendMsgType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBEBusinessSerialType鏄竴涓崲姹囪璐︽祦姘村彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBEBusinessSerialType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBESystemSerialType鏄竴涓崲姹囨祦姘村彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBESystemSerialType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBETotalExCntType鏄竴涓崲姹囦氦鏄撴荤瑪鏁扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBETotalExCntType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBEExchStatusType鏄竴涓崲姹囦氦鏄撶姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#姝e父 +defineDict["THOST_FTDC_FBEES_Normal"] = '0' +#浜ゆ槗閲嶅彂 +defineDict["THOST_FTDC_FBEES_ReExchange"] = '1' + +typedefDict["TThostFtdcFBEExchStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBEFileFlagType鏄竴涓崲姹囨枃浠舵爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#鏁版嵁鍖 +defineDict["THOST_FTDC_FBEFG_DataPackage"] = '0' +#鏂囦欢 +defineDict["THOST_FTDC_FBEFG_File"] = '1' + +typedefDict["TThostFtdcFBEFileFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBEAlreadyTradeType鏄竴涓崲姹囧凡浜ゆ槗鏍囧織绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鏈氦鏄 +defineDict["THOST_FTDC_FBEAT_NotTrade"] = '0' +#宸蹭氦鏄 +defineDict["THOST_FTDC_FBEAT_Trade"] = '1' + +typedefDict["TThostFtdcFBEAlreadyTradeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBEOpenBankType鏄竴涓崲姹囪处鎴峰紑鎴疯绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBEOpenBankType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBEUserEventTypeType鏄竴涓摱鏈熸崲姹囩敤鎴蜂簨浠剁被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#绛惧埌 +defineDict["THOST_FTDC_FBEUET_SignIn"] = '0' +#鎹㈡眹 +defineDict["THOST_FTDC_FBEUET_Exchange"] = '1' +#鎹㈡眹閲嶅彂 +defineDict["THOST_FTDC_FBEUET_ReExchange"] = '2' +#閾惰璐︽埛鏌ヨ +defineDict["THOST_FTDC_FBEUET_QueryBankAccount"] = '3' +#鎹㈡眹鏄庣粏鏌ヨ +defineDict["THOST_FTDC_FBEUET_QueryExchDetial"] = '4' +#鎹㈡眹姹囨绘煡璇 +defineDict["THOST_FTDC_FBEUET_QueryExchSummary"] = '5' +#鎹㈡眹姹囩巼鏌ヨ +defineDict["THOST_FTDC_FBEUET_QueryExchRate"] = '6' +#瀵硅处鏂囦欢閫氱煡 +defineDict["THOST_FTDC_FBEUET_CheckBankAccount"] = '7' +#绛鹃 +defineDict["THOST_FTDC_FBEUET_SignOut"] = '8' +#鍏朵粬 +defineDict["THOST_FTDC_FBEUET_Other"] = 'Z' + +typedefDict["TThostFtdcFBEUserEventTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBEFileNameType鏄竴涓崲姹囩浉鍏虫枃浠跺悕绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBEFileNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBEBatchSerialType鏄竴涓崲姹囨壒娆″彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFBEBatchSerialType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBEReqFlagType鏄竴涓崲姹囧彂閫佹爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈鐞 +defineDict["THOST_FTDC_FBERF_UnProcessed"] = '0' +#绛夊緟鍙戦 +defineDict["THOST_FTDC_FBERF_WaitSend"] = '1' +#鍙戦佹垚鍔 +defineDict["THOST_FTDC_FBERF_SendSuccess"] = '2' +#鍙戦佸け璐 +defineDict["THOST_FTDC_FBERF_SendFailed"] = '3' +#绛夊緟閲嶅彂 +defineDict["THOST_FTDC_FBERF_WaitReSend"] = '4' + +typedefDict["TThostFtdcFBEReqFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcNotifyClassType鏄竴涓闄╅氱煡绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#姝e父 +defineDict["THOST_FTDC_NC_NOERROR"] = '0' +#璀︾ず +defineDict["THOST_FTDC_NC_Warn"] = '1' +#杩戒繚 +defineDict["THOST_FTDC_NC_Call"] = '2' +#寮哄钩 +defineDict["THOST_FTDC_NC_Force"] = '3' +#绌夸粨 +defineDict["THOST_FTDC_NC_CHUANCANG"] = '4' +#寮傚父 +defineDict["THOST_FTDC_NC_Exception"] = '5' + +typedefDict["TThostFtdcNotifyClassType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRiskNofityInfoType鏄竴涓鎴烽闄╅氱煡娑堟伅绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRiskNofityInfoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcForceCloseSceneIdType鏄竴涓己骞冲満鏅紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcForceCloseSceneIdType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcForceCloseTypeType鏄竴涓己骞冲崟绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鎵嬪伐寮哄钩 +defineDict["THOST_FTDC_FCT_Manual"] = '0' +#鍗曚竴鎶曡祫鑰呰緟鍔╁己骞 +defineDict["THOST_FTDC_FCT_Single"] = '1' +#鎵归噺鎶曡祫鑰呰緟鍔╁己骞 +defineDict["THOST_FTDC_FCT_Group"] = '2' + +typedefDict["TThostFtdcForceCloseTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInstrumentIDsType鏄竴涓涓骇鍝佷唬鐮,鐢+鍒嗛殧,濡俢u+zn绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcInstrumentIDsType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRiskNotifyMethodType鏄竴涓闄╅氱煡閫斿緞绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#绯荤粺閫氱煡 +defineDict["THOST_FTDC_RNM_System"] = '0' +#鐭俊閫氱煡 +defineDict["THOST_FTDC_RNM_SMS"] = '1' +#閭欢閫氱煡 +defineDict["THOST_FTDC_RNM_EMail"] = '2' +#浜哄伐閫氱煡 +defineDict["THOST_FTDC_RNM_Manual"] = '3' + +typedefDict["TThostFtdcRiskNotifyMethodType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRiskNotifyStatusType鏄竴涓闄╅氱煡鐘舵佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈敓鎴 +defineDict["THOST_FTDC_RNS_NotGen"] = '0' +#宸茬敓鎴愭湭鍙戦 +defineDict["THOST_FTDC_RNS_Generated"] = '1' +#鍙戦佸け璐 +defineDict["THOST_FTDC_RNS_SendError"] = '2' +#宸插彂閫佹湭鎺ユ敹 +defineDict["THOST_FTDC_RNS_SendOk"] = '3' +#宸叉帴鏀舵湭纭 +defineDict["THOST_FTDC_RNS_Received"] = '4' +#宸茬‘璁 +defineDict["THOST_FTDC_RNS_Confirmed"] = '5' + +typedefDict["TThostFtdcRiskNotifyStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRiskUserEventType鏄竴涓鎺х敤鎴锋搷浣滀簨浠剁被鍨 +#////////////////////////////////////////////////////////////////////// +#瀵煎嚭鏁版嵁 +defineDict["THOST_FTDC_RUE_ExportData"] = '0' + +typedefDict["TThostFtdcRiskUserEventType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcParamIDType鏄竴涓弬鏁颁唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcParamIDType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcParamNameType鏄竴涓弬鏁板悕绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcParamNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcParamValueType鏄竴涓弬鏁板肩被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcParamValueType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcConditionalOrderSortTypeType鏄竴涓潯浠跺崟绱㈠紩鏉′欢绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#浣跨敤鏈鏂颁环鍗囧簭 +defineDict["THOST_FTDC_COST_LastPriceAsc"] = '0' +#浣跨敤鏈鏂颁环闄嶅簭 +defineDict["THOST_FTDC_COST_LastPriceDesc"] = '1' +#浣跨敤鍗栦环鍗囧簭 +defineDict["THOST_FTDC_COST_AskPriceAsc"] = '2' +#浣跨敤鍗栦环闄嶅簭 +defineDict["THOST_FTDC_COST_AskPriceDesc"] = '3' +#浣跨敤涔颁环鍗囧簭 +defineDict["THOST_FTDC_COST_BidPriceAsc"] = '4' +#浣跨敤涔颁环闄嶅簭 +defineDict["THOST_FTDC_COST_BidPriceDesc"] = '5' + +typedefDict["TThostFtdcConditionalOrderSortTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSendTypeType鏄竴涓姤閫佺姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈彂閫 +defineDict["THOST_FTDC_UOAST_NoSend"] = '0' +#宸插彂閫 +defineDict["THOST_FTDC_UOAST_Sended"] = '1' +#宸茬敓鎴 +defineDict["THOST_FTDC_UOAST_Generated"] = '2' +#鎶ラ佸け璐 +defineDict["THOST_FTDC_UOAST_SendFail"] = '3' +#鎺ユ敹鎴愬姛 +defineDict["THOST_FTDC_UOAST_Success"] = '4' +#鎺ユ敹澶辫触 +defineDict["THOST_FTDC_UOAST_Fail"] = '5' +#鍙栨秷鎶ラ +defineDict["THOST_FTDC_UOAST_Cancel"] = '6' + +typedefDict["TThostFtdcSendTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcClientIDStatusType鏄竴涓氦鏄撶紪鐮佺姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈敵璇 +defineDict["THOST_FTDC_UOACS_NoApply"] = '1' +#宸叉彁浜ょ敵璇 +defineDict["THOST_FTDC_UOACS_Submited"] = '2' +#宸插彂閫佺敵璇 +defineDict["THOST_FTDC_UOACS_Sended"] = '3' +#瀹屾垚 +defineDict["THOST_FTDC_UOACS_Success"] = '4' +#鎷掔粷 +defineDict["THOST_FTDC_UOACS_Refuse"] = '5' +#宸叉挙閿缂栫爜 +defineDict["THOST_FTDC_UOACS_Cancel"] = '6' + +typedefDict["TThostFtdcClientIDStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcIndustryIDType鏄竴涓涓氱紪鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcIndustryIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcQuestionIDType鏄竴涓壒鏈変俊鎭紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcQuestionIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcQuestionContentType鏄竴涓壒鏈変俊鎭鏄庣被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcQuestionContentType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOptionIDType鏄竴涓夐」缂栧彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOptionIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOptionContentType鏄竴涓夐」璇存槑绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOptionContentType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcQuestionTypeType鏄竴涓壒鏈変俊鎭被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鍗曢 +defineDict["THOST_FTDC_QT_Radio"] = '1' +#澶氶 +defineDict["THOST_FTDC_QT_Option"] = '2' +#濉┖ +defineDict["THOST_FTDC_QT_Blank"] = '3' + +typedefDict["TThostFtdcQuestionTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcProcessIDType鏄竴涓笟鍔℃祦姘村彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcProcessIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSeqNoType鏄竴涓祦姘村彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSeqNoType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUOAProcessStatusType鏄竴涓祦绋嬬姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcUOAProcessStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcProcessTypeType鏄竴涓祦绋嬪姛鑳界被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcProcessTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBusinessTypeType鏄竴涓笟鍔$被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#璇锋眰 +defineDict["THOST_FTDC_BT_Request"] = '1' +#搴旂瓟 +defineDict["THOST_FTDC_BT_Response"] = '2' +#閫氱煡 +defineDict["THOST_FTDC_BT_Notice"] = '3' + +typedefDict["TThostFtdcBusinessTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCfmmcReturnCodeType鏄竴涓洃鎺т腑蹇冭繑鍥炵爜绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鎴愬姛 +defineDict["THOST_FTDC_CRC_Success"] = '0' +#璇ュ鎴峰凡缁忔湁娴佺▼鍦ㄥ鐞嗕腑 +defineDict["THOST_FTDC_CRC_Working"] = '1' +#鐩戞帶涓鎴疯祫鏂欐鏌ュけ璐 +defineDict["THOST_FTDC_CRC_InfoFail"] = '2' +#鐩戞帶涓疄鍚嶅埗妫鏌ュけ璐 +defineDict["THOST_FTDC_CRC_IDCardFail"] = '3' +#鍏朵粬閿欒 +defineDict["THOST_FTDC_CRC_OtherFail"] = '4' + +typedefDict["TThostFtdcCfmmcReturnCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExReturnCodeType鏄竴涓氦鏄撴墍杩斿洖鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcExReturnCodeType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcClientTypeType鏄竴涓鎴风被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鎵鏈 +defineDict["THOST_FTDC_CfMMCCT_All"] = '0' +#涓汉 +defineDict["THOST_FTDC_CfMMCCT_Person"] = '1' +#鍗曚綅 +defineDict["THOST_FTDC_CfMMCCT_Company"] = '2' +#鍏朵粬 +defineDict["THOST_FTDC_CfMMCCT_Other"] = '3' +#鐗规畩娉曚汉 +defineDict["THOST_FTDC_CfMMCCT_SpecialOrgan"] = '4' +#璧勭鎴 +defineDict["THOST_FTDC_CfMMCCT_Asset"] = '5' + +typedefDict["TThostFtdcClientTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExchangeIDTypeType鏄竴涓氦鏄撴墍缂栧彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#涓婃捣鏈熻揣浜ゆ槗鎵 +defineDict["THOST_FTDC_EIDT_SHFE"] = 'S' +#閮戝窞鍟嗗搧浜ゆ槗鎵 +defineDict["THOST_FTDC_EIDT_CZCE"] = 'Z' +#澶ц繛鍟嗗搧浜ゆ槗鎵 +defineDict["THOST_FTDC_EIDT_DCE"] = 'D' +#涓浗閲戣瀺鏈熻揣浜ゆ槗鎵 +defineDict["THOST_FTDC_EIDT_CFFEX"] = 'J' +#涓婃捣鍥介檯鑳芥簮浜ゆ槗涓績鑲′唤鏈夐檺鍏徃 +defineDict["THOST_FTDC_EIDT_INE"] = 'N' + +typedefDict["TThostFtdcExchangeIDTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExClientIDTypeType鏄竴涓氦鏄撶紪鐮佺被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#濂椾繚 +defineDict["THOST_FTDC_ECIDT_Hedge"] = '1' +#濂楀埄 +defineDict["THOST_FTDC_ECIDT_Arbitrage"] = '2' +#鎶曟満 +defineDict["THOST_FTDC_ECIDT_Speculation"] = '3' + +typedefDict["TThostFtdcExClientIDTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcClientClassifyType鏄竴涓鎴峰垎绫荤爜绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcClientClassifyType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUOAOrganTypeType鏄竴涓崟浣嶆ц川绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcUOAOrganTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUOACountryCodeType鏄竴涓浗瀹朵唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcUOACountryCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAreaCodeType鏄竴涓尯鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAreaCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFuturesIDType鏄竴涓洃鎺т腑蹇冧负瀹㈡埛鍒嗛厤鐨勪唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFuturesIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCffmcDateType鏄竴涓棩鏈熺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCffmcDateType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCffmcTimeType鏄竴涓椂闂寸被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCffmcTimeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcNocIDType鏄竴涓粍缁囨満鏋勪唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcNocIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUpdateFlagType鏄竴涓洿鏂扮姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈洿鏂 +defineDict["THOST_FTDC_UF_NoUpdate"] = '0' +#鏇存柊鍏ㄩ儴淇℃伅鎴愬姛 +defineDict["THOST_FTDC_UF_Success"] = '1' +#鏇存柊鍏ㄩ儴淇℃伅澶辫触 +defineDict["THOST_FTDC_UF_Fail"] = '2' +#鏇存柊浜ゆ槗缂栫爜鎴愬姛 +defineDict["THOST_FTDC_UF_TCSuccess"] = '3' +#鏇存柊浜ゆ槗缂栫爜澶辫触 +defineDict["THOST_FTDC_UF_TCFail"] = '4' +#宸蹭涪寮 +defineDict["THOST_FTDC_UF_Cancel"] = '5' + +typedefDict["TThostFtdcUpdateFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcApplyOperateIDType鏄竴涓敵璇峰姩浣滅被鍨 +#////////////////////////////////////////////////////////////////////// +#寮鎴 +defineDict["THOST_FTDC_AOID_OpenInvestor"] = '1' +#淇敼韬唤淇℃伅 +defineDict["THOST_FTDC_AOID_ModifyIDCard"] = '2' +#淇敼涓鑸俊鎭 +defineDict["THOST_FTDC_AOID_ModifyNoIDCard"] = '3' +#鐢宠浜ゆ槗缂栫爜 +defineDict["THOST_FTDC_AOID_ApplyTradingCode"] = '4' +#鎾ら攢浜ゆ槗缂栫爜 +defineDict["THOST_FTDC_AOID_CancelTradingCode"] = '5' +#閿鎴 +defineDict["THOST_FTDC_AOID_CancelInvestor"] = '6' +#璐︽埛浼戠湢 +defineDict["THOST_FTDC_AOID_FreezeAccount"] = '8' +#婵娲讳紤鐪犺处鎴 +defineDict["THOST_FTDC_AOID_ActiveFreezeAccount"] = '9' + +typedefDict["TThostFtdcApplyOperateIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcApplyStatusIDType鏄竴涓敵璇风姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈ˉ鍏 +defineDict["THOST_FTDC_ASID_NoComplete"] = '1' +#宸叉彁浜 +defineDict["THOST_FTDC_ASID_Submited"] = '2' +#宸插鏍 +defineDict["THOST_FTDC_ASID_Checked"] = '3' +#宸叉嫆缁 +defineDict["THOST_FTDC_ASID_Refused"] = '4' +#宸插垹闄 +defineDict["THOST_FTDC_ASID_Deleted"] = '5' + +typedefDict["TThostFtdcApplyStatusIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSendMethodType鏄竴涓彂閫佹柟寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +#鏂囦欢鍙戦 +defineDict["THOST_FTDC_UOASM_ByAPI"] = '1' +#鐢靛瓙鍙戦 +defineDict["THOST_FTDC_UOASM_ByFile"] = '2' + +typedefDict["TThostFtdcSendMethodType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcEventTypeType鏄竴涓笟鍔℃搷浣滅被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcEventTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcEventModeType鏄竴涓搷浣滄柟娉曠被鍨 +#////////////////////////////////////////////////////////////////////// +#澧炲姞 +defineDict["THOST_FTDC_EvM_ADD"] = '1' +#淇敼 +defineDict["THOST_FTDC_EvM_UPDATE"] = '2' +#鍒犻櫎 +defineDict["THOST_FTDC_EvM_DELETE"] = '3' +#澶嶆牳 +defineDict["THOST_FTDC_EvM_CHECK"] = '4' +#澶嶅埗 +defineDict["THOST_FTDC_EvM_COPY"] = '5' +#娉ㄩ攢 +defineDict["THOST_FTDC_EvM_CANCEL"] = '6' +#鍐查攢 +defineDict["THOST_FTDC_EvM_Reverse"] = '7' + +typedefDict["TThostFtdcEventModeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUOAAutoSendType鏄竴涓粺涓寮鎴风敵璇疯嚜鍔ㄥ彂閫佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鑷姩鍙戦佸苟鎺ユ敹 +defineDict["THOST_FTDC_UOAA_ASR"] = '1' +#鑷姩鍙戦侊紝涓嶈嚜鍔ㄦ帴鏀 +defineDict["THOST_FTDC_UOAA_ASNR"] = '2' +#涓嶈嚜鍔ㄥ彂閫侊紝鑷姩鎺ユ敹 +defineDict["THOST_FTDC_UOAA_NSAR"] = '3' +#涓嶈嚜鍔ㄥ彂閫侊紝涔熶笉鑷姩鎺ユ敹 +defineDict["THOST_FTDC_UOAA_NSR"] = '4' + +typedefDict["TThostFtdcUOAAutoSendType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcQueryDepthType鏄竴涓煡璇㈡繁搴︾被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcQueryDepthType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDataCenterIDType鏄竴涓暟鎹腑蹇冧唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcDataCenterIDType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFlowIDType鏄竴涓祦绋婭D绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鎶曡祫鑰呭搴旀姇璧勮呯粍璁剧疆 +defineDict["THOST_FTDC_EvM_InvestorGroupFlow"] = '1' +#鎶曡祫鑰呮墜缁垂鐜囪缃 +defineDict["THOST_FTDC_EvM_InvestorRate"] = '2' +#鎶曡祫鑰呮墜缁垂鐜囨ā鏉垮叧绯昏缃 +defineDict["THOST_FTDC_EvM_InvestorCommRateModel"] = '3' + +typedefDict["TThostFtdcFlowIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCheckLevelType鏄竴涓鏍哥骇鍒被鍨 +#////////////////////////////////////////////////////////////////////// +#闆剁骇澶嶆牳 +defineDict["THOST_FTDC_CL_Zero"] = '0' +#涓绾у鏍 +defineDict["THOST_FTDC_CL_One"] = '1' +#浜岀骇澶嶆牳 +defineDict["THOST_FTDC_CL_Two"] = '2' + +typedefDict["TThostFtdcCheckLevelType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCheckNoType鏄竴涓搷浣滄鏁扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCheckNoType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCheckStatusType鏄竴涓鏍哥骇鍒被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈鏍 +defineDict["THOST_FTDC_CHS_Init"] = '0' +#澶嶆牳涓 +defineDict["THOST_FTDC_CHS_Checking"] = '1' +#宸插鏍 +defineDict["THOST_FTDC_CHS_Checked"] = '2' +#鎷掔粷 +defineDict["THOST_FTDC_CHS_Refuse"] = '3' +#浣滃簾 +defineDict["THOST_FTDC_CHS_Cancel"] = '4' + +typedefDict["TThostFtdcCheckStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUsedStatusType鏄竴涓敓鏁堢姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈敓鏁 +defineDict["THOST_FTDC_CHU_Unused"] = '0' +#宸茬敓鏁 +defineDict["THOST_FTDC_CHU_Used"] = '1' +#鐢熸晥澶辫触 +defineDict["THOST_FTDC_CHU_Fail"] = '2' + +typedefDict["TThostFtdcUsedStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRateTemplateNameType鏄竴涓ā鍨嬪悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRateTemplateNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPropertyStringType鏄竴涓敤浜庢煡璇㈢殑鎶曡祫灞炴у瓧娈电被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPropertyStringType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankAcountOriginType鏄竴涓处鎴锋潵婧愮被鍨 +#////////////////////////////////////////////////////////////////////// +#鎵嬪伐褰曞叆 +defineDict["THOST_FTDC_BAO_ByAccProperty"] = '0' +#閾舵湡杞处 +defineDict["THOST_FTDC_BAO_ByFBTransfer"] = '1' + +typedefDict["TThostFtdcBankAcountOriginType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcMonthBillTradeSumType鏄竴涓粨绠楀崟鏈堟姤鎴愪氦姹囨绘柟寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +#鍚屾棩鍚屽悎绾 +defineDict["THOST_FTDC_MBTS_ByInstrument"] = '0' +#鍚屾棩鍚屽悎绾﹀悓浠锋牸 +defineDict["THOST_FTDC_MBTS_ByDayInsPrc"] = '1' +#鍚屽悎绾 +defineDict["THOST_FTDC_MBTS_ByDayIns"] = '2' + +typedefDict["TThostFtdcMonthBillTradeSumType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFBTTradeCodeEnumType鏄竴涓摱鏈熶氦鏄撲唬鐮佹灇涓剧被鍨 +#////////////////////////////////////////////////////////////////////// +#閾惰鍙戣捣閾惰杞湡璐 +defineDict["THOST_FTDC_FTC_BankLaunchBankToBroker"] = '102001' +#鏈熻揣鍙戣捣閾惰杞湡璐 +defineDict["THOST_FTDC_FTC_BrokerLaunchBankToBroker"] = '202001' +#閾惰鍙戣捣鏈熻揣杞摱琛 +defineDict["THOST_FTDC_FTC_BankLaunchBrokerToBank"] = '102002' +#鏈熻揣鍙戣捣鏈熻揣杞摱琛 +defineDict["THOST_FTDC_FTC_BrokerLaunchBrokerToBank"] = '202002' + +typedefDict["TThostFtdcFBTTradeCodeEnumType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRateTemplateIDType鏄竴涓ā鍨嬩唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRateTemplateIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRiskRateType鏄竴涓闄╁害绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRiskRateType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTimestampType鏄竴涓椂闂存埑绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTimestampType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInvestorIDRuleNameType鏄竴涓彿娈佃鍒欏悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcInvestorIDRuleNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInvestorIDRuleExprType鏄竴涓彿娈佃鍒欒〃杈惧紡绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcInvestorIDRuleExprType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcLastDriftType鏄竴涓笂娆TP婕傜Щ鍊肩被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcLastDriftType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcLastSuccessType鏄竴涓笂娆TP鎴愬姛鍊肩被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcLastSuccessType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAuthKeyType鏄竴涓护鐗屽瘑閽ョ被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAuthKeyType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSerialNumberType鏄竴涓簭鍒楀彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSerialNumberType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOTPTypeType鏄竴涓姩鎬佷护鐗岀被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鏃犲姩鎬佷护鐗 +defineDict["THOST_FTDC_OTP_NONE"] = '0' +#鏃堕棿浠ょ墝 +defineDict["THOST_FTDC_OTP_TOTP"] = '1' + +typedefDict["TThostFtdcOTPTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOTPVendorsIDType鏄竴涓姩鎬佷护鐗屾彁渚涘晢绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOTPVendorsIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOTPVendorsNameType鏄竴涓姩鎬佷护鐗屾彁渚涘晢鍚嶇О绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOTPVendorsNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOTPStatusType鏄竴涓姩鎬佷护鐗岀姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈娇鐢 +defineDict["THOST_FTDC_OTPS_Unused"] = '0' +#宸蹭娇鐢 +defineDict["THOST_FTDC_OTPS_Used"] = '1' +#娉ㄩ攢 +defineDict["THOST_FTDC_OTPS_Disuse"] = '2' + +typedefDict["TThostFtdcOTPStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBrokerUserTypeType鏄竴涓粡娴庡叕鍙哥敤鎴风被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鎶曡祫鑰 +defineDict["THOST_FTDC_BUT_Investor"] = '1' +#鎿嶄綔鍛 +defineDict["THOST_FTDC_BUT_BrokerUser"] = '2' + +typedefDict["TThostFtdcBrokerUserTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFutureTypeType鏄竴涓湡璐х被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鍟嗗搧鏈熻揣 +defineDict["THOST_FTDC_FUTT_Commodity"] = '1' +#閲戣瀺鏈熻揣 +defineDict["THOST_FTDC_FUTT_Financial"] = '2' + +typedefDict["TThostFtdcFutureTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFundEventTypeType鏄竴涓祫閲戠鐞嗘搷浣滅被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#杞处闄愰 +defineDict["THOST_FTDC_FET_Restriction"] = '0' +#褰撴棩杞处闄愰 +defineDict["THOST_FTDC_FET_TodayRestriction"] = '1' +#鏈熷晢娴佹按 +defineDict["THOST_FTDC_FET_Transfer"] = '2' +#璧勯噾鍐荤粨 +defineDict["THOST_FTDC_FET_Credit"] = '3' +#鎶曡祫鑰呭彲鎻愯祫閲戞瘮渚 +defineDict["THOST_FTDC_FET_InvestorWithdrawAlm"] = '4' +#鍗曚釜閾惰甯愭埛杞处闄愰 +defineDict["THOST_FTDC_FET_BankRestriction"] = '5' +#閾舵湡绛剧害璐︽埛 +defineDict["THOST_FTDC_FET_Accountregister"] = '6' +#浜ゆ槗鎵鍑哄叆閲 +defineDict["THOST_FTDC_FET_ExchangeFundIO"] = '7' +#鎶曡祫鑰呭嚭鍏ラ噾 +defineDict["THOST_FTDC_FET_InvestorFundIO"] = '8' + +typedefDict["TThostFtdcFundEventTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAccountSourceTypeType鏄竴涓祫閲戣处鎴锋潵婧愮被鍨 +#////////////////////////////////////////////////////////////////////// +#閾舵湡鍚屾 +defineDict["THOST_FTDC_AST_FBTransfer"] = '0' +#鎵嬪伐褰曞叆 +defineDict["THOST_FTDC_AST_ManualEntry"] = '1' + +typedefDict["TThostFtdcAccountSourceTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCodeSourceTypeType鏄竴涓氦鏄撶紪鐮佹潵婧愮被鍨 +#////////////////////////////////////////////////////////////////////// +#缁熶竴寮鎴(宸茶鑼) +defineDict["THOST_FTDC_CST_UnifyAccount"] = '0' +#鎵嬪伐褰曞叆(鏈鑼) +defineDict["THOST_FTDC_CST_ManualEntry"] = '1' + +typedefDict["TThostFtdcCodeSourceTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUserRangeType鏄竴涓搷浣滃憳鑼冨洿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鎵鏈 +defineDict["THOST_FTDC_UR_All"] = '0' +#鍗曚竴鎿嶄綔鍛 +defineDict["THOST_FTDC_UR_Single"] = '1' + +typedefDict["TThostFtdcUserRangeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTimeSpanType鏄竴涓椂闂磋法搴︾被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTimeSpanType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcImportSequenceIDType鏄竴涓姩鎬佷护鐗屽鍏ユ壒娆$紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcImportSequenceIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcByGroupType鏄竴涓氦鏄撶粺璁¤〃鎸夊鎴风粺璁℃柟寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +#鎸夋姇璧勮呯粺璁 +defineDict["THOST_FTDC_BG_Investor"] = '2' +#鎸夌被缁熻 +defineDict["THOST_FTDC_BG_Group"] = '1' + +typedefDict["TThostFtdcByGroupType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTradeSumStatModeType鏄竴涓氦鏄撶粺璁¤〃鎸夎寖鍥寸粺璁℃柟寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +#鎸夊悎绾︾粺璁 +defineDict["THOST_FTDC_TSSM_Instrument"] = '1' +#鎸変骇鍝佺粺璁 +defineDict["THOST_FTDC_TSSM_Product"] = '2' +#鎸変氦鏄撴墍缁熻 +defineDict["THOST_FTDC_TSSM_Exchange"] = '3' + +typedefDict["TThostFtdcTradeSumStatModeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcComTypeType鏄竴涓粍鍚堟垚浜ょ被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcComTypeType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUserProductIDType鏄竴涓骇鍝佹爣璇嗙被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcUserProductIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUserProductNameType鏄竴涓骇鍝佸悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcUserProductNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUserProductMemoType鏄竴涓骇鍝佽鏄庣被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcUserProductMemoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCCancelFlagType鏄竴涓柊澧炴垨鍙樻洿鏍囧織绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCCancelFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCDateType鏄竴涓棩鏈熺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCDateType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCInvestorNameType鏄竴涓鎴峰悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCInvestorNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCOpenInvestorNameType鏄竴涓鎴峰悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCOpenInvestorNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCInvestorIDType鏄竴涓鎴蜂唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCInvestorIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCIdentifiedCardNoType鏄竴涓瘉浠跺彿鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCIdentifiedCardNoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCClientIDType鏄竴涓氦鏄撶紪鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCClientIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCBankFlagType鏄竴涓摱琛屾爣璇嗙被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCBankFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCBankAccountType鏄竴涓摱琛岃处鎴风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCBankAccountType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCOpenNameType鏄竴涓紑鎴蜂汉绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCOpenNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCMemoType鏄竴涓鏄庣被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCMemoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCTimeType鏄竴涓椂闂寸被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCTimeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCTradeIDType鏄竴涓垚浜ゆ祦姘村彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCTradeIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCExchangeInstIDType鏄竴涓悎绾︿唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCExchangeInstIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCMortgageNameType鏄竴涓川鎶煎搧鍚嶇О绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCMortgageNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCReasonType鏄竴涓簨鐢辩被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCReasonType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcIsSettlementType鏄竴涓槸鍚︿负闈炵粨绠椾細鍛樼被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcIsSettlementType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCMoneyType鏄竴涓祫閲戠被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCMoneyType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCPriceType鏄竴涓环鏍肩被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCPriceType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCOptionsTypeType鏄竴涓湡鏉冪被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCOptionsTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCStrikePriceType鏄竴涓墽琛屼环绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCStrikePriceType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCTargetProductIDType鏄竴涓爣鐨勫搧绉嶇被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCTargetProductIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCTargetInstrIDType鏄竴涓爣鐨勫悎绾︾被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCTargetInstrIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCommModelNameType鏄竴涓墜缁垂鐜囨ā鏉垮悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCommModelNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCommModelMemoType鏄竴涓墜缁垂鐜囨ā鏉垮娉ㄧ被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCommModelMemoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExprSetModeType鏄竴涓棩鏈熻〃杈惧紡璁剧疆绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鐩稿宸叉湁瑙勫垯璁剧疆 +defineDict["THOST_FTDC_ESM_Relative"] = '1' +#鍏稿瀷璁剧疆 +defineDict["THOST_FTDC_ESM_Typical"] = '2' + +typedefDict["TThostFtdcExprSetModeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRateInvestorRangeType鏄竴涓姇璧勮呰寖鍥寸被鍨 +#////////////////////////////////////////////////////////////////////// +#鍏徃鏍囧噯 +defineDict["THOST_FTDC_RIR_All"] = '1' +#妯℃澘 +defineDict["THOST_FTDC_RIR_Model"] = '2' +#鍗曚竴鎶曡祫鑰 +defineDict["THOST_FTDC_RIR_Single"] = '3' + +typedefDict["TThostFtdcRateInvestorRangeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAgentBrokerIDType鏄竴涓唬鐞嗙粡绾叕鍙镐唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAgentBrokerIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDRIdentityIDType鏄竴涓氦鏄撲腑蹇冧唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcDRIdentityIDType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDRIdentityNameType鏄竴涓氦鏄撲腑蹇冨悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcDRIdentityNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDBLinkIDType鏄竴涓狣BLink鏍囪瘑鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcDBLinkIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSyncDataStatusType鏄竴涓富娆$敤绯荤粺鏁版嵁鍚屾鐘舵佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈悓姝 +defineDict["THOST_FTDC_SDS_Initialize"] = '0' +#鍚屾涓 +defineDict["THOST_FTDC_SDS_Settlementing"] = '1' +#宸插悓姝 +defineDict["THOST_FTDC_SDS_Settlemented"] = '2' + +typedefDict["TThostFtdcSyncDataStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTradeSourceType鏄竴涓垚浜ゆ潵婧愮被鍨 +#////////////////////////////////////////////////////////////////////// +#鏉ヨ嚜浜ゆ槗鎵鏅氬洖鎶 +defineDict["THOST_FTDC_TSRC_NORMAL"] = '0' +#鏉ヨ嚜鏌ヨ +defineDict["THOST_FTDC_TSRC_QUERY"] = '1' + +typedefDict["TThostFtdcTradeSourceType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFlexStatModeType鏄竴涓骇鍝佸悎绾︾粺璁℃柟寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +#浜у搧缁熻 +defineDict["THOST_FTDC_FSM_Product"] = '1' +#浜ゆ槗鎵缁熻 +defineDict["THOST_FTDC_FSM_Exchange"] = '2' +#缁熻鎵鏈 +defineDict["THOST_FTDC_FSM_All"] = '3' + +typedefDict["TThostFtdcFlexStatModeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcByInvestorRangeType鏄竴涓姇璧勮呰寖鍥寸粺璁℃柟寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +#灞炴х粺璁 +defineDict["THOST_FTDC_BIR_Property"] = '1' +#缁熻鎵鏈 +defineDict["THOST_FTDC_BIR_All"] = '2' + +typedefDict["TThostFtdcByInvestorRangeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSRiskRateType鏄竴涓闄╁害绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSRiskRateType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSequenceNo12Type鏄竴涓簭鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSequenceNo12Type"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPropertyInvestorRangeType鏄竴涓姇璧勮呰寖鍥寸被鍨 +#////////////////////////////////////////////////////////////////////// +#鎵鏈 +defineDict["THOST_FTDC_PIR_All"] = '1' +#鎶曡祫鑰呭睘鎬 +defineDict["THOST_FTDC_PIR_Property"] = '2' +#鍗曚竴鎶曡祫鑰 +defineDict["THOST_FTDC_PIR_Single"] = '3' + +typedefDict["TThostFtdcPropertyInvestorRangeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFileStatusType鏄竴涓枃浠剁姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈敓鎴 +defineDict["THOST_FTDC_FIS_NoCreate"] = '0' +#宸茬敓鎴 +defineDict["THOST_FTDC_FIS_Created"] = '1' +#鐢熸垚澶辫触 +defineDict["THOST_FTDC_FIS_Failed"] = '2' + +typedefDict["TThostFtdcFileStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFileGenStyleType鏄竴涓枃浠剁敓鎴愭柟寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +#涓嬪彂 +defineDict["THOST_FTDC_FGS_FileTransmit"] = '0' +#鐢熸垚 +defineDict["THOST_FTDC_FGS_FileGen"] = '1' + +typedefDict["TThostFtdcFileGenStyleType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSysOperModeType鏄竴涓郴缁熸棩蹇楁搷浣滄柟娉曠被鍨 +#////////////////////////////////////////////////////////////////////// +#澧炲姞 +defineDict["THOST_FTDC_SoM_Add"] = '1' +#淇敼 +defineDict["THOST_FTDC_SoM_Update"] = '2' +#鍒犻櫎 +defineDict["THOST_FTDC_SoM_Delete"] = '3' +#澶嶅埗 +defineDict["THOST_FTDC_SoM_Copy"] = '4' +#婵娲 +defineDict["THOST_FTDC_SoM_AcTive"] = '5' +#娉ㄩ攢 +defineDict["THOST_FTDC_SoM_CanCel"] = '6' +#閲嶇疆 +defineDict["THOST_FTDC_SoM_ReSet"] = '7' + +typedefDict["TThostFtdcSysOperModeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSysOperTypeType鏄竴涓郴缁熸棩蹇楁搷浣滅被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#淇敼鎿嶄綔鍛樺瘑鐮 +defineDict["THOST_FTDC_SoT_UpdatePassword"] = '0' +#鎿嶄綔鍛樼粍缁囨灦鏋勫叧绯 +defineDict["THOST_FTDC_SoT_UserDepartment"] = '1' +#瑙掕壊绠$悊 +defineDict["THOST_FTDC_SoT_RoleManager"] = '2' +#瑙掕壊鍔熻兘璁剧疆 +defineDict["THOST_FTDC_SoT_RoleFunction"] = '3' +#鍩虹鍙傛暟璁剧疆 +defineDict["THOST_FTDC_SoT_BaseParam"] = '4' +#璁剧疆鎿嶄綔鍛 +defineDict["THOST_FTDC_SoT_SetUserID"] = '5' +#鐢ㄦ埛瑙掕壊璁剧疆 +defineDict["THOST_FTDC_SoT_SetUserRole"] = '6' +#鐢ㄦ埛IP闄愬埗 +defineDict["THOST_FTDC_SoT_UserIpRestriction"] = '7' +#缁勭粐鏋舵瀯绠$悊 +defineDict["THOST_FTDC_SoT_DepartmentManager"] = '8' +#缁勭粐鏋舵瀯鍚戞煡璇㈠垎绫诲鍒 +defineDict["THOST_FTDC_SoT_DepartmentCopy"] = '9' +#浜ゆ槗缂栫爜绠$悊 +defineDict["THOST_FTDC_SoT_Tradingcode"] = 'A' +#鎶曡祫鑰呯姸鎬佺淮鎶 +defineDict["THOST_FTDC_SoT_InvestorStatus"] = 'B' +#鎶曡祫鑰呮潈闄愮鐞 +defineDict["THOST_FTDC_SoT_InvestorAuthority"] = 'C' +#灞炴ц缃 +defineDict["THOST_FTDC_SoT_PropertySet"] = 'D' +#閲嶇疆鎶曡祫鑰呭瘑鐮 +defineDict["THOST_FTDC_SoT_ReSetInvestorPasswd"] = 'E' +#鎶曡祫鑰呬釜鎬т俊鎭淮鎶 +defineDict["THOST_FTDC_SoT_InvestorPersonalityInfo"] = 'F' + +typedefDict["TThostFtdcSysOperTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCDataQueyTypeType鏄竴涓笂鎶ユ暟鎹煡璇㈢被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鏌ヨ褰撳墠浜ゆ槗鏃ユ姤閫佺殑鏁版嵁 +defineDict["THOST_FTDC_CSRCQ_Current"] = '0' +#鏌ヨ鍘嗗彶鎶ラ佺殑浠g悊缁忕邯鍏徃鐨勬暟鎹 +defineDict["THOST_FTDC_CSRCQ_History"] = '1' + +typedefDict["TThostFtdcCSRCDataQueyTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFreezeStatusType鏄竴涓紤鐪犵姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#娲昏穬 +defineDict["THOST_FTDC_FRS_Normal"] = '1' +#浼戠湢 +defineDict["THOST_FTDC_FRS_Freeze"] = '0' + +typedefDict["TThostFtdcFreezeStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcStandardStatusType鏄竴涓鑼冪姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#宸茶鑼 +defineDict["THOST_FTDC_STST_Standard"] = '0' +#鏈鑼 +defineDict["THOST_FTDC_STST_NonStandard"] = '1' + +typedefDict["TThostFtdcStandardStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCFreezeStatusType鏄竴涓紤鐪犵姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCFreezeStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRightParamTypeType鏄竴涓厤缃被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#浼戠湢鎴 +defineDict["THOST_FTDC_RPT_Freeze"] = '1' +#婵娲讳紤鐪犳埛 +defineDict["THOST_FTDC_RPT_FreezeActive"] = '2' +#寮浠撴潈闄愰檺鍒 +defineDict["THOST_FTDC_RPT_OpenLimit"] = '3' +#瑙i櫎寮浠撴潈闄愰檺鍒 +defineDict["THOST_FTDC_RPT_RelieveOpenLimit"] = '4' + +typedefDict["TThostFtdcRightParamTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRightTemplateIDType鏄竴涓ā鏉夸唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRightTemplateIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRightTemplateNameType鏄竴涓ā鏉垮悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRightTemplateNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDataStatusType鏄竴涓弽娲楅挶瀹℃牳琛ㄦ暟鎹姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#姝e父 +defineDict["THOST_FTDC_AMLDS_Normal"] = '0' +#宸插垹闄 +defineDict["THOST_FTDC_AMLDS_Deleted"] = '1' + +typedefDict["TThostFtdcDataStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAMLCheckStatusType鏄竴涓鏍哥姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈鏍 +defineDict["THOST_FTDC_AMLCHS_Init"] = '0' +#澶嶆牳涓 +defineDict["THOST_FTDC_AMLCHS_Checking"] = '1' +#宸插鏍 +defineDict["THOST_FTDC_AMLCHS_Checked"] = '2' +#鎷掔粷涓婃姤 +defineDict["THOST_FTDC_AMLCHS_RefuseReport"] = '3' + +typedefDict["TThostFtdcAMLCheckStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAmlDateTypeType鏄竴涓棩鏈熺被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#妫鏌ユ棩鏈 +defineDict["THOST_FTDC_AMLDT_DrawDay"] = '0' +#鍙戠敓鏃ユ湡 +defineDict["THOST_FTDC_AMLDT_TouchDay"] = '1' + +typedefDict["TThostFtdcAmlDateTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAmlCheckLevelType鏄竴涓鏍哥骇鍒被鍨 +#////////////////////////////////////////////////////////////////////// +#闆剁骇瀹℃牳 +defineDict["THOST_FTDC_AMLCL_CheckLevel0"] = '0' +#涓绾у鏍 +defineDict["THOST_FTDC_AMLCL_CheckLevel1"] = '1' +#浜岀骇瀹℃牳 +defineDict["THOST_FTDC_AMLCL_CheckLevel2"] = '2' +#涓夌骇瀹℃牳 +defineDict["THOST_FTDC_AMLCL_CheckLevel3"] = '3' + +typedefDict["TThostFtdcAmlCheckLevelType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAmlCheckFlowType鏄竴涓弽娲楅挶鏁版嵁鎶藉彇瀹℃牳娴佺▼绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAmlCheckFlowType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDataTypeType鏄竴涓暟鎹被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcDataTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExportFileTypeType鏄竴涓鍑烘枃浠剁被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#CSV +defineDict["THOST_FTDC_EFT_CSV"] = '0' +#Excel +defineDict["THOST_FTDC_EFT_EXCEL"] = '1' +#DBF +defineDict["THOST_FTDC_EFT_DBF"] = '2' + +typedefDict["TThostFtdcExportFileTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSettleManagerTypeType鏄竴涓粨绠楅厤缃被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#缁撶畻鍓嶅噯澶 +defineDict["THOST_FTDC_SMT_Before"] = '1' +#缁撶畻 +defineDict["THOST_FTDC_SMT_Settlement"] = '2' +#缁撶畻鍚庢牳瀵 +defineDict["THOST_FTDC_SMT_After"] = '3' +#缁撶畻鍚庡鐞 +defineDict["THOST_FTDC_SMT_Settlemented"] = '4' + +typedefDict["TThostFtdcSettleManagerTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSettleManagerIDType鏄竴涓粨绠楅厤缃唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSettleManagerIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSettleManagerNameType鏄竴涓粨绠楅厤缃悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSettleManagerNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSettleManagerLevelType鏄竴涓粨绠楅厤缃瓑绾х被鍨 +#////////////////////////////////////////////////////////////////////// +#蹇呰 +defineDict["THOST_FTDC_SML_Must"] = '1' +#璀﹀憡 +defineDict["THOST_FTDC_SML_Alarm"] = '2' +#鎻愮ず +defineDict["THOST_FTDC_SML_Prompt"] = '3' +#涓嶆鏌 +defineDict["THOST_FTDC_SML_Ignore"] = '4' + +typedefDict["TThostFtdcSettleManagerLevelType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSettleManagerGroupType鏄竴涓ā鍧楀垎缁勭被鍨 +#////////////////////////////////////////////////////////////////////// +#浜ゆ槗鎵鏍稿 +defineDict["THOST_FTDC_SMG_Exhcange"] = '1' +#鍐呴儴鏍稿 +defineDict["THOST_FTDC_SMG_ASP"] = '2' +#涓婃姤鏁版嵁鏍稿 +defineDict["THOST_FTDC_SMG_CSRC"] = '3' + +typedefDict["TThostFtdcSettleManagerGroupType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCheckResultMemoType鏄竴涓牳瀵圭粨鏋滆鏄庣被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCheckResultMemoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFunctionUrlType鏄竴涓姛鑳介摼鎺ョ被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcFunctionUrlType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAuthInfoType鏄竴涓鎴风璁よ瘉淇℃伅绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAuthInfoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAuthCodeType鏄竴涓鎴风璁よ瘉鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAuthCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcLimitUseTypeType鏄竴涓繚鍊奸搴︿娇鐢ㄧ被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鍙噸澶嶄娇鐢 +defineDict["THOST_FTDC_LUT_Repeatable"] = '1' +#涓嶅彲閲嶅浣跨敤 +defineDict["THOST_FTDC_LUT_Unrepeatable"] = '2' + +typedefDict["TThostFtdcLimitUseTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDataResourceType鏄竴涓暟鎹潵婧愮被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈郴缁 +defineDict["THOST_FTDC_DAR_Settle"] = '1' +#浜ゆ槗鎵 +defineDict["THOST_FTDC_DAR_Exchange"] = '2' +#鎶ラ佹暟鎹 +defineDict["THOST_FTDC_DAR_CSRC"] = '3' + +typedefDict["TThostFtdcDataResourceType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcMarginTypeType鏄竴涓繚璇侀噾绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#浜ゆ槗鎵淇濊瘉閲戠巼 +defineDict["THOST_FTDC_MGT_ExchMarginRate"] = '0' +#鎶曡祫鑰呬繚璇侀噾鐜 +defineDict["THOST_FTDC_MGT_InstrMarginRate"] = '1' +#鎶曡祫鑰呬氦鏄撲繚璇侀噾鐜 +defineDict["THOST_FTDC_MGT_InstrMarginRateTrade"] = '2' + +typedefDict["TThostFtdcMarginTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcActiveTypeType鏄竴涓敓鏁堢被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#浠呭綋鏃ョ敓鏁 +defineDict["THOST_FTDC_ACT_Intraday"] = '1' +#闀挎湡鐢熸晥 +defineDict["THOST_FTDC_ACT_Long"] = '2' + +typedefDict["TThostFtdcActiveTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcMarginRateTypeType鏄竴涓啿绐佷繚璇侀噾鐜囩被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#浜ゆ槗鎵淇濊瘉閲戠巼 +defineDict["THOST_FTDC_MRT_Exchange"] = '1' +#鎶曡祫鑰呬繚璇侀噾鐜 +defineDict["THOST_FTDC_MRT_Investor"] = '2' +#鎶曡祫鑰呬氦鏄撲繚璇侀噾鐜 +defineDict["THOST_FTDC_MRT_InvestorTrade"] = '3' + +typedefDict["TThostFtdcMarginRateTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBackUpStatusType鏄竴涓浠芥暟鎹姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈敓鎴愬浠芥暟鎹 +defineDict["THOST_FTDC_BUS_UnBak"] = '0' +#澶囦唤鏁版嵁鐢熸垚涓 +defineDict["THOST_FTDC_BUS_BakUp"] = '1' +#宸茬敓鎴愬浠芥暟鎹 +defineDict["THOST_FTDC_BUS_BakUped"] = '2' +#澶囦唤鏁版嵁澶辫触 +defineDict["THOST_FTDC_BUS_BakFail"] = '3' + +typedefDict["TThostFtdcBackUpStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInitSettlementType鏄竴涓粨绠楀垵濮嬪寲鐘舵佺被鍨 +#////////////////////////////////////////////////////////////////////// +#缁撶畻鍒濆鍖栨湭寮濮 +defineDict["THOST_FTDC_SIS_UnInitialize"] = '0' +#缁撶畻鍒濆鍖栦腑 +defineDict["THOST_FTDC_SIS_Initialize"] = '1' +#缁撶畻鍒濆鍖栧畬鎴 +defineDict["THOST_FTDC_SIS_Initialized"] = '2' + +typedefDict["TThostFtdcInitSettlementType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcReportStatusType鏄竴涓姤琛ㄦ暟鎹敓鎴愮姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈敓鎴愭姤琛ㄦ暟鎹 +defineDict["THOST_FTDC_SRS_NoCreate"] = '0' +#鎶ヨ〃鏁版嵁鐢熸垚涓 +defineDict["THOST_FTDC_SRS_Create"] = '1' +#宸茬敓鎴愭姤琛ㄦ暟鎹 +defineDict["THOST_FTDC_SRS_Created"] = '2' +#鐢熸垚鎶ヨ〃鏁版嵁澶辫触 +defineDict["THOST_FTDC_SRS_CreateFail"] = '3' + +typedefDict["TThostFtdcReportStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSaveStatusType鏄竴涓暟鎹綊妗g姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#褰掓。鏈畬鎴 +defineDict["THOST_FTDC_SSS_UnSaveData"] = '0' +#褰掓。瀹屾垚 +defineDict["THOST_FTDC_SSS_SaveDatad"] = '1' + +typedefDict["TThostFtdcSaveStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSettArchiveStatusType鏄竴涓粨绠楃‘璁ゆ暟鎹綊妗g姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈綊妗f暟鎹 +defineDict["THOST_FTDC_SAS_UnArchived"] = '0' +#鏁版嵁褰掓。涓 +defineDict["THOST_FTDC_SAS_Archiving"] = '1' +#宸插綊妗f暟鎹 +defineDict["THOST_FTDC_SAS_Archived"] = '2' +#褰掓。鏁版嵁澶辫触 +defineDict["THOST_FTDC_SAS_ArchiveFail"] = '3' + +typedefDict["TThostFtdcSettArchiveStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCTPTypeType鏄竴涓狢TP浜ゆ槗绯荤粺绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鏈煡绫诲瀷 +defineDict["THOST_FTDC_CTPT_Unkown"] = '0' +#涓讳腑蹇 +defineDict["THOST_FTDC_CTPT_MainCenter"] = '1' +#澶囦腑蹇 +defineDict["THOST_FTDC_CTPT_BackUp"] = '2' + +typedefDict["TThostFtdcCTPTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcToolIDType鏄竴涓伐鍏蜂唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcToolIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcToolNameType鏄竴涓伐鍏峰悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcToolNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCloseDealTypeType鏄竴涓钩浠撳鐞嗙被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#姝e父 +defineDict["THOST_FTDC_CDT_Normal"] = '0' +#鎶曟満骞充粨浼樺厛 +defineDict["THOST_FTDC_CDT_SpecFirst"] = '1' + +typedefDict["TThostFtdcCloseDealTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcMortgageFundUseRangeType鏄竴涓揣甯佽川鎶艰祫閲戝彲鐢ㄨ寖鍥寸被鍨 +#////////////////////////////////////////////////////////////////////// +#涓嶈兘浣跨敤 +defineDict["THOST_FTDC_MFUR_None"] = '0' +#鐢ㄤ簬淇濊瘉閲 +defineDict["THOST_FTDC_MFUR_Margin"] = '1' +#鐢ㄤ簬鎵嬬画璐广佺泩浜忋佷繚璇侀噾 +defineDict["THOST_FTDC_MFUR_All"] = '2' + +typedefDict["TThostFtdcMortgageFundUseRangeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCurrencyUnitType鏄竴涓竵绉嶅崟浣嶆暟閲忕被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCurrencyUnitType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExchangeRateType鏄竴涓眹鐜囩被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcExchangeRateType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSpecProductTypeType鏄竴涓壒娈婁骇鍝佺被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#閮戝晢鎵濂椾繚浜у搧 +defineDict["THOST_FTDC_SPT_CzceHedge"] = '1' +#璐у竵璐ㄦ娂浜у搧 +defineDict["THOST_FTDC_SPT_IneForeignCurrency"] = '2' +#澶ц繛鐭嚎寮骞充粨浜у搧 +defineDict["THOST_FTDC_SPT_DceOpenClose"] = '3' + +typedefDict["TThostFtdcSpecProductTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFundMortgageTypeType鏄竴涓揣甯佽川鎶肩被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#璐ㄦ娂 +defineDict["THOST_FTDC_FMT_Mortgage"] = '1' +#瑙h川 +defineDict["THOST_FTDC_FMT_Redemption"] = '2' + +typedefDict["TThostFtdcFundMortgageTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAccountSettlementParamIDType鏄竴涓姇璧勮呰处鎴风粨绠楀弬鏁颁唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鍩虹淇濊瘉閲 +defineDict["THOST_FTDC_ASPI_BaseMargin"] = '1' +#鏈浣庢潈鐩婃爣鍑 +defineDict["THOST_FTDC_ASPI_LowestInterest"] = '2' + +typedefDict["TThostFtdcAccountSettlementParamIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCurrencyNameType鏄竴涓竵绉嶅悕绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCurrencyNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCurrencySignType鏄竴涓竵绉嶇鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCurrencySignType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFundMortDirectionType鏄竴涓揣甯佽川鎶兼柟鍚戠被鍨 +#////////////////////////////////////////////////////////////////////// +#璐у竵璐ㄥ叆 +defineDict["THOST_FTDC_FMD_In"] = '1' +#璐у竵璐ㄥ嚭 +defineDict["THOST_FTDC_FMD_Out"] = '2' + +typedefDict["TThostFtdcFundMortDirectionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBusinessClassType鏄竴涓崲姹囩被鍒被鍨 +#////////////////////////////////////////////////////////////////////// +#鐩堝埄 +defineDict["THOST_FTDC_BT_Profit"] = '0' +#浜忔崯 +defineDict["THOST_FTDC_BT_Loss"] = '1' +#鍏朵粬 +defineDict["THOST_FTDC_BT_Other"] = 'Z' + +typedefDict["TThostFtdcBusinessClassType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSwapSourceTypeType鏄竴涓崲姹囨暟鎹潵婧愮被鍨 +#////////////////////////////////////////////////////////////////////// +#鎵嬪伐 +defineDict["THOST_FTDC_SST_Manual"] = '0' +#鑷姩鐢熸垚 +defineDict["THOST_FTDC_SST_Automatic"] = '1' + +typedefDict["TThostFtdcSwapSourceTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCurrExDirectionType鏄竴涓崲姹囩被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#缁撴眹 +defineDict["THOST_FTDC_CED_Settlement"] = '0' +#鍞眹 +defineDict["THOST_FTDC_CED_Sale"] = '1' + +typedefDict["TThostFtdcCurrExDirectionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCurrencySwapStatusType鏄竴涓敵璇风姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#宸插綍鍏 +defineDict["THOST_FTDC_CSS_Entry"] = '1' +#宸插鏍 +defineDict["THOST_FTDC_CSS_Approve"] = '2' +#宸叉嫆缁 +defineDict["THOST_FTDC_CSS_Refuse"] = '3' +#宸叉挙閿 +defineDict["THOST_FTDC_CSS_Revoke"] = '4' +#宸插彂閫 +defineDict["THOST_FTDC_CSS_Send"] = '5' +#鎹㈡眹鎴愬姛 +defineDict["THOST_FTDC_CSS_Success"] = '6' +#鎹㈡眹澶辫触 +defineDict["THOST_FTDC_CSS_Failure"] = '7' + +typedefDict["TThostFtdcCurrencySwapStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCurrExchCertNoType鏄竴涓嚟璇佸彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCurrExchCertNoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBatchSerialNoType鏄竴涓壒娆″彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBatchSerialNoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcReqFlagType鏄竴涓崲姹囧彂閫佹爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈彂閫 +defineDict["THOST_FTDC_REQF_NoSend"] = '0' +#鍙戦佹垚鍔 +defineDict["THOST_FTDC_REQF_SendSuccess"] = '1' +#鍙戦佸け璐 +defineDict["THOST_FTDC_REQF_SendFailed"] = '2' +#绛夊緟閲嶅彂 +defineDict["THOST_FTDC_REQF_WaitReSend"] = '3' + +typedefDict["TThostFtdcReqFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcResFlagType鏄竴涓崲姹囪繑鍥炴垚鍔熸爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#鎴愬姛 +defineDict["THOST_FTDC_RESF_Success"] = '0' +#璐︽埛浣欓涓嶈冻 +defineDict["THOST_FTDC_RESF_InsuffiCient"] = '1' +#浜ゆ槗缁撴灉鏈煡 +defineDict["THOST_FTDC_RESF_UnKnown"] = '8' + +typedefDict["TThostFtdcResFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPageControlType鏄竴涓崲姹囬〉闈㈡帶鍒剁被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPageControlType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcRecordCountType鏄竴涓褰曟暟绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcRecordCountType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCurrencySwapMemoType鏄竴涓崲姹囬渶纭淇℃伅绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCurrencySwapMemoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExStatusType鏄竴涓慨鏀圭姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#淇敼鍓 +defineDict["THOST_FTDC_EXS_Before"] = '0' +#淇敼鍚 +defineDict["THOST_FTDC_EXS_After"] = '1' + +typedefDict["TThostFtdcExStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcClientRegionType鏄竴涓紑鎴峰鎴峰湴鍩熺被鍨 +#////////////////////////////////////////////////////////////////////// +#鍥藉唴瀹㈡埛 +defineDict["THOST_FTDC_CR_Domestic"] = '1' +#娓境鍙板鎴 +defineDict["THOST_FTDC_CR_GMT"] = '2' +#鍥藉瀹㈡埛 +defineDict["THOST_FTDC_CR_Foreign"] = '3' + +typedefDict["TThostFtdcClientRegionType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcWorkPlaceType鏄竴涓伐浣滃崟浣嶇被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcWorkPlaceType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBusinessPeriodType鏄竴涓粡钀ユ湡闄愮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBusinessPeriodType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcWebSiteType鏄竴涓綉鍧绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcWebSiteType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUOAIdCardTypeType鏄竴涓粺涓寮鎴疯瘉浠剁被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcUOAIdCardTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcClientModeType鏄竴涓紑鎴锋ā寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcClientModeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInvestorFullNameType鏄竴涓姇璧勮呭叏绉扮被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcInvestorFullNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUOABrokerIDType鏄竴涓澶栦腑浠嬫満鏋処D绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcUOABrokerIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUOAZipCodeType鏄竴涓偖鏀跨紪鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcUOAZipCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUOAEMailType鏄竴涓數瀛愰偖绠辩被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcUOAEMailType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOldCityType鏄竴涓煄甯傜被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcOldCityType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCorporateIdentifiedCardNoType鏄竴涓硶浜轰唬琛ㄨ瘉浠跺彿鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCorporateIdentifiedCardNoType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcHasBoardType鏄竴涓槸鍚︽湁钁d簨浼氱被鍨 +#////////////////////////////////////////////////////////////////////// +#娌℃湁 +defineDict["THOST_FTDC_HB_No"] = '0' +#鏈 +defineDict["THOST_FTDC_HB_Yes"] = '1' + +typedefDict["TThostFtdcHasBoardType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcStartModeType鏄竴涓惎鍔ㄦā寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +#姝e父 +defineDict["THOST_FTDC_SM_Normal"] = '1' +#搴旀 +defineDict["THOST_FTDC_SM_Emerge"] = '2' +#鎭㈠ +defineDict["THOST_FTDC_SM_Restore"] = '3' + +typedefDict["TThostFtdcStartModeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTemplateTypeType鏄竴涓ā鍨嬬被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鍏ㄩ噺 +defineDict["THOST_FTDC_TPT_Full"] = '1' +#澧為噺 +defineDict["THOST_FTDC_TPT_Increment"] = '2' +#澶囦唤 +defineDict["THOST_FTDC_TPT_BackUp"] = '3' + +typedefDict["TThostFtdcTemplateTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcLoginModeType鏄竴涓櫥褰曟ā寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +#浜ゆ槗 +defineDict["THOST_FTDC_LM_Trade"] = '0' +#杞处 +defineDict["THOST_FTDC_LM_Transfer"] = '1' + +typedefDict["TThostFtdcLoginModeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPromptTypeType鏄竴涓棩鍘嗘彁绀虹被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鍚堢害涓婁笅甯 +defineDict["THOST_FTDC_CPT_Instrument"] = '1' +#淇濊瘉閲戝垎娈电敓鏁 +defineDict["THOST_FTDC_CPT_Margin"] = '2' + +typedefDict["TThostFtdcPromptTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcLedgerManageIDType鏄竴涓垎鎴风鐞嗚祫浜х紪鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcLedgerManageIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInvestVarietyType鏄竴涓姇璧勫搧绉嶇被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcInvestVarietyType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBankAccountTypeType鏄竴涓处鎴风被鍒被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBankAccountTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcLedgerManageBankType鏄竴涓紑鎴烽摱琛岀被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcLedgerManageBankType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCffexDepartmentNameType鏄竴涓紑鎴疯惀涓氶儴绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCffexDepartmentNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCffexDepartmentCodeType鏄竴涓惀涓氶儴浠g爜绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCffexDepartmentCodeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcHasTrusteeType鏄竴涓槸鍚︽湁鎵樼浜虹被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈 +defineDict["THOST_FTDC_HT_Yes"] = '1' +#娌℃湁 +defineDict["THOST_FTDC_HT_No"] = '0' + +typedefDict["TThostFtdcHasTrusteeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCMemo1Type鏄竴涓鏄庣被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCMemo1Type"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAssetmgrCFullNameType鏄竴涓唬鐞嗚祫浜х鐞嗕笟鍔$殑鏈熻揣鍏徃鍏ㄧО绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAssetmgrCFullNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAssetmgrApprovalNOType鏄竴涓祫浜х鐞嗕笟鍔℃壒鏂囧彿绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAssetmgrApprovalNOType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAssetmgrMgrNameType鏄竴涓祫浜х鐞嗕笟鍔¤礋璐d汉濮撳悕绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAssetmgrMgrNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAmTypeType鏄竴涓満鏋勭被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#閾惰 +defineDict["THOST_FTDC_AMT_Bank"] = '1' +#璇佸埜鍏徃 +defineDict["THOST_FTDC_AMT_Securities"] = '2' +#鍩洪噾鍏徃 +defineDict["THOST_FTDC_AMT_Fund"] = '3' +#淇濋櫓鍏徃 +defineDict["THOST_FTDC_AMT_Insurance"] = '4' +#淇℃墭鍏徃 +defineDict["THOST_FTDC_AMT_Trust"] = '5' +#鍏朵粬 +defineDict["THOST_FTDC_AMT_Other"] = '9' + +typedefDict["TThostFtdcAmTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCAmTypeType鏄竴涓満鏋勭被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCAmTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCFundIOTypeType鏄竴涓嚭鍏ラ噾绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鍑哄叆閲 +defineDict["THOST_FTDC_CFIOT_FundIO"] = '0' +#閾舵湡鎹㈡眹 +defineDict["THOST_FTDC_CFIOT_SwapCurrency"] = '1' + +typedefDict["TThostFtdcCSRCFundIOTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCusAccountTypeType鏄竴涓粨绠楄处鎴风被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈熻揣缁撶畻璐︽埛 +defineDict["THOST_FTDC_CAT_Futures"] = '1' +#绾湡璐ц祫绠′笟鍔′笅鐨勮祫绠$粨绠楄处鎴 +defineDict["THOST_FTDC_CAT_AssetmgrFuture"] = '2' +#缁煎悎绫昏祫绠′笟鍔′笅鐨勬湡璐ц祫绠℃墭绠¤处鎴 +defineDict["THOST_FTDC_CAT_AssetmgrTrustee"] = '3' +#缁煎悎绫昏祫绠′笟鍔′笅鐨勮祫閲戜腑杞处鎴 +defineDict["THOST_FTDC_CAT_AssetmgrTransfer"] = '4' + +typedefDict["TThostFtdcCusAccountTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCNationalType鏄竴涓浗绫嶇被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCNationalType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCSRCSecAgentIDType鏄竴涓簩绾т唬鐞咺D绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCSRCSecAgentIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcLanguageTypeType鏄竴涓氱煡璇█绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#涓枃 +defineDict["THOST_FTDC_LT_Chinese"] = '1' +#鑻辨枃 +defineDict["THOST_FTDC_LT_English"] = '2' + +typedefDict["TThostFtdcLanguageTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAmAccountType鏄竴涓姇璧勮处鎴风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcAmAccountType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAssetmgrClientTypeType鏄竴涓祫浜х鐞嗗鎴风被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#涓汉璧勭瀹㈡埛 +defineDict["THOST_FTDC_AMCT_Person"] = '1' +#鍗曚綅璧勭瀹㈡埛 +defineDict["THOST_FTDC_AMCT_Organ"] = '2' +#鐗规畩鍗曚綅璧勭瀹㈡埛 +defineDict["THOST_FTDC_AMCT_SpecialOrgan"] = '4' + +typedefDict["TThostFtdcAssetmgrClientTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcAssetmgrTypeType鏄竴涓姇璧勭被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈熻揣绫 +defineDict["THOST_FTDC_ASST_Futures"] = '3' +#缁煎悎绫 +defineDict["THOST_FTDC_ASST_SpecialOrgan"] = '4' + +typedefDict["TThostFtdcAssetmgrTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUOMType鏄竴涓閲忓崟浣嶇被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcUOMType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSHFEInstLifePhaseType鏄竴涓笂鏈熸墍鍚堢害鐢熷懡鍛ㄦ湡鐘舵佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSHFEInstLifePhaseType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSHFEProductClassType鏄竴涓骇鍝佺被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSHFEProductClassType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcPriceDecimalType鏄竴涓环鏍煎皬鏁颁綅绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcPriceDecimalType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcInTheMoneyFlagType鏄竴涓钩鍊兼湡鏉冩爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcInTheMoneyFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCheckInstrTypeType鏄竴涓悎绾︽瘮杈冪被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鍚堢害浜ゆ槗鎵涓嶅瓨鍦 +defineDict["THOST_FTDC_CIT_HasExch"] = '0' +#鍚堢害鏈郴缁熶笉瀛樺湪 +defineDict["THOST_FTDC_CIT_HasATP"] = '1' +#鍚堢害姣旇緝涓嶄竴鑷 +defineDict["THOST_FTDC_CIT_HasDiff"] = '2' + +typedefDict["TThostFtdcCheckInstrTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDeliveryTypeType鏄竴涓氦鍓茬被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鎵嬪伐浜ゅ壊 +defineDict["THOST_FTDC_DT_HandDeliv"] = '1' +#鍒版湡浜ゅ壊 +defineDict["THOST_FTDC_DT_PersonDeliv"] = '2' + +typedefDict["TThostFtdcDeliveryTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBigMoneyType鏄竴涓祫閲戠被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcBigMoneyType"] = "float" + +#////////////////////////////////////////////////////////////////////// +#TFtdcMaxMarginSideAlgorithmType鏄竴涓ぇ棰濆崟杈逛繚璇侀噾绠楁硶绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#涓嶄娇鐢ㄥぇ棰濆崟杈逛繚璇侀噾绠楁硶 +defineDict["THOST_FTDC_MMSA_NO"] = '0' +#浣跨敤澶ч鍗曡竟淇濊瘉閲戠畻娉 +defineDict["THOST_FTDC_MMSA_YES"] = '1' + +typedefDict["TThostFtdcMaxMarginSideAlgorithmType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDAClientTypeType鏄竴涓祫浜х鐞嗗鎴风被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鑷劧浜 +defineDict["THOST_FTDC_CACT_Person"] = '0' +#娉曚汉 +defineDict["THOST_FTDC_CACT_Company"] = '1' +#鍏朵粬 +defineDict["THOST_FTDC_CACT_Other"] = '2' + +typedefDict["TThostFtdcDAClientTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCombinInstrIDType鏄竴涓鍒╁悎绾︿唬鐮佺被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCombinInstrIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCombinSettlePriceType鏄竴涓悇鑵跨粨绠椾环绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcCombinSettlePriceType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDCEPriorityType鏄竴涓紭鍏堢骇绫诲瀷 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcDCEPriorityType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcTradeGroupIDType鏄竴涓垚浜ょ粍鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcTradeGroupIDType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcIsCheckPrepaType鏄竴涓槸鍚︽牎楠屽紑鎴峰彲鐢ㄨ祫閲戠被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcIsCheckPrepaType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcUOAAssetmgrTypeType鏄竴涓姇璧勭被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈熻揣绫 +defineDict["THOST_FTDC_UOAAT_Futures"] = '1' +#缁煎悎绫 +defineDict["THOST_FTDC_UOAAT_SpecialOrgan"] = '2' + +typedefDict["TThostFtdcUOAAssetmgrTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDirectionEnType鏄竴涓拱鍗栨柟鍚戠被鍨 +#////////////////////////////////////////////////////////////////////// +#Buy +defineDict["THOST_FTDC_DEN_Buy"] = '0' +#Sell +defineDict["THOST_FTDC_DEN_Sell"] = '1' + +typedefDict["TThostFtdcDirectionEnType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOffsetFlagEnType鏄竴涓紑骞虫爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#Position Opening +defineDict["THOST_FTDC_OFEN_Open"] = '0' +#Position Close +defineDict["THOST_FTDC_OFEN_Close"] = '1' +#Forced Liquidation +defineDict["THOST_FTDC_OFEN_ForceClose"] = '2' +#Close Today +defineDict["THOST_FTDC_OFEN_CloseToday"] = '3' +#Close Prev. +defineDict["THOST_FTDC_OFEN_CloseYesterday"] = '4' +#Forced Reduction +defineDict["THOST_FTDC_OFEN_ForceOff"] = '5' +#Local Forced Liquidation +defineDict["THOST_FTDC_OFEN_LocalForceClose"] = '6' + +typedefDict["TThostFtdcOffsetFlagEnType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcHedgeFlagEnType鏄竴涓姇鏈哄淇濇爣蹇楃被鍨 +#////////////////////////////////////////////////////////////////////// +#Speculation +defineDict["THOST_FTDC_HFEN_Speculation"] = '1' +#Arbitrage +defineDict["THOST_FTDC_HFEN_Arbitrage"] = '2' +#Hedge +defineDict["THOST_FTDC_HFEN_Hedge"] = '3' + +typedefDict["TThostFtdcHedgeFlagEnType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFundIOTypeEnType鏄竴涓嚭鍏ラ噾绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#Deposit/Withdrawal +defineDict["THOST_FTDC_FIOTEN_FundIO"] = '1' +#Bank-Futures Transfer +defineDict["THOST_FTDC_FIOTEN_Transfer"] = '2' +#Bank-Futures FX Exchange +defineDict["THOST_FTDC_FIOTEN_SwapCurrency"] = '3' + +typedefDict["TThostFtdcFundIOTypeEnType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFundTypeEnType鏄竴涓祫閲戠被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#Bank Deposit +defineDict["THOST_FTDC_FTEN_Deposite"] = '1' +#Payment/Fee +defineDict["THOST_FTDC_FTEN_ItemFund"] = '2' +#Brokerage Adj +defineDict["THOST_FTDC_FTEN_Company"] = '3' +#Internal Transfer +defineDict["THOST_FTDC_FTEN_InnerTransfer"] = '4' + +typedefDict["TThostFtdcFundTypeEnType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFundDirectionEnType鏄竴涓嚭鍏ラ噾鏂瑰悜绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#Deposit +defineDict["THOST_FTDC_FDEN_In"] = '1' +#Withdrawal +defineDict["THOST_FTDC_FDEN_Out"] = '2' + +typedefDict["TThostFtdcFundDirectionEnType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcFundMortDirectionEnType鏄竴涓揣甯佽川鎶兼柟鍚戠被鍨 +#////////////////////////////////////////////////////////////////////// +#Pledge +defineDict["THOST_FTDC_FMDEN_In"] = '1' +#Redemption +defineDict["THOST_FTDC_FMDEN_Out"] = '2' + +typedefDict["TThostFtdcFundMortDirectionEnType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSwapBusinessTypeType鏄竴涓崲姹囦笟鍔$绫荤被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcSwapBusinessTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOptionsTypeType鏄竴涓湡鏉冪被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鐪嬫定 +defineDict["THOST_FTDC_CP_CallOptions"] = '1' +#鐪嬭穼 +defineDict["THOST_FTDC_CP_PutOptions"] = '2' + +typedefDict["TThostFtdcOptionsTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcStrikeModeType鏄竴涓墽琛屾柟寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +#娆у紡 +defineDict["THOST_FTDC_STM_Continental"] = '0' +#缇庡紡 +defineDict["THOST_FTDC_STM_American"] = '1' +#鐧炬厱澶 +defineDict["THOST_FTDC_STM_Bermuda"] = '2' + +typedefDict["TThostFtdcStrikeModeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcStrikeTypeType鏄竴涓墽琛岀被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鑷韩瀵瑰啿 +defineDict["THOST_FTDC_STT_Hedge"] = '0' +#鍖归厤鎵ц +defineDict["THOST_FTDC_STT_Match"] = '1' + +typedefDict["TThostFtdcStrikeTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcApplyTypeType鏄竴涓腑閲戞墍鏈熸潈鏀惧純鎵ц鐢宠绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#涓嶆墽琛屾暟閲 +defineDict["THOST_FTDC_APPT_NotStrikeNum"] = '4' + +typedefDict["TThostFtdcApplyTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcGiveUpDataSourceType鏄竴涓斁寮冩墽琛岀敵璇锋暟鎹潵婧愮被鍨 +#////////////////////////////////////////////////////////////////////// +#绯荤粺鐢熸垚 +defineDict["THOST_FTDC_GUDS_Gen"] = '0' +#鎵嬪伐娣诲姞 +defineDict["THOST_FTDC_GUDS_Hand"] = '1' + +typedefDict["TThostFtdcGiveUpDataSourceType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExecOrderSysIDType鏄竴涓墽琛屽鍛婄郴缁熺紪鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcExecOrderSysIDType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExecResultType鏄竴涓墽琛岀粨鏋滅被鍨 +#////////////////////////////////////////////////////////////////////// +#娌℃湁鎵ц +defineDict["THOST_FTDC_OER_NoExec"] = 'n' +#宸茬粡鍙栨秷 +defineDict["THOST_FTDC_OER_Canceled"] = 'c' +#鎵ц鎴愬姛 +defineDict["THOST_FTDC_OER_OK"] = '0' +#鏈熸潈鎸佷粨涓嶅 +defineDict["THOST_FTDC_OER_NoPosition"] = '1' +#璧勯噾涓嶅 +defineDict["THOST_FTDC_OER_NoDeposit"] = '2' +#浼氬憳涓嶅瓨鍦 +defineDict["THOST_FTDC_OER_NoParticipant"] = '3' +#瀹㈡埛涓嶅瓨鍦 +defineDict["THOST_FTDC_OER_NoClient"] = '4' +#鍚堢害涓嶅瓨鍦 +defineDict["THOST_FTDC_OER_NoInstrument"] = '6' +#娌℃湁鎵ц鏉冮檺 +defineDict["THOST_FTDC_OER_NoRight"] = '7' +#涓嶅悎鐞嗙殑鏁伴噺 +defineDict["THOST_FTDC_OER_InvalidVolume"] = '8' +#娌℃湁瓒冲鐨勫巻鍙叉垚浜 +defineDict["THOST_FTDC_OER_NoEnoughHistoryTrade"] = '9' +#鏈煡 +defineDict["THOST_FTDC_OER_Unknown"] = 'a' + +typedefDict["TThostFtdcExecResultType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcStrikeSequenceType鏄竴涓墽琛屽簭鍙风被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcStrikeSequenceType"] = "int" + +#////////////////////////////////////////////////////////////////////// +#TFtdcStrikeTimeType鏄竴涓墽琛屾椂闂寸被鍨 +#////////////////////////////////////////////////////////////////////// +typedefDict["TThostFtdcStrikeTimeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCombinationTypeType鏄竴涓粍鍚堢被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈熻揣缁勫悎 +defineDict["THOST_FTDC_COMBT_Future"] = '0' +#鍨傜洿浠峰樊BUL +defineDict["THOST_FTDC_COMBT_BUL"] = '1' +#鍨傜洿浠峰樊BER +defineDict["THOST_FTDC_COMBT_BER"] = '2' +#璺ㄥ紡缁勫悎 +defineDict["THOST_FTDC_COMBT_STD"] = '3' +#瀹借法寮忕粍鍚 +defineDict["THOST_FTDC_COMBT_STG"] = '4' +#澶囧厬缁勫悎 +defineDict["THOST_FTDC_COMBT_PRT"] = '5' + +typedefDict["TThostFtdcCombinationTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcOptionRoyaltyPriceTypeType鏄竴涓湡鏉冩潈鍒╅噾浠锋牸绫诲瀷绫诲瀷 +#////////////////////////////////////////////////////////////////////// +#鏄ㄧ粨绠椾环 +defineDict["THOST_FTDC_ORPT_PreSettlementPrice"] = '1' +#寮浠撲环 +defineDict["THOST_FTDC_ORPT_OpenPrice"] = '4' + +typedefDict["TThostFtdcOptionRoyaltyPriceTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcBalanceAlgorithmType鏄竴涓潈鐩婄畻娉曠被鍨 +#////////////////////////////////////////////////////////////////////// +#涓嶈绠楁湡鏉冨競鍊肩泩浜 +defineDict["THOST_FTDC_BLAG_Default"] = '1' +#璁$畻鏈熸潈甯傚间簭鎹 +defineDict["THOST_FTDC_BLAG_IncludeOptValLost"] = '2' + +typedefDict["TThostFtdcBalanceAlgorithmType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcActionTypeType鏄竴涓墽琛岀被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鎵ц +defineDict["THOST_FTDC_ACTP_Exec"] = '1' +#鏀惧純 +defineDict["THOST_FTDC_ACTP_Abandon"] = '2' + +typedefDict["TThostFtdcActionTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcForQuoteStatusType鏄竴涓浠风姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#宸茬粡鎻愪氦 +defineDict["THOST_FTDC_FQST_Submitted"] = 'a' +#宸茬粡鎺ュ彈 +defineDict["THOST_FTDC_FQST_Accepted"] = 'b' +#宸茬粡琚嫆缁 +defineDict["THOST_FTDC_FQST_Rejected"] = 'c' + +typedefDict["TThostFtdcForQuoteStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcQuotStatusType鏄竴涓姤浠风姸鎬佺被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈煡 +defineDict["THOST_FTDC_QTST_Unknown"] = 'a' +#宸茬粡鎺ュ彈 +defineDict["THOST_FTDC_QTST_Accepted"] = 'b' +#宸茬粡鎾ら攢 +defineDict["THOST_FTDC_QTST_Canceled"] = 'c' + +typedefDict["TThostFtdcQuotStatusType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcValueMethodType鏄竴涓彇鍊兼柟寮忕被鍨 +#////////////////////////////////////////////////////////////////////// +#鎸夌粷瀵瑰 +defineDict["THOST_FTDC_VM_Absolute"] = '0' +#鎸夋瘮鐜 +defineDict["THOST_FTDC_VM_Ratio"] = '1' + +typedefDict["TThostFtdcValueMethodType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExecOrderPositionFlagType鏄竴涓湡鏉冭鏉冨悗鏄惁淇濈暀鏈熻揣澶村鐨勬爣璁扮被鍨 +#////////////////////////////////////////////////////////////////////// +#淇濈暀 +defineDict["THOST_FTDC_EOPF_Reserve"] = '0' +#涓嶄繚鐣 +defineDict["THOST_FTDC_EOPF_UnReserve"] = '1' + +typedefDict["TThostFtdcExecOrderPositionFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcExecOrderCloseFlagType鏄竴涓湡鏉冭鏉冨悗鐢熸垚鐨勫ご瀵告槸鍚﹁嚜鍔ㄥ钩浠撶被鍨 +#////////////////////////////////////////////////////////////////////// +#鑷姩骞充粨 +defineDict["THOST_FTDC_EOCF_AutoClose"] = '0' +#鍏嶄簬鑷姩骞充粨 +defineDict["THOST_FTDC_EOCF_NotToClose"] = '1' + +typedefDict["TThostFtdcExecOrderCloseFlagType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcProductTypeType鏄竴涓骇鍝佺被鍨嬬被鍨 +#////////////////////////////////////////////////////////////////////// +#鏈熻揣 +defineDict["THOST_FTDC_PTE_Futures"] = '1' +#鏈熸潈 +defineDict["THOST_FTDC_PTE_Options"] = '2' + +typedefDict["TThostFtdcProductTypeType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCZCEUploadFileNameType鏄竴涓儜鍟嗘墍缁撶畻鏂囦欢鍚嶇被鍨 +#////////////////////////////////////////////////////////////////////// +#^\d{8}_zz_\d{4} +defineDict["THOST_FTDC_CUFN_CUFN_O"] = 'O' +#^\d{8}鎴愪氦琛 +defineDict["THOST_FTDC_CUFN_CUFN_T"] = 'T' +#^\d{8}鍗曡吙鎸佷粨琛╪ew +defineDict["THOST_FTDC_CUFN_CUFN_P"] = 'P' +#^\d{8}闈炲钩浠撲簡缁撹〃 +defineDict["THOST_FTDC_CUFN_CUFN_N"] = 'N' +#^\d{8}骞充粨琛 +defineDict["THOST_FTDC_CUFN_CUFN_L"] = 'L' +#^\d{8}璧勯噾琛 +defineDict["THOST_FTDC_CUFN_CUFN_F"] = 'F' +#^\d{8}缁勫悎鎸佷粨琛 +defineDict["THOST_FTDC_CUFN_CUFN_C"] = 'C' +#^\d{8}淇濊瘉閲戝弬鏁拌〃 +defineDict["THOST_FTDC_CUFN_CUFN_M"] = 'M' + +typedefDict["TThostFtdcCZCEUploadFileNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcDCEUploadFileNameType鏄竴涓ぇ鍟嗘墍缁撶畻鏂囦欢鍚嶇被鍨 +#////////////////////////////////////////////////////////////////////// +#^\d{8}_dl_\d{3} +defineDict["THOST_FTDC_DUFN_DUFN_O"] = 'O' +#^\d{8}_鎴愪氦琛 +defineDict["THOST_FTDC_DUFN_DUFN_T"] = 'T' +#^\d{8}_鎸佷粨琛 +defineDict["THOST_FTDC_DUFN_DUFN_P"] = 'P' +#^\d{8}_璧勯噾缁撶畻琛 +defineDict["THOST_FTDC_DUFN_DUFN_F"] = 'F' +#^\d{8}_浼樻儬缁勫悎鎸佷粨鏄庣粏琛 +defineDict["THOST_FTDC_DUFN_DUFN_C"] = 'C' +#^\d{8}_鎸佷粨鏄庣粏琛 +defineDict["THOST_FTDC_DUFN_DUFN_D"] = 'D' +#^\d{8}_淇濊瘉閲戝弬鏁拌〃 +defineDict["THOST_FTDC_DUFN_DUFN_M"] = 'M' +#^\d{8}_鏈熸潈鎵ц琛 +defineDict["THOST_FTDC_DUFN_DUFN_S"] = 'S' + +typedefDict["TThostFtdcDCEUploadFileNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcSHFEUploadFileNameType鏄竴涓笂鏈熸墍缁撶畻鏂囦欢鍚嶇被鍨 +#////////////////////////////////////////////////////////////////////// +#^\d{4}_\d{8}_\d{8}_DailyFundChg +defineDict["THOST_FTDC_SUFN_SUFN_O"] = 'O' +#^\d{4}_\d{8}_\d{8}_Trade +defineDict["THOST_FTDC_SUFN_SUFN_T"] = 'T' +#^\d{4}_\d{8}_\d{8}_SettlementDetail +defineDict["THOST_FTDC_SUFN_SUFN_P"] = 'P' +#^\d{4}_\d{8}_\d{8}_Capital +defineDict["THOST_FTDC_SUFN_SUFN_F"] = 'F' + +typedefDict["TThostFtdcSHFEUploadFileNameType"] = "string" + +#////////////////////////////////////////////////////////////////////// +#TFtdcCFFEXUploadFileNameType鏄竴涓腑閲戞墍缁撶畻鏂囦欢鍚嶇被鍨 +#////////////////////////////////////////////////////////////////////// +#^\d{4}_SG\d{1}_\d{8}_\d{1}_Trade +defineDict["THOST_FTDC_CFUFN_SUFN_T"] = 'T' +#^\d{4}_SG\d{1}_\d{8}_\d{1}_SettlementDetail +defineDict["THOST_FTDC_CFUFN_SUFN_P"] = 'P' +#^\d{4}_SG\d{1}_\d{8}_\d{1}_Capital +defineDict["THOST_FTDC_CFUFN_SUFN_F"] = 'F' +#^\d{4}_SG\d{1}_\d{8}_\d{1}_OptionExec +defineDict["THOST_FTDC_CFUFN_SUFN_S"] = 'S' + +typedefDict["TThostFtdcCFFEXUploadFileNameType"] = "string" + diff --git a/vn.ctp/pyscript/ctp_md_define.cpp b/vn.ctp/pyscript/ctp_md_define.cpp new file mode 100644 index 00000000..e199d563 --- /dev/null +++ b/vn.ctp/pyscript/ctp_md_define.cpp @@ -0,0 +1,12 @@ +#define ONFRONTCONNECTED 1 +#define ONFRONTDISCONNECTED 2 +#define ONHEARTBEATWARNING 3 +#define ONRSPUSERLOGIN 4 +#define ONRSPUSERLOGOUT 5 +#define ONRSPERROR 6 +#define ONRSPSUBMARKETDATA 7 +#define ONRSPUNSUBMARKETDATA 8 +#define ONRSPSUBFORQUOTERSP 9 +#define ONRSPUNSUBFORQUOTERSP 10 +#define ONRTNDEPTHMARKETDATA 11 +#define ONRTNFORQUOTERSP 12 diff --git a/vn.ctp/pyscript/ctp_md_function.cpp b/vn.ctp/pyscript/ctp_md_function.cpp new file mode 100644 index 00000000..b1e029d5 --- /dev/null +++ b/vn.ctp/pyscript/ctp_md_function.cpp @@ -0,0 +1,28 @@ +ReqUserLogin +{ + CThostFtdcReqUserLoginField myreq = CThostFtdcReqUserLoginField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "MacAddress", myreq.MacAddress); + getChar(req, "UserProductInfo", myreq.UserProductInfo); + getChar(req, "UserID", myreq.UserID); + getChar(req, "TradingDay", myreq.TradingDay); + getChar(req, "InterfaceProductInfo", myreq.InterfaceProductInfo); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "ClientIPAddress", myreq.ClientIPAddress); + getChar(req, "OneTimePassword", myreq.OneTimePassword); + getChar(req, "ProtocolInfo", myreq.ProtocolInfo); + getChar(req, "Password", myreq.Password); + int i = this->api->ReqUserLogin(&myreq, nRequestID); + return i; +}; + +ReqUserLogout +{ + CThostFtdcUserLogoutField myreq = CThostFtdcUserLogoutField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "UserID", myreq.UserID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqUserLogout(&myreq, nRequestID); + return i; +}; + diff --git a/vn.ctp/pyscript/ctp_md_process.cpp b/vn.ctp/pyscript/ctp_md_process.cpp new file mode 100644 index 00000000..c60d7639 --- /dev/null +++ b/vn.ctp/pyscript/ctp_md_process.cpp @@ -0,0 +1,187 @@ +void MdApi::processFrontConnected(Task task) +{ + this->onFrontConnected(); +}; + +void MdApi::processFrontDisconnected(Task task) +{ + this->onFrontDisconnected(task.task_id); +}; + +void MdApi::processHeartBeatWarning(Task task) +{ + this->onHeartBeatWarning(task.task_id); +}; + +void MdApi::processRspUserLogin(Task task) +{ + CThostFtdcRspUserLoginField task_data = any_cast(task.task_data); + dict data; + data["CZCETime"] = task_data.CZCETime; + data["SHFETime"] = task_data.SHFETime; + data["MaxOrderRef"] = task_data.MaxOrderRef; + data["INETime"] = task_data.INETime; + data["UserID"] = task_data.UserID; + data["TradingDay"] = task_data.TradingDay; + data["SessionID"] = task_data.SessionID; + data["SystemName"] = task_data.SystemName; + data["FrontID"] = task_data.FrontID; + data["FFEXTime"] = task_data.FFEXTime; + data["BrokerID"] = task_data.BrokerID; + data["DCETime"] = task_data.DCETime; + data["LoginTime"] = task_data.LoginTime; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspUserLogin(data, error, task.task_id, task.task_last); +}; + +void MdApi::processRspUserLogout(Task task) +{ + CThostFtdcUserLogoutField task_data = any_cast(task.task_data); + dict data; + data["UserID"] = task_data.UserID; + data["BrokerID"] = task_data.BrokerID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspUserLogout(data, error, task.task_id, task.task_last); +}; + +void MdApi::processRspError(Task task) +{ + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspError(error, task.task_id, task.task_last); +}; + +void MdApi::processRspSubMarketData(Task task) +{ + CThostFtdcSpecificInstrumentField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspSubMarketData(data, error, task.task_id, task.task_last); +}; + +void MdApi::processRspUnSubMarketData(Task task) +{ + CThostFtdcSpecificInstrumentField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspUnSubMarketData(data, error, task.task_id, task.task_last); +}; + +void MdApi::processRspSubForQuoteRsp(Task task) +{ + CThostFtdcSpecificInstrumentField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspSubForQuoteRsp(data, error, task.task_id, task.task_last); +}; + +void MdApi::processRspUnSubForQuoteRsp(Task task) +{ + CThostFtdcSpecificInstrumentField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspUnSubForQuoteRsp(data, error, task.task_id, task.task_last); +}; + +void MdApi::processRtnDepthMarketData(Task task) +{ + CThostFtdcDepthMarketDataField task_data = any_cast(task.task_data); + dict data; + data["HighestPrice"] = task_data.HighestPrice; + data["BidPrice5"] = task_data.BidPrice5; + data["BidPrice4"] = task_data.BidPrice4; + data["BidPrice1"] = task_data.BidPrice1; + data["BidPrice3"] = task_data.BidPrice3; + data["BidPrice2"] = task_data.BidPrice2; + data["LowerLimitPrice"] = task_data.LowerLimitPrice; + data["OpenPrice"] = task_data.OpenPrice; + data["AskPrice5"] = task_data.AskPrice5; + data["AskPrice4"] = task_data.AskPrice4; + data["AskPrice3"] = task_data.AskPrice3; + data["PreClosePrice"] = task_data.PreClosePrice; + data["AskPrice1"] = task_data.AskPrice1; + data["PreSettlementPrice"] = task_data.PreSettlementPrice; + data["AskVolume1"] = task_data.AskVolume1; + data["UpdateTime"] = task_data.UpdateTime; + data["UpdateMillisec"] = task_data.UpdateMillisec; + data["AveragePrice"] = task_data.AveragePrice; + data["BidVolume5"] = task_data.BidVolume5; + data["BidVolume4"] = task_data.BidVolume4; + data["BidVolume3"] = task_data.BidVolume3; + data["BidVolume2"] = task_data.BidVolume2; + data["PreOpenInterest"] = task_data.PreOpenInterest; + data["AskPrice2"] = task_data.AskPrice2; + data["Volume"] = task_data.Volume; + data["AskVolume3"] = task_data.AskVolume3; + data["AskVolume2"] = task_data.AskVolume2; + data["AskVolume5"] = task_data.AskVolume5; + data["AskVolume4"] = task_data.AskVolume4; + data["UpperLimitPrice"] = task_data.UpperLimitPrice; + data["BidVolume1"] = task_data.BidVolume1; + data["InstrumentID"] = task_data.InstrumentID; + data["ClosePrice"] = task_data.ClosePrice; + data["ExchangeID"] = task_data.ExchangeID; + data["TradingDay"] = task_data.TradingDay; + data["PreDelta"] = task_data.PreDelta; + data["OpenInterest"] = task_data.OpenInterest; + data["CurrDelta"] = task_data.CurrDelta; + data["Turnover"] = task_data.Turnover; + data["LastPrice"] = task_data.LastPrice; + data["SettlementPrice"] = task_data.SettlementPrice; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["LowestPrice"] = task_data.LowestPrice; + data["ActionDay"] = task_data.ActionDay; + + this->onRtnDepthMarketData(data); +}; + +void MdApi::processRtnForQuoteRsp(Task task) +{ + CThostFtdcForQuoteRspField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["TradingDay"] = task_data.TradingDay; + data["ForQuoteTime"] = task_data.ForQuoteTime; + data["ForQuoteSysID"] = task_data.ForQuoteSysID; + data["ActionDay"] = task_data.ActionDay; + + this->onRtnForQuoteRsp(data); +}; + diff --git a/vn.ctp/pyscript/ctp_md_switch.cpp b/vn.ctp/pyscript/ctp_md_switch.cpp new file mode 100644 index 00000000..2078a67f --- /dev/null +++ b/vn.ctp/pyscript/ctp_md_switch.cpp @@ -0,0 +1,72 @@ +case ONFRONTCONNECTED: +{ + this->processFrontConnected(task); + break; +} + +case ONFRONTDISCONNECTED: +{ + this->processFrontDisconnected(task); + break; +} + +case ONHEARTBEATWARNING: +{ + this->processHeartBeatWarning(task); + break; +} + +case ONRSPUSERLOGIN: +{ + this->processRspUserLogin(task); + break; +} + +case ONRSPUSERLOGOUT: +{ + this->processRspUserLogout(task); + break; +} + +case ONRSPERROR: +{ + this->processRspError(task); + break; +} + +case ONRSPSUBMARKETDATA: +{ + this->processRspSubMarketData(task); + break; +} + +case ONRSPUNSUBMARKETDATA: +{ + this->processRspUnSubMarketData(task); + break; +} + +case ONRSPSUBFORQUOTERSP: +{ + this->processRspSubForQuoteRsp(task); + break; +} + +case ONRSPUNSUBFORQUOTERSP: +{ + this->processRspUnSubForQuoteRsp(task); + break; +} + +case ONRTNDEPTHMARKETDATA: +{ + this->processRtnDepthMarketData(task); + break; +} + +case ONRTNFORQUOTERSP: +{ + this->processRtnForQuoteRsp(task); + break; +} + diff --git a/vn.ctp/pyscript/ctp_md_task.cpp b/vn.ctp/pyscript/ctp_md_task.cpp new file mode 100644 index 00000000..8a9c86e9 --- /dev/null +++ b/vn.ctp/pyscript/ctp_md_task.cpp @@ -0,0 +1,178 @@ +void MdApi::OnFrontConnected() +{ + Task task = Task(); + task.task_name = ONFRONTCONNECTED; + this->task_queue.push(task); +}; + +void MdApi::OnFrontDisconnected(int nReason) +{ + Task task = Task(); + task.task_name = ONFRONTDISCONNECTED; + task.task_id = nReason; + this->task_queue.push(task); +}; + +void MdApi::OnHeartBeatWarning(int nTimeLapse) +{ + Task task = Task(); + task.task_name = ONHEARTBEATWARNING; + task.task_id = nTimeLapse; + this->task_queue.push(task); +}; + +void MdApi::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPUSERLOGIN; + task.task_data = *pRspUserLogin; + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CSecurityFtdcRspInfoField empty_error = CSecurityFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void MdApi::OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPUSERLOGOUT; + task.task_data = *pUserLogout; + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CSecurityFtdcRspInfoField empty_error = CSecurityFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void MdApi::OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPERROR; + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CSecurityFtdcRspInfoField empty_error = CSecurityFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void MdApi::OnRspSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPSUBMARKETDATA; + task.task_data = *pSpecificInstrument; + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CSecurityFtdcRspInfoField empty_error = CSecurityFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void MdApi::OnRspUnSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPUNSUBMARKETDATA; + task.task_data = *pSpecificInstrument; + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CSecurityFtdcRspInfoField empty_error = CSecurityFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void MdApi::OnRspSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPSUBFORQUOTERSP; + task.task_data = *pSpecificInstrument; + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CSecurityFtdcRspInfoField empty_error = CSecurityFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void MdApi::OnRspUnSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPUNSUBFORQUOTERSP; + task.task_data = *pSpecificInstrument; + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CSecurityFtdcRspInfoField empty_error = CSecurityFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void MdApi::OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData) +{ + Task task = Task(); + task.task_name = ONRTNDEPTHMARKETDATA; + task.task_data = *pDepthMarketData; + this->task_queue.push(task); +}; + +void MdApi::OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp) +{ + Task task = Task(); + task.task_name = ONRTNFORQUOTERSP; + task.task_data = *pForQuoteRsp; + this->task_queue.push(task); +}; + diff --git a/vn.ctp/pyscript/ctp_struct.py b/vn.ctp/pyscript/ctp_struct.py new file mode 100644 index 00000000..48d0b990 --- /dev/null +++ b/vn.ctp/pyscript/ctp_struct.py @@ -0,0 +1,7434 @@ +# encoding: UTF-8 + +structDict = {} + +#////////////////////////////////////////////////////////////////////// +#@system 鏂颁竴浠d氦鏄撴墍绯荤粺 +#@company 涓婃捣鏈熻揣淇℃伅鎶鏈湁闄愬叕鍙 +#@file ThostFtdcUserApiStruct.h +#@brief 瀹氫箟浜嗗鎴风鎺ュ彛浣跨敤鐨勪笟鍔℃暟鎹粨鏋 +#@history + +#////////////////////////////////////////////////////////////////////// + + + + + + + + + + +#淇℃伅鍒嗗彂 +CThostFtdcDisseminationField = {} +#搴忓垪绯诲垪鍙 +CThostFtdcDisseminationField["SequenceSeries"] = "int" +#搴忓垪鍙 +CThostFtdcDisseminationField["SequenceNo"] = "int" +structDict['CThostFtdcDisseminationField'] = CThostFtdcDisseminationField + + +#鐢ㄦ埛鐧诲綍璇锋眰 +CThostFtdcReqUserLoginField = {} +#浜ゆ槗鏃 +CThostFtdcReqUserLoginField["TradingDay"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcReqUserLoginField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcReqUserLoginField["UserID"] = "string" +#瀵嗙爜 +CThostFtdcReqUserLoginField["Password"] = "string" +#鐢ㄦ埛绔骇鍝佷俊鎭 +CThostFtdcReqUserLoginField["UserProductInfo"] = "string" +#鎺ュ彛绔骇鍝佷俊鎭 +CThostFtdcReqUserLoginField["InterfaceProductInfo"] = "string" +#鍗忚淇℃伅 +CThostFtdcReqUserLoginField["ProtocolInfo"] = "string" +#Mac鍦板潃 +CThostFtdcReqUserLoginField["MacAddress"] = "string" +#鍔ㄦ佸瘑鐮 +CThostFtdcReqUserLoginField["OneTimePassword"] = "string" +#缁堢IP鍦板潃 +CThostFtdcReqUserLoginField["ClientIPAddress"] = "string" +structDict['CThostFtdcReqUserLoginField'] = CThostFtdcReqUserLoginField + + +#鐢ㄦ埛鐧诲綍搴旂瓟 +CThostFtdcRspUserLoginField = {} +#浜ゆ槗鏃 +CThostFtdcRspUserLoginField["TradingDay"] = "string" +#鐧诲綍鎴愬姛鏃堕棿 +CThostFtdcRspUserLoginField["LoginTime"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcRspUserLoginField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcRspUserLoginField["UserID"] = "string" +#浜ゆ槗绯荤粺鍚嶇О +CThostFtdcRspUserLoginField["SystemName"] = "string" +#鍓嶇疆缂栧彿 +CThostFtdcRspUserLoginField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcRspUserLoginField["SessionID"] = "int" +#鏈澶ф姤鍗曞紩鐢 +CThostFtdcRspUserLoginField["MaxOrderRef"] = "string" +#涓婃湡鎵鏃堕棿 +CThostFtdcRspUserLoginField["SHFETime"] = "string" +#澶у晢鎵鏃堕棿 +CThostFtdcRspUserLoginField["DCETime"] = "string" +#閮戝晢鎵鏃堕棿 +CThostFtdcRspUserLoginField["CZCETime"] = "string" +#涓噾鎵鏃堕棿 +CThostFtdcRspUserLoginField["FFEXTime"] = "string" +#鑳芥簮涓績鏃堕棿 +CThostFtdcRspUserLoginField["INETime"] = "string" +structDict['CThostFtdcRspUserLoginField'] = CThostFtdcRspUserLoginField + + +#鐢ㄦ埛鐧诲嚭璇锋眰 +CThostFtdcUserLogoutField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcUserLogoutField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcUserLogoutField["UserID"] = "string" +structDict['CThostFtdcUserLogoutField'] = CThostFtdcUserLogoutField + + +#寮哄埗浜ゆ槗鍛橀鍑 +CThostFtdcForceUserLogoutField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcForceUserLogoutField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcForceUserLogoutField["UserID"] = "string" +structDict['CThostFtdcForceUserLogoutField'] = CThostFtdcForceUserLogoutField + + +#瀹㈡埛绔璇佽姹 +CThostFtdcReqAuthenticateField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcReqAuthenticateField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcReqAuthenticateField["UserID"] = "string" +#鐢ㄦ埛绔骇鍝佷俊鎭 +CThostFtdcReqAuthenticateField["UserProductInfo"] = "string" +#璁よ瘉鐮 +CThostFtdcReqAuthenticateField["AuthCode"] = "string" +structDict['CThostFtdcReqAuthenticateField'] = CThostFtdcReqAuthenticateField + + +#瀹㈡埛绔璇佸搷搴 +CThostFtdcRspAuthenticateField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcRspAuthenticateField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcRspAuthenticateField["UserID"] = "string" +#鐢ㄦ埛绔骇鍝佷俊鎭 +CThostFtdcRspAuthenticateField["UserProductInfo"] = "string" +structDict['CThostFtdcRspAuthenticateField'] = CThostFtdcRspAuthenticateField + + +#瀹㈡埛绔璇佷俊鎭 +CThostFtdcAuthenticationInfoField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcAuthenticationInfoField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcAuthenticationInfoField["UserID"] = "string" +#鐢ㄦ埛绔骇鍝佷俊鎭 +CThostFtdcAuthenticationInfoField["UserProductInfo"] = "string" +#璁よ瘉淇℃伅 +CThostFtdcAuthenticationInfoField["AuthInfo"] = "string" +#鏄惁涓鸿璇佺粨鏋 +CThostFtdcAuthenticationInfoField["IsResult"] = "int" +structDict['CThostFtdcAuthenticationInfoField'] = CThostFtdcAuthenticationInfoField + + +#閾舵湡杞笎鎶ユ枃澶 +CThostFtdcTransferHeaderField = {} +#鐗堟湰鍙凤紝甯搁噺锛1.0 +CThostFtdcTransferHeaderField["Version"] = "string" +#浜ゆ槗浠g爜锛屽繀濉 +CThostFtdcTransferHeaderField["TradeCode"] = "string" +#浜ゆ槗鏃ユ湡锛屽繀濉紝鏍煎紡锛歽yyymmdd +CThostFtdcTransferHeaderField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿锛屽繀濉紝鏍煎紡锛歨hmmss +CThostFtdcTransferHeaderField["TradeTime"] = "string" +#鍙戣捣鏂规祦姘村彿锛孨/A +CThostFtdcTransferHeaderField["TradeSerial"] = "string" +#鏈熻揣鍏徃浠g爜锛屽繀濉 +CThostFtdcTransferHeaderField["FutureID"] = "string" +#閾惰浠g爜锛屾牴鎹煡璇㈤摱琛屽緱鍒帮紝蹇呭~ +CThostFtdcTransferHeaderField["BankID"] = "string" +#閾惰鍒嗕腑蹇冧唬鐮侊紝鏍规嵁鏌ヨ閾惰寰楀埌锛屽繀濉 +CThostFtdcTransferHeaderField["BankBrchID"] = "string" +#鎿嶄綔鍛橈紝N/A +CThostFtdcTransferHeaderField["OperNo"] = "string" +#浜ゆ槗璁惧绫诲瀷锛孨/A +CThostFtdcTransferHeaderField["DeviceID"] = "string" +#璁板綍鏁帮紝N/A +CThostFtdcTransferHeaderField["RecordNum"] = "string" +#浼氳瘽缂栧彿锛孨/A +CThostFtdcTransferHeaderField["SessionID"] = "int" +#璇锋眰缂栧彿锛孨/A +CThostFtdcTransferHeaderField["RequestID"] = "int" +structDict['CThostFtdcTransferHeaderField'] = CThostFtdcTransferHeaderField + + +#閾惰璧勯噾杞湡璐ц姹傦紝TradeCode=202001 +CThostFtdcTransferBankToFutureReqField = {} +#鏈熻揣璧勯噾璐︽埛 +CThostFtdcTransferBankToFutureReqField["FutureAccount"] = "string" +#瀵嗙爜鏍囧織 +CThostFtdcTransferBankToFutureReqField["FuturePwdFlag"] = "string" +#瀵嗙爜 +CThostFtdcTransferBankToFutureReqField["FutureAccPwd"] = "string" +#杞处閲戦 +CThostFtdcTransferBankToFutureReqField["TradeAmt"] = "float" +#瀹㈡埛鎵嬬画璐 +CThostFtdcTransferBankToFutureReqField["CustFee"] = "float" +#甯佺锛歊MB-浜烘皯甯 USD-缇庡渾 HKD-娓厓 +CThostFtdcTransferBankToFutureReqField["CurrencyCode"] = "string" +structDict['CThostFtdcTransferBankToFutureReqField'] = CThostFtdcTransferBankToFutureReqField + + +#閾惰璧勯噾杞湡璐ц姹傚搷搴 +CThostFtdcTransferBankToFutureRspField = {} +#鍝嶅簲浠g爜 +CThostFtdcTransferBankToFutureRspField["RetCode"] = "string" +#鍝嶅簲淇℃伅 +CThostFtdcTransferBankToFutureRspField["RetInfo"] = "string" +#璧勯噾璐︽埛 +CThostFtdcTransferBankToFutureRspField["FutureAccount"] = "string" +#杞笎閲戦 +CThostFtdcTransferBankToFutureRspField["TradeAmt"] = "float" +#搴旀敹瀹㈡埛鎵嬬画璐 +CThostFtdcTransferBankToFutureRspField["CustFee"] = "float" +#甯佺 +CThostFtdcTransferBankToFutureRspField["CurrencyCode"] = "string" +structDict['CThostFtdcTransferBankToFutureRspField'] = CThostFtdcTransferBankToFutureRspField + + +#鏈熻揣璧勯噾杞摱琛岃姹傦紝TradeCode=202002 +CThostFtdcTransferFutureToBankReqField = {} +#鏈熻揣璧勯噾璐︽埛 +CThostFtdcTransferFutureToBankReqField["FutureAccount"] = "string" +#瀵嗙爜鏍囧織 +CThostFtdcTransferFutureToBankReqField["FuturePwdFlag"] = "string" +#瀵嗙爜 +CThostFtdcTransferFutureToBankReqField["FutureAccPwd"] = "string" +#杞处閲戦 +CThostFtdcTransferFutureToBankReqField["TradeAmt"] = "float" +#瀹㈡埛鎵嬬画璐 +CThostFtdcTransferFutureToBankReqField["CustFee"] = "float" +#甯佺锛歊MB-浜烘皯甯 USD-缇庡渾 HKD-娓厓 +CThostFtdcTransferFutureToBankReqField["CurrencyCode"] = "string" +structDict['CThostFtdcTransferFutureToBankReqField'] = CThostFtdcTransferFutureToBankReqField + + +#鏈熻揣璧勯噾杞摱琛岃姹傚搷搴 +CThostFtdcTransferFutureToBankRspField = {} +#鍝嶅簲浠g爜 +CThostFtdcTransferFutureToBankRspField["RetCode"] = "string" +#鍝嶅簲淇℃伅 +CThostFtdcTransferFutureToBankRspField["RetInfo"] = "string" +#璧勯噾璐︽埛 +CThostFtdcTransferFutureToBankRspField["FutureAccount"] = "string" +#杞笎閲戦 +CThostFtdcTransferFutureToBankRspField["TradeAmt"] = "float" +#搴旀敹瀹㈡埛鎵嬬画璐 +CThostFtdcTransferFutureToBankRspField["CustFee"] = "float" +#甯佺 +CThostFtdcTransferFutureToBankRspField["CurrencyCode"] = "string" +structDict['CThostFtdcTransferFutureToBankRspField'] = CThostFtdcTransferFutureToBankRspField + + +#鏌ヨ閾惰璧勯噾璇锋眰锛孴radeCode=204002 +CThostFtdcTransferQryBankReqField = {} +#鏈熻揣璧勯噾璐︽埛 +CThostFtdcTransferQryBankReqField["FutureAccount"] = "string" +#瀵嗙爜鏍囧織 +CThostFtdcTransferQryBankReqField["FuturePwdFlag"] = "string" +#瀵嗙爜 +CThostFtdcTransferQryBankReqField["FutureAccPwd"] = "string" +#甯佺锛歊MB-浜烘皯甯 USD-缇庡渾 HKD-娓厓 +CThostFtdcTransferQryBankReqField["CurrencyCode"] = "string" +structDict['CThostFtdcTransferQryBankReqField'] = CThostFtdcTransferQryBankReqField + + +#鏌ヨ閾惰璧勯噾璇锋眰鍝嶅簲 +CThostFtdcTransferQryBankRspField = {} +#鍝嶅簲浠g爜 +CThostFtdcTransferQryBankRspField["RetCode"] = "string" +#鍝嶅簲淇℃伅 +CThostFtdcTransferQryBankRspField["RetInfo"] = "string" +#璧勯噾璐︽埛 +CThostFtdcTransferQryBankRspField["FutureAccount"] = "string" +#閾惰浣欓 +CThostFtdcTransferQryBankRspField["TradeAmt"] = "float" +#閾惰鍙敤浣欓 +CThostFtdcTransferQryBankRspField["UseAmt"] = "float" +#閾惰鍙彇浣欓 +CThostFtdcTransferQryBankRspField["FetchAmt"] = "float" +#甯佺 +CThostFtdcTransferQryBankRspField["CurrencyCode"] = "string" +structDict['CThostFtdcTransferQryBankRspField'] = CThostFtdcTransferQryBankRspField + + +#鏌ヨ閾惰浜ゆ槗鏄庣粏璇锋眰锛孴radeCode=204999 +CThostFtdcTransferQryDetailReqField = {} +#鏈熻揣璧勯噾璐︽埛 +CThostFtdcTransferQryDetailReqField["FutureAccount"] = "string" +structDict['CThostFtdcTransferQryDetailReqField'] = CThostFtdcTransferQryDetailReqField + + +#鏌ヨ閾惰浜ゆ槗鏄庣粏璇锋眰鍝嶅簲 +CThostFtdcTransferQryDetailRspField = {} +#浜ゆ槗鏃ユ湡 +CThostFtdcTransferQryDetailRspField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcTransferQryDetailRspField["TradeTime"] = "string" +#浜ゆ槗浠g爜 +CThostFtdcTransferQryDetailRspField["TradeCode"] = "string" +#鏈熻揣娴佹按鍙 +CThostFtdcTransferQryDetailRspField["FutureSerial"] = "int" +#鏈熻揣鍏徃浠g爜 +CThostFtdcTransferQryDetailRspField["FutureID"] = "string" +#璧勯噾甯愬彿 +CThostFtdcTransferQryDetailRspField["FutureAccount"] = "string" +#閾惰娴佹按鍙 +CThostFtdcTransferQryDetailRspField["BankSerial"] = "int" +#閾惰浠g爜 +CThostFtdcTransferQryDetailRspField["BankID"] = "string" +#閾惰鍒嗕腑蹇冧唬鐮 +CThostFtdcTransferQryDetailRspField["BankBrchID"] = "string" +#閾惰璐﹀彿 +CThostFtdcTransferQryDetailRspField["BankAccount"] = "string" +#璇佷欢鍙风爜 +CThostFtdcTransferQryDetailRspField["CertCode"] = "string" +#璐у竵浠g爜 +CThostFtdcTransferQryDetailRspField["CurrencyCode"] = "string" +#鍙戠敓閲戦 +CThostFtdcTransferQryDetailRspField["TxAmount"] = "float" +#鏈夋晥鏍囧織 +CThostFtdcTransferQryDetailRspField["Flag"] = "string" +structDict['CThostFtdcTransferQryDetailRspField'] = CThostFtdcTransferQryDetailRspField + + +#鍝嶅簲淇℃伅 +CThostFtdcRspInfoField = {} +#閿欒浠g爜 +CThostFtdcRspInfoField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcRspInfoField["ErrorMsg"] = "string" +structDict['CThostFtdcRspInfoField'] = CThostFtdcRspInfoField + + +#浜ゆ槗鎵 +CThostFtdcExchangeField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcExchangeField["ExchangeID"] = "string" +#浜ゆ槗鎵鍚嶇О +CThostFtdcExchangeField["ExchangeName"] = "string" +#浜ゆ槗鎵灞炴 +CThostFtdcExchangeField["ExchangeProperty"] = "string" +structDict['CThostFtdcExchangeField'] = CThostFtdcExchangeField + + +#浜у搧 +CThostFtdcProductField = {} +#浜у搧浠g爜 +CThostFtdcProductField["ProductID"] = "string" +#浜у搧鍚嶇О +CThostFtdcProductField["ProductName"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcProductField["ExchangeID"] = "string" +#浜у搧绫诲瀷 +CThostFtdcProductField["ProductClass"] = "string" +#鍚堢害鏁伴噺涔樻暟 +CThostFtdcProductField["VolumeMultiple"] = "int" +#鏈灏忓彉鍔ㄤ环浣 +CThostFtdcProductField["PriceTick"] = "float" +#甯備环鍗曟渶澶т笅鍗曢噺 +CThostFtdcProductField["MaxMarketOrderVolume"] = "int" +#甯備环鍗曟渶灏忎笅鍗曢噺 +CThostFtdcProductField["MinMarketOrderVolume"] = "int" +#闄愪环鍗曟渶澶т笅鍗曢噺 +CThostFtdcProductField["MaxLimitOrderVolume"] = "int" +#闄愪环鍗曟渶灏忎笅鍗曢噺 +CThostFtdcProductField["MinLimitOrderVolume"] = "int" +#鎸佷粨绫诲瀷 +CThostFtdcProductField["PositionType"] = "string" +#鎸佷粨鏃ユ湡绫诲瀷 +CThostFtdcProductField["PositionDateType"] = "string" +#骞充粨澶勭悊绫诲瀷 +CThostFtdcProductField["CloseDealType"] = "string" +#浜ゆ槗甯佺绫诲瀷 +CThostFtdcProductField["TradeCurrencyID"] = "string" +#璐ㄦ娂璧勯噾鍙敤鑼冨洿 +CThostFtdcProductField["MortgageFundUseRange"] = "string" +#浜ゆ槗鎵浜у搧浠g爜 +CThostFtdcProductField["ExchangeProductID"] = "string" +#鍚堢害鍩虹鍟嗗搧涔樻暟 +CThostFtdcProductField["UnderlyingMultiple"] = "float" +structDict['CThostFtdcProductField'] = CThostFtdcProductField + + +#鍚堢害 +CThostFtdcInstrumentField = {} +#鍚堢害浠g爜 +CThostFtdcInstrumentField["InstrumentID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcInstrumentField["ExchangeID"] = "string" +#鍚堢害鍚嶇О +CThostFtdcInstrumentField["InstrumentName"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcInstrumentField["ExchangeInstID"] = "string" +#浜у搧浠g爜 +CThostFtdcInstrumentField["ProductID"] = "string" +#浜у搧绫诲瀷 +CThostFtdcInstrumentField["ProductClass"] = "string" +#浜ゅ壊骞翠唤 +CThostFtdcInstrumentField["DeliveryYear"] = "int" +#浜ゅ壊鏈 +CThostFtdcInstrumentField["DeliveryMonth"] = "int" +#甯備环鍗曟渶澶т笅鍗曢噺 +CThostFtdcInstrumentField["MaxMarketOrderVolume"] = "int" +#甯備环鍗曟渶灏忎笅鍗曢噺 +CThostFtdcInstrumentField["MinMarketOrderVolume"] = "int" +#闄愪环鍗曟渶澶т笅鍗曢噺 +CThostFtdcInstrumentField["MaxLimitOrderVolume"] = "int" +#闄愪环鍗曟渶灏忎笅鍗曢噺 +CThostFtdcInstrumentField["MinLimitOrderVolume"] = "int" +#鍚堢害鏁伴噺涔樻暟 +CThostFtdcInstrumentField["VolumeMultiple"] = "int" +#鏈灏忓彉鍔ㄤ环浣 +CThostFtdcInstrumentField["PriceTick"] = "float" +#鍒涘缓鏃 +CThostFtdcInstrumentField["CreateDate"] = "string" +#涓婂競鏃 +CThostFtdcInstrumentField["OpenDate"] = "string" +#鍒版湡鏃 +CThostFtdcInstrumentField["ExpireDate"] = "string" +#寮濮嬩氦鍓叉棩 +CThostFtdcInstrumentField["StartDelivDate"] = "string" +#缁撴潫浜ゅ壊鏃 +CThostFtdcInstrumentField["EndDelivDate"] = "string" +#鍚堢害鐢熷懡鍛ㄦ湡鐘舵 +CThostFtdcInstrumentField["InstLifePhase"] = "string" +#褰撳墠鏄惁浜ゆ槗 +CThostFtdcInstrumentField["IsTrading"] = "int" +#鎸佷粨绫诲瀷 +CThostFtdcInstrumentField["PositionType"] = "string" +#鎸佷粨鏃ユ湡绫诲瀷 +CThostFtdcInstrumentField["PositionDateType"] = "string" +#澶氬ご淇濊瘉閲戠巼 +CThostFtdcInstrumentField["LongMarginRatio"] = "float" +#绌哄ご淇濊瘉閲戠巼 +CThostFtdcInstrumentField["ShortMarginRatio"] = "float" +#鏄惁浣跨敤澶ч鍗曡竟淇濊瘉閲戠畻娉 +CThostFtdcInstrumentField["MaxMarginSideAlgorithm"] = "string" +#鍩虹鍟嗗搧浠g爜 +CThostFtdcInstrumentField["UnderlyingInstrID"] = "string" +#鎵ц浠 +CThostFtdcInstrumentField["StrikePrice"] = "float" +#鏈熸潈绫诲瀷 +CThostFtdcInstrumentField["OptionsType"] = "string" +#鍚堢害鍩虹鍟嗗搧涔樻暟 +CThostFtdcInstrumentField["UnderlyingMultiple"] = "float" +#缁勫悎绫诲瀷 +CThostFtdcInstrumentField["CombinationType"] = "string" +structDict['CThostFtdcInstrumentField'] = CThostFtdcInstrumentField + + +#缁忕邯鍏徃 +CThostFtdcBrokerField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcBrokerField["BrokerID"] = "string" +#缁忕邯鍏徃绠绉 +CThostFtdcBrokerField["BrokerAbbr"] = "string" +#缁忕邯鍏徃鍚嶇О +CThostFtdcBrokerField["BrokerName"] = "string" +#鏄惁娲昏穬 +CThostFtdcBrokerField["IsActive"] = "int" +structDict['CThostFtdcBrokerField'] = CThostFtdcBrokerField + + +#浜ゆ槗鎵浜ゆ槗鍛 +CThostFtdcTraderField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcTraderField["ExchangeID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcTraderField["TraderID"] = "string" +#浼氬憳浠g爜 +CThostFtdcTraderField["ParticipantID"] = "string" +#瀵嗙爜 +CThostFtdcTraderField["Password"] = "string" +#瀹夎鏁伴噺 +CThostFtdcTraderField["InstallCount"] = "int" +#缁忕邯鍏徃浠g爜 +CThostFtdcTraderField["BrokerID"] = "string" +structDict['CThostFtdcTraderField'] = CThostFtdcTraderField + + +#鎶曡祫鑰 +CThostFtdcInvestorField = {} +#鎶曡祫鑰呬唬鐮 +CThostFtdcInvestorField["InvestorID"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcInvestorField["BrokerID"] = "string" +#鎶曡祫鑰呭垎缁勪唬鐮 +CThostFtdcInvestorField["InvestorGroupID"] = "string" +#鎶曡祫鑰呭悕绉 +CThostFtdcInvestorField["InvestorName"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcInvestorField["IdentifiedCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcInvestorField["IdentifiedCardNo"] = "string" +#鏄惁娲昏穬 +CThostFtdcInvestorField["IsActive"] = "int" +#鑱旂郴鐢佃瘽 +CThostFtdcInvestorField["Telephone"] = "string" +#閫氳鍦板潃 +CThostFtdcInvestorField["Address"] = "string" +#寮鎴锋棩鏈 +CThostFtdcInvestorField["OpenDate"] = "string" +#鎵嬫満 +CThostFtdcInvestorField["Mobile"] = "string" +#鎵嬬画璐圭巼妯℃澘浠g爜 +CThostFtdcInvestorField["CommModelID"] = "string" +#淇濊瘉閲戠巼妯℃澘浠g爜 +CThostFtdcInvestorField["MarginModelID"] = "string" +structDict['CThostFtdcInvestorField'] = CThostFtdcInvestorField + + +#浜ゆ槗缂栫爜 +CThostFtdcTradingCodeField = {} +#鎶曡祫鑰呬唬鐮 +CThostFtdcTradingCodeField["InvestorID"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcTradingCodeField["BrokerID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcTradingCodeField["ExchangeID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcTradingCodeField["ClientID"] = "string" +#鏄惁娲昏穬 +CThostFtdcTradingCodeField["IsActive"] = "int" +#浜ゆ槗缂栫爜绫诲瀷 +CThostFtdcTradingCodeField["ClientIDType"] = "string" +structDict['CThostFtdcTradingCodeField'] = CThostFtdcTradingCodeField + + +#浼氬憳缂栫爜鍜岀粡绾叕鍙哥紪鐮佸鐓ц〃 +CThostFtdcPartBrokerField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcPartBrokerField["BrokerID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcPartBrokerField["ExchangeID"] = "string" +#浼氬憳浠g爜 +CThostFtdcPartBrokerField["ParticipantID"] = "string" +#鏄惁娲昏穬 +CThostFtdcPartBrokerField["IsActive"] = "int" +structDict['CThostFtdcPartBrokerField'] = CThostFtdcPartBrokerField + + +#绠$悊鐢ㄦ埛 +CThostFtdcSuperUserField = {} +#鐢ㄦ埛浠g爜 +CThostFtdcSuperUserField["UserID"] = "string" +#鐢ㄦ埛鍚嶇О +CThostFtdcSuperUserField["UserName"] = "string" +#瀵嗙爜 +CThostFtdcSuperUserField["Password"] = "string" +#鏄惁娲昏穬 +CThostFtdcSuperUserField["IsActive"] = "int" +structDict['CThostFtdcSuperUserField'] = CThostFtdcSuperUserField + + +#绠$悊鐢ㄦ埛鍔熻兘鏉冮檺 +CThostFtdcSuperUserFunctionField = {} +#鐢ㄦ埛浠g爜 +CThostFtdcSuperUserFunctionField["UserID"] = "string" +#鍔熻兘浠g爜 +CThostFtdcSuperUserFunctionField["FunctionCode"] = "string" +structDict['CThostFtdcSuperUserFunctionField'] = CThostFtdcSuperUserFunctionField + + +#鎶曡祫鑰呯粍 +CThostFtdcInvestorGroupField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcInvestorGroupField["BrokerID"] = "string" +#鎶曡祫鑰呭垎缁勪唬鐮 +CThostFtdcInvestorGroupField["InvestorGroupID"] = "string" +#鎶曡祫鑰呭垎缁勫悕绉 +CThostFtdcInvestorGroupField["InvestorGroupName"] = "string" +structDict['CThostFtdcInvestorGroupField'] = CThostFtdcInvestorGroupField + + +#璧勯噾璐︽埛 +CThostFtdcTradingAccountField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcTradingAccountField["BrokerID"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcTradingAccountField["AccountID"] = "string" +#涓婃璐ㄦ娂閲戦 +CThostFtdcTradingAccountField["PreMortgage"] = "float" +#涓婃淇$敤棰濆害 +CThostFtdcTradingAccountField["PreCredit"] = "float" +#涓婃瀛樻棰 +CThostFtdcTradingAccountField["PreDeposit"] = "float" +#涓婃缁撶畻鍑嗗閲 +CThostFtdcTradingAccountField["PreBalance"] = "float" +#涓婃鍗犵敤鐨勪繚璇侀噾 +CThostFtdcTradingAccountField["PreMargin"] = "float" +#鍒╂伅鍩烘暟 +CThostFtdcTradingAccountField["InterestBase"] = "float" +#鍒╂伅鏀跺叆 +CThostFtdcTradingAccountField["Interest"] = "float" +#鍏ラ噾閲戦 +CThostFtdcTradingAccountField["Deposit"] = "float" +#鍑洪噾閲戦 +CThostFtdcTradingAccountField["Withdraw"] = "float" +#鍐荤粨鐨勪繚璇侀噾 +CThostFtdcTradingAccountField["FrozenMargin"] = "float" +#鍐荤粨鐨勮祫閲 +CThostFtdcTradingAccountField["FrozenCash"] = "float" +#鍐荤粨鐨勬墜缁垂 +CThostFtdcTradingAccountField["FrozenCommission"] = "float" +#褰撳墠淇濊瘉閲戞婚 +CThostFtdcTradingAccountField["CurrMargin"] = "float" +#璧勯噾宸 +CThostFtdcTradingAccountField["CashIn"] = "float" +#鎵嬬画璐 +CThostFtdcTradingAccountField["Commission"] = "float" +#骞充粨鐩堜簭 +CThostFtdcTradingAccountField["CloseProfit"] = "float" +#鎸佷粨鐩堜簭 +CThostFtdcTradingAccountField["PositionProfit"] = "float" +#鏈熻揣缁撶畻鍑嗗閲 +CThostFtdcTradingAccountField["Balance"] = "float" +#鍙敤璧勯噾 +CThostFtdcTradingAccountField["Available"] = "float" +#鍙彇璧勯噾 +CThostFtdcTradingAccountField["WithdrawQuota"] = "float" +#鍩烘湰鍑嗗閲 +CThostFtdcTradingAccountField["Reserve"] = "float" +#浜ゆ槗鏃 +CThostFtdcTradingAccountField["TradingDay"] = "string" +#缁撶畻缂栧彿 +CThostFtdcTradingAccountField["SettlementID"] = "int" +#淇$敤棰濆害 +CThostFtdcTradingAccountField["Credit"] = "float" +#璐ㄦ娂閲戦 +CThostFtdcTradingAccountField["Mortgage"] = "float" +#浜ゆ槗鎵淇濊瘉閲 +CThostFtdcTradingAccountField["ExchangeMargin"] = "float" +#鎶曡祫鑰呬氦鍓蹭繚璇侀噾 +CThostFtdcTradingAccountField["DeliveryMargin"] = "float" +#浜ゆ槗鎵浜ゅ壊淇濊瘉閲 +CThostFtdcTradingAccountField["ExchangeDeliveryMargin"] = "float" +#淇濆簳鏈熻揣缁撶畻鍑嗗閲 +CThostFtdcTradingAccountField["ReserveBalance"] = "float" +#甯佺浠g爜 +CThostFtdcTradingAccountField["CurrencyID"] = "string" +#涓婃璐у竵璐ㄥ叆閲戦 +CThostFtdcTradingAccountField["PreFundMortgageIn"] = "float" +#涓婃璐у竵璐ㄥ嚭閲戦 +CThostFtdcTradingAccountField["PreFundMortgageOut"] = "float" +#璐у竵璐ㄥ叆閲戦 +CThostFtdcTradingAccountField["FundMortgageIn"] = "float" +#璐у竵璐ㄥ嚭閲戦 +CThostFtdcTradingAccountField["FundMortgageOut"] = "float" +#璐у竵璐ㄦ娂浣欓 +CThostFtdcTradingAccountField["FundMortgageAvailable"] = "float" +#鍙川鎶艰揣甯侀噾棰 +CThostFtdcTradingAccountField["MortgageableFund"] = "float" +#鐗规畩浜у搧鍗犵敤淇濊瘉閲 +CThostFtdcTradingAccountField["SpecProductMargin"] = "float" +#鐗规畩浜у搧鍐荤粨淇濊瘉閲 +CThostFtdcTradingAccountField["SpecProductFrozenMargin"] = "float" +#鐗规畩浜у搧鎵嬬画璐 +CThostFtdcTradingAccountField["SpecProductCommission"] = "float" +#鐗规畩浜у搧鍐荤粨鎵嬬画璐 +CThostFtdcTradingAccountField["SpecProductFrozenCommission"] = "float" +#鐗规畩浜у搧鎸佷粨鐩堜簭 +CThostFtdcTradingAccountField["SpecProductPositionProfit"] = "float" +#鐗规畩浜у搧骞充粨鐩堜簭 +CThostFtdcTradingAccountField["SpecProductCloseProfit"] = "float" +#鏍规嵁鎸佷粨鐩堜簭绠楁硶璁$畻鐨勭壒娈婁骇鍝佹寔浠撶泩浜 +CThostFtdcTradingAccountField["SpecProductPositionProfitByAlg"] = "float" +#鐗规畩浜у搧浜ゆ槗鎵淇濊瘉閲 +CThostFtdcTradingAccountField["SpecProductExchangeMargin"] = "float" +#鏈熸潈骞充粨鐩堜簭 +CThostFtdcTradingAccountField["OptionCloseProfit"] = "float" +#鏈熸潈甯傚 +CThostFtdcTradingAccountField["OptionValue"] = "float" +structDict['CThostFtdcTradingAccountField'] = CThostFtdcTradingAccountField + + +#鎶曡祫鑰呮寔浠 +CThostFtdcInvestorPositionField = {} +#鍚堢害浠g爜 +CThostFtdcInvestorPositionField["InstrumentID"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcInvestorPositionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcInvestorPositionField["InvestorID"] = "string" +#鎸佷粨澶氱┖鏂瑰悜 +CThostFtdcInvestorPositionField["PosiDirection"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcInvestorPositionField["HedgeFlag"] = "string" +#鎸佷粨鏃ユ湡 +CThostFtdcInvestorPositionField["PositionDate"] = "string" +#涓婃棩鎸佷粨 +CThostFtdcInvestorPositionField["YdPosition"] = "int" +#浠婃棩鎸佷粨 +CThostFtdcInvestorPositionField["Position"] = "int" +#澶氬ご鍐荤粨 +CThostFtdcInvestorPositionField["LongFrozen"] = "int" +#绌哄ご鍐荤粨 +CThostFtdcInvestorPositionField["ShortFrozen"] = "int" +#寮浠撳喕缁撻噾棰 +CThostFtdcInvestorPositionField["LongFrozenAmount"] = "float" +#寮浠撳喕缁撻噾棰 +CThostFtdcInvestorPositionField["ShortFrozenAmount"] = "float" +#寮浠撻噺 +CThostFtdcInvestorPositionField["OpenVolume"] = "int" +#骞充粨閲 +CThostFtdcInvestorPositionField["CloseVolume"] = "int" +#寮浠撻噾棰 +CThostFtdcInvestorPositionField["OpenAmount"] = "float" +#骞充粨閲戦 +CThostFtdcInvestorPositionField["CloseAmount"] = "float" +#鎸佷粨鎴愭湰 +CThostFtdcInvestorPositionField["PositionCost"] = "float" +#涓婃鍗犵敤鐨勪繚璇侀噾 +CThostFtdcInvestorPositionField["PreMargin"] = "float" +#鍗犵敤鐨勪繚璇侀噾 +CThostFtdcInvestorPositionField["UseMargin"] = "float" +#鍐荤粨鐨勪繚璇侀噾 +CThostFtdcInvestorPositionField["FrozenMargin"] = "float" +#鍐荤粨鐨勮祫閲 +CThostFtdcInvestorPositionField["FrozenCash"] = "float" +#鍐荤粨鐨勬墜缁垂 +CThostFtdcInvestorPositionField["FrozenCommission"] = "float" +#璧勯噾宸 +CThostFtdcInvestorPositionField["CashIn"] = "float" +#鎵嬬画璐 +CThostFtdcInvestorPositionField["Commission"] = "float" +#骞充粨鐩堜簭 +CThostFtdcInvestorPositionField["CloseProfit"] = "float" +#鎸佷粨鐩堜簭 +CThostFtdcInvestorPositionField["PositionProfit"] = "float" +#涓婃缁撶畻浠 +CThostFtdcInvestorPositionField["PreSettlementPrice"] = "float" +#鏈缁撶畻浠 +CThostFtdcInvestorPositionField["SettlementPrice"] = "float" +#浜ゆ槗鏃 +CThostFtdcInvestorPositionField["TradingDay"] = "string" +#缁撶畻缂栧彿 +CThostFtdcInvestorPositionField["SettlementID"] = "int" +#寮浠撴垚鏈 +CThostFtdcInvestorPositionField["OpenCost"] = "float" +#浜ゆ槗鎵淇濊瘉閲 +CThostFtdcInvestorPositionField["ExchangeMargin"] = "float" +#缁勫悎鎴愪氦褰㈡垚鐨勬寔浠 +CThostFtdcInvestorPositionField["CombPosition"] = "int" +#缁勫悎澶氬ご鍐荤粨 +CThostFtdcInvestorPositionField["CombLongFrozen"] = "int" +#缁勫悎绌哄ご鍐荤粨 +CThostFtdcInvestorPositionField["CombShortFrozen"] = "int" +#閫愭棩鐩競骞充粨鐩堜簭 +CThostFtdcInvestorPositionField["CloseProfitByDate"] = "float" +#閫愮瑪瀵瑰啿骞充粨鐩堜簭 +CThostFtdcInvestorPositionField["CloseProfitByTrade"] = "float" +#浠婃棩鎸佷粨 +CThostFtdcInvestorPositionField["TodayPosition"] = "int" +#淇濊瘉閲戠巼 +CThostFtdcInvestorPositionField["MarginRateByMoney"] = "float" +#淇濊瘉閲戠巼(鎸夋墜鏁) +CThostFtdcInvestorPositionField["MarginRateByVolume"] = "float" +#鎵ц鍐荤粨 +CThostFtdcInvestorPositionField["StrikeFrozen"] = "int" +#鎵ц鍐荤粨閲戦 +CThostFtdcInvestorPositionField["StrikeFrozenAmount"] = "float" +#鏀惧純鎵ц鍐荤粨 +CThostFtdcInvestorPositionField["AbandonFrozen"] = "int" +#鏈熸潈甯傚 +CThostFtdcInvestorPositionField["OptionValue"] = "float" +structDict['CThostFtdcInvestorPositionField'] = CThostFtdcInvestorPositionField + + +#鍚堢害淇濊瘉閲戠巼 +CThostFtdcInstrumentMarginRateField = {} +#鍚堢害浠g爜 +CThostFtdcInstrumentMarginRateField["InstrumentID"] = "string" +#鎶曡祫鑰呰寖鍥 +CThostFtdcInstrumentMarginRateField["InvestorRange"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcInstrumentMarginRateField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcInstrumentMarginRateField["InvestorID"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcInstrumentMarginRateField["HedgeFlag"] = "string" +#澶氬ご淇濊瘉閲戠巼 +CThostFtdcInstrumentMarginRateField["LongMarginRatioByMoney"] = "float" +#澶氬ご淇濊瘉閲戣垂 +CThostFtdcInstrumentMarginRateField["LongMarginRatioByVolume"] = "float" +#绌哄ご淇濊瘉閲戠巼 +CThostFtdcInstrumentMarginRateField["ShortMarginRatioByMoney"] = "float" +#绌哄ご淇濊瘉閲戣垂 +CThostFtdcInstrumentMarginRateField["ShortMarginRatioByVolume"] = "float" +#鏄惁鐩稿浜ゆ槗鎵鏀跺彇 +CThostFtdcInstrumentMarginRateField["IsRelative"] = "int" +structDict['CThostFtdcInstrumentMarginRateField'] = CThostFtdcInstrumentMarginRateField + + +#鍚堢害鎵嬬画璐圭巼 +CThostFtdcInstrumentCommissionRateField = {} +#鍚堢害浠g爜 +CThostFtdcInstrumentCommissionRateField["InstrumentID"] = "string" +#鎶曡祫鑰呰寖鍥 +CThostFtdcInstrumentCommissionRateField["InvestorRange"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcInstrumentCommissionRateField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcInstrumentCommissionRateField["InvestorID"] = "string" +#寮浠撴墜缁垂鐜 +CThostFtdcInstrumentCommissionRateField["OpenRatioByMoney"] = "float" +#寮浠撴墜缁垂 +CThostFtdcInstrumentCommissionRateField["OpenRatioByVolume"] = "float" +#骞充粨鎵嬬画璐圭巼 +CThostFtdcInstrumentCommissionRateField["CloseRatioByMoney"] = "float" +#骞充粨鎵嬬画璐 +CThostFtdcInstrumentCommissionRateField["CloseRatioByVolume"] = "float" +#骞充粖鎵嬬画璐圭巼 +CThostFtdcInstrumentCommissionRateField["CloseTodayRatioByMoney"] = "float" +#骞充粖鎵嬬画璐 +CThostFtdcInstrumentCommissionRateField["CloseTodayRatioByVolume"] = "float" +structDict['CThostFtdcInstrumentCommissionRateField'] = CThostFtdcInstrumentCommissionRateField + + +#娣卞害琛屾儏 +CThostFtdcDepthMarketDataField = {} +#浜ゆ槗鏃 +CThostFtdcDepthMarketDataField["TradingDay"] = "string" +#鍚堢害浠g爜 +CThostFtdcDepthMarketDataField["InstrumentID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcDepthMarketDataField["ExchangeID"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcDepthMarketDataField["ExchangeInstID"] = "string" +#鏈鏂颁环 +CThostFtdcDepthMarketDataField["LastPrice"] = "float" +#涓婃缁撶畻浠 +CThostFtdcDepthMarketDataField["PreSettlementPrice"] = "float" +#鏄ㄦ敹鐩 +CThostFtdcDepthMarketDataField["PreClosePrice"] = "float" +#鏄ㄦ寔浠撻噺 +CThostFtdcDepthMarketDataField["PreOpenInterest"] = "float" +#浠婂紑鐩 +CThostFtdcDepthMarketDataField["OpenPrice"] = "float" +#鏈楂樹环 +CThostFtdcDepthMarketDataField["HighestPrice"] = "float" +#鏈浣庝环 +CThostFtdcDepthMarketDataField["LowestPrice"] = "float" +#鏁伴噺 +CThostFtdcDepthMarketDataField["Volume"] = "int" +#鎴愪氦閲戦 +CThostFtdcDepthMarketDataField["Turnover"] = "float" +#鎸佷粨閲 +CThostFtdcDepthMarketDataField["OpenInterest"] = "float" +#浠婃敹鐩 +CThostFtdcDepthMarketDataField["ClosePrice"] = "float" +#鏈缁撶畻浠 +CThostFtdcDepthMarketDataField["SettlementPrice"] = "float" +#娑ㄥ仠鏉夸环 +CThostFtdcDepthMarketDataField["UpperLimitPrice"] = "float" +#璺屽仠鏉夸环 +CThostFtdcDepthMarketDataField["LowerLimitPrice"] = "float" +#鏄ㄨ櫄瀹炲害 +CThostFtdcDepthMarketDataField["PreDelta"] = "float" +#浠婅櫄瀹炲害 +CThostFtdcDepthMarketDataField["CurrDelta"] = "float" +#鏈鍚庝慨鏀规椂闂 +CThostFtdcDepthMarketDataField["UpdateTime"] = "string" +#鏈鍚庝慨鏀规绉 +CThostFtdcDepthMarketDataField["UpdateMillisec"] = "int" +#鐢充拱浠蜂竴 +CThostFtdcDepthMarketDataField["BidPrice1"] = "float" +#鐢充拱閲忎竴 +CThostFtdcDepthMarketDataField["BidVolume1"] = "int" +#鐢冲崠浠蜂竴 +CThostFtdcDepthMarketDataField["AskPrice1"] = "float" +#鐢冲崠閲忎竴 +CThostFtdcDepthMarketDataField["AskVolume1"] = "int" +#鐢充拱浠蜂簩 +CThostFtdcDepthMarketDataField["BidPrice2"] = "float" +#鐢充拱閲忎簩 +CThostFtdcDepthMarketDataField["BidVolume2"] = "int" +#鐢冲崠浠蜂簩 +CThostFtdcDepthMarketDataField["AskPrice2"] = "float" +#鐢冲崠閲忎簩 +CThostFtdcDepthMarketDataField["AskVolume2"] = "int" +#鐢充拱浠蜂笁 +CThostFtdcDepthMarketDataField["BidPrice3"] = "float" +#鐢充拱閲忎笁 +CThostFtdcDepthMarketDataField["BidVolume3"] = "int" +#鐢冲崠浠蜂笁 +CThostFtdcDepthMarketDataField["AskPrice3"] = "float" +#鐢冲崠閲忎笁 +CThostFtdcDepthMarketDataField["AskVolume3"] = "int" +#鐢充拱浠峰洓 +CThostFtdcDepthMarketDataField["BidPrice4"] = "float" +#鐢充拱閲忓洓 +CThostFtdcDepthMarketDataField["BidVolume4"] = "int" +#鐢冲崠浠峰洓 +CThostFtdcDepthMarketDataField["AskPrice4"] = "float" +#鐢冲崠閲忓洓 +CThostFtdcDepthMarketDataField["AskVolume4"] = "int" +#鐢充拱浠蜂簲 +CThostFtdcDepthMarketDataField["BidPrice5"] = "float" +#鐢充拱閲忎簲 +CThostFtdcDepthMarketDataField["BidVolume5"] = "int" +#鐢冲崠浠蜂簲 +CThostFtdcDepthMarketDataField["AskPrice5"] = "float" +#鐢冲崠閲忎簲 +CThostFtdcDepthMarketDataField["AskVolume5"] = "int" +#褰撴棩鍧囦环 +CThostFtdcDepthMarketDataField["AveragePrice"] = "float" +#涓氬姟鏃ユ湡 +CThostFtdcDepthMarketDataField["ActionDay"] = "string" +structDict['CThostFtdcDepthMarketDataField'] = CThostFtdcDepthMarketDataField + + +#鎶曡祫鑰呭悎绾︿氦鏄撴潈闄 +CThostFtdcInstrumentTradingRightField = {} +#鍚堢害浠g爜 +CThostFtdcInstrumentTradingRightField["InstrumentID"] = "string" +#鎶曡祫鑰呰寖鍥 +CThostFtdcInstrumentTradingRightField["InvestorRange"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcInstrumentTradingRightField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcInstrumentTradingRightField["InvestorID"] = "string" +#浜ゆ槗鏉冮檺 +CThostFtdcInstrumentTradingRightField["TradingRight"] = "string" +structDict['CThostFtdcInstrumentTradingRightField'] = CThostFtdcInstrumentTradingRightField + + +#缁忕邯鍏徃鐢ㄦ埛 +CThostFtdcBrokerUserField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcBrokerUserField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcBrokerUserField["UserID"] = "string" +#鐢ㄦ埛鍚嶇О +CThostFtdcBrokerUserField["UserName"] = "string" +#鐢ㄦ埛绫诲瀷 +CThostFtdcBrokerUserField["UserType"] = "string" +#鏄惁娲昏穬 +CThostFtdcBrokerUserField["IsActive"] = "int" +#鏄惁浣跨敤浠ょ墝 +CThostFtdcBrokerUserField["IsUsingOTP"] = "int" +structDict['CThostFtdcBrokerUserField'] = CThostFtdcBrokerUserField + + +#缁忕邯鍏徃鐢ㄦ埛鍙d护 +CThostFtdcBrokerUserPasswordField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcBrokerUserPasswordField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcBrokerUserPasswordField["UserID"] = "string" +#瀵嗙爜 +CThostFtdcBrokerUserPasswordField["Password"] = "string" +structDict['CThostFtdcBrokerUserPasswordField'] = CThostFtdcBrokerUserPasswordField + + +#缁忕邯鍏徃鐢ㄦ埛鍔熻兘鏉冮檺 +CThostFtdcBrokerUserFunctionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcBrokerUserFunctionField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcBrokerUserFunctionField["UserID"] = "string" +#缁忕邯鍏徃鍔熻兘浠g爜 +CThostFtdcBrokerUserFunctionField["BrokerFunctionCode"] = "string" +structDict['CThostFtdcBrokerUserFunctionField'] = CThostFtdcBrokerUserFunctionField + + +#浜ゆ槗鎵浜ゆ槗鍛樻姤鐩樻満 +CThostFtdcTraderOfferField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcTraderOfferField["ExchangeID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcTraderOfferField["TraderID"] = "string" +#浼氬憳浠g爜 +CThostFtdcTraderOfferField["ParticipantID"] = "string" +#瀵嗙爜 +CThostFtdcTraderOfferField["Password"] = "string" +#瀹夎缂栧彿 +CThostFtdcTraderOfferField["InstallID"] = "int" +#鏈湴鎶ュ崟缂栧彿 +CThostFtdcTraderOfferField["OrderLocalID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樿繛鎺ョ姸鎬 +CThostFtdcTraderOfferField["TraderConnectStatus"] = "string" +#鍙戝嚭杩炴帴璇锋眰鐨勬棩鏈 +CThostFtdcTraderOfferField["ConnectRequestDate"] = "string" +#鍙戝嚭杩炴帴璇锋眰鐨勬椂闂 +CThostFtdcTraderOfferField["ConnectRequestTime"] = "string" +#涓婃鎶ュ憡鏃ユ湡 +CThostFtdcTraderOfferField["LastReportDate"] = "string" +#涓婃鎶ュ憡鏃堕棿 +CThostFtdcTraderOfferField["LastReportTime"] = "string" +#瀹屾垚杩炴帴鏃ユ湡 +CThostFtdcTraderOfferField["ConnectDate"] = "string" +#瀹屾垚杩炴帴鏃堕棿 +CThostFtdcTraderOfferField["ConnectTime"] = "string" +#鍚姩鏃ユ湡 +CThostFtdcTraderOfferField["StartDate"] = "string" +#鍚姩鏃堕棿 +CThostFtdcTraderOfferField["StartTime"] = "string" +#浜ゆ槗鏃 +CThostFtdcTraderOfferField["TradingDay"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcTraderOfferField["BrokerID"] = "string" +#鏈腑浣嶆渶澶ф垚浜ょ紪鍙 +CThostFtdcTraderOfferField["MaxTradeID"] = "string" +#鏈腑浣嶆渶澶ф姤鍗曞鎷 +CThostFtdcTraderOfferField["MaxOrderMessageReference"] = "string" +structDict['CThostFtdcTraderOfferField'] = CThostFtdcTraderOfferField + + +#鎶曡祫鑰呯粨绠楃粨鏋 +CThostFtdcSettlementInfoField = {} +#浜ゆ槗鏃 +CThostFtdcSettlementInfoField["TradingDay"] = "string" +#缁撶畻缂栧彿 +CThostFtdcSettlementInfoField["SettlementID"] = "int" +#缁忕邯鍏徃浠g爜 +CThostFtdcSettlementInfoField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcSettlementInfoField["InvestorID"] = "string" +#搴忓彿 +CThostFtdcSettlementInfoField["SequenceNo"] = "int" +#娑堟伅姝f枃 +CThostFtdcSettlementInfoField["Content"] = "string" +structDict['CThostFtdcSettlementInfoField'] = CThostFtdcSettlementInfoField + + +#鍚堢害淇濊瘉閲戠巼璋冩暣 +CThostFtdcInstrumentMarginRateAdjustField = {} +#鍚堢害浠g爜 +CThostFtdcInstrumentMarginRateAdjustField["InstrumentID"] = "string" +#鎶曡祫鑰呰寖鍥 +CThostFtdcInstrumentMarginRateAdjustField["InvestorRange"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcInstrumentMarginRateAdjustField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcInstrumentMarginRateAdjustField["InvestorID"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcInstrumentMarginRateAdjustField["HedgeFlag"] = "string" +#澶氬ご淇濊瘉閲戠巼 +CThostFtdcInstrumentMarginRateAdjustField["LongMarginRatioByMoney"] = "float" +#澶氬ご淇濊瘉閲戣垂 +CThostFtdcInstrumentMarginRateAdjustField["LongMarginRatioByVolume"] = "float" +#绌哄ご淇濊瘉閲戠巼 +CThostFtdcInstrumentMarginRateAdjustField["ShortMarginRatioByMoney"] = "float" +#绌哄ご淇濊瘉閲戣垂 +CThostFtdcInstrumentMarginRateAdjustField["ShortMarginRatioByVolume"] = "float" +#鏄惁鐩稿浜ゆ槗鎵鏀跺彇 +CThostFtdcInstrumentMarginRateAdjustField["IsRelative"] = "int" +structDict['CThostFtdcInstrumentMarginRateAdjustField'] = CThostFtdcInstrumentMarginRateAdjustField + + +#浜ゆ槗鎵淇濊瘉閲戠巼 +CThostFtdcExchangeMarginRateField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcExchangeMarginRateField["BrokerID"] = "string" +#鍚堢害浠g爜 +CThostFtdcExchangeMarginRateField["InstrumentID"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcExchangeMarginRateField["HedgeFlag"] = "string" +#澶氬ご淇濊瘉閲戠巼 +CThostFtdcExchangeMarginRateField["LongMarginRatioByMoney"] = "float" +#澶氬ご淇濊瘉閲戣垂 +CThostFtdcExchangeMarginRateField["LongMarginRatioByVolume"] = "float" +#绌哄ご淇濊瘉閲戠巼 +CThostFtdcExchangeMarginRateField["ShortMarginRatioByMoney"] = "float" +#绌哄ご淇濊瘉閲戣垂 +CThostFtdcExchangeMarginRateField["ShortMarginRatioByVolume"] = "float" +structDict['CThostFtdcExchangeMarginRateField'] = CThostFtdcExchangeMarginRateField + + +#浜ゆ槗鎵淇濊瘉閲戠巼璋冩暣 +CThostFtdcExchangeMarginRateAdjustField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcExchangeMarginRateAdjustField["BrokerID"] = "string" +#鍚堢害浠g爜 +CThostFtdcExchangeMarginRateAdjustField["InstrumentID"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcExchangeMarginRateAdjustField["HedgeFlag"] = "string" +#璺熼殢浜ゆ槗鎵鎶曡祫鑰呭澶翠繚璇侀噾鐜 +CThostFtdcExchangeMarginRateAdjustField["LongMarginRatioByMoney"] = "float" +#璺熼殢浜ゆ槗鎵鎶曡祫鑰呭澶翠繚璇侀噾璐 +CThostFtdcExchangeMarginRateAdjustField["LongMarginRatioByVolume"] = "float" +#璺熼殢浜ゆ槗鎵鎶曡祫鑰呯┖澶翠繚璇侀噾鐜 +CThostFtdcExchangeMarginRateAdjustField["ShortMarginRatioByMoney"] = "float" +#璺熼殢浜ゆ槗鎵鎶曡祫鑰呯┖澶翠繚璇侀噾璐 +CThostFtdcExchangeMarginRateAdjustField["ShortMarginRatioByVolume"] = "float" +#浜ゆ槗鎵澶氬ご淇濊瘉閲戠巼 +CThostFtdcExchangeMarginRateAdjustField["ExchLongMarginRatioByMoney"] = "float" +#浜ゆ槗鎵澶氬ご淇濊瘉閲戣垂 +CThostFtdcExchangeMarginRateAdjustField["ExchLongMarginRatioByVolume"] = "float" +#浜ゆ槗鎵绌哄ご淇濊瘉閲戠巼 +CThostFtdcExchangeMarginRateAdjustField["ExchShortMarginRatioByMoney"] = "float" +#浜ゆ槗鎵绌哄ご淇濊瘉閲戣垂 +CThostFtdcExchangeMarginRateAdjustField["ExchShortMarginRatioByVolume"] = "float" +#涓嶈窡闅忎氦鏄撴墍鎶曡祫鑰呭澶翠繚璇侀噾鐜 +CThostFtdcExchangeMarginRateAdjustField["NoLongMarginRatioByMoney"] = "float" +#涓嶈窡闅忎氦鏄撴墍鎶曡祫鑰呭澶翠繚璇侀噾璐 +CThostFtdcExchangeMarginRateAdjustField["NoLongMarginRatioByVolume"] = "float" +#涓嶈窡闅忎氦鏄撴墍鎶曡祫鑰呯┖澶翠繚璇侀噾鐜 +CThostFtdcExchangeMarginRateAdjustField["NoShortMarginRatioByMoney"] = "float" +#涓嶈窡闅忎氦鏄撴墍鎶曡祫鑰呯┖澶翠繚璇侀噾璐 +CThostFtdcExchangeMarginRateAdjustField["NoShortMarginRatioByVolume"] = "float" +structDict['CThostFtdcExchangeMarginRateAdjustField'] = CThostFtdcExchangeMarginRateAdjustField + + +#姹囩巼 +CThostFtdcExchangeRateField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcExchangeRateField["BrokerID"] = "string" +#婧愬竵绉 +CThostFtdcExchangeRateField["FromCurrencyID"] = "string" +#婧愬竵绉嶅崟浣嶆暟閲 +CThostFtdcExchangeRateField["FromCurrencyUnit"] = "float" +#鐩爣甯佺 +CThostFtdcExchangeRateField["ToCurrencyID"] = "string" +#姹囩巼 +CThostFtdcExchangeRateField["ExchangeRate"] = "float" +structDict['CThostFtdcExchangeRateField'] = CThostFtdcExchangeRateField + + +#缁撶畻寮曠敤 +CThostFtdcSettlementRefField = {} +#浜ゆ槗鏃 +CThostFtdcSettlementRefField["TradingDay"] = "string" +#缁撶畻缂栧彿 +CThostFtdcSettlementRefField["SettlementID"] = "int" +structDict['CThostFtdcSettlementRefField'] = CThostFtdcSettlementRefField + + +#褰撳墠鏃堕棿 +CThostFtdcCurrentTimeField = {} +#褰撳墠鏃ユ湡 +CThostFtdcCurrentTimeField["CurrDate"] = "string" +#褰撳墠鏃堕棿 +CThostFtdcCurrentTimeField["CurrTime"] = "string" +#褰撳墠鏃堕棿锛堟绉掞級 +CThostFtdcCurrentTimeField["CurrMillisec"] = "int" +#涓氬姟鏃ユ湡 +CThostFtdcCurrentTimeField["ActionDay"] = "string" +structDict['CThostFtdcCurrentTimeField'] = CThostFtdcCurrentTimeField + + +#閫氳闃舵 +CThostFtdcCommPhaseField = {} +#浜ゆ槗鏃 +CThostFtdcCommPhaseField["TradingDay"] = "string" +#閫氳鏃舵缂栧彿 +CThostFtdcCommPhaseField["CommPhaseNo"] = "int" +#绯荤粺缂栧彿 +CThostFtdcCommPhaseField["SystemID"] = "string" +structDict['CThostFtdcCommPhaseField'] = CThostFtdcCommPhaseField + + +#鐧诲綍淇℃伅 +CThostFtdcLoginInfoField = {} +#鍓嶇疆缂栧彿 +CThostFtdcLoginInfoField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcLoginInfoField["SessionID"] = "int" +#缁忕邯鍏徃浠g爜 +CThostFtdcLoginInfoField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcLoginInfoField["UserID"] = "string" +#鐧诲綍鏃ユ湡 +CThostFtdcLoginInfoField["LoginDate"] = "string" +#鐧诲綍鏃堕棿 +CThostFtdcLoginInfoField["LoginTime"] = "string" +#IP鍦板潃 +CThostFtdcLoginInfoField["IPAddress"] = "string" +#鐢ㄦ埛绔骇鍝佷俊鎭 +CThostFtdcLoginInfoField["UserProductInfo"] = "string" +#鎺ュ彛绔骇鍝佷俊鎭 +CThostFtdcLoginInfoField["InterfaceProductInfo"] = "string" +#鍗忚淇℃伅 +CThostFtdcLoginInfoField["ProtocolInfo"] = "string" +#绯荤粺鍚嶇О +CThostFtdcLoginInfoField["SystemName"] = "string" +#瀵嗙爜 +CThostFtdcLoginInfoField["Password"] = "string" +#鏈澶ф姤鍗曞紩鐢 +CThostFtdcLoginInfoField["MaxOrderRef"] = "string" +#涓婃湡鎵鏃堕棿 +CThostFtdcLoginInfoField["SHFETime"] = "string" +#澶у晢鎵鏃堕棿 +CThostFtdcLoginInfoField["DCETime"] = "string" +#閮戝晢鎵鏃堕棿 +CThostFtdcLoginInfoField["CZCETime"] = "string" +#涓噾鎵鏃堕棿 +CThostFtdcLoginInfoField["FFEXTime"] = "string" +#Mac鍦板潃 +CThostFtdcLoginInfoField["MacAddress"] = "string" +#鍔ㄦ佸瘑鐮 +CThostFtdcLoginInfoField["OneTimePassword"] = "string" +#鑳芥簮涓績鏃堕棿 +CThostFtdcLoginInfoField["INETime"] = "string" +structDict['CThostFtdcLoginInfoField'] = CThostFtdcLoginInfoField + + +#鐧诲綍淇℃伅 +CThostFtdcLogoutAllField = {} +#鍓嶇疆缂栧彿 +CThostFtdcLogoutAllField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcLogoutAllField["SessionID"] = "int" +#绯荤粺鍚嶇О +CThostFtdcLogoutAllField["SystemName"] = "string" +structDict['CThostFtdcLogoutAllField'] = CThostFtdcLogoutAllField + + +#鍓嶇疆鐘舵 +CThostFtdcFrontStatusField = {} +#鍓嶇疆缂栧彿 +CThostFtdcFrontStatusField["FrontID"] = "int" +#涓婃鎶ュ憡鏃ユ湡 +CThostFtdcFrontStatusField["LastReportDate"] = "string" +#涓婃鎶ュ憡鏃堕棿 +CThostFtdcFrontStatusField["LastReportTime"] = "string" +#鏄惁娲昏穬 +CThostFtdcFrontStatusField["IsActive"] = "int" +structDict['CThostFtdcFrontStatusField'] = CThostFtdcFrontStatusField + + +#鐢ㄦ埛鍙d护鍙樻洿 +CThostFtdcUserPasswordUpdateField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcUserPasswordUpdateField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcUserPasswordUpdateField["UserID"] = "string" +#鍘熸潵鐨勫彛浠 +CThostFtdcUserPasswordUpdateField["OldPassword"] = "string" +#鏂扮殑鍙d护 +CThostFtdcUserPasswordUpdateField["NewPassword"] = "string" +structDict['CThostFtdcUserPasswordUpdateField'] = CThostFtdcUserPasswordUpdateField + + +#杈撳叆鎶ュ崟 +CThostFtdcInputOrderField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcInputOrderField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcInputOrderField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcInputOrderField["InstrumentID"] = "string" +#鎶ュ崟寮曠敤 +CThostFtdcInputOrderField["OrderRef"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcInputOrderField["UserID"] = "string" +#鎶ュ崟浠锋牸鏉′欢 +CThostFtdcInputOrderField["OrderPriceType"] = "string" +#涔板崠鏂瑰悜 +CThostFtdcInputOrderField["Direction"] = "string" +#缁勫悎寮骞虫爣蹇 +CThostFtdcInputOrderField["CombOffsetFlag"] = "string" +#缁勫悎鎶曟満濂椾繚鏍囧織 +CThostFtdcInputOrderField["CombHedgeFlag"] = "string" +#浠锋牸 +CThostFtdcInputOrderField["LimitPrice"] = "float" +#鏁伴噺 +CThostFtdcInputOrderField["VolumeTotalOriginal"] = "int" +#鏈夋晥鏈熺被鍨 +CThostFtdcInputOrderField["TimeCondition"] = "string" +#GTD鏃ユ湡 +CThostFtdcInputOrderField["GTDDate"] = "string" +#鎴愪氦閲忕被鍨 +CThostFtdcInputOrderField["VolumeCondition"] = "string" +#鏈灏忔垚浜ら噺 +CThostFtdcInputOrderField["MinVolume"] = "int" +#瑙﹀彂鏉′欢 +CThostFtdcInputOrderField["ContingentCondition"] = "string" +#姝㈡崯浠 +CThostFtdcInputOrderField["StopPrice"] = "float" +#寮哄钩鍘熷洜 +CThostFtdcInputOrderField["ForceCloseReason"] = "string" +#鑷姩鎸傝捣鏍囧織 +CThostFtdcInputOrderField["IsAutoSuspend"] = "int" +#涓氬姟鍗曞厓 +CThostFtdcInputOrderField["BusinessUnit"] = "string" +#璇锋眰缂栧彿 +CThostFtdcInputOrderField["RequestID"] = "int" +#鐢ㄦ埛寮鸿瘎鏍囧織 +CThostFtdcInputOrderField["UserForceClose"] = "int" +#浜掓崲鍗曟爣蹇 +CThostFtdcInputOrderField["IsSwapOrder"] = "int" +structDict['CThostFtdcInputOrderField'] = CThostFtdcInputOrderField + + +#鎶ュ崟 +CThostFtdcOrderField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcOrderField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcOrderField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcOrderField["InstrumentID"] = "string" +#鎶ュ崟寮曠敤 +CThostFtdcOrderField["OrderRef"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcOrderField["UserID"] = "string" +#鎶ュ崟浠锋牸鏉′欢 +CThostFtdcOrderField["OrderPriceType"] = "string" +#涔板崠鏂瑰悜 +CThostFtdcOrderField["Direction"] = "string" +#缁勫悎寮骞虫爣蹇 +CThostFtdcOrderField["CombOffsetFlag"] = "string" +#缁勫悎鎶曟満濂椾繚鏍囧織 +CThostFtdcOrderField["CombHedgeFlag"] = "string" +#浠锋牸 +CThostFtdcOrderField["LimitPrice"] = "float" +#鏁伴噺 +CThostFtdcOrderField["VolumeTotalOriginal"] = "int" +#鏈夋晥鏈熺被鍨 +CThostFtdcOrderField["TimeCondition"] = "string" +#GTD鏃ユ湡 +CThostFtdcOrderField["GTDDate"] = "string" +#鎴愪氦閲忕被鍨 +CThostFtdcOrderField["VolumeCondition"] = "string" +#鏈灏忔垚浜ら噺 +CThostFtdcOrderField["MinVolume"] = "int" +#瑙﹀彂鏉′欢 +CThostFtdcOrderField["ContingentCondition"] = "string" +#姝㈡崯浠 +CThostFtdcOrderField["StopPrice"] = "float" +#寮哄钩鍘熷洜 +CThostFtdcOrderField["ForceCloseReason"] = "string" +#鑷姩鎸傝捣鏍囧織 +CThostFtdcOrderField["IsAutoSuspend"] = "int" +#涓氬姟鍗曞厓 +CThostFtdcOrderField["BusinessUnit"] = "string" +#璇锋眰缂栧彿 +CThostFtdcOrderField["RequestID"] = "int" +#鏈湴鎶ュ崟缂栧彿 +CThostFtdcOrderField["OrderLocalID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcOrderField["ExchangeID"] = "string" +#浼氬憳浠g爜 +CThostFtdcOrderField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcOrderField["ClientID"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcOrderField["ExchangeInstID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcOrderField["TraderID"] = "string" +#瀹夎缂栧彿 +CThostFtdcOrderField["InstallID"] = "int" +#鎶ュ崟鎻愪氦鐘舵 +CThostFtdcOrderField["OrderSubmitStatus"] = "string" +#鎶ュ崟鎻愮ず搴忓彿 +CThostFtdcOrderField["NotifySequence"] = "int" +#浜ゆ槗鏃 +CThostFtdcOrderField["TradingDay"] = "string" +#缁撶畻缂栧彿 +CThostFtdcOrderField["SettlementID"] = "int" +#鎶ュ崟缂栧彿 +CThostFtdcOrderField["OrderSysID"] = "string" +#鎶ュ崟鏉ユ簮 +CThostFtdcOrderField["OrderSource"] = "string" +#鎶ュ崟鐘舵 +CThostFtdcOrderField["OrderStatus"] = "string" +#鎶ュ崟绫诲瀷 +CThostFtdcOrderField["OrderType"] = "string" +#浠婃垚浜ゆ暟閲 +CThostFtdcOrderField["VolumeTraded"] = "int" +#鍓╀綑鏁伴噺 +CThostFtdcOrderField["VolumeTotal"] = "int" +#鎶ュ崟鏃ユ湡 +CThostFtdcOrderField["InsertDate"] = "string" +#濮旀墭鏃堕棿 +CThostFtdcOrderField["InsertTime"] = "string" +#婵娲绘椂闂 +CThostFtdcOrderField["ActiveTime"] = "string" +#鎸傝捣鏃堕棿 +CThostFtdcOrderField["SuspendTime"] = "string" +#鏈鍚庝慨鏀规椂闂 +CThostFtdcOrderField["UpdateTime"] = "string" +#鎾ら攢鏃堕棿 +CThostFtdcOrderField["CancelTime"] = "string" +#鏈鍚庝慨鏀逛氦鏄撴墍浜ゆ槗鍛樹唬鐮 +CThostFtdcOrderField["ActiveTraderID"] = "string" +#缁撶畻浼氬憳缂栧彿 +CThostFtdcOrderField["ClearingPartID"] = "string" +#搴忓彿 +CThostFtdcOrderField["SequenceNo"] = "int" +#鍓嶇疆缂栧彿 +CThostFtdcOrderField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcOrderField["SessionID"] = "int" +#鐢ㄦ埛绔骇鍝佷俊鎭 +CThostFtdcOrderField["UserProductInfo"] = "string" +#鐘舵佷俊鎭 +CThostFtdcOrderField["StatusMsg"] = "string" +#鐢ㄦ埛寮鸿瘎鏍囧織 +CThostFtdcOrderField["UserForceClose"] = "int" +#鎿嶄綔鐢ㄦ埛浠g爜 +CThostFtdcOrderField["ActiveUserID"] = "string" +#缁忕邯鍏徃鎶ュ崟缂栧彿 +CThostFtdcOrderField["BrokerOrderSeq"] = "int" +#鐩稿叧鎶ュ崟 +CThostFtdcOrderField["RelativeOrderSysID"] = "string" +#閮戝晢鎵鎴愪氦鏁伴噺 +CThostFtdcOrderField["ZCETotalTradedVolume"] = "int" +#浜掓崲鍗曟爣蹇 +CThostFtdcOrderField["IsSwapOrder"] = "int" +structDict['CThostFtdcOrderField'] = CThostFtdcOrderField + + +#浜ゆ槗鎵鎶ュ崟 +CThostFtdcExchangeOrderField = {} +#鎶ュ崟浠锋牸鏉′欢 +CThostFtdcExchangeOrderField["OrderPriceType"] = "string" +#涔板崠鏂瑰悜 +CThostFtdcExchangeOrderField["Direction"] = "string" +#缁勫悎寮骞虫爣蹇 +CThostFtdcExchangeOrderField["CombOffsetFlag"] = "string" +#缁勫悎鎶曟満濂椾繚鏍囧織 +CThostFtdcExchangeOrderField["CombHedgeFlag"] = "string" +#浠锋牸 +CThostFtdcExchangeOrderField["LimitPrice"] = "float" +#鏁伴噺 +CThostFtdcExchangeOrderField["VolumeTotalOriginal"] = "int" +#鏈夋晥鏈熺被鍨 +CThostFtdcExchangeOrderField["TimeCondition"] = "string" +#GTD鏃ユ湡 +CThostFtdcExchangeOrderField["GTDDate"] = "string" +#鎴愪氦閲忕被鍨 +CThostFtdcExchangeOrderField["VolumeCondition"] = "string" +#鏈灏忔垚浜ら噺 +CThostFtdcExchangeOrderField["MinVolume"] = "int" +#瑙﹀彂鏉′欢 +CThostFtdcExchangeOrderField["ContingentCondition"] = "string" +#姝㈡崯浠 +CThostFtdcExchangeOrderField["StopPrice"] = "float" +#寮哄钩鍘熷洜 +CThostFtdcExchangeOrderField["ForceCloseReason"] = "string" +#鑷姩鎸傝捣鏍囧織 +CThostFtdcExchangeOrderField["IsAutoSuspend"] = "int" +#涓氬姟鍗曞厓 +CThostFtdcExchangeOrderField["BusinessUnit"] = "string" +#璇锋眰缂栧彿 +CThostFtdcExchangeOrderField["RequestID"] = "int" +#鏈湴鎶ュ崟缂栧彿 +CThostFtdcExchangeOrderField["OrderLocalID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcExchangeOrderField["ExchangeID"] = "string" +#浼氬憳浠g爜 +CThostFtdcExchangeOrderField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcExchangeOrderField["ClientID"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcExchangeOrderField["ExchangeInstID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcExchangeOrderField["TraderID"] = "string" +#瀹夎缂栧彿 +CThostFtdcExchangeOrderField["InstallID"] = "int" +#鎶ュ崟鎻愪氦鐘舵 +CThostFtdcExchangeOrderField["OrderSubmitStatus"] = "string" +#鎶ュ崟鎻愮ず搴忓彿 +CThostFtdcExchangeOrderField["NotifySequence"] = "int" +#浜ゆ槗鏃 +CThostFtdcExchangeOrderField["TradingDay"] = "string" +#缁撶畻缂栧彿 +CThostFtdcExchangeOrderField["SettlementID"] = "int" +#鎶ュ崟缂栧彿 +CThostFtdcExchangeOrderField["OrderSysID"] = "string" +#鎶ュ崟鏉ユ簮 +CThostFtdcExchangeOrderField["OrderSource"] = "string" +#鎶ュ崟鐘舵 +CThostFtdcExchangeOrderField["OrderStatus"] = "string" +#鎶ュ崟绫诲瀷 +CThostFtdcExchangeOrderField["OrderType"] = "string" +#浠婃垚浜ゆ暟閲 +CThostFtdcExchangeOrderField["VolumeTraded"] = "int" +#鍓╀綑鏁伴噺 +CThostFtdcExchangeOrderField["VolumeTotal"] = "int" +#鎶ュ崟鏃ユ湡 +CThostFtdcExchangeOrderField["InsertDate"] = "string" +#濮旀墭鏃堕棿 +CThostFtdcExchangeOrderField["InsertTime"] = "string" +#婵娲绘椂闂 +CThostFtdcExchangeOrderField["ActiveTime"] = "string" +#鎸傝捣鏃堕棿 +CThostFtdcExchangeOrderField["SuspendTime"] = "string" +#鏈鍚庝慨鏀规椂闂 +CThostFtdcExchangeOrderField["UpdateTime"] = "string" +#鎾ら攢鏃堕棿 +CThostFtdcExchangeOrderField["CancelTime"] = "string" +#鏈鍚庝慨鏀逛氦鏄撴墍浜ゆ槗鍛樹唬鐮 +CThostFtdcExchangeOrderField["ActiveTraderID"] = "string" +#缁撶畻浼氬憳缂栧彿 +CThostFtdcExchangeOrderField["ClearingPartID"] = "string" +#搴忓彿 +CThostFtdcExchangeOrderField["SequenceNo"] = "int" +structDict['CThostFtdcExchangeOrderField'] = CThostFtdcExchangeOrderField + + +#浜ゆ槗鎵鎶ュ崟鎻掑叆澶辫触 +CThostFtdcExchangeOrderInsertErrorField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcExchangeOrderInsertErrorField["ExchangeID"] = "string" +#浼氬憳浠g爜 +CThostFtdcExchangeOrderInsertErrorField["ParticipantID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcExchangeOrderInsertErrorField["TraderID"] = "string" +#瀹夎缂栧彿 +CThostFtdcExchangeOrderInsertErrorField["InstallID"] = "int" +#鏈湴鎶ュ崟缂栧彿 +CThostFtdcExchangeOrderInsertErrorField["OrderLocalID"] = "string" +#閿欒浠g爜 +CThostFtdcExchangeOrderInsertErrorField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcExchangeOrderInsertErrorField["ErrorMsg"] = "string" +structDict['CThostFtdcExchangeOrderInsertErrorField'] = CThostFtdcExchangeOrderInsertErrorField + + +#杈撳叆鎶ュ崟鎿嶄綔 +CThostFtdcInputOrderActionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcInputOrderActionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcInputOrderActionField["InvestorID"] = "string" +#鎶ュ崟鎿嶄綔寮曠敤 +CThostFtdcInputOrderActionField["OrderActionRef"] = "int" +#鎶ュ崟寮曠敤 +CThostFtdcInputOrderActionField["OrderRef"] = "string" +#璇锋眰缂栧彿 +CThostFtdcInputOrderActionField["RequestID"] = "int" +#鍓嶇疆缂栧彿 +CThostFtdcInputOrderActionField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcInputOrderActionField["SessionID"] = "int" +#浜ゆ槗鎵浠g爜 +CThostFtdcInputOrderActionField["ExchangeID"] = "string" +#鎶ュ崟缂栧彿 +CThostFtdcInputOrderActionField["OrderSysID"] = "string" +#鎿嶄綔鏍囧織 +CThostFtdcInputOrderActionField["ActionFlag"] = "string" +#浠锋牸 +CThostFtdcInputOrderActionField["LimitPrice"] = "float" +#鏁伴噺鍙樺寲 +CThostFtdcInputOrderActionField["VolumeChange"] = "int" +#鐢ㄦ埛浠g爜 +CThostFtdcInputOrderActionField["UserID"] = "string" +#鍚堢害浠g爜 +CThostFtdcInputOrderActionField["InstrumentID"] = "string" +structDict['CThostFtdcInputOrderActionField'] = CThostFtdcInputOrderActionField + + +#鎶ュ崟鎿嶄綔 +CThostFtdcOrderActionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcOrderActionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcOrderActionField["InvestorID"] = "string" +#鎶ュ崟鎿嶄綔寮曠敤 +CThostFtdcOrderActionField["OrderActionRef"] = "int" +#鎶ュ崟寮曠敤 +CThostFtdcOrderActionField["OrderRef"] = "string" +#璇锋眰缂栧彿 +CThostFtdcOrderActionField["RequestID"] = "int" +#鍓嶇疆缂栧彿 +CThostFtdcOrderActionField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcOrderActionField["SessionID"] = "int" +#浜ゆ槗鎵浠g爜 +CThostFtdcOrderActionField["ExchangeID"] = "string" +#鎶ュ崟缂栧彿 +CThostFtdcOrderActionField["OrderSysID"] = "string" +#鎿嶄綔鏍囧織 +CThostFtdcOrderActionField["ActionFlag"] = "string" +#浠锋牸 +CThostFtdcOrderActionField["LimitPrice"] = "float" +#鏁伴噺鍙樺寲 +CThostFtdcOrderActionField["VolumeChange"] = "int" +#鎿嶄綔鏃ユ湡 +CThostFtdcOrderActionField["ActionDate"] = "string" +#鎿嶄綔鏃堕棿 +CThostFtdcOrderActionField["ActionTime"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcOrderActionField["TraderID"] = "string" +#瀹夎缂栧彿 +CThostFtdcOrderActionField["InstallID"] = "int" +#鏈湴鎶ュ崟缂栧彿 +CThostFtdcOrderActionField["OrderLocalID"] = "string" +#鎿嶄綔鏈湴缂栧彿 +CThostFtdcOrderActionField["ActionLocalID"] = "string" +#浼氬憳浠g爜 +CThostFtdcOrderActionField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcOrderActionField["ClientID"] = "string" +#涓氬姟鍗曞厓 +CThostFtdcOrderActionField["BusinessUnit"] = "string" +#鎶ュ崟鎿嶄綔鐘舵 +CThostFtdcOrderActionField["OrderActionStatus"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcOrderActionField["UserID"] = "string" +#鐘舵佷俊鎭 +CThostFtdcOrderActionField["StatusMsg"] = "string" +#鍚堢害浠g爜 +CThostFtdcOrderActionField["InstrumentID"] = "string" +structDict['CThostFtdcOrderActionField'] = CThostFtdcOrderActionField + + +#浜ゆ槗鎵鎶ュ崟鎿嶄綔 +CThostFtdcExchangeOrderActionField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcExchangeOrderActionField["ExchangeID"] = "string" +#鎶ュ崟缂栧彿 +CThostFtdcExchangeOrderActionField["OrderSysID"] = "string" +#鎿嶄綔鏍囧織 +CThostFtdcExchangeOrderActionField["ActionFlag"] = "string" +#浠锋牸 +CThostFtdcExchangeOrderActionField["LimitPrice"] = "float" +#鏁伴噺鍙樺寲 +CThostFtdcExchangeOrderActionField["VolumeChange"] = "int" +#鎿嶄綔鏃ユ湡 +CThostFtdcExchangeOrderActionField["ActionDate"] = "string" +#鎿嶄綔鏃堕棿 +CThostFtdcExchangeOrderActionField["ActionTime"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcExchangeOrderActionField["TraderID"] = "string" +#瀹夎缂栧彿 +CThostFtdcExchangeOrderActionField["InstallID"] = "int" +#鏈湴鎶ュ崟缂栧彿 +CThostFtdcExchangeOrderActionField["OrderLocalID"] = "string" +#鎿嶄綔鏈湴缂栧彿 +CThostFtdcExchangeOrderActionField["ActionLocalID"] = "string" +#浼氬憳浠g爜 +CThostFtdcExchangeOrderActionField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcExchangeOrderActionField["ClientID"] = "string" +#涓氬姟鍗曞厓 +CThostFtdcExchangeOrderActionField["BusinessUnit"] = "string" +#鎶ュ崟鎿嶄綔鐘舵 +CThostFtdcExchangeOrderActionField["OrderActionStatus"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcExchangeOrderActionField["UserID"] = "string" +structDict['CThostFtdcExchangeOrderActionField'] = CThostFtdcExchangeOrderActionField + + +#浜ゆ槗鎵鎶ュ崟鎿嶄綔澶辫触 +CThostFtdcExchangeOrderActionErrorField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcExchangeOrderActionErrorField["ExchangeID"] = "string" +#鎶ュ崟缂栧彿 +CThostFtdcExchangeOrderActionErrorField["OrderSysID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcExchangeOrderActionErrorField["TraderID"] = "string" +#瀹夎缂栧彿 +CThostFtdcExchangeOrderActionErrorField["InstallID"] = "int" +#鏈湴鎶ュ崟缂栧彿 +CThostFtdcExchangeOrderActionErrorField["OrderLocalID"] = "string" +#鎿嶄綔鏈湴缂栧彿 +CThostFtdcExchangeOrderActionErrorField["ActionLocalID"] = "string" +#閿欒浠g爜 +CThostFtdcExchangeOrderActionErrorField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcExchangeOrderActionErrorField["ErrorMsg"] = "string" +structDict['CThostFtdcExchangeOrderActionErrorField'] = CThostFtdcExchangeOrderActionErrorField + + +#浜ゆ槗鎵鎴愪氦 +CThostFtdcExchangeTradeField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcExchangeTradeField["ExchangeID"] = "string" +#鎴愪氦缂栧彿 +CThostFtdcExchangeTradeField["TradeID"] = "string" +#涔板崠鏂瑰悜 +CThostFtdcExchangeTradeField["Direction"] = "string" +#鎶ュ崟缂栧彿 +CThostFtdcExchangeTradeField["OrderSysID"] = "string" +#浼氬憳浠g爜 +CThostFtdcExchangeTradeField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcExchangeTradeField["ClientID"] = "string" +#浜ゆ槗瑙掕壊 +CThostFtdcExchangeTradeField["TradingRole"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcExchangeTradeField["ExchangeInstID"] = "string" +#寮骞虫爣蹇 +CThostFtdcExchangeTradeField["OffsetFlag"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcExchangeTradeField["HedgeFlag"] = "string" +#浠锋牸 +CThostFtdcExchangeTradeField["Price"] = "float" +#鏁伴噺 +CThostFtdcExchangeTradeField["Volume"] = "int" +#鎴愪氦鏃舵湡 +CThostFtdcExchangeTradeField["TradeDate"] = "string" +#鎴愪氦鏃堕棿 +CThostFtdcExchangeTradeField["TradeTime"] = "string" +#鎴愪氦绫诲瀷 +CThostFtdcExchangeTradeField["TradeType"] = "string" +#鎴愪氦浠锋潵婧 +CThostFtdcExchangeTradeField["PriceSource"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcExchangeTradeField["TraderID"] = "string" +#鏈湴鎶ュ崟缂栧彿 +CThostFtdcExchangeTradeField["OrderLocalID"] = "string" +#缁撶畻浼氬憳缂栧彿 +CThostFtdcExchangeTradeField["ClearingPartID"] = "string" +#涓氬姟鍗曞厓 +CThostFtdcExchangeTradeField["BusinessUnit"] = "string" +#搴忓彿 +CThostFtdcExchangeTradeField["SequenceNo"] = "int" +#鎴愪氦鏉ユ簮 +CThostFtdcExchangeTradeField["TradeSource"] = "string" +structDict['CThostFtdcExchangeTradeField'] = CThostFtdcExchangeTradeField + + +#鎴愪氦 +CThostFtdcTradeField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcTradeField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcTradeField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcTradeField["InstrumentID"] = "string" +#鎶ュ崟寮曠敤 +CThostFtdcTradeField["OrderRef"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcTradeField["UserID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcTradeField["ExchangeID"] = "string" +#鎴愪氦缂栧彿 +CThostFtdcTradeField["TradeID"] = "string" +#涔板崠鏂瑰悜 +CThostFtdcTradeField["Direction"] = "string" +#鎶ュ崟缂栧彿 +CThostFtdcTradeField["OrderSysID"] = "string" +#浼氬憳浠g爜 +CThostFtdcTradeField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcTradeField["ClientID"] = "string" +#浜ゆ槗瑙掕壊 +CThostFtdcTradeField["TradingRole"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcTradeField["ExchangeInstID"] = "string" +#寮骞虫爣蹇 +CThostFtdcTradeField["OffsetFlag"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcTradeField["HedgeFlag"] = "string" +#浠锋牸 +CThostFtdcTradeField["Price"] = "float" +#鏁伴噺 +CThostFtdcTradeField["Volume"] = "int" +#鎴愪氦鏃舵湡 +CThostFtdcTradeField["TradeDate"] = "string" +#鎴愪氦鏃堕棿 +CThostFtdcTradeField["TradeTime"] = "string" +#鎴愪氦绫诲瀷 +CThostFtdcTradeField["TradeType"] = "string" +#鎴愪氦浠锋潵婧 +CThostFtdcTradeField["PriceSource"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcTradeField["TraderID"] = "string" +#鏈湴鎶ュ崟缂栧彿 +CThostFtdcTradeField["OrderLocalID"] = "string" +#缁撶畻浼氬憳缂栧彿 +CThostFtdcTradeField["ClearingPartID"] = "string" +#涓氬姟鍗曞厓 +CThostFtdcTradeField["BusinessUnit"] = "string" +#搴忓彿 +CThostFtdcTradeField["SequenceNo"] = "int" +#浜ゆ槗鏃 +CThostFtdcTradeField["TradingDay"] = "string" +#缁撶畻缂栧彿 +CThostFtdcTradeField["SettlementID"] = "int" +#缁忕邯鍏徃鎶ュ崟缂栧彿 +CThostFtdcTradeField["BrokerOrderSeq"] = "int" +#鎴愪氦鏉ユ簮 +CThostFtdcTradeField["TradeSource"] = "string" +structDict['CThostFtdcTradeField'] = CThostFtdcTradeField + + +#鐢ㄦ埛浼氳瘽 +CThostFtdcUserSessionField = {} +#鍓嶇疆缂栧彿 +CThostFtdcUserSessionField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcUserSessionField["SessionID"] = "int" +#缁忕邯鍏徃浠g爜 +CThostFtdcUserSessionField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcUserSessionField["UserID"] = "string" +#鐧诲綍鏃ユ湡 +CThostFtdcUserSessionField["LoginDate"] = "string" +#鐧诲綍鏃堕棿 +CThostFtdcUserSessionField["LoginTime"] = "string" +#IP鍦板潃 +CThostFtdcUserSessionField["IPAddress"] = "string" +#鐢ㄦ埛绔骇鍝佷俊鎭 +CThostFtdcUserSessionField["UserProductInfo"] = "string" +#鎺ュ彛绔骇鍝佷俊鎭 +CThostFtdcUserSessionField["InterfaceProductInfo"] = "string" +#鍗忚淇℃伅 +CThostFtdcUserSessionField["ProtocolInfo"] = "string" +#Mac鍦板潃 +CThostFtdcUserSessionField["MacAddress"] = "string" +structDict['CThostFtdcUserSessionField'] = CThostFtdcUserSessionField + + +#鏌ヨ鏈澶ф姤鍗曟暟閲 +CThostFtdcQueryMaxOrderVolumeField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQueryMaxOrderVolumeField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQueryMaxOrderVolumeField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQueryMaxOrderVolumeField["InstrumentID"] = "string" +#涔板崠鏂瑰悜 +CThostFtdcQueryMaxOrderVolumeField["Direction"] = "string" +#寮骞虫爣蹇 +CThostFtdcQueryMaxOrderVolumeField["OffsetFlag"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcQueryMaxOrderVolumeField["HedgeFlag"] = "string" +#鏈澶у厑璁告姤鍗曟暟閲 +CThostFtdcQueryMaxOrderVolumeField["MaxVolume"] = "int" +structDict['CThostFtdcQueryMaxOrderVolumeField'] = CThostFtdcQueryMaxOrderVolumeField + + +#鎶曡祫鑰呯粨绠楃粨鏋滅‘璁や俊鎭 +CThostFtdcSettlementInfoConfirmField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcSettlementInfoConfirmField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcSettlementInfoConfirmField["InvestorID"] = "string" +#纭鏃ユ湡 +CThostFtdcSettlementInfoConfirmField["ConfirmDate"] = "string" +#纭鏃堕棿 +CThostFtdcSettlementInfoConfirmField["ConfirmTime"] = "string" +structDict['CThostFtdcSettlementInfoConfirmField'] = CThostFtdcSettlementInfoConfirmField + + +#鍑哄叆閲戝悓姝 +CThostFtdcSyncDepositField = {} +#鍑哄叆閲戞祦姘村彿 +CThostFtdcSyncDepositField["DepositSeqNo"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcSyncDepositField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcSyncDepositField["InvestorID"] = "string" +#鍏ラ噾閲戦 +CThostFtdcSyncDepositField["Deposit"] = "float" +#鏄惁寮哄埗杩涜 +CThostFtdcSyncDepositField["IsForce"] = "int" +#甯佺浠g爜 +CThostFtdcSyncDepositField["CurrencyID"] = "string" +structDict['CThostFtdcSyncDepositField'] = CThostFtdcSyncDepositField + + +#璐у竵璐ㄦ娂鍚屾 +CThostFtdcSyncFundMortgageField = {} +#璐у竵璐ㄦ娂娴佹按鍙 +CThostFtdcSyncFundMortgageField["MortgageSeqNo"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcSyncFundMortgageField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcSyncFundMortgageField["InvestorID"] = "string" +#婧愬竵绉 +CThostFtdcSyncFundMortgageField["FromCurrencyID"] = "string" +#璐ㄦ娂閲戦 +CThostFtdcSyncFundMortgageField["MortgageAmount"] = "float" +#鐩爣甯佺 +CThostFtdcSyncFundMortgageField["ToCurrencyID"] = "string" +structDict['CThostFtdcSyncFundMortgageField'] = CThostFtdcSyncFundMortgageField + + +#缁忕邯鍏徃鍚屾 +CThostFtdcBrokerSyncField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcBrokerSyncField["BrokerID"] = "string" +structDict['CThostFtdcBrokerSyncField'] = CThostFtdcBrokerSyncField + + +#姝e湪鍚屾涓殑鎶曡祫鑰 +CThostFtdcSyncingInvestorField = {} +#鎶曡祫鑰呬唬鐮 +CThostFtdcSyncingInvestorField["InvestorID"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcSyncingInvestorField["BrokerID"] = "string" +#鎶曡祫鑰呭垎缁勪唬鐮 +CThostFtdcSyncingInvestorField["InvestorGroupID"] = "string" +#鎶曡祫鑰呭悕绉 +CThostFtdcSyncingInvestorField["InvestorName"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcSyncingInvestorField["IdentifiedCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcSyncingInvestorField["IdentifiedCardNo"] = "string" +#鏄惁娲昏穬 +CThostFtdcSyncingInvestorField["IsActive"] = "int" +#鑱旂郴鐢佃瘽 +CThostFtdcSyncingInvestorField["Telephone"] = "string" +#閫氳鍦板潃 +CThostFtdcSyncingInvestorField["Address"] = "string" +#寮鎴锋棩鏈 +CThostFtdcSyncingInvestorField["OpenDate"] = "string" +#鎵嬫満 +CThostFtdcSyncingInvestorField["Mobile"] = "string" +#鎵嬬画璐圭巼妯℃澘浠g爜 +CThostFtdcSyncingInvestorField["CommModelID"] = "string" +#淇濊瘉閲戠巼妯℃澘浠g爜 +CThostFtdcSyncingInvestorField["MarginModelID"] = "string" +structDict['CThostFtdcSyncingInvestorField'] = CThostFtdcSyncingInvestorField + + +#姝e湪鍚屾涓殑浜ゆ槗浠g爜 +CThostFtdcSyncingTradingCodeField = {} +#鎶曡祫鑰呬唬鐮 +CThostFtdcSyncingTradingCodeField["InvestorID"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcSyncingTradingCodeField["BrokerID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcSyncingTradingCodeField["ExchangeID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcSyncingTradingCodeField["ClientID"] = "string" +#鏄惁娲昏穬 +CThostFtdcSyncingTradingCodeField["IsActive"] = "int" +#浜ゆ槗缂栫爜绫诲瀷 +CThostFtdcSyncingTradingCodeField["ClientIDType"] = "string" +structDict['CThostFtdcSyncingTradingCodeField'] = CThostFtdcSyncingTradingCodeField + + +#姝e湪鍚屾涓殑鎶曡祫鑰呭垎缁 +CThostFtdcSyncingInvestorGroupField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcSyncingInvestorGroupField["BrokerID"] = "string" +#鎶曡祫鑰呭垎缁勪唬鐮 +CThostFtdcSyncingInvestorGroupField["InvestorGroupID"] = "string" +#鎶曡祫鑰呭垎缁勫悕绉 +CThostFtdcSyncingInvestorGroupField["InvestorGroupName"] = "string" +structDict['CThostFtdcSyncingInvestorGroupField'] = CThostFtdcSyncingInvestorGroupField + + +#姝e湪鍚屾涓殑浜ゆ槗璐﹀彿 +CThostFtdcSyncingTradingAccountField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcSyncingTradingAccountField["BrokerID"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcSyncingTradingAccountField["AccountID"] = "string" +#涓婃璐ㄦ娂閲戦 +CThostFtdcSyncingTradingAccountField["PreMortgage"] = "float" +#涓婃淇$敤棰濆害 +CThostFtdcSyncingTradingAccountField["PreCredit"] = "float" +#涓婃瀛樻棰 +CThostFtdcSyncingTradingAccountField["PreDeposit"] = "float" +#涓婃缁撶畻鍑嗗閲 +CThostFtdcSyncingTradingAccountField["PreBalance"] = "float" +#涓婃鍗犵敤鐨勪繚璇侀噾 +CThostFtdcSyncingTradingAccountField["PreMargin"] = "float" +#鍒╂伅鍩烘暟 +CThostFtdcSyncingTradingAccountField["InterestBase"] = "float" +#鍒╂伅鏀跺叆 +CThostFtdcSyncingTradingAccountField["Interest"] = "float" +#鍏ラ噾閲戦 +CThostFtdcSyncingTradingAccountField["Deposit"] = "float" +#鍑洪噾閲戦 +CThostFtdcSyncingTradingAccountField["Withdraw"] = "float" +#鍐荤粨鐨勪繚璇侀噾 +CThostFtdcSyncingTradingAccountField["FrozenMargin"] = "float" +#鍐荤粨鐨勮祫閲 +CThostFtdcSyncingTradingAccountField["FrozenCash"] = "float" +#鍐荤粨鐨勬墜缁垂 +CThostFtdcSyncingTradingAccountField["FrozenCommission"] = "float" +#褰撳墠淇濊瘉閲戞婚 +CThostFtdcSyncingTradingAccountField["CurrMargin"] = "float" +#璧勯噾宸 +CThostFtdcSyncingTradingAccountField["CashIn"] = "float" +#鎵嬬画璐 +CThostFtdcSyncingTradingAccountField["Commission"] = "float" +#骞充粨鐩堜簭 +CThostFtdcSyncingTradingAccountField["CloseProfit"] = "float" +#鎸佷粨鐩堜簭 +CThostFtdcSyncingTradingAccountField["PositionProfit"] = "float" +#鏈熻揣缁撶畻鍑嗗閲 +CThostFtdcSyncingTradingAccountField["Balance"] = "float" +#鍙敤璧勯噾 +CThostFtdcSyncingTradingAccountField["Available"] = "float" +#鍙彇璧勯噾 +CThostFtdcSyncingTradingAccountField["WithdrawQuota"] = "float" +#鍩烘湰鍑嗗閲 +CThostFtdcSyncingTradingAccountField["Reserve"] = "float" +#浜ゆ槗鏃 +CThostFtdcSyncingTradingAccountField["TradingDay"] = "string" +#缁撶畻缂栧彿 +CThostFtdcSyncingTradingAccountField["SettlementID"] = "int" +#淇$敤棰濆害 +CThostFtdcSyncingTradingAccountField["Credit"] = "float" +#璐ㄦ娂閲戦 +CThostFtdcSyncingTradingAccountField["Mortgage"] = "float" +#浜ゆ槗鎵淇濊瘉閲 +CThostFtdcSyncingTradingAccountField["ExchangeMargin"] = "float" +#鎶曡祫鑰呬氦鍓蹭繚璇侀噾 +CThostFtdcSyncingTradingAccountField["DeliveryMargin"] = "float" +#浜ゆ槗鎵浜ゅ壊淇濊瘉閲 +CThostFtdcSyncingTradingAccountField["ExchangeDeliveryMargin"] = "float" +#淇濆簳鏈熻揣缁撶畻鍑嗗閲 +CThostFtdcSyncingTradingAccountField["ReserveBalance"] = "float" +#甯佺浠g爜 +CThostFtdcSyncingTradingAccountField["CurrencyID"] = "string" +#涓婃璐у竵璐ㄥ叆閲戦 +CThostFtdcSyncingTradingAccountField["PreFundMortgageIn"] = "float" +#涓婃璐у竵璐ㄥ嚭閲戦 +CThostFtdcSyncingTradingAccountField["PreFundMortgageOut"] = "float" +#璐у竵璐ㄥ叆閲戦 +CThostFtdcSyncingTradingAccountField["FundMortgageIn"] = "float" +#璐у竵璐ㄥ嚭閲戦 +CThostFtdcSyncingTradingAccountField["FundMortgageOut"] = "float" +#璐у竵璐ㄦ娂浣欓 +CThostFtdcSyncingTradingAccountField["FundMortgageAvailable"] = "float" +#鍙川鎶艰揣甯侀噾棰 +CThostFtdcSyncingTradingAccountField["MortgageableFund"] = "float" +#鐗规畩浜у搧鍗犵敤淇濊瘉閲 +CThostFtdcSyncingTradingAccountField["SpecProductMargin"] = "float" +#鐗规畩浜у搧鍐荤粨淇濊瘉閲 +CThostFtdcSyncingTradingAccountField["SpecProductFrozenMargin"] = "float" +#鐗规畩浜у搧鎵嬬画璐 +CThostFtdcSyncingTradingAccountField["SpecProductCommission"] = "float" +#鐗规畩浜у搧鍐荤粨鎵嬬画璐 +CThostFtdcSyncingTradingAccountField["SpecProductFrozenCommission"] = "float" +#鐗规畩浜у搧鎸佷粨鐩堜簭 +CThostFtdcSyncingTradingAccountField["SpecProductPositionProfit"] = "float" +#鐗规畩浜у搧骞充粨鐩堜簭 +CThostFtdcSyncingTradingAccountField["SpecProductCloseProfit"] = "float" +#鏍规嵁鎸佷粨鐩堜簭绠楁硶璁$畻鐨勭壒娈婁骇鍝佹寔浠撶泩浜 +CThostFtdcSyncingTradingAccountField["SpecProductPositionProfitByAlg"] = "float" +#鐗规畩浜у搧浜ゆ槗鎵淇濊瘉閲 +CThostFtdcSyncingTradingAccountField["SpecProductExchangeMargin"] = "float" +#鏈熸潈骞充粨鐩堜簭 +CThostFtdcSyncingTradingAccountField["OptionCloseProfit"] = "float" +#鏈熸潈甯傚 +CThostFtdcSyncingTradingAccountField["OptionValue"] = "float" +structDict['CThostFtdcSyncingTradingAccountField'] = CThostFtdcSyncingTradingAccountField + + +#姝e湪鍚屾涓殑鎶曡祫鑰呮寔浠 +CThostFtdcSyncingInvestorPositionField = {} +#鍚堢害浠g爜 +CThostFtdcSyncingInvestorPositionField["InstrumentID"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcSyncingInvestorPositionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcSyncingInvestorPositionField["InvestorID"] = "string" +#鎸佷粨澶氱┖鏂瑰悜 +CThostFtdcSyncingInvestorPositionField["PosiDirection"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcSyncingInvestorPositionField["HedgeFlag"] = "string" +#鎸佷粨鏃ユ湡 +CThostFtdcSyncingInvestorPositionField["PositionDate"] = "string" +#涓婃棩鎸佷粨 +CThostFtdcSyncingInvestorPositionField["YdPosition"] = "int" +#浠婃棩鎸佷粨 +CThostFtdcSyncingInvestorPositionField["Position"] = "int" +#澶氬ご鍐荤粨 +CThostFtdcSyncingInvestorPositionField["LongFrozen"] = "int" +#绌哄ご鍐荤粨 +CThostFtdcSyncingInvestorPositionField["ShortFrozen"] = "int" +#寮浠撳喕缁撻噾棰 +CThostFtdcSyncingInvestorPositionField["LongFrozenAmount"] = "float" +#寮浠撳喕缁撻噾棰 +CThostFtdcSyncingInvestorPositionField["ShortFrozenAmount"] = "float" +#寮浠撻噺 +CThostFtdcSyncingInvestorPositionField["OpenVolume"] = "int" +#骞充粨閲 +CThostFtdcSyncingInvestorPositionField["CloseVolume"] = "int" +#寮浠撻噾棰 +CThostFtdcSyncingInvestorPositionField["OpenAmount"] = "float" +#骞充粨閲戦 +CThostFtdcSyncingInvestorPositionField["CloseAmount"] = "float" +#鎸佷粨鎴愭湰 +CThostFtdcSyncingInvestorPositionField["PositionCost"] = "float" +#涓婃鍗犵敤鐨勪繚璇侀噾 +CThostFtdcSyncingInvestorPositionField["PreMargin"] = "float" +#鍗犵敤鐨勪繚璇侀噾 +CThostFtdcSyncingInvestorPositionField["UseMargin"] = "float" +#鍐荤粨鐨勪繚璇侀噾 +CThostFtdcSyncingInvestorPositionField["FrozenMargin"] = "float" +#鍐荤粨鐨勮祫閲 +CThostFtdcSyncingInvestorPositionField["FrozenCash"] = "float" +#鍐荤粨鐨勬墜缁垂 +CThostFtdcSyncingInvestorPositionField["FrozenCommission"] = "float" +#璧勯噾宸 +CThostFtdcSyncingInvestorPositionField["CashIn"] = "float" +#鎵嬬画璐 +CThostFtdcSyncingInvestorPositionField["Commission"] = "float" +#骞充粨鐩堜簭 +CThostFtdcSyncingInvestorPositionField["CloseProfit"] = "float" +#鎸佷粨鐩堜簭 +CThostFtdcSyncingInvestorPositionField["PositionProfit"] = "float" +#涓婃缁撶畻浠 +CThostFtdcSyncingInvestorPositionField["PreSettlementPrice"] = "float" +#鏈缁撶畻浠 +CThostFtdcSyncingInvestorPositionField["SettlementPrice"] = "float" +#浜ゆ槗鏃 +CThostFtdcSyncingInvestorPositionField["TradingDay"] = "string" +#缁撶畻缂栧彿 +CThostFtdcSyncingInvestorPositionField["SettlementID"] = "int" +#寮浠撴垚鏈 +CThostFtdcSyncingInvestorPositionField["OpenCost"] = "float" +#浜ゆ槗鎵淇濊瘉閲 +CThostFtdcSyncingInvestorPositionField["ExchangeMargin"] = "float" +#缁勫悎鎴愪氦褰㈡垚鐨勬寔浠 +CThostFtdcSyncingInvestorPositionField["CombPosition"] = "int" +#缁勫悎澶氬ご鍐荤粨 +CThostFtdcSyncingInvestorPositionField["CombLongFrozen"] = "int" +#缁勫悎绌哄ご鍐荤粨 +CThostFtdcSyncingInvestorPositionField["CombShortFrozen"] = "int" +#閫愭棩鐩競骞充粨鐩堜簭 +CThostFtdcSyncingInvestorPositionField["CloseProfitByDate"] = "float" +#閫愮瑪瀵瑰啿骞充粨鐩堜簭 +CThostFtdcSyncingInvestorPositionField["CloseProfitByTrade"] = "float" +#浠婃棩鎸佷粨 +CThostFtdcSyncingInvestorPositionField["TodayPosition"] = "int" +#淇濊瘉閲戠巼 +CThostFtdcSyncingInvestorPositionField["MarginRateByMoney"] = "float" +#淇濊瘉閲戠巼(鎸夋墜鏁) +CThostFtdcSyncingInvestorPositionField["MarginRateByVolume"] = "float" +#鎵ц鍐荤粨 +CThostFtdcSyncingInvestorPositionField["StrikeFrozen"] = "int" +#鎵ц鍐荤粨閲戦 +CThostFtdcSyncingInvestorPositionField["StrikeFrozenAmount"] = "float" +#鏀惧純鎵ц鍐荤粨 +CThostFtdcSyncingInvestorPositionField["AbandonFrozen"] = "int" +#鏈熸潈甯傚 +CThostFtdcSyncingInvestorPositionField["OptionValue"] = "float" +structDict['CThostFtdcSyncingInvestorPositionField'] = CThostFtdcSyncingInvestorPositionField + + +#姝e湪鍚屾涓殑鍚堢害淇濊瘉閲戠巼 +CThostFtdcSyncingInstrumentMarginRateField = {} +#鍚堢害浠g爜 +CThostFtdcSyncingInstrumentMarginRateField["InstrumentID"] = "string" +#鎶曡祫鑰呰寖鍥 +CThostFtdcSyncingInstrumentMarginRateField["InvestorRange"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcSyncingInstrumentMarginRateField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcSyncingInstrumentMarginRateField["InvestorID"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcSyncingInstrumentMarginRateField["HedgeFlag"] = "string" +#澶氬ご淇濊瘉閲戠巼 +CThostFtdcSyncingInstrumentMarginRateField["LongMarginRatioByMoney"] = "float" +#澶氬ご淇濊瘉閲戣垂 +CThostFtdcSyncingInstrumentMarginRateField["LongMarginRatioByVolume"] = "float" +#绌哄ご淇濊瘉閲戠巼 +CThostFtdcSyncingInstrumentMarginRateField["ShortMarginRatioByMoney"] = "float" +#绌哄ご淇濊瘉閲戣垂 +CThostFtdcSyncingInstrumentMarginRateField["ShortMarginRatioByVolume"] = "float" +#鏄惁鐩稿浜ゆ槗鎵鏀跺彇 +CThostFtdcSyncingInstrumentMarginRateField["IsRelative"] = "int" +structDict['CThostFtdcSyncingInstrumentMarginRateField'] = CThostFtdcSyncingInstrumentMarginRateField + + +#姝e湪鍚屾涓殑鍚堢害鎵嬬画璐圭巼 +CThostFtdcSyncingInstrumentCommissionRateField = {} +#鍚堢害浠g爜 +CThostFtdcSyncingInstrumentCommissionRateField["InstrumentID"] = "string" +#鎶曡祫鑰呰寖鍥 +CThostFtdcSyncingInstrumentCommissionRateField["InvestorRange"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcSyncingInstrumentCommissionRateField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcSyncingInstrumentCommissionRateField["InvestorID"] = "string" +#寮浠撴墜缁垂鐜 +CThostFtdcSyncingInstrumentCommissionRateField["OpenRatioByMoney"] = "float" +#寮浠撴墜缁垂 +CThostFtdcSyncingInstrumentCommissionRateField["OpenRatioByVolume"] = "float" +#骞充粨鎵嬬画璐圭巼 +CThostFtdcSyncingInstrumentCommissionRateField["CloseRatioByMoney"] = "float" +#骞充粨鎵嬬画璐 +CThostFtdcSyncingInstrumentCommissionRateField["CloseRatioByVolume"] = "float" +#骞充粖鎵嬬画璐圭巼 +CThostFtdcSyncingInstrumentCommissionRateField["CloseTodayRatioByMoney"] = "float" +#骞充粖鎵嬬画璐 +CThostFtdcSyncingInstrumentCommissionRateField["CloseTodayRatioByVolume"] = "float" +structDict['CThostFtdcSyncingInstrumentCommissionRateField'] = CThostFtdcSyncingInstrumentCommissionRateField + + +#姝e湪鍚屾涓殑鍚堢害浜ゆ槗鏉冮檺 +CThostFtdcSyncingInstrumentTradingRightField = {} +#鍚堢害浠g爜 +CThostFtdcSyncingInstrumentTradingRightField["InstrumentID"] = "string" +#鎶曡祫鑰呰寖鍥 +CThostFtdcSyncingInstrumentTradingRightField["InvestorRange"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcSyncingInstrumentTradingRightField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcSyncingInstrumentTradingRightField["InvestorID"] = "string" +#浜ゆ槗鏉冮檺 +CThostFtdcSyncingInstrumentTradingRightField["TradingRight"] = "string" +structDict['CThostFtdcSyncingInstrumentTradingRightField'] = CThostFtdcSyncingInstrumentTradingRightField + + +#鏌ヨ鎶ュ崟 +CThostFtdcQryOrderField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryOrderField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryOrderField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryOrderField["InstrumentID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryOrderField["ExchangeID"] = "string" +#鎶ュ崟缂栧彿 +CThostFtdcQryOrderField["OrderSysID"] = "string" +#寮濮嬫椂闂 +CThostFtdcQryOrderField["InsertTimeStart"] = "string" +#缁撴潫鏃堕棿 +CThostFtdcQryOrderField["InsertTimeEnd"] = "string" +structDict['CThostFtdcQryOrderField'] = CThostFtdcQryOrderField + + +#鏌ヨ鎴愪氦 +CThostFtdcQryTradeField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryTradeField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryTradeField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryTradeField["InstrumentID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryTradeField["ExchangeID"] = "string" +#鎴愪氦缂栧彿 +CThostFtdcQryTradeField["TradeID"] = "string" +#寮濮嬫椂闂 +CThostFtdcQryTradeField["TradeTimeStart"] = "string" +#缁撴潫鏃堕棿 +CThostFtdcQryTradeField["TradeTimeEnd"] = "string" +structDict['CThostFtdcQryTradeField'] = CThostFtdcQryTradeField + + +#鏌ヨ鎶曡祫鑰呮寔浠 +CThostFtdcQryInvestorPositionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryInvestorPositionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryInvestorPositionField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryInvestorPositionField["InstrumentID"] = "string" +structDict['CThostFtdcQryInvestorPositionField'] = CThostFtdcQryInvestorPositionField + + +#鏌ヨ璧勯噾璐︽埛 +CThostFtdcQryTradingAccountField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryTradingAccountField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryTradingAccountField["InvestorID"] = "string" +#甯佺浠g爜 +CThostFtdcQryTradingAccountField["CurrencyID"] = "string" +structDict['CThostFtdcQryTradingAccountField'] = CThostFtdcQryTradingAccountField + + +#鏌ヨ鎶曡祫鑰 +CThostFtdcQryInvestorField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryInvestorField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryInvestorField["InvestorID"] = "string" +structDict['CThostFtdcQryInvestorField'] = CThostFtdcQryInvestorField + + +#鏌ヨ浜ゆ槗缂栫爜 +CThostFtdcQryTradingCodeField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryTradingCodeField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryTradingCodeField["InvestorID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryTradingCodeField["ExchangeID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcQryTradingCodeField["ClientID"] = "string" +#浜ゆ槗缂栫爜绫诲瀷 +CThostFtdcQryTradingCodeField["ClientIDType"] = "string" +structDict['CThostFtdcQryTradingCodeField'] = CThostFtdcQryTradingCodeField + + +#鏌ヨ鎶曡祫鑰呯粍 +CThostFtdcQryInvestorGroupField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryInvestorGroupField["BrokerID"] = "string" +structDict['CThostFtdcQryInvestorGroupField'] = CThostFtdcQryInvestorGroupField + + +#鏌ヨ鍚堢害淇濊瘉閲戠巼 +CThostFtdcQryInstrumentMarginRateField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryInstrumentMarginRateField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryInstrumentMarginRateField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryInstrumentMarginRateField["InstrumentID"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcQryInstrumentMarginRateField["HedgeFlag"] = "string" +structDict['CThostFtdcQryInstrumentMarginRateField'] = CThostFtdcQryInstrumentMarginRateField + + +#鏌ヨ鎵嬬画璐圭巼 +CThostFtdcQryInstrumentCommissionRateField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryInstrumentCommissionRateField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryInstrumentCommissionRateField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryInstrumentCommissionRateField["InstrumentID"] = "string" +structDict['CThostFtdcQryInstrumentCommissionRateField'] = CThostFtdcQryInstrumentCommissionRateField + + +#鏌ヨ鍚堢害浜ゆ槗鏉冮檺 +CThostFtdcQryInstrumentTradingRightField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryInstrumentTradingRightField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryInstrumentTradingRightField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryInstrumentTradingRightField["InstrumentID"] = "string" +structDict['CThostFtdcQryInstrumentTradingRightField'] = CThostFtdcQryInstrumentTradingRightField + + +#鏌ヨ缁忕邯鍏徃 +CThostFtdcQryBrokerField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryBrokerField["BrokerID"] = "string" +structDict['CThostFtdcQryBrokerField'] = CThostFtdcQryBrokerField + + +#鏌ヨ浜ゆ槗鍛 +CThostFtdcQryTraderField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcQryTraderField["ExchangeID"] = "string" +#浼氬憳浠g爜 +CThostFtdcQryTraderField["ParticipantID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcQryTraderField["TraderID"] = "string" +structDict['CThostFtdcQryTraderField'] = CThostFtdcQryTraderField + + +#鏌ヨ绠$悊鐢ㄦ埛鍔熻兘鏉冮檺 +CThostFtdcQrySuperUserFunctionField = {} +#鐢ㄦ埛浠g爜 +CThostFtdcQrySuperUserFunctionField["UserID"] = "string" +structDict['CThostFtdcQrySuperUserFunctionField'] = CThostFtdcQrySuperUserFunctionField + + +#鏌ヨ鐢ㄦ埛浼氳瘽 +CThostFtdcQryUserSessionField = {} +#鍓嶇疆缂栧彿 +CThostFtdcQryUserSessionField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcQryUserSessionField["SessionID"] = "int" +#缁忕邯鍏徃浠g爜 +CThostFtdcQryUserSessionField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcQryUserSessionField["UserID"] = "string" +structDict['CThostFtdcQryUserSessionField'] = CThostFtdcQryUserSessionField + + +#鏌ヨ缁忕邯鍏徃浼氬憳浠g爜 +CThostFtdcQryPartBrokerField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcQryPartBrokerField["ExchangeID"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcQryPartBrokerField["BrokerID"] = "string" +#浼氬憳浠g爜 +CThostFtdcQryPartBrokerField["ParticipantID"] = "string" +structDict['CThostFtdcQryPartBrokerField'] = CThostFtdcQryPartBrokerField + + +#鏌ヨ鍓嶇疆鐘舵 +CThostFtdcQryFrontStatusField = {} +#鍓嶇疆缂栧彿 +CThostFtdcQryFrontStatusField["FrontID"] = "int" +structDict['CThostFtdcQryFrontStatusField'] = CThostFtdcQryFrontStatusField + + +#鏌ヨ浜ゆ槗鎵鎶ュ崟 +CThostFtdcQryExchangeOrderField = {} +#浼氬憳浠g爜 +CThostFtdcQryExchangeOrderField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcQryExchangeOrderField["ClientID"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcQryExchangeOrderField["ExchangeInstID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryExchangeOrderField["ExchangeID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcQryExchangeOrderField["TraderID"] = "string" +structDict['CThostFtdcQryExchangeOrderField'] = CThostFtdcQryExchangeOrderField + + +#鏌ヨ鎶ュ崟鎿嶄綔 +CThostFtdcQryOrderActionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryOrderActionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryOrderActionField["InvestorID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryOrderActionField["ExchangeID"] = "string" +structDict['CThostFtdcQryOrderActionField'] = CThostFtdcQryOrderActionField + + +#鏌ヨ浜ゆ槗鎵鎶ュ崟鎿嶄綔 +CThostFtdcQryExchangeOrderActionField = {} +#浼氬憳浠g爜 +CThostFtdcQryExchangeOrderActionField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcQryExchangeOrderActionField["ClientID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryExchangeOrderActionField["ExchangeID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcQryExchangeOrderActionField["TraderID"] = "string" +structDict['CThostFtdcQryExchangeOrderActionField'] = CThostFtdcQryExchangeOrderActionField + + +#鏌ヨ绠$悊鐢ㄦ埛 +CThostFtdcQrySuperUserField = {} +#鐢ㄦ埛浠g爜 +CThostFtdcQrySuperUserField["UserID"] = "string" +structDict['CThostFtdcQrySuperUserField'] = CThostFtdcQrySuperUserField + + +#鏌ヨ浜ゆ槗鎵 +CThostFtdcQryExchangeField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcQryExchangeField["ExchangeID"] = "string" +structDict['CThostFtdcQryExchangeField'] = CThostFtdcQryExchangeField + + +#鏌ヨ浜у搧 +CThostFtdcQryProductField = {} +#浜у搧浠g爜 +CThostFtdcQryProductField["ProductID"] = "string" +#浜у搧绫诲瀷 +CThostFtdcQryProductField["ProductClass"] = "string" +structDict['CThostFtdcQryProductField'] = CThostFtdcQryProductField + + +#鏌ヨ鍚堢害 +CThostFtdcQryInstrumentField = {} +#鍚堢害浠g爜 +CThostFtdcQryInstrumentField["InstrumentID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryInstrumentField["ExchangeID"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcQryInstrumentField["ExchangeInstID"] = "string" +#浜у搧浠g爜 +CThostFtdcQryInstrumentField["ProductID"] = "string" +structDict['CThostFtdcQryInstrumentField'] = CThostFtdcQryInstrumentField + + +#鏌ヨ琛屾儏 +CThostFtdcQryDepthMarketDataField = {} +#鍚堢害浠g爜 +CThostFtdcQryDepthMarketDataField["InstrumentID"] = "string" +structDict['CThostFtdcQryDepthMarketDataField'] = CThostFtdcQryDepthMarketDataField + + +#鏌ヨ缁忕邯鍏徃鐢ㄦ埛 +CThostFtdcQryBrokerUserField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryBrokerUserField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcQryBrokerUserField["UserID"] = "string" +structDict['CThostFtdcQryBrokerUserField'] = CThostFtdcQryBrokerUserField + + +#鏌ヨ缁忕邯鍏徃鐢ㄦ埛鏉冮檺 +CThostFtdcQryBrokerUserFunctionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryBrokerUserFunctionField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcQryBrokerUserFunctionField["UserID"] = "string" +structDict['CThostFtdcQryBrokerUserFunctionField'] = CThostFtdcQryBrokerUserFunctionField + + +#鏌ヨ浜ゆ槗鍛樻姤鐩樻満 +CThostFtdcQryTraderOfferField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcQryTraderOfferField["ExchangeID"] = "string" +#浼氬憳浠g爜 +CThostFtdcQryTraderOfferField["ParticipantID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcQryTraderOfferField["TraderID"] = "string" +structDict['CThostFtdcQryTraderOfferField'] = CThostFtdcQryTraderOfferField + + +#鏌ヨ鍑哄叆閲戞祦姘 +CThostFtdcQrySyncDepositField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQrySyncDepositField["BrokerID"] = "string" +#鍑哄叆閲戞祦姘村彿 +CThostFtdcQrySyncDepositField["DepositSeqNo"] = "string" +structDict['CThostFtdcQrySyncDepositField'] = CThostFtdcQrySyncDepositField + + +#鏌ヨ鎶曡祫鑰呯粨绠楃粨鏋 +CThostFtdcQrySettlementInfoField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQrySettlementInfoField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQrySettlementInfoField["InvestorID"] = "string" +#浜ゆ槗鏃 +CThostFtdcQrySettlementInfoField["TradingDay"] = "string" +structDict['CThostFtdcQrySettlementInfoField'] = CThostFtdcQrySettlementInfoField + + +#鏌ヨ浜ゆ槗鎵淇濊瘉閲戠巼 +CThostFtdcQryExchangeMarginRateField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryExchangeMarginRateField["BrokerID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryExchangeMarginRateField["InstrumentID"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcQryExchangeMarginRateField["HedgeFlag"] = "string" +structDict['CThostFtdcQryExchangeMarginRateField'] = CThostFtdcQryExchangeMarginRateField + + +#鏌ヨ浜ゆ槗鎵璋冩暣淇濊瘉閲戠巼 +CThostFtdcQryExchangeMarginRateAdjustField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryExchangeMarginRateAdjustField["BrokerID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryExchangeMarginRateAdjustField["InstrumentID"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcQryExchangeMarginRateAdjustField["HedgeFlag"] = "string" +structDict['CThostFtdcQryExchangeMarginRateAdjustField'] = CThostFtdcQryExchangeMarginRateAdjustField + + +#鏌ヨ姹囩巼 +CThostFtdcQryExchangeRateField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryExchangeRateField["BrokerID"] = "string" +#婧愬竵绉 +CThostFtdcQryExchangeRateField["FromCurrencyID"] = "string" +#鐩爣甯佺 +CThostFtdcQryExchangeRateField["ToCurrencyID"] = "string" +structDict['CThostFtdcQryExchangeRateField'] = CThostFtdcQryExchangeRateField + + +#鏌ヨ璐у竵璐ㄦ娂娴佹按 +CThostFtdcQrySyncFundMortgageField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQrySyncFundMortgageField["BrokerID"] = "string" +#璐у竵璐ㄦ娂娴佹按鍙 +CThostFtdcQrySyncFundMortgageField["MortgageSeqNo"] = "string" +structDict['CThostFtdcQrySyncFundMortgageField'] = CThostFtdcQrySyncFundMortgageField + + +#鏌ヨ鎶ュ崟 +CThostFtdcQryHisOrderField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryHisOrderField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryHisOrderField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryHisOrderField["InstrumentID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryHisOrderField["ExchangeID"] = "string" +#鎶ュ崟缂栧彿 +CThostFtdcQryHisOrderField["OrderSysID"] = "string" +#寮濮嬫椂闂 +CThostFtdcQryHisOrderField["InsertTimeStart"] = "string" +#缁撴潫鏃堕棿 +CThostFtdcQryHisOrderField["InsertTimeEnd"] = "string" +#浜ゆ槗鏃 +CThostFtdcQryHisOrderField["TradingDay"] = "string" +#缁撶畻缂栧彿 +CThostFtdcQryHisOrderField["SettlementID"] = "int" +structDict['CThostFtdcQryHisOrderField'] = CThostFtdcQryHisOrderField + + +#褰撳墠鏈熸潈鍚堢害鏈灏忎繚璇侀噾 +CThostFtdcOptionInstrMiniMarginField = {} +#鍚堢害浠g爜 +CThostFtdcOptionInstrMiniMarginField["InstrumentID"] = "string" +#鎶曡祫鑰呰寖鍥 +CThostFtdcOptionInstrMiniMarginField["InvestorRange"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcOptionInstrMiniMarginField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcOptionInstrMiniMarginField["InvestorID"] = "string" +#鍗曚綅锛堟墜锛夋湡鏉冨悎绾︽渶灏忎繚璇侀噾 +CThostFtdcOptionInstrMiniMarginField["MinMargin"] = "float" +#鍙栧兼柟寮 +CThostFtdcOptionInstrMiniMarginField["ValueMethod"] = "string" +#鏄惁璺熼殢浜ゆ槗鎵鏀跺彇 +CThostFtdcOptionInstrMiniMarginField["IsRelative"] = "int" +structDict['CThostFtdcOptionInstrMiniMarginField'] = CThostFtdcOptionInstrMiniMarginField + + +#褰撳墠鏈熸潈鍚堢害淇濊瘉閲戣皟鏁寸郴鏁 +CThostFtdcOptionInstrMarginAdjustField = {} +#鍚堢害浠g爜 +CThostFtdcOptionInstrMarginAdjustField["InstrumentID"] = "string" +#鎶曡祫鑰呰寖鍥 +CThostFtdcOptionInstrMarginAdjustField["InvestorRange"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcOptionInstrMarginAdjustField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcOptionInstrMarginAdjustField["InvestorID"] = "string" +#鎶曟満绌哄ご淇濊瘉閲戣皟鏁寸郴鏁 +CThostFtdcOptionInstrMarginAdjustField["SShortMarginRatioByMoney"] = "float" +#鎶曟満绌哄ご淇濊瘉閲戣皟鏁寸郴鏁 +CThostFtdcOptionInstrMarginAdjustField["SShortMarginRatioByVolume"] = "float" +#淇濆肩┖澶翠繚璇侀噾璋冩暣绯绘暟 +CThostFtdcOptionInstrMarginAdjustField["HShortMarginRatioByMoney"] = "float" +#淇濆肩┖澶翠繚璇侀噾璋冩暣绯绘暟 +CThostFtdcOptionInstrMarginAdjustField["HShortMarginRatioByVolume"] = "float" +#濂楀埄绌哄ご淇濊瘉閲戣皟鏁寸郴鏁 +CThostFtdcOptionInstrMarginAdjustField["AShortMarginRatioByMoney"] = "float" +#濂楀埄绌哄ご淇濊瘉閲戣皟鏁寸郴鏁 +CThostFtdcOptionInstrMarginAdjustField["AShortMarginRatioByVolume"] = "float" +#鏄惁璺熼殢浜ゆ槗鎵鏀跺彇 +CThostFtdcOptionInstrMarginAdjustField["IsRelative"] = "int" +structDict['CThostFtdcOptionInstrMarginAdjustField'] = CThostFtdcOptionInstrMarginAdjustField + + +#褰撳墠鏈熸潈鍚堢害鎵嬬画璐圭殑璇︾粏鍐呭 +CThostFtdcOptionInstrCommRateField = {} +#鍚堢害浠g爜 +CThostFtdcOptionInstrCommRateField["InstrumentID"] = "string" +#鎶曡祫鑰呰寖鍥 +CThostFtdcOptionInstrCommRateField["InvestorRange"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcOptionInstrCommRateField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcOptionInstrCommRateField["InvestorID"] = "string" +#寮浠撴墜缁垂鐜 +CThostFtdcOptionInstrCommRateField["OpenRatioByMoney"] = "float" +#寮浠撴墜缁垂 +CThostFtdcOptionInstrCommRateField["OpenRatioByVolume"] = "float" +#骞充粨鎵嬬画璐圭巼 +CThostFtdcOptionInstrCommRateField["CloseRatioByMoney"] = "float" +#骞充粨鎵嬬画璐 +CThostFtdcOptionInstrCommRateField["CloseRatioByVolume"] = "float" +#骞充粖鎵嬬画璐圭巼 +CThostFtdcOptionInstrCommRateField["CloseTodayRatioByMoney"] = "float" +#骞充粖鎵嬬画璐 +CThostFtdcOptionInstrCommRateField["CloseTodayRatioByVolume"] = "float" +#鎵ц鎵嬬画璐圭巼 +CThostFtdcOptionInstrCommRateField["StrikeRatioByMoney"] = "float" +#鎵ц鎵嬬画璐 +CThostFtdcOptionInstrCommRateField["StrikeRatioByVolume"] = "float" +structDict['CThostFtdcOptionInstrCommRateField'] = CThostFtdcOptionInstrCommRateField + + +#鏈熸潈浜ゆ槗鎴愭湰 +CThostFtdcOptionInstrTradeCostField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcOptionInstrTradeCostField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcOptionInstrTradeCostField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcOptionInstrTradeCostField["InstrumentID"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcOptionInstrTradeCostField["HedgeFlag"] = "string" +#鏈熸潈鍚堢害淇濊瘉閲戜笉鍙橀儴鍒 +CThostFtdcOptionInstrTradeCostField["FixedMargin"] = "float" +#鏈熸潈鍚堢害鏈灏忎繚璇侀噾 +CThostFtdcOptionInstrTradeCostField["MiniMargin"] = "float" +#鏈熸潈鍚堢害鏉冨埄閲 +CThostFtdcOptionInstrTradeCostField["Royalty"] = "float" +#浜ゆ槗鎵鏈熸潈鍚堢害淇濊瘉閲戜笉鍙橀儴鍒 +CThostFtdcOptionInstrTradeCostField["ExchFixedMargin"] = "float" +#浜ゆ槗鎵鏈熸潈鍚堢害鏈灏忎繚璇侀噾 +CThostFtdcOptionInstrTradeCostField["ExchMiniMargin"] = "float" +structDict['CThostFtdcOptionInstrTradeCostField'] = CThostFtdcOptionInstrTradeCostField + + +#鏈熸潈浜ゆ槗鎴愭湰鏌ヨ +CThostFtdcQryOptionInstrTradeCostField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryOptionInstrTradeCostField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryOptionInstrTradeCostField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryOptionInstrTradeCostField["InstrumentID"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcQryOptionInstrTradeCostField["HedgeFlag"] = "string" +#鏈熸潈鍚堢害鎶ヤ环 +CThostFtdcQryOptionInstrTradeCostField["InputPrice"] = "float" +#鏍囩殑浠锋牸,濉0鍒欑敤鏄ㄧ粨绠椾环 +CThostFtdcQryOptionInstrTradeCostField["UnderlyingPrice"] = "float" +structDict['CThostFtdcQryOptionInstrTradeCostField'] = CThostFtdcQryOptionInstrTradeCostField + + +#鏈熸潈鎵嬬画璐圭巼鏌ヨ +CThostFtdcQryOptionInstrCommRateField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryOptionInstrCommRateField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryOptionInstrCommRateField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryOptionInstrCommRateField["InstrumentID"] = "string" +structDict['CThostFtdcQryOptionInstrCommRateField'] = CThostFtdcQryOptionInstrCommRateField + + +#鑲℃寚鐜拌揣鎸囨暟 +CThostFtdcIndexPriceField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcIndexPriceField["BrokerID"] = "string" +#鍚堢害浠g爜 +CThostFtdcIndexPriceField["InstrumentID"] = "string" +#鎸囨暟鐜拌揣鏀剁洏浠 +CThostFtdcIndexPriceField["ClosePrice"] = "float" +structDict['CThostFtdcIndexPriceField'] = CThostFtdcIndexPriceField + + +#杈撳叆鐨勬墽琛屽鍛 +CThostFtdcInputExecOrderField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcInputExecOrderField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcInputExecOrderField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcInputExecOrderField["InstrumentID"] = "string" +#鎵ц瀹e憡寮曠敤 +CThostFtdcInputExecOrderField["ExecOrderRef"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcInputExecOrderField["UserID"] = "string" +#鏁伴噺 +CThostFtdcInputExecOrderField["Volume"] = "int" +#璇锋眰缂栧彿 +CThostFtdcInputExecOrderField["RequestID"] = "int" +#涓氬姟鍗曞厓 +CThostFtdcInputExecOrderField["BusinessUnit"] = "string" +#寮骞虫爣蹇 +CThostFtdcInputExecOrderField["OffsetFlag"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcInputExecOrderField["HedgeFlag"] = "string" +#鎵ц绫诲瀷 +CThostFtdcInputExecOrderField["ActionType"] = "string" +#淇濈暀澶村鐢宠鐨勬寔浠撴柟鍚 +CThostFtdcInputExecOrderField["PosiDirection"] = "string" +#鏈熸潈琛屾潈鍚庢槸鍚︿繚鐣欐湡璐уご瀵哥殑鏍囪 +CThostFtdcInputExecOrderField["ReservePositionFlag"] = "string" +#鏈熸潈琛屾潈鍚庣敓鎴愮殑澶村鏄惁鑷姩骞充粨 +CThostFtdcInputExecOrderField["CloseFlag"] = "string" +structDict['CThostFtdcInputExecOrderField'] = CThostFtdcInputExecOrderField + + +#杈撳叆鎵ц瀹e憡鎿嶄綔 +CThostFtdcInputExecOrderActionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcInputExecOrderActionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcInputExecOrderActionField["InvestorID"] = "string" +#鎵ц瀹e憡鎿嶄綔寮曠敤 +CThostFtdcInputExecOrderActionField["ExecOrderActionRef"] = "int" +#鎵ц瀹e憡寮曠敤 +CThostFtdcInputExecOrderActionField["ExecOrderRef"] = "string" +#璇锋眰缂栧彿 +CThostFtdcInputExecOrderActionField["RequestID"] = "int" +#鍓嶇疆缂栧彿 +CThostFtdcInputExecOrderActionField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcInputExecOrderActionField["SessionID"] = "int" +#浜ゆ槗鎵浠g爜 +CThostFtdcInputExecOrderActionField["ExchangeID"] = "string" +#鎵ц瀹e憡鎿嶄綔缂栧彿 +CThostFtdcInputExecOrderActionField["ExecOrderSysID"] = "string" +#鎿嶄綔鏍囧織 +CThostFtdcInputExecOrderActionField["ActionFlag"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcInputExecOrderActionField["UserID"] = "string" +#鍚堢害浠g爜 +CThostFtdcInputExecOrderActionField["InstrumentID"] = "string" +structDict['CThostFtdcInputExecOrderActionField'] = CThostFtdcInputExecOrderActionField + + +#鎵ц瀹e憡 +CThostFtdcExecOrderField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcExecOrderField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcExecOrderField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcExecOrderField["InstrumentID"] = "string" +#鎵ц瀹e憡寮曠敤 +CThostFtdcExecOrderField["ExecOrderRef"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcExecOrderField["UserID"] = "string" +#鏁伴噺 +CThostFtdcExecOrderField["Volume"] = "int" +#璇锋眰缂栧彿 +CThostFtdcExecOrderField["RequestID"] = "int" +#涓氬姟鍗曞厓 +CThostFtdcExecOrderField["BusinessUnit"] = "string" +#寮骞虫爣蹇 +CThostFtdcExecOrderField["OffsetFlag"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcExecOrderField["HedgeFlag"] = "string" +#鎵ц绫诲瀷 +CThostFtdcExecOrderField["ActionType"] = "string" +#淇濈暀澶村鐢宠鐨勬寔浠撴柟鍚 +CThostFtdcExecOrderField["PosiDirection"] = "string" +#鏈熸潈琛屾潈鍚庢槸鍚︿繚鐣欐湡璐уご瀵哥殑鏍囪 +CThostFtdcExecOrderField["ReservePositionFlag"] = "string" +#鏈熸潈琛屾潈鍚庣敓鎴愮殑澶村鏄惁鑷姩骞充粨 +CThostFtdcExecOrderField["CloseFlag"] = "string" +#鏈湴鎵ц瀹e憡缂栧彿 +CThostFtdcExecOrderField["ExecOrderLocalID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcExecOrderField["ExchangeID"] = "string" +#浼氬憳浠g爜 +CThostFtdcExecOrderField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcExecOrderField["ClientID"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcExecOrderField["ExchangeInstID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcExecOrderField["TraderID"] = "string" +#瀹夎缂栧彿 +CThostFtdcExecOrderField["InstallID"] = "int" +#鎵ц瀹e憡鎻愪氦鐘舵 +CThostFtdcExecOrderField["OrderSubmitStatus"] = "string" +#鎶ュ崟鎻愮ず搴忓彿 +CThostFtdcExecOrderField["NotifySequence"] = "int" +#浜ゆ槗鏃 +CThostFtdcExecOrderField["TradingDay"] = "string" +#缁撶畻缂栧彿 +CThostFtdcExecOrderField["SettlementID"] = "int" +#鎵ц瀹e憡缂栧彿 +CThostFtdcExecOrderField["ExecOrderSysID"] = "string" +#鎶ュ崟鏃ユ湡 +CThostFtdcExecOrderField["InsertDate"] = "string" +#鎻掑叆鏃堕棿 +CThostFtdcExecOrderField["InsertTime"] = "string" +#鎾ら攢鏃堕棿 +CThostFtdcExecOrderField["CancelTime"] = "string" +#鎵ц缁撴灉 +CThostFtdcExecOrderField["ExecResult"] = "string" +#缁撶畻浼氬憳缂栧彿 +CThostFtdcExecOrderField["ClearingPartID"] = "string" +#搴忓彿 +CThostFtdcExecOrderField["SequenceNo"] = "int" +#鍓嶇疆缂栧彿 +CThostFtdcExecOrderField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcExecOrderField["SessionID"] = "int" +#鐢ㄦ埛绔骇鍝佷俊鎭 +CThostFtdcExecOrderField["UserProductInfo"] = "string" +#鐘舵佷俊鎭 +CThostFtdcExecOrderField["StatusMsg"] = "string" +#鎿嶄綔鐢ㄦ埛浠g爜 +CThostFtdcExecOrderField["ActiveUserID"] = "string" +#缁忕邯鍏徃鎶ュ崟缂栧彿 +CThostFtdcExecOrderField["BrokerExecOrderSeq"] = "int" +structDict['CThostFtdcExecOrderField'] = CThostFtdcExecOrderField + + +#鎵ц瀹e憡鎿嶄綔 +CThostFtdcExecOrderActionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcExecOrderActionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcExecOrderActionField["InvestorID"] = "string" +#鎵ц瀹e憡鎿嶄綔寮曠敤 +CThostFtdcExecOrderActionField["ExecOrderActionRef"] = "int" +#鎵ц瀹e憡寮曠敤 +CThostFtdcExecOrderActionField["ExecOrderRef"] = "string" +#璇锋眰缂栧彿 +CThostFtdcExecOrderActionField["RequestID"] = "int" +#鍓嶇疆缂栧彿 +CThostFtdcExecOrderActionField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcExecOrderActionField["SessionID"] = "int" +#浜ゆ槗鎵浠g爜 +CThostFtdcExecOrderActionField["ExchangeID"] = "string" +#鎵ц瀹e憡鎿嶄綔缂栧彿 +CThostFtdcExecOrderActionField["ExecOrderSysID"] = "string" +#鎿嶄綔鏍囧織 +CThostFtdcExecOrderActionField["ActionFlag"] = "string" +#鎿嶄綔鏃ユ湡 +CThostFtdcExecOrderActionField["ActionDate"] = "string" +#鎿嶄綔鏃堕棿 +CThostFtdcExecOrderActionField["ActionTime"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcExecOrderActionField["TraderID"] = "string" +#瀹夎缂栧彿 +CThostFtdcExecOrderActionField["InstallID"] = "int" +#鏈湴鎵ц瀹e憡缂栧彿 +CThostFtdcExecOrderActionField["ExecOrderLocalID"] = "string" +#鎿嶄綔鏈湴缂栧彿 +CThostFtdcExecOrderActionField["ActionLocalID"] = "string" +#浼氬憳浠g爜 +CThostFtdcExecOrderActionField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcExecOrderActionField["ClientID"] = "string" +#涓氬姟鍗曞厓 +CThostFtdcExecOrderActionField["BusinessUnit"] = "string" +#鎶ュ崟鎿嶄綔鐘舵 +CThostFtdcExecOrderActionField["OrderActionStatus"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcExecOrderActionField["UserID"] = "string" +#鎵ц绫诲瀷 +CThostFtdcExecOrderActionField["ActionType"] = "string" +#鐘舵佷俊鎭 +CThostFtdcExecOrderActionField["StatusMsg"] = "string" +#鍚堢害浠g爜 +CThostFtdcExecOrderActionField["InstrumentID"] = "string" +structDict['CThostFtdcExecOrderActionField'] = CThostFtdcExecOrderActionField + + +#鎵ц瀹e憡鏌ヨ +CThostFtdcQryExecOrderField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryExecOrderField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryExecOrderField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryExecOrderField["InstrumentID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryExecOrderField["ExchangeID"] = "string" +#鎵ц瀹e憡缂栧彿 +CThostFtdcQryExecOrderField["ExecOrderSysID"] = "string" +#寮濮嬫椂闂 +CThostFtdcQryExecOrderField["InsertTimeStart"] = "string" +#缁撴潫鏃堕棿 +CThostFtdcQryExecOrderField["InsertTimeEnd"] = "string" +structDict['CThostFtdcQryExecOrderField'] = CThostFtdcQryExecOrderField + + +#浜ゆ槗鎵鎵ц瀹e憡淇℃伅 +CThostFtdcExchangeExecOrderField = {} +#鏁伴噺 +CThostFtdcExchangeExecOrderField["Volume"] = "int" +#璇锋眰缂栧彿 +CThostFtdcExchangeExecOrderField["RequestID"] = "int" +#涓氬姟鍗曞厓 +CThostFtdcExchangeExecOrderField["BusinessUnit"] = "string" +#寮骞虫爣蹇 +CThostFtdcExchangeExecOrderField["OffsetFlag"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcExchangeExecOrderField["HedgeFlag"] = "string" +#鎵ц绫诲瀷 +CThostFtdcExchangeExecOrderField["ActionType"] = "string" +#淇濈暀澶村鐢宠鐨勬寔浠撴柟鍚 +CThostFtdcExchangeExecOrderField["PosiDirection"] = "string" +#鏈熸潈琛屾潈鍚庢槸鍚︿繚鐣欐湡璐уご瀵哥殑鏍囪 +CThostFtdcExchangeExecOrderField["ReservePositionFlag"] = "string" +#鏈熸潈琛屾潈鍚庣敓鎴愮殑澶村鏄惁鑷姩骞充粨 +CThostFtdcExchangeExecOrderField["CloseFlag"] = "string" +#鏈湴鎵ц瀹e憡缂栧彿 +CThostFtdcExchangeExecOrderField["ExecOrderLocalID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcExchangeExecOrderField["ExchangeID"] = "string" +#浼氬憳浠g爜 +CThostFtdcExchangeExecOrderField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcExchangeExecOrderField["ClientID"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcExchangeExecOrderField["ExchangeInstID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcExchangeExecOrderField["TraderID"] = "string" +#瀹夎缂栧彿 +CThostFtdcExchangeExecOrderField["InstallID"] = "int" +#鎵ц瀹e憡鎻愪氦鐘舵 +CThostFtdcExchangeExecOrderField["OrderSubmitStatus"] = "string" +#鎶ュ崟鎻愮ず搴忓彿 +CThostFtdcExchangeExecOrderField["NotifySequence"] = "int" +#浜ゆ槗鏃 +CThostFtdcExchangeExecOrderField["TradingDay"] = "string" +#缁撶畻缂栧彿 +CThostFtdcExchangeExecOrderField["SettlementID"] = "int" +#鎵ц瀹e憡缂栧彿 +CThostFtdcExchangeExecOrderField["ExecOrderSysID"] = "string" +#鎶ュ崟鏃ユ湡 +CThostFtdcExchangeExecOrderField["InsertDate"] = "string" +#鎻掑叆鏃堕棿 +CThostFtdcExchangeExecOrderField["InsertTime"] = "string" +#鎾ら攢鏃堕棿 +CThostFtdcExchangeExecOrderField["CancelTime"] = "string" +#鎵ц缁撴灉 +CThostFtdcExchangeExecOrderField["ExecResult"] = "string" +#缁撶畻浼氬憳缂栧彿 +CThostFtdcExchangeExecOrderField["ClearingPartID"] = "string" +#搴忓彿 +CThostFtdcExchangeExecOrderField["SequenceNo"] = "int" +structDict['CThostFtdcExchangeExecOrderField'] = CThostFtdcExchangeExecOrderField + + +#浜ゆ槗鎵鎵ц瀹e憡鏌ヨ +CThostFtdcQryExchangeExecOrderField = {} +#浼氬憳浠g爜 +CThostFtdcQryExchangeExecOrderField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcQryExchangeExecOrderField["ClientID"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcQryExchangeExecOrderField["ExchangeInstID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryExchangeExecOrderField["ExchangeID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcQryExchangeExecOrderField["TraderID"] = "string" +structDict['CThostFtdcQryExchangeExecOrderField'] = CThostFtdcQryExchangeExecOrderField + + +#鎵ц瀹e憡鎿嶄綔鏌ヨ +CThostFtdcQryExecOrderActionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryExecOrderActionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryExecOrderActionField["InvestorID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryExecOrderActionField["ExchangeID"] = "string" +structDict['CThostFtdcQryExecOrderActionField'] = CThostFtdcQryExecOrderActionField + + +#浜ゆ槗鎵鎵ц瀹e憡鎿嶄綔 +CThostFtdcExchangeExecOrderActionField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcExchangeExecOrderActionField["ExchangeID"] = "string" +#鎵ц瀹e憡鎿嶄綔缂栧彿 +CThostFtdcExchangeExecOrderActionField["ExecOrderSysID"] = "string" +#鎿嶄綔鏍囧織 +CThostFtdcExchangeExecOrderActionField["ActionFlag"] = "string" +#鎿嶄綔鏃ユ湡 +CThostFtdcExchangeExecOrderActionField["ActionDate"] = "string" +#鎿嶄綔鏃堕棿 +CThostFtdcExchangeExecOrderActionField["ActionTime"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcExchangeExecOrderActionField["TraderID"] = "string" +#瀹夎缂栧彿 +CThostFtdcExchangeExecOrderActionField["InstallID"] = "int" +#鏈湴鎵ц瀹e憡缂栧彿 +CThostFtdcExchangeExecOrderActionField["ExecOrderLocalID"] = "string" +#鎿嶄綔鏈湴缂栧彿 +CThostFtdcExchangeExecOrderActionField["ActionLocalID"] = "string" +#浼氬憳浠g爜 +CThostFtdcExchangeExecOrderActionField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcExchangeExecOrderActionField["ClientID"] = "string" +#涓氬姟鍗曞厓 +CThostFtdcExchangeExecOrderActionField["BusinessUnit"] = "string" +#鎶ュ崟鎿嶄綔鐘舵 +CThostFtdcExchangeExecOrderActionField["OrderActionStatus"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcExchangeExecOrderActionField["UserID"] = "string" +#鎵ц绫诲瀷 +CThostFtdcExchangeExecOrderActionField["ActionType"] = "string" +structDict['CThostFtdcExchangeExecOrderActionField'] = CThostFtdcExchangeExecOrderActionField + + +#浜ゆ槗鎵鎵ц瀹e憡鎿嶄綔鏌ヨ +CThostFtdcQryExchangeExecOrderActionField = {} +#浼氬憳浠g爜 +CThostFtdcQryExchangeExecOrderActionField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcQryExchangeExecOrderActionField["ClientID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryExchangeExecOrderActionField["ExchangeID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcQryExchangeExecOrderActionField["TraderID"] = "string" +structDict['CThostFtdcQryExchangeExecOrderActionField'] = CThostFtdcQryExchangeExecOrderActionField + + +#閿欒鎵ц瀹e憡 +CThostFtdcErrExecOrderField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcErrExecOrderField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcErrExecOrderField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcErrExecOrderField["InstrumentID"] = "string" +#鎵ц瀹e憡寮曠敤 +CThostFtdcErrExecOrderField["ExecOrderRef"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcErrExecOrderField["UserID"] = "string" +#鏁伴噺 +CThostFtdcErrExecOrderField["Volume"] = "int" +#璇锋眰缂栧彿 +CThostFtdcErrExecOrderField["RequestID"] = "int" +#涓氬姟鍗曞厓 +CThostFtdcErrExecOrderField["BusinessUnit"] = "string" +#寮骞虫爣蹇 +CThostFtdcErrExecOrderField["OffsetFlag"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcErrExecOrderField["HedgeFlag"] = "string" +#鎵ц绫诲瀷 +CThostFtdcErrExecOrderField["ActionType"] = "string" +#淇濈暀澶村鐢宠鐨勬寔浠撴柟鍚 +CThostFtdcErrExecOrderField["PosiDirection"] = "string" +#鏈熸潈琛屾潈鍚庢槸鍚︿繚鐣欐湡璐уご瀵哥殑鏍囪 +CThostFtdcErrExecOrderField["ReservePositionFlag"] = "string" +#鏈熸潈琛屾潈鍚庣敓鎴愮殑澶村鏄惁鑷姩骞充粨 +CThostFtdcErrExecOrderField["CloseFlag"] = "string" +#閿欒浠g爜 +CThostFtdcErrExecOrderField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcErrExecOrderField["ErrorMsg"] = "string" +structDict['CThostFtdcErrExecOrderField'] = CThostFtdcErrExecOrderField + + +#鏌ヨ閿欒鎵ц瀹e憡 +CThostFtdcQryErrExecOrderField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryErrExecOrderField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryErrExecOrderField["InvestorID"] = "string" +structDict['CThostFtdcQryErrExecOrderField'] = CThostFtdcQryErrExecOrderField + + +#閿欒鎵ц瀹e憡鎿嶄綔 +CThostFtdcErrExecOrderActionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcErrExecOrderActionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcErrExecOrderActionField["InvestorID"] = "string" +#鎵ц瀹e憡鎿嶄綔寮曠敤 +CThostFtdcErrExecOrderActionField["ExecOrderActionRef"] = "int" +#鎵ц瀹e憡寮曠敤 +CThostFtdcErrExecOrderActionField["ExecOrderRef"] = "string" +#璇锋眰缂栧彿 +CThostFtdcErrExecOrderActionField["RequestID"] = "int" +#鍓嶇疆缂栧彿 +CThostFtdcErrExecOrderActionField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcErrExecOrderActionField["SessionID"] = "int" +#浜ゆ槗鎵浠g爜 +CThostFtdcErrExecOrderActionField["ExchangeID"] = "string" +#鎵ц瀹e憡鎿嶄綔缂栧彿 +CThostFtdcErrExecOrderActionField["ExecOrderSysID"] = "string" +#鎿嶄綔鏍囧織 +CThostFtdcErrExecOrderActionField["ActionFlag"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcErrExecOrderActionField["UserID"] = "string" +#鍚堢害浠g爜 +CThostFtdcErrExecOrderActionField["InstrumentID"] = "string" +#閿欒浠g爜 +CThostFtdcErrExecOrderActionField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcErrExecOrderActionField["ErrorMsg"] = "string" +structDict['CThostFtdcErrExecOrderActionField'] = CThostFtdcErrExecOrderActionField + + +#鏌ヨ閿欒鎵ц瀹e憡鎿嶄綔 +CThostFtdcQryErrExecOrderActionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryErrExecOrderActionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryErrExecOrderActionField["InvestorID"] = "string" +structDict['CThostFtdcQryErrExecOrderActionField'] = CThostFtdcQryErrExecOrderActionField + + +#鎶曡祫鑰呮湡鏉冨悎绾︿氦鏄撴潈闄 +CThostFtdcOptionInstrTradingRightField = {} +#鍚堢害浠g爜 +CThostFtdcOptionInstrTradingRightField["InstrumentID"] = "string" +#鎶曡祫鑰呰寖鍥 +CThostFtdcOptionInstrTradingRightField["InvestorRange"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcOptionInstrTradingRightField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcOptionInstrTradingRightField["InvestorID"] = "string" +#涔板崠鏂瑰悜 +CThostFtdcOptionInstrTradingRightField["Direction"] = "string" +#浜ゆ槗鏉冮檺 +CThostFtdcOptionInstrTradingRightField["TradingRight"] = "string" +structDict['CThostFtdcOptionInstrTradingRightField'] = CThostFtdcOptionInstrTradingRightField + + +#鏌ヨ鏈熸潈鍚堢害浜ゆ槗鏉冮檺 +CThostFtdcQryOptionInstrTradingRightField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryOptionInstrTradingRightField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryOptionInstrTradingRightField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryOptionInstrTradingRightField["InstrumentID"] = "string" +#涔板崠鏂瑰悜 +CThostFtdcQryOptionInstrTradingRightField["Direction"] = "string" +structDict['CThostFtdcQryOptionInstrTradingRightField'] = CThostFtdcQryOptionInstrTradingRightField + + +#杈撳叆鐨勮浠 +CThostFtdcInputForQuoteField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcInputForQuoteField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcInputForQuoteField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcInputForQuoteField["InstrumentID"] = "string" +#璇环寮曠敤 +CThostFtdcInputForQuoteField["ForQuoteRef"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcInputForQuoteField["UserID"] = "string" +structDict['CThostFtdcInputForQuoteField'] = CThostFtdcInputForQuoteField + + +#璇环 +CThostFtdcForQuoteField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcForQuoteField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcForQuoteField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcForQuoteField["InstrumentID"] = "string" +#璇环寮曠敤 +CThostFtdcForQuoteField["ForQuoteRef"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcForQuoteField["UserID"] = "string" +#鏈湴璇环缂栧彿 +CThostFtdcForQuoteField["ForQuoteLocalID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcForQuoteField["ExchangeID"] = "string" +#浼氬憳浠g爜 +CThostFtdcForQuoteField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcForQuoteField["ClientID"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcForQuoteField["ExchangeInstID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcForQuoteField["TraderID"] = "string" +#瀹夎缂栧彿 +CThostFtdcForQuoteField["InstallID"] = "int" +#鎶ュ崟鏃ユ湡 +CThostFtdcForQuoteField["InsertDate"] = "string" +#鎻掑叆鏃堕棿 +CThostFtdcForQuoteField["InsertTime"] = "string" +#璇环鐘舵 +CThostFtdcForQuoteField["ForQuoteStatus"] = "string" +#鍓嶇疆缂栧彿 +CThostFtdcForQuoteField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcForQuoteField["SessionID"] = "int" +#鐘舵佷俊鎭 +CThostFtdcForQuoteField["StatusMsg"] = "string" +#鎿嶄綔鐢ㄦ埛浠g爜 +CThostFtdcForQuoteField["ActiveUserID"] = "string" +#缁忕邯鍏徃璇环缂栧彿 +CThostFtdcForQuoteField["BrokerForQutoSeq"] = "int" +structDict['CThostFtdcForQuoteField'] = CThostFtdcForQuoteField + + +#璇环鏌ヨ +CThostFtdcQryForQuoteField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryForQuoteField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryForQuoteField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryForQuoteField["InstrumentID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryForQuoteField["ExchangeID"] = "string" +#寮濮嬫椂闂 +CThostFtdcQryForQuoteField["InsertTimeStart"] = "string" +#缁撴潫鏃堕棿 +CThostFtdcQryForQuoteField["InsertTimeEnd"] = "string" +structDict['CThostFtdcQryForQuoteField'] = CThostFtdcQryForQuoteField + + +#浜ゆ槗鎵璇环淇℃伅 +CThostFtdcExchangeForQuoteField = {} +#鏈湴璇环缂栧彿 +CThostFtdcExchangeForQuoteField["ForQuoteLocalID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcExchangeForQuoteField["ExchangeID"] = "string" +#浼氬憳浠g爜 +CThostFtdcExchangeForQuoteField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcExchangeForQuoteField["ClientID"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcExchangeForQuoteField["ExchangeInstID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcExchangeForQuoteField["TraderID"] = "string" +#瀹夎缂栧彿 +CThostFtdcExchangeForQuoteField["InstallID"] = "int" +#鎶ュ崟鏃ユ湡 +CThostFtdcExchangeForQuoteField["InsertDate"] = "string" +#鎻掑叆鏃堕棿 +CThostFtdcExchangeForQuoteField["InsertTime"] = "string" +#璇环鐘舵 +CThostFtdcExchangeForQuoteField["ForQuoteStatus"] = "string" +structDict['CThostFtdcExchangeForQuoteField'] = CThostFtdcExchangeForQuoteField + + +#浜ゆ槗鎵璇环鏌ヨ +CThostFtdcQryExchangeForQuoteField = {} +#浼氬憳浠g爜 +CThostFtdcQryExchangeForQuoteField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcQryExchangeForQuoteField["ClientID"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcQryExchangeForQuoteField["ExchangeInstID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryExchangeForQuoteField["ExchangeID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcQryExchangeForQuoteField["TraderID"] = "string" +structDict['CThostFtdcQryExchangeForQuoteField'] = CThostFtdcQryExchangeForQuoteField + + +#杈撳叆鐨勬姤浠 +CThostFtdcInputQuoteField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcInputQuoteField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcInputQuoteField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcInputQuoteField["InstrumentID"] = "string" +#鎶ヤ环寮曠敤 +CThostFtdcInputQuoteField["QuoteRef"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcInputQuoteField["UserID"] = "string" +#鍗栦环鏍 +CThostFtdcInputQuoteField["AskPrice"] = "float" +#涔颁环鏍 +CThostFtdcInputQuoteField["BidPrice"] = "float" +#鍗栨暟閲 +CThostFtdcInputQuoteField["AskVolume"] = "int" +#涔版暟閲 +CThostFtdcInputQuoteField["BidVolume"] = "int" +#璇锋眰缂栧彿 +CThostFtdcInputQuoteField["RequestID"] = "int" +#涓氬姟鍗曞厓 +CThostFtdcInputQuoteField["BusinessUnit"] = "string" +#鍗栧紑骞虫爣蹇 +CThostFtdcInputQuoteField["AskOffsetFlag"] = "string" +#涔板紑骞虫爣蹇 +CThostFtdcInputQuoteField["BidOffsetFlag"] = "string" +#鍗栨姇鏈哄淇濇爣蹇 +CThostFtdcInputQuoteField["AskHedgeFlag"] = "string" +#涔版姇鏈哄淇濇爣蹇 +CThostFtdcInputQuoteField["BidHedgeFlag"] = "string" +structDict['CThostFtdcInputQuoteField'] = CThostFtdcInputQuoteField + + +#杈撳叆鎶ヤ环鎿嶄綔 +CThostFtdcInputQuoteActionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcInputQuoteActionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcInputQuoteActionField["InvestorID"] = "string" +#鎶ヤ环鎿嶄綔寮曠敤 +CThostFtdcInputQuoteActionField["QuoteActionRef"] = "int" +#鎶ヤ环寮曠敤 +CThostFtdcInputQuoteActionField["QuoteRef"] = "string" +#璇锋眰缂栧彿 +CThostFtdcInputQuoteActionField["RequestID"] = "int" +#鍓嶇疆缂栧彿 +CThostFtdcInputQuoteActionField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcInputQuoteActionField["SessionID"] = "int" +#浜ゆ槗鎵浠g爜 +CThostFtdcInputQuoteActionField["ExchangeID"] = "string" +#鎶ヤ环鎿嶄綔缂栧彿 +CThostFtdcInputQuoteActionField["QuoteSysID"] = "string" +#鎿嶄綔鏍囧織 +CThostFtdcInputQuoteActionField["ActionFlag"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcInputQuoteActionField["UserID"] = "string" +#鍚堢害浠g爜 +CThostFtdcInputQuoteActionField["InstrumentID"] = "string" +structDict['CThostFtdcInputQuoteActionField'] = CThostFtdcInputQuoteActionField + + +#鎶ヤ环 +CThostFtdcQuoteField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQuoteField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQuoteField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQuoteField["InstrumentID"] = "string" +#鎶ヤ环寮曠敤 +CThostFtdcQuoteField["QuoteRef"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcQuoteField["UserID"] = "string" +#鍗栦环鏍 +CThostFtdcQuoteField["AskPrice"] = "float" +#涔颁环鏍 +CThostFtdcQuoteField["BidPrice"] = "float" +#鍗栨暟閲 +CThostFtdcQuoteField["AskVolume"] = "int" +#涔版暟閲 +CThostFtdcQuoteField["BidVolume"] = "int" +#璇锋眰缂栧彿 +CThostFtdcQuoteField["RequestID"] = "int" +#涓氬姟鍗曞厓 +CThostFtdcQuoteField["BusinessUnit"] = "string" +#鍗栧紑骞虫爣蹇 +CThostFtdcQuoteField["AskOffsetFlag"] = "string" +#涔板紑骞虫爣蹇 +CThostFtdcQuoteField["BidOffsetFlag"] = "string" +#鍗栨姇鏈哄淇濇爣蹇 +CThostFtdcQuoteField["AskHedgeFlag"] = "string" +#涔版姇鏈哄淇濇爣蹇 +CThostFtdcQuoteField["BidHedgeFlag"] = "string" +#鏈湴鎶ヤ环缂栧彿 +CThostFtdcQuoteField["QuoteLocalID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQuoteField["ExchangeID"] = "string" +#浼氬憳浠g爜 +CThostFtdcQuoteField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcQuoteField["ClientID"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcQuoteField["ExchangeInstID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcQuoteField["TraderID"] = "string" +#瀹夎缂栧彿 +CThostFtdcQuoteField["InstallID"] = "int" +#鎶ヤ环鎻愮ず搴忓彿 +CThostFtdcQuoteField["NotifySequence"] = "int" +#鎶ヤ环鎻愪氦鐘舵 +CThostFtdcQuoteField["OrderSubmitStatus"] = "string" +#浜ゆ槗鏃 +CThostFtdcQuoteField["TradingDay"] = "string" +#缁撶畻缂栧彿 +CThostFtdcQuoteField["SettlementID"] = "int" +#鎶ヤ环缂栧彿 +CThostFtdcQuoteField["QuoteSysID"] = "string" +#鎶ュ崟鏃ユ湡 +CThostFtdcQuoteField["InsertDate"] = "string" +#鎻掑叆鏃堕棿 +CThostFtdcQuoteField["InsertTime"] = "string" +#鎾ら攢鏃堕棿 +CThostFtdcQuoteField["CancelTime"] = "string" +#鎶ヤ环鐘舵 +CThostFtdcQuoteField["QuoteStatus"] = "string" +#缁撶畻浼氬憳缂栧彿 +CThostFtdcQuoteField["ClearingPartID"] = "string" +#搴忓彿 +CThostFtdcQuoteField["SequenceNo"] = "int" +#鍗栨柟鎶ュ崟缂栧彿 +CThostFtdcQuoteField["AskOrderSysID"] = "string" +#涔版柟鎶ュ崟缂栧彿 +CThostFtdcQuoteField["BidOrderSysID"] = "string" +#鍓嶇疆缂栧彿 +CThostFtdcQuoteField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcQuoteField["SessionID"] = "int" +#鐢ㄦ埛绔骇鍝佷俊鎭 +CThostFtdcQuoteField["UserProductInfo"] = "string" +#鐘舵佷俊鎭 +CThostFtdcQuoteField["StatusMsg"] = "string" +#鎿嶄綔鐢ㄦ埛浠g爜 +CThostFtdcQuoteField["ActiveUserID"] = "string" +#缁忕邯鍏徃鎶ヤ环缂栧彿 +CThostFtdcQuoteField["BrokerQuoteSeq"] = "int" +structDict['CThostFtdcQuoteField'] = CThostFtdcQuoteField + + +#鎶ヤ环鎿嶄綔 +CThostFtdcQuoteActionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQuoteActionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQuoteActionField["InvestorID"] = "string" +#鎶ヤ环鎿嶄綔寮曠敤 +CThostFtdcQuoteActionField["QuoteActionRef"] = "int" +#鎶ヤ环寮曠敤 +CThostFtdcQuoteActionField["QuoteRef"] = "string" +#璇锋眰缂栧彿 +CThostFtdcQuoteActionField["RequestID"] = "int" +#鍓嶇疆缂栧彿 +CThostFtdcQuoteActionField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcQuoteActionField["SessionID"] = "int" +#浜ゆ槗鎵浠g爜 +CThostFtdcQuoteActionField["ExchangeID"] = "string" +#鎶ヤ环鎿嶄綔缂栧彿 +CThostFtdcQuoteActionField["QuoteSysID"] = "string" +#鎿嶄綔鏍囧織 +CThostFtdcQuoteActionField["ActionFlag"] = "string" +#鎿嶄綔鏃ユ湡 +CThostFtdcQuoteActionField["ActionDate"] = "string" +#鎿嶄綔鏃堕棿 +CThostFtdcQuoteActionField["ActionTime"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcQuoteActionField["TraderID"] = "string" +#瀹夎缂栧彿 +CThostFtdcQuoteActionField["InstallID"] = "int" +#鏈湴鎶ヤ环缂栧彿 +CThostFtdcQuoteActionField["QuoteLocalID"] = "string" +#鎿嶄綔鏈湴缂栧彿 +CThostFtdcQuoteActionField["ActionLocalID"] = "string" +#浼氬憳浠g爜 +CThostFtdcQuoteActionField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcQuoteActionField["ClientID"] = "string" +#涓氬姟鍗曞厓 +CThostFtdcQuoteActionField["BusinessUnit"] = "string" +#鎶ュ崟鎿嶄綔鐘舵 +CThostFtdcQuoteActionField["OrderActionStatus"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcQuoteActionField["UserID"] = "string" +#鐘舵佷俊鎭 +CThostFtdcQuoteActionField["StatusMsg"] = "string" +#鍚堢害浠g爜 +CThostFtdcQuoteActionField["InstrumentID"] = "string" +structDict['CThostFtdcQuoteActionField'] = CThostFtdcQuoteActionField + + +#鎶ヤ环鏌ヨ +CThostFtdcQryQuoteField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryQuoteField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryQuoteField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryQuoteField["InstrumentID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryQuoteField["ExchangeID"] = "string" +#鎶ヤ环缂栧彿 +CThostFtdcQryQuoteField["QuoteSysID"] = "string" +#寮濮嬫椂闂 +CThostFtdcQryQuoteField["InsertTimeStart"] = "string" +#缁撴潫鏃堕棿 +CThostFtdcQryQuoteField["InsertTimeEnd"] = "string" +structDict['CThostFtdcQryQuoteField'] = CThostFtdcQryQuoteField + + +#浜ゆ槗鎵鎶ヤ环淇℃伅 +CThostFtdcExchangeQuoteField = {} +#鍗栦环鏍 +CThostFtdcExchangeQuoteField["AskPrice"] = "float" +#涔颁环鏍 +CThostFtdcExchangeQuoteField["BidPrice"] = "float" +#鍗栨暟閲 +CThostFtdcExchangeQuoteField["AskVolume"] = "int" +#涔版暟閲 +CThostFtdcExchangeQuoteField["BidVolume"] = "int" +#璇锋眰缂栧彿 +CThostFtdcExchangeQuoteField["RequestID"] = "int" +#涓氬姟鍗曞厓 +CThostFtdcExchangeQuoteField["BusinessUnit"] = "string" +#鍗栧紑骞虫爣蹇 +CThostFtdcExchangeQuoteField["AskOffsetFlag"] = "string" +#涔板紑骞虫爣蹇 +CThostFtdcExchangeQuoteField["BidOffsetFlag"] = "string" +#鍗栨姇鏈哄淇濇爣蹇 +CThostFtdcExchangeQuoteField["AskHedgeFlag"] = "string" +#涔版姇鏈哄淇濇爣蹇 +CThostFtdcExchangeQuoteField["BidHedgeFlag"] = "string" +#鏈湴鎶ヤ环缂栧彿 +CThostFtdcExchangeQuoteField["QuoteLocalID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcExchangeQuoteField["ExchangeID"] = "string" +#浼氬憳浠g爜 +CThostFtdcExchangeQuoteField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcExchangeQuoteField["ClientID"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcExchangeQuoteField["ExchangeInstID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcExchangeQuoteField["TraderID"] = "string" +#瀹夎缂栧彿 +CThostFtdcExchangeQuoteField["InstallID"] = "int" +#鎶ヤ环鎻愮ず搴忓彿 +CThostFtdcExchangeQuoteField["NotifySequence"] = "int" +#鎶ヤ环鎻愪氦鐘舵 +CThostFtdcExchangeQuoteField["OrderSubmitStatus"] = "string" +#浜ゆ槗鏃 +CThostFtdcExchangeQuoteField["TradingDay"] = "string" +#缁撶畻缂栧彿 +CThostFtdcExchangeQuoteField["SettlementID"] = "int" +#鎶ヤ环缂栧彿 +CThostFtdcExchangeQuoteField["QuoteSysID"] = "string" +#鎶ュ崟鏃ユ湡 +CThostFtdcExchangeQuoteField["InsertDate"] = "string" +#鎻掑叆鏃堕棿 +CThostFtdcExchangeQuoteField["InsertTime"] = "string" +#鎾ら攢鏃堕棿 +CThostFtdcExchangeQuoteField["CancelTime"] = "string" +#鎶ヤ环鐘舵 +CThostFtdcExchangeQuoteField["QuoteStatus"] = "string" +#缁撶畻浼氬憳缂栧彿 +CThostFtdcExchangeQuoteField["ClearingPartID"] = "string" +#搴忓彿 +CThostFtdcExchangeQuoteField["SequenceNo"] = "int" +#鍗栨柟鎶ュ崟缂栧彿 +CThostFtdcExchangeQuoteField["AskOrderSysID"] = "string" +#涔版柟鎶ュ崟缂栧彿 +CThostFtdcExchangeQuoteField["BidOrderSysID"] = "string" +structDict['CThostFtdcExchangeQuoteField'] = CThostFtdcExchangeQuoteField + + +#浜ゆ槗鎵鎶ヤ环鏌ヨ +CThostFtdcQryExchangeQuoteField = {} +#浼氬憳浠g爜 +CThostFtdcQryExchangeQuoteField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcQryExchangeQuoteField["ClientID"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcQryExchangeQuoteField["ExchangeInstID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryExchangeQuoteField["ExchangeID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcQryExchangeQuoteField["TraderID"] = "string" +structDict['CThostFtdcQryExchangeQuoteField'] = CThostFtdcQryExchangeQuoteField + + +#鎶ヤ环鎿嶄綔鏌ヨ +CThostFtdcQryQuoteActionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryQuoteActionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryQuoteActionField["InvestorID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryQuoteActionField["ExchangeID"] = "string" +structDict['CThostFtdcQryQuoteActionField'] = CThostFtdcQryQuoteActionField + + +#浜ゆ槗鎵鎶ヤ环鎿嶄綔 +CThostFtdcExchangeQuoteActionField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcExchangeQuoteActionField["ExchangeID"] = "string" +#鎶ヤ环鎿嶄綔缂栧彿 +CThostFtdcExchangeQuoteActionField["QuoteSysID"] = "string" +#鎿嶄綔鏍囧織 +CThostFtdcExchangeQuoteActionField["ActionFlag"] = "string" +#鎿嶄綔鏃ユ湡 +CThostFtdcExchangeQuoteActionField["ActionDate"] = "string" +#鎿嶄綔鏃堕棿 +CThostFtdcExchangeQuoteActionField["ActionTime"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcExchangeQuoteActionField["TraderID"] = "string" +#瀹夎缂栧彿 +CThostFtdcExchangeQuoteActionField["InstallID"] = "int" +#鏈湴鎶ヤ环缂栧彿 +CThostFtdcExchangeQuoteActionField["QuoteLocalID"] = "string" +#鎿嶄綔鏈湴缂栧彿 +CThostFtdcExchangeQuoteActionField["ActionLocalID"] = "string" +#浼氬憳浠g爜 +CThostFtdcExchangeQuoteActionField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcExchangeQuoteActionField["ClientID"] = "string" +#涓氬姟鍗曞厓 +CThostFtdcExchangeQuoteActionField["BusinessUnit"] = "string" +#鎶ュ崟鎿嶄綔鐘舵 +CThostFtdcExchangeQuoteActionField["OrderActionStatus"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcExchangeQuoteActionField["UserID"] = "string" +structDict['CThostFtdcExchangeQuoteActionField'] = CThostFtdcExchangeQuoteActionField + + +#浜ゆ槗鎵鎶ヤ环鎿嶄綔鏌ヨ +CThostFtdcQryExchangeQuoteActionField = {} +#浼氬憳浠g爜 +CThostFtdcQryExchangeQuoteActionField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcQryExchangeQuoteActionField["ClientID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryExchangeQuoteActionField["ExchangeID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcQryExchangeQuoteActionField["TraderID"] = "string" +structDict['CThostFtdcQryExchangeQuoteActionField'] = CThostFtdcQryExchangeQuoteActionField + + +#鏈熸潈鍚堢害delta鍊 +CThostFtdcOptionInstrDeltaField = {} +#鍚堢害浠g爜 +CThostFtdcOptionInstrDeltaField["InstrumentID"] = "string" +#鎶曡祫鑰呰寖鍥 +CThostFtdcOptionInstrDeltaField["InvestorRange"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcOptionInstrDeltaField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcOptionInstrDeltaField["InvestorID"] = "string" +#Delta鍊 +CThostFtdcOptionInstrDeltaField["Delta"] = "float" +structDict['CThostFtdcOptionInstrDeltaField'] = CThostFtdcOptionInstrDeltaField + + +#鍙戠粰鍋氬競鍟嗙殑璇环璇锋眰 +CThostFtdcForQuoteRspField = {} +#浜ゆ槗鏃 +CThostFtdcForQuoteRspField["TradingDay"] = "string" +#鍚堢害浠g爜 +CThostFtdcForQuoteRspField["InstrumentID"] = "string" +#璇环缂栧彿 +CThostFtdcForQuoteRspField["ForQuoteSysID"] = "string" +#璇环鏃堕棿 +CThostFtdcForQuoteRspField["ForQuoteTime"] = "string" +#涓氬姟鏃ユ湡 +CThostFtdcForQuoteRspField["ActionDay"] = "string" +structDict['CThostFtdcForQuoteRspField'] = CThostFtdcForQuoteRspField + + +#褰撳墠鏈熸潈鍚堢害鎵ц鍋忕Щ鍊肩殑璇︾粏鍐呭 +CThostFtdcStrikeOffsetField = {} +#鍚堢害浠g爜 +CThostFtdcStrikeOffsetField["InstrumentID"] = "string" +#鎶曡祫鑰呰寖鍥 +CThostFtdcStrikeOffsetField["InvestorRange"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcStrikeOffsetField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcStrikeOffsetField["InvestorID"] = "string" +#鎵ц鍋忕Щ鍊 +CThostFtdcStrikeOffsetField["Offset"] = "float" +structDict['CThostFtdcStrikeOffsetField'] = CThostFtdcStrikeOffsetField + + +#鏈熸潈鎵ц鍋忕Щ鍊兼煡璇 +CThostFtdcQryStrikeOffsetField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryStrikeOffsetField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryStrikeOffsetField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryStrikeOffsetField["InstrumentID"] = "string" +structDict['CThostFtdcQryStrikeOffsetField'] = CThostFtdcQryStrikeOffsetField + + +#甯傚満琛屾儏 +CThostFtdcMarketDataField = {} +#浜ゆ槗鏃 +CThostFtdcMarketDataField["TradingDay"] = "string" +#鍚堢害浠g爜 +CThostFtdcMarketDataField["InstrumentID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcMarketDataField["ExchangeID"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcMarketDataField["ExchangeInstID"] = "string" +#鏈鏂颁环 +CThostFtdcMarketDataField["LastPrice"] = "float" +#涓婃缁撶畻浠 +CThostFtdcMarketDataField["PreSettlementPrice"] = "float" +#鏄ㄦ敹鐩 +CThostFtdcMarketDataField["PreClosePrice"] = "float" +#鏄ㄦ寔浠撻噺 +CThostFtdcMarketDataField["PreOpenInterest"] = "float" +#浠婂紑鐩 +CThostFtdcMarketDataField["OpenPrice"] = "float" +#鏈楂樹环 +CThostFtdcMarketDataField["HighestPrice"] = "float" +#鏈浣庝环 +CThostFtdcMarketDataField["LowestPrice"] = "float" +#鏁伴噺 +CThostFtdcMarketDataField["Volume"] = "int" +#鎴愪氦閲戦 +CThostFtdcMarketDataField["Turnover"] = "float" +#鎸佷粨閲 +CThostFtdcMarketDataField["OpenInterest"] = "float" +#浠婃敹鐩 +CThostFtdcMarketDataField["ClosePrice"] = "float" +#鏈缁撶畻浠 +CThostFtdcMarketDataField["SettlementPrice"] = "float" +#娑ㄥ仠鏉夸环 +CThostFtdcMarketDataField["UpperLimitPrice"] = "float" +#璺屽仠鏉夸环 +CThostFtdcMarketDataField["LowerLimitPrice"] = "float" +#鏄ㄨ櫄瀹炲害 +CThostFtdcMarketDataField["PreDelta"] = "float" +#浠婅櫄瀹炲害 +CThostFtdcMarketDataField["CurrDelta"] = "float" +#鏈鍚庝慨鏀规椂闂 +CThostFtdcMarketDataField["UpdateTime"] = "string" +#鏈鍚庝慨鏀规绉 +CThostFtdcMarketDataField["UpdateMillisec"] = "int" +#涓氬姟鏃ユ湡 +CThostFtdcMarketDataField["ActionDay"] = "string" +structDict['CThostFtdcMarketDataField'] = CThostFtdcMarketDataField + + +#琛屾儏鍩虹灞炴 +CThostFtdcMarketDataBaseField = {} +#浜ゆ槗鏃 +CThostFtdcMarketDataBaseField["TradingDay"] = "string" +#涓婃缁撶畻浠 +CThostFtdcMarketDataBaseField["PreSettlementPrice"] = "float" +#鏄ㄦ敹鐩 +CThostFtdcMarketDataBaseField["PreClosePrice"] = "float" +#鏄ㄦ寔浠撻噺 +CThostFtdcMarketDataBaseField["PreOpenInterest"] = "float" +#鏄ㄨ櫄瀹炲害 +CThostFtdcMarketDataBaseField["PreDelta"] = "float" +structDict['CThostFtdcMarketDataBaseField'] = CThostFtdcMarketDataBaseField + + +#琛屾儏闈欐佸睘鎬 +CThostFtdcMarketDataStaticField = {} +#浠婂紑鐩 +CThostFtdcMarketDataStaticField["OpenPrice"] = "float" +#鏈楂樹环 +CThostFtdcMarketDataStaticField["HighestPrice"] = "float" +#鏈浣庝环 +CThostFtdcMarketDataStaticField["LowestPrice"] = "float" +#浠婃敹鐩 +CThostFtdcMarketDataStaticField["ClosePrice"] = "float" +#娑ㄥ仠鏉夸环 +CThostFtdcMarketDataStaticField["UpperLimitPrice"] = "float" +#璺屽仠鏉夸环 +CThostFtdcMarketDataStaticField["LowerLimitPrice"] = "float" +#鏈缁撶畻浠 +CThostFtdcMarketDataStaticField["SettlementPrice"] = "float" +#浠婅櫄瀹炲害 +CThostFtdcMarketDataStaticField["CurrDelta"] = "float" +structDict['CThostFtdcMarketDataStaticField'] = CThostFtdcMarketDataStaticField + + +#琛屾儏鏈鏂版垚浜ゅ睘鎬 +CThostFtdcMarketDataLastMatchField = {} +#鏈鏂颁环 +CThostFtdcMarketDataLastMatchField["LastPrice"] = "float" +#鏁伴噺 +CThostFtdcMarketDataLastMatchField["Volume"] = "int" +#鎴愪氦閲戦 +CThostFtdcMarketDataLastMatchField["Turnover"] = "float" +#鎸佷粨閲 +CThostFtdcMarketDataLastMatchField["OpenInterest"] = "float" +structDict['CThostFtdcMarketDataLastMatchField'] = CThostFtdcMarketDataLastMatchField + + +#琛屾儏鏈浼樹环灞炴 +CThostFtdcMarketDataBestPriceField = {} +#鐢充拱浠蜂竴 +CThostFtdcMarketDataBestPriceField["BidPrice1"] = "float" +#鐢充拱閲忎竴 +CThostFtdcMarketDataBestPriceField["BidVolume1"] = "int" +#鐢冲崠浠蜂竴 +CThostFtdcMarketDataBestPriceField["AskPrice1"] = "float" +#鐢冲崠閲忎竴 +CThostFtdcMarketDataBestPriceField["AskVolume1"] = "int" +structDict['CThostFtdcMarketDataBestPriceField'] = CThostFtdcMarketDataBestPriceField + + +#琛屾儏鐢充拱浜屻佷笁灞炴 +CThostFtdcMarketDataBid23Field = {} +#鐢充拱浠蜂簩 +CThostFtdcMarketDataBid23Field["BidPrice2"] = "float" +#鐢充拱閲忎簩 +CThostFtdcMarketDataBid23Field["BidVolume2"] = "int" +#鐢充拱浠蜂笁 +CThostFtdcMarketDataBid23Field["BidPrice3"] = "float" +#鐢充拱閲忎笁 +CThostFtdcMarketDataBid23Field["BidVolume3"] = "int" +structDict['CThostFtdcMarketDataBid23Field'] = CThostFtdcMarketDataBid23Field + + +#琛屾儏鐢冲崠浜屻佷笁灞炴 +CThostFtdcMarketDataAsk23Field = {} +#鐢冲崠浠蜂簩 +CThostFtdcMarketDataAsk23Field["AskPrice2"] = "float" +#鐢冲崠閲忎簩 +CThostFtdcMarketDataAsk23Field["AskVolume2"] = "int" +#鐢冲崠浠蜂笁 +CThostFtdcMarketDataAsk23Field["AskPrice3"] = "float" +#鐢冲崠閲忎笁 +CThostFtdcMarketDataAsk23Field["AskVolume3"] = "int" +structDict['CThostFtdcMarketDataAsk23Field'] = CThostFtdcMarketDataAsk23Field + + +#琛屾儏鐢充拱鍥涖佷簲灞炴 +CThostFtdcMarketDataBid45Field = {} +#鐢充拱浠峰洓 +CThostFtdcMarketDataBid45Field["BidPrice4"] = "float" +#鐢充拱閲忓洓 +CThostFtdcMarketDataBid45Field["BidVolume4"] = "int" +#鐢充拱浠蜂簲 +CThostFtdcMarketDataBid45Field["BidPrice5"] = "float" +#鐢充拱閲忎簲 +CThostFtdcMarketDataBid45Field["BidVolume5"] = "int" +structDict['CThostFtdcMarketDataBid45Field'] = CThostFtdcMarketDataBid45Field + + +#琛屾儏鐢冲崠鍥涖佷簲灞炴 +CThostFtdcMarketDataAsk45Field = {} +#鐢冲崠浠峰洓 +CThostFtdcMarketDataAsk45Field["AskPrice4"] = "float" +#鐢冲崠閲忓洓 +CThostFtdcMarketDataAsk45Field["AskVolume4"] = "int" +#鐢冲崠浠蜂簲 +CThostFtdcMarketDataAsk45Field["AskPrice5"] = "float" +#鐢冲崠閲忎簲 +CThostFtdcMarketDataAsk45Field["AskVolume5"] = "int" +structDict['CThostFtdcMarketDataAsk45Field'] = CThostFtdcMarketDataAsk45Field + + +#琛屾儏鏇存柊鏃堕棿灞炴 +CThostFtdcMarketDataUpdateTimeField = {} +#鍚堢害浠g爜 +CThostFtdcMarketDataUpdateTimeField["InstrumentID"] = "string" +#鏈鍚庝慨鏀规椂闂 +CThostFtdcMarketDataUpdateTimeField["UpdateTime"] = "string" +#鏈鍚庝慨鏀规绉 +CThostFtdcMarketDataUpdateTimeField["UpdateMillisec"] = "int" +#涓氬姟鏃ユ湡 +CThostFtdcMarketDataUpdateTimeField["ActionDay"] = "string" +structDict['CThostFtdcMarketDataUpdateTimeField'] = CThostFtdcMarketDataUpdateTimeField + + +#琛屾儏浜ゆ槗鎵浠g爜灞炴 +CThostFtdcMarketDataExchangeField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcMarketDataExchangeField["ExchangeID"] = "string" +structDict['CThostFtdcMarketDataExchangeField'] = CThostFtdcMarketDataExchangeField + + +#鎸囧畾鐨勫悎绾 +CThostFtdcSpecificInstrumentField = {} +#鍚堢害浠g爜 +CThostFtdcSpecificInstrumentField["InstrumentID"] = "string" +structDict['CThostFtdcSpecificInstrumentField'] = CThostFtdcSpecificInstrumentField + + +#鍚堢害鐘舵 +CThostFtdcInstrumentStatusField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcInstrumentStatusField["ExchangeID"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcInstrumentStatusField["ExchangeInstID"] = "string" +#缁撶畻缁勪唬鐮 +CThostFtdcInstrumentStatusField["SettlementGroupID"] = "string" +#鍚堢害浠g爜 +CThostFtdcInstrumentStatusField["InstrumentID"] = "string" +#鍚堢害浜ゆ槗鐘舵 +CThostFtdcInstrumentStatusField["InstrumentStatus"] = "string" +#浜ゆ槗闃舵缂栧彿 +CThostFtdcInstrumentStatusField["TradingSegmentSN"] = "int" +#杩涘叆鏈姸鎬佹椂闂 +CThostFtdcInstrumentStatusField["EnterTime"] = "string" +#杩涘叆鏈姸鎬佸師鍥 +CThostFtdcInstrumentStatusField["EnterReason"] = "string" +structDict['CThostFtdcInstrumentStatusField'] = CThostFtdcInstrumentStatusField + + +#鏌ヨ鍚堢害鐘舵 +CThostFtdcQryInstrumentStatusField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcQryInstrumentStatusField["ExchangeID"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcQryInstrumentStatusField["ExchangeInstID"] = "string" +structDict['CThostFtdcQryInstrumentStatusField'] = CThostFtdcQryInstrumentStatusField + + +#鎶曡祫鑰呰处鎴 +CThostFtdcInvestorAccountField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcInvestorAccountField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcInvestorAccountField["InvestorID"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcInvestorAccountField["AccountID"] = "string" +#甯佺浠g爜 +CThostFtdcInvestorAccountField["CurrencyID"] = "string" +structDict['CThostFtdcInvestorAccountField'] = CThostFtdcInvestorAccountField + + +#娴姩鐩堜簭绠楁硶 +CThostFtdcPositionProfitAlgorithmField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcPositionProfitAlgorithmField["BrokerID"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcPositionProfitAlgorithmField["AccountID"] = "string" +#鐩堜簭绠楁硶 +CThostFtdcPositionProfitAlgorithmField["Algorithm"] = "string" +#澶囨敞 +CThostFtdcPositionProfitAlgorithmField["Memo"] = "string" +#甯佺浠g爜 +CThostFtdcPositionProfitAlgorithmField["CurrencyID"] = "string" +structDict['CThostFtdcPositionProfitAlgorithmField'] = CThostFtdcPositionProfitAlgorithmField + + +#浼氬憳璧勯噾鎶樻墸 +CThostFtdcDiscountField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcDiscountField["BrokerID"] = "string" +#鎶曡祫鑰呰寖鍥 +CThostFtdcDiscountField["InvestorRange"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcDiscountField["InvestorID"] = "string" +#璧勯噾鎶樻墸姣斾緥 +CThostFtdcDiscountField["Discount"] = "float" +structDict['CThostFtdcDiscountField'] = CThostFtdcDiscountField + + +#鏌ヨ杞笎閾惰 +CThostFtdcQryTransferBankField = {} +#閾惰浠g爜 +CThostFtdcQryTransferBankField["BankID"] = "string" +#閾惰鍒嗕腑蹇冧唬鐮 +CThostFtdcQryTransferBankField["BankBrchID"] = "string" +structDict['CThostFtdcQryTransferBankField'] = CThostFtdcQryTransferBankField + + +#杞笎閾惰 +CThostFtdcTransferBankField = {} +#閾惰浠g爜 +CThostFtdcTransferBankField["BankID"] = "string" +#閾惰鍒嗕腑蹇冧唬鐮 +CThostFtdcTransferBankField["BankBrchID"] = "string" +#閾惰鍚嶇О +CThostFtdcTransferBankField["BankName"] = "string" +#鏄惁娲昏穬 +CThostFtdcTransferBankField["IsActive"] = "int" +structDict['CThostFtdcTransferBankField'] = CThostFtdcTransferBankField + + +#鏌ヨ鎶曡祫鑰呮寔浠撴槑缁 +CThostFtdcQryInvestorPositionDetailField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryInvestorPositionDetailField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryInvestorPositionDetailField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryInvestorPositionDetailField["InstrumentID"] = "string" +structDict['CThostFtdcQryInvestorPositionDetailField'] = CThostFtdcQryInvestorPositionDetailField + + +#鎶曡祫鑰呮寔浠撴槑缁 +CThostFtdcInvestorPositionDetailField = {} +#鍚堢害浠g爜 +CThostFtdcInvestorPositionDetailField["InstrumentID"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcInvestorPositionDetailField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcInvestorPositionDetailField["InvestorID"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcInvestorPositionDetailField["HedgeFlag"] = "string" +#涔板崠 +CThostFtdcInvestorPositionDetailField["Direction"] = "string" +#寮浠撴棩鏈 +CThostFtdcInvestorPositionDetailField["OpenDate"] = "string" +#鎴愪氦缂栧彿 +CThostFtdcInvestorPositionDetailField["TradeID"] = "string" +#鏁伴噺 +CThostFtdcInvestorPositionDetailField["Volume"] = "int" +#寮浠撲环 +CThostFtdcInvestorPositionDetailField["OpenPrice"] = "float" +#浜ゆ槗鏃 +CThostFtdcInvestorPositionDetailField["TradingDay"] = "string" +#缁撶畻缂栧彿 +CThostFtdcInvestorPositionDetailField["SettlementID"] = "int" +#鎴愪氦绫诲瀷 +CThostFtdcInvestorPositionDetailField["TradeType"] = "string" +#缁勫悎鍚堢害浠g爜 +CThostFtdcInvestorPositionDetailField["CombInstrumentID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcInvestorPositionDetailField["ExchangeID"] = "string" +#閫愭棩鐩競骞充粨鐩堜簭 +CThostFtdcInvestorPositionDetailField["CloseProfitByDate"] = "float" +#閫愮瑪瀵瑰啿骞充粨鐩堜簭 +CThostFtdcInvestorPositionDetailField["CloseProfitByTrade"] = "float" +#閫愭棩鐩競鎸佷粨鐩堜簭 +CThostFtdcInvestorPositionDetailField["PositionProfitByDate"] = "float" +#閫愮瑪瀵瑰啿鎸佷粨鐩堜簭 +CThostFtdcInvestorPositionDetailField["PositionProfitByTrade"] = "float" +#鎶曡祫鑰呬繚璇侀噾 +CThostFtdcInvestorPositionDetailField["Margin"] = "float" +#浜ゆ槗鎵淇濊瘉閲 +CThostFtdcInvestorPositionDetailField["ExchMargin"] = "float" +#淇濊瘉閲戠巼 +CThostFtdcInvestorPositionDetailField["MarginRateByMoney"] = "float" +#淇濊瘉閲戠巼(鎸夋墜鏁) +CThostFtdcInvestorPositionDetailField["MarginRateByVolume"] = "float" +#鏄ㄧ粨绠椾环 +CThostFtdcInvestorPositionDetailField["LastSettlementPrice"] = "float" +#缁撶畻浠 +CThostFtdcInvestorPositionDetailField["SettlementPrice"] = "float" +#骞充粨閲 +CThostFtdcInvestorPositionDetailField["CloseVolume"] = "int" +#骞充粨閲戦 +CThostFtdcInvestorPositionDetailField["CloseAmount"] = "float" +structDict['CThostFtdcInvestorPositionDetailField'] = CThostFtdcInvestorPositionDetailField + + +#璧勯噾璐︽埛鍙d护鍩 +CThostFtdcTradingAccountPasswordField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcTradingAccountPasswordField["BrokerID"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcTradingAccountPasswordField["AccountID"] = "string" +#瀵嗙爜 +CThostFtdcTradingAccountPasswordField["Password"] = "string" +#甯佺浠g爜 +CThostFtdcTradingAccountPasswordField["CurrencyID"] = "string" +structDict['CThostFtdcTradingAccountPasswordField'] = CThostFtdcTradingAccountPasswordField + + +#浜ゆ槗鎵琛屾儏鎶ョ洏鏈 +CThostFtdcMDTraderOfferField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcMDTraderOfferField["ExchangeID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcMDTraderOfferField["TraderID"] = "string" +#浼氬憳浠g爜 +CThostFtdcMDTraderOfferField["ParticipantID"] = "string" +#瀵嗙爜 +CThostFtdcMDTraderOfferField["Password"] = "string" +#瀹夎缂栧彿 +CThostFtdcMDTraderOfferField["InstallID"] = "int" +#鏈湴鎶ュ崟缂栧彿 +CThostFtdcMDTraderOfferField["OrderLocalID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樿繛鎺ョ姸鎬 +CThostFtdcMDTraderOfferField["TraderConnectStatus"] = "string" +#鍙戝嚭杩炴帴璇锋眰鐨勬棩鏈 +CThostFtdcMDTraderOfferField["ConnectRequestDate"] = "string" +#鍙戝嚭杩炴帴璇锋眰鐨勬椂闂 +CThostFtdcMDTraderOfferField["ConnectRequestTime"] = "string" +#涓婃鎶ュ憡鏃ユ湡 +CThostFtdcMDTraderOfferField["LastReportDate"] = "string" +#涓婃鎶ュ憡鏃堕棿 +CThostFtdcMDTraderOfferField["LastReportTime"] = "string" +#瀹屾垚杩炴帴鏃ユ湡 +CThostFtdcMDTraderOfferField["ConnectDate"] = "string" +#瀹屾垚杩炴帴鏃堕棿 +CThostFtdcMDTraderOfferField["ConnectTime"] = "string" +#鍚姩鏃ユ湡 +CThostFtdcMDTraderOfferField["StartDate"] = "string" +#鍚姩鏃堕棿 +CThostFtdcMDTraderOfferField["StartTime"] = "string" +#浜ゆ槗鏃 +CThostFtdcMDTraderOfferField["TradingDay"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcMDTraderOfferField["BrokerID"] = "string" +#鏈腑浣嶆渶澶ф垚浜ょ紪鍙 +CThostFtdcMDTraderOfferField["MaxTradeID"] = "string" +#鏈腑浣嶆渶澶ф姤鍗曞鎷 +CThostFtdcMDTraderOfferField["MaxOrderMessageReference"] = "string" +structDict['CThostFtdcMDTraderOfferField'] = CThostFtdcMDTraderOfferField + + +#鏌ヨ琛屾儏鎶ョ洏鏈 +CThostFtdcQryMDTraderOfferField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcQryMDTraderOfferField["ExchangeID"] = "string" +#浼氬憳浠g爜 +CThostFtdcQryMDTraderOfferField["ParticipantID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcQryMDTraderOfferField["TraderID"] = "string" +structDict['CThostFtdcQryMDTraderOfferField'] = CThostFtdcQryMDTraderOfferField + + +#鏌ヨ瀹㈡埛閫氱煡 +CThostFtdcQryNoticeField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryNoticeField["BrokerID"] = "string" +structDict['CThostFtdcQryNoticeField'] = CThostFtdcQryNoticeField + + +#瀹㈡埛閫氱煡 +CThostFtdcNoticeField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcNoticeField["BrokerID"] = "string" +#娑堟伅姝f枃 +CThostFtdcNoticeField["Content"] = "string" +#缁忕邯鍏徃閫氱煡鍐呭搴忓垪鍙 +CThostFtdcNoticeField["SequenceLabel"] = "string" +structDict['CThostFtdcNoticeField'] = CThostFtdcNoticeField + + +#鐢ㄦ埛鏉冮檺 +CThostFtdcUserRightField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcUserRightField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcUserRightField["UserID"] = "string" +#瀹㈡埛鏉冮檺绫诲瀷 +CThostFtdcUserRightField["UserRightType"] = "string" +#鏄惁绂佹 +CThostFtdcUserRightField["IsForbidden"] = "int" +structDict['CThostFtdcUserRightField'] = CThostFtdcUserRightField + + +#鏌ヨ缁撶畻淇℃伅纭鍩 +CThostFtdcQrySettlementInfoConfirmField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQrySettlementInfoConfirmField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQrySettlementInfoConfirmField["InvestorID"] = "string" +structDict['CThostFtdcQrySettlementInfoConfirmField'] = CThostFtdcQrySettlementInfoConfirmField + + +#瑁呰浇缁撶畻淇℃伅 +CThostFtdcLoadSettlementInfoField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcLoadSettlementInfoField["BrokerID"] = "string" +structDict['CThostFtdcLoadSettlementInfoField'] = CThostFtdcLoadSettlementInfoField + + +#缁忕邯鍏徃鍙彁璧勯噾绠楁硶琛 +CThostFtdcBrokerWithdrawAlgorithmField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcBrokerWithdrawAlgorithmField["BrokerID"] = "string" +#鍙彁璧勯噾绠楁硶 +CThostFtdcBrokerWithdrawAlgorithmField["WithdrawAlgorithm"] = "string" +#璧勯噾浣跨敤鐜 +CThostFtdcBrokerWithdrawAlgorithmField["UsingRatio"] = "float" +#鍙彁鏄惁鍖呭惈骞充粨鐩堝埄 +CThostFtdcBrokerWithdrawAlgorithmField["IncludeCloseProfit"] = "string" +#鏈棩鏃犱粨涓旀棤鎴愪氦瀹㈡埛鏄惁鍙楀彲鎻愭瘮渚嬮檺鍒 +CThostFtdcBrokerWithdrawAlgorithmField["AllWithoutTrade"] = "string" +#鍙敤鏄惁鍖呭惈骞充粨鐩堝埄 +CThostFtdcBrokerWithdrawAlgorithmField["AvailIncludeCloseProfit"] = "string" +#鏄惁鍚敤鐢ㄦ埛浜嬩欢 +CThostFtdcBrokerWithdrawAlgorithmField["IsBrokerUserEvent"] = "int" +#甯佺浠g爜 +CThostFtdcBrokerWithdrawAlgorithmField["CurrencyID"] = "string" +#璐у竵璐ㄦ娂姣旂巼 +CThostFtdcBrokerWithdrawAlgorithmField["FundMortgageRatio"] = "float" +#鏉冪泭绠楁硶 +CThostFtdcBrokerWithdrawAlgorithmField["BalanceAlgorithm"] = "string" +structDict['CThostFtdcBrokerWithdrawAlgorithmField'] = CThostFtdcBrokerWithdrawAlgorithmField + + +#璧勯噾璐︽埛鍙d护鍙樻洿鍩 +CThostFtdcTradingAccountPasswordUpdateV1Field = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcTradingAccountPasswordUpdateV1Field["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcTradingAccountPasswordUpdateV1Field["InvestorID"] = "string" +#鍘熸潵鐨勫彛浠 +CThostFtdcTradingAccountPasswordUpdateV1Field["OldPassword"] = "string" +#鏂扮殑鍙d护 +CThostFtdcTradingAccountPasswordUpdateV1Field["NewPassword"] = "string" +structDict['CThostFtdcTradingAccountPasswordUpdateV1Field'] = CThostFtdcTradingAccountPasswordUpdateV1Field + + +#璧勯噾璐︽埛鍙d护鍙樻洿鍩 +CThostFtdcTradingAccountPasswordUpdateField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcTradingAccountPasswordUpdateField["BrokerID"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcTradingAccountPasswordUpdateField["AccountID"] = "string" +#鍘熸潵鐨勫彛浠 +CThostFtdcTradingAccountPasswordUpdateField["OldPassword"] = "string" +#鏂扮殑鍙d护 +CThostFtdcTradingAccountPasswordUpdateField["NewPassword"] = "string" +#甯佺浠g爜 +CThostFtdcTradingAccountPasswordUpdateField["CurrencyID"] = "string" +structDict['CThostFtdcTradingAccountPasswordUpdateField'] = CThostFtdcTradingAccountPasswordUpdateField + + +#鏌ヨ缁勫悎鍚堢害鍒嗚吙 +CThostFtdcQryCombinationLegField = {} +#缁勫悎鍚堢害浠g爜 +CThostFtdcQryCombinationLegField["CombInstrumentID"] = "string" +#鍗曡吙缂栧彿 +CThostFtdcQryCombinationLegField["LegID"] = "int" +#鍗曡吙鍚堢害浠g爜 +CThostFtdcQryCombinationLegField["LegInstrumentID"] = "string" +structDict['CThostFtdcQryCombinationLegField'] = CThostFtdcQryCombinationLegField + + +#鏌ヨ缁勫悎鍚堢害鍒嗚吙 +CThostFtdcQrySyncStatusField = {} +#浜ゆ槗鏃 +CThostFtdcQrySyncStatusField["TradingDay"] = "string" +structDict['CThostFtdcQrySyncStatusField'] = CThostFtdcQrySyncStatusField + + +#缁勫悎浜ゆ槗鍚堢害鐨勫崟鑵 +CThostFtdcCombinationLegField = {} +#缁勫悎鍚堢害浠g爜 +CThostFtdcCombinationLegField["CombInstrumentID"] = "string" +#鍗曡吙缂栧彿 +CThostFtdcCombinationLegField["LegID"] = "int" +#鍗曡吙鍚堢害浠g爜 +CThostFtdcCombinationLegField["LegInstrumentID"] = "string" +#涔板崠鏂瑰悜 +CThostFtdcCombinationLegField["Direction"] = "string" +#鍗曡吙涔樻暟 +CThostFtdcCombinationLegField["LegMultiple"] = "int" +#娲剧敓灞傛暟 +CThostFtdcCombinationLegField["ImplyLevel"] = "int" +structDict['CThostFtdcCombinationLegField'] = CThostFtdcCombinationLegField + + +#鏁版嵁鍚屾鐘舵 +CThostFtdcSyncStatusField = {} +#浜ゆ槗鏃 +CThostFtdcSyncStatusField["TradingDay"] = "string" +#鏁版嵁鍚屾鐘舵 +CThostFtdcSyncStatusField["DataSyncStatus"] = "string" +structDict['CThostFtdcSyncStatusField'] = CThostFtdcSyncStatusField + + +#鏌ヨ鑱旂郴浜 +CThostFtdcQryLinkManField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryLinkManField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryLinkManField["InvestorID"] = "string" +structDict['CThostFtdcQryLinkManField'] = CThostFtdcQryLinkManField + + +#鑱旂郴浜 +CThostFtdcLinkManField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcLinkManField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcLinkManField["InvestorID"] = "string" +#鑱旂郴浜虹被鍨 +CThostFtdcLinkManField["PersonType"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcLinkManField["IdentifiedCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcLinkManField["IdentifiedCardNo"] = "string" +#鍚嶇О +CThostFtdcLinkManField["PersonName"] = "string" +#鑱旂郴鐢佃瘽 +CThostFtdcLinkManField["Telephone"] = "string" +#閫氳鍦板潃 +CThostFtdcLinkManField["Address"] = "string" +#閭斂缂栫爜 +CThostFtdcLinkManField["ZipCode"] = "string" +#浼樺厛绾 +CThostFtdcLinkManField["Priority"] = "int" +#寮鎴烽偖鏀跨紪鐮 +CThostFtdcLinkManField["UOAZipCode"] = "string" +#鍏ㄧО +CThostFtdcLinkManField["PersonFullName"] = "string" +structDict['CThostFtdcLinkManField'] = CThostFtdcLinkManField + + +#鏌ヨ缁忕邯鍏徃鐢ㄦ埛浜嬩欢 +CThostFtdcQryBrokerUserEventField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryBrokerUserEventField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcQryBrokerUserEventField["UserID"] = "string" +#鐢ㄦ埛浜嬩欢绫诲瀷 +CThostFtdcQryBrokerUserEventField["UserEventType"] = "string" +structDict['CThostFtdcQryBrokerUserEventField'] = CThostFtdcQryBrokerUserEventField + + +#鏌ヨ缁忕邯鍏徃鐢ㄦ埛浜嬩欢 +CThostFtdcBrokerUserEventField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcBrokerUserEventField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcBrokerUserEventField["UserID"] = "string" +#鐢ㄦ埛浜嬩欢绫诲瀷 +CThostFtdcBrokerUserEventField["UserEventType"] = "string" +#鐢ㄦ埛浜嬩欢搴忓彿 +CThostFtdcBrokerUserEventField["EventSequenceNo"] = "int" +#浜嬩欢鍙戠敓鏃ユ湡 +CThostFtdcBrokerUserEventField["EventDate"] = "string" +#浜嬩欢鍙戠敓鏃堕棿 +CThostFtdcBrokerUserEventField["EventTime"] = "string" +#鐢ㄦ埛浜嬩欢淇℃伅 +CThostFtdcBrokerUserEventField["UserEventInfo"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcBrokerUserEventField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcBrokerUserEventField["InstrumentID"] = "string" +structDict['CThostFtdcBrokerUserEventField'] = CThostFtdcBrokerUserEventField + + +#鏌ヨ绛剧害閾惰璇锋眰 +CThostFtdcQryContractBankField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryContractBankField["BrokerID"] = "string" +#閾惰浠g爜 +CThostFtdcQryContractBankField["BankID"] = "string" +#閾惰鍒嗕腑蹇冧唬鐮 +CThostFtdcQryContractBankField["BankBrchID"] = "string" +structDict['CThostFtdcQryContractBankField'] = CThostFtdcQryContractBankField + + +#鏌ヨ绛剧害閾惰鍝嶅簲 +CThostFtdcContractBankField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcContractBankField["BrokerID"] = "string" +#閾惰浠g爜 +CThostFtdcContractBankField["BankID"] = "string" +#閾惰鍒嗕腑蹇冧唬鐮 +CThostFtdcContractBankField["BankBrchID"] = "string" +#閾惰鍚嶇О +CThostFtdcContractBankField["BankName"] = "string" +structDict['CThostFtdcContractBankField'] = CThostFtdcContractBankField + + +#鎶曡祫鑰呯粍鍚堟寔浠撴槑缁 +CThostFtdcInvestorPositionCombineDetailField = {} +#浜ゆ槗鏃 +CThostFtdcInvestorPositionCombineDetailField["TradingDay"] = "string" +#寮浠撴棩鏈 +CThostFtdcInvestorPositionCombineDetailField["OpenDate"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcInvestorPositionCombineDetailField["ExchangeID"] = "string" +#缁撶畻缂栧彿 +CThostFtdcInvestorPositionCombineDetailField["SettlementID"] = "int" +#缁忕邯鍏徃浠g爜 +CThostFtdcInvestorPositionCombineDetailField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcInvestorPositionCombineDetailField["InvestorID"] = "string" +#缁勫悎缂栧彿 +CThostFtdcInvestorPositionCombineDetailField["ComTradeID"] = "string" +#鎾悎缂栧彿 +CThostFtdcInvestorPositionCombineDetailField["TradeID"] = "string" +#鍚堢害浠g爜 +CThostFtdcInvestorPositionCombineDetailField["InstrumentID"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcInvestorPositionCombineDetailField["HedgeFlag"] = "string" +#涔板崠 +CThostFtdcInvestorPositionCombineDetailField["Direction"] = "string" +#鎸佷粨閲 +CThostFtdcInvestorPositionCombineDetailField["TotalAmt"] = "int" +#鎶曡祫鑰呬繚璇侀噾 +CThostFtdcInvestorPositionCombineDetailField["Margin"] = "float" +#浜ゆ槗鎵淇濊瘉閲 +CThostFtdcInvestorPositionCombineDetailField["ExchMargin"] = "float" +#淇濊瘉閲戠巼 +CThostFtdcInvestorPositionCombineDetailField["MarginRateByMoney"] = "float" +#淇濊瘉閲戠巼(鎸夋墜鏁) +CThostFtdcInvestorPositionCombineDetailField["MarginRateByVolume"] = "float" +#鍗曡吙缂栧彿 +CThostFtdcInvestorPositionCombineDetailField["LegID"] = "int" +#鍗曡吙涔樻暟 +CThostFtdcInvestorPositionCombineDetailField["LegMultiple"] = "int" +#缁勫悎鎸佷粨鍚堢害缂栫爜 +CThostFtdcInvestorPositionCombineDetailField["CombInstrumentID"] = "string" +#鎴愪氦缁勫彿 +CThostFtdcInvestorPositionCombineDetailField["TradeGroupID"] = "int" +structDict['CThostFtdcInvestorPositionCombineDetailField'] = CThostFtdcInvestorPositionCombineDetailField + + +#棰勫煁鍗 +CThostFtdcParkedOrderField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcParkedOrderField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcParkedOrderField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcParkedOrderField["InstrumentID"] = "string" +#鎶ュ崟寮曠敤 +CThostFtdcParkedOrderField["OrderRef"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcParkedOrderField["UserID"] = "string" +#鎶ュ崟浠锋牸鏉′欢 +CThostFtdcParkedOrderField["OrderPriceType"] = "string" +#涔板崠鏂瑰悜 +CThostFtdcParkedOrderField["Direction"] = "string" +#缁勫悎寮骞虫爣蹇 +CThostFtdcParkedOrderField["CombOffsetFlag"] = "string" +#缁勫悎鎶曟満濂椾繚鏍囧織 +CThostFtdcParkedOrderField["CombHedgeFlag"] = "string" +#浠锋牸 +CThostFtdcParkedOrderField["LimitPrice"] = "float" +#鏁伴噺 +CThostFtdcParkedOrderField["VolumeTotalOriginal"] = "int" +#鏈夋晥鏈熺被鍨 +CThostFtdcParkedOrderField["TimeCondition"] = "string" +#GTD鏃ユ湡 +CThostFtdcParkedOrderField["GTDDate"] = "string" +#鎴愪氦閲忕被鍨 +CThostFtdcParkedOrderField["VolumeCondition"] = "string" +#鏈灏忔垚浜ら噺 +CThostFtdcParkedOrderField["MinVolume"] = "int" +#瑙﹀彂鏉′欢 +CThostFtdcParkedOrderField["ContingentCondition"] = "string" +#姝㈡崯浠 +CThostFtdcParkedOrderField["StopPrice"] = "float" +#寮哄钩鍘熷洜 +CThostFtdcParkedOrderField["ForceCloseReason"] = "string" +#鑷姩鎸傝捣鏍囧織 +CThostFtdcParkedOrderField["IsAutoSuspend"] = "int" +#涓氬姟鍗曞厓 +CThostFtdcParkedOrderField["BusinessUnit"] = "string" +#璇锋眰缂栧彿 +CThostFtdcParkedOrderField["RequestID"] = "int" +#鐢ㄦ埛寮鸿瘎鏍囧織 +CThostFtdcParkedOrderField["UserForceClose"] = "int" +#浜ゆ槗鎵浠g爜 +CThostFtdcParkedOrderField["ExchangeID"] = "string" +#棰勫煁鎶ュ崟缂栧彿 +CThostFtdcParkedOrderField["ParkedOrderID"] = "string" +#鐢ㄦ埛绫诲瀷 +CThostFtdcParkedOrderField["UserType"] = "string" +#棰勫煁鍗曠姸鎬 +CThostFtdcParkedOrderField["Status"] = "string" +#閿欒浠g爜 +CThostFtdcParkedOrderField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcParkedOrderField["ErrorMsg"] = "string" +#浜掓崲鍗曟爣蹇 +CThostFtdcParkedOrderField["IsSwapOrder"] = "int" +structDict['CThostFtdcParkedOrderField'] = CThostFtdcParkedOrderField + + +#杈撳叆棰勫煁鍗曟搷浣 +CThostFtdcParkedOrderActionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcParkedOrderActionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcParkedOrderActionField["InvestorID"] = "string" +#鎶ュ崟鎿嶄綔寮曠敤 +CThostFtdcParkedOrderActionField["OrderActionRef"] = "int" +#鎶ュ崟寮曠敤 +CThostFtdcParkedOrderActionField["OrderRef"] = "string" +#璇锋眰缂栧彿 +CThostFtdcParkedOrderActionField["RequestID"] = "int" +#鍓嶇疆缂栧彿 +CThostFtdcParkedOrderActionField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcParkedOrderActionField["SessionID"] = "int" +#浜ゆ槗鎵浠g爜 +CThostFtdcParkedOrderActionField["ExchangeID"] = "string" +#鎶ュ崟缂栧彿 +CThostFtdcParkedOrderActionField["OrderSysID"] = "string" +#鎿嶄綔鏍囧織 +CThostFtdcParkedOrderActionField["ActionFlag"] = "string" +#浠锋牸 +CThostFtdcParkedOrderActionField["LimitPrice"] = "float" +#鏁伴噺鍙樺寲 +CThostFtdcParkedOrderActionField["VolumeChange"] = "int" +#鐢ㄦ埛浠g爜 +CThostFtdcParkedOrderActionField["UserID"] = "string" +#鍚堢害浠g爜 +CThostFtdcParkedOrderActionField["InstrumentID"] = "string" +#棰勫煁鎾ゅ崟鍗曠紪鍙 +CThostFtdcParkedOrderActionField["ParkedOrderActionID"] = "string" +#鐢ㄦ埛绫诲瀷 +CThostFtdcParkedOrderActionField["UserType"] = "string" +#棰勫煁鎾ゅ崟鐘舵 +CThostFtdcParkedOrderActionField["Status"] = "string" +#閿欒浠g爜 +CThostFtdcParkedOrderActionField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcParkedOrderActionField["ErrorMsg"] = "string" +structDict['CThostFtdcParkedOrderActionField'] = CThostFtdcParkedOrderActionField + + +#鏌ヨ棰勫煁鍗 +CThostFtdcQryParkedOrderField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryParkedOrderField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryParkedOrderField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryParkedOrderField["InstrumentID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryParkedOrderField["ExchangeID"] = "string" +structDict['CThostFtdcQryParkedOrderField'] = CThostFtdcQryParkedOrderField + + +#鏌ヨ棰勫煁鎾ゅ崟 +CThostFtdcQryParkedOrderActionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryParkedOrderActionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryParkedOrderActionField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryParkedOrderActionField["InstrumentID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryParkedOrderActionField["ExchangeID"] = "string" +structDict['CThostFtdcQryParkedOrderActionField'] = CThostFtdcQryParkedOrderActionField + + +#鍒犻櫎棰勫煁鍗 +CThostFtdcRemoveParkedOrderField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcRemoveParkedOrderField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcRemoveParkedOrderField["InvestorID"] = "string" +#棰勫煁鎶ュ崟缂栧彿 +CThostFtdcRemoveParkedOrderField["ParkedOrderID"] = "string" +structDict['CThostFtdcRemoveParkedOrderField'] = CThostFtdcRemoveParkedOrderField + + +#鍒犻櫎棰勫煁鎾ゅ崟 +CThostFtdcRemoveParkedOrderActionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcRemoveParkedOrderActionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcRemoveParkedOrderActionField["InvestorID"] = "string" +#棰勫煁鎾ゅ崟缂栧彿 +CThostFtdcRemoveParkedOrderActionField["ParkedOrderActionID"] = "string" +structDict['CThostFtdcRemoveParkedOrderActionField'] = CThostFtdcRemoveParkedOrderActionField + + +#缁忕邯鍏徃鍙彁璧勯噾绠楁硶琛 +CThostFtdcInvestorWithdrawAlgorithmField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcInvestorWithdrawAlgorithmField["BrokerID"] = "string" +#鎶曡祫鑰呰寖鍥 +CThostFtdcInvestorWithdrawAlgorithmField["InvestorRange"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcInvestorWithdrawAlgorithmField["InvestorID"] = "string" +#鍙彁璧勯噾姣斾緥 +CThostFtdcInvestorWithdrawAlgorithmField["UsingRatio"] = "float" +#甯佺浠g爜 +CThostFtdcInvestorWithdrawAlgorithmField["CurrencyID"] = "string" +#璐у竵璐ㄦ娂姣旂巼 +CThostFtdcInvestorWithdrawAlgorithmField["FundMortgageRatio"] = "float" +structDict['CThostFtdcInvestorWithdrawAlgorithmField'] = CThostFtdcInvestorWithdrawAlgorithmField + + +#鏌ヨ缁勫悎鎸佷粨鏄庣粏 +CThostFtdcQryInvestorPositionCombineDetailField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryInvestorPositionCombineDetailField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryInvestorPositionCombineDetailField["InvestorID"] = "string" +#缁勫悎鎸佷粨鍚堢害缂栫爜 +CThostFtdcQryInvestorPositionCombineDetailField["CombInstrumentID"] = "string" +structDict['CThostFtdcQryInvestorPositionCombineDetailField'] = CThostFtdcQryInvestorPositionCombineDetailField + + +#鎴愪氦鍧囦环 +CThostFtdcMarketDataAveragePriceField = {} +#褰撴棩鍧囦环 +CThostFtdcMarketDataAveragePriceField["AveragePrice"] = "float" +structDict['CThostFtdcMarketDataAveragePriceField'] = CThostFtdcMarketDataAveragePriceField + + +#鏍¢獙鎶曡祫鑰呭瘑鐮 +CThostFtdcVerifyInvestorPasswordField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcVerifyInvestorPasswordField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcVerifyInvestorPasswordField["InvestorID"] = "string" +#瀵嗙爜 +CThostFtdcVerifyInvestorPasswordField["Password"] = "string" +structDict['CThostFtdcVerifyInvestorPasswordField'] = CThostFtdcVerifyInvestorPasswordField + + +#鐢ㄦ埛IP +CThostFtdcUserIPField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcUserIPField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcUserIPField["UserID"] = "string" +#IP鍦板潃 +CThostFtdcUserIPField["IPAddress"] = "string" +#IP鍦板潃鎺╃爜 +CThostFtdcUserIPField["IPMask"] = "string" +#Mac鍦板潃 +CThostFtdcUserIPField["MacAddress"] = "string" +structDict['CThostFtdcUserIPField'] = CThostFtdcUserIPField + + +#鐢ㄦ埛浜嬩欢閫氱煡淇℃伅 +CThostFtdcTradingNoticeInfoField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcTradingNoticeInfoField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcTradingNoticeInfoField["InvestorID"] = "string" +#鍙戦佹椂闂 +CThostFtdcTradingNoticeInfoField["SendTime"] = "string" +#娑堟伅姝f枃 +CThostFtdcTradingNoticeInfoField["FieldContent"] = "string" +#搴忓垪绯诲垪鍙 +CThostFtdcTradingNoticeInfoField["SequenceSeries"] = "int" +#搴忓垪鍙 +CThostFtdcTradingNoticeInfoField["SequenceNo"] = "int" +structDict['CThostFtdcTradingNoticeInfoField'] = CThostFtdcTradingNoticeInfoField + + +#鐢ㄦ埛浜嬩欢閫氱煡 +CThostFtdcTradingNoticeField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcTradingNoticeField["BrokerID"] = "string" +#鎶曡祫鑰呰寖鍥 +CThostFtdcTradingNoticeField["InvestorRange"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcTradingNoticeField["InvestorID"] = "string" +#搴忓垪绯诲垪鍙 +CThostFtdcTradingNoticeField["SequenceSeries"] = "int" +#鐢ㄦ埛浠g爜 +CThostFtdcTradingNoticeField["UserID"] = "string" +#鍙戦佹椂闂 +CThostFtdcTradingNoticeField["SendTime"] = "string" +#搴忓垪鍙 +CThostFtdcTradingNoticeField["SequenceNo"] = "int" +#娑堟伅姝f枃 +CThostFtdcTradingNoticeField["FieldContent"] = "string" +structDict['CThostFtdcTradingNoticeField'] = CThostFtdcTradingNoticeField + + +#鏌ヨ浜ゆ槗浜嬩欢閫氱煡 +CThostFtdcQryTradingNoticeField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryTradingNoticeField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryTradingNoticeField["InvestorID"] = "string" +structDict['CThostFtdcQryTradingNoticeField'] = CThostFtdcQryTradingNoticeField + + +#鏌ヨ閿欒鎶ュ崟 +CThostFtdcQryErrOrderField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryErrOrderField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryErrOrderField["InvestorID"] = "string" +structDict['CThostFtdcQryErrOrderField'] = CThostFtdcQryErrOrderField + + +#閿欒鎶ュ崟 +CThostFtdcErrOrderField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcErrOrderField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcErrOrderField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcErrOrderField["InstrumentID"] = "string" +#鎶ュ崟寮曠敤 +CThostFtdcErrOrderField["OrderRef"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcErrOrderField["UserID"] = "string" +#鎶ュ崟浠锋牸鏉′欢 +CThostFtdcErrOrderField["OrderPriceType"] = "string" +#涔板崠鏂瑰悜 +CThostFtdcErrOrderField["Direction"] = "string" +#缁勫悎寮骞虫爣蹇 +CThostFtdcErrOrderField["CombOffsetFlag"] = "string" +#缁勫悎鎶曟満濂椾繚鏍囧織 +CThostFtdcErrOrderField["CombHedgeFlag"] = "string" +#浠锋牸 +CThostFtdcErrOrderField["LimitPrice"] = "float" +#鏁伴噺 +CThostFtdcErrOrderField["VolumeTotalOriginal"] = "int" +#鏈夋晥鏈熺被鍨 +CThostFtdcErrOrderField["TimeCondition"] = "string" +#GTD鏃ユ湡 +CThostFtdcErrOrderField["GTDDate"] = "string" +#鎴愪氦閲忕被鍨 +CThostFtdcErrOrderField["VolumeCondition"] = "string" +#鏈灏忔垚浜ら噺 +CThostFtdcErrOrderField["MinVolume"] = "int" +#瑙﹀彂鏉′欢 +CThostFtdcErrOrderField["ContingentCondition"] = "string" +#姝㈡崯浠 +CThostFtdcErrOrderField["StopPrice"] = "float" +#寮哄钩鍘熷洜 +CThostFtdcErrOrderField["ForceCloseReason"] = "string" +#鑷姩鎸傝捣鏍囧織 +CThostFtdcErrOrderField["IsAutoSuspend"] = "int" +#涓氬姟鍗曞厓 +CThostFtdcErrOrderField["BusinessUnit"] = "string" +#璇锋眰缂栧彿 +CThostFtdcErrOrderField["RequestID"] = "int" +#鐢ㄦ埛寮鸿瘎鏍囧織 +CThostFtdcErrOrderField["UserForceClose"] = "int" +#閿欒浠g爜 +CThostFtdcErrOrderField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcErrOrderField["ErrorMsg"] = "string" +#浜掓崲鍗曟爣蹇 +CThostFtdcErrOrderField["IsSwapOrder"] = "int" +structDict['CThostFtdcErrOrderField'] = CThostFtdcErrOrderField + + +#鏌ヨ閿欒鎶ュ崟鎿嶄綔 +CThostFtdcErrorConditionalOrderField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcErrorConditionalOrderField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcErrorConditionalOrderField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcErrorConditionalOrderField["InstrumentID"] = "string" +#鎶ュ崟寮曠敤 +CThostFtdcErrorConditionalOrderField["OrderRef"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcErrorConditionalOrderField["UserID"] = "string" +#鎶ュ崟浠锋牸鏉′欢 +CThostFtdcErrorConditionalOrderField["OrderPriceType"] = "string" +#涔板崠鏂瑰悜 +CThostFtdcErrorConditionalOrderField["Direction"] = "string" +#缁勫悎寮骞虫爣蹇 +CThostFtdcErrorConditionalOrderField["CombOffsetFlag"] = "string" +#缁勫悎鎶曟満濂椾繚鏍囧織 +CThostFtdcErrorConditionalOrderField["CombHedgeFlag"] = "string" +#浠锋牸 +CThostFtdcErrorConditionalOrderField["LimitPrice"] = "float" +#鏁伴噺 +CThostFtdcErrorConditionalOrderField["VolumeTotalOriginal"] = "int" +#鏈夋晥鏈熺被鍨 +CThostFtdcErrorConditionalOrderField["TimeCondition"] = "string" +#GTD鏃ユ湡 +CThostFtdcErrorConditionalOrderField["GTDDate"] = "string" +#鎴愪氦閲忕被鍨 +CThostFtdcErrorConditionalOrderField["VolumeCondition"] = "string" +#鏈灏忔垚浜ら噺 +CThostFtdcErrorConditionalOrderField["MinVolume"] = "int" +#瑙﹀彂鏉′欢 +CThostFtdcErrorConditionalOrderField["ContingentCondition"] = "string" +#姝㈡崯浠 +CThostFtdcErrorConditionalOrderField["StopPrice"] = "float" +#寮哄钩鍘熷洜 +CThostFtdcErrorConditionalOrderField["ForceCloseReason"] = "string" +#鑷姩鎸傝捣鏍囧織 +CThostFtdcErrorConditionalOrderField["IsAutoSuspend"] = "int" +#涓氬姟鍗曞厓 +CThostFtdcErrorConditionalOrderField["BusinessUnit"] = "string" +#璇锋眰缂栧彿 +CThostFtdcErrorConditionalOrderField["RequestID"] = "int" +#鏈湴鎶ュ崟缂栧彿 +CThostFtdcErrorConditionalOrderField["OrderLocalID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcErrorConditionalOrderField["ExchangeID"] = "string" +#浼氬憳浠g爜 +CThostFtdcErrorConditionalOrderField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcErrorConditionalOrderField["ClientID"] = "string" +#鍚堢害鍦ㄤ氦鏄撴墍鐨勪唬鐮 +CThostFtdcErrorConditionalOrderField["ExchangeInstID"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcErrorConditionalOrderField["TraderID"] = "string" +#瀹夎缂栧彿 +CThostFtdcErrorConditionalOrderField["InstallID"] = "int" +#鎶ュ崟鎻愪氦鐘舵 +CThostFtdcErrorConditionalOrderField["OrderSubmitStatus"] = "string" +#鎶ュ崟鎻愮ず搴忓彿 +CThostFtdcErrorConditionalOrderField["NotifySequence"] = "int" +#浜ゆ槗鏃 +CThostFtdcErrorConditionalOrderField["TradingDay"] = "string" +#缁撶畻缂栧彿 +CThostFtdcErrorConditionalOrderField["SettlementID"] = "int" +#鎶ュ崟缂栧彿 +CThostFtdcErrorConditionalOrderField["OrderSysID"] = "string" +#鎶ュ崟鏉ユ簮 +CThostFtdcErrorConditionalOrderField["OrderSource"] = "string" +#鎶ュ崟鐘舵 +CThostFtdcErrorConditionalOrderField["OrderStatus"] = "string" +#鎶ュ崟绫诲瀷 +CThostFtdcErrorConditionalOrderField["OrderType"] = "string" +#浠婃垚浜ゆ暟閲 +CThostFtdcErrorConditionalOrderField["VolumeTraded"] = "int" +#鍓╀綑鏁伴噺 +CThostFtdcErrorConditionalOrderField["VolumeTotal"] = "int" +#鎶ュ崟鏃ユ湡 +CThostFtdcErrorConditionalOrderField["InsertDate"] = "string" +#濮旀墭鏃堕棿 +CThostFtdcErrorConditionalOrderField["InsertTime"] = "string" +#婵娲绘椂闂 +CThostFtdcErrorConditionalOrderField["ActiveTime"] = "string" +#鎸傝捣鏃堕棿 +CThostFtdcErrorConditionalOrderField["SuspendTime"] = "string" +#鏈鍚庝慨鏀规椂闂 +CThostFtdcErrorConditionalOrderField["UpdateTime"] = "string" +#鎾ら攢鏃堕棿 +CThostFtdcErrorConditionalOrderField["CancelTime"] = "string" +#鏈鍚庝慨鏀逛氦鏄撴墍浜ゆ槗鍛樹唬鐮 +CThostFtdcErrorConditionalOrderField["ActiveTraderID"] = "string" +#缁撶畻浼氬憳缂栧彿 +CThostFtdcErrorConditionalOrderField["ClearingPartID"] = "string" +#搴忓彿 +CThostFtdcErrorConditionalOrderField["SequenceNo"] = "int" +#鍓嶇疆缂栧彿 +CThostFtdcErrorConditionalOrderField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcErrorConditionalOrderField["SessionID"] = "int" +#鐢ㄦ埛绔骇鍝佷俊鎭 +CThostFtdcErrorConditionalOrderField["UserProductInfo"] = "string" +#鐘舵佷俊鎭 +CThostFtdcErrorConditionalOrderField["StatusMsg"] = "string" +#鐢ㄦ埛寮鸿瘎鏍囧織 +CThostFtdcErrorConditionalOrderField["UserForceClose"] = "int" +#鎿嶄綔鐢ㄦ埛浠g爜 +CThostFtdcErrorConditionalOrderField["ActiveUserID"] = "string" +#缁忕邯鍏徃鎶ュ崟缂栧彿 +CThostFtdcErrorConditionalOrderField["BrokerOrderSeq"] = "int" +#鐩稿叧鎶ュ崟 +CThostFtdcErrorConditionalOrderField["RelativeOrderSysID"] = "string" +#閮戝晢鎵鎴愪氦鏁伴噺 +CThostFtdcErrorConditionalOrderField["ZCETotalTradedVolume"] = "int" +#閿欒浠g爜 +CThostFtdcErrorConditionalOrderField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcErrorConditionalOrderField["ErrorMsg"] = "string" +#浜掓崲鍗曟爣蹇 +CThostFtdcErrorConditionalOrderField["IsSwapOrder"] = "int" +structDict['CThostFtdcErrorConditionalOrderField'] = CThostFtdcErrorConditionalOrderField + + +#鏌ヨ閿欒鎶ュ崟鎿嶄綔 +CThostFtdcQryErrOrderActionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryErrOrderActionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryErrOrderActionField["InvestorID"] = "string" +structDict['CThostFtdcQryErrOrderActionField'] = CThostFtdcQryErrOrderActionField + + +#閿欒鎶ュ崟鎿嶄綔 +CThostFtdcErrOrderActionField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcErrOrderActionField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcErrOrderActionField["InvestorID"] = "string" +#鎶ュ崟鎿嶄綔寮曠敤 +CThostFtdcErrOrderActionField["OrderActionRef"] = "int" +#鎶ュ崟寮曠敤 +CThostFtdcErrOrderActionField["OrderRef"] = "string" +#璇锋眰缂栧彿 +CThostFtdcErrOrderActionField["RequestID"] = "int" +#鍓嶇疆缂栧彿 +CThostFtdcErrOrderActionField["FrontID"] = "int" +#浼氳瘽缂栧彿 +CThostFtdcErrOrderActionField["SessionID"] = "int" +#浜ゆ槗鎵浠g爜 +CThostFtdcErrOrderActionField["ExchangeID"] = "string" +#鎶ュ崟缂栧彿 +CThostFtdcErrOrderActionField["OrderSysID"] = "string" +#鎿嶄綔鏍囧織 +CThostFtdcErrOrderActionField["ActionFlag"] = "string" +#浠锋牸 +CThostFtdcErrOrderActionField["LimitPrice"] = "float" +#鏁伴噺鍙樺寲 +CThostFtdcErrOrderActionField["VolumeChange"] = "int" +#鎿嶄綔鏃ユ湡 +CThostFtdcErrOrderActionField["ActionDate"] = "string" +#鎿嶄綔鏃堕棿 +CThostFtdcErrOrderActionField["ActionTime"] = "string" +#浜ゆ槗鎵浜ゆ槗鍛樹唬鐮 +CThostFtdcErrOrderActionField["TraderID"] = "string" +#瀹夎缂栧彿 +CThostFtdcErrOrderActionField["InstallID"] = "int" +#鏈湴鎶ュ崟缂栧彿 +CThostFtdcErrOrderActionField["OrderLocalID"] = "string" +#鎿嶄綔鏈湴缂栧彿 +CThostFtdcErrOrderActionField["ActionLocalID"] = "string" +#浼氬憳浠g爜 +CThostFtdcErrOrderActionField["ParticipantID"] = "string" +#瀹㈡埛浠g爜 +CThostFtdcErrOrderActionField["ClientID"] = "string" +#涓氬姟鍗曞厓 +CThostFtdcErrOrderActionField["BusinessUnit"] = "string" +#鎶ュ崟鎿嶄綔鐘舵 +CThostFtdcErrOrderActionField["OrderActionStatus"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcErrOrderActionField["UserID"] = "string" +#鐘舵佷俊鎭 +CThostFtdcErrOrderActionField["StatusMsg"] = "string" +#鍚堢害浠g爜 +CThostFtdcErrOrderActionField["InstrumentID"] = "string" +#閿欒浠g爜 +CThostFtdcErrOrderActionField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcErrOrderActionField["ErrorMsg"] = "string" +structDict['CThostFtdcErrOrderActionField'] = CThostFtdcErrOrderActionField + + +#鏌ヨ浜ゆ槗鎵鐘舵 +CThostFtdcQryExchangeSequenceField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcQryExchangeSequenceField["ExchangeID"] = "string" +structDict['CThostFtdcQryExchangeSequenceField'] = CThostFtdcQryExchangeSequenceField + + +#浜ゆ槗鎵鐘舵 +CThostFtdcExchangeSequenceField = {} +#浜ゆ槗鎵浠g爜 +CThostFtdcExchangeSequenceField["ExchangeID"] = "string" +#搴忓彿 +CThostFtdcExchangeSequenceField["SequenceNo"] = "int" +#鍚堢害浜ゆ槗鐘舵 +CThostFtdcExchangeSequenceField["MarketStatus"] = "string" +structDict['CThostFtdcExchangeSequenceField'] = CThostFtdcExchangeSequenceField + + +#鏍规嵁浠锋牸鏌ヨ鏈澶ф姤鍗曟暟閲 +CThostFtdcQueryMaxOrderVolumeWithPriceField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQueryMaxOrderVolumeWithPriceField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQueryMaxOrderVolumeWithPriceField["InvestorID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQueryMaxOrderVolumeWithPriceField["InstrumentID"] = "string" +#涔板崠鏂瑰悜 +CThostFtdcQueryMaxOrderVolumeWithPriceField["Direction"] = "string" +#寮骞虫爣蹇 +CThostFtdcQueryMaxOrderVolumeWithPriceField["OffsetFlag"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcQueryMaxOrderVolumeWithPriceField["HedgeFlag"] = "string" +#鏈澶у厑璁告姤鍗曟暟閲 +CThostFtdcQueryMaxOrderVolumeWithPriceField["MaxVolume"] = "int" +#鎶ュ崟浠锋牸 +CThostFtdcQueryMaxOrderVolumeWithPriceField["Price"] = "float" +structDict['CThostFtdcQueryMaxOrderVolumeWithPriceField'] = CThostFtdcQueryMaxOrderVolumeWithPriceField + + +#鏌ヨ缁忕邯鍏徃浜ゆ槗鍙傛暟 +CThostFtdcQryBrokerTradingParamsField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryBrokerTradingParamsField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryBrokerTradingParamsField["InvestorID"] = "string" +#甯佺浠g爜 +CThostFtdcQryBrokerTradingParamsField["CurrencyID"] = "string" +structDict['CThostFtdcQryBrokerTradingParamsField'] = CThostFtdcQryBrokerTradingParamsField + + +#缁忕邯鍏徃浜ゆ槗鍙傛暟 +CThostFtdcBrokerTradingParamsField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcBrokerTradingParamsField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcBrokerTradingParamsField["InvestorID"] = "string" +#淇濊瘉閲戜环鏍肩被鍨 +CThostFtdcBrokerTradingParamsField["MarginPriceType"] = "string" +#鐩堜簭绠楁硶 +CThostFtdcBrokerTradingParamsField["Algorithm"] = "string" +#鍙敤鏄惁鍖呭惈骞充粨鐩堝埄 +CThostFtdcBrokerTradingParamsField["AvailIncludeCloseProfit"] = "string" +#甯佺浠g爜 +CThostFtdcBrokerTradingParamsField["CurrencyID"] = "string" +#鏈熸潈鏉冨埄閲戜环鏍肩被鍨 +CThostFtdcBrokerTradingParamsField["OptionRoyaltyPriceType"] = "string" +structDict['CThostFtdcBrokerTradingParamsField'] = CThostFtdcBrokerTradingParamsField + + +#鏌ヨ缁忕邯鍏徃浜ゆ槗绠楁硶 +CThostFtdcQryBrokerTradingAlgosField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryBrokerTradingAlgosField["BrokerID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryBrokerTradingAlgosField["ExchangeID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryBrokerTradingAlgosField["InstrumentID"] = "string" +structDict['CThostFtdcQryBrokerTradingAlgosField'] = CThostFtdcQryBrokerTradingAlgosField + + +#缁忕邯鍏徃浜ゆ槗绠楁硶 +CThostFtdcBrokerTradingAlgosField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcBrokerTradingAlgosField["BrokerID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcBrokerTradingAlgosField["ExchangeID"] = "string" +#鍚堢害浠g爜 +CThostFtdcBrokerTradingAlgosField["InstrumentID"] = "string" +#鎸佷粨澶勭悊绠楁硶缂栧彿 +CThostFtdcBrokerTradingAlgosField["HandlePositionAlgoID"] = "string" +#瀵绘壘淇濊瘉閲戠巼绠楁硶缂栧彿 +CThostFtdcBrokerTradingAlgosField["FindMarginRateAlgoID"] = "string" +#璧勯噾澶勭悊绠楁硶缂栧彿 +CThostFtdcBrokerTradingAlgosField["HandleTradingAccountAlgoID"] = "string" +structDict['CThostFtdcBrokerTradingAlgosField'] = CThostFtdcBrokerTradingAlgosField + + +#鏌ヨ缁忕邯鍏徃璧勯噾 +CThostFtdcQueryBrokerDepositField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQueryBrokerDepositField["BrokerID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQueryBrokerDepositField["ExchangeID"] = "string" +structDict['CThostFtdcQueryBrokerDepositField'] = CThostFtdcQueryBrokerDepositField + + +#缁忕邯鍏徃璧勯噾 +CThostFtdcBrokerDepositField = {} +#浜ゆ槗鏃ユ湡 +CThostFtdcBrokerDepositField["TradingDay"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcBrokerDepositField["BrokerID"] = "string" +#浼氬憳浠g爜 +CThostFtdcBrokerDepositField["ParticipantID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcBrokerDepositField["ExchangeID"] = "string" +#涓婃缁撶畻鍑嗗閲 +CThostFtdcBrokerDepositField["PreBalance"] = "float" +#褰撳墠淇濊瘉閲戞婚 +CThostFtdcBrokerDepositField["CurrMargin"] = "float" +#骞充粨鐩堜簭 +CThostFtdcBrokerDepositField["CloseProfit"] = "float" +#鏈熻揣缁撶畻鍑嗗閲 +CThostFtdcBrokerDepositField["Balance"] = "float" +#鍏ラ噾閲戦 +CThostFtdcBrokerDepositField["Deposit"] = "float" +#鍑洪噾閲戦 +CThostFtdcBrokerDepositField["Withdraw"] = "float" +#鍙彁璧勯噾 +CThostFtdcBrokerDepositField["Available"] = "float" +#鍩烘湰鍑嗗閲 +CThostFtdcBrokerDepositField["Reserve"] = "float" +#鍐荤粨鐨勪繚璇侀噾 +CThostFtdcBrokerDepositField["FrozenMargin"] = "float" +structDict['CThostFtdcBrokerDepositField'] = CThostFtdcBrokerDepositField + + +#鏌ヨ淇濊瘉閲戠洃绠$郴缁熺粡绾叕鍙稿瘑閽 +CThostFtdcQryCFMMCBrokerKeyField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryCFMMCBrokerKeyField["BrokerID"] = "string" +structDict['CThostFtdcQryCFMMCBrokerKeyField'] = CThostFtdcQryCFMMCBrokerKeyField + + +#淇濊瘉閲戠洃绠$郴缁熺粡绾叕鍙稿瘑閽 +CThostFtdcCFMMCBrokerKeyField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcCFMMCBrokerKeyField["BrokerID"] = "string" +#缁忕邯鍏徃缁熶竴缂栫爜 +CThostFtdcCFMMCBrokerKeyField["ParticipantID"] = "string" +#瀵嗛挜鐢熸垚鏃ユ湡 +CThostFtdcCFMMCBrokerKeyField["CreateDate"] = "string" +#瀵嗛挜鐢熸垚鏃堕棿 +CThostFtdcCFMMCBrokerKeyField["CreateTime"] = "string" +#瀵嗛挜缂栧彿 +CThostFtdcCFMMCBrokerKeyField["KeyID"] = "int" +#鍔ㄦ佸瘑閽 +CThostFtdcCFMMCBrokerKeyField["CurrentKey"] = "string" +#鍔ㄦ佸瘑閽ョ被鍨 +CThostFtdcCFMMCBrokerKeyField["KeyKind"] = "string" +structDict['CThostFtdcCFMMCBrokerKeyField'] = CThostFtdcCFMMCBrokerKeyField + + +#淇濊瘉閲戠洃绠$郴缁熺粡绾叕鍙歌祫閲戣处鎴峰瘑閽 +CThostFtdcCFMMCTradingAccountKeyField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcCFMMCTradingAccountKeyField["BrokerID"] = "string" +#缁忕邯鍏徃缁熶竴缂栫爜 +CThostFtdcCFMMCTradingAccountKeyField["ParticipantID"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcCFMMCTradingAccountKeyField["AccountID"] = "string" +#瀵嗛挜缂栧彿 +CThostFtdcCFMMCTradingAccountKeyField["KeyID"] = "int" +#鍔ㄦ佸瘑閽 +CThostFtdcCFMMCTradingAccountKeyField["CurrentKey"] = "string" +structDict['CThostFtdcCFMMCTradingAccountKeyField'] = CThostFtdcCFMMCTradingAccountKeyField + + +#璇锋眰鏌ヨ淇濊瘉閲戠洃绠$郴缁熺粡绾叕鍙歌祫閲戣处鎴峰瘑閽 +CThostFtdcQryCFMMCTradingAccountKeyField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryCFMMCTradingAccountKeyField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryCFMMCTradingAccountKeyField["InvestorID"] = "string" +structDict['CThostFtdcQryCFMMCTradingAccountKeyField'] = CThostFtdcQryCFMMCTradingAccountKeyField + + +#鐢ㄦ埛鍔ㄦ佷护鐗屽弬鏁 +CThostFtdcBrokerUserOTPParamField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcBrokerUserOTPParamField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcBrokerUserOTPParamField["UserID"] = "string" +#鍔ㄦ佷护鐗屾彁渚涘晢 +CThostFtdcBrokerUserOTPParamField["OTPVendorsID"] = "string" +#鍔ㄦ佷护鐗屽簭鍒楀彿 +CThostFtdcBrokerUserOTPParamField["SerialNumber"] = "string" +#浠ょ墝瀵嗛挜 +CThostFtdcBrokerUserOTPParamField["AuthKey"] = "string" +#婕傜Щ鍊 +CThostFtdcBrokerUserOTPParamField["LastDrift"] = "int" +#鎴愬姛鍊 +CThostFtdcBrokerUserOTPParamField["LastSuccess"] = "int" +#鍔ㄦ佷护鐗岀被鍨 +CThostFtdcBrokerUserOTPParamField["OTPType"] = "string" +structDict['CThostFtdcBrokerUserOTPParamField'] = CThostFtdcBrokerUserOTPParamField + + +#鎵嬪伐鍚屾鐢ㄦ埛鍔ㄦ佷护鐗 +CThostFtdcManualSyncBrokerUserOTPField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcManualSyncBrokerUserOTPField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcManualSyncBrokerUserOTPField["UserID"] = "string" +#鍔ㄦ佷护鐗岀被鍨 +CThostFtdcManualSyncBrokerUserOTPField["OTPType"] = "string" +#绗竴涓姩鎬佸瘑鐮 +CThostFtdcManualSyncBrokerUserOTPField["FirstOTP"] = "string" +#绗簩涓姩鎬佸瘑鐮 +CThostFtdcManualSyncBrokerUserOTPField["SecondOTP"] = "string" +structDict['CThostFtdcManualSyncBrokerUserOTPField'] = CThostFtdcManualSyncBrokerUserOTPField + + +#鎶曡祫鑰呮墜缁垂鐜囨ā鏉 +CThostFtdcCommRateModelField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcCommRateModelField["BrokerID"] = "string" +#鎵嬬画璐圭巼妯℃澘浠g爜 +CThostFtdcCommRateModelField["CommModelID"] = "string" +#妯℃澘鍚嶇О +CThostFtdcCommRateModelField["CommModelName"] = "string" +structDict['CThostFtdcCommRateModelField'] = CThostFtdcCommRateModelField + + +#璇锋眰鏌ヨ鎶曡祫鑰呮墜缁垂鐜囨ā鏉 +CThostFtdcQryCommRateModelField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryCommRateModelField["BrokerID"] = "string" +#鎵嬬画璐圭巼妯℃澘浠g爜 +CThostFtdcQryCommRateModelField["CommModelID"] = "string" +structDict['CThostFtdcQryCommRateModelField'] = CThostFtdcQryCommRateModelField + + +#鎶曡祫鑰呬繚璇侀噾鐜囨ā鏉 +CThostFtdcMarginModelField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcMarginModelField["BrokerID"] = "string" +#淇濊瘉閲戠巼妯℃澘浠g爜 +CThostFtdcMarginModelField["MarginModelID"] = "string" +#妯℃澘鍚嶇О +CThostFtdcMarginModelField["MarginModelName"] = "string" +structDict['CThostFtdcMarginModelField'] = CThostFtdcMarginModelField + + +#璇锋眰鏌ヨ鎶曡祫鑰呬繚璇侀噾鐜囨ā鏉 +CThostFtdcQryMarginModelField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryMarginModelField["BrokerID"] = "string" +#淇濊瘉閲戠巼妯℃澘浠g爜 +CThostFtdcQryMarginModelField["MarginModelID"] = "string" +structDict['CThostFtdcQryMarginModelField'] = CThostFtdcQryMarginModelField + + +#浠撳崟鎶樻姷淇℃伅 +CThostFtdcEWarrantOffsetField = {} +#浜ゆ槗鏃ユ湡 +CThostFtdcEWarrantOffsetField["TradingDay"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcEWarrantOffsetField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcEWarrantOffsetField["InvestorID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcEWarrantOffsetField["ExchangeID"] = "string" +#鍚堢害浠g爜 +CThostFtdcEWarrantOffsetField["InstrumentID"] = "string" +#涔板崠鏂瑰悜 +CThostFtdcEWarrantOffsetField["Direction"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcEWarrantOffsetField["HedgeFlag"] = "string" +#鏁伴噺 +CThostFtdcEWarrantOffsetField["Volume"] = "int" +structDict['CThostFtdcEWarrantOffsetField'] = CThostFtdcEWarrantOffsetField + + +#鏌ヨ浠撳崟鎶樻姷淇℃伅 +CThostFtdcQryEWarrantOffsetField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryEWarrantOffsetField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryEWarrantOffsetField["InvestorID"] = "string" +#浜ゆ槗鎵浠g爜 +CThostFtdcQryEWarrantOffsetField["ExchangeID"] = "string" +#鍚堢害浠g爜 +CThostFtdcQryEWarrantOffsetField["InstrumentID"] = "string" +structDict['CThostFtdcQryEWarrantOffsetField'] = CThostFtdcQryEWarrantOffsetField + + +#鏌ヨ鎶曡祫鑰呭搧绉/璺ㄥ搧绉嶄繚璇侀噾 +CThostFtdcQryInvestorProductGroupMarginField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryInvestorProductGroupMarginField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcQryInvestorProductGroupMarginField["InvestorID"] = "string" +#鍝佺/璺ㄥ搧绉嶆爣绀 +CThostFtdcQryInvestorProductGroupMarginField["ProductGroupID"] = "string" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcQryInvestorProductGroupMarginField["HedgeFlag"] = "string" +structDict['CThostFtdcQryInvestorProductGroupMarginField'] = CThostFtdcQryInvestorProductGroupMarginField + + +#鎶曡祫鑰呭搧绉/璺ㄥ搧绉嶄繚璇侀噾 +CThostFtdcInvestorProductGroupMarginField = {} +#鍝佺/璺ㄥ搧绉嶆爣绀 +CThostFtdcInvestorProductGroupMarginField["ProductGroupID"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcInvestorProductGroupMarginField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcInvestorProductGroupMarginField["InvestorID"] = "string" +#浜ゆ槗鏃 +CThostFtdcInvestorProductGroupMarginField["TradingDay"] = "string" +#缁撶畻缂栧彿 +CThostFtdcInvestorProductGroupMarginField["SettlementID"] = "int" +#鍐荤粨鐨勪繚璇侀噾 +CThostFtdcInvestorProductGroupMarginField["FrozenMargin"] = "float" +#澶氬ご鍐荤粨鐨勪繚璇侀噾 +CThostFtdcInvestorProductGroupMarginField["LongFrozenMargin"] = "float" +#绌哄ご鍐荤粨鐨勪繚璇侀噾 +CThostFtdcInvestorProductGroupMarginField["ShortFrozenMargin"] = "float" +#鍗犵敤鐨勪繚璇侀噾 +CThostFtdcInvestorProductGroupMarginField["UseMargin"] = "float" +#澶氬ご淇濊瘉閲 +CThostFtdcInvestorProductGroupMarginField["LongUseMargin"] = "float" +#绌哄ご淇濊瘉閲 +CThostFtdcInvestorProductGroupMarginField["ShortUseMargin"] = "float" +#浜ゆ槗鎵淇濊瘉閲 +CThostFtdcInvestorProductGroupMarginField["ExchMargin"] = "float" +#浜ゆ槗鎵澶氬ご淇濊瘉閲 +CThostFtdcInvestorProductGroupMarginField["LongExchMargin"] = "float" +#浜ゆ槗鎵绌哄ご淇濊瘉閲 +CThostFtdcInvestorProductGroupMarginField["ShortExchMargin"] = "float" +#骞充粨鐩堜簭 +CThostFtdcInvestorProductGroupMarginField["CloseProfit"] = "float" +#鍐荤粨鐨勬墜缁垂 +CThostFtdcInvestorProductGroupMarginField["FrozenCommission"] = "float" +#鎵嬬画璐 +CThostFtdcInvestorProductGroupMarginField["Commission"] = "float" +#鍐荤粨鐨勮祫閲 +CThostFtdcInvestorProductGroupMarginField["FrozenCash"] = "float" +#璧勯噾宸 +CThostFtdcInvestorProductGroupMarginField["CashIn"] = "float" +#鎸佷粨鐩堜簭 +CThostFtdcInvestorProductGroupMarginField["PositionProfit"] = "float" +#鎶樻姷鎬婚噾棰 +CThostFtdcInvestorProductGroupMarginField["OffsetAmount"] = "float" +#澶氬ご鎶樻姷鎬婚噾棰 +CThostFtdcInvestorProductGroupMarginField["LongOffsetAmount"] = "float" +#绌哄ご鎶樻姷鎬婚噾棰 +CThostFtdcInvestorProductGroupMarginField["ShortOffsetAmount"] = "float" +#浜ゆ槗鎵鎶樻姷鎬婚噾棰 +CThostFtdcInvestorProductGroupMarginField["ExchOffsetAmount"] = "float" +#浜ゆ槗鎵澶氬ご鎶樻姷鎬婚噾棰 +CThostFtdcInvestorProductGroupMarginField["LongExchOffsetAmount"] = "float" +#浜ゆ槗鎵绌哄ご鎶樻姷鎬婚噾棰 +CThostFtdcInvestorProductGroupMarginField["ShortExchOffsetAmount"] = "float" +#鎶曟満濂椾繚鏍囧織 +CThostFtdcInvestorProductGroupMarginField["HedgeFlag"] = "string" +structDict['CThostFtdcInvestorProductGroupMarginField'] = CThostFtdcInvestorProductGroupMarginField + + +#杞笎寮鎴疯姹 +CThostFtdcReqOpenAccountField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcReqOpenAccountField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcReqOpenAccountField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqOpenAccountField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcReqOpenAccountField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqOpenAccountField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcReqOpenAccountField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcReqOpenAccountField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcReqOpenAccountField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcReqOpenAccountField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcReqOpenAccountField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcReqOpenAccountField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcReqOpenAccountField["SessionID"] = "int" +#瀹㈡埛濮撳悕 +CThostFtdcReqOpenAccountField["CustomerName"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcReqOpenAccountField["IdCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcReqOpenAccountField["IdentifiedCardNo"] = "string" +#鎬у埆 +CThostFtdcReqOpenAccountField["Gender"] = "string" +#鍥藉浠g爜 +CThostFtdcReqOpenAccountField["CountryCode"] = "string" +#瀹㈡埛绫诲瀷 +CThostFtdcReqOpenAccountField["CustType"] = "string" +#鍦板潃 +CThostFtdcReqOpenAccountField["Address"] = "string" +#閭紪 +CThostFtdcReqOpenAccountField["ZipCode"] = "string" +#鐢佃瘽鍙风爜 +CThostFtdcReqOpenAccountField["Telephone"] = "string" +#鎵嬫満 +CThostFtdcReqOpenAccountField["MobilePhone"] = "string" +#浼犵湡 +CThostFtdcReqOpenAccountField["Fax"] = "string" +#鐢靛瓙閭欢 +CThostFtdcReqOpenAccountField["EMail"] = "string" +#璧勯噾璐︽埛鐘舵 +CThostFtdcReqOpenAccountField["MoneyAccountStatus"] = "string" +#閾惰甯愬彿 +CThostFtdcReqOpenAccountField["BankAccount"] = "string" +#閾惰瀵嗙爜 +CThostFtdcReqOpenAccountField["BankPassWord"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcReqOpenAccountField["AccountID"] = "string" +#鏈熻揣瀵嗙爜 +CThostFtdcReqOpenAccountField["Password"] = "string" +#瀹夎缂栧彿 +CThostFtdcReqOpenAccountField["InstallID"] = "int" +#楠岃瘉瀹㈡埛璇佷欢鍙风爜鏍囧織 +CThostFtdcReqOpenAccountField["VerifyCertNoFlag"] = "string" +#甯佺浠g爜 +CThostFtdcReqOpenAccountField["CurrencyID"] = "string" +#姹囬挒鏍囧織 +CThostFtdcReqOpenAccountField["CashExchangeCode"] = "string" +#鎽樿 +CThostFtdcReqOpenAccountField["Digest"] = "string" +#閾惰甯愬彿绫诲瀷 +CThostFtdcReqOpenAccountField["BankAccType"] = "string" +#娓犻亾鏍囧織 +CThostFtdcReqOpenAccountField["DeviceID"] = "string" +#鏈熻揣鍗曚綅甯愬彿绫诲瀷 +CThostFtdcReqOpenAccountField["BankSecuAccType"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcReqOpenAccountField["BrokerIDByBank"] = "string" +#鏈熻揣鍗曚綅甯愬彿 +CThostFtdcReqOpenAccountField["BankSecuAcc"] = "string" +#閾惰瀵嗙爜鏍囧織 +CThostFtdcReqOpenAccountField["BankPwdFlag"] = "string" +#鏈熻揣璧勯噾瀵嗙爜鏍稿鏍囧織 +CThostFtdcReqOpenAccountField["SecuPwdFlag"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcReqOpenAccountField["OperNo"] = "string" +#浜ゆ槗ID +CThostFtdcReqOpenAccountField["TID"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcReqOpenAccountField["UserID"] = "string" +structDict['CThostFtdcReqOpenAccountField'] = CThostFtdcReqOpenAccountField + + +#杞笎閿鎴疯姹 +CThostFtdcReqCancelAccountField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcReqCancelAccountField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcReqCancelAccountField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqCancelAccountField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcReqCancelAccountField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqCancelAccountField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcReqCancelAccountField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcReqCancelAccountField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcReqCancelAccountField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcReqCancelAccountField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcReqCancelAccountField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcReqCancelAccountField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcReqCancelAccountField["SessionID"] = "int" +#瀹㈡埛濮撳悕 +CThostFtdcReqCancelAccountField["CustomerName"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcReqCancelAccountField["IdCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcReqCancelAccountField["IdentifiedCardNo"] = "string" +#鎬у埆 +CThostFtdcReqCancelAccountField["Gender"] = "string" +#鍥藉浠g爜 +CThostFtdcReqCancelAccountField["CountryCode"] = "string" +#瀹㈡埛绫诲瀷 +CThostFtdcReqCancelAccountField["CustType"] = "string" +#鍦板潃 +CThostFtdcReqCancelAccountField["Address"] = "string" +#閭紪 +CThostFtdcReqCancelAccountField["ZipCode"] = "string" +#鐢佃瘽鍙风爜 +CThostFtdcReqCancelAccountField["Telephone"] = "string" +#鎵嬫満 +CThostFtdcReqCancelAccountField["MobilePhone"] = "string" +#浼犵湡 +CThostFtdcReqCancelAccountField["Fax"] = "string" +#鐢靛瓙閭欢 +CThostFtdcReqCancelAccountField["EMail"] = "string" +#璧勯噾璐︽埛鐘舵 +CThostFtdcReqCancelAccountField["MoneyAccountStatus"] = "string" +#閾惰甯愬彿 +CThostFtdcReqCancelAccountField["BankAccount"] = "string" +#閾惰瀵嗙爜 +CThostFtdcReqCancelAccountField["BankPassWord"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcReqCancelAccountField["AccountID"] = "string" +#鏈熻揣瀵嗙爜 +CThostFtdcReqCancelAccountField["Password"] = "string" +#瀹夎缂栧彿 +CThostFtdcReqCancelAccountField["InstallID"] = "int" +#楠岃瘉瀹㈡埛璇佷欢鍙风爜鏍囧織 +CThostFtdcReqCancelAccountField["VerifyCertNoFlag"] = "string" +#甯佺浠g爜 +CThostFtdcReqCancelAccountField["CurrencyID"] = "string" +#姹囬挒鏍囧織 +CThostFtdcReqCancelAccountField["CashExchangeCode"] = "string" +#鎽樿 +CThostFtdcReqCancelAccountField["Digest"] = "string" +#閾惰甯愬彿绫诲瀷 +CThostFtdcReqCancelAccountField["BankAccType"] = "string" +#娓犻亾鏍囧織 +CThostFtdcReqCancelAccountField["DeviceID"] = "string" +#鏈熻揣鍗曚綅甯愬彿绫诲瀷 +CThostFtdcReqCancelAccountField["BankSecuAccType"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcReqCancelAccountField["BrokerIDByBank"] = "string" +#鏈熻揣鍗曚綅甯愬彿 +CThostFtdcReqCancelAccountField["BankSecuAcc"] = "string" +#閾惰瀵嗙爜鏍囧織 +CThostFtdcReqCancelAccountField["BankPwdFlag"] = "string" +#鏈熻揣璧勯噾瀵嗙爜鏍稿鏍囧織 +CThostFtdcReqCancelAccountField["SecuPwdFlag"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcReqCancelAccountField["OperNo"] = "string" +#浜ゆ槗ID +CThostFtdcReqCancelAccountField["TID"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcReqCancelAccountField["UserID"] = "string" +structDict['CThostFtdcReqCancelAccountField'] = CThostFtdcReqCancelAccountField + + +#鍙樻洿閾惰璐︽埛璇锋眰 +CThostFtdcReqChangeAccountField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcReqChangeAccountField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcReqChangeAccountField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqChangeAccountField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcReqChangeAccountField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqChangeAccountField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcReqChangeAccountField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcReqChangeAccountField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcReqChangeAccountField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcReqChangeAccountField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcReqChangeAccountField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcReqChangeAccountField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcReqChangeAccountField["SessionID"] = "int" +#瀹㈡埛濮撳悕 +CThostFtdcReqChangeAccountField["CustomerName"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcReqChangeAccountField["IdCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcReqChangeAccountField["IdentifiedCardNo"] = "string" +#鎬у埆 +CThostFtdcReqChangeAccountField["Gender"] = "string" +#鍥藉浠g爜 +CThostFtdcReqChangeAccountField["CountryCode"] = "string" +#瀹㈡埛绫诲瀷 +CThostFtdcReqChangeAccountField["CustType"] = "string" +#鍦板潃 +CThostFtdcReqChangeAccountField["Address"] = "string" +#閭紪 +CThostFtdcReqChangeAccountField["ZipCode"] = "string" +#鐢佃瘽鍙风爜 +CThostFtdcReqChangeAccountField["Telephone"] = "string" +#鎵嬫満 +CThostFtdcReqChangeAccountField["MobilePhone"] = "string" +#浼犵湡 +CThostFtdcReqChangeAccountField["Fax"] = "string" +#鐢靛瓙閭欢 +CThostFtdcReqChangeAccountField["EMail"] = "string" +#璧勯噾璐︽埛鐘舵 +CThostFtdcReqChangeAccountField["MoneyAccountStatus"] = "string" +#閾惰甯愬彿 +CThostFtdcReqChangeAccountField["BankAccount"] = "string" +#閾惰瀵嗙爜 +CThostFtdcReqChangeAccountField["BankPassWord"] = "string" +#鏂伴摱琛屽笎鍙 +CThostFtdcReqChangeAccountField["NewBankAccount"] = "string" +#鏂伴摱琛屽瘑鐮 +CThostFtdcReqChangeAccountField["NewBankPassWord"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcReqChangeAccountField["AccountID"] = "string" +#鏈熻揣瀵嗙爜 +CThostFtdcReqChangeAccountField["Password"] = "string" +#閾惰甯愬彿绫诲瀷 +CThostFtdcReqChangeAccountField["BankAccType"] = "string" +#瀹夎缂栧彿 +CThostFtdcReqChangeAccountField["InstallID"] = "int" +#楠岃瘉瀹㈡埛璇佷欢鍙风爜鏍囧織 +CThostFtdcReqChangeAccountField["VerifyCertNoFlag"] = "string" +#甯佺浠g爜 +CThostFtdcReqChangeAccountField["CurrencyID"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcReqChangeAccountField["BrokerIDByBank"] = "string" +#閾惰瀵嗙爜鏍囧織 +CThostFtdcReqChangeAccountField["BankPwdFlag"] = "string" +#鏈熻揣璧勯噾瀵嗙爜鏍稿鏍囧織 +CThostFtdcReqChangeAccountField["SecuPwdFlag"] = "string" +#浜ゆ槗ID +CThostFtdcReqChangeAccountField["TID"] = "int" +#鎽樿 +CThostFtdcReqChangeAccountField["Digest"] = "string" +structDict['CThostFtdcReqChangeAccountField'] = CThostFtdcReqChangeAccountField + + +#杞处璇锋眰 +CThostFtdcReqTransferField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcReqTransferField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcReqTransferField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqTransferField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcReqTransferField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqTransferField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcReqTransferField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcReqTransferField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcReqTransferField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcReqTransferField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcReqTransferField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcReqTransferField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcReqTransferField["SessionID"] = "int" +#瀹㈡埛濮撳悕 +CThostFtdcReqTransferField["CustomerName"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcReqTransferField["IdCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcReqTransferField["IdentifiedCardNo"] = "string" +#瀹㈡埛绫诲瀷 +CThostFtdcReqTransferField["CustType"] = "string" +#閾惰甯愬彿 +CThostFtdcReqTransferField["BankAccount"] = "string" +#閾惰瀵嗙爜 +CThostFtdcReqTransferField["BankPassWord"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcReqTransferField["AccountID"] = "string" +#鏈熻揣瀵嗙爜 +CThostFtdcReqTransferField["Password"] = "string" +#瀹夎缂栧彿 +CThostFtdcReqTransferField["InstallID"] = "int" +#鏈熻揣鍏徃娴佹按鍙 +CThostFtdcReqTransferField["FutureSerial"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcReqTransferField["UserID"] = "string" +#楠岃瘉瀹㈡埛璇佷欢鍙风爜鏍囧織 +CThostFtdcReqTransferField["VerifyCertNoFlag"] = "string" +#甯佺浠g爜 +CThostFtdcReqTransferField["CurrencyID"] = "string" +#杞笎閲戦 +CThostFtdcReqTransferField["TradeAmount"] = "float" +#鏈熻揣鍙彇閲戦 +CThostFtdcReqTransferField["FutureFetchAmount"] = "float" +#璐圭敤鏀粯鏍囧織 +CThostFtdcReqTransferField["FeePayFlag"] = "string" +#搴旀敹瀹㈡埛璐圭敤 +CThostFtdcReqTransferField["CustFee"] = "float" +#搴旀敹鏈熻揣鍏徃璐圭敤 +CThostFtdcReqTransferField["BrokerFee"] = "float" +#鍙戦佹柟缁欐帴鏀舵柟鐨勬秷鎭 +CThostFtdcReqTransferField["Message"] = "string" +#鎽樿 +CThostFtdcReqTransferField["Digest"] = "string" +#閾惰甯愬彿绫诲瀷 +CThostFtdcReqTransferField["BankAccType"] = "string" +#娓犻亾鏍囧織 +CThostFtdcReqTransferField["DeviceID"] = "string" +#鏈熻揣鍗曚綅甯愬彿绫诲瀷 +CThostFtdcReqTransferField["BankSecuAccType"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcReqTransferField["BrokerIDByBank"] = "string" +#鏈熻揣鍗曚綅甯愬彿 +CThostFtdcReqTransferField["BankSecuAcc"] = "string" +#閾惰瀵嗙爜鏍囧織 +CThostFtdcReqTransferField["BankPwdFlag"] = "string" +#鏈熻揣璧勯噾瀵嗙爜鏍稿鏍囧織 +CThostFtdcReqTransferField["SecuPwdFlag"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcReqTransferField["OperNo"] = "string" +#璇锋眰缂栧彿 +CThostFtdcReqTransferField["RequestID"] = "int" +#浜ゆ槗ID +CThostFtdcReqTransferField["TID"] = "int" +#杞处浜ゆ槗鐘舵 +CThostFtdcReqTransferField["TransferStatus"] = "string" +structDict['CThostFtdcReqTransferField'] = CThostFtdcReqTransferField + + +#閾惰鍙戣捣閾惰璧勯噾杞湡璐у搷搴 +CThostFtdcRspTransferField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcRspTransferField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcRspTransferField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcRspTransferField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcRspTransferField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcRspTransferField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcRspTransferField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcRspTransferField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcRspTransferField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcRspTransferField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcRspTransferField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcRspTransferField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcRspTransferField["SessionID"] = "int" +#瀹㈡埛濮撳悕 +CThostFtdcRspTransferField["CustomerName"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcRspTransferField["IdCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcRspTransferField["IdentifiedCardNo"] = "string" +#瀹㈡埛绫诲瀷 +CThostFtdcRspTransferField["CustType"] = "string" +#閾惰甯愬彿 +CThostFtdcRspTransferField["BankAccount"] = "string" +#閾惰瀵嗙爜 +CThostFtdcRspTransferField["BankPassWord"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcRspTransferField["AccountID"] = "string" +#鏈熻揣瀵嗙爜 +CThostFtdcRspTransferField["Password"] = "string" +#瀹夎缂栧彿 +CThostFtdcRspTransferField["InstallID"] = "int" +#鏈熻揣鍏徃娴佹按鍙 +CThostFtdcRspTransferField["FutureSerial"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcRspTransferField["UserID"] = "string" +#楠岃瘉瀹㈡埛璇佷欢鍙风爜鏍囧織 +CThostFtdcRspTransferField["VerifyCertNoFlag"] = "string" +#甯佺浠g爜 +CThostFtdcRspTransferField["CurrencyID"] = "string" +#杞笎閲戦 +CThostFtdcRspTransferField["TradeAmount"] = "float" +#鏈熻揣鍙彇閲戦 +CThostFtdcRspTransferField["FutureFetchAmount"] = "float" +#璐圭敤鏀粯鏍囧織 +CThostFtdcRspTransferField["FeePayFlag"] = "string" +#搴旀敹瀹㈡埛璐圭敤 +CThostFtdcRspTransferField["CustFee"] = "float" +#搴旀敹鏈熻揣鍏徃璐圭敤 +CThostFtdcRspTransferField["BrokerFee"] = "float" +#鍙戦佹柟缁欐帴鏀舵柟鐨勬秷鎭 +CThostFtdcRspTransferField["Message"] = "string" +#鎽樿 +CThostFtdcRspTransferField["Digest"] = "string" +#閾惰甯愬彿绫诲瀷 +CThostFtdcRspTransferField["BankAccType"] = "string" +#娓犻亾鏍囧織 +CThostFtdcRspTransferField["DeviceID"] = "string" +#鏈熻揣鍗曚綅甯愬彿绫诲瀷 +CThostFtdcRspTransferField["BankSecuAccType"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcRspTransferField["BrokerIDByBank"] = "string" +#鏈熻揣鍗曚綅甯愬彿 +CThostFtdcRspTransferField["BankSecuAcc"] = "string" +#閾惰瀵嗙爜鏍囧織 +CThostFtdcRspTransferField["BankPwdFlag"] = "string" +#鏈熻揣璧勯噾瀵嗙爜鏍稿鏍囧織 +CThostFtdcRspTransferField["SecuPwdFlag"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcRspTransferField["OperNo"] = "string" +#璇锋眰缂栧彿 +CThostFtdcRspTransferField["RequestID"] = "int" +#浜ゆ槗ID +CThostFtdcRspTransferField["TID"] = "int" +#杞处浜ゆ槗鐘舵 +CThostFtdcRspTransferField["TransferStatus"] = "string" +#閿欒浠g爜 +CThostFtdcRspTransferField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcRspTransferField["ErrorMsg"] = "string" +structDict['CThostFtdcRspTransferField'] = CThostFtdcRspTransferField + + +#鍐叉璇锋眰 +CThostFtdcReqRepealField = {} +#鍐叉鏃堕棿闂撮殧 +CThostFtdcReqRepealField["RepealTimeInterval"] = "int" +#宸茬粡鍐叉娆℃暟 +CThostFtdcReqRepealField["RepealedTimes"] = "int" +#閾惰鍐叉鏍囧織 +CThostFtdcReqRepealField["BankRepealFlag"] = "string" +#鏈熷晢鍐叉鏍囧織 +CThostFtdcReqRepealField["BrokerRepealFlag"] = "string" +#琚啿姝e钩鍙版祦姘村彿 +CThostFtdcReqRepealField["PlateRepealSerial"] = "int" +#琚啿姝i摱琛屾祦姘村彿 +CThostFtdcReqRepealField["BankRepealSerial"] = "string" +#琚啿姝f湡璐ф祦姘村彿 +CThostFtdcReqRepealField["FutureRepealSerial"] = "int" +#涓氬姟鍔熻兘鐮 +CThostFtdcReqRepealField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcReqRepealField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqRepealField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcReqRepealField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqRepealField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcReqRepealField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcReqRepealField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcReqRepealField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcReqRepealField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcReqRepealField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcReqRepealField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcReqRepealField["SessionID"] = "int" +#瀹㈡埛濮撳悕 +CThostFtdcReqRepealField["CustomerName"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcReqRepealField["IdCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcReqRepealField["IdentifiedCardNo"] = "string" +#瀹㈡埛绫诲瀷 +CThostFtdcReqRepealField["CustType"] = "string" +#閾惰甯愬彿 +CThostFtdcReqRepealField["BankAccount"] = "string" +#閾惰瀵嗙爜 +CThostFtdcReqRepealField["BankPassWord"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcReqRepealField["AccountID"] = "string" +#鏈熻揣瀵嗙爜 +CThostFtdcReqRepealField["Password"] = "string" +#瀹夎缂栧彿 +CThostFtdcReqRepealField["InstallID"] = "int" +#鏈熻揣鍏徃娴佹按鍙 +CThostFtdcReqRepealField["FutureSerial"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcReqRepealField["UserID"] = "string" +#楠岃瘉瀹㈡埛璇佷欢鍙风爜鏍囧織 +CThostFtdcReqRepealField["VerifyCertNoFlag"] = "string" +#甯佺浠g爜 +CThostFtdcReqRepealField["CurrencyID"] = "string" +#杞笎閲戦 +CThostFtdcReqRepealField["TradeAmount"] = "float" +#鏈熻揣鍙彇閲戦 +CThostFtdcReqRepealField["FutureFetchAmount"] = "float" +#璐圭敤鏀粯鏍囧織 +CThostFtdcReqRepealField["FeePayFlag"] = "string" +#搴旀敹瀹㈡埛璐圭敤 +CThostFtdcReqRepealField["CustFee"] = "float" +#搴旀敹鏈熻揣鍏徃璐圭敤 +CThostFtdcReqRepealField["BrokerFee"] = "float" +#鍙戦佹柟缁欐帴鏀舵柟鐨勬秷鎭 +CThostFtdcReqRepealField["Message"] = "string" +#鎽樿 +CThostFtdcReqRepealField["Digest"] = "string" +#閾惰甯愬彿绫诲瀷 +CThostFtdcReqRepealField["BankAccType"] = "string" +#娓犻亾鏍囧織 +CThostFtdcReqRepealField["DeviceID"] = "string" +#鏈熻揣鍗曚綅甯愬彿绫诲瀷 +CThostFtdcReqRepealField["BankSecuAccType"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcReqRepealField["BrokerIDByBank"] = "string" +#鏈熻揣鍗曚綅甯愬彿 +CThostFtdcReqRepealField["BankSecuAcc"] = "string" +#閾惰瀵嗙爜鏍囧織 +CThostFtdcReqRepealField["BankPwdFlag"] = "string" +#鏈熻揣璧勯噾瀵嗙爜鏍稿鏍囧織 +CThostFtdcReqRepealField["SecuPwdFlag"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcReqRepealField["OperNo"] = "string" +#璇锋眰缂栧彿 +CThostFtdcReqRepealField["RequestID"] = "int" +#浜ゆ槗ID +CThostFtdcReqRepealField["TID"] = "int" +#杞处浜ゆ槗鐘舵 +CThostFtdcReqRepealField["TransferStatus"] = "string" +structDict['CThostFtdcReqRepealField'] = CThostFtdcReqRepealField + + +#鍐叉鍝嶅簲 +CThostFtdcRspRepealField = {} +#鍐叉鏃堕棿闂撮殧 +CThostFtdcRspRepealField["RepealTimeInterval"] = "int" +#宸茬粡鍐叉娆℃暟 +CThostFtdcRspRepealField["RepealedTimes"] = "int" +#閾惰鍐叉鏍囧織 +CThostFtdcRspRepealField["BankRepealFlag"] = "string" +#鏈熷晢鍐叉鏍囧織 +CThostFtdcRspRepealField["BrokerRepealFlag"] = "string" +#琚啿姝e钩鍙版祦姘村彿 +CThostFtdcRspRepealField["PlateRepealSerial"] = "int" +#琚啿姝i摱琛屾祦姘村彿 +CThostFtdcRspRepealField["BankRepealSerial"] = "string" +#琚啿姝f湡璐ф祦姘村彿 +CThostFtdcRspRepealField["FutureRepealSerial"] = "int" +#涓氬姟鍔熻兘鐮 +CThostFtdcRspRepealField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcRspRepealField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcRspRepealField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcRspRepealField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcRspRepealField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcRspRepealField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcRspRepealField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcRspRepealField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcRspRepealField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcRspRepealField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcRspRepealField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcRspRepealField["SessionID"] = "int" +#瀹㈡埛濮撳悕 +CThostFtdcRspRepealField["CustomerName"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcRspRepealField["IdCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcRspRepealField["IdentifiedCardNo"] = "string" +#瀹㈡埛绫诲瀷 +CThostFtdcRspRepealField["CustType"] = "string" +#閾惰甯愬彿 +CThostFtdcRspRepealField["BankAccount"] = "string" +#閾惰瀵嗙爜 +CThostFtdcRspRepealField["BankPassWord"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcRspRepealField["AccountID"] = "string" +#鏈熻揣瀵嗙爜 +CThostFtdcRspRepealField["Password"] = "string" +#瀹夎缂栧彿 +CThostFtdcRspRepealField["InstallID"] = "int" +#鏈熻揣鍏徃娴佹按鍙 +CThostFtdcRspRepealField["FutureSerial"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcRspRepealField["UserID"] = "string" +#楠岃瘉瀹㈡埛璇佷欢鍙风爜鏍囧織 +CThostFtdcRspRepealField["VerifyCertNoFlag"] = "string" +#甯佺浠g爜 +CThostFtdcRspRepealField["CurrencyID"] = "string" +#杞笎閲戦 +CThostFtdcRspRepealField["TradeAmount"] = "float" +#鏈熻揣鍙彇閲戦 +CThostFtdcRspRepealField["FutureFetchAmount"] = "float" +#璐圭敤鏀粯鏍囧織 +CThostFtdcRspRepealField["FeePayFlag"] = "string" +#搴旀敹瀹㈡埛璐圭敤 +CThostFtdcRspRepealField["CustFee"] = "float" +#搴旀敹鏈熻揣鍏徃璐圭敤 +CThostFtdcRspRepealField["BrokerFee"] = "float" +#鍙戦佹柟缁欐帴鏀舵柟鐨勬秷鎭 +CThostFtdcRspRepealField["Message"] = "string" +#鎽樿 +CThostFtdcRspRepealField["Digest"] = "string" +#閾惰甯愬彿绫诲瀷 +CThostFtdcRspRepealField["BankAccType"] = "string" +#娓犻亾鏍囧織 +CThostFtdcRspRepealField["DeviceID"] = "string" +#鏈熻揣鍗曚綅甯愬彿绫诲瀷 +CThostFtdcRspRepealField["BankSecuAccType"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcRspRepealField["BrokerIDByBank"] = "string" +#鏈熻揣鍗曚綅甯愬彿 +CThostFtdcRspRepealField["BankSecuAcc"] = "string" +#閾惰瀵嗙爜鏍囧織 +CThostFtdcRspRepealField["BankPwdFlag"] = "string" +#鏈熻揣璧勯噾瀵嗙爜鏍稿鏍囧織 +CThostFtdcRspRepealField["SecuPwdFlag"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcRspRepealField["OperNo"] = "string" +#璇锋眰缂栧彿 +CThostFtdcRspRepealField["RequestID"] = "int" +#浜ゆ槗ID +CThostFtdcRspRepealField["TID"] = "int" +#杞处浜ゆ槗鐘舵 +CThostFtdcRspRepealField["TransferStatus"] = "string" +#閿欒浠g爜 +CThostFtdcRspRepealField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcRspRepealField["ErrorMsg"] = "string" +structDict['CThostFtdcRspRepealField'] = CThostFtdcRspRepealField + + +#鏌ヨ璐︽埛淇℃伅璇锋眰 +CThostFtdcReqQueryAccountField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcReqQueryAccountField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcReqQueryAccountField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqQueryAccountField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcReqQueryAccountField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqQueryAccountField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcReqQueryAccountField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcReqQueryAccountField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcReqQueryAccountField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcReqQueryAccountField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcReqQueryAccountField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcReqQueryAccountField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcReqQueryAccountField["SessionID"] = "int" +#瀹㈡埛濮撳悕 +CThostFtdcReqQueryAccountField["CustomerName"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcReqQueryAccountField["IdCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcReqQueryAccountField["IdentifiedCardNo"] = "string" +#瀹㈡埛绫诲瀷 +CThostFtdcReqQueryAccountField["CustType"] = "string" +#閾惰甯愬彿 +CThostFtdcReqQueryAccountField["BankAccount"] = "string" +#閾惰瀵嗙爜 +CThostFtdcReqQueryAccountField["BankPassWord"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcReqQueryAccountField["AccountID"] = "string" +#鏈熻揣瀵嗙爜 +CThostFtdcReqQueryAccountField["Password"] = "string" +#鏈熻揣鍏徃娴佹按鍙 +CThostFtdcReqQueryAccountField["FutureSerial"] = "int" +#瀹夎缂栧彿 +CThostFtdcReqQueryAccountField["InstallID"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcReqQueryAccountField["UserID"] = "string" +#楠岃瘉瀹㈡埛璇佷欢鍙风爜鏍囧織 +CThostFtdcReqQueryAccountField["VerifyCertNoFlag"] = "string" +#甯佺浠g爜 +CThostFtdcReqQueryAccountField["CurrencyID"] = "string" +#鎽樿 +CThostFtdcReqQueryAccountField["Digest"] = "string" +#閾惰甯愬彿绫诲瀷 +CThostFtdcReqQueryAccountField["BankAccType"] = "string" +#娓犻亾鏍囧織 +CThostFtdcReqQueryAccountField["DeviceID"] = "string" +#鏈熻揣鍗曚綅甯愬彿绫诲瀷 +CThostFtdcReqQueryAccountField["BankSecuAccType"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcReqQueryAccountField["BrokerIDByBank"] = "string" +#鏈熻揣鍗曚綅甯愬彿 +CThostFtdcReqQueryAccountField["BankSecuAcc"] = "string" +#閾惰瀵嗙爜鏍囧織 +CThostFtdcReqQueryAccountField["BankPwdFlag"] = "string" +#鏈熻揣璧勯噾瀵嗙爜鏍稿鏍囧織 +CThostFtdcReqQueryAccountField["SecuPwdFlag"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcReqQueryAccountField["OperNo"] = "string" +#璇锋眰缂栧彿 +CThostFtdcReqQueryAccountField["RequestID"] = "int" +#浜ゆ槗ID +CThostFtdcReqQueryAccountField["TID"] = "int" +structDict['CThostFtdcReqQueryAccountField'] = CThostFtdcReqQueryAccountField + + +#鏌ヨ璐︽埛淇℃伅鍝嶅簲 +CThostFtdcRspQueryAccountField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcRspQueryAccountField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcRspQueryAccountField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcRspQueryAccountField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcRspQueryAccountField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcRspQueryAccountField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcRspQueryAccountField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcRspQueryAccountField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcRspQueryAccountField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcRspQueryAccountField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcRspQueryAccountField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcRspQueryAccountField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcRspQueryAccountField["SessionID"] = "int" +#瀹㈡埛濮撳悕 +CThostFtdcRspQueryAccountField["CustomerName"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcRspQueryAccountField["IdCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcRspQueryAccountField["IdentifiedCardNo"] = "string" +#瀹㈡埛绫诲瀷 +CThostFtdcRspQueryAccountField["CustType"] = "string" +#閾惰甯愬彿 +CThostFtdcRspQueryAccountField["BankAccount"] = "string" +#閾惰瀵嗙爜 +CThostFtdcRspQueryAccountField["BankPassWord"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcRspQueryAccountField["AccountID"] = "string" +#鏈熻揣瀵嗙爜 +CThostFtdcRspQueryAccountField["Password"] = "string" +#鏈熻揣鍏徃娴佹按鍙 +CThostFtdcRspQueryAccountField["FutureSerial"] = "int" +#瀹夎缂栧彿 +CThostFtdcRspQueryAccountField["InstallID"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcRspQueryAccountField["UserID"] = "string" +#楠岃瘉瀹㈡埛璇佷欢鍙风爜鏍囧織 +CThostFtdcRspQueryAccountField["VerifyCertNoFlag"] = "string" +#甯佺浠g爜 +CThostFtdcRspQueryAccountField["CurrencyID"] = "string" +#鎽樿 +CThostFtdcRspQueryAccountField["Digest"] = "string" +#閾惰甯愬彿绫诲瀷 +CThostFtdcRspQueryAccountField["BankAccType"] = "string" +#娓犻亾鏍囧織 +CThostFtdcRspQueryAccountField["DeviceID"] = "string" +#鏈熻揣鍗曚綅甯愬彿绫诲瀷 +CThostFtdcRspQueryAccountField["BankSecuAccType"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcRspQueryAccountField["BrokerIDByBank"] = "string" +#鏈熻揣鍗曚綅甯愬彿 +CThostFtdcRspQueryAccountField["BankSecuAcc"] = "string" +#閾惰瀵嗙爜鏍囧織 +CThostFtdcRspQueryAccountField["BankPwdFlag"] = "string" +#鏈熻揣璧勯噾瀵嗙爜鏍稿鏍囧織 +CThostFtdcRspQueryAccountField["SecuPwdFlag"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcRspQueryAccountField["OperNo"] = "string" +#璇锋眰缂栧彿 +CThostFtdcRspQueryAccountField["RequestID"] = "int" +#浜ゆ槗ID +CThostFtdcRspQueryAccountField["TID"] = "int" +#閾惰鍙敤閲戦 +CThostFtdcRspQueryAccountField["BankUseAmount"] = "float" +#閾惰鍙彇閲戦 +CThostFtdcRspQueryAccountField["BankFetchAmount"] = "float" +structDict['CThostFtdcRspQueryAccountField'] = CThostFtdcRspQueryAccountField + + +#鏈熷晢绛惧埌绛鹃 +CThostFtdcFutureSignIOField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcFutureSignIOField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcFutureSignIOField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcFutureSignIOField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcFutureSignIOField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcFutureSignIOField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcFutureSignIOField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcFutureSignIOField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcFutureSignIOField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcFutureSignIOField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcFutureSignIOField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcFutureSignIOField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcFutureSignIOField["SessionID"] = "int" +#瀹夎缂栧彿 +CThostFtdcFutureSignIOField["InstallID"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcFutureSignIOField["UserID"] = "string" +#鎽樿 +CThostFtdcFutureSignIOField["Digest"] = "string" +#甯佺浠g爜 +CThostFtdcFutureSignIOField["CurrencyID"] = "string" +#娓犻亾鏍囧織 +CThostFtdcFutureSignIOField["DeviceID"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcFutureSignIOField["BrokerIDByBank"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcFutureSignIOField["OperNo"] = "string" +#璇锋眰缂栧彿 +CThostFtdcFutureSignIOField["RequestID"] = "int" +#浜ゆ槗ID +CThostFtdcFutureSignIOField["TID"] = "int" +structDict['CThostFtdcFutureSignIOField'] = CThostFtdcFutureSignIOField + + +#鏈熷晢绛惧埌鍝嶅簲 +CThostFtdcRspFutureSignInField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcRspFutureSignInField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcRspFutureSignInField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcRspFutureSignInField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcRspFutureSignInField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcRspFutureSignInField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcRspFutureSignInField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcRspFutureSignInField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcRspFutureSignInField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcRspFutureSignInField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcRspFutureSignInField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcRspFutureSignInField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcRspFutureSignInField["SessionID"] = "int" +#瀹夎缂栧彿 +CThostFtdcRspFutureSignInField["InstallID"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcRspFutureSignInField["UserID"] = "string" +#鎽樿 +CThostFtdcRspFutureSignInField["Digest"] = "string" +#甯佺浠g爜 +CThostFtdcRspFutureSignInField["CurrencyID"] = "string" +#娓犻亾鏍囧織 +CThostFtdcRspFutureSignInField["DeviceID"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcRspFutureSignInField["BrokerIDByBank"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcRspFutureSignInField["OperNo"] = "string" +#璇锋眰缂栧彿 +CThostFtdcRspFutureSignInField["RequestID"] = "int" +#浜ゆ槗ID +CThostFtdcRspFutureSignInField["TID"] = "int" +#閿欒浠g爜 +CThostFtdcRspFutureSignInField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcRspFutureSignInField["ErrorMsg"] = "string" +#PIN瀵嗛挜 +CThostFtdcRspFutureSignInField["PinKey"] = "string" +#MAC瀵嗛挜 +CThostFtdcRspFutureSignInField["MacKey"] = "string" +structDict['CThostFtdcRspFutureSignInField'] = CThostFtdcRspFutureSignInField + + +#鏈熷晢绛鹃璇锋眰 +CThostFtdcReqFutureSignOutField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcReqFutureSignOutField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcReqFutureSignOutField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqFutureSignOutField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcReqFutureSignOutField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqFutureSignOutField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcReqFutureSignOutField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcReqFutureSignOutField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcReqFutureSignOutField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcReqFutureSignOutField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcReqFutureSignOutField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcReqFutureSignOutField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcReqFutureSignOutField["SessionID"] = "int" +#瀹夎缂栧彿 +CThostFtdcReqFutureSignOutField["InstallID"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcReqFutureSignOutField["UserID"] = "string" +#鎽樿 +CThostFtdcReqFutureSignOutField["Digest"] = "string" +#甯佺浠g爜 +CThostFtdcReqFutureSignOutField["CurrencyID"] = "string" +#娓犻亾鏍囧織 +CThostFtdcReqFutureSignOutField["DeviceID"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcReqFutureSignOutField["BrokerIDByBank"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcReqFutureSignOutField["OperNo"] = "string" +#璇锋眰缂栧彿 +CThostFtdcReqFutureSignOutField["RequestID"] = "int" +#浜ゆ槗ID +CThostFtdcReqFutureSignOutField["TID"] = "int" +structDict['CThostFtdcReqFutureSignOutField'] = CThostFtdcReqFutureSignOutField + + +#鏈熷晢绛鹃鍝嶅簲 +CThostFtdcRspFutureSignOutField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcRspFutureSignOutField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcRspFutureSignOutField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcRspFutureSignOutField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcRspFutureSignOutField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcRspFutureSignOutField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcRspFutureSignOutField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcRspFutureSignOutField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcRspFutureSignOutField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcRspFutureSignOutField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcRspFutureSignOutField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcRspFutureSignOutField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcRspFutureSignOutField["SessionID"] = "int" +#瀹夎缂栧彿 +CThostFtdcRspFutureSignOutField["InstallID"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcRspFutureSignOutField["UserID"] = "string" +#鎽樿 +CThostFtdcRspFutureSignOutField["Digest"] = "string" +#甯佺浠g爜 +CThostFtdcRspFutureSignOutField["CurrencyID"] = "string" +#娓犻亾鏍囧織 +CThostFtdcRspFutureSignOutField["DeviceID"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcRspFutureSignOutField["BrokerIDByBank"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcRspFutureSignOutField["OperNo"] = "string" +#璇锋眰缂栧彿 +CThostFtdcRspFutureSignOutField["RequestID"] = "int" +#浜ゆ槗ID +CThostFtdcRspFutureSignOutField["TID"] = "int" +#閿欒浠g爜 +CThostFtdcRspFutureSignOutField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcRspFutureSignOutField["ErrorMsg"] = "string" +structDict['CThostFtdcRspFutureSignOutField'] = CThostFtdcRspFutureSignOutField + + +#鏌ヨ鎸囧畾娴佹按鍙风殑浜ゆ槗缁撴灉璇锋眰 +CThostFtdcReqQueryTradeResultBySerialField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcReqQueryTradeResultBySerialField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcReqQueryTradeResultBySerialField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqQueryTradeResultBySerialField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcReqQueryTradeResultBySerialField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqQueryTradeResultBySerialField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcReqQueryTradeResultBySerialField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcReqQueryTradeResultBySerialField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcReqQueryTradeResultBySerialField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcReqQueryTradeResultBySerialField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcReqQueryTradeResultBySerialField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcReqQueryTradeResultBySerialField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcReqQueryTradeResultBySerialField["SessionID"] = "int" +#娴佹按鍙 +CThostFtdcReqQueryTradeResultBySerialField["Reference"] = "int" +#鏈祦姘村彿鍙戝竷鑰呯殑鏈烘瀯绫诲瀷 +CThostFtdcReqQueryTradeResultBySerialField["RefrenceIssureType"] = "string" +#鏈祦姘村彿鍙戝竷鑰呮満鏋勭紪鐮 +CThostFtdcReqQueryTradeResultBySerialField["RefrenceIssure"] = "string" +#瀹㈡埛濮撳悕 +CThostFtdcReqQueryTradeResultBySerialField["CustomerName"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcReqQueryTradeResultBySerialField["IdCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcReqQueryTradeResultBySerialField["IdentifiedCardNo"] = "string" +#瀹㈡埛绫诲瀷 +CThostFtdcReqQueryTradeResultBySerialField["CustType"] = "string" +#閾惰甯愬彿 +CThostFtdcReqQueryTradeResultBySerialField["BankAccount"] = "string" +#閾惰瀵嗙爜 +CThostFtdcReqQueryTradeResultBySerialField["BankPassWord"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcReqQueryTradeResultBySerialField["AccountID"] = "string" +#鏈熻揣瀵嗙爜 +CThostFtdcReqQueryTradeResultBySerialField["Password"] = "string" +#甯佺浠g爜 +CThostFtdcReqQueryTradeResultBySerialField["CurrencyID"] = "string" +#杞笎閲戦 +CThostFtdcReqQueryTradeResultBySerialField["TradeAmount"] = "float" +#鎽樿 +CThostFtdcReqQueryTradeResultBySerialField["Digest"] = "string" +structDict['CThostFtdcReqQueryTradeResultBySerialField'] = CThostFtdcReqQueryTradeResultBySerialField + + +#鏌ヨ鎸囧畾娴佹按鍙风殑浜ゆ槗缁撴灉鍝嶅簲 +CThostFtdcRspQueryTradeResultBySerialField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcRspQueryTradeResultBySerialField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcRspQueryTradeResultBySerialField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcRspQueryTradeResultBySerialField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcRspQueryTradeResultBySerialField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcRspQueryTradeResultBySerialField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcRspQueryTradeResultBySerialField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcRspQueryTradeResultBySerialField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcRspQueryTradeResultBySerialField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcRspQueryTradeResultBySerialField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcRspQueryTradeResultBySerialField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcRspQueryTradeResultBySerialField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcRspQueryTradeResultBySerialField["SessionID"] = "int" +#閿欒浠g爜 +CThostFtdcRspQueryTradeResultBySerialField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcRspQueryTradeResultBySerialField["ErrorMsg"] = "string" +#娴佹按鍙 +CThostFtdcRspQueryTradeResultBySerialField["Reference"] = "int" +#鏈祦姘村彿鍙戝竷鑰呯殑鏈烘瀯绫诲瀷 +CThostFtdcRspQueryTradeResultBySerialField["RefrenceIssureType"] = "string" +#鏈祦姘村彿鍙戝竷鑰呮満鏋勭紪鐮 +CThostFtdcRspQueryTradeResultBySerialField["RefrenceIssure"] = "string" +#鍘熷杩斿洖浠g爜 +CThostFtdcRspQueryTradeResultBySerialField["OriginReturnCode"] = "string" +#鍘熷杩斿洖鐮佹弿杩 +CThostFtdcRspQueryTradeResultBySerialField["OriginDescrInfoForReturnCode"] = "string" +#閾惰甯愬彿 +CThostFtdcRspQueryTradeResultBySerialField["BankAccount"] = "string" +#閾惰瀵嗙爜 +CThostFtdcRspQueryTradeResultBySerialField["BankPassWord"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcRspQueryTradeResultBySerialField["AccountID"] = "string" +#鏈熻揣瀵嗙爜 +CThostFtdcRspQueryTradeResultBySerialField["Password"] = "string" +#甯佺浠g爜 +CThostFtdcRspQueryTradeResultBySerialField["CurrencyID"] = "string" +#杞笎閲戦 +CThostFtdcRspQueryTradeResultBySerialField["TradeAmount"] = "float" +#鎽樿 +CThostFtdcRspQueryTradeResultBySerialField["Digest"] = "string" +structDict['CThostFtdcRspQueryTradeResultBySerialField'] = CThostFtdcRspQueryTradeResultBySerialField + + +#鏃ョ粓鏂囦欢灏辩华璇锋眰 +CThostFtdcReqDayEndFileReadyField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcReqDayEndFileReadyField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcReqDayEndFileReadyField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqDayEndFileReadyField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcReqDayEndFileReadyField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqDayEndFileReadyField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcReqDayEndFileReadyField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcReqDayEndFileReadyField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcReqDayEndFileReadyField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcReqDayEndFileReadyField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcReqDayEndFileReadyField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcReqDayEndFileReadyField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcReqDayEndFileReadyField["SessionID"] = "int" +#鏂囦欢涓氬姟鍔熻兘 +CThostFtdcReqDayEndFileReadyField["FileBusinessCode"] = "string" +#鎽樿 +CThostFtdcReqDayEndFileReadyField["Digest"] = "string" +structDict['CThostFtdcReqDayEndFileReadyField'] = CThostFtdcReqDayEndFileReadyField + + +#杩斿洖缁撴灉 +CThostFtdcReturnResultField = {} +#杩斿洖浠g爜 +CThostFtdcReturnResultField["ReturnCode"] = "string" +#杩斿洖鐮佹弿杩 +CThostFtdcReturnResultField["DescrInfoForReturnCode"] = "string" +structDict['CThostFtdcReturnResultField'] = CThostFtdcReturnResultField + + +#楠岃瘉鏈熻揣璧勯噾瀵嗙爜 +CThostFtdcVerifyFuturePasswordField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcVerifyFuturePasswordField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcVerifyFuturePasswordField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcVerifyFuturePasswordField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcVerifyFuturePasswordField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcVerifyFuturePasswordField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcVerifyFuturePasswordField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcVerifyFuturePasswordField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcVerifyFuturePasswordField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcVerifyFuturePasswordField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcVerifyFuturePasswordField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcVerifyFuturePasswordField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcVerifyFuturePasswordField["SessionID"] = "int" +#鎶曡祫鑰呭笎鍙 +CThostFtdcVerifyFuturePasswordField["AccountID"] = "string" +#鏈熻揣瀵嗙爜 +CThostFtdcVerifyFuturePasswordField["Password"] = "string" +#閾惰甯愬彿 +CThostFtdcVerifyFuturePasswordField["BankAccount"] = "string" +#閾惰瀵嗙爜 +CThostFtdcVerifyFuturePasswordField["BankPassWord"] = "string" +#瀹夎缂栧彿 +CThostFtdcVerifyFuturePasswordField["InstallID"] = "int" +#浜ゆ槗ID +CThostFtdcVerifyFuturePasswordField["TID"] = "int" +#甯佺浠g爜 +CThostFtdcVerifyFuturePasswordField["CurrencyID"] = "string" +structDict['CThostFtdcVerifyFuturePasswordField'] = CThostFtdcVerifyFuturePasswordField + + +#楠岃瘉瀹㈡埛淇℃伅 +CThostFtdcVerifyCustInfoField = {} +#瀹㈡埛濮撳悕 +CThostFtdcVerifyCustInfoField["CustomerName"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcVerifyCustInfoField["IdCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcVerifyCustInfoField["IdentifiedCardNo"] = "string" +#瀹㈡埛绫诲瀷 +CThostFtdcVerifyCustInfoField["CustType"] = "string" +structDict['CThostFtdcVerifyCustInfoField'] = CThostFtdcVerifyCustInfoField + + +#楠岃瘉鏈熻揣璧勯噾瀵嗙爜鍜屽鎴蜂俊鎭 +CThostFtdcVerifyFuturePasswordAndCustInfoField = {} +#瀹㈡埛濮撳悕 +CThostFtdcVerifyFuturePasswordAndCustInfoField["CustomerName"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcVerifyFuturePasswordAndCustInfoField["IdCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcVerifyFuturePasswordAndCustInfoField["IdentifiedCardNo"] = "string" +#瀹㈡埛绫诲瀷 +CThostFtdcVerifyFuturePasswordAndCustInfoField["CustType"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcVerifyFuturePasswordAndCustInfoField["AccountID"] = "string" +#鏈熻揣瀵嗙爜 +CThostFtdcVerifyFuturePasswordAndCustInfoField["Password"] = "string" +#甯佺浠g爜 +CThostFtdcVerifyFuturePasswordAndCustInfoField["CurrencyID"] = "string" +structDict['CThostFtdcVerifyFuturePasswordAndCustInfoField'] = CThostFtdcVerifyFuturePasswordAndCustInfoField + + +#楠岃瘉鏈熻揣璧勯噾瀵嗙爜鍜屽鎴蜂俊鎭 +CThostFtdcDepositResultInformField = {} +#鍑哄叆閲戞祦姘村彿锛岃娴佹按鍙蜂负閾舵湡鎶ョ洏杩斿洖鐨勬祦姘村彿 +CThostFtdcDepositResultInformField["DepositSeqNo"] = "string" +#缁忕邯鍏徃浠g爜 +CThostFtdcDepositResultInformField["BrokerID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcDepositResultInformField["InvestorID"] = "string" +#鍏ラ噾閲戦 +CThostFtdcDepositResultInformField["Deposit"] = "float" +#璇锋眰缂栧彿 +CThostFtdcDepositResultInformField["RequestID"] = "int" +#杩斿洖浠g爜 +CThostFtdcDepositResultInformField["ReturnCode"] = "string" +#杩斿洖鐮佹弿杩 +CThostFtdcDepositResultInformField["DescrInfoForReturnCode"] = "string" +structDict['CThostFtdcDepositResultInformField'] = CThostFtdcDepositResultInformField + + +#浜ゆ槗鏍稿績鍚戦摱鏈熸姤鐩樺彂鍑哄瘑閽ュ悓姝ヨ姹 +CThostFtdcReqSyncKeyField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcReqSyncKeyField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcReqSyncKeyField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqSyncKeyField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcReqSyncKeyField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcReqSyncKeyField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcReqSyncKeyField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcReqSyncKeyField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcReqSyncKeyField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcReqSyncKeyField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcReqSyncKeyField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcReqSyncKeyField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcReqSyncKeyField["SessionID"] = "int" +#瀹夎缂栧彿 +CThostFtdcReqSyncKeyField["InstallID"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcReqSyncKeyField["UserID"] = "string" +#浜ゆ槗鏍稿績缁欓摱鏈熸姤鐩樼殑娑堟伅 +CThostFtdcReqSyncKeyField["Message"] = "string" +#娓犻亾鏍囧織 +CThostFtdcReqSyncKeyField["DeviceID"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcReqSyncKeyField["BrokerIDByBank"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcReqSyncKeyField["OperNo"] = "string" +#璇锋眰缂栧彿 +CThostFtdcReqSyncKeyField["RequestID"] = "int" +#浜ゆ槗ID +CThostFtdcReqSyncKeyField["TID"] = "int" +structDict['CThostFtdcReqSyncKeyField'] = CThostFtdcReqSyncKeyField + + +#浜ゆ槗鏍稿績鍚戦摱鏈熸姤鐩樺彂鍑哄瘑閽ュ悓姝ュ搷搴 +CThostFtdcRspSyncKeyField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcRspSyncKeyField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcRspSyncKeyField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcRspSyncKeyField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcRspSyncKeyField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcRspSyncKeyField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcRspSyncKeyField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcRspSyncKeyField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcRspSyncKeyField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcRspSyncKeyField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcRspSyncKeyField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcRspSyncKeyField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcRspSyncKeyField["SessionID"] = "int" +#瀹夎缂栧彿 +CThostFtdcRspSyncKeyField["InstallID"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcRspSyncKeyField["UserID"] = "string" +#浜ゆ槗鏍稿績缁欓摱鏈熸姤鐩樼殑娑堟伅 +CThostFtdcRspSyncKeyField["Message"] = "string" +#娓犻亾鏍囧織 +CThostFtdcRspSyncKeyField["DeviceID"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcRspSyncKeyField["BrokerIDByBank"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcRspSyncKeyField["OperNo"] = "string" +#璇锋眰缂栧彿 +CThostFtdcRspSyncKeyField["RequestID"] = "int" +#浜ゆ槗ID +CThostFtdcRspSyncKeyField["TID"] = "int" +#閿欒浠g爜 +CThostFtdcRspSyncKeyField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcRspSyncKeyField["ErrorMsg"] = "string" +structDict['CThostFtdcRspSyncKeyField'] = CThostFtdcRspSyncKeyField + + +#鏌ヨ璐︽埛淇℃伅閫氱煡 +CThostFtdcNotifyQueryAccountField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcNotifyQueryAccountField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcNotifyQueryAccountField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcNotifyQueryAccountField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcNotifyQueryAccountField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcNotifyQueryAccountField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcNotifyQueryAccountField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcNotifyQueryAccountField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcNotifyQueryAccountField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcNotifyQueryAccountField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcNotifyQueryAccountField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcNotifyQueryAccountField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcNotifyQueryAccountField["SessionID"] = "int" +#瀹㈡埛濮撳悕 +CThostFtdcNotifyQueryAccountField["CustomerName"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcNotifyQueryAccountField["IdCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcNotifyQueryAccountField["IdentifiedCardNo"] = "string" +#瀹㈡埛绫诲瀷 +CThostFtdcNotifyQueryAccountField["CustType"] = "string" +#閾惰甯愬彿 +CThostFtdcNotifyQueryAccountField["BankAccount"] = "string" +#閾惰瀵嗙爜 +CThostFtdcNotifyQueryAccountField["BankPassWord"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcNotifyQueryAccountField["AccountID"] = "string" +#鏈熻揣瀵嗙爜 +CThostFtdcNotifyQueryAccountField["Password"] = "string" +#鏈熻揣鍏徃娴佹按鍙 +CThostFtdcNotifyQueryAccountField["FutureSerial"] = "int" +#瀹夎缂栧彿 +CThostFtdcNotifyQueryAccountField["InstallID"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcNotifyQueryAccountField["UserID"] = "string" +#楠岃瘉瀹㈡埛璇佷欢鍙风爜鏍囧織 +CThostFtdcNotifyQueryAccountField["VerifyCertNoFlag"] = "string" +#甯佺浠g爜 +CThostFtdcNotifyQueryAccountField["CurrencyID"] = "string" +#鎽樿 +CThostFtdcNotifyQueryAccountField["Digest"] = "string" +#閾惰甯愬彿绫诲瀷 +CThostFtdcNotifyQueryAccountField["BankAccType"] = "string" +#娓犻亾鏍囧織 +CThostFtdcNotifyQueryAccountField["DeviceID"] = "string" +#鏈熻揣鍗曚綅甯愬彿绫诲瀷 +CThostFtdcNotifyQueryAccountField["BankSecuAccType"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcNotifyQueryAccountField["BrokerIDByBank"] = "string" +#鏈熻揣鍗曚綅甯愬彿 +CThostFtdcNotifyQueryAccountField["BankSecuAcc"] = "string" +#閾惰瀵嗙爜鏍囧織 +CThostFtdcNotifyQueryAccountField["BankPwdFlag"] = "string" +#鏈熻揣璧勯噾瀵嗙爜鏍稿鏍囧織 +CThostFtdcNotifyQueryAccountField["SecuPwdFlag"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcNotifyQueryAccountField["OperNo"] = "string" +#璇锋眰缂栧彿 +CThostFtdcNotifyQueryAccountField["RequestID"] = "int" +#浜ゆ槗ID +CThostFtdcNotifyQueryAccountField["TID"] = "int" +#閾惰鍙敤閲戦 +CThostFtdcNotifyQueryAccountField["BankUseAmount"] = "float" +#閾惰鍙彇閲戦 +CThostFtdcNotifyQueryAccountField["BankFetchAmount"] = "float" +#閿欒浠g爜 +CThostFtdcNotifyQueryAccountField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcNotifyQueryAccountField["ErrorMsg"] = "string" +structDict['CThostFtdcNotifyQueryAccountField'] = CThostFtdcNotifyQueryAccountField + + +#閾舵湡杞处浜ゆ槗娴佹按琛 +CThostFtdcTransferSerialField = {} +#骞冲彴娴佹按鍙 +CThostFtdcTransferSerialField["PlateSerial"] = "int" +#浜ゆ槗鍙戣捣鏂规棩鏈 +CThostFtdcTransferSerialField["TradeDate"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcTransferSerialField["TradingDay"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcTransferSerialField["TradeTime"] = "string" +#浜ゆ槗浠g爜 +CThostFtdcTransferSerialField["TradeCode"] = "string" +#浼氳瘽缂栧彿 +CThostFtdcTransferSerialField["SessionID"] = "int" +#閾惰缂栫爜 +CThostFtdcTransferSerialField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯缂栫爜 +CThostFtdcTransferSerialField["BankBranchID"] = "string" +#閾惰甯愬彿绫诲瀷 +CThostFtdcTransferSerialField["BankAccType"] = "string" +#閾惰甯愬彿 +CThostFtdcTransferSerialField["BankAccount"] = "string" +#閾惰娴佹按鍙 +CThostFtdcTransferSerialField["BankSerial"] = "string" +#鏈熻揣鍏徃缂栫爜 +CThostFtdcTransferSerialField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcTransferSerialField["BrokerBranchID"] = "string" +#鏈熻揣鍏徃甯愬彿绫诲瀷 +CThostFtdcTransferSerialField["FutureAccType"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcTransferSerialField["AccountID"] = "string" +#鎶曡祫鑰呬唬鐮 +CThostFtdcTransferSerialField["InvestorID"] = "string" +#鏈熻揣鍏徃娴佹按鍙 +CThostFtdcTransferSerialField["FutureSerial"] = "int" +#璇佷欢绫诲瀷 +CThostFtdcTransferSerialField["IdCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcTransferSerialField["IdentifiedCardNo"] = "string" +#甯佺浠g爜 +CThostFtdcTransferSerialField["CurrencyID"] = "string" +#浜ゆ槗閲戦 +CThostFtdcTransferSerialField["TradeAmount"] = "float" +#搴旀敹瀹㈡埛璐圭敤 +CThostFtdcTransferSerialField["CustFee"] = "float" +#搴旀敹鏈熻揣鍏徃璐圭敤 +CThostFtdcTransferSerialField["BrokerFee"] = "float" +#鏈夋晥鏍囧織 +CThostFtdcTransferSerialField["AvailabilityFlag"] = "string" +#鎿嶄綔鍛 +CThostFtdcTransferSerialField["OperatorCode"] = "string" +#鏂伴摱琛屽笎鍙 +CThostFtdcTransferSerialField["BankNewAccount"] = "string" +#閿欒浠g爜 +CThostFtdcTransferSerialField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcTransferSerialField["ErrorMsg"] = "string" +structDict['CThostFtdcTransferSerialField'] = CThostFtdcTransferSerialField + + +#璇锋眰鏌ヨ杞笎娴佹按 +CThostFtdcQryTransferSerialField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryTransferSerialField["BrokerID"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcQryTransferSerialField["AccountID"] = "string" +#閾惰缂栫爜 +CThostFtdcQryTransferSerialField["BankID"] = "string" +#甯佺浠g爜 +CThostFtdcQryTransferSerialField["CurrencyID"] = "string" +structDict['CThostFtdcQryTransferSerialField'] = CThostFtdcQryTransferSerialField + + +#鏈熷晢绛惧埌閫氱煡 +CThostFtdcNotifyFutureSignInField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcNotifyFutureSignInField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcNotifyFutureSignInField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcNotifyFutureSignInField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcNotifyFutureSignInField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcNotifyFutureSignInField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcNotifyFutureSignInField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcNotifyFutureSignInField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcNotifyFutureSignInField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcNotifyFutureSignInField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcNotifyFutureSignInField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcNotifyFutureSignInField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcNotifyFutureSignInField["SessionID"] = "int" +#瀹夎缂栧彿 +CThostFtdcNotifyFutureSignInField["InstallID"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcNotifyFutureSignInField["UserID"] = "string" +#鎽樿 +CThostFtdcNotifyFutureSignInField["Digest"] = "string" +#甯佺浠g爜 +CThostFtdcNotifyFutureSignInField["CurrencyID"] = "string" +#娓犻亾鏍囧織 +CThostFtdcNotifyFutureSignInField["DeviceID"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcNotifyFutureSignInField["BrokerIDByBank"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcNotifyFutureSignInField["OperNo"] = "string" +#璇锋眰缂栧彿 +CThostFtdcNotifyFutureSignInField["RequestID"] = "int" +#浜ゆ槗ID +CThostFtdcNotifyFutureSignInField["TID"] = "int" +#閿欒浠g爜 +CThostFtdcNotifyFutureSignInField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcNotifyFutureSignInField["ErrorMsg"] = "string" +#PIN瀵嗛挜 +CThostFtdcNotifyFutureSignInField["PinKey"] = "string" +#MAC瀵嗛挜 +CThostFtdcNotifyFutureSignInField["MacKey"] = "string" +structDict['CThostFtdcNotifyFutureSignInField'] = CThostFtdcNotifyFutureSignInField + + +#鏈熷晢绛鹃閫氱煡 +CThostFtdcNotifyFutureSignOutField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcNotifyFutureSignOutField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcNotifyFutureSignOutField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcNotifyFutureSignOutField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcNotifyFutureSignOutField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcNotifyFutureSignOutField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcNotifyFutureSignOutField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcNotifyFutureSignOutField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcNotifyFutureSignOutField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcNotifyFutureSignOutField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcNotifyFutureSignOutField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcNotifyFutureSignOutField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcNotifyFutureSignOutField["SessionID"] = "int" +#瀹夎缂栧彿 +CThostFtdcNotifyFutureSignOutField["InstallID"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcNotifyFutureSignOutField["UserID"] = "string" +#鎽樿 +CThostFtdcNotifyFutureSignOutField["Digest"] = "string" +#甯佺浠g爜 +CThostFtdcNotifyFutureSignOutField["CurrencyID"] = "string" +#娓犻亾鏍囧織 +CThostFtdcNotifyFutureSignOutField["DeviceID"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcNotifyFutureSignOutField["BrokerIDByBank"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcNotifyFutureSignOutField["OperNo"] = "string" +#璇锋眰缂栧彿 +CThostFtdcNotifyFutureSignOutField["RequestID"] = "int" +#浜ゆ槗ID +CThostFtdcNotifyFutureSignOutField["TID"] = "int" +#閿欒浠g爜 +CThostFtdcNotifyFutureSignOutField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcNotifyFutureSignOutField["ErrorMsg"] = "string" +structDict['CThostFtdcNotifyFutureSignOutField'] = CThostFtdcNotifyFutureSignOutField + + +#浜ゆ槗鏍稿績鍚戦摱鏈熸姤鐩樺彂鍑哄瘑閽ュ悓姝ュ鐞嗙粨鏋滅殑閫氱煡 +CThostFtdcNotifySyncKeyField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcNotifySyncKeyField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcNotifySyncKeyField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcNotifySyncKeyField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcNotifySyncKeyField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcNotifySyncKeyField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcNotifySyncKeyField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcNotifySyncKeyField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcNotifySyncKeyField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcNotifySyncKeyField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcNotifySyncKeyField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcNotifySyncKeyField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcNotifySyncKeyField["SessionID"] = "int" +#瀹夎缂栧彿 +CThostFtdcNotifySyncKeyField["InstallID"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcNotifySyncKeyField["UserID"] = "string" +#浜ゆ槗鏍稿績缁欓摱鏈熸姤鐩樼殑娑堟伅 +CThostFtdcNotifySyncKeyField["Message"] = "string" +#娓犻亾鏍囧織 +CThostFtdcNotifySyncKeyField["DeviceID"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcNotifySyncKeyField["BrokerIDByBank"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcNotifySyncKeyField["OperNo"] = "string" +#璇锋眰缂栧彿 +CThostFtdcNotifySyncKeyField["RequestID"] = "int" +#浜ゆ槗ID +CThostFtdcNotifySyncKeyField["TID"] = "int" +#閿欒浠g爜 +CThostFtdcNotifySyncKeyField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcNotifySyncKeyField["ErrorMsg"] = "string" +structDict['CThostFtdcNotifySyncKeyField'] = CThostFtdcNotifySyncKeyField + + +#璇锋眰鏌ヨ閾舵湡绛剧害鍏崇郴 +CThostFtdcQryAccountregisterField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryAccountregisterField["BrokerID"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcQryAccountregisterField["AccountID"] = "string" +#閾惰缂栫爜 +CThostFtdcQryAccountregisterField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯缂栫爜 +CThostFtdcQryAccountregisterField["BankBranchID"] = "string" +#甯佺浠g爜 +CThostFtdcQryAccountregisterField["CurrencyID"] = "string" +structDict['CThostFtdcQryAccountregisterField'] = CThostFtdcQryAccountregisterField + + +#瀹㈡埛寮閿鎴蜂俊鎭〃 +CThostFtdcAccountregisterField = {} +#浜ゆ槗鏃ユ湡 +CThostFtdcAccountregisterField["TradeDay"] = "string" +#閾惰缂栫爜 +CThostFtdcAccountregisterField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯缂栫爜 +CThostFtdcAccountregisterField["BankBranchID"] = "string" +#閾惰甯愬彿 +CThostFtdcAccountregisterField["BankAccount"] = "string" +#鏈熻揣鍏徃缂栫爜 +CThostFtdcAccountregisterField["BrokerID"] = "string" +#鏈熻揣鍏徃鍒嗘敮鏈烘瀯缂栫爜 +CThostFtdcAccountregisterField["BrokerBranchID"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcAccountregisterField["AccountID"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcAccountregisterField["IdCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcAccountregisterField["IdentifiedCardNo"] = "string" +#瀹㈡埛濮撳悕 +CThostFtdcAccountregisterField["CustomerName"] = "string" +#甯佺浠g爜 +CThostFtdcAccountregisterField["CurrencyID"] = "string" +#寮閿鎴风被鍒 +CThostFtdcAccountregisterField["OpenOrDestroy"] = "string" +#绛剧害鏃ユ湡 +CThostFtdcAccountregisterField["RegDate"] = "string" +#瑙g害鏃ユ湡 +CThostFtdcAccountregisterField["OutDate"] = "string" +#浜ゆ槗ID +CThostFtdcAccountregisterField["TID"] = "int" +#瀹㈡埛绫诲瀷 +CThostFtdcAccountregisterField["CustType"] = "string" +#閾惰甯愬彿绫诲瀷 +CThostFtdcAccountregisterField["BankAccType"] = "string" +structDict['CThostFtdcAccountregisterField'] = CThostFtdcAccountregisterField + + +#閾舵湡寮鎴蜂俊鎭 +CThostFtdcOpenAccountField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcOpenAccountField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcOpenAccountField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcOpenAccountField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcOpenAccountField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcOpenAccountField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcOpenAccountField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcOpenAccountField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcOpenAccountField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcOpenAccountField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcOpenAccountField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcOpenAccountField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcOpenAccountField["SessionID"] = "int" +#瀹㈡埛濮撳悕 +CThostFtdcOpenAccountField["CustomerName"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcOpenAccountField["IdCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcOpenAccountField["IdentifiedCardNo"] = "string" +#鎬у埆 +CThostFtdcOpenAccountField["Gender"] = "string" +#鍥藉浠g爜 +CThostFtdcOpenAccountField["CountryCode"] = "string" +#瀹㈡埛绫诲瀷 +CThostFtdcOpenAccountField["CustType"] = "string" +#鍦板潃 +CThostFtdcOpenAccountField["Address"] = "string" +#閭紪 +CThostFtdcOpenAccountField["ZipCode"] = "string" +#鐢佃瘽鍙风爜 +CThostFtdcOpenAccountField["Telephone"] = "string" +#鎵嬫満 +CThostFtdcOpenAccountField["MobilePhone"] = "string" +#浼犵湡 +CThostFtdcOpenAccountField["Fax"] = "string" +#鐢靛瓙閭欢 +CThostFtdcOpenAccountField["EMail"] = "string" +#璧勯噾璐︽埛鐘舵 +CThostFtdcOpenAccountField["MoneyAccountStatus"] = "string" +#閾惰甯愬彿 +CThostFtdcOpenAccountField["BankAccount"] = "string" +#閾惰瀵嗙爜 +CThostFtdcOpenAccountField["BankPassWord"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcOpenAccountField["AccountID"] = "string" +#鏈熻揣瀵嗙爜 +CThostFtdcOpenAccountField["Password"] = "string" +#瀹夎缂栧彿 +CThostFtdcOpenAccountField["InstallID"] = "int" +#楠岃瘉瀹㈡埛璇佷欢鍙风爜鏍囧織 +CThostFtdcOpenAccountField["VerifyCertNoFlag"] = "string" +#甯佺浠g爜 +CThostFtdcOpenAccountField["CurrencyID"] = "string" +#姹囬挒鏍囧織 +CThostFtdcOpenAccountField["CashExchangeCode"] = "string" +#鎽樿 +CThostFtdcOpenAccountField["Digest"] = "string" +#閾惰甯愬彿绫诲瀷 +CThostFtdcOpenAccountField["BankAccType"] = "string" +#娓犻亾鏍囧織 +CThostFtdcOpenAccountField["DeviceID"] = "string" +#鏈熻揣鍗曚綅甯愬彿绫诲瀷 +CThostFtdcOpenAccountField["BankSecuAccType"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcOpenAccountField["BrokerIDByBank"] = "string" +#鏈熻揣鍗曚綅甯愬彿 +CThostFtdcOpenAccountField["BankSecuAcc"] = "string" +#閾惰瀵嗙爜鏍囧織 +CThostFtdcOpenAccountField["BankPwdFlag"] = "string" +#鏈熻揣璧勯噾瀵嗙爜鏍稿鏍囧織 +CThostFtdcOpenAccountField["SecuPwdFlag"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcOpenAccountField["OperNo"] = "string" +#浜ゆ槗ID +CThostFtdcOpenAccountField["TID"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcOpenAccountField["UserID"] = "string" +#閿欒浠g爜 +CThostFtdcOpenAccountField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcOpenAccountField["ErrorMsg"] = "string" +structDict['CThostFtdcOpenAccountField'] = CThostFtdcOpenAccountField + + +#閾舵湡閿鎴蜂俊鎭 +CThostFtdcCancelAccountField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcCancelAccountField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcCancelAccountField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcCancelAccountField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcCancelAccountField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcCancelAccountField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcCancelAccountField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcCancelAccountField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcCancelAccountField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcCancelAccountField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcCancelAccountField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcCancelAccountField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcCancelAccountField["SessionID"] = "int" +#瀹㈡埛濮撳悕 +CThostFtdcCancelAccountField["CustomerName"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcCancelAccountField["IdCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcCancelAccountField["IdentifiedCardNo"] = "string" +#鎬у埆 +CThostFtdcCancelAccountField["Gender"] = "string" +#鍥藉浠g爜 +CThostFtdcCancelAccountField["CountryCode"] = "string" +#瀹㈡埛绫诲瀷 +CThostFtdcCancelAccountField["CustType"] = "string" +#鍦板潃 +CThostFtdcCancelAccountField["Address"] = "string" +#閭紪 +CThostFtdcCancelAccountField["ZipCode"] = "string" +#鐢佃瘽鍙风爜 +CThostFtdcCancelAccountField["Telephone"] = "string" +#鎵嬫満 +CThostFtdcCancelAccountField["MobilePhone"] = "string" +#浼犵湡 +CThostFtdcCancelAccountField["Fax"] = "string" +#鐢靛瓙閭欢 +CThostFtdcCancelAccountField["EMail"] = "string" +#璧勯噾璐︽埛鐘舵 +CThostFtdcCancelAccountField["MoneyAccountStatus"] = "string" +#閾惰甯愬彿 +CThostFtdcCancelAccountField["BankAccount"] = "string" +#閾惰瀵嗙爜 +CThostFtdcCancelAccountField["BankPassWord"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcCancelAccountField["AccountID"] = "string" +#鏈熻揣瀵嗙爜 +CThostFtdcCancelAccountField["Password"] = "string" +#瀹夎缂栧彿 +CThostFtdcCancelAccountField["InstallID"] = "int" +#楠岃瘉瀹㈡埛璇佷欢鍙风爜鏍囧織 +CThostFtdcCancelAccountField["VerifyCertNoFlag"] = "string" +#甯佺浠g爜 +CThostFtdcCancelAccountField["CurrencyID"] = "string" +#姹囬挒鏍囧織 +CThostFtdcCancelAccountField["CashExchangeCode"] = "string" +#鎽樿 +CThostFtdcCancelAccountField["Digest"] = "string" +#閾惰甯愬彿绫诲瀷 +CThostFtdcCancelAccountField["BankAccType"] = "string" +#娓犻亾鏍囧織 +CThostFtdcCancelAccountField["DeviceID"] = "string" +#鏈熻揣鍗曚綅甯愬彿绫诲瀷 +CThostFtdcCancelAccountField["BankSecuAccType"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcCancelAccountField["BrokerIDByBank"] = "string" +#鏈熻揣鍗曚綅甯愬彿 +CThostFtdcCancelAccountField["BankSecuAcc"] = "string" +#閾惰瀵嗙爜鏍囧織 +CThostFtdcCancelAccountField["BankPwdFlag"] = "string" +#鏈熻揣璧勯噾瀵嗙爜鏍稿鏍囧織 +CThostFtdcCancelAccountField["SecuPwdFlag"] = "string" +#浜ゆ槗鏌滃憳 +CThostFtdcCancelAccountField["OperNo"] = "string" +#浜ゆ槗ID +CThostFtdcCancelAccountField["TID"] = "int" +#鐢ㄦ埛鏍囪瘑 +CThostFtdcCancelAccountField["UserID"] = "string" +#閿欒浠g爜 +CThostFtdcCancelAccountField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcCancelAccountField["ErrorMsg"] = "string" +structDict['CThostFtdcCancelAccountField'] = CThostFtdcCancelAccountField + + +#閾舵湡鍙樻洿閾惰璐﹀彿淇℃伅 +CThostFtdcChangeAccountField = {} +#涓氬姟鍔熻兘鐮 +CThostFtdcChangeAccountField["TradeCode"] = "string" +#閾惰浠g爜 +CThostFtdcChangeAccountField["BankID"] = "string" +#閾惰鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcChangeAccountField["BankBranchID"] = "string" +#鏈熷晢浠g爜 +CThostFtdcChangeAccountField["BrokerID"] = "string" +#鏈熷晢鍒嗘敮鏈烘瀯浠g爜 +CThostFtdcChangeAccountField["BrokerBranchID"] = "string" +#浜ゆ槗鏃ユ湡 +CThostFtdcChangeAccountField["TradeDate"] = "string" +#浜ゆ槗鏃堕棿 +CThostFtdcChangeAccountField["TradeTime"] = "string" +#閾惰娴佹按鍙 +CThostFtdcChangeAccountField["BankSerial"] = "string" +#浜ゆ槗绯荤粺鏃ユ湡 +CThostFtdcChangeAccountField["TradingDay"] = "string" +#閾舵湡骞冲彴娑堟伅娴佹按鍙 +CThostFtdcChangeAccountField["PlateSerial"] = "int" +#鏈鍚庡垎鐗囨爣蹇 +CThostFtdcChangeAccountField["LastFragment"] = "string" +#浼氳瘽鍙 +CThostFtdcChangeAccountField["SessionID"] = "int" +#瀹㈡埛濮撳悕 +CThostFtdcChangeAccountField["CustomerName"] = "string" +#璇佷欢绫诲瀷 +CThostFtdcChangeAccountField["IdCardType"] = "string" +#璇佷欢鍙风爜 +CThostFtdcChangeAccountField["IdentifiedCardNo"] = "string" +#鎬у埆 +CThostFtdcChangeAccountField["Gender"] = "string" +#鍥藉浠g爜 +CThostFtdcChangeAccountField["CountryCode"] = "string" +#瀹㈡埛绫诲瀷 +CThostFtdcChangeAccountField["CustType"] = "string" +#鍦板潃 +CThostFtdcChangeAccountField["Address"] = "string" +#閭紪 +CThostFtdcChangeAccountField["ZipCode"] = "string" +#鐢佃瘽鍙风爜 +CThostFtdcChangeAccountField["Telephone"] = "string" +#鎵嬫満 +CThostFtdcChangeAccountField["MobilePhone"] = "string" +#浼犵湡 +CThostFtdcChangeAccountField["Fax"] = "string" +#鐢靛瓙閭欢 +CThostFtdcChangeAccountField["EMail"] = "string" +#璧勯噾璐︽埛鐘舵 +CThostFtdcChangeAccountField["MoneyAccountStatus"] = "string" +#閾惰甯愬彿 +CThostFtdcChangeAccountField["BankAccount"] = "string" +#閾惰瀵嗙爜 +CThostFtdcChangeAccountField["BankPassWord"] = "string" +#鏂伴摱琛屽笎鍙 +CThostFtdcChangeAccountField["NewBankAccount"] = "string" +#鏂伴摱琛屽瘑鐮 +CThostFtdcChangeAccountField["NewBankPassWord"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcChangeAccountField["AccountID"] = "string" +#鏈熻揣瀵嗙爜 +CThostFtdcChangeAccountField["Password"] = "string" +#閾惰甯愬彿绫诲瀷 +CThostFtdcChangeAccountField["BankAccType"] = "string" +#瀹夎缂栧彿 +CThostFtdcChangeAccountField["InstallID"] = "int" +#楠岃瘉瀹㈡埛璇佷欢鍙风爜鏍囧織 +CThostFtdcChangeAccountField["VerifyCertNoFlag"] = "string" +#甯佺浠g爜 +CThostFtdcChangeAccountField["CurrencyID"] = "string" +#鏈熻揣鍏徃閾惰缂栫爜 +CThostFtdcChangeAccountField["BrokerIDByBank"] = "string" +#閾惰瀵嗙爜鏍囧織 +CThostFtdcChangeAccountField["BankPwdFlag"] = "string" +#鏈熻揣璧勯噾瀵嗙爜鏍稿鏍囧織 +CThostFtdcChangeAccountField["SecuPwdFlag"] = "string" +#浜ゆ槗ID +CThostFtdcChangeAccountField["TID"] = "int" +#鎽樿 +CThostFtdcChangeAccountField["Digest"] = "string" +#閿欒浠g爜 +CThostFtdcChangeAccountField["ErrorID"] = "int" +#閿欒淇℃伅 +CThostFtdcChangeAccountField["ErrorMsg"] = "string" +structDict['CThostFtdcChangeAccountField'] = CThostFtdcChangeAccountField + + +#浜岀骇浠g悊鎿嶄綔鍛橀摱鏈熸潈闄 +CThostFtdcSecAgentACIDMapField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcSecAgentACIDMapField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcSecAgentACIDMapField["UserID"] = "string" +#璧勯噾璐︽埛 +CThostFtdcSecAgentACIDMapField["AccountID"] = "string" +#甯佺 +CThostFtdcSecAgentACIDMapField["CurrencyID"] = "string" +#澧冨涓粙鏈烘瀯璧勯噾甯愬彿 +CThostFtdcSecAgentACIDMapField["BrokerSecAgentID"] = "string" +structDict['CThostFtdcSecAgentACIDMapField'] = CThostFtdcSecAgentACIDMapField + + +#浜岀骇浠g悊鎿嶄綔鍛橀摱鏈熸潈闄愭煡璇 +CThostFtdcQrySecAgentACIDMapField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQrySecAgentACIDMapField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcQrySecAgentACIDMapField["UserID"] = "string" +#璧勯噾璐︽埛 +CThostFtdcQrySecAgentACIDMapField["AccountID"] = "string" +#甯佺 +CThostFtdcQrySecAgentACIDMapField["CurrencyID"] = "string" +structDict['CThostFtdcQrySecAgentACIDMapField'] = CThostFtdcQrySecAgentACIDMapField + + +#鐏惧涓績浜ゆ槗鏉冮檺 +CThostFtdcUserRightsAssignField = {} +#搴旂敤鍗曞厓浠g爜 +CThostFtdcUserRightsAssignField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcUserRightsAssignField["UserID"] = "string" +#浜ゆ槗涓績浠g爜 +CThostFtdcUserRightsAssignField["DRIdentityID"] = "int" +structDict['CThostFtdcUserRightsAssignField'] = CThostFtdcUserRightsAssignField + + +#缁忔祹鍏徃鏄惁鏈夊湪鏈爣绀虹殑浜ゆ槗鏉冮檺 +CThostFtdcBrokerUserRightAssignField = {} +#搴旂敤鍗曞厓浠g爜 +CThostFtdcBrokerUserRightAssignField["BrokerID"] = "string" +#浜ゆ槗涓績浠g爜 +CThostFtdcBrokerUserRightAssignField["DRIdentityID"] = "int" +#鑳藉惁浜ゆ槗 +CThostFtdcBrokerUserRightAssignField["Tradeable"] = "int" +structDict['CThostFtdcBrokerUserRightAssignField'] = CThostFtdcBrokerUserRightAssignField + + +#鐏惧浜ゆ槗杞崲鎶ユ枃 +CThostFtdcDRTransferField = {} +#鍘熶氦鏄撲腑蹇冧唬鐮 +CThostFtdcDRTransferField["OrigDRIdentityID"] = "int" +#鐩爣浜ゆ槗涓績浠g爜 +CThostFtdcDRTransferField["DestDRIdentityID"] = "int" +#鍘熷簲鐢ㄥ崟鍏冧唬鐮 +CThostFtdcDRTransferField["OrigBrokerID"] = "string" +#鐩爣鏄撶敤鍗曞厓浠g爜 +CThostFtdcDRTransferField["DestBrokerID"] = "string" +structDict['CThostFtdcDRTransferField'] = CThostFtdcDRTransferField + + +#Fens鐢ㄦ埛淇℃伅 +CThostFtdcFensUserInfoField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcFensUserInfoField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcFensUserInfoField["UserID"] = "string" +#鐧诲綍妯″紡 +CThostFtdcFensUserInfoField["LoginMode"] = "string" +structDict['CThostFtdcFensUserInfoField'] = CThostFtdcFensUserInfoField + + +#褰撳墠閾舵湡鎵灞炰氦鏄撲腑蹇 +CThostFtdcCurrTransferIdentityField = {} +#浜ゆ槗涓績浠g爜 +CThostFtdcCurrTransferIdentityField["IdentityID"] = "int" +structDict['CThostFtdcCurrTransferIdentityField'] = CThostFtdcCurrTransferIdentityField + + +#绂佹鐧诲綍鐢ㄦ埛 +CThostFtdcLoginForbiddenUserField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcLoginForbiddenUserField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcLoginForbiddenUserField["UserID"] = "string" +structDict['CThostFtdcLoginForbiddenUserField'] = CThostFtdcLoginForbiddenUserField + + +#鏌ヨ绂佹鐧诲綍鐢ㄦ埛 +CThostFtdcQryLoginForbiddenUserField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcQryLoginForbiddenUserField["BrokerID"] = "string" +#鐢ㄦ埛浠g爜 +CThostFtdcQryLoginForbiddenUserField["UserID"] = "string" +structDict['CThostFtdcQryLoginForbiddenUserField'] = CThostFtdcQryLoginForbiddenUserField + + +#UDP缁勬挱缁勪俊鎭 +CThostFtdcMulticastGroupInfoField = {} +#缁勬挱缁処P鍦板潃 +CThostFtdcMulticastGroupInfoField["GroupIP"] = "string" +#缁勬挱缁処P绔彛 +CThostFtdcMulticastGroupInfoField["GroupPort"] = "int" +#婧愬湴鍧 +CThostFtdcMulticastGroupInfoField["SourceIP"] = "string" +structDict['CThostFtdcMulticastGroupInfoField'] = CThostFtdcMulticastGroupInfoField + + +#璧勯噾璐︽埛鍩烘湰鍑嗗閲 +CThostFtdcTradingAccountReserveField = {} +#缁忕邯鍏徃浠g爜 +CThostFtdcTradingAccountReserveField["BrokerID"] = "string" +#鎶曡祫鑰呭笎鍙 +CThostFtdcTradingAccountReserveField["AccountID"] = "string" +#鍩烘湰鍑嗗閲 +CThostFtdcTradingAccountReserveField["Reserve"] = "float" +#甯佺浠g爜 +CThostFtdcTradingAccountReserveField["CurrencyID"] = "string" +structDict['CThostFtdcTradingAccountReserveField'] = CThostFtdcTradingAccountReserveField + + + + + diff --git a/vn.ctp/pyscript/ctp_td_define.cpp b/vn.ctp/pyscript/ctp_td_define.cpp new file mode 100644 index 00000000..1b03e346 --- /dev/null +++ b/vn.ctp/pyscript/ctp_td_define.cpp @@ -0,0 +1,97 @@ +#define ONFRONTCONNECTED 1 +#define ONFRONTDISCONNECTED 2 +#define ONHEARTBEATWARNING 3 +#define ONRSPAUTHENTICATE 4 +#define ONRSPUSERLOGIN 5 +#define ONRSPUSERLOGOUT 6 +#define ONRSPUSERPASSWORDUPDATE 7 +#define ONRSPTRADINGACCOUNTPASSWORDUPDATE 8 +#define ONRSPORDERINSERT 9 +#define ONRSPPARKEDORDERINSERT 10 +#define ONRSPPARKEDORDERACTION 11 +#define ONRSPORDERACTION 12 +#define ONRSPQUERYMAXORDERVOLUME 13 +#define ONRSPSETTLEMENTINFOCONFIRM 14 +#define ONRSPREMOVEPARKEDORDER 15 +#define ONRSPREMOVEPARKEDORDERACTION 16 +#define ONRSPEXECORDERINSERT 17 +#define ONRSPEXECORDERACTION 18 +#define ONRSPFORQUOTEINSERT 19 +#define ONRSPQUOTEINSERT 20 +#define ONRSPQUOTEACTION 21 +#define ONRSPQRYORDER 22 +#define ONRSPQRYTRADE 23 +#define ONRSPQRYINVESTORPOSITION 24 +#define ONRSPQRYTRADINGACCOUNT 25 +#define ONRSPQRYINVESTOR 26 +#define ONRSPQRYTRADINGCODE 27 +#define ONRSPQRYINSTRUMENTMARGINRATE 28 +#define ONRSPQRYINSTRUMENTCOMMISSIONRATE 29 +#define ONRSPQRYEXCHANGE 30 +#define ONRSPQRYPRODUCT 31 +#define ONRSPQRYINSTRUMENT 32 +#define ONRSPQRYDEPTHMARKETDATA 33 +#define ONRSPQRYSETTLEMENTINFO 34 +#define ONRSPQRYTRANSFERBANK 35 +#define ONRSPQRYINVESTORPOSITIONDETAIL 36 +#define ONRSPQRYNOTICE 37 +#define ONRSPQRYSETTLEMENTINFOCONFIRM 38 +#define ONRSPQRYINVESTORPOSITIONCOMBINEDETAIL 39 +#define ONRSPQRYCFMMCTRADINGACCOUNTKEY 40 +#define ONRSPQRYEWARRANTOFFSET 41 +#define ONRSPQRYINVESTORPRODUCTGROUPMARGIN 42 +#define ONRSPQRYEXCHANGEMARGINRATE 43 +#define ONRSPQRYEXCHANGEMARGINRATEADJUST 44 +#define ONRSPQRYEXCHANGERATE 45 +#define ONRSPQRYSECAGENTACIDMAP 46 +#define ONRSPQRYOPTIONINSTRTRADECOST 47 +#define ONRSPQRYOPTIONINSTRCOMMRATE 48 +#define ONRSPQRYEXECORDER 49 +#define ONRSPQRYFORQUOTE 50 +#define ONRSPQRYQUOTE 51 +#define ONRSPQRYTRANSFERSERIAL 52 +#define ONRSPQRYACCOUNTREGISTER 53 +#define ONRSPERROR 54 +#define ONRTNORDER 55 +#define ONRTNTRADE 56 +#define ONERRRTNORDERINSERT 57 +#define ONERRRTNORDERACTION 58 +#define ONRTNINSTRUMENTSTATUS 59 +#define ONRTNTRADINGNOTICE 60 +#define ONRTNERRORCONDITIONALORDER 61 +#define ONRTNEXECORDER 62 +#define ONERRRTNEXECORDERINSERT 63 +#define ONERRRTNEXECORDERACTION 64 +#define ONERRRTNFORQUOTEINSERT 65 +#define ONRTNQUOTE 66 +#define ONERRRTNQUOTEINSERT 67 +#define ONERRRTNQUOTEACTION 68 +#define ONRTNFORQUOTERSP 69 +#define ONRSPQRYCONTRACTBANK 70 +#define ONRSPQRYPARKEDORDER 71 +#define ONRSPQRYPARKEDORDERACTION 72 +#define ONRSPQRYTRADINGNOTICE 73 +#define ONRSPQRYBROKERTRADINGPARAMS 74 +#define ONRSPQRYBROKERTRADINGALGOS 75 +#define ONRTNFROMBANKTOFUTUREBYBANK 76 +#define ONRTNFROMFUTURETOBANKBYBANK 77 +#define ONRTNREPEALFROMBANKTOFUTUREBYBANK 78 +#define ONRTNREPEALFROMFUTURETOBANKBYBANK 79 +#define ONRTNFROMBANKTOFUTUREBYFUTURE 80 +#define ONRTNFROMFUTURETOBANKBYFUTURE 81 +#define ONRTNREPEALFROMBANKTOFUTUREBYFUTUREMANUAL 82 +#define ONRTNREPEALFROMFUTURETOBANKBYFUTUREMANUAL 83 +#define ONRTNQUERYBANKBALANCEBYFUTURE 84 +#define ONERRRTNBANKTOFUTUREBYFUTURE 85 +#define ONERRRTNFUTURETOBANKBYFUTURE 86 +#define ONERRRTNREPEALBANKTOFUTUREBYFUTUREMANUAL 87 +#define ONERRRTNREPEALFUTURETOBANKBYFUTUREMANUAL 88 +#define ONERRRTNQUERYBANKBALANCEBYFUTURE 89 +#define ONRTNREPEALFROMBANKTOFUTUREBYFUTURE 90 +#define ONRTNREPEALFROMFUTURETOBANKBYFUTURE 91 +#define ONRSPFROMBANKTOFUTUREBYFUTURE 92 +#define ONRSPFROMFUTURETOBANKBYFUTURE 93 +#define ONRSPQUERYBANKACCOUNTMONEYBYFUTURE 94 +#define ONRTNOPENACCOUNTBYBANK 95 +#define ONRTNCANCELACCOUNTBYBANK 96 +#define ONRTNCHANGEACCOUNTBYBANK 97 diff --git a/vn.ctp/pyscript/ctp_td_function.cpp b/vn.ctp/pyscript/ctp_td_function.cpp new file mode 100644 index 00000000..16b05f8e --- /dev/null +++ b/vn.ctp/pyscript/ctp_td_function.cpp @@ -0,0 +1,915 @@ +int TdApi::reqAuthenticate(dict req, int nRequestID) +{ + CThostFtdcReqAuthenticateField myreq = CThostFtdcReqAuthenticateField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "UserID", myreq.UserID); + getChar(req, "AuthCode", myreq.AuthCode); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "UserProductInfo", myreq.UserProductInfo); + int i = this->api->ReqAuthenticate(&myreq, nRequestID); + return i; +}; + +int TdApi::reqUserLogin(dict req, int nRequestID) +{ + CThostFtdcReqUserLoginField myreq = CThostFtdcReqUserLoginField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "MacAddress", myreq.MacAddress); + getChar(req, "UserProductInfo", myreq.UserProductInfo); + getChar(req, "UserID", myreq.UserID); + getChar(req, "TradingDay", myreq.TradingDay); + getChar(req, "InterfaceProductInfo", myreq.InterfaceProductInfo); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "ClientIPAddress", myreq.ClientIPAddress); + getChar(req, "OneTimePassword", myreq.OneTimePassword); + getChar(req, "ProtocolInfo", myreq.ProtocolInfo); + getChar(req, "Password", myreq.Password); + int i = this->api->ReqUserLogin(&myreq, nRequestID); + return i; +}; + +int TdApi::reqUserLogout(dict req, int nRequestID) +{ + CThostFtdcUserLogoutField myreq = CThostFtdcUserLogoutField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "UserID", myreq.UserID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqUserLogout(&myreq, nRequestID); + return i; +}; + +int TdApi::reqUserPasswordUpdate(dict req, int nRequestID) +{ + CThostFtdcUserPasswordUpdateField myreq = CThostFtdcUserPasswordUpdateField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "UserID", myreq.UserID); + getChar(req, "NewPassword", myreq.NewPassword); + getChar(req, "OldPassword", myreq.OldPassword); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqUserPasswordUpdate(&myreq, nRequestID); + return i; +}; + +int TdApi::reqTradingAccountPasswordUpdate(dict req, int nRequestID) +{ + CThostFtdcTradingAccountPasswordUpdateField myreq = CThostFtdcTradingAccountPasswordUpdateField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "NewPassword", myreq.NewPassword); + getChar(req, "OldPassword", myreq.OldPassword); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "AccountID", myreq.AccountID); + int i = this->api->ReqTradingAccountPasswordUpdate(&myreq, nRequestID); + return i; +}; + +int TdApi::reqOrderInsert(dict req, int nRequestID) +{ + CThostFtdcInputOrderField myreq = CThostFtdcInputOrderField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "ContingentCondition", myreq.ContingentCondition); + getChar(req, "CombOffsetFlag", myreq.CombOffsetFlag); + getChar(req, "UserID", myreq.UserID); + getChar(req, "UserID", myreq.UserID); + getInt(req, "UserForceClose", &myreq.UserForceClose); + getChar(req, "Direction", myreq.Direction); + getInt(req, "IsSwapOrder", &myreq.IsSwapOrder); + getInt(req, "VolumeTotalOriginal", &myreq.VolumeTotalOriginal); + getChar(req, "OrderPriceType", myreq.OrderPriceType); + getChar(req, "TimeCondition", myreq.TimeCondition); + getInt(req, "IsAutoSuspend", &myreq.IsAutoSuspend); + getInt(req, "IsAutoSuspend", &myreq.IsAutoSuspend); + getChar(req, "InstrumentID", myreq.InstrumentID); + getInt(req, "MinVolume", &myreq.MinVolume); + getChar(req, "ForceCloseReason", myreq.ForceCloseReason); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "CombHedgeFlag", myreq.CombHedgeFlag); + getChar(req, "GTDDate", myreq.GTDDate); + getChar(req, "BusinessUnit", myreq.BusinessUnit); + getChar(req, "OrderRef", myreq.OrderRef); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "VolumeCondition", myreq.VolumeCondition); + getInt(req, "RequestID", &myreq.RequestID); + int i = this->api->ReqOrderInsert(&myreq, nRequestID); + return i; +}; + +int TdApi::reqParkedOrderInsert(dict req, int nRequestID) +{ + CThostFtdcParkedOrderField myreq = CThostFtdcParkedOrderField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "ContingentCondition", myreq.ContingentCondition); + getChar(req, "CombOffsetFlag", myreq.CombOffsetFlag); + getChar(req, "UserID", myreq.UserID); + getChar(req, "UserID", myreq.UserID); + getInt(req, "UserForceClose", &myreq.UserForceClose); + getChar(req, "Status", myreq.Status); + getChar(req, "Direction", myreq.Direction); + getInt(req, "IsSwapOrder", &myreq.IsSwapOrder); + getChar(req, "UserType", myreq.UserType); + getInt(req, "VolumeTotalOriginal", &myreq.VolumeTotalOriginal); + getChar(req, "OrderPriceType", myreq.OrderPriceType); + getChar(req, "TimeCondition", myreq.TimeCondition); + getInt(req, "IsAutoSuspend", &myreq.IsAutoSuspend); + getInt(req, "IsAutoSuspend", &myreq.IsAutoSuspend); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getInt(req, "MinVolume", &myreq.MinVolume); + getChar(req, "ForceCloseReason", myreq.ForceCloseReason); + getInt(req, "ErrorID", &myreq.ErrorID); + getChar(req, "ParkedOrderID", myreq.ParkedOrderID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "CombHedgeFlag", myreq.CombHedgeFlag); + getChar(req, "GTDDate", myreq.GTDDate); + getChar(req, "BusinessUnit", myreq.BusinessUnit); + getChar(req, "ErrorMsg", myreq.ErrorMsg); + getChar(req, "OrderRef", myreq.OrderRef); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "VolumeCondition", myreq.VolumeCondition); + getInt(req, "RequestID", &myreq.RequestID); + int i = this->api->ReqParkedOrderInsert(&myreq, nRequestID); + return i; +}; + +int TdApi::reqParkedOrderAction(dict req, int nRequestID) +{ + CThostFtdcParkedOrderActionField myreq = CThostFtdcParkedOrderActionField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "Status", myreq.Status); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "ActionFlag", myreq.ActionFlag); + getInt(req, "OrderActionRef", &myreq.OrderActionRef); + getChar(req, "UserType", myreq.UserType); + getChar(req, "ErrorMsg", myreq.ErrorMsg); + getChar(req, "UserID", myreq.UserID); + getChar(req, "UserID", myreq.UserID); + getChar(req, "OrderRef", myreq.OrderRef); + getChar(req, "InvestorID", myreq.InvestorID); + getInt(req, "SessionID", &myreq.SessionID); + getInt(req, "VolumeChange", &myreq.VolumeChange); + getChar(req, "BrokerID", myreq.BrokerID); + getInt(req, "RequestID", &myreq.RequestID); + getChar(req, "OrderSysID", myreq.OrderSysID); + getChar(req, "ParkedOrderActionID", myreq.ParkedOrderActionID); + getInt(req, "FrontID", &myreq.FrontID); + getInt(req, "ErrorID", &myreq.ErrorID); + int i = this->api->ReqParkedOrderAction(&myreq, nRequestID); + return i; +}; + +int TdApi::reqOrderAction(dict req, int nRequestID) +{ + CThostFtdcInputOrderActionField myreq = CThostFtdcInputOrderActionField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "ActionFlag", myreq.ActionFlag); + getInt(req, "OrderActionRef", &myreq.OrderActionRef); + getChar(req, "UserID", myreq.UserID); + getChar(req, "UserID", myreq.UserID); + getChar(req, "OrderRef", myreq.OrderRef); + getChar(req, "InvestorID", myreq.InvestorID); + getInt(req, "SessionID", &myreq.SessionID); + getInt(req, "VolumeChange", &myreq.VolumeChange); + getChar(req, "BrokerID", myreq.BrokerID); + getInt(req, "RequestID", &myreq.RequestID); + getChar(req, "OrderSysID", myreq.OrderSysID); + getInt(req, "FrontID", &myreq.FrontID); + int i = this->api->ReqOrderAction(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQueryMaxOrderVolume(dict req, int nRequestID) +{ + CThostFtdcQueryMaxOrderVolumeField myreq = CThostFtdcQueryMaxOrderVolumeField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "Direction", myreq.Direction); + getChar(req, "OffsetFlag", myreq.OffsetFlag); + getChar(req, "HedgeFlag", myreq.HedgeFlag); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getInt(req, "MaxVolume", &myreq.MaxVolume); + int i = this->api->ReqQueryMaxOrderVolume(&myreq, nRequestID); + return i; +}; + +int TdApi::reqSettlementInfoConfirm(dict req, int nRequestID) +{ + CThostFtdcSettlementInfoConfirmField myreq = CThostFtdcSettlementInfoConfirmField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "ConfirmTime", myreq.ConfirmTime); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "ConfirmDate", myreq.ConfirmDate); + int i = this->api->ReqSettlementInfoConfirm(&myreq, nRequestID); + return i; +}; + +int TdApi::reqRemoveParkedOrder(dict req, int nRequestID) +{ + CThostFtdcRemoveParkedOrderField myreq = CThostFtdcRemoveParkedOrderField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "ParkedOrderID", myreq.ParkedOrderID); + int i = this->api->ReqRemoveParkedOrder(&myreq, nRequestID); + return i; +}; + +int TdApi::reqRemoveParkedOrderAction(dict req, int nRequestID) +{ + CThostFtdcRemoveParkedOrderActionField myreq = CThostFtdcRemoveParkedOrderActionField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "ParkedOrderActionID", myreq.ParkedOrderActionID); + int i = this->api->ReqRemoveParkedOrderAction(&myreq, nRequestID); + return i; +}; + +int TdApi::reqExecOrderInsert(dict req, int nRequestID) +{ + CThostFtdcInputExecOrderField myreq = CThostFtdcInputExecOrderField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExecOrderRef", myreq.ExecOrderRef); + getChar(req, "CloseFlag", myreq.CloseFlag); + getChar(req, "OffsetFlag", myreq.OffsetFlag); + getChar(req, "PosiDirection", myreq.PosiDirection); + getChar(req, "BusinessUnit", myreq.BusinessUnit); + getChar(req, "HedgeFlag", myreq.HedgeFlag); + getChar(req, "UserID", myreq.UserID); + getInt(req, "Volume", &myreq.Volume); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getInt(req, "RequestID", &myreq.RequestID); + getChar(req, "ActionType", myreq.ActionType); + getChar(req, "ReservePositionFlag", myreq.ReservePositionFlag); + int i = this->api->ReqExecOrderInsert(&myreq, nRequestID); + return i; +}; + +int TdApi::reqExecOrderAction(dict req, int nRequestID) +{ + CThostFtdcInputExecOrderActionField myreq = CThostFtdcInputExecOrderActionField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExecOrderSysID", myreq.ExecOrderSysID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "UserID", myreq.UserID); + getChar(req, "ExecOrderRef", myreq.ExecOrderRef); + getChar(req, "InvestorID", myreq.InvestorID); + getInt(req, "SessionID", &myreq.SessionID); + getChar(req, "BrokerID", myreq.BrokerID); + getInt(req, "RequestID", &myreq.RequestID); + getChar(req, "ActionFlag", myreq.ActionFlag); + getInt(req, "ExecOrderActionRef", &myreq.ExecOrderActionRef); + getInt(req, "FrontID", &myreq.FrontID); + int i = this->api->ReqExecOrderAction(&myreq, nRequestID); + return i; +}; + +int TdApi::reqForQuoteInsert(dict req, int nRequestID) +{ + CThostFtdcInputForQuoteField myreq = CThostFtdcInputForQuoteField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "UserID", myreq.UserID); + getChar(req, "ForQuoteRef", myreq.ForQuoteRef); + int i = this->api->ReqForQuoteInsert(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQuoteInsert(dict req, int nRequestID) +{ + CThostFtdcInputQuoteField myreq = CThostFtdcInputQuoteField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "AskHedgeFlag", myreq.AskHedgeFlag); + getChar(req, "BusinessUnit", myreq.BusinessUnit); + getChar(req, "BusinessUnit", myreq.BusinessUnit); + getChar(req, "UserID", myreq.UserID); + getChar(req, "AskOffsetFlag", myreq.AskOffsetFlag); + getInt(req, "BidVolume", &myreq.BidVolume); + getInt(req, "AskVolume", &myreq.AskVolume); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BidOffsetFlag", myreq.BidOffsetFlag); + getChar(req, "BrokerID", myreq.BrokerID); + getInt(req, "RequestID", &myreq.RequestID); + getInt(req, "RequestID", &myreq.RequestID); + getChar(req, "BidHedgeFlag", myreq.BidHedgeFlag); + getChar(req, "QuoteRef", myreq.QuoteRef); + int i = this->api->ReqQuoteInsert(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQuoteAction(dict req, int nRequestID) +{ + CThostFtdcInputQuoteActionField myreq = CThostFtdcInputQuoteActionField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getInt(req, "QuoteActionRef", &myreq.QuoteActionRef); + getChar(req, "UserID", myreq.UserID); + getChar(req, "InvestorID", myreq.InvestorID); + getInt(req, "SessionID", &myreq.SessionID); + getChar(req, "BrokerID", myreq.BrokerID); + getInt(req, "RequestID", &myreq.RequestID); + getChar(req, "ActionFlag", myreq.ActionFlag); + getInt(req, "FrontID", &myreq.FrontID); + getChar(req, "QuoteSysID", myreq.QuoteSysID); + getChar(req, "QuoteRef", myreq.QuoteRef); + int i = this->api->ReqQuoteAction(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryOrder(dict req, int nRequestID) +{ + CThostFtdcQryOrderField myreq = CThostFtdcQryOrderField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "InsertTimeStart", myreq.InsertTimeStart); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "OrderSysID", myreq.OrderSysID); + getChar(req, "InsertTimeEnd", myreq.InsertTimeEnd); + int i = this->api->ReqQryOrder(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryTrade(dict req, int nRequestID) +{ + CThostFtdcQryTradeField myreq = CThostFtdcQryTradeField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "TradeTimeStart", myreq.TradeTimeStart); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "TradeID", myreq.TradeID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "TradeTimeEnd", myreq.TradeTimeEnd); + int i = this->api->ReqQryTrade(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryInvestorPosition(dict req, int nRequestID) +{ + CThostFtdcQryInvestorPositionField myreq = CThostFtdcQryInvestorPositionField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryInvestorPosition(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryTradingAccount(dict req, int nRequestID) +{ + CThostFtdcQryTradingAccountField myreq = CThostFtdcQryTradingAccountField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryTradingAccount(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryInvestor(dict req, int nRequestID) +{ + CThostFtdcQryInvestorField myreq = CThostFtdcQryInvestorField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryInvestor(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryTradingCode(dict req, int nRequestID) +{ + CThostFtdcQryTradingCodeField myreq = CThostFtdcQryTradingCodeField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "ClientIDType", myreq.ClientIDType); + getChar(req, "ClientID", myreq.ClientID); + int i = this->api->ReqQryTradingCode(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryInstrumentMarginRate(dict req, int nRequestID) +{ + CThostFtdcQryInstrumentMarginRateField myreq = CThostFtdcQryInstrumentMarginRateField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "HedgeFlag", myreq.HedgeFlag); + int i = this->api->ReqQryInstrumentMarginRate(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryInstrumentCommissionRate(dict req, int nRequestID) +{ + CThostFtdcQryInstrumentCommissionRateField myreq = CThostFtdcQryInstrumentCommissionRateField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryInstrumentCommissionRate(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryExchange(dict req, int nRequestID) +{ + CThostFtdcQryExchangeField myreq = CThostFtdcQryExchangeField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "ExchangeID", myreq.ExchangeID); + int i = this->api->ReqQryExchange(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryProduct(dict req, int nRequestID) +{ + CThostFtdcQryProductField myreq = CThostFtdcQryProductField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "ProductClass", myreq.ProductClass); + getChar(req, "ProductID", myreq.ProductID); + int i = this->api->ReqQryProduct(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryInstrument(dict req, int nRequestID) +{ + CThostFtdcQryInstrumentField myreq = CThostFtdcQryInstrumentField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "ExchangeInstID", myreq.ExchangeInstID); + getChar(req, "ProductID", myreq.ProductID); + int i = this->api->ReqQryInstrument(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryDepthMarketData(dict req, int nRequestID) +{ + CThostFtdcQryDepthMarketDataField myreq = CThostFtdcQryDepthMarketDataField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + int i = this->api->ReqQryDepthMarketData(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQrySettlementInfo(dict req, int nRequestID) +{ + CThostFtdcQrySettlementInfoField myreq = CThostFtdcQrySettlementInfoField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "TradingDay", myreq.TradingDay); + int i = this->api->ReqQrySettlementInfo(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryTransferBank(dict req, int nRequestID) +{ + CThostFtdcQryTransferBankField myreq = CThostFtdcQryTransferBankField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "BankBrchID", myreq.BankBrchID); + getChar(req, "BankID", myreq.BankID); + int i = this->api->ReqQryTransferBank(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryInvestorPositionDetail(dict req, int nRequestID) +{ + CThostFtdcQryInvestorPositionDetailField myreq = CThostFtdcQryInvestorPositionDetailField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryInvestorPositionDetail(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryNotice(dict req, int nRequestID) +{ + CThostFtdcQryNoticeField myreq = CThostFtdcQryNoticeField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryNotice(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQrySettlementInfoConfirm(dict req, int nRequestID) +{ + CThostFtdcQrySettlementInfoConfirmField myreq = CThostFtdcQrySettlementInfoConfirmField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQrySettlementInfoConfirm(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryInvestorPositionCombineDetail(dict req, int nRequestID) +{ + CThostFtdcQryInvestorPositionCombineDetailField myreq = CThostFtdcQryInvestorPositionCombineDetailField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "CombInstrumentID", myreq.CombInstrumentID); + int i = this->api->ReqQryInvestorPositionCombineDetail(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryCFMMCTradingAccountKey(dict req, int nRequestID) +{ + CThostFtdcQryCFMMCTradingAccountKeyField myreq = CThostFtdcQryCFMMCTradingAccountKeyField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryCFMMCTradingAccountKey(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryEWarrantOffset(dict req, int nRequestID) +{ + CThostFtdcQryEWarrantOffsetField myreq = CThostFtdcQryEWarrantOffsetField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryEWarrantOffset(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryInvestorProductGroupMargin(dict req, int nRequestID) +{ + CThostFtdcQryInvestorProductGroupMarginField myreq = CThostFtdcQryInvestorProductGroupMarginField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "HedgeFlag", myreq.HedgeFlag); + getChar(req, "ProductGroupID", myreq.ProductGroupID); + int i = this->api->ReqQryInvestorProductGroupMargin(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryExchangeMarginRate(dict req, int nRequestID) +{ + CThostFtdcQryExchangeMarginRateField myreq = CThostFtdcQryExchangeMarginRateField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "HedgeFlag", myreq.HedgeFlag); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryExchangeMarginRate(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryExchangeMarginRateAdjust(dict req, int nRequestID) +{ + CThostFtdcQryExchangeMarginRateAdjustField myreq = CThostFtdcQryExchangeMarginRateAdjustField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "HedgeFlag", myreq.HedgeFlag); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryExchangeMarginRateAdjust(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryExchangeRate(dict req, int nRequestID) +{ + CThostFtdcQryExchangeRateField myreq = CThostFtdcQryExchangeRateField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "FromCurrencyID", myreq.FromCurrencyID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "ToCurrencyID", myreq.ToCurrencyID); + int i = this->api->ReqQryExchangeRate(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQrySecAgentACIDMap(dict req, int nRequestID) +{ + CThostFtdcQrySecAgentACIDMapField myreq = CThostFtdcQrySecAgentACIDMapField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "UserID", myreq.UserID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "AccountID", myreq.AccountID); + int i = this->api->ReqQrySecAgentACIDMap(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryOptionInstrTradeCost(dict req, int nRequestID) +{ + CThostFtdcQryOptionInstrTradeCostField myreq = CThostFtdcQryOptionInstrTradeCostField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "HedgeFlag", myreq.HedgeFlag); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryOptionInstrTradeCost(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryOptionInstrCommRate(dict req, int nRequestID) +{ + CThostFtdcQryOptionInstrCommRateField myreq = CThostFtdcQryOptionInstrCommRateField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryOptionInstrCommRate(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryExecOrder(dict req, int nRequestID) +{ + CThostFtdcQryExecOrderField myreq = CThostFtdcQryExecOrderField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExecOrderSysID", myreq.ExecOrderSysID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "InsertTimeStart", myreq.InsertTimeStart); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "InsertTimeEnd", myreq.InsertTimeEnd); + int i = this->api->ReqQryExecOrder(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryForQuote(dict req, int nRequestID) +{ + CThostFtdcQryForQuoteField myreq = CThostFtdcQryForQuoteField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "InsertTimeStart", myreq.InsertTimeStart); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "InsertTimeEnd", myreq.InsertTimeEnd); + int i = this->api->ReqQryForQuote(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryQuote(dict req, int nRequestID) +{ + CThostFtdcQryQuoteField myreq = CThostFtdcQryQuoteField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "InsertTimeStart", myreq.InsertTimeStart); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "QuoteSysID", myreq.QuoteSysID); + getChar(req, "InsertTimeEnd", myreq.InsertTimeEnd); + int i = this->api->ReqQryQuote(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryTransferSerial(dict req, int nRequestID) +{ + CThostFtdcQryTransferSerialField myreq = CThostFtdcQryTransferSerialField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "BankID", myreq.BankID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "AccountID", myreq.AccountID); + int i = this->api->ReqQryTransferSerial(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryAccountregister(dict req, int nRequestID) +{ + CThostFtdcQryAccountregisterField myreq = CThostFtdcQryAccountregisterField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "BankID", myreq.BankID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "BankBranchID", myreq.BankBranchID); + getChar(req, "AccountID", myreq.AccountID); + int i = this->api->ReqQryAccountregister(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryContractBank(dict req, int nRequestID) +{ + CThostFtdcQryContractBankField myreq = CThostFtdcQryContractBankField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "BankBrchID", myreq.BankBrchID); + getChar(req, "BankID", myreq.BankID); + int i = this->api->ReqQryContractBank(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryParkedOrder(dict req, int nRequestID) +{ + CThostFtdcQryParkedOrderField myreq = CThostFtdcQryParkedOrderField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryParkedOrder(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryParkedOrderAction(dict req, int nRequestID) +{ + CThostFtdcQryParkedOrderActionField myreq = CThostFtdcQryParkedOrderActionField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryParkedOrderAction(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryTradingNotice(dict req, int nRequestID) +{ + CThostFtdcQryTradingNoticeField myreq = CThostFtdcQryTradingNoticeField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryTradingNotice(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryBrokerTradingParams(dict req, int nRequestID) +{ + CThostFtdcQryBrokerTradingParamsField myreq = CThostFtdcQryBrokerTradingParamsField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryBrokerTradingParams(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryBrokerTradingAlgos(dict req, int nRequestID) +{ + CThostFtdcQryBrokerTradingAlgosField myreq = CThostFtdcQryBrokerTradingAlgosField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryBrokerTradingAlgos(&myreq, nRequestID); + return i; +}; + +int TdApi::reqFromBankToFutureByFuture(dict req, int nRequestID) +{ + CThostFtdcReqTransferField myreq = CThostFtdcReqTransferField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "BrokerBranchID", myreq.BrokerBranchID); + getChar(req, "UserID", myreq.UserID); + getChar(req, "BankPassWord", myreq.BankPassWord); + getChar(req, "TradeTime", myreq.TradeTime); + getChar(req, "VerifyCertNoFlag", myreq.VerifyCertNoFlag); + getInt(req, "TID", &myreq.TID); + getChar(req, "AccountID", myreq.AccountID); + getChar(req, "BankAccount", myreq.BankAccount); + getInt(req, "InstallID", &myreq.InstallID); + getChar(req, "CustomerName", myreq.CustomerName); + getChar(req, "TradeCode", myreq.TradeCode); + getChar(req, "BankBranchID", myreq.BankBranchID); + getInt(req, "SessionID", &myreq.SessionID); + getChar(req, "BankID", myreq.BankID); + getChar(req, "Password", myreq.Password); + getChar(req, "BankPwdFlag", myreq.BankPwdFlag); + getInt(req, "RequestID", &myreq.RequestID); + getChar(req, "CustType", myreq.CustType); + getChar(req, "IdentifiedCardNo", myreq.IdentifiedCardNo); + getChar(req, "FeePayFlag", myreq.FeePayFlag); + getChar(req, "BankSerial", myreq.BankSerial); + getChar(req, "OperNo", myreq.OperNo); + getChar(req, "TradingDay", myreq.TradingDay); + getChar(req, "BankSecuAcc", myreq.BankSecuAcc); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "DeviceID", myreq.DeviceID); + getChar(req, "TransferStatus", myreq.TransferStatus); + getChar(req, "IdCardType", myreq.IdCardType); + getInt(req, "PlateSerial", &myreq.PlateSerial); + getInt(req, "PlateSerial", &myreq.PlateSerial); + getChar(req, "TradeDate", myreq.TradeDate); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "BankAccType", myreq.BankAccType); + getChar(req, "LastFragment", myreq.LastFragment); + getInt(req, "FutureSerial", &myreq.FutureSerial); + getChar(req, "BankSecuAccType", myreq.BankSecuAccType); + getChar(req, "BrokerIDByBank", myreq.BrokerIDByBank); + getChar(req, "SecuPwdFlag", myreq.SecuPwdFlag); + getChar(req, "Message", myreq.Message); + getChar(req, "Message", myreq.Message); + getChar(req, "Message", myreq.Message); + getChar(req, "Digest", myreq.Digest); + int i = this->api->ReqFromBankToFutureByFuture(&myreq, nRequestID); + return i; +}; + +int TdApi::reqFromFutureToBankByFuture(dict req, int nRequestID) +{ + CThostFtdcReqTransferField myreq = CThostFtdcReqTransferField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "BrokerBranchID", myreq.BrokerBranchID); + getChar(req, "UserID", myreq.UserID); + getChar(req, "BankPassWord", myreq.BankPassWord); + getChar(req, "TradeTime", myreq.TradeTime); + getChar(req, "VerifyCertNoFlag", myreq.VerifyCertNoFlag); + getInt(req, "TID", &myreq.TID); + getChar(req, "AccountID", myreq.AccountID); + getChar(req, "BankAccount", myreq.BankAccount); + getInt(req, "InstallID", &myreq.InstallID); + getChar(req, "CustomerName", myreq.CustomerName); + getChar(req, "TradeCode", myreq.TradeCode); + getChar(req, "BankBranchID", myreq.BankBranchID); + getInt(req, "SessionID", &myreq.SessionID); + getChar(req, "BankID", myreq.BankID); + getChar(req, "Password", myreq.Password); + getChar(req, "BankPwdFlag", myreq.BankPwdFlag); + getInt(req, "RequestID", &myreq.RequestID); + getChar(req, "CustType", myreq.CustType); + getChar(req, "IdentifiedCardNo", myreq.IdentifiedCardNo); + getChar(req, "FeePayFlag", myreq.FeePayFlag); + getChar(req, "BankSerial", myreq.BankSerial); + getChar(req, "OperNo", myreq.OperNo); + getChar(req, "TradingDay", myreq.TradingDay); + getChar(req, "BankSecuAcc", myreq.BankSecuAcc); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "DeviceID", myreq.DeviceID); + getChar(req, "TransferStatus", myreq.TransferStatus); + getChar(req, "IdCardType", myreq.IdCardType); + getInt(req, "PlateSerial", &myreq.PlateSerial); + getInt(req, "PlateSerial", &myreq.PlateSerial); + getChar(req, "TradeDate", myreq.TradeDate); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "BankAccType", myreq.BankAccType); + getChar(req, "LastFragment", myreq.LastFragment); + getInt(req, "FutureSerial", &myreq.FutureSerial); + getChar(req, "BankSecuAccType", myreq.BankSecuAccType); + getChar(req, "BrokerIDByBank", myreq.BrokerIDByBank); + getChar(req, "SecuPwdFlag", myreq.SecuPwdFlag); + getChar(req, "Message", myreq.Message); + getChar(req, "Message", myreq.Message); + getChar(req, "Message", myreq.Message); + getChar(req, "Digest", myreq.Digest); + int i = this->api->ReqFromFutureToBankByFuture(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQueryBankAccountMoneyByFuture(dict req, int nRequestID) +{ + CThostFtdcReqQueryAccountField myreq = CThostFtdcReqQueryAccountField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "BrokerBranchID", myreq.BrokerBranchID); + getChar(req, "UserID", myreq.UserID); + getChar(req, "BankPassWord", myreq.BankPassWord); + getChar(req, "TradeTime", myreq.TradeTime); + getChar(req, "VerifyCertNoFlag", myreq.VerifyCertNoFlag); + getInt(req, "TID", &myreq.TID); + getChar(req, "AccountID", myreq.AccountID); + getChar(req, "BankAccount", myreq.BankAccount); + getInt(req, "InstallID", &myreq.InstallID); + getChar(req, "CustomerName", myreq.CustomerName); + getChar(req, "TradeCode", myreq.TradeCode); + getChar(req, "BankBranchID", myreq.BankBranchID); + getInt(req, "SessionID", &myreq.SessionID); + getChar(req, "BankID", myreq.BankID); + getChar(req, "Password", myreq.Password); + getChar(req, "BankPwdFlag", myreq.BankPwdFlag); + getInt(req, "RequestID", &myreq.RequestID); + getChar(req, "CustType", myreq.CustType); + getChar(req, "IdentifiedCardNo", myreq.IdentifiedCardNo); + getChar(req, "BankSerial", myreq.BankSerial); + getChar(req, "OperNo", myreq.OperNo); + getChar(req, "TradingDay", myreq.TradingDay); + getChar(req, "BankSecuAcc", myreq.BankSecuAcc); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "DeviceID", myreq.DeviceID); + getChar(req, "IdCardType", myreq.IdCardType); + getInt(req, "PlateSerial", &myreq.PlateSerial); + getChar(req, "TradeDate", myreq.TradeDate); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "BankAccType", myreq.BankAccType); + getChar(req, "LastFragment", myreq.LastFragment); + getInt(req, "FutureSerial", &myreq.FutureSerial); + getChar(req, "BankSecuAccType", myreq.BankSecuAccType); + getChar(req, "BrokerIDByBank", myreq.BrokerIDByBank); + getChar(req, "SecuPwdFlag", myreq.SecuPwdFlag); + getChar(req, "Digest", myreq.Digest); + int i = this->api->ReqQueryBankAccountMoneyByFuture(&myreq, nRequestID); + return i; +}; + diff --git a/vn.ctp/pyscript/ctp_td_header_function.h b/vn.ctp/pyscript/ctp_td_header_function.h new file mode 100644 index 00000000..76be5adc --- /dev/null +++ b/vn.ctp/pyscript/ctp_td_header_function.h @@ -0,0 +1,118 @@ +int reqAuthenticate(dict req, int nRequestID); + +int reqUserLogin(dict req, int nRequestID); + +int reqUserLogout(dict req, int nRequestID); + +int reqUserPasswordUpdate(dict req, int nRequestID); + +int reqTradingAccountPasswordUpdate(dict req, int nRequestID); + +int reqOrderInsert(dict req, int nRequestID); + +int reqParkedOrderInsert(dict req, int nRequestID); + +int reqParkedOrderAction(dict req, int nRequestID); + +int reqOrderAction(dict req, int nRequestID); + +int reqQueryMaxOrderVolume(dict req, int nRequestID); + +int reqSettlementInfoConfirm(dict req, int nRequestID); + +int reqRemoveParkedOrder(dict req, int nRequestID); + +int reqRemoveParkedOrderAction(dict req, int nRequestID); + +int reqExecOrderInsert(dict req, int nRequestID); + +int reqExecOrderAction(dict req, int nRequestID); + +int reqForQuoteInsert(dict req, int nRequestID); + +int reqQuoteInsert(dict req, int nRequestID); + +int reqQuoteAction(dict req, int nRequestID); + +int reqQryOrder(dict req, int nRequestID); + +int reqQryTrade(dict req, int nRequestID); + +int reqQryInvestorPosition(dict req, int nRequestID); + +int reqQryTradingAccount(dict req, int nRequestID); + +int reqQryInvestor(dict req, int nRequestID); + +int reqQryTradingCode(dict req, int nRequestID); + +int reqQryInstrumentMarginRate(dict req, int nRequestID); + +int reqQryInstrumentCommissionRate(dict req, int nRequestID); + +int reqQryExchange(dict req, int nRequestID); + +int reqQryProduct(dict req, int nRequestID); + +int reqQryInstrument(dict req, int nRequestID); + +int reqQryDepthMarketData(dict req, int nRequestID); + +int reqQrySettlementInfo(dict req, int nRequestID); + +int reqQryTransferBank(dict req, int nRequestID); + +int reqQryInvestorPositionDetail(dict req, int nRequestID); + +int reqQryNotice(dict req, int nRequestID); + +int reqQrySettlementInfoConfirm(dict req, int nRequestID); + +int reqQryInvestorPositionCombineDetail(dict req, int nRequestID); + +int reqQryCFMMCTradingAccountKey(dict req, int nRequestID); + +int reqQryEWarrantOffset(dict req, int nRequestID); + +int reqQryInvestorProductGroupMargin(dict req, int nRequestID); + +int reqQryExchangeMarginRate(dict req, int nRequestID); + +int reqQryExchangeMarginRateAdjust(dict req, int nRequestID); + +int reqQryExchangeRate(dict req, int nRequestID); + +int reqQrySecAgentACIDMap(dict req, int nRequestID); + +int reqQryOptionInstrTradeCost(dict req, int nRequestID); + +int reqQryOptionInstrCommRate(dict req, int nRequestID); + +int reqQryExecOrder(dict req, int nRequestID); + +int reqQryForQuote(dict req, int nRequestID); + +int reqQryQuote(dict req, int nRequestID); + +int reqQryTransferSerial(dict req, int nRequestID); + +int reqQryAccountregister(dict req, int nRequestID); + +int reqQryContractBank(dict req, int nRequestID); + +int reqQryParkedOrder(dict req, int nRequestID); + +int reqQryParkedOrderAction(dict req, int nRequestID); + +int reqQryTradingNotice(dict req, int nRequestID); + +int reqQryBrokerTradingParams(dict req, int nRequestID); + +int reqQryBrokerTradingAlgos(dict req, int nRequestID); + +int reqFromBankToFutureByFuture(dict req, int nRequestID); + +int reqFromFutureToBankByFuture(dict req, int nRequestID); + +int reqQueryBankAccountMoneyByFuture(dict req, int nRequestID); + diff --git a/vn.ctp/pyscript/ctp_td_header_on.h b/vn.ctp/pyscript/ctp_td_header_on.h new file mode 100644 index 00000000..aab83f25 --- /dev/null +++ b/vn.ctp/pyscript/ctp_td_header_on.h @@ -0,0 +1,191 @@ + + + +virtual void onRspAuthenticate(dict data, dict error, int id, bool last) {}; + +virtual void onRspUserLogin(dict data, dict error, int id, bool last) {}; + +virtual void onRspUserLogout(dict data, dict error, int id, bool last) {}; + +virtual void onRspUserPasswordUpdate(dict data, dict error, int id, bool last) {}; + +virtual void onRspTradingAccountPasswordUpdate(dict data, dict error, int id, bool last) {}; + +virtual void onRspOrderInsert(dict data, dict error, int id, bool last) {}; + +virtual void onRspParkedOrderInsert(dict data, dict error, int id, bool last) {}; + +virtual void onRspParkedOrderAction(dict data, dict error, int id, bool last) {}; + +virtual void onRspOrderAction(dict data, dict error, int id, bool last) {}; + +virtual void onRspQueryMaxOrderVolume(dict data, dict error, int id, bool last) {}; + +virtual void onRspSettlementInfoConfirm(dict data, dict error, int id, bool last) {}; + +virtual void onRspRemoveParkedOrder(dict data, dict error, int id, bool last) {}; + +virtual void onRspRemoveParkedOrderAction(dict data, dict error, int id, bool last) {}; + +virtual void onRspExecOrderInsert(dict data, dict error, int id, bool last) {}; + +virtual void onRspExecOrderAction(dict data, dict error, int id, bool last) {}; + +virtual void onRspForQuoteInsert(dict data, dict error, int id, bool last) {}; + +virtual void onRspQuoteInsert(dict data, dict error, int id, bool last) {}; + +virtual void onRspQuoteAction(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryOrder(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryTrade(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryInvestorPosition(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryTradingAccount(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryInvestor(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryTradingCode(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryInstrumentMarginRate(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryInstrumentCommissionRate(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryExchange(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryProduct(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryInstrument(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryDepthMarketData(dict data, dict error, int id, bool last) {}; + +virtual void onRspQrySettlementInfo(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryTransferBank(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryInvestorPositionDetail(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryNotice(dict data, dict error, int id, bool last) {}; + +virtual void onRspQrySettlementInfoConfirm(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryInvestorPositionCombineDetail(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryCFMMCTradingAccountKey(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryEWarrantOffset(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryInvestorProductGroupMargin(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryExchangeMarginRate(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryExchangeMarginRateAdjust(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryExchangeRate(dict data, dict error, int id, bool last) {}; + +virtual void onRspQrySecAgentACIDMap(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryOptionInstrTradeCost(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryOptionInstrCommRate(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryExecOrder(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryForQuote(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryQuote(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryTransferSerial(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryAccountregister(dict data, dict error, int id, bool last) {}; + +virtual void onRspError(dict error, int id, bool last) {}; + +virtual void onRtnOrder(dict data) {}; + +virtual void onRtnTrade(dict data) {}; + +virtual void onErrRtnOrderInsert(dict data, dict error) {}; + +virtual void onErrRtnOrderAction(dict data, dict error) {}; + +virtual void onRtnInstrumentStatus(dict data) {}; + +virtual void onRtnTradingNotice(dict data) {}; + +virtual void onRtnErrorConditionalOrder(dict data) {}; + +virtual void onRtnExecOrder(dict data) {}; + +virtual void onErrRtnExecOrderInsert(dict data, dict error) {}; + +virtual void onErrRtnExecOrderAction(dict data, dict error) {}; + +virtual void onErrRtnForQuoteInsert(dict data, dict error) {}; + +virtual void onRtnQuote(dict data) {}; + +virtual void onErrRtnQuoteInsert(dict data, dict error) {}; + +virtual void onErrRtnQuoteAction(dict data, dict error) {}; + +virtual void onRtnForQuoteRsp(dict data) {}; + +virtual void onRspQryContractBank(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryParkedOrder(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryParkedOrderAction(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryTradingNotice(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryBrokerTradingParams(dict data, dict error, int id, bool last) {}; + +virtual void onRspQryBrokerTradingAlgos(dict data, dict error, int id, bool last) {}; + +virtual void onRtnFromBankToFutureByBank(dict data) {}; + +virtual void onRtnFromFutureToBankByBank(dict data) {}; + +virtual void onRtnRepealFromBankToFutureByBank(dict data) {}; + +virtual void onRtnRepealFromFutureToBankByBank(dict data) {}; + +virtual void onRtnFromBankToFutureByFuture(dict data) {}; + +virtual void onRtnFromFutureToBankByFuture(dict data) {}; + +virtual void onRtnRepealFromBankToFutureByFutureManual(dict data) {}; + +virtual void onRtnRepealFromFutureToBankByFutureManual(dict data) {}; + +virtual void onRtnQueryBankBalanceByFuture(dict data) {}; + +virtual void onErrRtnBankToFutureByFuture(dict data, dict error) {}; + +virtual void onErrRtnFutureToBankByFuture(dict data, dict error) {}; + +virtual void onErrRtnRepealBankToFutureByFutureManual(dict data, dict error) {}; + +virtual void onErrRtnRepealFutureToBankByFutureManual(dict data, dict error) {}; + +virtual void onErrRtnQueryBankBalanceByFuture(dict data, dict error) {}; + +virtual void onRtnRepealFromBankToFutureByFuture(dict data) {}; + +virtual void onRtnRepealFromFutureToBankByFuture(dict data) {}; + +virtual void onRspFromBankToFutureByFuture(dict data, dict error, int id, bool last) {}; + +virtual void onRspFromFutureToBankByFuture(dict data, dict error, int id, bool last) {}; + +virtual void onRspQueryBankAccountMoneyByFuture(dict data, dict error, int id, bool last) {}; + +virtual void onRtnOpenAccountByBank(dict data) {}; + +virtual void onRtnCancelAccountByBank(dict data) {}; + +virtual void onRtnChangeAccountByBank(dict data) {}; + diff --git a/vn.ctp/pyscript/ctp_td_header_process.h b/vn.ctp/pyscript/ctp_td_header_process.h new file mode 100644 index 00000000..84327967 --- /dev/null +++ b/vn.ctp/pyscript/ctp_td_header_process.h @@ -0,0 +1,194 @@ +void processFrontConnected(Task task); + +void processFrontDisconnected(Task task); + +void processHeartBeatWarning(Task task); + +void processRspAuthenticate(Task task); + +void processRspUserLogin(Task task); + +void processRspUserLogout(Task task); + +void processRspUserPasswordUpdate(Task task); + +void processRspTradingAccountPasswordUpdate(Task task); + +void processRspOrderInsert(Task task); + +void processRspParkedOrderInsert(Task task); + +void processRspParkedOrderAction(Task task); + +void processRspOrderAction(Task task); + +void processRspQueryMaxOrderVolume(Task task); + +void processRspSettlementInfoConfirm(Task task); + +void processRspRemoveParkedOrder(Task task); + +void processRspRemoveParkedOrderAction(Task task); + +void processRspExecOrderInsert(Task task); + +void processRspExecOrderAction(Task task); + +void processRspForQuoteInsert(Task task); + +void processRspQuoteInsert(Task task); + +void processRspQuoteAction(Task task); + +void processRspQryOrder(Task task); + +void processRspQryTrade(Task task); + +void processRspQryInvestorPosition(Task task); + +void processRspQryTradingAccount(Task task); + +void processRspQryInvestor(Task task); + +void processRspQryTradingCode(Task task); + +void processRspQryInstrumentMarginRate(Task task); + +void processRspQryInstrumentCommissionRate(Task task); + +void processRspQryExchange(Task task); + +void processRspQryProduct(Task task); + +void processRspQryInstrument(Task task); + +void processRspQryDepthMarketData(Task task); + +void processRspQrySettlementInfo(Task task); + +void processRspQryTransferBank(Task task); + +void processRspQryInvestorPositionDetail(Task task); + +void processRspQryNotice(Task task); + +void processRspQrySettlementInfoConfirm(Task task); + +void processRspQryInvestorPositionCombineDetail(Task task); + +void processRspQryCFMMCTradingAccountKey(Task task); + +void processRspQryEWarrantOffset(Task task); + +void processRspQryInvestorProductGroupMargin(Task task); + +void processRspQryExchangeMarginRate(Task task); + +void processRspQryExchangeMarginRateAdjust(Task task); + +void processRspQryExchangeRate(Task task); + +void processRspQrySecAgentACIDMap(Task task); + +void processRspQryOptionInstrTradeCost(Task task); + +void processRspQryOptionInstrCommRate(Task task); + +void processRspQryExecOrder(Task task); + +void processRspQryForQuote(Task task); + +void processRspQryQuote(Task task); + +void processRspQryTransferSerial(Task task); + +void processRspQryAccountregister(Task task); + +void processRspError(Task task); + +void processRtnOrder(Task task); + +void processRtnTrade(Task task); + +void processErrRtnOrderInsert(Task task); + +void processErrRtnOrderAction(Task task); + +void processRtnInstrumentStatus(Task task); + +void processRtnTradingNotice(Task task); + +void processRtnErrorConditionalOrder(Task task); + +void processRtnExecOrder(Task task); + +void processErrRtnExecOrderInsert(Task task); + +void processErrRtnExecOrderAction(Task task); + +void processErrRtnForQuoteInsert(Task task); + +void processRtnQuote(Task task); + +void processErrRtnQuoteInsert(Task task); + +void processErrRtnQuoteAction(Task task); + +void processRtnForQuoteRsp(Task task); + +void processRspQryContractBank(Task task); + +void processRspQryParkedOrder(Task task); + +void processRspQryParkedOrderAction(Task task); + +void processRspQryTradingNotice(Task task); + +void processRspQryBrokerTradingParams(Task task); + +void processRspQryBrokerTradingAlgos(Task task); + +void processRtnFromBankToFutureByBank(Task task); + +void processRtnFromFutureToBankByBank(Task task); + +void processRtnRepealFromBankToFutureByBank(Task task); + +void processRtnRepealFromFutureToBankByBank(Task task); + +void processRtnFromBankToFutureByFuture(Task task); + +void processRtnFromFutureToBankByFuture(Task task); + +void processRtnRepealFromBankToFutureByFutureManual(Task task); + +void processRtnRepealFromFutureToBankByFutureManual(Task task); + +void processRtnQueryBankBalanceByFuture(Task task); + +void processErrRtnBankToFutureByFuture(Task task); + +void processErrRtnFutureToBankByFuture(Task task); + +void processErrRtnRepealBankToFutureByFutureManual(Task task); + +void processErrRtnRepealFutureToBankByFutureManual(Task task); + +void processErrRtnQueryBankBalanceByFuture(Task task); + +void processRtnRepealFromBankToFutureByFuture(Task task); + +void processRtnRepealFromFutureToBankByFuture(Task task); + +void processRspFromBankToFutureByFuture(Task task); + +void processRspFromFutureToBankByFuture(Task task); + +void processRspQueryBankAccountMoneyByFuture(Task task); + +void processRtnOpenAccountByBank(Task task); + +void processRtnCancelAccountByBank(Task task); + +void processRtnChangeAccountByBank(Task task); + diff --git a/vn.ctp/pyscript/ctp_td_process.cpp b/vn.ctp/pyscript/ctp_td_process.cpp new file mode 100644 index 00000000..b0a7ee32 --- /dev/null +++ b/vn.ctp/pyscript/ctp_td_process.cpp @@ -0,0 +1,3380 @@ +void TdApi::processFrontConnected(Task task) +{ + this->onFrontConnected(); +}; + +void TdApi::processFrontDisconnected(Task task) +{ + this->onFrontDisconnected(task.task_id); +}; + +void TdApi::processHeartBeatWarning(Task task) +{ + this->onHeartBeatWarning(task.task_id); +}; + +void TdApi::processRspAuthenticate(Task task) +{ + CThostFtdcRspAuthenticateField task_data = any_cast(task.task_data); + dict data; + data["UserID"] = task_data.UserID; + data["BrokerID"] = task_data.BrokerID; + data["UserProductInfo"] = task_data.UserProductInfo; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspAuthenticate(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspUserLogin(Task task) +{ + CThostFtdcRspUserLoginField task_data = any_cast(task.task_data); + dict data; + data["CZCETime"] = task_data.CZCETime; + data["SHFETime"] = task_data.SHFETime; + data["MaxOrderRef"] = task_data.MaxOrderRef; + data["INETime"] = task_data.INETime; + data["UserID"] = task_data.UserID; + data["TradingDay"] = task_data.TradingDay; + data["SessionID"] = task_data.SessionID; + data["SystemName"] = task_data.SystemName; + data["FrontID"] = task_data.FrontID; + data["FFEXTime"] = task_data.FFEXTime; + data["BrokerID"] = task_data.BrokerID; + data["DCETime"] = task_data.DCETime; + data["LoginTime"] = task_data.LoginTime; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspUserLogin(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspUserLogout(Task task) +{ + CThostFtdcUserLogoutField task_data = any_cast(task.task_data); + dict data; + data["UserID"] = task_data.UserID; + data["BrokerID"] = task_data.BrokerID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspUserLogout(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspUserPasswordUpdate(Task task) +{ + CThostFtdcUserPasswordUpdateField task_data = any_cast(task.task_data); + dict data; + data["UserID"] = task_data.UserID; + data["NewPassword"] = task_data.NewPassword; + data["OldPassword"] = task_data.OldPassword; + data["BrokerID"] = task_data.BrokerID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspUserPasswordUpdate(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspTradingAccountPasswordUpdate(Task task) +{ + CThostFtdcTradingAccountPasswordUpdateField task_data = any_cast(task.task_data); + dict data; + data["CurrencyID"] = task_data.CurrencyID; + data["NewPassword"] = task_data.NewPassword; + data["OldPassword"] = task_data.OldPassword; + data["BrokerID"] = task_data.BrokerID; + data["AccountID"] = task_data.AccountID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspTradingAccountPasswordUpdate(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspOrderInsert(Task task) +{ + CThostFtdcInputOrderField task_data = any_cast(task.task_data); + dict data; + data["ContingentCondition"] = task_data.ContingentCondition; + data["CombOffsetFlag"] = task_data.CombOffsetFlag; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["UserForceClose"] = task_data.UserForceClose; + data["Direction"] = task_data.Direction; + data["IsSwapOrder"] = task_data.IsSwapOrder; + data["VolumeTotalOriginal"] = task_data.VolumeTotalOriginal; + data["OrderPriceType"] = task_data.OrderPriceType; + data["TimeCondition"] = task_data.TimeCondition; + data["IsAutoSuspend"] = task_data.IsAutoSuspend; + data["StopPrice"] = task_data.StopPrice; + data["InstrumentID"] = task_data.InstrumentID; + data["MinVolume"] = task_data.MinVolume; + data["ForceCloseReason"] = task_data.ForceCloseReason; + data["BrokerID"] = task_data.BrokerID; + data["CombHedgeFlag"] = task_data.CombHedgeFlag; + data["GTDDate"] = task_data.GTDDate; + data["BusinessUnit"] = task_data.BusinessUnit; + data["OrderRef"] = task_data.OrderRef; + data["InvestorID"] = task_data.InvestorID; + data["VolumeCondition"] = task_data.VolumeCondition; + data["RequestID"] = task_data.RequestID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspOrderInsert(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspParkedOrderInsert(Task task) +{ + CThostFtdcParkedOrderField task_data = any_cast(task.task_data); + dict data; + data["ContingentCondition"] = task_data.ContingentCondition; + data["CombOffsetFlag"] = task_data.CombOffsetFlag; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["UserForceClose"] = task_data.UserForceClose; + data["Status"] = task_data.Status; + data["Direction"] = task_data.Direction; + data["IsSwapOrder"] = task_data.IsSwapOrder; + data["UserType"] = task_data.UserType; + data["VolumeTotalOriginal"] = task_data.VolumeTotalOriginal; + data["OrderPriceType"] = task_data.OrderPriceType; + data["TimeCondition"] = task_data.TimeCondition; + data["IsAutoSuspend"] = task_data.IsAutoSuspend; + data["StopPrice"] = task_data.StopPrice; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["MinVolume"] = task_data.MinVolume; + data["ForceCloseReason"] = task_data.ForceCloseReason; + data["ErrorID"] = task_data.ErrorID; + data["ParkedOrderID"] = task_data.ParkedOrderID; + data["BrokerID"] = task_data.BrokerID; + data["CombHedgeFlag"] = task_data.CombHedgeFlag; + data["GTDDate"] = task_data.GTDDate; + data["BusinessUnit"] = task_data.BusinessUnit; + data["ErrorMsg"] = task_data.ErrorMsg; + data["OrderRef"] = task_data.OrderRef; + data["InvestorID"] = task_data.InvestorID; + data["VolumeCondition"] = task_data.VolumeCondition; + data["RequestID"] = task_data.RequestID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspParkedOrderInsert(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspParkedOrderAction(Task task) +{ + CThostFtdcParkedOrderActionField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["Status"] = task_data.Status; + data["ExchangeID"] = task_data.ExchangeID; + data["ActionFlag"] = task_data.ActionFlag; + data["OrderActionRef"] = task_data.OrderActionRef; + data["UserType"] = task_data.UserType; + data["ErrorMsg"] = task_data.ErrorMsg; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["OrderRef"] = task_data.OrderRef; + data["InvestorID"] = task_data.InvestorID; + data["SessionID"] = task_data.SessionID; + data["VolumeChange"] = task_data.VolumeChange; + data["BrokerID"] = task_data.BrokerID; + data["RequestID"] = task_data.RequestID; + data["OrderSysID"] = task_data.OrderSysID; + data["ParkedOrderActionID"] = task_data.ParkedOrderActionID; + data["FrontID"] = task_data.FrontID; + data["ErrorID"] = task_data.ErrorID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspParkedOrderAction(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspOrderAction(Task task) +{ + CThostFtdcInputOrderActionField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["ActionFlag"] = task_data.ActionFlag; + data["OrderActionRef"] = task_data.OrderActionRef; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["OrderRef"] = task_data.OrderRef; + data["InvestorID"] = task_data.InvestorID; + data["SessionID"] = task_data.SessionID; + data["VolumeChange"] = task_data.VolumeChange; + data["BrokerID"] = task_data.BrokerID; + data["RequestID"] = task_data.RequestID; + data["OrderSysID"] = task_data.OrderSysID; + data["FrontID"] = task_data.FrontID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspOrderAction(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQueryMaxOrderVolume(Task task) +{ + CThostFtdcQueryMaxOrderVolumeField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["Direction"] = task_data.Direction; + data["OffsetFlag"] = task_data.OffsetFlag; + data["HedgeFlag"] = task_data.HedgeFlag; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["MaxVolume"] = task_data.MaxVolume; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQueryMaxOrderVolume(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspSettlementInfoConfirm(Task task) +{ + CThostFtdcSettlementInfoConfirmField task_data = any_cast(task.task_data); + dict data; + data["ConfirmTime"] = task_data.ConfirmTime; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["ConfirmDate"] = task_data.ConfirmDate; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspSettlementInfoConfirm(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspRemoveParkedOrder(Task task) +{ + CThostFtdcRemoveParkedOrderField task_data = any_cast(task.task_data); + dict data; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["ParkedOrderID"] = task_data.ParkedOrderID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspRemoveParkedOrder(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspRemoveParkedOrderAction(Task task) +{ + CThostFtdcRemoveParkedOrderActionField task_data = any_cast(task.task_data); + dict data; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["ParkedOrderActionID"] = task_data.ParkedOrderActionID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspRemoveParkedOrderAction(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspExecOrderInsert(Task task) +{ + CThostFtdcInputExecOrderField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ExecOrderRef"] = task_data.ExecOrderRef; + data["CloseFlag"] = task_data.CloseFlag; + data["OffsetFlag"] = task_data.OffsetFlag; + data["PosiDirection"] = task_data.PosiDirection; + data["BusinessUnit"] = task_data.BusinessUnit; + data["HedgeFlag"] = task_data.HedgeFlag; + data["UserID"] = task_data.UserID; + data["Volume"] = task_data.Volume; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["RequestID"] = task_data.RequestID; + data["ActionType"] = task_data.ActionType; + data["ReservePositionFlag"] = task_data.ReservePositionFlag; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspExecOrderInsert(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspExecOrderAction(Task task) +{ + CThostFtdcInputExecOrderActionField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ExecOrderSysID"] = task_data.ExecOrderSysID; + data["ExchangeID"] = task_data.ExchangeID; + data["UserID"] = task_data.UserID; + data["ExecOrderRef"] = task_data.ExecOrderRef; + data["InvestorID"] = task_data.InvestorID; + data["SessionID"] = task_data.SessionID; + data["BrokerID"] = task_data.BrokerID; + data["RequestID"] = task_data.RequestID; + data["ActionFlag"] = task_data.ActionFlag; + data["ExecOrderActionRef"] = task_data.ExecOrderActionRef; + data["FrontID"] = task_data.FrontID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspExecOrderAction(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspForQuoteInsert(Task task) +{ + CThostFtdcInputForQuoteField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["UserID"] = task_data.UserID; + data["ForQuoteRef"] = task_data.ForQuoteRef; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspForQuoteInsert(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQuoteInsert(Task task) +{ + CThostFtdcInputQuoteField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["AskHedgeFlag"] = task_data.AskHedgeFlag; + data["BusinessUnit"] = task_data.BusinessUnit; + data["AskPrice"] = task_data.AskPrice; + data["UserID"] = task_data.UserID; + data["AskOffsetFlag"] = task_data.AskOffsetFlag; + data["BidVolume"] = task_data.BidVolume; + data["AskVolume"] = task_data.AskVolume; + data["InvestorID"] = task_data.InvestorID; + data["BidOffsetFlag"] = task_data.BidOffsetFlag; + data["BrokerID"] = task_data.BrokerID; + data["RequestID"] = task_data.RequestID; + data["BidPrice"] = task_data.BidPrice; + data["BidHedgeFlag"] = task_data.BidHedgeFlag; + data["QuoteRef"] = task_data.QuoteRef; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQuoteInsert(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQuoteAction(Task task) +{ + CThostFtdcInputQuoteActionField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["QuoteActionRef"] = task_data.QuoteActionRef; + data["UserID"] = task_data.UserID; + data["InvestorID"] = task_data.InvestorID; + data["SessionID"] = task_data.SessionID; + data["BrokerID"] = task_data.BrokerID; + data["RequestID"] = task_data.RequestID; + data["ActionFlag"] = task_data.ActionFlag; + data["FrontID"] = task_data.FrontID; + data["QuoteSysID"] = task_data.QuoteSysID; + data["QuoteRef"] = task_data.QuoteRef; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQuoteAction(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryOrder(Task task) +{ + CThostFtdcOrderField task_data = any_cast(task.task_data); + dict data; + data["ContingentCondition"] = task_data.ContingentCondition; + data["NotifySequence"] = task_data.NotifySequence; + data["ActiveUserID"] = task_data.ActiveUserID; + data["VolumeTraded"] = task_data.VolumeTraded; + data["UserProductInfo"] = task_data.UserProductInfo; + data["CombOffsetFlag"] = task_data.CombOffsetFlag; + data["TraderID"] = task_data.TraderID; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["UserForceClose"] = task_data.UserForceClose; + data["RelativeOrderSysID"] = task_data.RelativeOrderSysID; + data["Direction"] = task_data.Direction; + data["InstallID"] = task_data.InstallID; + data["IsSwapOrder"] = task_data.IsSwapOrder; + data["ParticipantID"] = task_data.ParticipantID; + data["VolumeTotalOriginal"] = task_data.VolumeTotalOriginal; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["ClientID"] = task_data.ClientID; + data["VolumeTotal"] = task_data.VolumeTotal; + data["OrderPriceType"] = task_data.OrderPriceType; + data["SessionID"] = task_data.SessionID; + data["TimeCondition"] = task_data.TimeCondition; + data["OrderStatus"] = task_data.OrderStatus; + data["OrderSysID"] = task_data.OrderSysID; + data["OrderSubmitStatus"] = task_data.OrderSubmitStatus; + data["IsAutoSuspend"] = task_data.IsAutoSuspend; + data["StopPrice"] = task_data.StopPrice; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["MinVolume"] = task_data.MinVolume; + data["StatusMsg"] = task_data.StatusMsg; + data["SettlementID"] = task_data.SettlementID; + data["ForceCloseReason"] = task_data.ForceCloseReason; + data["OrderType"] = task_data.OrderType; + data["UpdateTime"] = task_data.UpdateTime; + data["TradingDay"] = task_data.TradingDay; + data["ActiveTime"] = task_data.ActiveTime; + data["BrokerID"] = task_data.BrokerID; + data["InsertTime"] = task_data.InsertTime; + data["FrontID"] = task_data.FrontID; + data["SuspendTime"] = task_data.SuspendTime; + data["ClearingPartID"] = task_data.ClearingPartID; + data["CombHedgeFlag"] = task_data.CombHedgeFlag; + data["CancelTime"] = task_data.CancelTime; + data["GTDDate"] = task_data.GTDDate; + data["OrderLocalID"] = task_data.OrderLocalID; + data["BusinessUnit"] = task_data.BusinessUnit; + data["InsertDate"] = task_data.InsertDate; + data["SequenceNo"] = task_data.SequenceNo; + data["OrderRef"] = task_data.OrderRef; + data["BrokerOrderSeq"] = task_data.BrokerOrderSeq; + data["InvestorID"] = task_data.InvestorID; + data["VolumeCondition"] = task_data.VolumeCondition; + data["RequestID"] = task_data.RequestID; + data["OrderSource"] = task_data.OrderSource; + data["ZCETotalTradedVolume"] = task_data.ZCETotalTradedVolume; + data["ActiveTraderID"] = task_data.ActiveTraderID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryOrder(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryTrade(Task task) +{ + CThostFtdcTradeField task_data = any_cast(task.task_data); + dict data; + data["TradeType"] = task_data.TradeType; + data["TraderID"] = task_data.TraderID; + data["HedgeFlag"] = task_data.HedgeFlag; + data["TradeTime"] = task_data.TradeTime; + data["Direction"] = task_data.Direction; + data["ParticipantID"] = task_data.ParticipantID; + data["Price"] = task_data.Price; + data["ClientID"] = task_data.ClientID; + data["Volume"] = task_data.Volume; + data["OrderSysID"] = task_data.OrderSysID; + data["ClearingPartID"] = task_data.ClearingPartID; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["SettlementID"] = task_data.SettlementID; + data["UserID"] = task_data.UserID; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["OffsetFlag"] = task_data.OffsetFlag; + data["OrderLocalID"] = task_data.OrderLocalID; + data["TradeID"] = task_data.TradeID; + data["TradeDate"] = task_data.TradeDate; + data["BusinessUnit"] = task_data.BusinessUnit; + data["SequenceNo"] = task_data.SequenceNo; + data["OrderRef"] = task_data.OrderRef; + data["BrokerOrderSeq"] = task_data.BrokerOrderSeq; + data["InvestorID"] = task_data.InvestorID; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["TradeSource"] = task_data.TradeSource; + data["PriceSource"] = task_data.PriceSource; + data["TradingRole"] = task_data.TradingRole; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryTrade(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryInvestorPosition(Task task) +{ + CThostFtdcInvestorPositionField task_data = any_cast(task.task_data); + dict data; + data["ShortFrozenAmount"] = task_data.ShortFrozenAmount; + data["FrozenMargin"] = task_data.FrozenMargin; + data["HedgeFlag"] = task_data.HedgeFlag; + data["PositionProfit"] = task_data.PositionProfit; + data["Commission"] = task_data.Commission; + data["MarginRateByVolume"] = task_data.MarginRateByVolume; + data["StrikeFrozen"] = task_data.StrikeFrozen; + data["CombPosition"] = task_data.CombPosition; + data["CashIn"] = task_data.CashIn; + data["PreSettlementPrice"] = task_data.PreSettlementPrice; + data["CombLongFrozen"] = task_data.CombLongFrozen; + data["CloseAmount"] = task_data.CloseAmount; + data["PosiDirection"] = task_data.PosiDirection; + data["YdPosition"] = task_data.YdPosition; + data["MarginRateByMoney"] = task_data.MarginRateByMoney; + data["AbandonFrozen"] = task_data.AbandonFrozen; + data["OpenVolume"] = task_data.OpenVolume; + data["CloseVolume"] = task_data.CloseVolume; + data["ExchangeMargin"] = task_data.ExchangeMargin; + data["InstrumentID"] = task_data.InstrumentID; + data["PositionDate"] = task_data.PositionDate; + data["CloseProfitByTrade"] = task_data.CloseProfitByTrade; + data["PreMargin"] = task_data.PreMargin; + data["SettlementID"] = task_data.SettlementID; + data["ShortFrozen"] = task_data.ShortFrozen; + data["LongFrozen"] = task_data.LongFrozen; + data["TodayPosition"] = task_data.TodayPosition; + data["TradingDay"] = task_data.TradingDay; + data["PositionCost"] = task_data.PositionCost; + data["BrokerID"] = task_data.BrokerID; + data["FrozenCash"] = task_data.FrozenCash; + data["OpenAmount"] = task_data.OpenAmount; + data["OpenCost"] = task_data.OpenCost; + data["Position"] = task_data.Position; + data["FrozenCommission"] = task_data.FrozenCommission; + data["CombShortFrozen"] = task_data.CombShortFrozen; + data["OptionValue"] = task_data.OptionValue; + data["CloseProfitByDate"] = task_data.CloseProfitByDate; + data["SettlementPrice"] = task_data.SettlementPrice; + data["LongFrozenAmount"] = task_data.LongFrozenAmount; + data["InvestorID"] = task_data.InvestorID; + data["StrikeFrozenAmount"] = task_data.StrikeFrozenAmount; + data["CloseProfit"] = task_data.CloseProfit; + data["UseMargin"] = task_data.UseMargin; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryInvestorPosition(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryTradingAccount(Task task) +{ + CThostFtdcTradingAccountField task_data = any_cast(task.task_data); + dict data; + data["SpecProductFrozenCommission"] = task_data.SpecProductFrozenCommission; + data["FundMortgageOut"] = task_data.FundMortgageOut; + data["Mortgage"] = task_data.Mortgage; + data["ExchangeDeliveryMargin"] = task_data.ExchangeDeliveryMargin; + data["FrozenMargin"] = task_data.FrozenMargin; + data["WithdrawQuota"] = task_data.WithdrawQuota; + data["PositionProfit"] = task_data.PositionProfit; + data["Commission"] = task_data.Commission; + data["SpecProductCloseProfit"] = task_data.SpecProductCloseProfit; + data["Interest"] = task_data.Interest; + data["SpecProductCommission"] = task_data.SpecProductCommission; + data["CashIn"] = task_data.CashIn; + data["AccountID"] = task_data.AccountID; + data["Available"] = task_data.Available; + data["FundMortgageAvailable"] = task_data.FundMortgageAvailable; + data["OptionCloseProfit"] = task_data.OptionCloseProfit; + data["PreCredit"] = task_data.PreCredit; + data["PreMortgage"] = task_data.PreMortgage; + data["InterestBase"] = task_data.InterestBase; + data["ExchangeMargin"] = task_data.ExchangeMargin; + data["MortgageableFund"] = task_data.MortgageableFund; + data["PreFundMortgageIn"] = task_data.PreFundMortgageIn; + data["PreMargin"] = task_data.PreMargin; + data["SettlementID"] = task_data.SettlementID; + data["FundMortgageIn"] = task_data.FundMortgageIn; + data["DeliveryMargin"] = task_data.DeliveryMargin; + data["SpecProductFrozenMargin"] = task_data.SpecProductFrozenMargin; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["FrozenCash"] = task_data.FrozenCash; + data["Withdraw"] = task_data.Withdraw; + data["OptionValue"] = task_data.OptionValue; + data["Balance"] = task_data.Balance; + data["SpecProductMargin"] = task_data.SpecProductMargin; + data["SpecProductPositionProfitByAlg"] = task_data.SpecProductPositionProfitByAlg; + data["Reserve"] = task_data.Reserve; + data["PreDeposit"] = task_data.PreDeposit; + data["Credit"] = task_data.Credit; + data["CurrencyID"] = task_data.CurrencyID; + data["ReserveBalance"] = task_data.ReserveBalance; + data["SpecProductPositionProfit"] = task_data.SpecProductPositionProfit; + data["SpecProductExchangeMargin"] = task_data.SpecProductExchangeMargin; + data["PreBalance"] = task_data.PreBalance; + data["CurrMargin"] = task_data.CurrMargin; + data["FrozenCommission"] = task_data.FrozenCommission; + data["CloseProfit"] = task_data.CloseProfit; + data["PreFundMortgageOut"] = task_data.PreFundMortgageOut; + data["Deposit"] = task_data.Deposit; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryTradingAccount(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryInvestor(Task task) +{ + CThostFtdcInvestorField task_data = any_cast(task.task_data); + dict data; + data["CommModelID"] = task_data.CommModelID; + data["InvestorName"] = task_data.InvestorName; + data["Mobile"] = task_data.Mobile; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["Telephone"] = task_data.Telephone; + data["MarginModelID"] = task_data.MarginModelID; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["Address"] = task_data.Address; + data["InvestorGroupID"] = task_data.InvestorGroupID; + data["OpenDate"] = task_data.OpenDate; + data["IsActive"] = task_data.IsActive; + data["IdentifiedCardType"] = task_data.IdentifiedCardType; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryInvestor(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryTradingCode(Task task) +{ + CThostFtdcTradingCodeField task_data = any_cast(task.task_data); + dict data; + data["ExchangeID"] = task_data.ExchangeID; + data["ClientID"] = task_data.ClientID; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["ClientIDType"] = task_data.ClientIDType; + data["IsActive"] = task_data.IsActive; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryTradingCode(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryInstrumentMarginRate(Task task) +{ + CThostFtdcInstrumentMarginRateField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ShortMarginRatioByMoney"] = task_data.ShortMarginRatioByMoney; + data["LongMarginRatioByMoney"] = task_data.LongMarginRatioByMoney; + data["IsRelative"] = task_data.IsRelative; + data["HedgeFlag"] = task_data.HedgeFlag; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["InvestorRange"] = task_data.InvestorRange; + data["ShortMarginRatioByVolume"] = task_data.ShortMarginRatioByVolume; + data["LongMarginRatioByVolume"] = task_data.LongMarginRatioByVolume; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryInstrumentMarginRate(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryInstrumentCommissionRate(Task task) +{ + CThostFtdcInstrumentCommissionRateField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["OpenRatioByMoney"] = task_data.OpenRatioByMoney; + data["CloseRatioByVolume"] = task_data.CloseRatioByVolume; + data["CloseTodayRatioByMoney"] = task_data.CloseTodayRatioByMoney; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["InvestorRange"] = task_data.InvestorRange; + data["CloseRatioByMoney"] = task_data.CloseRatioByMoney; + data["OpenRatioByVolume"] = task_data.OpenRatioByVolume; + data["CloseTodayRatioByVolume"] = task_data.CloseTodayRatioByVolume; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryInstrumentCommissionRate(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryExchange(Task task) +{ + CThostFtdcExchangeField task_data = any_cast(task.task_data); + dict data; + data["ExchangeProperty"] = task_data.ExchangeProperty; + data["ExchangeID"] = task_data.ExchangeID; + data["ExchangeName"] = task_data.ExchangeName; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryExchange(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryProduct(Task task) +{ + CThostFtdcProductField task_data = any_cast(task.task_data); + dict data; + data["MaxLimitOrderVolume"] = task_data.MaxLimitOrderVolume; + data["ExchangeID"] = task_data.ExchangeID; + data["MortgageFundUseRange"] = task_data.MortgageFundUseRange; + data["PositionDateType"] = task_data.PositionDateType; + data["MinLimitOrderVolume"] = task_data.MinLimitOrderVolume; + data["CloseDealType"] = task_data.CloseDealType; + data["MaxMarketOrderVolume"] = task_data.MaxMarketOrderVolume; + data["PriceTick"] = task_data.PriceTick; + data["ProductName"] = task_data.ProductName; + data["ExchangeProductID"] = task_data.ExchangeProductID; + data["VolumeMultiple"] = task_data.VolumeMultiple; + data["PositionType"] = task_data.PositionType; + data["MinMarketOrderVolume"] = task_data.MinMarketOrderVolume; + data["ProductClass"] = task_data.ProductClass; + data["UnderlyingMultiple"] = task_data.UnderlyingMultiple; + data["TradeCurrencyID"] = task_data.TradeCurrencyID; + data["ProductID"] = task_data.ProductID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryProduct(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryInstrument(Task task) +{ + CThostFtdcInstrumentField task_data = any_cast(task.task_data); + dict data; + data["IsTrading"] = task_data.IsTrading; + data["ExpireDate"] = task_data.ExpireDate; + data["PositionDateType"] = task_data.PositionDateType; + data["LongMarginRatio"] = task_data.LongMarginRatio; + data["StrikePrice"] = task_data.StrikePrice; + data["UnderlyingMultiple"] = task_data.UnderlyingMultiple; + data["PositionType"] = task_data.PositionType; + data["ProductClass"] = task_data.ProductClass; + data["InstrumentName"] = task_data.InstrumentName; + data["ShortMarginRatio"] = task_data.ShortMarginRatio; + data["VolumeMultiple"] = task_data.VolumeMultiple; + data["MaxMarginSideAlgorithm"] = task_data.MaxMarginSideAlgorithm; + data["DeliveryYear"] = task_data.DeliveryYear; + data["CombinationType"] = task_data.CombinationType; + data["CreateDate"] = task_data.CreateDate; + data["InstrumentID"] = task_data.InstrumentID; + data["MaxLimitOrderVolume"] = task_data.MaxLimitOrderVolume; + data["ExchangeID"] = task_data.ExchangeID; + data["MinLimitOrderVolume"] = task_data.MinLimitOrderVolume; + data["MaxMarketOrderVolume"] = task_data.MaxMarketOrderVolume; + data["OptionsType"] = task_data.OptionsType; + data["StartDelivDate"] = task_data.StartDelivDate; + data["DeliveryMonth"] = task_data.DeliveryMonth; + data["PriceTick"] = task_data.PriceTick; + data["InstLifePhase"] = task_data.InstLifePhase; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["MinMarketOrderVolume"] = task_data.MinMarketOrderVolume; + data["EndDelivDate"] = task_data.EndDelivDate; + data["UnderlyingInstrID"] = task_data.UnderlyingInstrID; + data["OpenDate"] = task_data.OpenDate; + data["ProductID"] = task_data.ProductID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryInstrument(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryDepthMarketData(Task task) +{ + CThostFtdcDepthMarketDataField task_data = any_cast(task.task_data); + dict data; + data["HighestPrice"] = task_data.HighestPrice; + data["BidPrice5"] = task_data.BidPrice5; + data["BidPrice4"] = task_data.BidPrice4; + data["BidPrice1"] = task_data.BidPrice1; + data["BidPrice3"] = task_data.BidPrice3; + data["BidPrice2"] = task_data.BidPrice2; + data["LowerLimitPrice"] = task_data.LowerLimitPrice; + data["OpenPrice"] = task_data.OpenPrice; + data["AskPrice5"] = task_data.AskPrice5; + data["AskPrice4"] = task_data.AskPrice4; + data["AskPrice3"] = task_data.AskPrice3; + data["PreClosePrice"] = task_data.PreClosePrice; + data["AskPrice1"] = task_data.AskPrice1; + data["PreSettlementPrice"] = task_data.PreSettlementPrice; + data["AskVolume1"] = task_data.AskVolume1; + data["UpdateTime"] = task_data.UpdateTime; + data["UpdateMillisec"] = task_data.UpdateMillisec; + data["AveragePrice"] = task_data.AveragePrice; + data["BidVolume5"] = task_data.BidVolume5; + data["BidVolume4"] = task_data.BidVolume4; + data["BidVolume3"] = task_data.BidVolume3; + data["BidVolume2"] = task_data.BidVolume2; + data["PreOpenInterest"] = task_data.PreOpenInterest; + data["AskPrice2"] = task_data.AskPrice2; + data["Volume"] = task_data.Volume; + data["AskVolume3"] = task_data.AskVolume3; + data["AskVolume2"] = task_data.AskVolume2; + data["AskVolume5"] = task_data.AskVolume5; + data["AskVolume4"] = task_data.AskVolume4; + data["UpperLimitPrice"] = task_data.UpperLimitPrice; + data["BidVolume1"] = task_data.BidVolume1; + data["InstrumentID"] = task_data.InstrumentID; + data["ClosePrice"] = task_data.ClosePrice; + data["ExchangeID"] = task_data.ExchangeID; + data["TradingDay"] = task_data.TradingDay; + data["PreDelta"] = task_data.PreDelta; + data["OpenInterest"] = task_data.OpenInterest; + data["CurrDelta"] = task_data.CurrDelta; + data["Turnover"] = task_data.Turnover; + data["LastPrice"] = task_data.LastPrice; + data["SettlementPrice"] = task_data.SettlementPrice; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["LowestPrice"] = task_data.LowestPrice; + data["ActionDay"] = task_data.ActionDay; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryDepthMarketData(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQrySettlementInfo(Task task) +{ + CThostFtdcSettlementInfoField task_data = any_cast(task.task_data); + dict data; + data["SettlementID"] = task_data.SettlementID; + data["InvestorID"] = task_data.InvestorID; + data["SequenceNo"] = task_data.SequenceNo; + data["Content"] = task_data.Content; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQrySettlementInfo(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryTransferBank(Task task) +{ + CThostFtdcTransferBankField task_data = any_cast(task.task_data); + dict data; + data["BankName"] = task_data.BankName; + data["IsActive"] = task_data.IsActive; + data["BankBrchID"] = task_data.BankBrchID; + data["BankID"] = task_data.BankID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryTransferBank(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryInvestorPositionDetail(Task task) +{ + CThostFtdcInvestorPositionDetailField task_data = any_cast(task.task_data); + dict data; + data["PositionProfitByDate"] = task_data.PositionProfitByDate; + data["ExchMargin"] = task_data.ExchMargin; + data["TradeType"] = task_data.TradeType; + data["MarginRateByMoney"] = task_data.MarginRateByMoney; + data["HedgeFlag"] = task_data.HedgeFlag; + data["MarginRateByVolume"] = task_data.MarginRateByVolume; + data["Direction"] = task_data.Direction; + data["CloseAmount"] = task_data.CloseAmount; + data["OpenPrice"] = task_data.OpenPrice; + data["Volume"] = task_data.Volume; + data["LastSettlementPrice"] = task_data.LastSettlementPrice; + data["CloseVolume"] = task_data.CloseVolume; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["CloseProfitByTrade"] = task_data.CloseProfitByTrade; + data["SettlementID"] = task_data.SettlementID; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["Margin"] = task_data.Margin; + data["TradeID"] = task_data.TradeID; + data["PositionProfitByTrade"] = task_data.PositionProfitByTrade; + data["CloseProfitByDate"] = task_data.CloseProfitByDate; + data["SettlementPrice"] = task_data.SettlementPrice; + data["InvestorID"] = task_data.InvestorID; + data["CombInstrumentID"] = task_data.CombInstrumentID; + data["OpenDate"] = task_data.OpenDate; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryInvestorPositionDetail(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryNotice(Task task) +{ + CThostFtdcNoticeField task_data = any_cast(task.task_data); + dict data; + data["Content"] = task_data.Content; + data["SequenceLabel"] = task_data.SequenceLabel; + data["BrokerID"] = task_data.BrokerID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryNotice(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQrySettlementInfoConfirm(Task task) +{ + CThostFtdcSettlementInfoConfirmField task_data = any_cast(task.task_data); + dict data; + data["ConfirmTime"] = task_data.ConfirmTime; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["ConfirmDate"] = task_data.ConfirmDate; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQrySettlementInfoConfirm(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryInvestorPositionCombineDetail(Task task) +{ + CThostFtdcInvestorPositionCombineDetailField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["TradeGroupID"] = task_data.TradeGroupID; + data["ExchangeID"] = task_data.ExchangeID; + data["MarginRateByVolume"] = task_data.MarginRateByVolume; + data["ComTradeID"] = task_data.ComTradeID; + data["SettlementID"] = task_data.SettlementID; + data["InvestorID"] = task_data.InvestorID; + data["TotalAmt"] = task_data.TotalAmt; + data["Margin"] = task_data.Margin; + data["ExchMargin"] = task_data.ExchMargin; + data["LegMultiple"] = task_data.LegMultiple; + data["HedgeFlag"] = task_data.HedgeFlag; + data["TradeID"] = task_data.TradeID; + data["LegID"] = task_data.LegID; + data["TradingDay"] = task_data.TradingDay; + data["MarginRateByMoney"] = task_data.MarginRateByMoney; + data["Direction"] = task_data.Direction; + data["BrokerID"] = task_data.BrokerID; + data["CombInstrumentID"] = task_data.CombInstrumentID; + data["OpenDate"] = task_data.OpenDate; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryInvestorPositionCombineDetail(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryCFMMCTradingAccountKey(Task task) +{ + CThostFtdcCFMMCTradingAccountKeyField task_data = any_cast(task.task_data); + dict data; + data["KeyID"] = task_data.KeyID; + data["BrokerID"] = task_data.BrokerID; + data["ParticipantID"] = task_data.ParticipantID; + data["CurrentKey"] = task_data.CurrentKey; + data["AccountID"] = task_data.AccountID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryCFMMCTradingAccountKey(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryEWarrantOffset(Task task) +{ + CThostFtdcEWarrantOffsetField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["InvestorID"] = task_data.InvestorID; + data["HedgeFlag"] = task_data.HedgeFlag; + data["Direction"] = task_data.Direction; + data["Volume"] = task_data.Volume; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryEWarrantOffset(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryInvestorProductGroupMargin(Task task) +{ + CThostFtdcInvestorProductGroupMarginField task_data = any_cast(task.task_data); + dict data; + data["ExchMargin"] = task_data.ExchMargin; + data["ShortExchOffsetAmount"] = task_data.ShortExchOffsetAmount; + data["FrozenMargin"] = task_data.FrozenMargin; + data["ShortFrozenMargin"] = task_data.ShortFrozenMargin; + data["HedgeFlag"] = task_data.HedgeFlag; + data["PositionProfit"] = task_data.PositionProfit; + data["Commission"] = task_data.Commission; + data["LongOffsetAmount"] = task_data.LongOffsetAmount; + data["CashIn"] = task_data.CashIn; + data["ShortUseMargin"] = task_data.ShortUseMargin; + data["ShortOffsetAmount"] = task_data.ShortOffsetAmount; + data["SettlementID"] = task_data.SettlementID; + data["LongExchOffsetAmount"] = task_data.LongExchOffsetAmount; + data["LongUseMargin"] = task_data.LongUseMargin; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["FrozenCash"] = task_data.FrozenCash; + data["LongFrozenMargin"] = task_data.LongFrozenMargin; + data["ShortExchMargin"] = task_data.ShortExchMargin; + data["FrozenCommission"] = task_data.FrozenCommission; + data["ProductGroupID"] = task_data.ProductGroupID; + data["ExchOffsetAmount"] = task_data.ExchOffsetAmount; + data["InvestorID"] = task_data.InvestorID; + data["LongExchMargin"] = task_data.LongExchMargin; + data["CloseProfit"] = task_data.CloseProfit; + data["OffsetAmount"] = task_data.OffsetAmount; + data["UseMargin"] = task_data.UseMargin; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryInvestorProductGroupMargin(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryExchangeMarginRate(Task task) +{ + CThostFtdcExchangeMarginRateField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ShortMarginRatioByMoney"] = task_data.ShortMarginRatioByMoney; + data["LongMarginRatioByMoney"] = task_data.LongMarginRatioByMoney; + data["HedgeFlag"] = task_data.HedgeFlag; + data["BrokerID"] = task_data.BrokerID; + data["ShortMarginRatioByVolume"] = task_data.ShortMarginRatioByVolume; + data["LongMarginRatioByVolume"] = task_data.LongMarginRatioByVolume; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryExchangeMarginRate(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryExchangeMarginRateAdjust(Task task) +{ + CThostFtdcExchangeMarginRateAdjustField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ShortMarginRatioByMoney"] = task_data.ShortMarginRatioByMoney; + data["ExchLongMarginRatioByMoney"] = task_data.ExchLongMarginRatioByMoney; + data["ExchShortMarginRatioByMoney"] = task_data.ExchShortMarginRatioByMoney; + data["LongMarginRatioByMoney"] = task_data.LongMarginRatioByMoney; + data["ExchShortMarginRatioByVolume"] = task_data.ExchShortMarginRatioByVolume; + data["ExchLongMarginRatioByVolume"] = task_data.ExchLongMarginRatioByVolume; + data["NoShortMarginRatioByMoney"] = task_data.NoShortMarginRatioByMoney; + data["NoLongMarginRatioByMoney"] = task_data.NoLongMarginRatioByMoney; + data["HedgeFlag"] = task_data.HedgeFlag; + data["NoLongMarginRatioByVolume"] = task_data.NoLongMarginRatioByVolume; + data["NoShortMarginRatioByVolume"] = task_data.NoShortMarginRatioByVolume; + data["BrokerID"] = task_data.BrokerID; + data["ShortMarginRatioByVolume"] = task_data.ShortMarginRatioByVolume; + data["LongMarginRatioByVolume"] = task_data.LongMarginRatioByVolume; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryExchangeMarginRateAdjust(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryExchangeRate(Task task) +{ + CThostFtdcExchangeRateField task_data = any_cast(task.task_data); + dict data; + data["FromCurrencyID"] = task_data.FromCurrencyID; + data["FromCurrencyUnit"] = task_data.FromCurrencyUnit; + data["BrokerID"] = task_data.BrokerID; + data["ExchangeRate"] = task_data.ExchangeRate; + data["ToCurrencyID"] = task_data.ToCurrencyID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryExchangeRate(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQrySecAgentACIDMap(Task task) +{ + CThostFtdcSecAgentACIDMapField task_data = any_cast(task.task_data); + dict data; + data["CurrencyID"] = task_data.CurrencyID; + data["UserID"] = task_data.UserID; + data["BrokerSecAgentID"] = task_data.BrokerSecAgentID; + data["BrokerID"] = task_data.BrokerID; + data["AccountID"] = task_data.AccountID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQrySecAgentACIDMap(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryOptionInstrTradeCost(Task task) +{ + CThostFtdcOptionInstrTradeCostField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchMiniMargin"] = task_data.ExchMiniMargin; + data["HedgeFlag"] = task_data.HedgeFlag; + data["InvestorID"] = task_data.InvestorID; + data["Royalty"] = task_data.Royalty; + data["BrokerID"] = task_data.BrokerID; + data["MiniMargin"] = task_data.MiniMargin; + data["ExchFixedMargin"] = task_data.ExchFixedMargin; + data["FixedMargin"] = task_data.FixedMargin; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryOptionInstrTradeCost(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryOptionInstrCommRate(Task task) +{ + CThostFtdcOptionInstrCommRateField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["OpenRatioByMoney"] = task_data.OpenRatioByMoney; + data["StrikeRatioByMoney"] = task_data.StrikeRatioByMoney; + data["CloseRatioByVolume"] = task_data.CloseRatioByVolume; + data["CloseTodayRatioByMoney"] = task_data.CloseTodayRatioByMoney; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["InvestorRange"] = task_data.InvestorRange; + data["CloseRatioByMoney"] = task_data.CloseRatioByMoney; + data["OpenRatioByVolume"] = task_data.OpenRatioByVolume; + data["StrikeRatioByVolume"] = task_data.StrikeRatioByVolume; + data["CloseTodayRatioByVolume"] = task_data.CloseTodayRatioByVolume; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryOptionInstrCommRate(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryExecOrder(Task task) +{ + CThostFtdcExecOrderField task_data = any_cast(task.task_data); + dict data; + data["NotifySequence"] = task_data.NotifySequence; + data["CloseFlag"] = task_data.CloseFlag; + data["ActiveUserID"] = task_data.ActiveUserID; + data["UserProductInfo"] = task_data.UserProductInfo; + data["TraderID"] = task_data.TraderID; + data["HedgeFlag"] = task_data.HedgeFlag; + data["ExecResult"] = task_data.ExecResult; + data["ReservePositionFlag"] = task_data.ReservePositionFlag; + data["Volume"] = task_data.Volume; + data["InstallID"] = task_data.InstallID; + data["OffsetFlag"] = task_data.OffsetFlag; + data["PosiDirection"] = task_data.PosiDirection; + data["ClientID"] = task_data.ClientID; + data["ExecOrderRef"] = task_data.ExecOrderRef; + data["SessionID"] = task_data.SessionID; + data["ActionType"] = task_data.ActionType; + data["OrderSubmitStatus"] = task_data.OrderSubmitStatus; + data["ClearingPartID"] = task_data.ClearingPartID; + data["InstrumentID"] = task_data.InstrumentID; + data["ExecOrderSysID"] = task_data.ExecOrderSysID; + data["ExchangeID"] = task_data.ExchangeID; + data["StatusMsg"] = task_data.StatusMsg; + data["SettlementID"] = task_data.SettlementID; + data["UserID"] = task_data.UserID; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["InsertTime"] = task_data.InsertTime; + data["ExecOrderLocalID"] = task_data.ExecOrderLocalID; + data["ParticipantID"] = task_data.ParticipantID; + data["CancelTime"] = task_data.CancelTime; + data["BusinessUnit"] = task_data.BusinessUnit; + data["InsertDate"] = task_data.InsertDate; + data["SequenceNo"] = task_data.SequenceNo; + data["InvestorID"] = task_data.InvestorID; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["RequestID"] = task_data.RequestID; + data["BrokerExecOrderSeq"] = task_data.BrokerExecOrderSeq; + data["FrontID"] = task_data.FrontID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryExecOrder(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryForQuote(Task task) +{ + CThostFtdcForQuoteField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ForQuoteRef"] = task_data.ForQuoteRef; + data["ExchangeID"] = task_data.ExchangeID; + data["InstallID"] = task_data.InstallID; + data["ForQuoteLocalID"] = task_data.ForQuoteLocalID; + data["ParticipantID"] = task_data.ParticipantID; + data["ActiveUserID"] = task_data.ActiveUserID; + data["InsertDate"] = task_data.InsertDate; + data["TraderID"] = task_data.TraderID; + data["UserID"] = task_data.UserID; + data["SessionID"] = task_data.SessionID; + data["ClientID"] = task_data.ClientID; + data["StatusMsg"] = task_data.StatusMsg; + data["InvestorID"] = task_data.InvestorID; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["BrokerID"] = task_data.BrokerID; + data["InsertTime"] = task_data.InsertTime; + data["ForQuoteStatus"] = task_data.ForQuoteStatus; + data["FrontID"] = task_data.FrontID; + data["BrokerForQutoSeq"] = task_data.BrokerForQutoSeq; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryForQuote(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryQuote(Task task) +{ + CThostFtdcQuoteField task_data = any_cast(task.task_data); + dict data; + data["NotifySequence"] = task_data.NotifySequence; + data["AskHedgeFlag"] = task_data.AskHedgeFlag; + data["BidOrderSysID"] = task_data.BidOrderSysID; + data["TraderID"] = task_data.TraderID; + data["UserID"] = task_data.UserID; + data["AskVolume"] = task_data.AskVolume; + data["ActiveUserID"] = task_data.ActiveUserID; + data["BidHedgeFlag"] = task_data.BidHedgeFlag; + data["QuoteRef"] = task_data.QuoteRef; + data["AskOrderSysID"] = task_data.AskOrderSysID; + data["InstallID"] = task_data.InstallID; + data["ParticipantID"] = task_data.ParticipantID; + data["UserProductInfo"] = task_data.UserProductInfo; + data["AskOffsetFlag"] = task_data.AskOffsetFlag; + data["ClientID"] = task_data.ClientID; + data["SessionID"] = task_data.SessionID; + data["BidOffsetFlag"] = task_data.BidOffsetFlag; + data["BidPrice"] = task_data.BidPrice; + data["OrderSubmitStatus"] = task_data.OrderSubmitStatus; + data["InstrumentID"] = task_data.InstrumentID; + data["QuoteStatus"] = task_data.QuoteStatus; + data["ExchangeID"] = task_data.ExchangeID; + data["StatusMsg"] = task_data.StatusMsg; + data["SettlementID"] = task_data.SettlementID; + data["QuoteLocalID"] = task_data.QuoteLocalID; + data["BidVolume"] = task_data.BidVolume; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["InsertTime"] = task_data.InsertTime; + data["QuoteSysID"] = task_data.QuoteSysID; + data["ClearingPartID"] = task_data.ClearingPartID; + data["CancelTime"] = task_data.CancelTime; + data["BusinessUnit"] = task_data.BusinessUnit; + data["InsertDate"] = task_data.InsertDate; + data["AskPrice"] = task_data.AskPrice; + data["SequenceNo"] = task_data.SequenceNo; + data["InvestorID"] = task_data.InvestorID; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["RequestID"] = task_data.RequestID; + data["BrokerQuoteSeq"] = task_data.BrokerQuoteSeq; + data["FrontID"] = task_data.FrontID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryQuote(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryTransferSerial(Task task) +{ + CThostFtdcTransferSerialField task_data = any_cast(task.task_data); + dict data; + data["BankNewAccount"] = task_data.BankNewAccount; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["TradeTime"] = task_data.TradeTime; + data["OperatorCode"] = task_data.OperatorCode; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["PlateSerial"] = task_data.PlateSerial; + data["FutureAccType"] = task_data.FutureAccType; + data["ErrorID"] = task_data.ErrorID; + data["BankSerial"] = task_data.BankSerial; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["IdCardType"] = task_data.IdCardType; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["FutureSerial"] = task_data.FutureSerial; + data["InvestorID"] = task_data.InvestorID; + data["ErrorMsg"] = task_data.ErrorMsg; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["AvailabilityFlag"] = task_data.AvailabilityFlag; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryTransferSerial(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryAccountregister(Task task) +{ + CThostFtdcAccountregisterField task_data = any_cast(task.task_data); + dict data; + data["BankAccount"] = task_data.BankAccount; + data["CustType"] = task_data.CustType; + data["CustomerName"] = task_data.CustomerName; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["OutDate"] = task_data.OutDate; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["BankBranchID"] = task_data.BankBranchID; + data["RegDate"] = task_data.RegDate; + data["BrokerID"] = task_data.BrokerID; + data["BankID"] = task_data.BankID; + data["TID"] = task_data.TID; + data["OpenOrDestroy"] = task_data.OpenOrDestroy; + data["IdCardType"] = task_data.IdCardType; + data["TradeDay"] = task_data.TradeDay; + data["BankAccType"] = task_data.BankAccType; + data["AccountID"] = task_data.AccountID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryAccountregister(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspError(Task task) +{ + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspError(error, task.task_id, task.task_last); +}; + +void TdApi::processRtnOrder(Task task) +{ + CThostFtdcOrderField task_data = any_cast(task.task_data); + dict data; + data["ContingentCondition"] = task_data.ContingentCondition; + data["NotifySequence"] = task_data.NotifySequence; + data["ActiveUserID"] = task_data.ActiveUserID; + data["VolumeTraded"] = task_data.VolumeTraded; + data["UserProductInfo"] = task_data.UserProductInfo; + data["CombOffsetFlag"] = task_data.CombOffsetFlag; + data["TraderID"] = task_data.TraderID; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["UserForceClose"] = task_data.UserForceClose; + data["RelativeOrderSysID"] = task_data.RelativeOrderSysID; + data["Direction"] = task_data.Direction; + data["InstallID"] = task_data.InstallID; + data["IsSwapOrder"] = task_data.IsSwapOrder; + data["ParticipantID"] = task_data.ParticipantID; + data["VolumeTotalOriginal"] = task_data.VolumeTotalOriginal; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["ClientID"] = task_data.ClientID; + data["VolumeTotal"] = task_data.VolumeTotal; + data["OrderPriceType"] = task_data.OrderPriceType; + data["SessionID"] = task_data.SessionID; + data["TimeCondition"] = task_data.TimeCondition; + data["OrderStatus"] = task_data.OrderStatus; + data["OrderSysID"] = task_data.OrderSysID; + data["OrderSubmitStatus"] = task_data.OrderSubmitStatus; + data["IsAutoSuspend"] = task_data.IsAutoSuspend; + data["StopPrice"] = task_data.StopPrice; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["MinVolume"] = task_data.MinVolume; + data["StatusMsg"] = task_data.StatusMsg; + data["SettlementID"] = task_data.SettlementID; + data["ForceCloseReason"] = task_data.ForceCloseReason; + data["OrderType"] = task_data.OrderType; + data["UpdateTime"] = task_data.UpdateTime; + data["TradingDay"] = task_data.TradingDay; + data["ActiveTime"] = task_data.ActiveTime; + data["BrokerID"] = task_data.BrokerID; + data["InsertTime"] = task_data.InsertTime; + data["FrontID"] = task_data.FrontID; + data["SuspendTime"] = task_data.SuspendTime; + data["ClearingPartID"] = task_data.ClearingPartID; + data["CombHedgeFlag"] = task_data.CombHedgeFlag; + data["CancelTime"] = task_data.CancelTime; + data["GTDDate"] = task_data.GTDDate; + data["OrderLocalID"] = task_data.OrderLocalID; + data["BusinessUnit"] = task_data.BusinessUnit; + data["InsertDate"] = task_data.InsertDate; + data["SequenceNo"] = task_data.SequenceNo; + data["OrderRef"] = task_data.OrderRef; + data["BrokerOrderSeq"] = task_data.BrokerOrderSeq; + data["InvestorID"] = task_data.InvestorID; + data["VolumeCondition"] = task_data.VolumeCondition; + data["RequestID"] = task_data.RequestID; + data["OrderSource"] = task_data.OrderSource; + data["ZCETotalTradedVolume"] = task_data.ZCETotalTradedVolume; + data["ActiveTraderID"] = task_data.ActiveTraderID; + + this->onRtnOrder(data); +}; + +void TdApi::processRtnTrade(Task task) +{ + CThostFtdcTradeField task_data = any_cast(task.task_data); + dict data; + data["TradeType"] = task_data.TradeType; + data["TraderID"] = task_data.TraderID; + data["HedgeFlag"] = task_data.HedgeFlag; + data["TradeTime"] = task_data.TradeTime; + data["Direction"] = task_data.Direction; + data["ParticipantID"] = task_data.ParticipantID; + data["Price"] = task_data.Price; + data["ClientID"] = task_data.ClientID; + data["Volume"] = task_data.Volume; + data["OrderSysID"] = task_data.OrderSysID; + data["ClearingPartID"] = task_data.ClearingPartID; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["SettlementID"] = task_data.SettlementID; + data["UserID"] = task_data.UserID; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["OffsetFlag"] = task_data.OffsetFlag; + data["OrderLocalID"] = task_data.OrderLocalID; + data["TradeID"] = task_data.TradeID; + data["TradeDate"] = task_data.TradeDate; + data["BusinessUnit"] = task_data.BusinessUnit; + data["SequenceNo"] = task_data.SequenceNo; + data["OrderRef"] = task_data.OrderRef; + data["BrokerOrderSeq"] = task_data.BrokerOrderSeq; + data["InvestorID"] = task_data.InvestorID; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["TradeSource"] = task_data.TradeSource; + data["PriceSource"] = task_data.PriceSource; + data["TradingRole"] = task_data.TradingRole; + + this->onRtnTrade(data); +}; + +void TdApi::processErrRtnOrderInsert(Task task) +{ + CThostFtdcInputOrderField task_data = any_cast(task.task_data); + dict data; + data["ContingentCondition"] = task_data.ContingentCondition; + data["CombOffsetFlag"] = task_data.CombOffsetFlag; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["UserForceClose"] = task_data.UserForceClose; + data["Direction"] = task_data.Direction; + data["IsSwapOrder"] = task_data.IsSwapOrder; + data["VolumeTotalOriginal"] = task_data.VolumeTotalOriginal; + data["OrderPriceType"] = task_data.OrderPriceType; + data["TimeCondition"] = task_data.TimeCondition; + data["IsAutoSuspend"] = task_data.IsAutoSuspend; + data["StopPrice"] = task_data.StopPrice; + data["InstrumentID"] = task_data.InstrumentID; + data["MinVolume"] = task_data.MinVolume; + data["ForceCloseReason"] = task_data.ForceCloseReason; + data["BrokerID"] = task_data.BrokerID; + data["CombHedgeFlag"] = task_data.CombHedgeFlag; + data["GTDDate"] = task_data.GTDDate; + data["BusinessUnit"] = task_data.BusinessUnit; + data["OrderRef"] = task_data.OrderRef; + data["InvestorID"] = task_data.InvestorID; + data["VolumeCondition"] = task_data.VolumeCondition; + data["RequestID"] = task_data.RequestID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnOrderInsert(data, error); +}; + +void TdApi::processErrRtnOrderAction(Task task) +{ + CThostFtdcOrderActionField task_data = any_cast(task.task_data); + dict data; + data["ActionTime"] = task_data.ActionTime; + data["InvestorID"] = task_data.InvestorID; + data["TraderID"] = task_data.TraderID; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["OrderActionStatus"] = task_data.OrderActionStatus; + data["InstallID"] = task_data.InstallID; + data["ParticipantID"] = task_data.ParticipantID; + data["OrderActionRef"] = task_data.OrderActionRef; + data["VolumeChange"] = task_data.VolumeChange; + data["SessionID"] = task_data.SessionID; + data["ActionFlag"] = task_data.ActionFlag; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["StatusMsg"] = task_data.StatusMsg; + data["OrderSysID"] = task_data.OrderSysID; + data["BrokerID"] = task_data.BrokerID; + data["ClientID"] = task_data.ClientID; + data["ActionDate"] = task_data.ActionDate; + data["OrderLocalID"] = task_data.OrderLocalID; + data["BusinessUnit"] = task_data.BusinessUnit; + data["OrderRef"] = task_data.OrderRef; + data["ActionLocalID"] = task_data.ActionLocalID; + data["RequestID"] = task_data.RequestID; + data["FrontID"] = task_data.FrontID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnOrderAction(data, error); +}; + +void TdApi::processRtnInstrumentStatus(Task task) +{ + CThostFtdcInstrumentStatusField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["EnterTime"] = task_data.EnterTime; + data["SettlementGroupID"] = task_data.SettlementGroupID; + data["TradingSegmentSN"] = task_data.TradingSegmentSN; + data["EnterReason"] = task_data.EnterReason; + data["InstrumentStatus"] = task_data.InstrumentStatus; + data["ExchangeInstID"] = task_data.ExchangeInstID; + + this->onRtnInstrumentStatus(data); +}; + +void TdApi::processRtnTradingNotice(Task task) +{ + CThostFtdcTradingNoticeInfoField task_data = any_cast(task.task_data); + dict data; + data["SequenceSeries"] = task_data.SequenceSeries; + data["SequenceNo"] = task_data.SequenceNo; + data["FieldContent"] = task_data.FieldContent; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["SendTime"] = task_data.SendTime; + + this->onRtnTradingNotice(data); +}; + +void TdApi::processRtnErrorConditionalOrder(Task task) +{ + CThostFtdcErrorConditionalOrderField task_data = any_cast(task.task_data); + dict data; + data["ContingentCondition"] = task_data.ContingentCondition; + data["NotifySequence"] = task_data.NotifySequence; + data["ActiveUserID"] = task_data.ActiveUserID; + data["VolumeTraded"] = task_data.VolumeTraded; + data["UserProductInfo"] = task_data.UserProductInfo; + data["CombOffsetFlag"] = task_data.CombOffsetFlag; + data["TraderID"] = task_data.TraderID; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["UserForceClose"] = task_data.UserForceClose; + data["RelativeOrderSysID"] = task_data.RelativeOrderSysID; + data["Direction"] = task_data.Direction; + data["InstallID"] = task_data.InstallID; + data["IsSwapOrder"] = task_data.IsSwapOrder; + data["ParticipantID"] = task_data.ParticipantID; + data["VolumeTotalOriginal"] = task_data.VolumeTotalOriginal; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["ClientID"] = task_data.ClientID; + data["VolumeTotal"] = task_data.VolumeTotal; + data["OrderPriceType"] = task_data.OrderPriceType; + data["SessionID"] = task_data.SessionID; + data["TimeCondition"] = task_data.TimeCondition; + data["OrderStatus"] = task_data.OrderStatus; + data["OrderSysID"] = task_data.OrderSysID; + data["OrderSubmitStatus"] = task_data.OrderSubmitStatus; + data["IsAutoSuspend"] = task_data.IsAutoSuspend; + data["StopPrice"] = task_data.StopPrice; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["MinVolume"] = task_data.MinVolume; + data["StatusMsg"] = task_data.StatusMsg; + data["SettlementID"] = task_data.SettlementID; + data["ForceCloseReason"] = task_data.ForceCloseReason; + data["OrderType"] = task_data.OrderType; + data["ErrorID"] = task_data.ErrorID; + data["UpdateTime"] = task_data.UpdateTime; + data["TradingDay"] = task_data.TradingDay; + data["ActiveTime"] = task_data.ActiveTime; + data["BrokerID"] = task_data.BrokerID; + data["InsertTime"] = task_data.InsertTime; + data["FrontID"] = task_data.FrontID; + data["SuspendTime"] = task_data.SuspendTime; + data["ClearingPartID"] = task_data.ClearingPartID; + data["CombHedgeFlag"] = task_data.CombHedgeFlag; + data["CancelTime"] = task_data.CancelTime; + data["GTDDate"] = task_data.GTDDate; + data["OrderLocalID"] = task_data.OrderLocalID; + data["BusinessUnit"] = task_data.BusinessUnit; + data["InsertDate"] = task_data.InsertDate; + data["SequenceNo"] = task_data.SequenceNo; + data["OrderRef"] = task_data.OrderRef; + data["BrokerOrderSeq"] = task_data.BrokerOrderSeq; + data["InvestorID"] = task_data.InvestorID; + data["VolumeCondition"] = task_data.VolumeCondition; + data["RequestID"] = task_data.RequestID; + data["ErrorMsg"] = task_data.ErrorMsg; + data["OrderSource"] = task_data.OrderSource; + data["ZCETotalTradedVolume"] = task_data.ZCETotalTradedVolume; + data["ActiveTraderID"] = task_data.ActiveTraderID; + + this->onRtnErrorConditionalOrder(data); +}; + +void TdApi::processRtnExecOrder(Task task) +{ + CThostFtdcExecOrderField task_data = any_cast(task.task_data); + dict data; + data["NotifySequence"] = task_data.NotifySequence; + data["CloseFlag"] = task_data.CloseFlag; + data["ActiveUserID"] = task_data.ActiveUserID; + data["UserProductInfo"] = task_data.UserProductInfo; + data["TraderID"] = task_data.TraderID; + data["HedgeFlag"] = task_data.HedgeFlag; + data["ExecResult"] = task_data.ExecResult; + data["ReservePositionFlag"] = task_data.ReservePositionFlag; + data["Volume"] = task_data.Volume; + data["InstallID"] = task_data.InstallID; + data["OffsetFlag"] = task_data.OffsetFlag; + data["PosiDirection"] = task_data.PosiDirection; + data["ClientID"] = task_data.ClientID; + data["ExecOrderRef"] = task_data.ExecOrderRef; + data["SessionID"] = task_data.SessionID; + data["ActionType"] = task_data.ActionType; + data["OrderSubmitStatus"] = task_data.OrderSubmitStatus; + data["ClearingPartID"] = task_data.ClearingPartID; + data["InstrumentID"] = task_data.InstrumentID; + data["ExecOrderSysID"] = task_data.ExecOrderSysID; + data["ExchangeID"] = task_data.ExchangeID; + data["StatusMsg"] = task_data.StatusMsg; + data["SettlementID"] = task_data.SettlementID; + data["UserID"] = task_data.UserID; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["InsertTime"] = task_data.InsertTime; + data["ExecOrderLocalID"] = task_data.ExecOrderLocalID; + data["ParticipantID"] = task_data.ParticipantID; + data["CancelTime"] = task_data.CancelTime; + data["BusinessUnit"] = task_data.BusinessUnit; + data["InsertDate"] = task_data.InsertDate; + data["SequenceNo"] = task_data.SequenceNo; + data["InvestorID"] = task_data.InvestorID; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["RequestID"] = task_data.RequestID; + data["BrokerExecOrderSeq"] = task_data.BrokerExecOrderSeq; + data["FrontID"] = task_data.FrontID; + + this->onRtnExecOrder(data); +}; + +void TdApi::processErrRtnExecOrderInsert(Task task) +{ + CThostFtdcInputExecOrderField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ExecOrderRef"] = task_data.ExecOrderRef; + data["CloseFlag"] = task_data.CloseFlag; + data["OffsetFlag"] = task_data.OffsetFlag; + data["PosiDirection"] = task_data.PosiDirection; + data["BusinessUnit"] = task_data.BusinessUnit; + data["HedgeFlag"] = task_data.HedgeFlag; + data["UserID"] = task_data.UserID; + data["Volume"] = task_data.Volume; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["RequestID"] = task_data.RequestID; + data["ActionType"] = task_data.ActionType; + data["ReservePositionFlag"] = task_data.ReservePositionFlag; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnExecOrderInsert(data, error); +}; + +void TdApi::processErrRtnExecOrderAction(Task task) +{ + CThostFtdcExecOrderActionField task_data = any_cast(task.task_data); + dict data; + data["ActionTime"] = task_data.ActionTime; + data["TraderID"] = task_data.TraderID; + data["UserID"] = task_data.UserID; + data["OrderActionStatus"] = task_data.OrderActionStatus; + data["InstallID"] = task_data.InstallID; + data["ParticipantID"] = task_data.ParticipantID; + data["InvestorID"] = task_data.InvestorID; + data["ClientID"] = task_data.ClientID; + data["ExecOrderRef"] = task_data.ExecOrderRef; + data["SessionID"] = task_data.SessionID; + data["ActionType"] = task_data.ActionType; + data["ActionFlag"] = task_data.ActionFlag; + data["InstrumentID"] = task_data.InstrumentID; + data["ExecOrderSysID"] = task_data.ExecOrderSysID; + data["ExchangeID"] = task_data.ExchangeID; + data["StatusMsg"] = task_data.StatusMsg; + data["BrokerID"] = task_data.BrokerID; + data["ExecOrderLocalID"] = task_data.ExecOrderLocalID; + data["ActionDate"] = task_data.ActionDate; + data["BusinessUnit"] = task_data.BusinessUnit; + data["ActionLocalID"] = task_data.ActionLocalID; + data["RequestID"] = task_data.RequestID; + data["ExecOrderActionRef"] = task_data.ExecOrderActionRef; + data["FrontID"] = task_data.FrontID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnExecOrderAction(data, error); +}; + +void TdApi::processErrRtnForQuoteInsert(Task task) +{ + CThostFtdcInputForQuoteField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["UserID"] = task_data.UserID; + data["ForQuoteRef"] = task_data.ForQuoteRef; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnForQuoteInsert(data, error); +}; + +void TdApi::processRtnQuote(Task task) +{ + CThostFtdcQuoteField task_data = any_cast(task.task_data); + dict data; + data["NotifySequence"] = task_data.NotifySequence; + data["AskHedgeFlag"] = task_data.AskHedgeFlag; + data["BidOrderSysID"] = task_data.BidOrderSysID; + data["TraderID"] = task_data.TraderID; + data["UserID"] = task_data.UserID; + data["AskVolume"] = task_data.AskVolume; + data["ActiveUserID"] = task_data.ActiveUserID; + data["BidHedgeFlag"] = task_data.BidHedgeFlag; + data["QuoteRef"] = task_data.QuoteRef; + data["AskOrderSysID"] = task_data.AskOrderSysID; + data["InstallID"] = task_data.InstallID; + data["ParticipantID"] = task_data.ParticipantID; + data["UserProductInfo"] = task_data.UserProductInfo; + data["AskOffsetFlag"] = task_data.AskOffsetFlag; + data["ClientID"] = task_data.ClientID; + data["SessionID"] = task_data.SessionID; + data["BidOffsetFlag"] = task_data.BidOffsetFlag; + data["BidPrice"] = task_data.BidPrice; + data["OrderSubmitStatus"] = task_data.OrderSubmitStatus; + data["InstrumentID"] = task_data.InstrumentID; + data["QuoteStatus"] = task_data.QuoteStatus; + data["ExchangeID"] = task_data.ExchangeID; + data["StatusMsg"] = task_data.StatusMsg; + data["SettlementID"] = task_data.SettlementID; + data["QuoteLocalID"] = task_data.QuoteLocalID; + data["BidVolume"] = task_data.BidVolume; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["InsertTime"] = task_data.InsertTime; + data["QuoteSysID"] = task_data.QuoteSysID; + data["ClearingPartID"] = task_data.ClearingPartID; + data["CancelTime"] = task_data.CancelTime; + data["BusinessUnit"] = task_data.BusinessUnit; + data["InsertDate"] = task_data.InsertDate; + data["AskPrice"] = task_data.AskPrice; + data["SequenceNo"] = task_data.SequenceNo; + data["InvestorID"] = task_data.InvestorID; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["RequestID"] = task_data.RequestID; + data["BrokerQuoteSeq"] = task_data.BrokerQuoteSeq; + data["FrontID"] = task_data.FrontID; + + this->onRtnQuote(data); +}; + +void TdApi::processErrRtnQuoteInsert(Task task) +{ + CThostFtdcInputQuoteField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["AskHedgeFlag"] = task_data.AskHedgeFlag; + data["BusinessUnit"] = task_data.BusinessUnit; + data["AskPrice"] = task_data.AskPrice; + data["UserID"] = task_data.UserID; + data["AskOffsetFlag"] = task_data.AskOffsetFlag; + data["BidVolume"] = task_data.BidVolume; + data["AskVolume"] = task_data.AskVolume; + data["InvestorID"] = task_data.InvestorID; + data["BidOffsetFlag"] = task_data.BidOffsetFlag; + data["BrokerID"] = task_data.BrokerID; + data["RequestID"] = task_data.RequestID; + data["BidPrice"] = task_data.BidPrice; + data["BidHedgeFlag"] = task_data.BidHedgeFlag; + data["QuoteRef"] = task_data.QuoteRef; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnQuoteInsert(data, error); +}; + +void TdApi::processErrRtnQuoteAction(Task task) +{ + CThostFtdcQuoteActionField task_data = any_cast(task.task_data); + dict data; + data["ActionTime"] = task_data.ActionTime; + data["TraderID"] = task_data.TraderID; + data["UserID"] = task_data.UserID; + data["OrderActionStatus"] = task_data.OrderActionStatus; + data["QuoteRef"] = task_data.QuoteRef; + data["InstallID"] = task_data.InstallID; + data["ParticipantID"] = task_data.ParticipantID; + data["InvestorID"] = task_data.InvestorID; + data["ClientID"] = task_data.ClientID; + data["SessionID"] = task_data.SessionID; + data["ActionFlag"] = task_data.ActionFlag; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["QuoteActionRef"] = task_data.QuoteActionRef; + data["StatusMsg"] = task_data.StatusMsg; + data["QuoteLocalID"] = task_data.QuoteLocalID; + data["BrokerID"] = task_data.BrokerID; + data["QuoteSysID"] = task_data.QuoteSysID; + data["ActionDate"] = task_data.ActionDate; + data["BusinessUnit"] = task_data.BusinessUnit; + data["ActionLocalID"] = task_data.ActionLocalID; + data["RequestID"] = task_data.RequestID; + data["FrontID"] = task_data.FrontID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnQuoteAction(data, error); +}; + +void TdApi::processRtnForQuoteRsp(Task task) +{ + CThostFtdcForQuoteRspField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["TradingDay"] = task_data.TradingDay; + data["ForQuoteTime"] = task_data.ForQuoteTime; + data["ForQuoteSysID"] = task_data.ForQuoteSysID; + data["ActionDay"] = task_data.ActionDay; + + this->onRtnForQuoteRsp(data); +}; + +void TdApi::processRspQryContractBank(Task task) +{ + CThostFtdcContractBankField task_data = any_cast(task.task_data); + dict data; + data["BankName"] = task_data.BankName; + data["BrokerID"] = task_data.BrokerID; + data["BankBrchID"] = task_data.BankBrchID; + data["BankID"] = task_data.BankID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryContractBank(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryParkedOrder(Task task) +{ + CThostFtdcParkedOrderField task_data = any_cast(task.task_data); + dict data; + data["ContingentCondition"] = task_data.ContingentCondition; + data["CombOffsetFlag"] = task_data.CombOffsetFlag; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["UserForceClose"] = task_data.UserForceClose; + data["Status"] = task_data.Status; + data["Direction"] = task_data.Direction; + data["IsSwapOrder"] = task_data.IsSwapOrder; + data["UserType"] = task_data.UserType; + data["VolumeTotalOriginal"] = task_data.VolumeTotalOriginal; + data["OrderPriceType"] = task_data.OrderPriceType; + data["TimeCondition"] = task_data.TimeCondition; + data["IsAutoSuspend"] = task_data.IsAutoSuspend; + data["StopPrice"] = task_data.StopPrice; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["MinVolume"] = task_data.MinVolume; + data["ForceCloseReason"] = task_data.ForceCloseReason; + data["ErrorID"] = task_data.ErrorID; + data["ParkedOrderID"] = task_data.ParkedOrderID; + data["BrokerID"] = task_data.BrokerID; + data["CombHedgeFlag"] = task_data.CombHedgeFlag; + data["GTDDate"] = task_data.GTDDate; + data["BusinessUnit"] = task_data.BusinessUnit; + data["ErrorMsg"] = task_data.ErrorMsg; + data["OrderRef"] = task_data.OrderRef; + data["InvestorID"] = task_data.InvestorID; + data["VolumeCondition"] = task_data.VolumeCondition; + data["RequestID"] = task_data.RequestID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryParkedOrder(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryParkedOrderAction(Task task) +{ + CThostFtdcParkedOrderActionField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["Status"] = task_data.Status; + data["ExchangeID"] = task_data.ExchangeID; + data["ActionFlag"] = task_data.ActionFlag; + data["OrderActionRef"] = task_data.OrderActionRef; + data["UserType"] = task_data.UserType; + data["ErrorMsg"] = task_data.ErrorMsg; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["OrderRef"] = task_data.OrderRef; + data["InvestorID"] = task_data.InvestorID; + data["SessionID"] = task_data.SessionID; + data["VolumeChange"] = task_data.VolumeChange; + data["BrokerID"] = task_data.BrokerID; + data["RequestID"] = task_data.RequestID; + data["OrderSysID"] = task_data.OrderSysID; + data["ParkedOrderActionID"] = task_data.ParkedOrderActionID; + data["FrontID"] = task_data.FrontID; + data["ErrorID"] = task_data.ErrorID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryParkedOrderAction(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryTradingNotice(Task task) +{ + CThostFtdcTradingNoticeField task_data = any_cast(task.task_data); + dict data; + data["SequenceSeries"] = task_data.SequenceSeries; + data["SequenceNo"] = task_data.SequenceNo; + data["UserID"] = task_data.UserID; + data["FieldContent"] = task_data.FieldContent; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["SendTime"] = task_data.SendTime; + data["InvestorRange"] = task_data.InvestorRange; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryTradingNotice(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryBrokerTradingParams(Task task) +{ + CThostFtdcBrokerTradingParamsField task_data = any_cast(task.task_data); + dict data; + data["MarginPriceType"] = task_data.MarginPriceType; + data["Algorithm"] = task_data.Algorithm; + data["CurrencyID"] = task_data.CurrencyID; + data["OptionRoyaltyPriceType"] = task_data.OptionRoyaltyPriceType; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["AvailIncludeCloseProfit"] = task_data.AvailIncludeCloseProfit; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryBrokerTradingParams(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryBrokerTradingAlgos(Task task) +{ + CThostFtdcBrokerTradingAlgosField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["HandlePositionAlgoID"] = task_data.HandlePositionAlgoID; + data["ExchangeID"] = task_data.ExchangeID; + data["FindMarginRateAlgoID"] = task_data.FindMarginRateAlgoID; + data["BrokerID"] = task_data.BrokerID; + data["HandleTradingAccountAlgoID"] = task_data.HandleTradingAccountAlgoID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryBrokerTradingAlgos(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRtnFromBankToFutureByBank(Task task) +{ + CThostFtdcRspTransferField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnFromBankToFutureByBank(data); +}; + +void TdApi::processRtnFromFutureToBankByBank(Task task) +{ + CThostFtdcRspTransferField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnFromFutureToBankByBank(data); +}; + +void TdApi::processRtnRepealFromBankToFutureByBank(Task task) +{ + CThostFtdcRspRepealField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["BankRepealFlag"] = task_data.BankRepealFlag; + data["RepealedTimes"] = task_data.RepealedTimes; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["FutureRepealSerial"] = task_data.FutureRepealSerial; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["BrokerRepealFlag"] = task_data.BrokerRepealFlag; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankRepealSerial"] = task_data.BankRepealSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["RepealTimeInterval"] = task_data.RepealTimeInterval; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["PlateRepealSerial"] = task_data.PlateRepealSerial; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnRepealFromBankToFutureByBank(data); +}; + +void TdApi::processRtnRepealFromFutureToBankByBank(Task task) +{ + CThostFtdcRspRepealField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["BankRepealFlag"] = task_data.BankRepealFlag; + data["RepealedTimes"] = task_data.RepealedTimes; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["FutureRepealSerial"] = task_data.FutureRepealSerial; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["BrokerRepealFlag"] = task_data.BrokerRepealFlag; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankRepealSerial"] = task_data.BankRepealSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["RepealTimeInterval"] = task_data.RepealTimeInterval; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["PlateRepealSerial"] = task_data.PlateRepealSerial; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnRepealFromFutureToBankByBank(data); +}; + +void TdApi::processRtnFromBankToFutureByFuture(Task task) +{ + CThostFtdcRspTransferField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnFromBankToFutureByFuture(data); +}; + +void TdApi::processRtnFromFutureToBankByFuture(Task task) +{ + CThostFtdcRspTransferField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnFromFutureToBankByFuture(data); +}; + +void TdApi::processRtnRepealFromBankToFutureByFutureManual(Task task) +{ + CThostFtdcRspRepealField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["BankRepealFlag"] = task_data.BankRepealFlag; + data["RepealedTimes"] = task_data.RepealedTimes; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["FutureRepealSerial"] = task_data.FutureRepealSerial; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["BrokerRepealFlag"] = task_data.BrokerRepealFlag; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankRepealSerial"] = task_data.BankRepealSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["RepealTimeInterval"] = task_data.RepealTimeInterval; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["PlateRepealSerial"] = task_data.PlateRepealSerial; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnRepealFromBankToFutureByFutureManual(data); +}; + +void TdApi::processRtnRepealFromFutureToBankByFutureManual(Task task) +{ + CThostFtdcRspRepealField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["BankRepealFlag"] = task_data.BankRepealFlag; + data["RepealedTimes"] = task_data.RepealedTimes; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["FutureRepealSerial"] = task_data.FutureRepealSerial; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["BrokerRepealFlag"] = task_data.BrokerRepealFlag; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankRepealSerial"] = task_data.BankRepealSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["RepealTimeInterval"] = task_data.RepealTimeInterval; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["PlateRepealSerial"] = task_data.PlateRepealSerial; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnRepealFromFutureToBankByFutureManual(data); +}; + +void TdApi::processRtnQueryBankBalanceByFuture(Task task) +{ + CThostFtdcNotifyQueryAccountField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["BankUseAmount"] = task_data.BankUseAmount; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["ErrorMsg"] = task_data.ErrorMsg; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Digest"] = task_data.Digest; + data["BankFetchAmount"] = task_data.BankFetchAmount; + + this->onRtnQueryBankBalanceByFuture(data); +}; + +void TdApi::processErrRtnBankToFutureByFuture(Task task) +{ + CThostFtdcReqTransferField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnBankToFutureByFuture(data, error); +}; + +void TdApi::processErrRtnFutureToBankByFuture(Task task) +{ + CThostFtdcReqTransferField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnFutureToBankByFuture(data, error); +}; + +void TdApi::processErrRtnRepealBankToFutureByFutureManual(Task task) +{ + CThostFtdcReqRepealField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["BankRepealFlag"] = task_data.BankRepealFlag; + data["RepealedTimes"] = task_data.RepealedTimes; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["FutureRepealSerial"] = task_data.FutureRepealSerial; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["BrokerRepealFlag"] = task_data.BrokerRepealFlag; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankRepealSerial"] = task_data.BankRepealSerial; + data["RepealTimeInterval"] = task_data.RepealTimeInterval; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["PlateRepealSerial"] = task_data.PlateRepealSerial; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnRepealBankToFutureByFutureManual(data, error); +}; + +void TdApi::processErrRtnRepealFutureToBankByFutureManual(Task task) +{ + CThostFtdcReqRepealField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["BankRepealFlag"] = task_data.BankRepealFlag; + data["RepealedTimes"] = task_data.RepealedTimes; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["FutureRepealSerial"] = task_data.FutureRepealSerial; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["BrokerRepealFlag"] = task_data.BrokerRepealFlag; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankRepealSerial"] = task_data.BankRepealSerial; + data["RepealTimeInterval"] = task_data.RepealTimeInterval; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["PlateRepealSerial"] = task_data.PlateRepealSerial; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnRepealFutureToBankByFutureManual(data, error); +}; + +void TdApi::processErrRtnQueryBankBalanceByFuture(Task task) +{ + CThostFtdcReqQueryAccountField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Digest"] = task_data.Digest; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnQueryBankBalanceByFuture(data, error); +}; + +void TdApi::processRtnRepealFromBankToFutureByFuture(Task task) +{ + CThostFtdcRspRepealField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["BankRepealFlag"] = task_data.BankRepealFlag; + data["RepealedTimes"] = task_data.RepealedTimes; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["FutureRepealSerial"] = task_data.FutureRepealSerial; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["BrokerRepealFlag"] = task_data.BrokerRepealFlag; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankRepealSerial"] = task_data.BankRepealSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["RepealTimeInterval"] = task_data.RepealTimeInterval; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["PlateRepealSerial"] = task_data.PlateRepealSerial; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnRepealFromBankToFutureByFuture(data); +}; + +void TdApi::processRtnRepealFromFutureToBankByFuture(Task task) +{ + CThostFtdcRspRepealField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["BankRepealFlag"] = task_data.BankRepealFlag; + data["RepealedTimes"] = task_data.RepealedTimes; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["FutureRepealSerial"] = task_data.FutureRepealSerial; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["BrokerRepealFlag"] = task_data.BrokerRepealFlag; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankRepealSerial"] = task_data.BankRepealSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["RepealTimeInterval"] = task_data.RepealTimeInterval; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["PlateRepealSerial"] = task_data.PlateRepealSerial; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnRepealFromFutureToBankByFuture(data); +}; + +void TdApi::processRspFromBankToFutureByFuture(Task task) +{ + CThostFtdcReqTransferField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspFromBankToFutureByFuture(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspFromFutureToBankByFuture(Task task) +{ + CThostFtdcReqTransferField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspFromFutureToBankByFuture(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQueryBankAccountMoneyByFuture(Task task) +{ + CThostFtdcReqQueryAccountField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Digest"] = task_data.Digest; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQueryBankAccountMoneyByFuture(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRtnOpenAccountByBank(Task task) +{ + CThostFtdcOpenAccountField task_data = any_cast(task.task_data); + dict data; + data["MoneyAccountStatus"] = task_data.MoneyAccountStatus; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["Telephone"] = task_data.Telephone; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["Fax"] = task_data.Fax; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["CountryCode"] = task_data.CountryCode; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["Address"] = task_data.Address; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["CustType"] = task_data.CustType; + data["Gender"] = task_data.Gender; + data["BankID"] = task_data.BankID; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["CashExchangeCode"] = task_data.CashExchangeCode; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["MobilePhone"] = task_data.MobilePhone; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["ErrorMsg"] = task_data.ErrorMsg; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["ZipCode"] = task_data.ZipCode; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["TradeTime"] = task_data.TradeTime; + data["EMail"] = task_data.EMail; + data["Digest"] = task_data.Digest; + data["DeviceID"] = task_data.DeviceID; + + this->onRtnOpenAccountByBank(data); +}; + +void TdApi::processRtnCancelAccountByBank(Task task) +{ + CThostFtdcCancelAccountField task_data = any_cast(task.task_data); + dict data; + data["MoneyAccountStatus"] = task_data.MoneyAccountStatus; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["Telephone"] = task_data.Telephone; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["Fax"] = task_data.Fax; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["CountryCode"] = task_data.CountryCode; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["Address"] = task_data.Address; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["CustType"] = task_data.CustType; + data["Gender"] = task_data.Gender; + data["BankID"] = task_data.BankID; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["CashExchangeCode"] = task_data.CashExchangeCode; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["MobilePhone"] = task_data.MobilePhone; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["ErrorMsg"] = task_data.ErrorMsg; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["ZipCode"] = task_data.ZipCode; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["TradeTime"] = task_data.TradeTime; + data["EMail"] = task_data.EMail; + data["Digest"] = task_data.Digest; + data["DeviceID"] = task_data.DeviceID; + + this->onRtnCancelAccountByBank(data); +}; + +void TdApi::processRtnChangeAccountByBank(Task task) +{ + CThostFtdcChangeAccountField task_data = any_cast(task.task_data); + dict data; + data["MoneyAccountStatus"] = task_data.MoneyAccountStatus; + data["NewBankPassWord"] = task_data.NewBankPassWord; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["BankPassWord"] = task_data.BankPassWord; + data["Telephone"] = task_data.Telephone; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["Fax"] = task_data.Fax; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["CountryCode"] = task_data.CountryCode; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["NewBankAccount"] = task_data.NewBankAccount; + data["Address"] = task_data.Address; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["CustType"] = task_data.CustType; + data["Gender"] = task_data.Gender; + data["BankID"] = task_data.BankID; + data["BankSerial"] = task_data.BankSerial; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["MobilePhone"] = task_data.MobilePhone; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["ErrorMsg"] = task_data.ErrorMsg; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["ZipCode"] = task_data.ZipCode; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["TradeTime"] = task_data.TradeTime; + data["EMail"] = task_data.EMail; + data["Digest"] = task_data.Digest; + + this->onRtnChangeAccountByBank(data); +}; + diff --git a/vn.ctp/pyscript/ctp_td_switch.cpp b/vn.ctp/pyscript/ctp_td_switch.cpp new file mode 100644 index 00000000..4879b923 --- /dev/null +++ b/vn.ctp/pyscript/ctp_td_switch.cpp @@ -0,0 +1,582 @@ +case ONFRONTCONNECTED: +{ + this->processFrontConnected(task); + break; +} + +case ONFRONTDISCONNECTED: +{ + this->processFrontDisconnected(task); + break; +} + +case ONHEARTBEATWARNING: +{ + this->processHeartBeatWarning(task); + break; +} + +case ONRSPAUTHENTICATE: +{ + this->processRspAuthenticate(task); + break; +} + +case ONRSPUSERLOGIN: +{ + this->processRspUserLogin(task); + break; +} + +case ONRSPUSERLOGOUT: +{ + this->processRspUserLogout(task); + break; +} + +case ONRSPUSERPASSWORDUPDATE: +{ + this->processRspUserPasswordUpdate(task); + break; +} + +case ONRSPTRADINGACCOUNTPASSWORDUPDATE: +{ + this->processRspTradingAccountPasswordUpdate(task); + break; +} + +case ONRSPORDERINSERT: +{ + this->processRspOrderInsert(task); + break; +} + +case ONRSPPARKEDORDERINSERT: +{ + this->processRspParkedOrderInsert(task); + break; +} + +case ONRSPPARKEDORDERACTION: +{ + this->processRspParkedOrderAction(task); + break; +} + +case ONRSPORDERACTION: +{ + this->processRspOrderAction(task); + break; +} + +case ONRSPQUERYMAXORDERVOLUME: +{ + this->processRspQueryMaxOrderVolume(task); + break; +} + +case ONRSPSETTLEMENTINFOCONFIRM: +{ + this->processRspSettlementInfoConfirm(task); + break; +} + +case ONRSPREMOVEPARKEDORDER: +{ + this->processRspRemoveParkedOrder(task); + break; +} + +case ONRSPREMOVEPARKEDORDERACTION: +{ + this->processRspRemoveParkedOrderAction(task); + break; +} + +case ONRSPEXECORDERINSERT: +{ + this->processRspExecOrderInsert(task); + break; +} + +case ONRSPEXECORDERACTION: +{ + this->processRspExecOrderAction(task); + break; +} + +case ONRSPFORQUOTEINSERT: +{ + this->processRspForQuoteInsert(task); + break; +} + +case ONRSPQUOTEINSERT: +{ + this->processRspQuoteInsert(task); + break; +} + +case ONRSPQUOTEACTION: +{ + this->processRspQuoteAction(task); + break; +} + +case ONRSPQRYORDER: +{ + this->processRspQryOrder(task); + break; +} + +case ONRSPQRYTRADE: +{ + this->processRspQryTrade(task); + break; +} + +case ONRSPQRYINVESTORPOSITION: +{ + this->processRspQryInvestorPosition(task); + break; +} + +case ONRSPQRYTRADINGACCOUNT: +{ + this->processRspQryTradingAccount(task); + break; +} + +case ONRSPQRYINVESTOR: +{ + this->processRspQryInvestor(task); + break; +} + +case ONRSPQRYTRADINGCODE: +{ + this->processRspQryTradingCode(task); + break; +} + +case ONRSPQRYINSTRUMENTMARGINRATE: +{ + this->processRspQryInstrumentMarginRate(task); + break; +} + +case ONRSPQRYINSTRUMENTCOMMISSIONRATE: +{ + this->processRspQryInstrumentCommissionRate(task); + break; +} + +case ONRSPQRYEXCHANGE: +{ + this->processRspQryExchange(task); + break; +} + +case ONRSPQRYPRODUCT: +{ + this->processRspQryProduct(task); + break; +} + +case ONRSPQRYINSTRUMENT: +{ + this->processRspQryInstrument(task); + break; +} + +case ONRSPQRYDEPTHMARKETDATA: +{ + this->processRspQryDepthMarketData(task); + break; +} + +case ONRSPQRYSETTLEMENTINFO: +{ + this->processRspQrySettlementInfo(task); + break; +} + +case ONRSPQRYTRANSFERBANK: +{ + this->processRspQryTransferBank(task); + break; +} + +case ONRSPQRYINVESTORPOSITIONDETAIL: +{ + this->processRspQryInvestorPositionDetail(task); + break; +} + +case ONRSPQRYNOTICE: +{ + this->processRspQryNotice(task); + break; +} + +case ONRSPQRYSETTLEMENTINFOCONFIRM: +{ + this->processRspQrySettlementInfoConfirm(task); + break; +} + +case ONRSPQRYINVESTORPOSITIONCOMBINEDETAIL: +{ + this->processRspQryInvestorPositionCombineDetail(task); + break; +} + +case ONRSPQRYCFMMCTRADINGACCOUNTKEY: +{ + this->processRspQryCFMMCTradingAccountKey(task); + break; +} + +case ONRSPQRYEWARRANTOFFSET: +{ + this->processRspQryEWarrantOffset(task); + break; +} + +case ONRSPQRYINVESTORPRODUCTGROUPMARGIN: +{ + this->processRspQryInvestorProductGroupMargin(task); + break; +} + +case ONRSPQRYEXCHANGEMARGINRATE: +{ + this->processRspQryExchangeMarginRate(task); + break; +} + +case ONRSPQRYEXCHANGEMARGINRATEADJUST: +{ + this->processRspQryExchangeMarginRateAdjust(task); + break; +} + +case ONRSPQRYEXCHANGERATE: +{ + this->processRspQryExchangeRate(task); + break; +} + +case ONRSPQRYSECAGENTACIDMAP: +{ + this->processRspQrySecAgentACIDMap(task); + break; +} + +case ONRSPQRYOPTIONINSTRTRADECOST: +{ + this->processRspQryOptionInstrTradeCost(task); + break; +} + +case ONRSPQRYOPTIONINSTRCOMMRATE: +{ + this->processRspQryOptionInstrCommRate(task); + break; +} + +case ONRSPQRYEXECORDER: +{ + this->processRspQryExecOrder(task); + break; +} + +case ONRSPQRYFORQUOTE: +{ + this->processRspQryForQuote(task); + break; +} + +case ONRSPQRYQUOTE: +{ + this->processRspQryQuote(task); + break; +} + +case ONRSPQRYTRANSFERSERIAL: +{ + this->processRspQryTransferSerial(task); + break; +} + +case ONRSPQRYACCOUNTREGISTER: +{ + this->processRspQryAccountregister(task); + break; +} + +case ONRSPERROR: +{ + this->processRspError(task); + break; +} + +case ONRTNORDER: +{ + this->processRtnOrder(task); + break; +} + +case ONRTNTRADE: +{ + this->processRtnTrade(task); + break; +} + +case ONERRRTNORDERINSERT: +{ + this->processErrRtnOrderInsert(task); + break; +} + +case ONERRRTNORDERACTION: +{ + this->processErrRtnOrderAction(task); + break; +} + +case ONRTNINSTRUMENTSTATUS: +{ + this->processRtnInstrumentStatus(task); + break; +} + +case ONRTNTRADINGNOTICE: +{ + this->processRtnTradingNotice(task); + break; +} + +case ONRTNERRORCONDITIONALORDER: +{ + this->processRtnErrorConditionalOrder(task); + break; +} + +case ONRTNEXECORDER: +{ + this->processRtnExecOrder(task); + break; +} + +case ONERRRTNEXECORDERINSERT: +{ + this->processErrRtnExecOrderInsert(task); + break; +} + +case ONERRRTNEXECORDERACTION: +{ + this->processErrRtnExecOrderAction(task); + break; +} + +case ONERRRTNFORQUOTEINSERT: +{ + this->processErrRtnForQuoteInsert(task); + break; +} + +case ONRTNQUOTE: +{ + this->processRtnQuote(task); + break; +} + +case ONERRRTNQUOTEINSERT: +{ + this->processErrRtnQuoteInsert(task); + break; +} + +case ONERRRTNQUOTEACTION: +{ + this->processErrRtnQuoteAction(task); + break; +} + +case ONRTNFORQUOTERSP: +{ + this->processRtnForQuoteRsp(task); + break; +} + +case ONRSPQRYCONTRACTBANK: +{ + this->processRspQryContractBank(task); + break; +} + +case ONRSPQRYPARKEDORDER: +{ + this->processRspQryParkedOrder(task); + break; +} + +case ONRSPQRYPARKEDORDERACTION: +{ + this->processRspQryParkedOrderAction(task); + break; +} + +case ONRSPQRYTRADINGNOTICE: +{ + this->processRspQryTradingNotice(task); + break; +} + +case ONRSPQRYBROKERTRADINGPARAMS: +{ + this->processRspQryBrokerTradingParams(task); + break; +} + +case ONRSPQRYBROKERTRADINGALGOS: +{ + this->processRspQryBrokerTradingAlgos(task); + break; +} + +case ONRTNFROMBANKTOFUTUREBYBANK: +{ + this->processRtnFromBankToFutureByBank(task); + break; +} + +case ONRTNFROMFUTURETOBANKBYBANK: +{ + this->processRtnFromFutureToBankByBank(task); + break; +} + +case ONRTNREPEALFROMBANKTOFUTUREBYBANK: +{ + this->processRtnRepealFromBankToFutureByBank(task); + break; +} + +case ONRTNREPEALFROMFUTURETOBANKBYBANK: +{ + this->processRtnRepealFromFutureToBankByBank(task); + break; +} + +case ONRTNFROMBANKTOFUTUREBYFUTURE: +{ + this->processRtnFromBankToFutureByFuture(task); + break; +} + +case ONRTNFROMFUTURETOBANKBYFUTURE: +{ + this->processRtnFromFutureToBankByFuture(task); + break; +} + +case ONRTNREPEALFROMBANKTOFUTUREBYFUTUREMANUAL: +{ + this->processRtnRepealFromBankToFutureByFutureManual(task); + break; +} + +case ONRTNREPEALFROMFUTURETOBANKBYFUTUREMANUAL: +{ + this->processRtnRepealFromFutureToBankByFutureManual(task); + break; +} + +case ONRTNQUERYBANKBALANCEBYFUTURE: +{ + this->processRtnQueryBankBalanceByFuture(task); + break; +} + +case ONERRRTNBANKTOFUTUREBYFUTURE: +{ + this->processErrRtnBankToFutureByFuture(task); + break; +} + +case ONERRRTNFUTURETOBANKBYFUTURE: +{ + this->processErrRtnFutureToBankByFuture(task); + break; +} + +case ONERRRTNREPEALBANKTOFUTUREBYFUTUREMANUAL: +{ + this->processErrRtnRepealBankToFutureByFutureManual(task); + break; +} + +case ONERRRTNREPEALFUTURETOBANKBYFUTUREMANUAL: +{ + this->processErrRtnRepealFutureToBankByFutureManual(task); + break; +} + +case ONERRRTNQUERYBANKBALANCEBYFUTURE: +{ + this->processErrRtnQueryBankBalanceByFuture(task); + break; +} + +case ONRTNREPEALFROMBANKTOFUTUREBYFUTURE: +{ + this->processRtnRepealFromBankToFutureByFuture(task); + break; +} + +case ONRTNREPEALFROMFUTURETOBANKBYFUTURE: +{ + this->processRtnRepealFromFutureToBankByFuture(task); + break; +} + +case ONRSPFROMBANKTOFUTUREBYFUTURE: +{ + this->processRspFromBankToFutureByFuture(task); + break; +} + +case ONRSPFROMFUTURETOBANKBYFUTURE: +{ + this->processRspFromFutureToBankByFuture(task); + break; +} + +case ONRSPQUERYBANKACCOUNTMONEYBYFUTURE: +{ + this->processRspQueryBankAccountMoneyByFuture(task); + break; +} + +case ONRTNOPENACCOUNTBYBANK: +{ + this->processRtnOpenAccountByBank(task); + break; +} + +case ONRTNCANCELACCOUNTBYBANK: +{ + this->processRtnCancelAccountByBank(task); + break; +} + +case ONRTNCHANGEACCOUNTBYBANK: +{ + this->processRtnChangeAccountByBank(task); + break; +} + diff --git a/vn.ctp/pyscript/ctp_td_task.cpp b/vn.ctp/pyscript/ctp_td_task.cpp new file mode 100644 index 00000000..d8d6e452 --- /dev/null +++ b/vn.ctp/pyscript/ctp_td_task.cpp @@ -0,0 +1,2616 @@ +void TdApi::OnFrontConnected() +{ + Task task = Task(); + task.task_name = ONFRONTCONNECTED; + this->task_queue.push(task); +}; + +void TdApi::OnFrontDisconnected(int nReason) +{ + Task task = Task(); + task.task_name = ONFRONTDISCONNECTED; + task.task_id = nReason; + this->task_queue.push(task); +}; + +void TdApi::OnHeartBeatWarning(int nTimeLapse) +{ + Task task = Task(); + task.task_name = ONHEARTBEATWARNING; + task.task_id = nTimeLapse; + this->task_queue.push(task); +}; + +void TdApi::OnRspAuthenticate(CThostFtdcRspAuthenticateField *pRspAuthenticateField, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPAUTHENTICATE; + + if (pRspAuthenticateField) + { + task.task_data = *pRspAuthenticateField; + } + else + { + CThostFtdcRspAuthenticateField empty_data = CThostFtdcRspAuthenticateField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPUSERLOGIN; + + if (pRspUserLogin) + { + task.task_data = *pRspUserLogin; + } + else + { + CThostFtdcRspUserLoginField empty_data = CThostFtdcRspUserLoginField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPUSERLOGOUT; + + if (pUserLogout) + { + task.task_data = *pUserLogout; + } + else + { + CThostFtdcUserLogoutField empty_data = CThostFtdcUserLogoutField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspUserPasswordUpdate(CThostFtdcUserPasswordUpdateField *pUserPasswordUpdate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPUSERPASSWORDUPDATE; + + if (pUserPasswordUpdate) + { + task.task_data = *pUserPasswordUpdate; + } + else + { + CThostFtdcUserPasswordUpdateField empty_data = CThostFtdcUserPasswordUpdateField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspTradingAccountPasswordUpdate(CThostFtdcTradingAccountPasswordUpdateField *pTradingAccountPasswordUpdate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPTRADINGACCOUNTPASSWORDUPDATE; + + if (pTradingAccountPasswordUpdate) + { + task.task_data = *pTradingAccountPasswordUpdate; + } + else + { + CThostFtdcTradingAccountPasswordUpdateField empty_data = CThostFtdcTradingAccountPasswordUpdateField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPORDERINSERT; + + if (pInputOrder) + { + task.task_data = *pInputOrder; + } + else + { + CThostFtdcInputOrderField empty_data = CThostFtdcInputOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspParkedOrderInsert(CThostFtdcParkedOrderField *pParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPPARKEDORDERINSERT; + + if (pParkedOrder) + { + task.task_data = *pParkedOrder; + } + else + { + CThostFtdcParkedOrderField empty_data = CThostFtdcParkedOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspParkedOrderAction(CThostFtdcParkedOrderActionField *pParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPPARKEDORDERACTION; + + if (pParkedOrderAction) + { + task.task_data = *pParkedOrderAction; + } + else + { + CThostFtdcParkedOrderActionField empty_data = CThostFtdcParkedOrderActionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspOrderAction(CThostFtdcInputOrderActionField *pInputOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPORDERACTION; + + if (pInputOrderAction) + { + task.task_data = *pInputOrderAction; + } + else + { + CThostFtdcInputOrderActionField empty_data = CThostFtdcInputOrderActionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQueryMaxOrderVolume(CThostFtdcQueryMaxOrderVolumeField *pQueryMaxOrderVolume, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQUERYMAXORDERVOLUME; + + if (pQueryMaxOrderVolume) + { + task.task_data = *pQueryMaxOrderVolume; + } + else + { + CThostFtdcQueryMaxOrderVolumeField empty_data = CThostFtdcQueryMaxOrderVolumeField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPSETTLEMENTINFOCONFIRM; + + if (pSettlementInfoConfirm) + { + task.task_data = *pSettlementInfoConfirm; + } + else + { + CThostFtdcSettlementInfoConfirmField empty_data = CThostFtdcSettlementInfoConfirmField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspRemoveParkedOrder(CThostFtdcRemoveParkedOrderField *pRemoveParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPREMOVEPARKEDORDER; + + if (pRemoveParkedOrder) + { + task.task_data = *pRemoveParkedOrder; + } + else + { + CThostFtdcRemoveParkedOrderField empty_data = CThostFtdcRemoveParkedOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspRemoveParkedOrderAction(CThostFtdcRemoveParkedOrderActionField *pRemoveParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPREMOVEPARKEDORDERACTION; + + if (pRemoveParkedOrderAction) + { + task.task_data = *pRemoveParkedOrderAction; + } + else + { + CThostFtdcRemoveParkedOrderActionField empty_data = CThostFtdcRemoveParkedOrderActionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspExecOrderInsert(CThostFtdcInputExecOrderField *pInputExecOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPEXECORDERINSERT; + + if (pInputExecOrder) + { + task.task_data = *pInputExecOrder; + } + else + { + CThostFtdcInputExecOrderField empty_data = CThostFtdcInputExecOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspExecOrderAction(CThostFtdcInputExecOrderActionField *pInputExecOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPEXECORDERACTION; + + if (pInputExecOrderAction) + { + task.task_data = *pInputExecOrderAction; + } + else + { + CThostFtdcInputExecOrderActionField empty_data = CThostFtdcInputExecOrderActionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspForQuoteInsert(CThostFtdcInputForQuoteField *pInputForQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPFORQUOTEINSERT; + + if (pInputForQuote) + { + task.task_data = *pInputForQuote; + } + else + { + CThostFtdcInputForQuoteField empty_data = CThostFtdcInputForQuoteField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQuoteInsert(CThostFtdcInputQuoteField *pInputQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQUOTEINSERT; + + if (pInputQuote) + { + task.task_data = *pInputQuote; + } + else + { + CThostFtdcInputQuoteField empty_data = CThostFtdcInputQuoteField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQuoteAction(CThostFtdcInputQuoteActionField *pInputQuoteAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQUOTEACTION; + + if (pInputQuoteAction) + { + task.task_data = *pInputQuoteAction; + } + else + { + CThostFtdcInputQuoteActionField empty_data = CThostFtdcInputQuoteActionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryOrder(CThostFtdcOrderField *pOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYORDER; + + if (pOrder) + { + task.task_data = *pOrder; + } + else + { + CThostFtdcOrderField empty_data = CThostFtdcOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryTrade(CThostFtdcTradeField *pTrade, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYTRADE; + + if (pTrade) + { + task.task_data = *pTrade; + } + else + { + CThostFtdcTradeField empty_data = CThostFtdcTradeField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryInvestorPosition(CThostFtdcInvestorPositionField *pInvestorPosition, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYINVESTORPOSITION; + + if (pInvestorPosition) + { + task.task_data = *pInvestorPosition; + } + else + { + CThostFtdcInvestorPositionField empty_data = CThostFtdcInvestorPositionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryTradingAccount(CThostFtdcTradingAccountField *pTradingAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYTRADINGACCOUNT; + + if (pTradingAccount) + { + task.task_data = *pTradingAccount; + } + else + { + CThostFtdcTradingAccountField empty_data = CThostFtdcTradingAccountField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryInvestor(CThostFtdcInvestorField *pInvestor, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYINVESTOR; + + if (pInvestor) + { + task.task_data = *pInvestor; + } + else + { + CThostFtdcInvestorField empty_data = CThostFtdcInvestorField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryTradingCode(CThostFtdcTradingCodeField *pTradingCode, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYTRADINGCODE; + + if (pTradingCode) + { + task.task_data = *pTradingCode; + } + else + { + CThostFtdcTradingCodeField empty_data = CThostFtdcTradingCodeField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryInstrumentMarginRate(CThostFtdcInstrumentMarginRateField *pInstrumentMarginRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYINSTRUMENTMARGINRATE; + + if (pInstrumentMarginRate) + { + task.task_data = *pInstrumentMarginRate; + } + else + { + CThostFtdcInstrumentMarginRateField empty_data = CThostFtdcInstrumentMarginRateField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryInstrumentCommissionRate(CThostFtdcInstrumentCommissionRateField *pInstrumentCommissionRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYINSTRUMENTCOMMISSIONRATE; + + if (pInstrumentCommissionRate) + { + task.task_data = *pInstrumentCommissionRate; + } + else + { + CThostFtdcInstrumentCommissionRateField empty_data = CThostFtdcInstrumentCommissionRateField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryExchange(CThostFtdcExchangeField *pExchange, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYEXCHANGE; + + if (pExchange) + { + task.task_data = *pExchange; + } + else + { + CThostFtdcExchangeField empty_data = CThostFtdcExchangeField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryProduct(CThostFtdcProductField *pProduct, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYPRODUCT; + + if (pProduct) + { + task.task_data = *pProduct; + } + else + { + CThostFtdcProductField empty_data = CThostFtdcProductField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryInstrument(CThostFtdcInstrumentField *pInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYINSTRUMENT; + + if (pInstrument) + { + task.task_data = *pInstrument; + } + else + { + CThostFtdcInstrumentField empty_data = CThostFtdcInstrumentField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYDEPTHMARKETDATA; + + if (pDepthMarketData) + { + task.task_data = *pDepthMarketData; + } + else + { + CThostFtdcDepthMarketDataField empty_data = CThostFtdcDepthMarketDataField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQrySettlementInfo(CThostFtdcSettlementInfoField *pSettlementInfo, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYSETTLEMENTINFO; + + if (pSettlementInfo) + { + task.task_data = *pSettlementInfo; + } + else + { + CThostFtdcSettlementInfoField empty_data = CThostFtdcSettlementInfoField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryTransferBank(CThostFtdcTransferBankField *pTransferBank, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYTRANSFERBANK; + + if (pTransferBank) + { + task.task_data = *pTransferBank; + } + else + { + CThostFtdcTransferBankField empty_data = CThostFtdcTransferBankField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryInvestorPositionDetail(CThostFtdcInvestorPositionDetailField *pInvestorPositionDetail, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYINVESTORPOSITIONDETAIL; + + if (pInvestorPositionDetail) + { + task.task_data = *pInvestorPositionDetail; + } + else + { + CThostFtdcInvestorPositionDetailField empty_data = CThostFtdcInvestorPositionDetailField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryNotice(CThostFtdcNoticeField *pNotice, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYNOTICE; + + if (pNotice) + { + task.task_data = *pNotice; + } + else + { + CThostFtdcNoticeField empty_data = CThostFtdcNoticeField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQrySettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYSETTLEMENTINFOCONFIRM; + + if (pSettlementInfoConfirm) + { + task.task_data = *pSettlementInfoConfirm; + } + else + { + CThostFtdcSettlementInfoConfirmField empty_data = CThostFtdcSettlementInfoConfirmField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryInvestorPositionCombineDetail(CThostFtdcInvestorPositionCombineDetailField *pInvestorPositionCombineDetail, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYINVESTORPOSITIONCOMBINEDETAIL; + + if (pInvestorPositionCombineDetail) + { + task.task_data = *pInvestorPositionCombineDetail; + } + else + { + CThostFtdcInvestorPositionCombineDetailField empty_data = CThostFtdcInvestorPositionCombineDetailField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryCFMMCTradingAccountKey(CThostFtdcCFMMCTradingAccountKeyField *pCFMMCTradingAccountKey, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYCFMMCTRADINGACCOUNTKEY; + + if (pCFMMCTradingAccountKey) + { + task.task_data = *pCFMMCTradingAccountKey; + } + else + { + CThostFtdcCFMMCTradingAccountKeyField empty_data = CThostFtdcCFMMCTradingAccountKeyField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryEWarrantOffset(CThostFtdcEWarrantOffsetField *pEWarrantOffset, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYEWARRANTOFFSET; + + if (pEWarrantOffset) + { + task.task_data = *pEWarrantOffset; + } + else + { + CThostFtdcEWarrantOffsetField empty_data = CThostFtdcEWarrantOffsetField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryInvestorProductGroupMargin(CThostFtdcInvestorProductGroupMarginField *pInvestorProductGroupMargin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYINVESTORPRODUCTGROUPMARGIN; + + if (pInvestorProductGroupMargin) + { + task.task_data = *pInvestorProductGroupMargin; + } + else + { + CThostFtdcInvestorProductGroupMarginField empty_data = CThostFtdcInvestorProductGroupMarginField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryExchangeMarginRate(CThostFtdcExchangeMarginRateField *pExchangeMarginRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYEXCHANGEMARGINRATE; + + if (pExchangeMarginRate) + { + task.task_data = *pExchangeMarginRate; + } + else + { + CThostFtdcExchangeMarginRateField empty_data = CThostFtdcExchangeMarginRateField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryExchangeMarginRateAdjust(CThostFtdcExchangeMarginRateAdjustField *pExchangeMarginRateAdjust, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYEXCHANGEMARGINRATEADJUST; + + if (pExchangeMarginRateAdjust) + { + task.task_data = *pExchangeMarginRateAdjust; + } + else + { + CThostFtdcExchangeMarginRateAdjustField empty_data = CThostFtdcExchangeMarginRateAdjustField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryExchangeRate(CThostFtdcExchangeRateField *pExchangeRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYEXCHANGERATE; + + if (pExchangeRate) + { + task.task_data = *pExchangeRate; + } + else + { + CThostFtdcExchangeRateField empty_data = CThostFtdcExchangeRateField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQrySecAgentACIDMap(CThostFtdcSecAgentACIDMapField *pSecAgentACIDMap, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYSECAGENTACIDMAP; + + if (pSecAgentACIDMap) + { + task.task_data = *pSecAgentACIDMap; + } + else + { + CThostFtdcSecAgentACIDMapField empty_data = CThostFtdcSecAgentACIDMapField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryOptionInstrTradeCost(CThostFtdcOptionInstrTradeCostField *pOptionInstrTradeCost, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYOPTIONINSTRTRADECOST; + + if (pOptionInstrTradeCost) + { + task.task_data = *pOptionInstrTradeCost; + } + else + { + CThostFtdcOptionInstrTradeCostField empty_data = CThostFtdcOptionInstrTradeCostField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryOptionInstrCommRate(CThostFtdcOptionInstrCommRateField *pOptionInstrCommRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYOPTIONINSTRCOMMRATE; + + if (pOptionInstrCommRate) + { + task.task_data = *pOptionInstrCommRate; + } + else + { + CThostFtdcOptionInstrCommRateField empty_data = CThostFtdcOptionInstrCommRateField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryExecOrder(CThostFtdcExecOrderField *pExecOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYEXECORDER; + + if (pExecOrder) + { + task.task_data = *pExecOrder; + } + else + { + CThostFtdcExecOrderField empty_data = CThostFtdcExecOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryForQuote(CThostFtdcForQuoteField *pForQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYFORQUOTE; + + if (pForQuote) + { + task.task_data = *pForQuote; + } + else + { + CThostFtdcForQuoteField empty_data = CThostFtdcForQuoteField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryQuote(CThostFtdcQuoteField *pQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYQUOTE; + + if (pQuote) + { + task.task_data = *pQuote; + } + else + { + CThostFtdcQuoteField empty_data = CThostFtdcQuoteField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryTransferSerial(CThostFtdcTransferSerialField *pTransferSerial, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYTRANSFERSERIAL; + + if (pTransferSerial) + { + task.task_data = *pTransferSerial; + } + else + { + CThostFtdcTransferSerialField empty_data = CThostFtdcTransferSerialField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryAccountregister(CThostFtdcAccountregisterField *pAccountregister, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYACCOUNTREGISTER; + + if (pAccountregister) + { + task.task_data = *pAccountregister; + } + else + { + CThostFtdcAccountregisterField empty_data = CThostFtdcAccountregisterField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPERROR; + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRtnOrder(CThostFtdcOrderField *pOrder) +{ + Task task = Task(); + task.task_name = ONRTNORDER; + + if (pOrder) + { + task.task_data = *pOrder; + } + else + { + CThostFtdcOrderField empty_data = CThostFtdcOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnTrade(CThostFtdcTradeField *pTrade) +{ + Task task = Task(); + task.task_name = ONRTNTRADE; + + if (pTrade) + { + task.task_data = *pTrade; + } + else + { + CThostFtdcTradeField empty_data = CThostFtdcTradeField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNORDERINSERT; + + if (pInputOrder) + { + task.task_data = *pInputOrder; + } + else + { + CThostFtdcInputOrderField empty_data = CThostFtdcInputOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnOrderAction(CThostFtdcOrderActionField *pOrderAction, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNORDERACTION; + + if (pOrderAction) + { + task.task_data = *pOrderAction; + } + else + { + CThostFtdcOrderActionField empty_data = CThostFtdcOrderActionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnInstrumentStatus(CThostFtdcInstrumentStatusField *pInstrumentStatus) +{ + Task task = Task(); + task.task_name = ONRTNINSTRUMENTSTATUS; + + if (pInstrumentStatus) + { + task.task_data = *pInstrumentStatus; + } + else + { + CThostFtdcInstrumentStatusField empty_data = CThostFtdcInstrumentStatusField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnTradingNotice(CThostFtdcTradingNoticeInfoField *pTradingNoticeInfo) +{ + Task task = Task(); + task.task_name = ONRTNTRADINGNOTICE; + + if (pTradingNoticeInfo) + { + task.task_data = *pTradingNoticeInfo; + } + else + { + CThostFtdcTradingNoticeInfoField empty_data = CThostFtdcTradingNoticeInfoField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnErrorConditionalOrder(CThostFtdcErrorConditionalOrderField *pErrorConditionalOrder) +{ + Task task = Task(); + task.task_name = ONRTNERRORCONDITIONALORDER; + + if (pErrorConditionalOrder) + { + task.task_data = *pErrorConditionalOrder; + } + else + { + CThostFtdcErrorConditionalOrderField empty_data = CThostFtdcErrorConditionalOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnExecOrder(CThostFtdcExecOrderField *pExecOrder) +{ + Task task = Task(); + task.task_name = ONRTNEXECORDER; + + if (pExecOrder) + { + task.task_data = *pExecOrder; + } + else + { + CThostFtdcExecOrderField empty_data = CThostFtdcExecOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnExecOrderInsert(CThostFtdcInputExecOrderField *pInputExecOrder, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNEXECORDERINSERT; + + if (pInputExecOrder) + { + task.task_data = *pInputExecOrder; + } + else + { + CThostFtdcInputExecOrderField empty_data = CThostFtdcInputExecOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnExecOrderAction(CThostFtdcExecOrderActionField *pExecOrderAction, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNEXECORDERACTION; + + if (pExecOrderAction) + { + task.task_data = *pExecOrderAction; + } + else + { + CThostFtdcExecOrderActionField empty_data = CThostFtdcExecOrderActionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnForQuoteInsert(CThostFtdcInputForQuoteField *pInputForQuote, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNFORQUOTEINSERT; + + if (pInputForQuote) + { + task.task_data = *pInputForQuote; + } + else + { + CThostFtdcInputForQuoteField empty_data = CThostFtdcInputForQuoteField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnQuote(CThostFtdcQuoteField *pQuote) +{ + Task task = Task(); + task.task_name = ONRTNQUOTE; + + if (pQuote) + { + task.task_data = *pQuote; + } + else + { + CThostFtdcQuoteField empty_data = CThostFtdcQuoteField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnQuoteInsert(CThostFtdcInputQuoteField *pInputQuote, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNQUOTEINSERT; + + if (pInputQuote) + { + task.task_data = *pInputQuote; + } + else + { + CThostFtdcInputQuoteField empty_data = CThostFtdcInputQuoteField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnQuoteAction(CThostFtdcQuoteActionField *pQuoteAction, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNQUOTEACTION; + + if (pQuoteAction) + { + task.task_data = *pQuoteAction; + } + else + { + CThostFtdcQuoteActionField empty_data = CThostFtdcQuoteActionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp) +{ + Task task = Task(); + task.task_name = ONRTNFORQUOTERSP; + + if (pForQuoteRsp) + { + task.task_data = *pForQuoteRsp; + } + else + { + CThostFtdcForQuoteRspField empty_data = CThostFtdcForQuoteRspField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRspQryContractBank(CThostFtdcContractBankField *pContractBank, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYCONTRACTBANK; + + if (pContractBank) + { + task.task_data = *pContractBank; + } + else + { + CThostFtdcContractBankField empty_data = CThostFtdcContractBankField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryParkedOrder(CThostFtdcParkedOrderField *pParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYPARKEDORDER; + + if (pParkedOrder) + { + task.task_data = *pParkedOrder; + } + else + { + CThostFtdcParkedOrderField empty_data = CThostFtdcParkedOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryParkedOrderAction(CThostFtdcParkedOrderActionField *pParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYPARKEDORDERACTION; + + if (pParkedOrderAction) + { + task.task_data = *pParkedOrderAction; + } + else + { + CThostFtdcParkedOrderActionField empty_data = CThostFtdcParkedOrderActionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryTradingNotice(CThostFtdcTradingNoticeField *pTradingNotice, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYTRADINGNOTICE; + + if (pTradingNotice) + { + task.task_data = *pTradingNotice; + } + else + { + CThostFtdcTradingNoticeField empty_data = CThostFtdcTradingNoticeField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryBrokerTradingParams(CThostFtdcBrokerTradingParamsField *pBrokerTradingParams, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYBROKERTRADINGPARAMS; + + if (pBrokerTradingParams) + { + task.task_data = *pBrokerTradingParams; + } + else + { + CThostFtdcBrokerTradingParamsField empty_data = CThostFtdcBrokerTradingParamsField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryBrokerTradingAlgos(CThostFtdcBrokerTradingAlgosField *pBrokerTradingAlgos, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYBROKERTRADINGALGOS; + + if (pBrokerTradingAlgos) + { + task.task_data = *pBrokerTradingAlgos; + } + else + { + CThostFtdcBrokerTradingAlgosField empty_data = CThostFtdcBrokerTradingAlgosField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRtnFromBankToFutureByBank(CThostFtdcRspTransferField *pRspTransfer) +{ + Task task = Task(); + task.task_name = ONRTNFROMBANKTOFUTUREBYBANK; + + if (pRspTransfer) + { + task.task_data = *pRspTransfer; + } + else + { + CThostFtdcRspTransferField empty_data = CThostFtdcRspTransferField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnFromFutureToBankByBank(CThostFtdcRspTransferField *pRspTransfer) +{ + Task task = Task(); + task.task_name = ONRTNFROMFUTURETOBANKBYBANK; + + if (pRspTransfer) + { + task.task_data = *pRspTransfer; + } + else + { + CThostFtdcRspTransferField empty_data = CThostFtdcRspTransferField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnRepealFromBankToFutureByBank(CThostFtdcRspRepealField *pRspRepeal) +{ + Task task = Task(); + task.task_name = ONRTNREPEALFROMBANKTOFUTUREBYBANK; + + if (pRspRepeal) + { + task.task_data = *pRspRepeal; + } + else + { + CThostFtdcRspRepealField empty_data = CThostFtdcRspRepealField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnRepealFromFutureToBankByBank(CThostFtdcRspRepealField *pRspRepeal) +{ + Task task = Task(); + task.task_name = ONRTNREPEALFROMFUTURETOBANKBYBANK; + + if (pRspRepeal) + { + task.task_data = *pRspRepeal; + } + else + { + CThostFtdcRspRepealField empty_data = CThostFtdcRspRepealField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnFromBankToFutureByFuture(CThostFtdcRspTransferField *pRspTransfer) +{ + Task task = Task(); + task.task_name = ONRTNFROMBANKTOFUTUREBYFUTURE; + + if (pRspTransfer) + { + task.task_data = *pRspTransfer; + } + else + { + CThostFtdcRspTransferField empty_data = CThostFtdcRspTransferField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnFromFutureToBankByFuture(CThostFtdcRspTransferField *pRspTransfer) +{ + Task task = Task(); + task.task_name = ONRTNFROMFUTURETOBANKBYFUTURE; + + if (pRspTransfer) + { + task.task_data = *pRspTransfer; + } + else + { + CThostFtdcRspTransferField empty_data = CThostFtdcRspTransferField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnRepealFromBankToFutureByFutureManual(CThostFtdcRspRepealField *pRspRepeal) +{ + Task task = Task(); + task.task_name = ONRTNREPEALFROMBANKTOFUTUREBYFUTUREMANUAL; + + if (pRspRepeal) + { + task.task_data = *pRspRepeal; + } + else + { + CThostFtdcRspRepealField empty_data = CThostFtdcRspRepealField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnRepealFromFutureToBankByFutureManual(CThostFtdcRspRepealField *pRspRepeal) +{ + Task task = Task(); + task.task_name = ONRTNREPEALFROMFUTURETOBANKBYFUTUREMANUAL; + + if (pRspRepeal) + { + task.task_data = *pRspRepeal; + } + else + { + CThostFtdcRspRepealField empty_data = CThostFtdcRspRepealField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnQueryBankBalanceByFuture(CThostFtdcNotifyQueryAccountField *pNotifyQueryAccount) +{ + Task task = Task(); + task.task_name = ONRTNQUERYBANKBALANCEBYFUTURE; + + if (pNotifyQueryAccount) + { + task.task_data = *pNotifyQueryAccount; + } + else + { + CThostFtdcNotifyQueryAccountField empty_data = CThostFtdcNotifyQueryAccountField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnBankToFutureByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNBANKTOFUTUREBYFUTURE; + + if (pReqTransfer) + { + task.task_data = *pReqTransfer; + } + else + { + CThostFtdcReqTransferField empty_data = CThostFtdcReqTransferField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnFutureToBankByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNFUTURETOBANKBYFUTURE; + + if (pReqTransfer) + { + task.task_data = *pReqTransfer; + } + else + { + CThostFtdcReqTransferField empty_data = CThostFtdcReqTransferField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnRepealBankToFutureByFutureManual(CThostFtdcReqRepealField *pReqRepeal, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNREPEALBANKTOFUTUREBYFUTUREMANUAL; + + if (pReqRepeal) + { + task.task_data = *pReqRepeal; + } + else + { + CThostFtdcReqRepealField empty_data = CThostFtdcReqRepealField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnRepealFutureToBankByFutureManual(CThostFtdcReqRepealField *pReqRepeal, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNREPEALFUTURETOBANKBYFUTUREMANUAL; + + if (pReqRepeal) + { + task.task_data = *pReqRepeal; + } + else + { + CThostFtdcReqRepealField empty_data = CThostFtdcReqRepealField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnQueryBankBalanceByFuture(CThostFtdcReqQueryAccountField *pReqQueryAccount, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNQUERYBANKBALANCEBYFUTURE; + + if (pReqQueryAccount) + { + task.task_data = *pReqQueryAccount; + } + else + { + CThostFtdcReqQueryAccountField empty_data = CThostFtdcReqQueryAccountField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnRepealFromBankToFutureByFuture(CThostFtdcRspRepealField *pRspRepeal) +{ + Task task = Task(); + task.task_name = ONRTNREPEALFROMBANKTOFUTUREBYFUTURE; + + if (pRspRepeal) + { + task.task_data = *pRspRepeal; + } + else + { + CThostFtdcRspRepealField empty_data = CThostFtdcRspRepealField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnRepealFromFutureToBankByFuture(CThostFtdcRspRepealField *pRspRepeal) +{ + Task task = Task(); + task.task_name = ONRTNREPEALFROMFUTURETOBANKBYFUTURE; + + if (pRspRepeal) + { + task.task_data = *pRspRepeal; + } + else + { + CThostFtdcRspRepealField empty_data = CThostFtdcRspRepealField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRspFromBankToFutureByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPFROMBANKTOFUTUREBYFUTURE; + + if (pReqTransfer) + { + task.task_data = *pReqTransfer; + } + else + { + CThostFtdcReqTransferField empty_data = CThostFtdcReqTransferField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspFromFutureToBankByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPFROMFUTURETOBANKBYFUTURE; + + if (pReqTransfer) + { + task.task_data = *pReqTransfer; + } + else + { + CThostFtdcReqTransferField empty_data = CThostFtdcReqTransferField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQueryBankAccountMoneyByFuture(CThostFtdcReqQueryAccountField *pReqQueryAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQUERYBANKACCOUNTMONEYBYFUTURE; + + if (pReqQueryAccount) + { + task.task_data = *pReqQueryAccount; + } + else + { + CThostFtdcReqQueryAccountField empty_data = CThostFtdcReqQueryAccountField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRtnOpenAccountByBank(CThostFtdcOpenAccountField *pOpenAccount) +{ + Task task = Task(); + task.task_name = ONRTNOPENACCOUNTBYBANK; + + if (pOpenAccount) + { + task.task_data = *pOpenAccount; + } + else + { + CThostFtdcOpenAccountField empty_data = CThostFtdcOpenAccountField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnCancelAccountByBank(CThostFtdcCancelAccountField *pCancelAccount) +{ + Task task = Task(); + task.task_name = ONRTNCANCELACCOUNTBYBANK; + + if (pCancelAccount) + { + task.task_data = *pCancelAccount; + } + else + { + CThostFtdcCancelAccountField empty_data = CThostFtdcCancelAccountField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnChangeAccountByBank(CThostFtdcChangeAccountField *pChangeAccount) +{ + Task task = Task(); + task.task_name = ONRTNCHANGEACCOUNTBYBANK; + + if (pChangeAccount) + { + task.task_data = *pChangeAccount; + } + else + { + CThostFtdcChangeAccountField empty_data = CThostFtdcChangeAccountField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + diff --git a/vn.ctp/pyscript/ctp_td_wrap.cpp b/vn.ctp/pyscript/ctp_td_wrap.cpp new file mode 100644 index 00000000..503b523d --- /dev/null +++ b/vn.ctp/pyscript/ctp_td_wrap.cpp @@ -0,0 +1,1316 @@ +virtual void onRspAuthenticate(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspAuthenticate")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspUserLogin(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspUserLogin")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspUserLogout(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspUserLogout")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspUserPasswordUpdate(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspUserPasswordUpdate")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspTradingAccountPasswordUpdate(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspTradingAccountPasswordUpdate")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspOrderInsert(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspOrderInsert")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspParkedOrderInsert(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspParkedOrderInsert")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspParkedOrderAction(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspParkedOrderAction")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspOrderAction(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspOrderAction")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQueryMaxOrderVolume(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQueryMaxOrderVolume")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspSettlementInfoConfirm(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspSettlementInfoConfirm")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspRemoveParkedOrder(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspRemoveParkedOrder")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspRemoveParkedOrderAction(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspRemoveParkedOrderAction")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspExecOrderInsert(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspExecOrderInsert")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspExecOrderAction(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspExecOrderAction")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspForQuoteInsert(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspForQuoteInsert")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQuoteInsert(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQuoteInsert")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQuoteAction(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQuoteAction")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryOrder(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryOrder")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryTrade(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryTrade")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryInvestorPosition(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryInvestorPosition")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryTradingAccount(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryTradingAccount")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryInvestor(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryInvestor")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryTradingCode(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryTradingCode")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryInstrumentMarginRate(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryInstrumentMarginRate")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryInstrumentCommissionRate(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryInstrumentCommissionRate")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryExchange(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryExchange")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryProduct(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryProduct")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryInstrument(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryInstrument")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryDepthMarketData(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryDepthMarketData")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQrySettlementInfo(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQrySettlementInfo")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryTransferBank(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryTransferBank")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryInvestorPositionDetail(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryInvestorPositionDetail")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryNotice(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryNotice")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQrySettlementInfoConfirm(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQrySettlementInfoConfirm")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryInvestorPositionCombineDetail(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryInvestorPositionCombineDetail")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryCFMMCTradingAccountKey(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryCFMMCTradingAccountKey")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryEWarrantOffset(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryEWarrantOffset")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryInvestorProductGroupMargin(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryInvestorProductGroupMargin")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryExchangeMarginRate(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryExchangeMarginRate")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryExchangeMarginRateAdjust(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryExchangeMarginRateAdjust")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryExchangeRate(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryExchangeRate")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQrySecAgentACIDMap(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQrySecAgentACIDMap")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryOptionInstrTradeCost(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryOptionInstrTradeCost")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryOptionInstrCommRate(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryOptionInstrCommRate")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryExecOrder(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryExecOrder")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryForQuote(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryForQuote")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryQuote(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryQuote")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryTransferSerial(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryTransferSerial")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryAccountregister(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryAccountregister")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspError(dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspError")(error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnOrder(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnOrder")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnTrade(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnTrade")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onErrRtnOrderInsert(dict data, dict error) +{ + PyLock lock; + + try + { + this->get_override("onErrRtnOrderInsert")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onErrRtnOrderAction(dict data, dict error) +{ + PyLock lock; + + try + { + this->get_override("onErrRtnOrderAction")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnInstrumentStatus(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnInstrumentStatus")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnTradingNotice(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnTradingNotice")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnErrorConditionalOrder(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnErrorConditionalOrder")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnExecOrder(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnExecOrder")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onErrRtnExecOrderInsert(dict data, dict error) +{ + PyLock lock; + + try + { + this->get_override("onErrRtnExecOrderInsert")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onErrRtnExecOrderAction(dict data, dict error) +{ + PyLock lock; + + try + { + this->get_override("onErrRtnExecOrderAction")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onErrRtnForQuoteInsert(dict data, dict error) +{ + PyLock lock; + + try + { + this->get_override("onErrRtnForQuoteInsert")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnQuote(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnQuote")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onErrRtnQuoteInsert(dict data, dict error) +{ + PyLock lock; + + try + { + this->get_override("onErrRtnQuoteInsert")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onErrRtnQuoteAction(dict data, dict error) +{ + PyLock lock; + + try + { + this->get_override("onErrRtnQuoteAction")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnForQuoteRsp(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnForQuoteRsp")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryContractBank(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryContractBank")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryParkedOrder(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryParkedOrder")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryParkedOrderAction(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryParkedOrderAction")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryTradingNotice(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryTradingNotice")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryBrokerTradingParams(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryBrokerTradingParams")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQryBrokerTradingAlgos(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQryBrokerTradingAlgos")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnFromBankToFutureByBank(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnFromBankToFutureByBank")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnFromFutureToBankByBank(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnFromFutureToBankByBank")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnRepealFromBankToFutureByBank(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnRepealFromBankToFutureByBank")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnRepealFromFutureToBankByBank(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnRepealFromFutureToBankByBank")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnFromBankToFutureByFuture(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnFromBankToFutureByFuture")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnFromFutureToBankByFuture(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnFromFutureToBankByFuture")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnRepealFromBankToFutureByFutureManual(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnRepealFromBankToFutureByFutureManual")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnRepealFromFutureToBankByFutureManual(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnRepealFromFutureToBankByFutureManual")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnQueryBankBalanceByFuture(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnQueryBankBalanceByFuture")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onErrRtnBankToFutureByFuture(dict data, dict error) +{ + PyLock lock; + + try + { + this->get_override("onErrRtnBankToFutureByFuture")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onErrRtnFutureToBankByFuture(dict data, dict error) +{ + PyLock lock; + + try + { + this->get_override("onErrRtnFutureToBankByFuture")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onErrRtnRepealBankToFutureByFutureManual(dict data, dict error) +{ + PyLock lock; + + try + { + this->get_override("onErrRtnRepealBankToFutureByFutureManual")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onErrRtnRepealFutureToBankByFutureManual(dict data, dict error) +{ + PyLock lock; + + try + { + this->get_override("onErrRtnRepealFutureToBankByFutureManual")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onErrRtnQueryBankBalanceByFuture(dict data, dict error) +{ + PyLock lock; + + try + { + this->get_override("onErrRtnQueryBankBalanceByFuture")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnRepealFromBankToFutureByFuture(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnRepealFromBankToFutureByFuture")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnRepealFromFutureToBankByFuture(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnRepealFromFutureToBankByFuture")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspFromBankToFutureByFuture(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspFromBankToFutureByFuture")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspFromFutureToBankByFuture(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspFromFutureToBankByFuture")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRspQueryBankAccountMoneyByFuture(dict data, dict error, int id, bool last) +{ + PyLock lock; + + try + { + this->get_override("onRspQueryBankAccountMoneyByFuture")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnOpenAccountByBank(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnOpenAccountByBank")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnCancelAccountByBank(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnCancelAccountByBank")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + +virtual void onRtnChangeAccountByBank(dict data) +{ + PyLock lock; + + try + { + this->get_override("onRtnChangeAccountByBank")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } +}; + diff --git a/vn.ctp/pyscript/generate_data_type.py b/vn.ctp/pyscript/generate_data_type.py new file mode 100644 index 00000000..91ec2a73 --- /dev/null +++ b/vn.ctp/pyscript/generate_data_type.py @@ -0,0 +1,98 @@ +# encoding: UTF-8 + +__author__ = 'CHENXY' + +# C++鍜宲ython绫诲瀷鐨勬槧灏勫瓧鍏 +type_dict = { + 'int': 'int', + 'char': 'string', + 'double': 'float', + 'short': 'int' +} + + +def process_line(line): + """澶勭悊姣忚""" + if '///' in line: # 娉ㄩ噴 + py_line = process_comment(line) + elif 'typedef' in line: # 绫诲瀷鐢虫槑 + py_line = process_typedef(line) + elif '#define' in line: # 瀹氫箟甯搁噺 + py_line = process_define(line) + elif line == '\n': # 绌鸿 + py_line = line + else: + py_line = '' + + return py_line + + +def process_comment(line): + """澶勭悊娉ㄩ噴""" + # if line[3] == '/': + # py_line = '' + # else: + # py_line = '#' + line[3:] + py_line = '#' + line[3:] + return py_line + + +def process_typedef(line): + """澶勭悊绫诲瀷鐢虫槑""" + content = line.split(' ') + type_ = type_dict[content[1]] + + keyword = content[2] + if '[' in keyword: + i = keyword.index('[') + keyword = keyword[:i] + else: + keyword = keyword.replace(';\n', '') # 鍒犻櫎琛屾湯鍒嗗彿 + + py_line = 'typedefDict["%s"] = "%s"\n' % (keyword, type_) + + return py_line + + +def process_define(line): + """澶勭悊瀹氫箟甯搁噺""" + content = line.split(' ') + constant = content[1] + + if len(content)>2: + value = content[-1] + py_line = 'defineDict["%s"] = %s' % (constant, value) + else: + py_line = '' + + return py_line + + +def main(): + """涓诲嚱鏁""" + try: + fcpp = open('ThostFtdcUserApiDataType.h','r') + fpy = open('ctp_data_type.py', 'w') + + fpy.write('# encoding: UTF-8\n') + fpy.write('\n') + fpy.write('defineDict = {}\n') + fpy.write('typedefDict = {}\n') + fpy.write('\n') + + for line in fcpp: + py_line = process_line(line) + if py_line: + fpy.write(py_line.decode('gbk').encode('utf-8')) + + fcpp.close() + fpy.close() + + print u'data_type.py鐢熸垚杩囩▼瀹屾垚' + except: + print u'data_type.py鐢熸垚杩囩▼鍑洪敊' + + +if __name__ == '__main__': + main() + diff --git a/vn.ctp/pyscript/generate_md_functions.py b/vn.ctp/pyscript/generate_md_functions.py new file mode 100644 index 00000000..6f76d382 --- /dev/null +++ b/vn.ctp/pyscript/generate_md_functions.py @@ -0,0 +1,207 @@ +# encoding: UTF-8 + +__author__ = 'CHENXY' + +from string import join +from ctp_struct import structDict + + + +def processCallBack(line): + orignalLine = line + line = line.replace('\tvirtual void ', '') # 鍒犻櫎琛岄鐨勬棤鏁堝唴瀹 + line = line.replace('{};\n', '') # 鍒犻櫎琛屽熬鐨勬棤鏁堝唴瀹 + + content = line.split('(') + cbName = content[0] # 鍥炶皟鍑芥暟鍚嶇О + + cbArgs = content[1] # 鍥炶皟鍑芥暟鍙傛暟 + if cbArgs[-1] == ' ': + cbArgs = cbArgs.replace(') ', '') + else: + cbArgs = cbArgs.replace(')', '') + + cbArgsList = cbArgs.split(', ') # 灏嗘瘡涓弬鏁拌浆鍖栦负鍒楄〃 + + cbArgsTypeList = [] + cbArgsValueList = [] + + for arg in cbArgsList: # 寮濮嬪鐞嗗弬鏁 + content = arg.split(' ') + if len(content) > 1: + cbArgsTypeList.append(content[0]) # 鍙傛暟绫诲瀷鍒楄〃 + cbArgsValueList.append(content[1]) # 鍙傛暟鏁版嵁鍒楄〃 + + createTask(cbName, cbArgsTypeList, cbArgsValueList, orignalLine) + createProcess(cbName, cbArgsTypeList, cbArgsValueList) + + +def createTask(cbName, cbArgsTypeList, cbArgsValueList, orignalLine): + # 浠庡洖璋冨嚱鏁扮敓鎴愪换鍔″璞★紝骞舵斁鍏ラ槦鍒 + funcline = orignalLine.replace('\tvirtual void ', 'void ' + apiName + '::') + funcline = funcline.replace('{};', '') + + ftask.write(funcline) + ftask.write('{\n') + ftask.write("\tTask task = Task();\n") + + ftask.write("\ttask.task_name = " + cbName.upper() + ";\n") + + # define甯搁噺 + global define_count + fdefine.write("#define " + cbName.upper() + ' ' + str(define_count) + '\n') + define_count = define_count + 1 + + # switch娈典唬鐮 + fswitch.write("case " + cbName.upper() + ':\n') + fswitch.write("{\n") + fswitch.write("\tthis->" + cbName.replace('On', 'process') + '(task);\n') + fswitch.write("\tbreak;\n") + fswitch.write("}\n") + fswitch.write("\n") + + for i, type_ in enumerate(cbArgsTypeList): + if type_ == 'int': + ftask.write("\ttask.task_id = " + cbArgsValueList[i] + ";\n") + elif type_ == 'bool': + ftask.write("\ttask.task_last = " + cbArgsValueList[i] + ";\n") + elif 'RspInfoField' in type_: + ftask.write("\tif (pRspInfo)\n") + ftask.write("\t{\n") + ftask.write("\t\ttask.task_error = " + cbArgsValueList[i] + ";\n") + ftask.write("\t}\n") + ftask.write("\telse\n") + ftask.write("\t{\n") + ftask.write("\t\tCSecurityFtdcRspInfoField empty_error = CSecurityFtdcRspInfoField();\n") + ftask.write("\t\tmemset(&empty_error, 0, sizeof(empty_error));\n") + ftask.write("\t\ttask.task_error = empty_error;\n") + ftask.write("\t}\n") + else: + ftask.write("\ttask.task_data = " + cbArgsValueList[i] + ";\n") + + ftask.write("\tthis->task_queue.push(task);\n") + ftask.write("};\n") + ftask.write("\n") + + +def createProcess(cbName, cbArgsTypeList, cbArgsValueList): + # 浠庨槦鍒椾腑鎻愬彇浠诲姟锛屽苟杞寲涓簆ython瀛楀吀 + fprocess.write("void " + apiName + '::' + cbName.replace('On', 'process') + '(Task task)' + "\n") + fprocess.write("{\n") + + onArgsList = [] + + for i, type_ in enumerate(cbArgsTypeList): + if 'RspInfoField' in type_: + fprocess.write("\t"+ type_ + ' task_error = any_cast<' + type_ + '>(task.task_error);\n') + fprocess.write("\t"+ "dict error;\n") + + struct = structDict[type_] + for key in struct.keys(): + fprocess.write("\t"+ 'error["' + key + '"] = task_error.' + key + ';\n') + + fprocess.write("\n") + + onArgsList.append('error') + + elif type_ in structDict: + fprocess.write("\t"+ type_ + ' task_data = any_cast<' + type_ + '>(task.task_data);\n') + fprocess.write("\t"+ "dict data;\n") + + struct = structDict[type_] + for key in struct.keys(): + fprocess.write("\t"+ 'data["' + key + '"] = task_data.' + key + ';\n') + + fprocess.write("\n") + + onArgsList.append('data') + + elif type_ == 'bool': + onArgsList.append('task.task_last') + + elif type_ == 'int': + onArgsList.append('task.task_id') + + onArgs = join(onArgsList, ', ') + fprocess.write('\tthis->' + cbName.replace('On', 'on') + '(' + onArgs +');\n') + + fprocess.write("};\n") + fprocess.write("\n") + + +def processFunction(line): + line = line.replace('\tvirtual int ', '') # 鍒犻櫎琛岄鐨勬棤鏁堝唴瀹 + line = line.replace(') = 0;\n', '') # 鍒犻櫎琛屽熬鐨勬棤鏁堝唴瀹 + + content = line.split('(') + fcName = content[0] # 鍥炶皟鍑芥暟鍚嶇О + + fcArgs = content[1] # 鍥炶皟鍑芥暟鍙傛暟 + fcArgs = fcArgs.replace(')', '') + + fcArgsList = fcArgs.split(', ') # 灏嗘瘡涓弬鏁拌浆鍖栦负鍒楄〃 + + fcArgsTypeList = [] + fcArgsValueList = [] + + for arg in fcArgsList: # 寮濮嬪鐞嗗弬鏁 + content = arg.split(' ') + if len(content) > 1: + fcArgsTypeList.append(content[0]) # 鍙傛暟绫诲瀷鍒楄〃 + fcArgsValueList.append(content[1]) # 鍙傛暟鏁版嵁鍒楄〃 + + if len(fcArgsTypeList)>0 and fcArgsTypeList[0] in structDict: + createFunction(fcName, fcArgsTypeList, fcArgsValueList) + + +def createFunction(fcName, fcArgsTypeList, fcArgsValueList): + type_ = fcArgsTypeList[0] + struct = structDict[type_] + + ffunction.write(fcName + '\n') + ffunction.write('{\n') + ffunction.write('\t' + type_ +' myreq = ' + type_ + '();\n') + ffunction.write('\tmemset(&myreq, 0, sizeof(myreq));\n') + + for key, value in struct.items(): + if value == 'string': + line = '\tgetChar(req, "' + key + '", myreq.' + key + ');\n' + elif value == 'int': + line = '\tgetInt(req, "' + key + '", &myreq.' + key + ');\n' + elif value == 'double': + line = '\tgetDouble(req, "' + key + '", &myreq.' + key + ');\n' + ffunction.write(line) + + ffunction.write('\tint i = this->api->' + fcName + '(&myreq, nRequestID);\n') + ffunction.write('\treturn i;\n') + + ffunction.write('};\n') + ffunction.write('\n') + + + + +######################################################### +apiName = 'MdApi' + +fcpp = open('ThostFtdcMdApi.h', 'r') +ftask = open('ctp_md_task.cpp', 'w') +fprocess = open('ctp_md_process.cpp', 'w') +ffunction = open('ctp_md_function.cpp', 'w') +fdefine = open('ctp_md_define.cpp', 'w') +fswitch = open('ctp_md_switch.cpp', 'w') + +define_count = 1 + +for line in fcpp: + if "\tvirtual void On" in line: + processCallBack(line) + elif "\tvirtual int" in line: + processFunction(line) + +fcpp.close() +ftask.close() +fprocess.close() +ffunction.close() +fswitch.close() +fdefine.close() \ No newline at end of file diff --git a/vn.ctp/pyscript/generate_struct.py b/vn.ctp/pyscript/generate_struct.py new file mode 100644 index 00000000..0cf8fba1 --- /dev/null +++ b/vn.ctp/pyscript/generate_struct.py @@ -0,0 +1,56 @@ +# encoding: UTF-8 + +__author__ = 'CHENXY' + +from ctp_data_type import * + +def main(): + """涓诲嚱鏁""" + fcpp = open('ThostFtdcUserApiStruct.h', 'r') + fpy = open('ctp_struct.py', 'w') + + fpy.write('# encoding: UTF-8\n') + fpy.write('\n') + fpy.write('structDict = {}\n') + fpy.write('\n') + + for line in fcpp: + # 缁撴瀯浣撶敵鏄庢敞閲 + if '///' in line and '\t' not in line: + py_line = '#' + line[3:] + + # 缁撴瀯浣撳彉閲忔敞閲 + elif '\t///' in line: + py_line = '#' + line[4:] + + # 缁撴瀯浣撶敵鏄 + elif 'struct' in line: + content = line.split(' ') + name = content[1].replace('\n','') + py_line = '%s = {}\n' % name + + # 缁撴瀯浣撳彉閲 + elif '\t' in line and '///' not in line: + content = line.split('\t') + typedef = content[1] + type_ = typedefDict[typedef] + variable = content[2].replace(';\n', "") + py_line = '%s["%s"] = "%s"\n' % (name, variable, type_) + + # 缁撴瀯浣撶粨鏉 + elif '}' in line: + py_line = "structDict['%s'] = %s\n\n" % (name, name) + + # 缁撴瀯浣撳紑濮 + elif '{' in line: + py_line = '' + + # 鍏朵粬 + else: + py_line = '\n' + + fpy.write(py_line.decode('gbk').encode('utf-8')) + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/vn.ctp/pyscript/generate_td_functions.py b/vn.ctp/pyscript/generate_td_functions.py new file mode 100644 index 00000000..e4e0ee93 --- /dev/null +++ b/vn.ctp/pyscript/generate_td_functions.py @@ -0,0 +1,291 @@ +# encoding: UTF-8 + +__author__ = 'CHENXY' + +from string import join +from ctp_struct import structDict + + + +def processCallBack(line): + orignalLine = line + line = line.replace('\tvirtual void ', '') # 鍒犻櫎琛岄鐨勬棤鏁堝唴瀹 + line = line.replace('{};\n', '') # 鍒犻櫎琛屽熬鐨勬棤鏁堝唴瀹 + + content = line.split('(') + cbName = content[0] # 鍥炶皟鍑芥暟鍚嶇О + + cbArgs = content[1] # 鍥炶皟鍑芥暟鍙傛暟 + if cbArgs[-1] == ' ': + cbArgs = cbArgs.replace(') ', '') + else: + cbArgs = cbArgs.replace(')', '') + + cbArgsList = cbArgs.split(', ') # 灏嗘瘡涓弬鏁拌浆鍖栦负鍒楄〃 + + cbArgsTypeList = [] + cbArgsValueList = [] + + for arg in cbArgsList: # 寮濮嬪鐞嗗弬鏁 + content = arg.split(' ') + if len(content) > 1: + cbArgsTypeList.append(content[0]) # 鍙傛暟绫诲瀷鍒楄〃 + cbArgsValueList.append(content[1]) # 鍙傛暟鏁版嵁鍒楄〃 + + createTask(cbName, cbArgsTypeList, cbArgsValueList, orignalLine) + createProcess(cbName, cbArgsTypeList, cbArgsValueList) + + # 鐢熸垚.h鏂囦欢涓殑process閮ㄥ垎 + process_line = 'void process' + cbName[2:] + '(Task task);\n' + fheaderprocess.write(process_line) + fheaderprocess.write('\n') + + # 鐢熸垚.h鏂囦欢涓殑on閮ㄥ垎 + if 'OnRspError' in cbName: + on_line = 'virtual void on' + cbName[2:] + '(dict error, int id, bool last) {};\n' + elif 'OnRsp' in cbName: + on_line = 'virtual void on' + cbName[2:] + '(dict data, dict error, int id, bool last) {};\n' + elif 'OnRtn' in cbName: + on_line = 'virtual void on' + cbName[2:] + '(dict data) {};\n' + elif 'OnErrRtn' in cbName: + on_line = 'virtual void on' + cbName[2:] + '(dict data, dict error) {};\n' + else: + on_line = '' + fheaderon.write(on_line) + fheaderon.write('\n') + + # 鐢熸垚灏佽閮ㄥ垎 + createWrap(cbName) + + +#---------------------------------------------------------------------- +def createWrap(cbName): + """鍦≒ython灏佽娈典唬鐮佷腑杩涜澶勭悊""" + # 鐢熸垚.h鏂囦欢涓殑on閮ㄥ垎 + if 'OnRspError' in cbName: + on_line = 'virtual void on' + cbName[2:] + '(dict error, int id, bool last)\n' + override_line = '("on' + cbName[2:] + '")(error, id, last);\n' + elif 'OnRsp' in cbName: + on_line = 'virtual void on' + cbName[2:] + '(dict data, dict error, int id, bool last)\n' + override_line = '("on' + cbName[2:] + '")(data, error, id, last);\n' + elif 'OnRtn' in cbName: + on_line = 'virtual void on' + cbName[2:] + '(dict data)\n' + override_line = '("on' + cbName[2:] + '")(data);\n' + elif 'OnErrRtn' in cbName: + on_line = 'virtual void on' + cbName[2:] + '(dict data, dict error)\n' + override_line = '("on' + cbName[2:] + '")(data, error);\n' + else: + on_line = '' + + if on_line is not '': + fwrap.write(on_line) + fwrap.write('{\n') + fwrap.write('\t PyLock lock;\n') + fwrap.write('\n') + fwrap.write('\ttry\n') + fwrap.write('\t{\n') + fwrap.write('\t\tthis->get_override'+override_line) + fwrap.write('\t}\n') + fwrap.write('\tcatch (error_already_set const &)\n') + fwrap.write('\t{\n') + fwrap.write('\t\tPyErr_Print();\n') + fwrap.write('\t}\n') + fwrap.write('};\n') + fwrap.write('\n') + + + +def createTask(cbName, cbArgsTypeList, cbArgsValueList, orignalLine): + # 浠庡洖璋冨嚱鏁扮敓鎴愪换鍔″璞★紝骞舵斁鍏ラ槦鍒 + funcline = orignalLine.replace('\tvirtual void ', 'void ' + apiName + '::') + funcline = funcline.replace('{};', '') + + ftask.write(funcline) + ftask.write('{\n') + ftask.write("\tTask task = Task();\n") + + ftask.write("\ttask.task_name = " + cbName.upper() + ";\n") + + # define甯搁噺 + global define_count + fdefine.write("#define " + cbName.upper() + ' ' + str(define_count) + '\n') + define_count = define_count + 1 + + # switch娈典唬鐮 + fswitch.write("case " + cbName.upper() + ':\n') + fswitch.write("{\n") + fswitch.write("\tthis->" + cbName.replace('On', 'process') + '(task);\n') + fswitch.write("\tbreak;\n") + fswitch.write("}\n") + fswitch.write("\n") + + for i, type_ in enumerate(cbArgsTypeList): + if type_ == 'int': + ftask.write("\ttask.task_id = " + cbArgsValueList[i] + ";\n") + elif type_ == 'bool': + ftask.write("\ttask.task_last = " + cbArgsValueList[i] + ";\n") + elif 'RspInfoField' in type_: + ftask.write("\n") + ftask.write("\tif (pRspInfo)\n") + ftask.write("\t{\n") + ftask.write("\t\ttask.task_error = " + cbArgsValueList[i] + ";\n") + ftask.write("\t}\n") + ftask.write("\telse\n") + ftask.write("\t{\n") + ftask.write("\t\tCThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField();\n") + ftask.write("\t\tmemset(&empty_error, 0, sizeof(empty_error));\n") + ftask.write("\t\ttask.task_error = empty_error;\n") + ftask.write("\t}\n") + else: + ftask.write("\n") + ftask.write("\tif (" + cbArgsValueList[i][1:] + ")\n") + ftask.write("\t{\n") + ftask.write("\t\ttask.task_data = " + cbArgsValueList[i] + ";\n") + ftask.write("\t}\n") + ftask.write("\telse\n") + ftask.write("\t{\n") + ftask.write("\t\t" + type_ + " empty_data = " + type_ + "();\n") + ftask.write("\t\tmemset(&empty_data, 0, sizeof(empty_data));\n") + ftask.write("\t\ttask.task_data = empty_data;\n") + ftask.write("\t}\n") + + ftask.write("\tthis->task_queue.push(task);\n") + ftask.write("};\n") + ftask.write("\n") + + +def createProcess(cbName, cbArgsTypeList, cbArgsValueList): + # 浠庨槦鍒椾腑鎻愬彇浠诲姟锛屽苟杞寲涓簆ython瀛楀吀 + fprocess.write("void " + apiName + '::' + cbName.replace('On', 'process') + '(Task task)' + "\n") + fprocess.write("{\n") + + onArgsList = [] + + for i, type_ in enumerate(cbArgsTypeList): + if 'RspInfoField' in type_: + fprocess.write("\t"+ type_ + ' task_error = any_cast<' + type_ + '>(task.task_error);\n') + fprocess.write("\t"+ "dict error;\n") + + struct = structDict[type_] + for key in struct.keys(): + fprocess.write("\t"+ 'error["' + key + '"] = task_error.' + key + ';\n') + + fprocess.write("\n") + + onArgsList.append('error') + + elif type_ in structDict: + fprocess.write("\t"+ type_ + ' task_data = any_cast<' + type_ + '>(task.task_data);\n') + fprocess.write("\t"+ "dict data;\n") + + struct = structDict[type_] + for key in struct.keys(): + fprocess.write("\t"+ 'data["' + key + '"] = task_data.' + key + ';\n') + + fprocess.write("\n") + + onArgsList.append('data') + + elif type_ == 'bool': + onArgsList.append('task.task_last') + + elif type_ == 'int': + onArgsList.append('task.task_id') + + onArgs = join(onArgsList, ', ') + fprocess.write('\tthis->' + cbName.replace('On', 'on') + '(' + onArgs +');\n') + + fprocess.write("};\n") + fprocess.write("\n") + + +def processFunction(line): + line = line.replace('\tvirtual int ', '') # 鍒犻櫎琛岄鐨勬棤鏁堝唴瀹 + line = line.replace(') = 0;\n', '') # 鍒犻櫎琛屽熬鐨勬棤鏁堝唴瀹 + + content = line.split('(') + fcName = content[0] # 鍥炶皟鍑芥暟鍚嶇О + + fcArgs = content[1] # 鍥炶皟鍑芥暟鍙傛暟 + fcArgs = fcArgs.replace(')', '') + + fcArgsList = fcArgs.split(', ') # 灏嗘瘡涓弬鏁拌浆鍖栦负鍒楄〃 + + fcArgsTypeList = [] + fcArgsValueList = [] + + for arg in fcArgsList: # 寮濮嬪鐞嗗弬鏁 + content = arg.split(' ') + if len(content) > 1: + fcArgsTypeList.append(content[0]) # 鍙傛暟绫诲瀷鍒楄〃 + fcArgsValueList.append(content[1]) # 鍙傛暟鏁版嵁鍒楄〃 + + if len(fcArgsTypeList)>0 and fcArgsTypeList[0] in structDict: + createFunction(fcName, fcArgsTypeList, fcArgsValueList) + + # 鐢熸垚.h鏂囦欢涓殑涓诲姩鍑芥暟閮ㄥ垎 + if 'Req' in fcName: + req_line = 'int req' + fcName[3:] + '(dict req, int nRequestID);\n' + fheaderfunction.write(req_line) + fheaderfunction.write('\n') + + +def createFunction(fcName, fcArgsTypeList, fcArgsValueList): + type_ = fcArgsTypeList[0] + struct = structDict[type_] + + ffunction.write('int TdApi::req' + fcName[3:] + '(dict req, int nRequestID)\n') + ffunction.write('{\n') + ffunction.write('\t' + type_ +' myreq = ' + type_ + '();\n') + ffunction.write('\tmemset(&myreq, 0, sizeof(myreq));\n') + + for key, value in struct.items(): + if value == 'string': + line = '\tgetChar(req, "' + key + '", myreq.' + key + ');\n' + elif value == 'int': + line = '\tgetInt(req, "' + key + '", &myreq.' + key + ');\n' + elif value == 'double': + line = '\tgetDouble(req, "' + key + '", &myreq.' + key + ');\n' + ffunction.write(line) + + ffunction.write('\tint i = this->api->' + fcName + '(&myreq, nRequestID);\n') + ffunction.write('\treturn i;\n') + + ffunction.write('};\n') + ffunction.write('\n') + + + + +######################################################### +apiName = 'TdApi' + +fcpp = open('ThostFtdcTraderApi.h', 'r') +ftask = open('ctp_td_task.cpp', 'w') +fprocess = open('ctp_td_process.cpp', 'w') +ffunction = open('ctp_td_function.cpp', 'w') +fdefine = open('ctp_td_define.cpp', 'w') +fswitch = open('ctp_td_switch.cpp', 'w') +fheaderprocess = open('ctp_td_header_process.h', 'w') +fheaderon = open('ctp_td_header_on.h', 'w') +fheaderfunction = open('ctp_td_header_function.h', 'w') +fwrap = open('ctp_td_wrap.cpp', 'w') + +define_count = 1 + +for line in fcpp: + if "\tvirtual void On" in line: + processCallBack(line) + elif "\tvirtual int" in line: + processFunction(line) + +fcpp.close() +ftask.close() +fprocess.close() +ffunction.close() +fswitch.close() +fdefine.close() +fheaderprocess.close() +fheaderon.close() +fheaderfunction.close() +fwrap.close() \ No newline at end of file diff --git a/vn.ctp/vnctpmd/test/mdtest.py b/vn.ctp/vnctpmd/test/mdtest.py new file mode 100644 index 00000000..4b288ac5 --- /dev/null +++ b/vn.ctp/vnctpmd/test/mdtest.py @@ -0,0 +1,177 @@ +# encoding: UTF-8 + +import sys +from time import sleep + +from PyQt4 import QtGui + +from vnctpmd 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 onRspSubForQuoteRsp(self, data, error, n, last): + """璁㈤槄鍚堢害鍥炴姤""" + print_dict(data) + print_dict(error) + + #---------------------------------------------------------------------- + @simple_log + def onRspUnSubForQuoteRsp(self, data, error, n, last): + """閫璁㈠悎绾﹀洖鎶""" + print_dict(data) + print_dict(error) + + #---------------------------------------------------------------------- + @simple_log + def onRtnForQuoteRsp(self, data): + """琛屾儏鎺ㄩ""" + print_dict(data) + + +#---------------------------------------------------------------------- +def main(): + """涓绘祴璇曞嚱鏁帮紝鍑虹幇鍫靛鏃跺彲浠ヨ冭檻浣跨敤sleep""" + reqid = 0 + + # 鍒涘缓Qt搴旂敤瀵硅薄锛岀敤浜庝簨浠跺惊鐜 + app = QtGui.QApplication(sys.argv) + + # 鍒涘缓API瀵硅薄 + api = TestMdApi() + + # 鍦–++鐜涓垱寤篗dApi瀵硅薄锛屼紶鍏ュ弬鏁版槸甯屾湜鐢ㄦ潵淇濆瓨.con鏂囦欢鐨勫湴鍧 + api.createFtdcMdApi('') + + # 娉ㄥ唽鍓嶇疆鏈哄湴鍧 + api.registerFront("tcp://qqfz-md1.ctp.shcifco.com:32313") + + # 鍒濆鍖朼pi锛岃繛鎺ュ墠缃満 + api.init() + sleep(0.5) + + # 鐧婚檰 + loginReq = {} # 鍒涘缓涓涓┖瀛楀吀 + loginReq['UserID'] = '' # 鍙傛暟浣滀负瀛楀吀閿肩殑鏂瑰紡浼犲叆 + loginReq['Password'] = '' # 閿悕鍜孋++涓殑缁撴瀯浣撴垚鍛樺悕瀵瑰簲 + 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() diff --git a/vn.ctp/vnctpmd/test/thostmduserapi.dll b/vn.ctp/vnctpmd/test/thostmduserapi.dll new file mode 100644 index 0000000000000000000000000000000000000000..c7402a3538be8630f00a8a6d5c13efd2a06917f1 GIT binary patch literal 610304 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 z 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

  • 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 z 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

    y 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 literal 0 HcmV?d00001 diff --git a/vn.ctp/vnctpmd/test/vnctpmd.pyd b/vn.ctp/vnctpmd/test/vnctpmd.pyd new file mode 100644 index 0000000000000000000000000000000000000000..aeacd1c82564ea5cb0e3bc8aa0078245f4890efb GIT binary patch literal 263168 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�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 + + + +// TODO: 在此处引用程序需要的其他头文件 diff --git a/vn.ctp/vnctpmd/vnctpmd/targetver.h b/vn.ctp/vnctpmd/vnctpmd/targetver.h new file mode 100644 index 00000000..7a7d2c83 --- /dev/null +++ b/vn.ctp/vnctpmd/vnctpmd/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。 + +// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将 +// WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。 + +#include diff --git a/vn.ctp/vnctpmd/vnctpmd/vnctpmd.cpp b/vn.ctp/vnctpmd/vnctpmd/vnctpmd.cpp new file mode 100644 index 00000000..9e66b229 --- /dev/null +++ b/vn.ctp/vnctpmd/vnctpmd/vnctpmd.cpp @@ -0,0 +1,833 @@ +// vnctpmd.cpp : 定义 DLL 应用程序的导出函数。 +// + +#include "stdafx.h" +#include "vnctpmd.h" + +///------------------------------------------------------------------------------------- +///从Python对象到C++类型转换用的函数 +///------------------------------------------------------------------------------------- + +void getInt(dict d, string key, int *value) +{ + if (d.has_key(key)) //检查字典中是否存在该键值 + { + object o = d[key]; //获取该键值 + extract x(o); //创建提取器 + if (x.check()) //如果可以提取 + { + *value = x(); //对目标整数指针赋值 + } + } +}; + +void getDouble(dict d, string key, double *value) +{ + if (d.has_key(key)) + { + object o = d[key]; + extract x(o); + if (x.check()) + { + *value = x(); + } + } +}; + +void getChar(dict d, string key, char *value) +{ + if (d.has_key(key)) + { + object o = d[key]; + extract x(o); + if (x.check()) + { + string s = x(); + const char *buffer = s.c_str(); + //对字符串指针赋值必须使用strcpy_s, vs2013使用strcpy编译通不过 + //+1应该是因为C++字符串的结尾符号?不是特别确定,不加这个1会出错 + strcpy_s(value, strlen(buffer) + 1, buffer); + } + } +}; + + + +///------------------------------------------------------------------------------------- +///C++的回调函数将数据保存到队列中 +///------------------------------------------------------------------------------------- + +void MdApi::OnFrontConnected() +{Task task = Task(); + task.task_name = ONFRONTCONNECTED; + this->task_queue.push(task); +}; + +void MdApi::OnFrontDisconnected(int nReason) +{ + Task task = Task(); + task.task_name = ONFRONTDISCONNECTED; + task.task_id = nReason; + this->task_queue.push(task); +}; + +void MdApi::OnHeartBeatWarning(int nTimeLapse) +{ + Task task = Task(); + task.task_name = ONHEARTBEATWARNING; + task.task_id = nTimeLapse; + this->task_queue.push(task); +}; + +void MdApi::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPUSERLOGIN; + task.task_data = *pRspUserLogin; + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void MdApi::OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPUSERLOGOUT; + task.task_data = *pUserLogout; + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void MdApi::OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPERROR; + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void MdApi::OnRspSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPSUBMARKETDATA; + task.task_data = *pSpecificInstrument; + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void MdApi::OnRspUnSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPUNSUBMARKETDATA; + task.task_data = *pSpecificInstrument; + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void MdApi::OnRspSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPSUBFORQUOTERSP; + task.task_data = *pSpecificInstrument; + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void MdApi::OnRspUnSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPUNSUBFORQUOTERSP; + task.task_data = *pSpecificInstrument; + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void MdApi::OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData) +{ + Task task = Task(); + task.task_name = ONRTNDEPTHMARKETDATA; + task.task_data = *pDepthMarketData; + this->task_queue.push(task); +}; + +void MdApi::OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp) +{ + Task task = Task(); + task.task_name = ONRTNFORQUOTERSP; + task.task_data = *pForQuoteRsp; + this->task_queue.push(task); +}; + + + +///------------------------------------------------------------------------------------- +///工作线程从队列中取出数据,转化为python对象后,进行推送 +///------------------------------------------------------------------------------------- + +void MdApi::processTask() +{ + while (1) + { + Task task = this->task_queue.wait_and_pop(); + + switch (task.task_name) + { + case ONFRONTCONNECTED: + { + this->processFrontConnected(task); + break; + } + + case ONFRONTDISCONNECTED: + { + this->processFrontDisconnected(task); + break; + } + + case ONHEARTBEATWARNING: + { + this->processHeartBeatWarning(task); + break; + } + + case ONRSPUSERLOGIN: + { + this->processRspUserLogin(task); + break; + } + + case ONRSPUSERLOGOUT: + { + this->processRspUserLogout(task); + break; + } + + case ONRSPERROR: + { + this->processRspError(task); + break; + } + + case ONRSPSUBMARKETDATA: + { + this->processRspSubMarketData(task); + break; + } + + case ONRSPUNSUBMARKETDATA: + { + this->processRspUnSubMarketData(task); + break; + } + + case ONRSPSUBFORQUOTERSP: + { + this->processRspSubForQuoteRsp(task); + break; + } + + case ONRSPUNSUBFORQUOTERSP: + { + this->processRspUnSubForQuoteRsp(task); + break; + } + + case ONRTNDEPTHMARKETDATA: + { + this->processRtnDepthMarketData(task); + break; + } + + case ONRTNFORQUOTERSP: + { + this->processRtnForQuoteRsp(task); + break; + } + }; + } +}; + +void MdApi::processFrontConnected(Task task) +{ + this->onFrontConnected(); +}; + +void MdApi::processFrontDisconnected(Task task) +{ + this->onFrontDisconnected(task.task_id); +}; + +void MdApi::processHeartBeatWarning(Task task) +{ + this->onHeartBeatWarning(task.task_id); +}; + +void MdApi::processRspUserLogin(Task task) +{ + CThostFtdcRspUserLoginField task_data = any_cast(task.task_data); + dict data; + data["CZCETime"] = task_data.CZCETime; + data["SHFETime"] = task_data.SHFETime; + data["MaxOrderRef"] = task_data.MaxOrderRef; + data["INETime"] = task_data.INETime; + data["UserID"] = task_data.UserID; + data["TradingDay"] = task_data.TradingDay; + data["SessionID"] = task_data.SessionID; + data["SystemName"] = task_data.SystemName; + data["FrontID"] = task_data.FrontID; + data["FFEXTime"] = task_data.FFEXTime; + data["BrokerID"] = task_data.BrokerID; + data["DCETime"] = task_data.DCETime; + data["LoginTime"] = task_data.LoginTime; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspUserLogin(data, error, task.task_id, task.task_last); +}; + +void MdApi::processRspUserLogout(Task task) +{ + CThostFtdcUserLogoutField task_data = any_cast(task.task_data); + dict data; + data["UserID"] = task_data.UserID; + data["BrokerID"] = task_data.BrokerID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspUserLogout(data, error, task.task_id, task.task_last); +}; + +void MdApi::processRspError(Task task) +{ + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspError(error, task.task_id, task.task_last); +}; + +void MdApi::processRspSubMarketData(Task task) +{ + CThostFtdcSpecificInstrumentField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspSubMarketData(data, error, task.task_id, task.task_last); +}; + +void MdApi::processRspUnSubMarketData(Task task) +{ + CThostFtdcSpecificInstrumentField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspUnSubMarketData(data, error, task.task_id, task.task_last); +}; + +void MdApi::processRspSubForQuoteRsp(Task task) +{ + CThostFtdcSpecificInstrumentField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspSubForQuoteRsp(data, error, task.task_id, task.task_last); +}; + +void MdApi::processRspUnSubForQuoteRsp(Task task) +{ + CThostFtdcSpecificInstrumentField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspUnSubForQuoteRsp(data, error, task.task_id, task.task_last); +}; + +void MdApi::processRtnDepthMarketData(Task task) +{ + CThostFtdcDepthMarketDataField task_data = any_cast(task.task_data); + dict data; + data["HighestPrice"] = task_data.HighestPrice; + data["BidPrice5"] = task_data.BidPrice5; + data["BidPrice4"] = task_data.BidPrice4; + data["BidPrice1"] = task_data.BidPrice1; + data["BidPrice3"] = task_data.BidPrice3; + data["BidPrice2"] = task_data.BidPrice2; + data["LowerLimitPrice"] = task_data.LowerLimitPrice; + data["OpenPrice"] = task_data.OpenPrice; + data["AskPrice5"] = task_data.AskPrice5; + data["AskPrice4"] = task_data.AskPrice4; + data["AskPrice3"] = task_data.AskPrice3; + data["PreClosePrice"] = task_data.PreClosePrice; + data["AskPrice1"] = task_data.AskPrice1; + data["PreSettlementPrice"] = task_data.PreSettlementPrice; + data["AskVolume1"] = task_data.AskVolume1; + data["UpdateTime"] = task_data.UpdateTime; + data["UpdateMillisec"] = task_data.UpdateMillisec; + data["AveragePrice"] = task_data.AveragePrice; + data["BidVolume5"] = task_data.BidVolume5; + data["BidVolume4"] = task_data.BidVolume4; + data["BidVolume3"] = task_data.BidVolume3; + data["BidVolume2"] = task_data.BidVolume2; + data["PreOpenInterest"] = task_data.PreOpenInterest; + data["AskPrice2"] = task_data.AskPrice2; + data["Volume"] = task_data.Volume; + data["AskVolume3"] = task_data.AskVolume3; + data["AskVolume2"] = task_data.AskVolume2; + data["AskVolume5"] = task_data.AskVolume5; + data["AskVolume4"] = task_data.AskVolume4; + data["UpperLimitPrice"] = task_data.UpperLimitPrice; + data["BidVolume1"] = task_data.BidVolume1; + data["InstrumentID"] = task_data.InstrumentID; + data["ClosePrice"] = task_data.ClosePrice; + data["ExchangeID"] = task_data.ExchangeID; + data["TradingDay"] = task_data.TradingDay; + data["PreDelta"] = task_data.PreDelta; + data["OpenInterest"] = task_data.OpenInterest; + data["CurrDelta"] = task_data.CurrDelta; + data["Turnover"] = task_data.Turnover; + data["LastPrice"] = task_data.LastPrice; + data["SettlementPrice"] = task_data.SettlementPrice; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["LowestPrice"] = task_data.LowestPrice; + data["ActionDay"] = task_data.ActionDay; + + this->onRtnDepthMarketData(data); +}; + +void MdApi::processRtnForQuoteRsp(Task task) +{ + CThostFtdcForQuoteRspField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["TradingDay"] = task_data.TradingDay; + data["ForQuoteTime"] = task_data.ForQuoteTime; + data["ForQuoteSysID"] = task_data.ForQuoteSysID; + data["ActionDay"] = task_data.ActionDay; + + this->onRtnForQuoteRsp(data); +}; + + + +///------------------------------------------------------------------------------------- +///主动函数 +///------------------------------------------------------------------------------------- + +void MdApi::createFtdcMdApi(string pszFlowPath) +{ + this->api = CThostFtdcMdApi::CreateFtdcMdApi(pszFlowPath.c_str()); + this->api->RegisterSpi(this); +}; + +void MdApi::release() +{ + this->api->Release(); +}; + +void MdApi::init() +{ + this->api->Init(); +}; + +int MdApi::join() +{ + int i = this->api->Join(); + return i; +}; + +int MdApi::exit() +{ + //该函数在原生API里没有,用于安全退出API用,原生的join似乎不太稳定 + this->api->RegisterSpi(NULL); + this->api->Release(); + this->api = NULL; + return 1; +}; + +string MdApi::getTradingDay() +{ + string day = this->api->GetTradingDay(); + return day; +}; + +void MdApi::registerFront(string pszFrontAddress) +{ + this->api->RegisterFront((char*)pszFrontAddress.c_str()); +}; + +int MdApi::subscribeMarketData(string instrumentID) +{ + char* buffer = (char*) instrumentID.c_str(); + char* myreq[1] = { buffer }; + int i = this->api->SubscribeMarketData(myreq, 1); + return i; +}; + +int MdApi::unSubscribeMarketData(string instrumentID) +{ + char* buffer = (char*)instrumentID.c_str(); + char* myreq[1] = { buffer };; + int i = this->api->UnSubscribeMarketData(myreq, 1); + return i; +}; + +int MdApi::subscribeForQuoteRsp(string instrumentID) +{ + char* buffer = (char*)instrumentID.c_str(); + char* myreq[1] = { buffer }; + int i = this->api->SubscribeForQuoteRsp(myreq, 1); + return i; +}; + +int MdApi::unSubscribeForQuoteRsp(string instrumentID) +{ + char* buffer = (char*)instrumentID.c_str(); + char* myreq[1] = { buffer };; + int i = this->api->UnSubscribeForQuoteRsp(myreq, 1); + return i; +}; + +int MdApi::reqUserLogin(dict req, int nRequestID) +{ + CThostFtdcReqUserLoginField myreq = CThostFtdcReqUserLoginField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "MacAddress", myreq.MacAddress); + getChar(req, "UserProductInfo", myreq.UserProductInfo); + getChar(req, "UserID", myreq.UserID); + getChar(req, "TradingDay", myreq.TradingDay); + getChar(req, "InterfaceProductInfo", myreq.InterfaceProductInfo); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "ClientIPAddress", myreq.ClientIPAddress); + getChar(req, "OneTimePassword", myreq.OneTimePassword); + getChar(req, "ProtocolInfo", myreq.ProtocolInfo); + getChar(req, "Password", myreq.Password); + int i = this->api->ReqUserLogin(&myreq, nRequestID); + return i; +}; + +int MdApi::reqUserLogout(dict req, int nRequestID) +{ + CThostFtdcUserLogoutField myreq = CThostFtdcUserLogoutField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "UserID", myreq.UserID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqUserLogout(&myreq, nRequestID); + return i; +}; + + + +///------------------------------------------------------------------------------------- +///Boost.Python封装 +///------------------------------------------------------------------------------------- + +struct MdApiWrap : MdApi, wrapper < MdApi > +{ + virtual void onFrontConnected() + { + //在向python环境中调用回调函数推送数据前,需要先获取全局锁GIL,防止解释器崩溃 + PyLock lock; + + //以下的try...catch...可以实现捕捉python环境中错误的功能,防止C++直接出现原因未知的崩溃 + try + { + this->get_override("onFrontConnected")(); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onFrontDisconnected(int i) + { + PyLock lock; + + try + { + this->get_override("onFrontDisconnected")(i); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onHeartBeatWarning(int i) + { + PyLock lock; + + try + { + this->get_override("onHeartBeatWarning")(i); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspError(dict data, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspError")(data, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspUserLogin(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspUserLogin")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspUserLogout(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspUserLogout")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspSubMarketData(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspSubMarketData")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspUnSubMarketData(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspUnSubMarketData")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspSubForQuoteRsp(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspSubForQuoteRsp")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspUnSubForQuoteRsp(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspUnSubForQuoteRsp")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnDepthMarketData(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnDepthMarketData")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnForQuoteRsp(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnForQuoteRsp")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; +}; + + +BOOST_PYTHON_MODULE(vnctpmd) +{ + PyEval_InitThreads(); //导入时运行,保证先创建GIL + + class_("MdApi") + .def("createFtdcMdApi", &MdApiWrap::createFtdcMdApi) + .def("release", &MdApiWrap::release) + .def("init", &MdApiWrap::init) + .def("join", &MdApiWrap::join) + .def("exit", &MdApiWrap::exit) + .def("getTradingDay", &MdApiWrap::getTradingDay) + .def("registerFront", &MdApiWrap::registerFront) + .def("subscribeMarketData", &MdApiWrap::subscribeMarketData) + .def("unSubscribeMarketData", &MdApiWrap::unSubscribeMarketData) + .def("subscribeForQuoteRsp", &MdApiWrap::subscribeForQuoteRsp) + .def("unSubscribeForQuoteRsp", &MdApiWrap::unSubscribeForQuoteRsp) + .def("reqUserLogin", &MdApiWrap::reqUserLogin) + .def("reqUserLogout", &MdApiWrap::reqUserLogout) + + .def("onFrontConnected", pure_virtual(&MdApiWrap::onFrontConnected)) + .def("onFrontDisconnected", pure_virtual(&MdApiWrap::onFrontDisconnected)) + .def("onHeartBeatWarning", pure_virtual(&MdApiWrap::onHeartBeatWarning)) + .def("onRspError", pure_virtual(&MdApiWrap::onRspError)) + .def("onRspUserLogin", pure_virtual(&MdApiWrap::onRspUserLogin)) + .def("onRspUserLogout", pure_virtual(&MdApiWrap::onRspUserLogout)) + .def("onRspSubMarketData", pure_virtual(&MdApiWrap::onRspSubMarketData)) + .def("onRspUnSubMarketData", pure_virtual(&MdApiWrap::onRspUnSubMarketData)) + .def("onRtnDepthMarketData", pure_virtual(&MdApiWrap::onRtnDepthMarketData)) + .def("onRspSubForQuoteRsp", pure_virtual(&MdApiWrap::onRspSubForQuoteRsp)) + .def("onRspUnSubForQuoteRsp", pure_virtual(&MdApiWrap::onRspUnSubForQuoteRsp)) + .def("onRtnForQuoteRsp", pure_virtual(&MdApiWrap::onRtnForQuoteRsp)) + ; +}; \ No newline at end of file diff --git a/vn.ctp/vnctpmd/vnctpmd/vnctpmd.h b/vn.ctp/vnctpmd/vnctpmd/vnctpmd.h new file mode 100644 index 00000000..20ab5b39 --- /dev/null +++ b/vn.ctp/vnctpmd/vnctpmd/vnctpmd.h @@ -0,0 +1,301 @@ +//说明部分 + +//系统 +#include "stdafx.h" +#include +#include + +//Boost +#define BOOST_PYTHON_STATIC_LIB +#include //python封装 +#include //python封装 +#include //python封装 +#include //python封装 +#include //python封装 +#include //任务队列的线程功能 +#include //任务队列的线程功能 +#include //任务队列的任务实现 + +//API +#include "ThostFtdcMdApi.h" + +//命名空间 +using namespace std; +using namespace boost::python; +using namespace boost; + +//常量 +#define ONFRONTCONNECTED 1 +#define ONFRONTDISCONNECTED 2 +#define ONHEARTBEATWARNING 3 +#define ONRSPUSERLOGIN 4 +#define ONRSPUSERLOGOUT 5 +#define ONRSPERROR 6 +#define ONRSPSUBMARKETDATA 7 +#define ONRSPUNSUBMARKETDATA 8 +#define ONRSPSUBFORQUOTERSP 9 +#define ONRSPUNSUBFORQUOTERSP 10 +#define ONRTNDEPTHMARKETDATA 11 +#define ONRTNFORQUOTERSP 12 + + + +///------------------------------------------------------------------------------------- +///API中的部分组件 +///------------------------------------------------------------------------------------- + +//GIL全局锁简化获取用, +//用于帮助C++线程获得GIL锁,从而防止python崩溃 +class PyLock +{ +private: + PyGILState_STATE gil_state; + +public: + //在某个函数方法中创建该对象时,获得GIL锁 + PyLock() + { + gil_state = PyGILState_Ensure(); + } + + //在某个函数完成后销毁该对象时,解放GIL锁 + ~PyLock() + { + PyGILState_Release(gil_state); + } +}; + + +//任务结构体 +struct Task +{ + int task_name; //回调函数名称对应的常量 + any task_data; //数据结构体 + any task_error; //错误结构体 + int task_id; //请求id + bool task_last; //是否为最后返回 +}; + + +///线程安全的队列 +template + +class ConcurrentQueue +{ +private: + queue the_queue; //标准库队列 + mutable mutex the_mutex; //boost互斥锁 + condition_variable the_condition_variable; //boost条件变量 + +public: + + //存入新的任务 + void push(Data const& data) + { + mutex::scoped_lock lock(the_mutex); //获取互斥锁 + the_queue.push(data); //向队列中存入数据 + lock.unlock(); //释放锁 + the_condition_variable.notify_one(); //通知正在阻塞等待的线程 + } + + //检查队列是否为空 + bool empty() const + { + mutex::scoped_lock lock(the_mutex); + return the_queue.empty(); + } + + //取出 + Data wait_and_pop() + { + mutex::scoped_lock lock(the_mutex); + + while (the_queue.empty()) //当队列为空时 + { + the_condition_variable.wait(lock); //等待条件变量通知 + } + + Data popped_value = the_queue.front(); //获取队列中的最后一个任务 + the_queue.pop(); //删除该任务 + return popped_value; //返回该任务 + } + +}; + + +//从字典中获取某个建值对应的整数,并赋值到请求结构体对象的值上 +void getInt(dict d, string key, int* value); + + +//从字典中获取某个建值对应的浮点数,并赋值到请求结构体对象的值上 +void getDouble(dict d, string key, double* value); + + +//从字典中获取某个建值对应的字符串,并赋值到请求结构体对象的值上 +void getChar(dict d, string key, char* value); + + + +///------------------------------------------------------------------------------------- +///C++ SPI的回调函数方法实现 +///------------------------------------------------------------------------------------- + +//API的继承实现 +class MdApi : public CThostFtdcMdSpi +{ +private: + CThostFtdcMdApi* api; //API对象 + thread *task_thread; //工作线程指针(向python中推送数据) + ConcurrentQueue task_queue; //任务队列 + +public: + MdApi() + { + function0 f = boost::bind(&MdApi::processTask, this); + thread t(f); + this->task_thread = &t; + }; + + ~MdApi() + { + }; + + //------------------------------------------------------------------------------------- + //API回调函数 + //------------------------------------------------------------------------------------- + + ///当客户端与交易后台建立起通信连接时(还未登录前),该方法被调用。 + virtual void OnFrontConnected(); + + ///当客户端与交易后台通信连接断开时,该方法被调用。当发生这个情况后,API会自动重新连接,客户端可不做处理。 + ///@param nReason 错误原因 + /// 0x1001 网络读失败 + /// 0x1002 网络写失败 + /// 0x2001 接收心跳超时 + /// 0x2002 发送心跳失败 + /// 0x2003 收到错误报文 + virtual void OnFrontDisconnected(int nReason); + + ///心跳超时警告。当长时间未收到报文时,该方法被调用。 + ///@param nTimeLapse 距离上次接收报文的时间 + virtual void OnHeartBeatWarning(int nTimeLapse); + + ///登录请求响应 + virtual void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); + + ///登出请求响应 + virtual void OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); + + ///错误应答 + virtual void OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); + + ///订阅行情应答 + virtual void OnRspSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); + + ///取消订阅行情应答 + virtual void OnRspUnSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); + + ///订阅询价应答 + virtual void OnRspSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); + + ///取消订阅询价应答 + virtual void OnRspUnSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); + + ///深度行情通知 + virtual void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData); + + ///询价通知 + virtual void OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp); + + //------------------------------------------------------------------------------------- + //task:任务 + //------------------------------------------------------------------------------------- + + void processTask(); + + void processFrontConnected(Task task); + + void processFrontDisconnected(Task task); + + void processHeartBeatWarning(Task task); + + void processRspUserLogin(Task task); + + void processRspUserLogout(Task task); + + void processRspError(Task task); + + void processRspSubMarketData(Task task); + + void processRspUnSubMarketData(Task task); + + void processRspSubForQuoteRsp(Task task); + + void processRspUnSubForQuoteRsp(Task task); + + void processRtnDepthMarketData(Task task); + + void processRtnForQuoteRsp(Task task); + + //------------------------------------------------------------------------------------- + //data:回调函数的数据字典 + //error:回调函数的错误字典 + //id:请求id + //last:是否为最后返回 + //i:整数 + //------------------------------------------------------------------------------------- + + virtual void onFrontConnected(){}; + + virtual void onFrontDisconnected(int i){}; + + virtual void onHeartBeatWarning(int i){}; + + virtual void onRspUserLogin(dict data, dict error, int id, bool last) {}; + + virtual void onRspUserLogout(dict data, dict error, int id, bool last) {}; + + virtual void onRspError(dict data, int id, bool last) {}; + + virtual void onRspSubMarketData(dict data, dict error, int id, bool last) {}; + + virtual void onRspUnSubMarketData(dict data, dict error, int id, bool last) {}; + + virtual void onRspSubForQuoteRsp(dict data, dict error, int id, bool last) {}; + + virtual void onRspUnSubForQuoteRsp(dict data, dict error, int id, bool last) {}; + + virtual void onRtnDepthMarketData(dict data) {}; + + virtual void onRtnForQuoteRsp(dict data) {}; + + //------------------------------------------------------------------------------------- + //req:主动函数的请求字典 + //------------------------------------------------------------------------------------- + + void createFtdcMdApi(string pszFlowPath = ""); + + void release(); + + void init(); + + int join(); + + int exit(); + + string getTradingDay(); + + void registerFront(string pszFrontAddress); + + int subscribeMarketData(string instrumentID); + + int unSubscribeMarketData(string instrumentID); + + int subscribeForQuoteRsp(string instrumentID); + + int unSubscribeForQuoteRsp(string instrumentID); + + int reqUserLogin(dict req, int nRequestID); + + int reqUserLogout(dict req, int nRequestID); +}; diff --git a/vn.ctp/vnctptd/test/tdtest.py b/vn.ctp/vnctptd/test/tdtest.py new file mode 100644 index 00000000..5774c25c --- /dev/null +++ b/vn.ctp/vnctptd/test/tdtest.py @@ -0,0 +1,163 @@ +# encoding: UTF-8 + +import sys +from time import sleep + +from PyQt4 import QtGui + +from vnctptd 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() + + # 鍦–++鐜涓垱寤篗dApi瀵硅薄锛屼紶鍏ュ弬鏁版槸甯屾湜鐢ㄦ潵淇濆瓨.con鏂囦欢鐨勫湴鍧锛屾祴璇曢氳繃 + api.createFtdcTraderApi('') + + # 璁剧疆鏁版嵁娴侀噸浼犳柟寮忥紝娴嬭瘯閫氳繃 + api.subscribePrivateTopic(1) + api.subscribePublicTopic(1) + + # 娉ㄥ唽鍓嶇疆鏈哄湴鍧锛屾祴璇曢氳繃 + api.registerFront("tcp://qqfz-front1.ctp.shcifco.com:32305") + + # 鍒濆鍖朼pi锛岃繛鎺ュ墠缃満锛屾祴璇曢氳繃 + api.init() + sleep(0.5) + + # 鐧婚檰锛屾祴璇曢氳繃 + loginReq = {} # 鍒涘缓涓涓┖瀛楀吀 + loginReq['UserID'] = '' # 鍙傛暟浣滀负瀛楀吀閿肩殑鏂瑰紡浼犲叆 + loginReq['Password'] = '' # 閿悕鍜孋++涓殑缁撴瀯浣撴垚鍛樺悕瀵瑰簲 + 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() diff --git a/vn.ctp/vnctptd/test/thosttraderapi.dll b/vn.ctp/vnctptd/test/thosttraderapi.dll new file mode 100644 index 0000000000000000000000000000000000000000..d0c6dea964ee1f2407c73d26f0d471fcfda3309c GIT binary patch literal 1171456 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

    ThT=#O7JvKe;y-)$1ZKKixEW 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%0D755b;6%VPN|5 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

    6ZAJR4^g>5?jCm8U&D&fR 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

    p z&Cfi}UR-eDna7ExuePdt9J1w&i{>lzc==c5Z(p=+@AZMi+Q(lAb}D-IwPm9N6@!1h zmCpMw52fls~OE7nlbaGz!qoU>UU0G({}2%y@ByN ztLA>5{YKB17Zr6Yz3=uLFEi);7_6Gsz4XxhkA7PA%a`{&-M7c`&n6!!|L*dxIWsOz z?ikzh>66dJ9(irY&&gk|sXYGUmxp`b_3%4a4KIIvLCoss3R@jnd3BTFEu-(4asM5Y z-{^H+TKDQTi%eVHwBf7%*RA<0Czd(Ptv2c90hx^{VDS?ZH>^&xwHoilLGflCHI z@Y9DQpMLn{@yoWX*fsc2_P9Q8Jhmk9!G`_PcU*D@elOcyzPr5c_{E>#M($r3q<>EO z12gQ8Z-T@@ z%Wi4+yFT5QzvaE7{JzJ^H*;3_kZ1WUg)a}@4Mia zWIxG&@^kaa%f7g`=n8-O+U3=y8Pl$=ICP^o?C#L=4yjXSonA1*UGTHj>aJmz^bpI| zI_)0VW6bQiWE1;!zkM(_E&QVOHAn7W-N@dVb5-}S7azGp|L{sno{;cvhYzK%ugM!| zuAcpB*?@8tbHHfLTJ_~Bn)!_Sw6vdRT`ZAB<6B?dy- zDq?LYTS`m`Wx2%kP?klk3T1oKC-mkkZy6$}R z>AI(a^!qYFav)Q{yFmq{cuXQlzdHn+239Ys%gE;t#?1gC?8zNkk#Q7oO9hw&z2{F6B&Sw~`3I7=WVqCSL(`jQim z5<^)v5%Y6^m>0!%5M!g*T4G@oD3nY0O1d=?ZfFw^22wRVJ1Rnt7zz0DF zl8t_Baa|q5L6GF993*)w14%yCf_Y#eNb)onB>g)LB)Q83Nxss+31Bh^o0AD3>_-+4 z!ghpFT326DL+h~q_+8FWFZVdkr-ZU{VtObmBVrzlh`~@+K+J}|BIaTJ6APiYh-G0c zomdRHANz!}EMiLt1g;|ym-M95VhF)@tg z5Czoh5d&dt6fp(zNlXu8eTcy@<`A<{KS!(xWAVg1=pkbLLGn|(v~Hdbf~045fuv`O zK$4prkmfTJBz=$$lDrsT5KIC|PC`JEhXYu5Bo8GZ$wL9H!}{awc&A_-p1}D)C_6>t zP=C<%96P6f_Vq!m+ZA=MFC*55u~kIOQ!Wwn5+vq@vUDQmr4O+f^^(N0P}Y%HfqF?| z73w94wa~}QK?Z$Hj78ld?}xKZ#6)}#Q3zvmi7C(vM2zz&Vi0wbM2vHQSO~pOEXI5j z%P`)=3h0GGuquolBcAhn51`M-9i(yJ1k$({fh7MqAdPn>NaLIW(l`e|8fO8daZUnh zo}xiocc(DEG+)(V5Uc=ceUyTvzl%ZA-+3Udqb!it-yo3mcK{@P(GdjradtlNJ9D1G zdHl|)MEuT7VlbSg6EUtS#5~9$F*}TPBo>CVXks9oohkxT!dWd*2xnD9=*3E60PBy4 zd0R_lVJx3NAI7qYLKq7YW3ldt6=5ueSQW+$VlC=LiC9;$#8`aa8n8H=RTEP}Sp_kO zbw*5wUBZdFPJTX=%_XMb_wn;#EQ1)p`XZKvGl!T5xgus`pC=ZEA~^*XhqBt$bRNHp zSOt56Sb;iRVqQ2auHeILpn(EkqnZa7rCzLl6=L2Bwq|9`69U^`8u|$PQDI+bJ5=g zlAhfJlDsViNw3cZ?+1e*>0hcNn+>L;Py0X$Nc!3V$xi7E&IhBxT=3+|I(w!HBzvJ8 zoCB7CB)4R@&^}Ozeh|zB$sQU7l0DQ1B)J#B8DIiP`$Y&y>*)m6J;^!MjnIBqO?sgI zI4j?f*Im!iJcY4M#Pl$>lo$wQIm8s`eSSWar4fVB_e98nL1d6WVqPeVBSJ1hh{ceL zXTe118=?@#Du`u}L(WiEM63v9`9#P~4lw{ZB*sGCi9y&Q#1zOou@K)!EQX#Z)*tjc z$!^R8Pp++-_bQO&YzIi=vJ3M|a<&S6lDmA6Fr@0`>X9mdU4J0`TfFwtqL6XZ5kmRK1>AHEZ z07-tzK$45KAjxAsNb*AVE6Fk0q1hnWp(Ll%@I1-GD3Ij44@mN@fF$2>An8vAk~|-S zo+3G_1cTrvkk-p8kmN8A1o&}QZUUIM4LF~IeTkS3IUxo^*(hQ*_6tti~M{T{=-Q0%R<@7^(ZRb2+grjFs`{VP6s<2Svmx_*cYQ_$x#P zy-AFP-9Svl{>7h%-9QweKZ$`bmdu|IX9f{^vm+6DG=Z3cx_@Fi75FY=5Gf`a!~@(JQad8zjHyFuMCjpB>>XAB!INe$!?_i2}hsg1hw>h zo=&W*o2M#}=4l5=^RyPEd0Gn6JmrGf;8c+0Z4}7$A4uyX0MdHs2$KBAf+Y7;zeaL@ z3hS2Str{eGK0xcZ{y01DwHTjGG(O=F6dE7wGaEr6oRt#;xG#Yd^Fd4rWtl|CM+z|r zy+O=|91!!cU%g0#Jxav*FD1r?vrJ+k{A6M=?q495;r<0;VmONAcUNv?K)BrnAv$x9&!@Z;?K2H-!^ zyaut4^LY+s#eANz&WM<|xx_s91w_nGCb1a%1F;P2omhX+@9BI_|LphRb9%jk*9Bm= z64P;?4-wy+z|Uj6h(Z`U^)i?Ody<%r{e+0`uOJq}ej?)g*AiJ6D~Rm2L!dx%w-S7I&J2NB~{M8x>y5iu^=L;-duF@SxTm;!kwro;Xx z24Vjbv#}2o^Dtk;!Z3DX2Ur}&s)=RT_lXsdcVZRdKg3$Ze~1k60V3A>G-4vwB~b`x zDZ~KuGcg5m0V3{?i6f?mvlH7vte*qKY}~g*%!5BeEX2AZ7Q^l&mf`b>72#|Yu_~OU z5^JGXh^Wr$NJQmPJTWnXg%E`Zc48YCh+x&kln7QqOvimp#9#y~B4$Uhd}3Y%%O(~^ zupqHGf~6D7aK99>B7!9ot0I^}ti^p(L}Yj3h_SdIiI^D4YPW(yB @B3T771@|Qp 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 + + + +// TODO: 在此处引用程序需要的其他头文件 diff --git a/vn.ctp/vnctptd/vnctptd/targetver.h b/vn.ctp/vnctptd/vnctptd/targetver.h new file mode 100644 index 00000000..7a7d2c83 --- /dev/null +++ b/vn.ctp/vnctptd/vnctptd/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。 + +// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将 +// WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。 + +#include diff --git a/vn.ctp/vnctptd/vnctptd/vnctptd.cpp b/vn.ctp/vnctptd/vnctptd/vnctptd.cpp new file mode 100644 index 00000000..85a5a06d --- /dev/null +++ b/vn.ctp/vnctptd/vnctptd/vnctptd.cpp @@ -0,0 +1,9220 @@ +// vnctptd.cpp : 定义 DLL 应用程序的导出函数。 +// + +#include "stdafx.h" +#include "vnctptd.h" + + +///------------------------------------------------------------------------------------- +///从Python对象到C++类型转换用的函数 +///------------------------------------------------------------------------------------- + +void getInt(dict d, string key, int *value) +{ + if (d.has_key(key)) //检查字典中是否存在该键值 + { + object o = d[key]; //获取该键值 + extract x(o); //创建提取器 + if (x.check()) //如果可以提取 + { + *value = x(); //对目标整数指针赋值 + } + } +} + +void getDouble(dict d, string key, double *value) +{ + if (d.has_key(key)) + { + object o = d[key]; + extract x(o); + if (x.check()) + { + *value = x(); + } + } +} + +void getChar(dict d, string key, char *value) +{ + if (d.has_key(key)) + { + object o = d[key]; + extract x(o); + if (x.check()) + { + string s = x(); + const char *buffer = s.c_str(); + //对字符串指针赋值必须使用strcpy_s, vs2013使用strcpy编译通不过 + //+1应该是因为C++字符串的结尾符号?不是特别确定,不加这个1会出错 + strcpy_s(value, strlen(buffer) + 1, buffer); + } + } +} + + + +///------------------------------------------------------------------------------------- +///C++的回调函数将数据保存到队列中 +///------------------------------------------------------------------------------------- + +void TdApi::OnFrontConnected() +{ + Task task = Task(); + task.task_name = ONFRONTCONNECTED; + this->task_queue.push(task); +}; + +void TdApi::OnFrontDisconnected(int nReason) +{ + Task task = Task(); + task.task_name = ONFRONTDISCONNECTED; + task.task_id = nReason; + this->task_queue.push(task); +}; + +void TdApi::OnHeartBeatWarning(int nTimeLapse) +{ + Task task = Task(); + task.task_name = ONHEARTBEATWARNING; + task.task_id = nTimeLapse; + this->task_queue.push(task); +}; + +void TdApi::OnRspAuthenticate(CThostFtdcRspAuthenticateField *pRspAuthenticateField, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPAUTHENTICATE; + + if (pRspAuthenticateField) + { + task.task_data = *pRspAuthenticateField; + } + else + { + CThostFtdcRspAuthenticateField empty_data = CThostFtdcRspAuthenticateField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPUSERLOGIN; + + if (pRspUserLogin) + { + task.task_data = *pRspUserLogin; + } + else + { + CThostFtdcRspUserLoginField empty_data = CThostFtdcRspUserLoginField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPUSERLOGOUT; + + if (pUserLogout) + { + task.task_data = *pUserLogout; + } + else + { + CThostFtdcUserLogoutField empty_data = CThostFtdcUserLogoutField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspUserPasswordUpdate(CThostFtdcUserPasswordUpdateField *pUserPasswordUpdate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPUSERPASSWORDUPDATE; + + if (pUserPasswordUpdate) + { + task.task_data = *pUserPasswordUpdate; + } + else + { + CThostFtdcUserPasswordUpdateField empty_data = CThostFtdcUserPasswordUpdateField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspTradingAccountPasswordUpdate(CThostFtdcTradingAccountPasswordUpdateField *pTradingAccountPasswordUpdate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPTRADINGACCOUNTPASSWORDUPDATE; + + if (pTradingAccountPasswordUpdate) + { + task.task_data = *pTradingAccountPasswordUpdate; + } + else + { + CThostFtdcTradingAccountPasswordUpdateField empty_data = CThostFtdcTradingAccountPasswordUpdateField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPORDERINSERT; + + if (pInputOrder) + { + task.task_data = *pInputOrder; + } + else + { + CThostFtdcInputOrderField empty_data = CThostFtdcInputOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspParkedOrderInsert(CThostFtdcParkedOrderField *pParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPPARKEDORDERINSERT; + + if (pParkedOrder) + { + task.task_data = *pParkedOrder; + } + else + { + CThostFtdcParkedOrderField empty_data = CThostFtdcParkedOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspParkedOrderAction(CThostFtdcParkedOrderActionField *pParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPPARKEDORDERACTION; + + if (pParkedOrderAction) + { + task.task_data = *pParkedOrderAction; + } + else + { + CThostFtdcParkedOrderActionField empty_data = CThostFtdcParkedOrderActionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspOrderAction(CThostFtdcInputOrderActionField *pInputOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPORDERACTION; + + if (pInputOrderAction) + { + task.task_data = *pInputOrderAction; + } + else + { + CThostFtdcInputOrderActionField empty_data = CThostFtdcInputOrderActionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQueryMaxOrderVolume(CThostFtdcQueryMaxOrderVolumeField *pQueryMaxOrderVolume, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQUERYMAXORDERVOLUME; + + if (pQueryMaxOrderVolume) + { + task.task_data = *pQueryMaxOrderVolume; + } + else + { + CThostFtdcQueryMaxOrderVolumeField empty_data = CThostFtdcQueryMaxOrderVolumeField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPSETTLEMENTINFOCONFIRM; + + if (pSettlementInfoConfirm) + { + task.task_data = *pSettlementInfoConfirm; + } + else + { + CThostFtdcSettlementInfoConfirmField empty_data = CThostFtdcSettlementInfoConfirmField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspRemoveParkedOrder(CThostFtdcRemoveParkedOrderField *pRemoveParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPREMOVEPARKEDORDER; + + if (pRemoveParkedOrder) + { + task.task_data = *pRemoveParkedOrder; + } + else + { + CThostFtdcRemoveParkedOrderField empty_data = CThostFtdcRemoveParkedOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspRemoveParkedOrderAction(CThostFtdcRemoveParkedOrderActionField *pRemoveParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPREMOVEPARKEDORDERACTION; + + if (pRemoveParkedOrderAction) + { + task.task_data = *pRemoveParkedOrderAction; + } + else + { + CThostFtdcRemoveParkedOrderActionField empty_data = CThostFtdcRemoveParkedOrderActionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspExecOrderInsert(CThostFtdcInputExecOrderField *pInputExecOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPEXECORDERINSERT; + + if (pInputExecOrder) + { + task.task_data = *pInputExecOrder; + } + else + { + CThostFtdcInputExecOrderField empty_data = CThostFtdcInputExecOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspExecOrderAction(CThostFtdcInputExecOrderActionField *pInputExecOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPEXECORDERACTION; + + if (pInputExecOrderAction) + { + task.task_data = *pInputExecOrderAction; + } + else + { + CThostFtdcInputExecOrderActionField empty_data = CThostFtdcInputExecOrderActionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspForQuoteInsert(CThostFtdcInputForQuoteField *pInputForQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPFORQUOTEINSERT; + + if (pInputForQuote) + { + task.task_data = *pInputForQuote; + } + else + { + CThostFtdcInputForQuoteField empty_data = CThostFtdcInputForQuoteField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQuoteInsert(CThostFtdcInputQuoteField *pInputQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQUOTEINSERT; + + if (pInputQuote) + { + task.task_data = *pInputQuote; + } + else + { + CThostFtdcInputQuoteField empty_data = CThostFtdcInputQuoteField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQuoteAction(CThostFtdcInputQuoteActionField *pInputQuoteAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQUOTEACTION; + + if (pInputQuoteAction) + { + task.task_data = *pInputQuoteAction; + } + else + { + CThostFtdcInputQuoteActionField empty_data = CThostFtdcInputQuoteActionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryOrder(CThostFtdcOrderField *pOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYORDER; + + if (pOrder) + { + task.task_data = *pOrder; + } + else + { + CThostFtdcOrderField empty_data = CThostFtdcOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryTrade(CThostFtdcTradeField *pTrade, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYTRADE; + + if (pTrade) + { + task.task_data = *pTrade; + } + else + { + CThostFtdcTradeField empty_data = CThostFtdcTradeField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryInvestorPosition(CThostFtdcInvestorPositionField *pInvestorPosition, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYINVESTORPOSITION; + + if (pInvestorPosition) + { + task.task_data = *pInvestorPosition; + } + else + { + CThostFtdcInvestorPositionField empty_data = CThostFtdcInvestorPositionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryTradingAccount(CThostFtdcTradingAccountField *pTradingAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYTRADINGACCOUNT; + + if (pTradingAccount) + { + task.task_data = *pTradingAccount; + } + else + { + CThostFtdcTradingAccountField empty_data = CThostFtdcTradingAccountField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryInvestor(CThostFtdcInvestorField *pInvestor, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYINVESTOR; + + if (pInvestor) + { + task.task_data = *pInvestor; + } + else + { + CThostFtdcInvestorField empty_data = CThostFtdcInvestorField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryTradingCode(CThostFtdcTradingCodeField *pTradingCode, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYTRADINGCODE; + + if (pTradingCode) + { + task.task_data = *pTradingCode; + } + else + { + CThostFtdcTradingCodeField empty_data = CThostFtdcTradingCodeField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryInstrumentMarginRate(CThostFtdcInstrumentMarginRateField *pInstrumentMarginRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYINSTRUMENTMARGINRATE; + + if (pInstrumentMarginRate) + { + task.task_data = *pInstrumentMarginRate; + } + else + { + CThostFtdcInstrumentMarginRateField empty_data = CThostFtdcInstrumentMarginRateField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryInstrumentCommissionRate(CThostFtdcInstrumentCommissionRateField *pInstrumentCommissionRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYINSTRUMENTCOMMISSIONRATE; + + if (pInstrumentCommissionRate) + { + task.task_data = *pInstrumentCommissionRate; + } + else + { + CThostFtdcInstrumentCommissionRateField empty_data = CThostFtdcInstrumentCommissionRateField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryExchange(CThostFtdcExchangeField *pExchange, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYEXCHANGE; + + if (pExchange) + { + task.task_data = *pExchange; + } + else + { + CThostFtdcExchangeField empty_data = CThostFtdcExchangeField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryProduct(CThostFtdcProductField *pProduct, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYPRODUCT; + + if (pProduct) + { + task.task_data = *pProduct; + } + else + { + CThostFtdcProductField empty_data = CThostFtdcProductField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryInstrument(CThostFtdcInstrumentField *pInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYINSTRUMENT; + + if (pInstrument) + { + task.task_data = *pInstrument; + } + else + { + CThostFtdcInstrumentField empty_data = CThostFtdcInstrumentField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYDEPTHMARKETDATA; + + if (pDepthMarketData) + { + task.task_data = *pDepthMarketData; + } + else + { + CThostFtdcDepthMarketDataField empty_data = CThostFtdcDepthMarketDataField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQrySettlementInfo(CThostFtdcSettlementInfoField *pSettlementInfo, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYSETTLEMENTINFO; + + if (pSettlementInfo) + { + task.task_data = *pSettlementInfo; + } + else + { + CThostFtdcSettlementInfoField empty_data = CThostFtdcSettlementInfoField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryTransferBank(CThostFtdcTransferBankField *pTransferBank, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYTRANSFERBANK; + + if (pTransferBank) + { + task.task_data = *pTransferBank; + } + else + { + CThostFtdcTransferBankField empty_data = CThostFtdcTransferBankField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryInvestorPositionDetail(CThostFtdcInvestorPositionDetailField *pInvestorPositionDetail, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYINVESTORPOSITIONDETAIL; + + if (pInvestorPositionDetail) + { + task.task_data = *pInvestorPositionDetail; + } + else + { + CThostFtdcInvestorPositionDetailField empty_data = CThostFtdcInvestorPositionDetailField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryNotice(CThostFtdcNoticeField *pNotice, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYNOTICE; + + if (pNotice) + { + task.task_data = *pNotice; + } + else + { + CThostFtdcNoticeField empty_data = CThostFtdcNoticeField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQrySettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYSETTLEMENTINFOCONFIRM; + + if (pSettlementInfoConfirm) + { + task.task_data = *pSettlementInfoConfirm; + } + else + { + CThostFtdcSettlementInfoConfirmField empty_data = CThostFtdcSettlementInfoConfirmField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryInvestorPositionCombineDetail(CThostFtdcInvestorPositionCombineDetailField *pInvestorPositionCombineDetail, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYINVESTORPOSITIONCOMBINEDETAIL; + + if (pInvestorPositionCombineDetail) + { + task.task_data = *pInvestorPositionCombineDetail; + } + else + { + CThostFtdcInvestorPositionCombineDetailField empty_data = CThostFtdcInvestorPositionCombineDetailField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryCFMMCTradingAccountKey(CThostFtdcCFMMCTradingAccountKeyField *pCFMMCTradingAccountKey, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYCFMMCTRADINGACCOUNTKEY; + + if (pCFMMCTradingAccountKey) + { + task.task_data = *pCFMMCTradingAccountKey; + } + else + { + CThostFtdcCFMMCTradingAccountKeyField empty_data = CThostFtdcCFMMCTradingAccountKeyField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryEWarrantOffset(CThostFtdcEWarrantOffsetField *pEWarrantOffset, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYEWARRANTOFFSET; + + if (pEWarrantOffset) + { + task.task_data = *pEWarrantOffset; + } + else + { + CThostFtdcEWarrantOffsetField empty_data = CThostFtdcEWarrantOffsetField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryInvestorProductGroupMargin(CThostFtdcInvestorProductGroupMarginField *pInvestorProductGroupMargin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYINVESTORPRODUCTGROUPMARGIN; + + if (pInvestorProductGroupMargin) + { + task.task_data = *pInvestorProductGroupMargin; + } + else + { + CThostFtdcInvestorProductGroupMarginField empty_data = CThostFtdcInvestorProductGroupMarginField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryExchangeMarginRate(CThostFtdcExchangeMarginRateField *pExchangeMarginRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYEXCHANGEMARGINRATE; + + if (pExchangeMarginRate) + { + task.task_data = *pExchangeMarginRate; + } + else + { + CThostFtdcExchangeMarginRateField empty_data = CThostFtdcExchangeMarginRateField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryExchangeMarginRateAdjust(CThostFtdcExchangeMarginRateAdjustField *pExchangeMarginRateAdjust, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYEXCHANGEMARGINRATEADJUST; + + if (pExchangeMarginRateAdjust) + { + task.task_data = *pExchangeMarginRateAdjust; + } + else + { + CThostFtdcExchangeMarginRateAdjustField empty_data = CThostFtdcExchangeMarginRateAdjustField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryExchangeRate(CThostFtdcExchangeRateField *pExchangeRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYEXCHANGERATE; + + if (pExchangeRate) + { + task.task_data = *pExchangeRate; + } + else + { + CThostFtdcExchangeRateField empty_data = CThostFtdcExchangeRateField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQrySecAgentACIDMap(CThostFtdcSecAgentACIDMapField *pSecAgentACIDMap, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYSECAGENTACIDMAP; + + if (pSecAgentACIDMap) + { + task.task_data = *pSecAgentACIDMap; + } + else + { + CThostFtdcSecAgentACIDMapField empty_data = CThostFtdcSecAgentACIDMapField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryOptionInstrTradeCost(CThostFtdcOptionInstrTradeCostField *pOptionInstrTradeCost, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYOPTIONINSTRTRADECOST; + + if (pOptionInstrTradeCost) + { + task.task_data = *pOptionInstrTradeCost; + } + else + { + CThostFtdcOptionInstrTradeCostField empty_data = CThostFtdcOptionInstrTradeCostField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryOptionInstrCommRate(CThostFtdcOptionInstrCommRateField *pOptionInstrCommRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYOPTIONINSTRCOMMRATE; + + if (pOptionInstrCommRate) + { + task.task_data = *pOptionInstrCommRate; + } + else + { + CThostFtdcOptionInstrCommRateField empty_data = CThostFtdcOptionInstrCommRateField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryExecOrder(CThostFtdcExecOrderField *pExecOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYEXECORDER; + + if (pExecOrder) + { + task.task_data = *pExecOrder; + } + else + { + CThostFtdcExecOrderField empty_data = CThostFtdcExecOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryForQuote(CThostFtdcForQuoteField *pForQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYFORQUOTE; + + if (pForQuote) + { + task.task_data = *pForQuote; + } + else + { + CThostFtdcForQuoteField empty_data = CThostFtdcForQuoteField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryQuote(CThostFtdcQuoteField *pQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYQUOTE; + + if (pQuote) + { + task.task_data = *pQuote; + } + else + { + CThostFtdcQuoteField empty_data = CThostFtdcQuoteField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryTransferSerial(CThostFtdcTransferSerialField *pTransferSerial, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYTRANSFERSERIAL; + + if (pTransferSerial) + { + task.task_data = *pTransferSerial; + } + else + { + CThostFtdcTransferSerialField empty_data = CThostFtdcTransferSerialField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryAccountregister(CThostFtdcAccountregisterField *pAccountregister, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYACCOUNTREGISTER; + + if (pAccountregister) + { + task.task_data = *pAccountregister; + } + else + { + CThostFtdcAccountregisterField empty_data = CThostFtdcAccountregisterField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPERROR; + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRtnOrder(CThostFtdcOrderField *pOrder) +{ + Task task = Task(); + task.task_name = ONRTNORDER; + + if (pOrder) + { + task.task_data = *pOrder; + } + else + { + CThostFtdcOrderField empty_data = CThostFtdcOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnTrade(CThostFtdcTradeField *pTrade) +{ + Task task = Task(); + task.task_name = ONRTNTRADE; + + if (pTrade) + { + task.task_data = *pTrade; + } + else + { + CThostFtdcTradeField empty_data = CThostFtdcTradeField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNORDERINSERT; + + if (pInputOrder) + { + task.task_data = *pInputOrder; + } + else + { + CThostFtdcInputOrderField empty_data = CThostFtdcInputOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnOrderAction(CThostFtdcOrderActionField *pOrderAction, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNORDERACTION; + + if (pOrderAction) + { + task.task_data = *pOrderAction; + } + else + { + CThostFtdcOrderActionField empty_data = CThostFtdcOrderActionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnInstrumentStatus(CThostFtdcInstrumentStatusField *pInstrumentStatus) +{ + Task task = Task(); + task.task_name = ONRTNINSTRUMENTSTATUS; + + if (pInstrumentStatus) + { + task.task_data = *pInstrumentStatus; + } + else + { + CThostFtdcInstrumentStatusField empty_data = CThostFtdcInstrumentStatusField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnTradingNotice(CThostFtdcTradingNoticeInfoField *pTradingNoticeInfo) +{ + Task task = Task(); + task.task_name = ONRTNTRADINGNOTICE; + + if (pTradingNoticeInfo) + { + task.task_data = *pTradingNoticeInfo; + } + else + { + CThostFtdcTradingNoticeInfoField empty_data = CThostFtdcTradingNoticeInfoField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnErrorConditionalOrder(CThostFtdcErrorConditionalOrderField *pErrorConditionalOrder) +{ + Task task = Task(); + task.task_name = ONRTNERRORCONDITIONALORDER; + + if (pErrorConditionalOrder) + { + task.task_data = *pErrorConditionalOrder; + } + else + { + CThostFtdcErrorConditionalOrderField empty_data = CThostFtdcErrorConditionalOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnExecOrder(CThostFtdcExecOrderField *pExecOrder) +{ + Task task = Task(); + task.task_name = ONRTNEXECORDER; + + if (pExecOrder) + { + task.task_data = *pExecOrder; + } + else + { + CThostFtdcExecOrderField empty_data = CThostFtdcExecOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnExecOrderInsert(CThostFtdcInputExecOrderField *pInputExecOrder, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNEXECORDERINSERT; + + if (pInputExecOrder) + { + task.task_data = *pInputExecOrder; + } + else + { + CThostFtdcInputExecOrderField empty_data = CThostFtdcInputExecOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnExecOrderAction(CThostFtdcExecOrderActionField *pExecOrderAction, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNEXECORDERACTION; + + if (pExecOrderAction) + { + task.task_data = *pExecOrderAction; + } + else + { + CThostFtdcExecOrderActionField empty_data = CThostFtdcExecOrderActionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnForQuoteInsert(CThostFtdcInputForQuoteField *pInputForQuote, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNFORQUOTEINSERT; + + if (pInputForQuote) + { + task.task_data = *pInputForQuote; + } + else + { + CThostFtdcInputForQuoteField empty_data = CThostFtdcInputForQuoteField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnQuote(CThostFtdcQuoteField *pQuote) +{ + Task task = Task(); + task.task_name = ONRTNQUOTE; + + if (pQuote) + { + task.task_data = *pQuote; + } + else + { + CThostFtdcQuoteField empty_data = CThostFtdcQuoteField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnQuoteInsert(CThostFtdcInputQuoteField *pInputQuote, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNQUOTEINSERT; + + if (pInputQuote) + { + task.task_data = *pInputQuote; + } + else + { + CThostFtdcInputQuoteField empty_data = CThostFtdcInputQuoteField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnQuoteAction(CThostFtdcQuoteActionField *pQuoteAction, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNQUOTEACTION; + + if (pQuoteAction) + { + task.task_data = *pQuoteAction; + } + else + { + CThostFtdcQuoteActionField empty_data = CThostFtdcQuoteActionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp) +{ + Task task = Task(); + task.task_name = ONRTNFORQUOTERSP; + + if (pForQuoteRsp) + { + task.task_data = *pForQuoteRsp; + } + else + { + CThostFtdcForQuoteRspField empty_data = CThostFtdcForQuoteRspField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRspQryContractBank(CThostFtdcContractBankField *pContractBank, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYCONTRACTBANK; + + if (pContractBank) + { + task.task_data = *pContractBank; + } + else + { + CThostFtdcContractBankField empty_data = CThostFtdcContractBankField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryParkedOrder(CThostFtdcParkedOrderField *pParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYPARKEDORDER; + + if (pParkedOrder) + { + task.task_data = *pParkedOrder; + } + else + { + CThostFtdcParkedOrderField empty_data = CThostFtdcParkedOrderField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryParkedOrderAction(CThostFtdcParkedOrderActionField *pParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYPARKEDORDERACTION; + + if (pParkedOrderAction) + { + task.task_data = *pParkedOrderAction; + } + else + { + CThostFtdcParkedOrderActionField empty_data = CThostFtdcParkedOrderActionField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryTradingNotice(CThostFtdcTradingNoticeField *pTradingNotice, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYTRADINGNOTICE; + + if (pTradingNotice) + { + task.task_data = *pTradingNotice; + } + else + { + CThostFtdcTradingNoticeField empty_data = CThostFtdcTradingNoticeField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryBrokerTradingParams(CThostFtdcBrokerTradingParamsField *pBrokerTradingParams, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYBROKERTRADINGPARAMS; + + if (pBrokerTradingParams) + { + task.task_data = *pBrokerTradingParams; + } + else + { + CThostFtdcBrokerTradingParamsField empty_data = CThostFtdcBrokerTradingParamsField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQryBrokerTradingAlgos(CThostFtdcBrokerTradingAlgosField *pBrokerTradingAlgos, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQRYBROKERTRADINGALGOS; + + if (pBrokerTradingAlgos) + { + task.task_data = *pBrokerTradingAlgos; + } + else + { + CThostFtdcBrokerTradingAlgosField empty_data = CThostFtdcBrokerTradingAlgosField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRtnFromBankToFutureByBank(CThostFtdcRspTransferField *pRspTransfer) +{ + Task task = Task(); + task.task_name = ONRTNFROMBANKTOFUTUREBYBANK; + + if (pRspTransfer) + { + task.task_data = *pRspTransfer; + } + else + { + CThostFtdcRspTransferField empty_data = CThostFtdcRspTransferField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnFromFutureToBankByBank(CThostFtdcRspTransferField *pRspTransfer) +{ + Task task = Task(); + task.task_name = ONRTNFROMFUTURETOBANKBYBANK; + + if (pRspTransfer) + { + task.task_data = *pRspTransfer; + } + else + { + CThostFtdcRspTransferField empty_data = CThostFtdcRspTransferField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnRepealFromBankToFutureByBank(CThostFtdcRspRepealField *pRspRepeal) +{ + Task task = Task(); + task.task_name = ONRTNREPEALFROMBANKTOFUTUREBYBANK; + + if (pRspRepeal) + { + task.task_data = *pRspRepeal; + } + else + { + CThostFtdcRspRepealField empty_data = CThostFtdcRspRepealField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnRepealFromFutureToBankByBank(CThostFtdcRspRepealField *pRspRepeal) +{ + Task task = Task(); + task.task_name = ONRTNREPEALFROMFUTURETOBANKBYBANK; + + if (pRspRepeal) + { + task.task_data = *pRspRepeal; + } + else + { + CThostFtdcRspRepealField empty_data = CThostFtdcRspRepealField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnFromBankToFutureByFuture(CThostFtdcRspTransferField *pRspTransfer) +{ + Task task = Task(); + task.task_name = ONRTNFROMBANKTOFUTUREBYFUTURE; + + if (pRspTransfer) + { + task.task_data = *pRspTransfer; + } + else + { + CThostFtdcRspTransferField empty_data = CThostFtdcRspTransferField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnFromFutureToBankByFuture(CThostFtdcRspTransferField *pRspTransfer) +{ + Task task = Task(); + task.task_name = ONRTNFROMFUTURETOBANKBYFUTURE; + + if (pRspTransfer) + { + task.task_data = *pRspTransfer; + } + else + { + CThostFtdcRspTransferField empty_data = CThostFtdcRspTransferField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnRepealFromBankToFutureByFutureManual(CThostFtdcRspRepealField *pRspRepeal) +{ + Task task = Task(); + task.task_name = ONRTNREPEALFROMBANKTOFUTUREBYFUTUREMANUAL; + + if (pRspRepeal) + { + task.task_data = *pRspRepeal; + } + else + { + CThostFtdcRspRepealField empty_data = CThostFtdcRspRepealField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnRepealFromFutureToBankByFutureManual(CThostFtdcRspRepealField *pRspRepeal) +{ + Task task = Task(); + task.task_name = ONRTNREPEALFROMFUTURETOBANKBYFUTUREMANUAL; + + if (pRspRepeal) + { + task.task_data = *pRspRepeal; + } + else + { + CThostFtdcRspRepealField empty_data = CThostFtdcRspRepealField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnQueryBankBalanceByFuture(CThostFtdcNotifyQueryAccountField *pNotifyQueryAccount) +{ + Task task = Task(); + task.task_name = ONRTNQUERYBANKBALANCEBYFUTURE; + + if (pNotifyQueryAccount) + { + task.task_data = *pNotifyQueryAccount; + } + else + { + CThostFtdcNotifyQueryAccountField empty_data = CThostFtdcNotifyQueryAccountField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnBankToFutureByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNBANKTOFUTUREBYFUTURE; + + if (pReqTransfer) + { + task.task_data = *pReqTransfer; + } + else + { + CThostFtdcReqTransferField empty_data = CThostFtdcReqTransferField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnFutureToBankByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNFUTURETOBANKBYFUTURE; + + if (pReqTransfer) + { + task.task_data = *pReqTransfer; + } + else + { + CThostFtdcReqTransferField empty_data = CThostFtdcReqTransferField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnRepealBankToFutureByFutureManual(CThostFtdcReqRepealField *pReqRepeal, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNREPEALBANKTOFUTUREBYFUTUREMANUAL; + + if (pReqRepeal) + { + task.task_data = *pReqRepeal; + } + else + { + CThostFtdcReqRepealField empty_data = CThostFtdcReqRepealField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnRepealFutureToBankByFutureManual(CThostFtdcReqRepealField *pReqRepeal, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNREPEALFUTURETOBANKBYFUTUREMANUAL; + + if (pReqRepeal) + { + task.task_data = *pReqRepeal; + } + else + { + CThostFtdcReqRepealField empty_data = CThostFtdcReqRepealField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnErrRtnQueryBankBalanceByFuture(CThostFtdcReqQueryAccountField *pReqQueryAccount, CThostFtdcRspInfoField *pRspInfo) +{ + Task task = Task(); + task.task_name = ONERRRTNQUERYBANKBALANCEBYFUTURE; + + if (pReqQueryAccount) + { + task.task_data = *pReqQueryAccount; + } + else + { + CThostFtdcReqQueryAccountField empty_data = CThostFtdcReqQueryAccountField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnRepealFromBankToFutureByFuture(CThostFtdcRspRepealField *pRspRepeal) +{ + Task task = Task(); + task.task_name = ONRTNREPEALFROMBANKTOFUTUREBYFUTURE; + + if (pRspRepeal) + { + task.task_data = *pRspRepeal; + } + else + { + CThostFtdcRspRepealField empty_data = CThostFtdcRspRepealField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnRepealFromFutureToBankByFuture(CThostFtdcRspRepealField *pRspRepeal) +{ + Task task = Task(); + task.task_name = ONRTNREPEALFROMFUTURETOBANKBYFUTURE; + + if (pRspRepeal) + { + task.task_data = *pRspRepeal; + } + else + { + CThostFtdcRspRepealField empty_data = CThostFtdcRspRepealField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRspFromBankToFutureByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPFROMBANKTOFUTUREBYFUTURE; + + if (pReqTransfer) + { + task.task_data = *pReqTransfer; + } + else + { + CThostFtdcReqTransferField empty_data = CThostFtdcReqTransferField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspFromFutureToBankByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPFROMFUTURETOBANKBYFUTURE; + + if (pReqTransfer) + { + task.task_data = *pReqTransfer; + } + else + { + CThostFtdcReqTransferField empty_data = CThostFtdcReqTransferField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRspQueryBankAccountMoneyByFuture(CThostFtdcReqQueryAccountField *pReqQueryAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) +{ + Task task = Task(); + task.task_name = ONRSPQUERYBANKACCOUNTMONEYBYFUTURE; + + if (pReqQueryAccount) + { + task.task_data = *pReqQueryAccount; + } + else + { + CThostFtdcReqQueryAccountField empty_data = CThostFtdcReqQueryAccountField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + + if (pRspInfo) + { + task.task_error = *pRspInfo; + } + else + { + CThostFtdcRspInfoField empty_error = CThostFtdcRspInfoField(); + memset(&empty_error, 0, sizeof(empty_error)); + task.task_error = empty_error; + } + task.task_id = nRequestID; + task.task_last = bIsLast; + this->task_queue.push(task); +}; + +void TdApi::OnRtnOpenAccountByBank(CThostFtdcOpenAccountField *pOpenAccount) +{ + Task task = Task(); + task.task_name = ONRTNOPENACCOUNTBYBANK; + + if (pOpenAccount) + { + task.task_data = *pOpenAccount; + } + else + { + CThostFtdcOpenAccountField empty_data = CThostFtdcOpenAccountField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnCancelAccountByBank(CThostFtdcCancelAccountField *pCancelAccount) +{ + Task task = Task(); + task.task_name = ONRTNCANCELACCOUNTBYBANK; + + if (pCancelAccount) + { + task.task_data = *pCancelAccount; + } + else + { + CThostFtdcCancelAccountField empty_data = CThostFtdcCancelAccountField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + +void TdApi::OnRtnChangeAccountByBank(CThostFtdcChangeAccountField *pChangeAccount) +{ + Task task = Task(); + task.task_name = ONRTNCHANGEACCOUNTBYBANK; + + if (pChangeAccount) + { + task.task_data = *pChangeAccount; + } + else + { + CThostFtdcChangeAccountField empty_data = CThostFtdcChangeAccountField(); + memset(&empty_data, 0, sizeof(empty_data)); + task.task_data = empty_data; + } + this->task_queue.push(task); +}; + + + + + +///------------------------------------------------------------------------------------- +///工作线程从队列中取出数据,转化为python对象后,进行推送 +///------------------------------------------------------------------------------------- + +void TdApi::processTask() +{ + while (1) + { + Task task = this->task_queue.wait_and_pop(); + + switch (task.task_name) + { + case ONFRONTCONNECTED: + { + this->processFrontConnected(task); + break; + } + + case ONFRONTDISCONNECTED: + { + this->processFrontDisconnected(task); + break; + } + + case ONHEARTBEATWARNING: + { + this->processHeartBeatWarning(task); + break; + } + + case ONRSPAUTHENTICATE: + { + this->processRspAuthenticate(task); + break; + } + + case ONRSPUSERLOGIN: + { + this->processRspUserLogin(task); + break; + } + + case ONRSPUSERLOGOUT: + { + this->processRspUserLogout(task); + break; + } + + case ONRSPUSERPASSWORDUPDATE: + { + this->processRspUserPasswordUpdate(task); + break; + } + + case ONRSPTRADINGACCOUNTPASSWORDUPDATE: + { + this->processRspTradingAccountPasswordUpdate(task); + break; + } + + case ONRSPORDERINSERT: + { + this->processRspOrderInsert(task); + break; + } + + case ONRSPPARKEDORDERINSERT: + { + this->processRspParkedOrderInsert(task); + break; + } + + case ONRSPPARKEDORDERACTION: + { + this->processRspParkedOrderAction(task); + break; + } + + case ONRSPORDERACTION: + { + this->processRspOrderAction(task); + break; + } + + case ONRSPQUERYMAXORDERVOLUME: + { + this->processRspQueryMaxOrderVolume(task); + break; + } + + case ONRSPSETTLEMENTINFOCONFIRM: + { + this->processRspSettlementInfoConfirm(task); + break; + } + + case ONRSPREMOVEPARKEDORDER: + { + this->processRspRemoveParkedOrder(task); + break; + } + + case ONRSPREMOVEPARKEDORDERACTION: + { + this->processRspRemoveParkedOrderAction(task); + break; + } + + case ONRSPEXECORDERINSERT: + { + this->processRspExecOrderInsert(task); + break; + } + + case ONRSPEXECORDERACTION: + { + this->processRspExecOrderAction(task); + break; + } + + case ONRSPFORQUOTEINSERT: + { + this->processRspForQuoteInsert(task); + break; + } + + case ONRSPQUOTEINSERT: + { + this->processRspQuoteInsert(task); + break; + } + + case ONRSPQUOTEACTION: + { + this->processRspQuoteAction(task); + break; + } + + case ONRSPQRYORDER: + { + this->processRspQryOrder(task); + break; + } + + case ONRSPQRYTRADE: + { + this->processRspQryTrade(task); + break; + } + + case ONRSPQRYINVESTORPOSITION: + { + this->processRspQryInvestorPosition(task); + break; + } + + case ONRSPQRYTRADINGACCOUNT: + { + this->processRspQryTradingAccount(task); + break; + } + + case ONRSPQRYINVESTOR: + { + this->processRspQryInvestor(task); + break; + } + + case ONRSPQRYTRADINGCODE: + { + this->processRspQryTradingCode(task); + break; + } + + case ONRSPQRYINSTRUMENTMARGINRATE: + { + this->processRspQryInstrumentMarginRate(task); + break; + } + + case ONRSPQRYINSTRUMENTCOMMISSIONRATE: + { + this->processRspQryInstrumentCommissionRate(task); + break; + } + + case ONRSPQRYEXCHANGE: + { + this->processRspQryExchange(task); + break; + } + + case ONRSPQRYPRODUCT: + { + this->processRspQryProduct(task); + break; + } + + case ONRSPQRYINSTRUMENT: + { + this->processRspQryInstrument(task); + break; + } + + case ONRSPQRYDEPTHMARKETDATA: + { + this->processRspQryDepthMarketData(task); + break; + } + + case ONRSPQRYSETTLEMENTINFO: + { + this->processRspQrySettlementInfo(task); + break; + } + + case ONRSPQRYTRANSFERBANK: + { + this->processRspQryTransferBank(task); + break; + } + + case ONRSPQRYINVESTORPOSITIONDETAIL: + { + this->processRspQryInvestorPositionDetail(task); + break; + } + + case ONRSPQRYNOTICE: + { + this->processRspQryNotice(task); + break; + } + + case ONRSPQRYSETTLEMENTINFOCONFIRM: + { + this->processRspQrySettlementInfoConfirm(task); + break; + } + + case ONRSPQRYINVESTORPOSITIONCOMBINEDETAIL: + { + this->processRspQryInvestorPositionCombineDetail(task); + break; + } + + case ONRSPQRYCFMMCTRADINGACCOUNTKEY: + { + this->processRspQryCFMMCTradingAccountKey(task); + break; + } + + case ONRSPQRYEWARRANTOFFSET: + { + this->processRspQryEWarrantOffset(task); + break; + } + + case ONRSPQRYINVESTORPRODUCTGROUPMARGIN: + { + this->processRspQryInvestorProductGroupMargin(task); + break; + } + + case ONRSPQRYEXCHANGEMARGINRATE: + { + this->processRspQryExchangeMarginRate(task); + break; + } + + case ONRSPQRYEXCHANGEMARGINRATEADJUST: + { + this->processRspQryExchangeMarginRateAdjust(task); + break; + } + + case ONRSPQRYEXCHANGERATE: + { + this->processRspQryExchangeRate(task); + break; + } + + case ONRSPQRYSECAGENTACIDMAP: + { + this->processRspQrySecAgentACIDMap(task); + break; + } + + case ONRSPQRYOPTIONINSTRTRADECOST: + { + this->processRspQryOptionInstrTradeCost(task); + break; + } + + case ONRSPQRYOPTIONINSTRCOMMRATE: + { + this->processRspQryOptionInstrCommRate(task); + break; + } + + case ONRSPQRYEXECORDER: + { + this->processRspQryExecOrder(task); + break; + } + + case ONRSPQRYFORQUOTE: + { + this->processRspQryForQuote(task); + break; + } + + case ONRSPQRYQUOTE: + { + this->processRspQryQuote(task); + break; + } + + case ONRSPQRYTRANSFERSERIAL: + { + this->processRspQryTransferSerial(task); + break; + } + + case ONRSPQRYACCOUNTREGISTER: + { + this->processRspQryAccountregister(task); + break; + } + + case ONRSPERROR: + { + this->processRspError(task); + break; + } + + case ONRTNORDER: + { + this->processRtnOrder(task); + break; + } + + case ONRTNTRADE: + { + this->processRtnTrade(task); + break; + } + + case ONERRRTNORDERINSERT: + { + this->processErrRtnOrderInsert(task); + break; + } + + case ONERRRTNORDERACTION: + { + this->processErrRtnOrderAction(task); + break; + } + + case ONRTNINSTRUMENTSTATUS: + { + this->processRtnInstrumentStatus(task); + break; + } + + case ONRTNTRADINGNOTICE: + { + this->processRtnTradingNotice(task); + break; + } + + case ONRTNERRORCONDITIONALORDER: + { + this->processRtnErrorConditionalOrder(task); + break; + } + + case ONRTNEXECORDER: + { + this->processRtnExecOrder(task); + break; + } + + case ONERRRTNEXECORDERINSERT: + { + this->processErrRtnExecOrderInsert(task); + break; + } + + case ONERRRTNEXECORDERACTION: + { + this->processErrRtnExecOrderAction(task); + break; + } + + case ONERRRTNFORQUOTEINSERT: + { + this->processErrRtnForQuoteInsert(task); + break; + } + + case ONRTNQUOTE: + { + this->processRtnQuote(task); + break; + } + + case ONERRRTNQUOTEINSERT: + { + this->processErrRtnQuoteInsert(task); + break; + } + + case ONERRRTNQUOTEACTION: + { + this->processErrRtnQuoteAction(task); + break; + } + + case ONRTNFORQUOTERSP: + { + this->processRtnForQuoteRsp(task); + break; + } + + case ONRSPQRYCONTRACTBANK: + { + this->processRspQryContractBank(task); + break; + } + + case ONRSPQRYPARKEDORDER: + { + this->processRspQryParkedOrder(task); + break; + } + + case ONRSPQRYPARKEDORDERACTION: + { + this->processRspQryParkedOrderAction(task); + break; + } + + case ONRSPQRYTRADINGNOTICE: + { + this->processRspQryTradingNotice(task); + break; + } + + case ONRSPQRYBROKERTRADINGPARAMS: + { + this->processRspQryBrokerTradingParams(task); + break; + } + + case ONRSPQRYBROKERTRADINGALGOS: + { + this->processRspQryBrokerTradingAlgos(task); + break; + } + + case ONRTNFROMBANKTOFUTUREBYBANK: + { + this->processRtnFromBankToFutureByBank(task); + break; + } + + case ONRTNFROMFUTURETOBANKBYBANK: + { + this->processRtnFromFutureToBankByBank(task); + break; + } + + case ONRTNREPEALFROMBANKTOFUTUREBYBANK: + { + this->processRtnRepealFromBankToFutureByBank(task); + break; + } + + case ONRTNREPEALFROMFUTURETOBANKBYBANK: + { + this->processRtnRepealFromFutureToBankByBank(task); + break; + } + + case ONRTNFROMBANKTOFUTUREBYFUTURE: + { + this->processRtnFromBankToFutureByFuture(task); + break; + } + + case ONRTNFROMFUTURETOBANKBYFUTURE: + { + this->processRtnFromFutureToBankByFuture(task); + break; + } + + case ONRTNREPEALFROMBANKTOFUTUREBYFUTUREMANUAL: + { + this->processRtnRepealFromBankToFutureByFutureManual(task); + break; + } + + case ONRTNREPEALFROMFUTURETOBANKBYFUTUREMANUAL: + { + this->processRtnRepealFromFutureToBankByFutureManual(task); + break; + } + + case ONRTNQUERYBANKBALANCEBYFUTURE: + { + this->processRtnQueryBankBalanceByFuture(task); + break; + } + + case ONERRRTNBANKTOFUTUREBYFUTURE: + { + this->processErrRtnBankToFutureByFuture(task); + break; + } + + case ONERRRTNFUTURETOBANKBYFUTURE: + { + this->processErrRtnFutureToBankByFuture(task); + break; + } + + case ONERRRTNREPEALBANKTOFUTUREBYFUTUREMANUAL: + { + this->processErrRtnRepealBankToFutureByFutureManual(task); + break; + } + + case ONERRRTNREPEALFUTURETOBANKBYFUTUREMANUAL: + { + this->processErrRtnRepealFutureToBankByFutureManual(task); + break; + } + + case ONERRRTNQUERYBANKBALANCEBYFUTURE: + { + this->processErrRtnQueryBankBalanceByFuture(task); + break; + } + + case ONRTNREPEALFROMBANKTOFUTUREBYFUTURE: + { + this->processRtnRepealFromBankToFutureByFuture(task); + break; + } + + case ONRTNREPEALFROMFUTURETOBANKBYFUTURE: + { + this->processRtnRepealFromFutureToBankByFuture(task); + break; + } + + case ONRSPFROMBANKTOFUTUREBYFUTURE: + { + this->processRspFromBankToFutureByFuture(task); + break; + } + + case ONRSPFROMFUTURETOBANKBYFUTURE: + { + this->processRspFromFutureToBankByFuture(task); + break; + } + + case ONRSPQUERYBANKACCOUNTMONEYBYFUTURE: + { + this->processRspQueryBankAccountMoneyByFuture(task); + break; + } + + case ONRTNOPENACCOUNTBYBANK: + { + this->processRtnOpenAccountByBank(task); + break; + } + + case ONRTNCANCELACCOUNTBYBANK: + { + this->processRtnCancelAccountByBank(task); + break; + } + + case ONRTNCHANGEACCOUNTBYBANK: + { + this->processRtnChangeAccountByBank(task); + break; + } + } + } +} + +void TdApi::processFrontConnected(Task task) +{ + this->onFrontConnected(); +}; + +void TdApi::processFrontDisconnected(Task task) +{ + this->onFrontDisconnected(task.task_id); +}; + +void TdApi::processHeartBeatWarning(Task task) +{ + this->onHeartBeatWarning(task.task_id); +}; + +void TdApi::processRspAuthenticate(Task task) +{ + CThostFtdcRspAuthenticateField task_data = any_cast(task.task_data); + dict data; + data["UserID"] = task_data.UserID; + data["BrokerID"] = task_data.BrokerID; + data["UserProductInfo"] = task_data.UserProductInfo; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspAuthenticate(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspUserLogin(Task task) +{ + CThostFtdcRspUserLoginField task_data = any_cast(task.task_data); + dict data; + data["CZCETime"] = task_data.CZCETime; + data["SHFETime"] = task_data.SHFETime; + data["MaxOrderRef"] = task_data.MaxOrderRef; + data["INETime"] = task_data.INETime; + data["UserID"] = task_data.UserID; + data["TradingDay"] = task_data.TradingDay; + data["SessionID"] = task_data.SessionID; + data["SystemName"] = task_data.SystemName; + data["FrontID"] = task_data.FrontID; + data["FFEXTime"] = task_data.FFEXTime; + data["BrokerID"] = task_data.BrokerID; + data["DCETime"] = task_data.DCETime; + data["LoginTime"] = task_data.LoginTime; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspUserLogin(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspUserLogout(Task task) +{ + CThostFtdcUserLogoutField task_data = any_cast(task.task_data); + dict data; + data["UserID"] = task_data.UserID; + data["BrokerID"] = task_data.BrokerID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspUserLogout(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspUserPasswordUpdate(Task task) +{ + CThostFtdcUserPasswordUpdateField task_data = any_cast(task.task_data); + dict data; + data["UserID"] = task_data.UserID; + data["NewPassword"] = task_data.NewPassword; + data["OldPassword"] = task_data.OldPassword; + data["BrokerID"] = task_data.BrokerID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspUserPasswordUpdate(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspTradingAccountPasswordUpdate(Task task) +{ + CThostFtdcTradingAccountPasswordUpdateField task_data = any_cast(task.task_data); + dict data; + data["CurrencyID"] = task_data.CurrencyID; + data["NewPassword"] = task_data.NewPassword; + data["OldPassword"] = task_data.OldPassword; + data["BrokerID"] = task_data.BrokerID; + data["AccountID"] = task_data.AccountID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspTradingAccountPasswordUpdate(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspOrderInsert(Task task) +{ + CThostFtdcInputOrderField task_data = any_cast(task.task_data); + dict data; + data["ContingentCondition"] = task_data.ContingentCondition; + data["CombOffsetFlag"] = task_data.CombOffsetFlag; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["UserForceClose"] = task_data.UserForceClose; + data["Direction"] = task_data.Direction; + data["IsSwapOrder"] = task_data.IsSwapOrder; + data["VolumeTotalOriginal"] = task_data.VolumeTotalOriginal; + data["OrderPriceType"] = task_data.OrderPriceType; + data["TimeCondition"] = task_data.TimeCondition; + data["IsAutoSuspend"] = task_data.IsAutoSuspend; + data["StopPrice"] = task_data.StopPrice; + data["InstrumentID"] = task_data.InstrumentID; + data["MinVolume"] = task_data.MinVolume; + data["ForceCloseReason"] = task_data.ForceCloseReason; + data["BrokerID"] = task_data.BrokerID; + data["CombHedgeFlag"] = task_data.CombHedgeFlag; + data["GTDDate"] = task_data.GTDDate; + data["BusinessUnit"] = task_data.BusinessUnit; + data["OrderRef"] = task_data.OrderRef; + data["InvestorID"] = task_data.InvestorID; + data["VolumeCondition"] = task_data.VolumeCondition; + data["RequestID"] = task_data.RequestID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspOrderInsert(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspParkedOrderInsert(Task task) +{ + CThostFtdcParkedOrderField task_data = any_cast(task.task_data); + dict data; + data["ContingentCondition"] = task_data.ContingentCondition; + data["CombOffsetFlag"] = task_data.CombOffsetFlag; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["UserForceClose"] = task_data.UserForceClose; + data["Status"] = task_data.Status; + data["Direction"] = task_data.Direction; + data["IsSwapOrder"] = task_data.IsSwapOrder; + data["UserType"] = task_data.UserType; + data["VolumeTotalOriginal"] = task_data.VolumeTotalOriginal; + data["OrderPriceType"] = task_data.OrderPriceType; + data["TimeCondition"] = task_data.TimeCondition; + data["IsAutoSuspend"] = task_data.IsAutoSuspend; + data["StopPrice"] = task_data.StopPrice; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["MinVolume"] = task_data.MinVolume; + data["ForceCloseReason"] = task_data.ForceCloseReason; + data["ErrorID"] = task_data.ErrorID; + data["ParkedOrderID"] = task_data.ParkedOrderID; + data["BrokerID"] = task_data.BrokerID; + data["CombHedgeFlag"] = task_data.CombHedgeFlag; + data["GTDDate"] = task_data.GTDDate; + data["BusinessUnit"] = task_data.BusinessUnit; + data["ErrorMsg"] = task_data.ErrorMsg; + data["OrderRef"] = task_data.OrderRef; + data["InvestorID"] = task_data.InvestorID; + data["VolumeCondition"] = task_data.VolumeCondition; + data["RequestID"] = task_data.RequestID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspParkedOrderInsert(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspParkedOrderAction(Task task) +{ + CThostFtdcParkedOrderActionField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["Status"] = task_data.Status; + data["ExchangeID"] = task_data.ExchangeID; + data["ActionFlag"] = task_data.ActionFlag; + data["OrderActionRef"] = task_data.OrderActionRef; + data["UserType"] = task_data.UserType; + data["ErrorMsg"] = task_data.ErrorMsg; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["OrderRef"] = task_data.OrderRef; + data["InvestorID"] = task_data.InvestorID; + data["SessionID"] = task_data.SessionID; + data["VolumeChange"] = task_data.VolumeChange; + data["BrokerID"] = task_data.BrokerID; + data["RequestID"] = task_data.RequestID; + data["OrderSysID"] = task_data.OrderSysID; + data["ParkedOrderActionID"] = task_data.ParkedOrderActionID; + data["FrontID"] = task_data.FrontID; + data["ErrorID"] = task_data.ErrorID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspParkedOrderAction(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspOrderAction(Task task) +{ + CThostFtdcInputOrderActionField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["ActionFlag"] = task_data.ActionFlag; + data["OrderActionRef"] = task_data.OrderActionRef; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["OrderRef"] = task_data.OrderRef; + data["InvestorID"] = task_data.InvestorID; + data["SessionID"] = task_data.SessionID; + data["VolumeChange"] = task_data.VolumeChange; + data["BrokerID"] = task_data.BrokerID; + data["RequestID"] = task_data.RequestID; + data["OrderSysID"] = task_data.OrderSysID; + data["FrontID"] = task_data.FrontID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspOrderAction(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQueryMaxOrderVolume(Task task) +{ + CThostFtdcQueryMaxOrderVolumeField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["Direction"] = task_data.Direction; + data["OffsetFlag"] = task_data.OffsetFlag; + data["HedgeFlag"] = task_data.HedgeFlag; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["MaxVolume"] = task_data.MaxVolume; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQueryMaxOrderVolume(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspSettlementInfoConfirm(Task task) +{ + CThostFtdcSettlementInfoConfirmField task_data = any_cast(task.task_data); + dict data; + data["ConfirmTime"] = task_data.ConfirmTime; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["ConfirmDate"] = task_data.ConfirmDate; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspSettlementInfoConfirm(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspRemoveParkedOrder(Task task) +{ + CThostFtdcRemoveParkedOrderField task_data = any_cast(task.task_data); + dict data; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["ParkedOrderID"] = task_data.ParkedOrderID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspRemoveParkedOrder(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspRemoveParkedOrderAction(Task task) +{ + CThostFtdcRemoveParkedOrderActionField task_data = any_cast(task.task_data); + dict data; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["ParkedOrderActionID"] = task_data.ParkedOrderActionID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspRemoveParkedOrderAction(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspExecOrderInsert(Task task) +{ + CThostFtdcInputExecOrderField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ExecOrderRef"] = task_data.ExecOrderRef; + data["CloseFlag"] = task_data.CloseFlag; + data["OffsetFlag"] = task_data.OffsetFlag; + data["PosiDirection"] = task_data.PosiDirection; + data["BusinessUnit"] = task_data.BusinessUnit; + data["HedgeFlag"] = task_data.HedgeFlag; + data["UserID"] = task_data.UserID; + data["Volume"] = task_data.Volume; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["RequestID"] = task_data.RequestID; + data["ActionType"] = task_data.ActionType; + data["ReservePositionFlag"] = task_data.ReservePositionFlag; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspExecOrderInsert(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspExecOrderAction(Task task) +{ + CThostFtdcInputExecOrderActionField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ExecOrderSysID"] = task_data.ExecOrderSysID; + data["ExchangeID"] = task_data.ExchangeID; + data["UserID"] = task_data.UserID; + data["ExecOrderRef"] = task_data.ExecOrderRef; + data["InvestorID"] = task_data.InvestorID; + data["SessionID"] = task_data.SessionID; + data["BrokerID"] = task_data.BrokerID; + data["RequestID"] = task_data.RequestID; + data["ActionFlag"] = task_data.ActionFlag; + data["ExecOrderActionRef"] = task_data.ExecOrderActionRef; + data["FrontID"] = task_data.FrontID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspExecOrderAction(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspForQuoteInsert(Task task) +{ + CThostFtdcInputForQuoteField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["UserID"] = task_data.UserID; + data["ForQuoteRef"] = task_data.ForQuoteRef; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspForQuoteInsert(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQuoteInsert(Task task) +{ + CThostFtdcInputQuoteField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["AskHedgeFlag"] = task_data.AskHedgeFlag; + data["BusinessUnit"] = task_data.BusinessUnit; + data["AskPrice"] = task_data.AskPrice; + data["UserID"] = task_data.UserID; + data["AskOffsetFlag"] = task_data.AskOffsetFlag; + data["BidVolume"] = task_data.BidVolume; + data["AskVolume"] = task_data.AskVolume; + data["InvestorID"] = task_data.InvestorID; + data["BidOffsetFlag"] = task_data.BidOffsetFlag; + data["BrokerID"] = task_data.BrokerID; + data["RequestID"] = task_data.RequestID; + data["BidPrice"] = task_data.BidPrice; + data["BidHedgeFlag"] = task_data.BidHedgeFlag; + data["QuoteRef"] = task_data.QuoteRef; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQuoteInsert(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQuoteAction(Task task) +{ + CThostFtdcInputQuoteActionField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["QuoteActionRef"] = task_data.QuoteActionRef; + data["UserID"] = task_data.UserID; + data["InvestorID"] = task_data.InvestorID; + data["SessionID"] = task_data.SessionID; + data["BrokerID"] = task_data.BrokerID; + data["RequestID"] = task_data.RequestID; + data["ActionFlag"] = task_data.ActionFlag; + data["FrontID"] = task_data.FrontID; + data["QuoteSysID"] = task_data.QuoteSysID; + data["QuoteRef"] = task_data.QuoteRef; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQuoteAction(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryOrder(Task task) +{ + CThostFtdcOrderField task_data = any_cast(task.task_data); + dict data; + data["ContingentCondition"] = task_data.ContingentCondition; + data["NotifySequence"] = task_data.NotifySequence; + data["ActiveUserID"] = task_data.ActiveUserID; + data["VolumeTraded"] = task_data.VolumeTraded; + data["UserProductInfo"] = task_data.UserProductInfo; + data["CombOffsetFlag"] = task_data.CombOffsetFlag; + data["TraderID"] = task_data.TraderID; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["UserForceClose"] = task_data.UserForceClose; + data["RelativeOrderSysID"] = task_data.RelativeOrderSysID; + data["Direction"] = task_data.Direction; + data["InstallID"] = task_data.InstallID; + data["IsSwapOrder"] = task_data.IsSwapOrder; + data["ParticipantID"] = task_data.ParticipantID; + data["VolumeTotalOriginal"] = task_data.VolumeTotalOriginal; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["ClientID"] = task_data.ClientID; + data["VolumeTotal"] = task_data.VolumeTotal; + data["OrderPriceType"] = task_data.OrderPriceType; + data["SessionID"] = task_data.SessionID; + data["TimeCondition"] = task_data.TimeCondition; + data["OrderStatus"] = task_data.OrderStatus; + data["OrderSysID"] = task_data.OrderSysID; + data["OrderSubmitStatus"] = task_data.OrderSubmitStatus; + data["IsAutoSuspend"] = task_data.IsAutoSuspend; + data["StopPrice"] = task_data.StopPrice; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["MinVolume"] = task_data.MinVolume; + data["StatusMsg"] = task_data.StatusMsg; + data["SettlementID"] = task_data.SettlementID; + data["ForceCloseReason"] = task_data.ForceCloseReason; + data["OrderType"] = task_data.OrderType; + data["UpdateTime"] = task_data.UpdateTime; + data["TradingDay"] = task_data.TradingDay; + data["ActiveTime"] = task_data.ActiveTime; + data["BrokerID"] = task_data.BrokerID; + data["InsertTime"] = task_data.InsertTime; + data["FrontID"] = task_data.FrontID; + data["SuspendTime"] = task_data.SuspendTime; + data["ClearingPartID"] = task_data.ClearingPartID; + data["CombHedgeFlag"] = task_data.CombHedgeFlag; + data["CancelTime"] = task_data.CancelTime; + data["GTDDate"] = task_data.GTDDate; + data["OrderLocalID"] = task_data.OrderLocalID; + data["BusinessUnit"] = task_data.BusinessUnit; + data["InsertDate"] = task_data.InsertDate; + data["SequenceNo"] = task_data.SequenceNo; + data["OrderRef"] = task_data.OrderRef; + data["BrokerOrderSeq"] = task_data.BrokerOrderSeq; + data["InvestorID"] = task_data.InvestorID; + data["VolumeCondition"] = task_data.VolumeCondition; + data["RequestID"] = task_data.RequestID; + data["OrderSource"] = task_data.OrderSource; + data["ZCETotalTradedVolume"] = task_data.ZCETotalTradedVolume; + data["ActiveTraderID"] = task_data.ActiveTraderID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryOrder(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryTrade(Task task) +{ + CThostFtdcTradeField task_data = any_cast(task.task_data); + dict data; + data["TradeType"] = task_data.TradeType; + data["TraderID"] = task_data.TraderID; + data["HedgeFlag"] = task_data.HedgeFlag; + data["TradeTime"] = task_data.TradeTime; + data["Direction"] = task_data.Direction; + data["ParticipantID"] = task_data.ParticipantID; + data["Price"] = task_data.Price; + data["ClientID"] = task_data.ClientID; + data["Volume"] = task_data.Volume; + data["OrderSysID"] = task_data.OrderSysID; + data["ClearingPartID"] = task_data.ClearingPartID; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["SettlementID"] = task_data.SettlementID; + data["UserID"] = task_data.UserID; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["OffsetFlag"] = task_data.OffsetFlag; + data["OrderLocalID"] = task_data.OrderLocalID; + data["TradeID"] = task_data.TradeID; + data["TradeDate"] = task_data.TradeDate; + data["BusinessUnit"] = task_data.BusinessUnit; + data["SequenceNo"] = task_data.SequenceNo; + data["OrderRef"] = task_data.OrderRef; + data["BrokerOrderSeq"] = task_data.BrokerOrderSeq; + data["InvestorID"] = task_data.InvestorID; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["TradeSource"] = task_data.TradeSource; + data["PriceSource"] = task_data.PriceSource; + data["TradingRole"] = task_data.TradingRole; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryTrade(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryInvestorPosition(Task task) +{ + CThostFtdcInvestorPositionField task_data = any_cast(task.task_data); + dict data; + data["ShortFrozenAmount"] = task_data.ShortFrozenAmount; + data["FrozenMargin"] = task_data.FrozenMargin; + data["HedgeFlag"] = task_data.HedgeFlag; + data["PositionProfit"] = task_data.PositionProfit; + data["Commission"] = task_data.Commission; + data["MarginRateByVolume"] = task_data.MarginRateByVolume; + data["StrikeFrozen"] = task_data.StrikeFrozen; + data["CombPosition"] = task_data.CombPosition; + data["CashIn"] = task_data.CashIn; + data["PreSettlementPrice"] = task_data.PreSettlementPrice; + data["CombLongFrozen"] = task_data.CombLongFrozen; + data["CloseAmount"] = task_data.CloseAmount; + data["PosiDirection"] = task_data.PosiDirection; + data["YdPosition"] = task_data.YdPosition; + data["MarginRateByMoney"] = task_data.MarginRateByMoney; + data["AbandonFrozen"] = task_data.AbandonFrozen; + data["OpenVolume"] = task_data.OpenVolume; + data["CloseVolume"] = task_data.CloseVolume; + data["ExchangeMargin"] = task_data.ExchangeMargin; + data["InstrumentID"] = task_data.InstrumentID; + data["PositionDate"] = task_data.PositionDate; + data["CloseProfitByTrade"] = task_data.CloseProfitByTrade; + data["PreMargin"] = task_data.PreMargin; + data["SettlementID"] = task_data.SettlementID; + data["ShortFrozen"] = task_data.ShortFrozen; + data["LongFrozen"] = task_data.LongFrozen; + data["TodayPosition"] = task_data.TodayPosition; + data["TradingDay"] = task_data.TradingDay; + data["PositionCost"] = task_data.PositionCost; + data["BrokerID"] = task_data.BrokerID; + data["FrozenCash"] = task_data.FrozenCash; + data["OpenAmount"] = task_data.OpenAmount; + data["OpenCost"] = task_data.OpenCost; + data["Position"] = task_data.Position; + data["FrozenCommission"] = task_data.FrozenCommission; + data["CombShortFrozen"] = task_data.CombShortFrozen; + data["OptionValue"] = task_data.OptionValue; + data["CloseProfitByDate"] = task_data.CloseProfitByDate; + data["SettlementPrice"] = task_data.SettlementPrice; + data["LongFrozenAmount"] = task_data.LongFrozenAmount; + data["InvestorID"] = task_data.InvestorID; + data["StrikeFrozenAmount"] = task_data.StrikeFrozenAmount; + data["CloseProfit"] = task_data.CloseProfit; + data["UseMargin"] = task_data.UseMargin; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryInvestorPosition(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryTradingAccount(Task task) +{ + CThostFtdcTradingAccountField task_data = any_cast(task.task_data); + dict data; + data["SpecProductFrozenCommission"] = task_data.SpecProductFrozenCommission; + data["FundMortgageOut"] = task_data.FundMortgageOut; + data["Mortgage"] = task_data.Mortgage; + data["ExchangeDeliveryMargin"] = task_data.ExchangeDeliveryMargin; + data["FrozenMargin"] = task_data.FrozenMargin; + data["WithdrawQuota"] = task_data.WithdrawQuota; + data["PositionProfit"] = task_data.PositionProfit; + data["Commission"] = task_data.Commission; + data["SpecProductCloseProfit"] = task_data.SpecProductCloseProfit; + data["Interest"] = task_data.Interest; + data["SpecProductCommission"] = task_data.SpecProductCommission; + data["CashIn"] = task_data.CashIn; + data["AccountID"] = task_data.AccountID; + data["Available"] = task_data.Available; + data["FundMortgageAvailable"] = task_data.FundMortgageAvailable; + data["OptionCloseProfit"] = task_data.OptionCloseProfit; + data["PreCredit"] = task_data.PreCredit; + data["PreMortgage"] = task_data.PreMortgage; + data["InterestBase"] = task_data.InterestBase; + data["ExchangeMargin"] = task_data.ExchangeMargin; + data["MortgageableFund"] = task_data.MortgageableFund; + data["PreFundMortgageIn"] = task_data.PreFundMortgageIn; + data["PreMargin"] = task_data.PreMargin; + data["SettlementID"] = task_data.SettlementID; + data["FundMortgageIn"] = task_data.FundMortgageIn; + data["DeliveryMargin"] = task_data.DeliveryMargin; + data["SpecProductFrozenMargin"] = task_data.SpecProductFrozenMargin; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["FrozenCash"] = task_data.FrozenCash; + data["Withdraw"] = task_data.Withdraw; + data["OptionValue"] = task_data.OptionValue; + data["Balance"] = task_data.Balance; + data["SpecProductMargin"] = task_data.SpecProductMargin; + data["SpecProductPositionProfitByAlg"] = task_data.SpecProductPositionProfitByAlg; + data["Reserve"] = task_data.Reserve; + data["PreDeposit"] = task_data.PreDeposit; + data["Credit"] = task_data.Credit; + data["CurrencyID"] = task_data.CurrencyID; + data["ReserveBalance"] = task_data.ReserveBalance; + data["SpecProductPositionProfit"] = task_data.SpecProductPositionProfit; + data["SpecProductExchangeMargin"] = task_data.SpecProductExchangeMargin; + data["PreBalance"] = task_data.PreBalance; + data["CurrMargin"] = task_data.CurrMargin; + data["FrozenCommission"] = task_data.FrozenCommission; + data["CloseProfit"] = task_data.CloseProfit; + data["PreFundMortgageOut"] = task_data.PreFundMortgageOut; + data["Deposit"] = task_data.Deposit; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryTradingAccount(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryInvestor(Task task) +{ + CThostFtdcInvestorField task_data = any_cast(task.task_data); + dict data; + data["CommModelID"] = task_data.CommModelID; + data["InvestorName"] = task_data.InvestorName; + data["Mobile"] = task_data.Mobile; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["Telephone"] = task_data.Telephone; + data["MarginModelID"] = task_data.MarginModelID; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["Address"] = task_data.Address; + data["InvestorGroupID"] = task_data.InvestorGroupID; + data["OpenDate"] = task_data.OpenDate; + data["IsActive"] = task_data.IsActive; + data["IdentifiedCardType"] = task_data.IdentifiedCardType; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryInvestor(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryTradingCode(Task task) +{ + CThostFtdcTradingCodeField task_data = any_cast(task.task_data); + dict data; + data["ExchangeID"] = task_data.ExchangeID; + data["ClientID"] = task_data.ClientID; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["ClientIDType"] = task_data.ClientIDType; + data["IsActive"] = task_data.IsActive; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryTradingCode(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryInstrumentMarginRate(Task task) +{ + CThostFtdcInstrumentMarginRateField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ShortMarginRatioByMoney"] = task_data.ShortMarginRatioByMoney; + data["LongMarginRatioByMoney"] = task_data.LongMarginRatioByMoney; + data["IsRelative"] = task_data.IsRelative; + data["HedgeFlag"] = task_data.HedgeFlag; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["InvestorRange"] = task_data.InvestorRange; + data["ShortMarginRatioByVolume"] = task_data.ShortMarginRatioByVolume; + data["LongMarginRatioByVolume"] = task_data.LongMarginRatioByVolume; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryInstrumentMarginRate(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryInstrumentCommissionRate(Task task) +{ + CThostFtdcInstrumentCommissionRateField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["OpenRatioByMoney"] = task_data.OpenRatioByMoney; + data["CloseRatioByVolume"] = task_data.CloseRatioByVolume; + data["CloseTodayRatioByMoney"] = task_data.CloseTodayRatioByMoney; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["InvestorRange"] = task_data.InvestorRange; + data["CloseRatioByMoney"] = task_data.CloseRatioByMoney; + data["OpenRatioByVolume"] = task_data.OpenRatioByVolume; + data["CloseTodayRatioByVolume"] = task_data.CloseTodayRatioByVolume; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryInstrumentCommissionRate(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryExchange(Task task) +{ + CThostFtdcExchangeField task_data = any_cast(task.task_data); + dict data; + data["ExchangeProperty"] = task_data.ExchangeProperty; + data["ExchangeID"] = task_data.ExchangeID; + data["ExchangeName"] = task_data.ExchangeName; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryExchange(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryProduct(Task task) +{ + CThostFtdcProductField task_data = any_cast(task.task_data); + dict data; + data["MaxLimitOrderVolume"] = task_data.MaxLimitOrderVolume; + data["ExchangeID"] = task_data.ExchangeID; + data["MortgageFundUseRange"] = task_data.MortgageFundUseRange; + data["PositionDateType"] = task_data.PositionDateType; + data["MinLimitOrderVolume"] = task_data.MinLimitOrderVolume; + data["CloseDealType"] = task_data.CloseDealType; + data["MaxMarketOrderVolume"] = task_data.MaxMarketOrderVolume; + data["PriceTick"] = task_data.PriceTick; + data["ProductName"] = task_data.ProductName; + data["ExchangeProductID"] = task_data.ExchangeProductID; + data["VolumeMultiple"] = task_data.VolumeMultiple; + data["PositionType"] = task_data.PositionType; + data["MinMarketOrderVolume"] = task_data.MinMarketOrderVolume; + data["ProductClass"] = task_data.ProductClass; + data["UnderlyingMultiple"] = task_data.UnderlyingMultiple; + data["TradeCurrencyID"] = task_data.TradeCurrencyID; + data["ProductID"] = task_data.ProductID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryProduct(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryInstrument(Task task) +{ + CThostFtdcInstrumentField task_data = any_cast(task.task_data); + dict data; + data["IsTrading"] = task_data.IsTrading; + data["ExpireDate"] = task_data.ExpireDate; + data["PositionDateType"] = task_data.PositionDateType; + data["LongMarginRatio"] = task_data.LongMarginRatio; + data["StrikePrice"] = task_data.StrikePrice; + data["UnderlyingMultiple"] = task_data.UnderlyingMultiple; + data["PositionType"] = task_data.PositionType; + data["ProductClass"] = task_data.ProductClass; + data["InstrumentName"] = task_data.InstrumentName; + data["ShortMarginRatio"] = task_data.ShortMarginRatio; + data["VolumeMultiple"] = task_data.VolumeMultiple; + data["MaxMarginSideAlgorithm"] = task_data.MaxMarginSideAlgorithm; + data["DeliveryYear"] = task_data.DeliveryYear; + data["CombinationType"] = task_data.CombinationType; + data["CreateDate"] = task_data.CreateDate; + data["InstrumentID"] = task_data.InstrumentID; + data["MaxLimitOrderVolume"] = task_data.MaxLimitOrderVolume; + data["ExchangeID"] = task_data.ExchangeID; + data["MinLimitOrderVolume"] = task_data.MinLimitOrderVolume; + data["MaxMarketOrderVolume"] = task_data.MaxMarketOrderVolume; + data["OptionsType"] = task_data.OptionsType; + data["StartDelivDate"] = task_data.StartDelivDate; + data["DeliveryMonth"] = task_data.DeliveryMonth; + data["PriceTick"] = task_data.PriceTick; + data["InstLifePhase"] = task_data.InstLifePhase; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["MinMarketOrderVolume"] = task_data.MinMarketOrderVolume; + data["EndDelivDate"] = task_data.EndDelivDate; + data["UnderlyingInstrID"] = task_data.UnderlyingInstrID; + data["OpenDate"] = task_data.OpenDate; + data["ProductID"] = task_data.ProductID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryInstrument(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryDepthMarketData(Task task) +{ + CThostFtdcDepthMarketDataField task_data = any_cast(task.task_data); + dict data; + data["HighestPrice"] = task_data.HighestPrice; + data["BidPrice5"] = task_data.BidPrice5; + data["BidPrice4"] = task_data.BidPrice4; + data["BidPrice1"] = task_data.BidPrice1; + data["BidPrice3"] = task_data.BidPrice3; + data["BidPrice2"] = task_data.BidPrice2; + data["LowerLimitPrice"] = task_data.LowerLimitPrice; + data["OpenPrice"] = task_data.OpenPrice; + data["AskPrice5"] = task_data.AskPrice5; + data["AskPrice4"] = task_data.AskPrice4; + data["AskPrice3"] = task_data.AskPrice3; + data["PreClosePrice"] = task_data.PreClosePrice; + data["AskPrice1"] = task_data.AskPrice1; + data["PreSettlementPrice"] = task_data.PreSettlementPrice; + data["AskVolume1"] = task_data.AskVolume1; + data["UpdateTime"] = task_data.UpdateTime; + data["UpdateMillisec"] = task_data.UpdateMillisec; + data["AveragePrice"] = task_data.AveragePrice; + data["BidVolume5"] = task_data.BidVolume5; + data["BidVolume4"] = task_data.BidVolume4; + data["BidVolume3"] = task_data.BidVolume3; + data["BidVolume2"] = task_data.BidVolume2; + data["PreOpenInterest"] = task_data.PreOpenInterest; + data["AskPrice2"] = task_data.AskPrice2; + data["Volume"] = task_data.Volume; + data["AskVolume3"] = task_data.AskVolume3; + data["AskVolume2"] = task_data.AskVolume2; + data["AskVolume5"] = task_data.AskVolume5; + data["AskVolume4"] = task_data.AskVolume4; + data["UpperLimitPrice"] = task_data.UpperLimitPrice; + data["BidVolume1"] = task_data.BidVolume1; + data["InstrumentID"] = task_data.InstrumentID; + data["ClosePrice"] = task_data.ClosePrice; + data["ExchangeID"] = task_data.ExchangeID; + data["TradingDay"] = task_data.TradingDay; + data["PreDelta"] = task_data.PreDelta; + data["OpenInterest"] = task_data.OpenInterest; + data["CurrDelta"] = task_data.CurrDelta; + data["Turnover"] = task_data.Turnover; + data["LastPrice"] = task_data.LastPrice; + data["SettlementPrice"] = task_data.SettlementPrice; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["LowestPrice"] = task_data.LowestPrice; + data["ActionDay"] = task_data.ActionDay; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryDepthMarketData(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQrySettlementInfo(Task task) +{ + CThostFtdcSettlementInfoField task_data = any_cast(task.task_data); + dict data; + data["SettlementID"] = task_data.SettlementID; + data["InvestorID"] = task_data.InvestorID; + data["SequenceNo"] = task_data.SequenceNo; + data["Content"] = task_data.Content; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQrySettlementInfo(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryTransferBank(Task task) +{ + CThostFtdcTransferBankField task_data = any_cast(task.task_data); + dict data; + data["BankName"] = task_data.BankName; + data["IsActive"] = task_data.IsActive; + data["BankBrchID"] = task_data.BankBrchID; + data["BankID"] = task_data.BankID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryTransferBank(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryInvestorPositionDetail(Task task) +{ + CThostFtdcInvestorPositionDetailField task_data = any_cast(task.task_data); + dict data; + data["PositionProfitByDate"] = task_data.PositionProfitByDate; + data["ExchMargin"] = task_data.ExchMargin; + data["TradeType"] = task_data.TradeType; + data["MarginRateByMoney"] = task_data.MarginRateByMoney; + data["HedgeFlag"] = task_data.HedgeFlag; + data["MarginRateByVolume"] = task_data.MarginRateByVolume; + data["Direction"] = task_data.Direction; + data["CloseAmount"] = task_data.CloseAmount; + data["OpenPrice"] = task_data.OpenPrice; + data["Volume"] = task_data.Volume; + data["LastSettlementPrice"] = task_data.LastSettlementPrice; + data["CloseVolume"] = task_data.CloseVolume; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["CloseProfitByTrade"] = task_data.CloseProfitByTrade; + data["SettlementID"] = task_data.SettlementID; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["Margin"] = task_data.Margin; + data["TradeID"] = task_data.TradeID; + data["PositionProfitByTrade"] = task_data.PositionProfitByTrade; + data["CloseProfitByDate"] = task_data.CloseProfitByDate; + data["SettlementPrice"] = task_data.SettlementPrice; + data["InvestorID"] = task_data.InvestorID; + data["CombInstrumentID"] = task_data.CombInstrumentID; + data["OpenDate"] = task_data.OpenDate; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryInvestorPositionDetail(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryNotice(Task task) +{ + CThostFtdcNoticeField task_data = any_cast(task.task_data); + dict data; + data["Content"] = task_data.Content; + data["SequenceLabel"] = task_data.SequenceLabel; + data["BrokerID"] = task_data.BrokerID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryNotice(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQrySettlementInfoConfirm(Task task) +{ + CThostFtdcSettlementInfoConfirmField task_data = any_cast(task.task_data); + dict data; + data["ConfirmTime"] = task_data.ConfirmTime; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["ConfirmDate"] = task_data.ConfirmDate; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQrySettlementInfoConfirm(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryInvestorPositionCombineDetail(Task task) +{ + CThostFtdcInvestorPositionCombineDetailField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["TradeGroupID"] = task_data.TradeGroupID; + data["ExchangeID"] = task_data.ExchangeID; + data["MarginRateByVolume"] = task_data.MarginRateByVolume; + data["ComTradeID"] = task_data.ComTradeID; + data["SettlementID"] = task_data.SettlementID; + data["InvestorID"] = task_data.InvestorID; + data["TotalAmt"] = task_data.TotalAmt; + data["Margin"] = task_data.Margin; + data["ExchMargin"] = task_data.ExchMargin; + data["LegMultiple"] = task_data.LegMultiple; + data["HedgeFlag"] = task_data.HedgeFlag; + data["TradeID"] = task_data.TradeID; + data["LegID"] = task_data.LegID; + data["TradingDay"] = task_data.TradingDay; + data["MarginRateByMoney"] = task_data.MarginRateByMoney; + data["Direction"] = task_data.Direction; + data["BrokerID"] = task_data.BrokerID; + data["CombInstrumentID"] = task_data.CombInstrumentID; + data["OpenDate"] = task_data.OpenDate; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryInvestorPositionCombineDetail(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryCFMMCTradingAccountKey(Task task) +{ + CThostFtdcCFMMCTradingAccountKeyField task_data = any_cast(task.task_data); + dict data; + data["KeyID"] = task_data.KeyID; + data["BrokerID"] = task_data.BrokerID; + data["ParticipantID"] = task_data.ParticipantID; + data["CurrentKey"] = task_data.CurrentKey; + data["AccountID"] = task_data.AccountID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryCFMMCTradingAccountKey(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryEWarrantOffset(Task task) +{ + CThostFtdcEWarrantOffsetField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["InvestorID"] = task_data.InvestorID; + data["HedgeFlag"] = task_data.HedgeFlag; + data["Direction"] = task_data.Direction; + data["Volume"] = task_data.Volume; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryEWarrantOffset(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryInvestorProductGroupMargin(Task task) +{ + CThostFtdcInvestorProductGroupMarginField task_data = any_cast(task.task_data); + dict data; + data["ExchMargin"] = task_data.ExchMargin; + data["ShortExchOffsetAmount"] = task_data.ShortExchOffsetAmount; + data["FrozenMargin"] = task_data.FrozenMargin; + data["ShortFrozenMargin"] = task_data.ShortFrozenMargin; + data["HedgeFlag"] = task_data.HedgeFlag; + data["PositionProfit"] = task_data.PositionProfit; + data["Commission"] = task_data.Commission; + data["LongOffsetAmount"] = task_data.LongOffsetAmount; + data["CashIn"] = task_data.CashIn; + data["ShortUseMargin"] = task_data.ShortUseMargin; + data["ShortOffsetAmount"] = task_data.ShortOffsetAmount; + data["SettlementID"] = task_data.SettlementID; + data["LongExchOffsetAmount"] = task_data.LongExchOffsetAmount; + data["LongUseMargin"] = task_data.LongUseMargin; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["FrozenCash"] = task_data.FrozenCash; + data["LongFrozenMargin"] = task_data.LongFrozenMargin; + data["ShortExchMargin"] = task_data.ShortExchMargin; + data["FrozenCommission"] = task_data.FrozenCommission; + data["ProductGroupID"] = task_data.ProductGroupID; + data["ExchOffsetAmount"] = task_data.ExchOffsetAmount; + data["InvestorID"] = task_data.InvestorID; + data["LongExchMargin"] = task_data.LongExchMargin; + data["CloseProfit"] = task_data.CloseProfit; + data["OffsetAmount"] = task_data.OffsetAmount; + data["UseMargin"] = task_data.UseMargin; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryInvestorProductGroupMargin(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryExchangeMarginRate(Task task) +{ + CThostFtdcExchangeMarginRateField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ShortMarginRatioByMoney"] = task_data.ShortMarginRatioByMoney; + data["LongMarginRatioByMoney"] = task_data.LongMarginRatioByMoney; + data["HedgeFlag"] = task_data.HedgeFlag; + data["BrokerID"] = task_data.BrokerID; + data["ShortMarginRatioByVolume"] = task_data.ShortMarginRatioByVolume; + data["LongMarginRatioByVolume"] = task_data.LongMarginRatioByVolume; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryExchangeMarginRate(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryExchangeMarginRateAdjust(Task task) +{ + CThostFtdcExchangeMarginRateAdjustField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ShortMarginRatioByMoney"] = task_data.ShortMarginRatioByMoney; + data["ExchLongMarginRatioByMoney"] = task_data.ExchLongMarginRatioByMoney; + data["ExchShortMarginRatioByMoney"] = task_data.ExchShortMarginRatioByMoney; + data["LongMarginRatioByMoney"] = task_data.LongMarginRatioByMoney; + data["ExchShortMarginRatioByVolume"] = task_data.ExchShortMarginRatioByVolume; + data["ExchLongMarginRatioByVolume"] = task_data.ExchLongMarginRatioByVolume; + data["NoShortMarginRatioByMoney"] = task_data.NoShortMarginRatioByMoney; + data["NoLongMarginRatioByMoney"] = task_data.NoLongMarginRatioByMoney; + data["HedgeFlag"] = task_data.HedgeFlag; + data["NoLongMarginRatioByVolume"] = task_data.NoLongMarginRatioByVolume; + data["NoShortMarginRatioByVolume"] = task_data.NoShortMarginRatioByVolume; + data["BrokerID"] = task_data.BrokerID; + data["ShortMarginRatioByVolume"] = task_data.ShortMarginRatioByVolume; + data["LongMarginRatioByVolume"] = task_data.LongMarginRatioByVolume; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryExchangeMarginRateAdjust(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryExchangeRate(Task task) +{ + CThostFtdcExchangeRateField task_data = any_cast(task.task_data); + dict data; + data["FromCurrencyID"] = task_data.FromCurrencyID; + data["FromCurrencyUnit"] = task_data.FromCurrencyUnit; + data["BrokerID"] = task_data.BrokerID; + data["ExchangeRate"] = task_data.ExchangeRate; + data["ToCurrencyID"] = task_data.ToCurrencyID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryExchangeRate(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQrySecAgentACIDMap(Task task) +{ + CThostFtdcSecAgentACIDMapField task_data = any_cast(task.task_data); + dict data; + data["CurrencyID"] = task_data.CurrencyID; + data["UserID"] = task_data.UserID; + data["BrokerSecAgentID"] = task_data.BrokerSecAgentID; + data["BrokerID"] = task_data.BrokerID; + data["AccountID"] = task_data.AccountID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQrySecAgentACIDMap(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryOptionInstrTradeCost(Task task) +{ + CThostFtdcOptionInstrTradeCostField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchMiniMargin"] = task_data.ExchMiniMargin; + data["HedgeFlag"] = task_data.HedgeFlag; + data["InvestorID"] = task_data.InvestorID; + data["Royalty"] = task_data.Royalty; + data["BrokerID"] = task_data.BrokerID; + data["MiniMargin"] = task_data.MiniMargin; + data["ExchFixedMargin"] = task_data.ExchFixedMargin; + data["FixedMargin"] = task_data.FixedMargin; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryOptionInstrTradeCost(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryOptionInstrCommRate(Task task) +{ + CThostFtdcOptionInstrCommRateField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["OpenRatioByMoney"] = task_data.OpenRatioByMoney; + data["StrikeRatioByMoney"] = task_data.StrikeRatioByMoney; + data["CloseRatioByVolume"] = task_data.CloseRatioByVolume; + data["CloseTodayRatioByMoney"] = task_data.CloseTodayRatioByMoney; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["InvestorRange"] = task_data.InvestorRange; + data["CloseRatioByMoney"] = task_data.CloseRatioByMoney; + data["OpenRatioByVolume"] = task_data.OpenRatioByVolume; + data["StrikeRatioByVolume"] = task_data.StrikeRatioByVolume; + data["CloseTodayRatioByVolume"] = task_data.CloseTodayRatioByVolume; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryOptionInstrCommRate(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryExecOrder(Task task) +{ + CThostFtdcExecOrderField task_data = any_cast(task.task_data); + dict data; + data["NotifySequence"] = task_data.NotifySequence; + data["CloseFlag"] = task_data.CloseFlag; + data["ActiveUserID"] = task_data.ActiveUserID; + data["UserProductInfo"] = task_data.UserProductInfo; + data["TraderID"] = task_data.TraderID; + data["HedgeFlag"] = task_data.HedgeFlag; + data["ExecResult"] = task_data.ExecResult; + data["ReservePositionFlag"] = task_data.ReservePositionFlag; + data["Volume"] = task_data.Volume; + data["InstallID"] = task_data.InstallID; + data["OffsetFlag"] = task_data.OffsetFlag; + data["PosiDirection"] = task_data.PosiDirection; + data["ClientID"] = task_data.ClientID; + data["ExecOrderRef"] = task_data.ExecOrderRef; + data["SessionID"] = task_data.SessionID; + data["ActionType"] = task_data.ActionType; + data["OrderSubmitStatus"] = task_data.OrderSubmitStatus; + data["ClearingPartID"] = task_data.ClearingPartID; + data["InstrumentID"] = task_data.InstrumentID; + data["ExecOrderSysID"] = task_data.ExecOrderSysID; + data["ExchangeID"] = task_data.ExchangeID; + data["StatusMsg"] = task_data.StatusMsg; + data["SettlementID"] = task_data.SettlementID; + data["UserID"] = task_data.UserID; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["InsertTime"] = task_data.InsertTime; + data["ExecOrderLocalID"] = task_data.ExecOrderLocalID; + data["ParticipantID"] = task_data.ParticipantID; + data["CancelTime"] = task_data.CancelTime; + data["BusinessUnit"] = task_data.BusinessUnit; + data["InsertDate"] = task_data.InsertDate; + data["SequenceNo"] = task_data.SequenceNo; + data["InvestorID"] = task_data.InvestorID; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["RequestID"] = task_data.RequestID; + data["BrokerExecOrderSeq"] = task_data.BrokerExecOrderSeq; + data["FrontID"] = task_data.FrontID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryExecOrder(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryForQuote(Task task) +{ + CThostFtdcForQuoteField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ForQuoteRef"] = task_data.ForQuoteRef; + data["ExchangeID"] = task_data.ExchangeID; + data["InstallID"] = task_data.InstallID; + data["ForQuoteLocalID"] = task_data.ForQuoteLocalID; + data["ParticipantID"] = task_data.ParticipantID; + data["ActiveUserID"] = task_data.ActiveUserID; + data["InsertDate"] = task_data.InsertDate; + data["TraderID"] = task_data.TraderID; + data["UserID"] = task_data.UserID; + data["SessionID"] = task_data.SessionID; + data["ClientID"] = task_data.ClientID; + data["StatusMsg"] = task_data.StatusMsg; + data["InvestorID"] = task_data.InvestorID; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["BrokerID"] = task_data.BrokerID; + data["InsertTime"] = task_data.InsertTime; + data["ForQuoteStatus"] = task_data.ForQuoteStatus; + data["FrontID"] = task_data.FrontID; + data["BrokerForQutoSeq"] = task_data.BrokerForQutoSeq; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryForQuote(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryQuote(Task task) +{ + CThostFtdcQuoteField task_data = any_cast(task.task_data); + dict data; + data["NotifySequence"] = task_data.NotifySequence; + data["AskHedgeFlag"] = task_data.AskHedgeFlag; + data["BidOrderSysID"] = task_data.BidOrderSysID; + data["TraderID"] = task_data.TraderID; + data["UserID"] = task_data.UserID; + data["AskVolume"] = task_data.AskVolume; + data["ActiveUserID"] = task_data.ActiveUserID; + data["BidHedgeFlag"] = task_data.BidHedgeFlag; + data["QuoteRef"] = task_data.QuoteRef; + data["AskOrderSysID"] = task_data.AskOrderSysID; + data["InstallID"] = task_data.InstallID; + data["ParticipantID"] = task_data.ParticipantID; + data["UserProductInfo"] = task_data.UserProductInfo; + data["AskOffsetFlag"] = task_data.AskOffsetFlag; + data["ClientID"] = task_data.ClientID; + data["SessionID"] = task_data.SessionID; + data["BidOffsetFlag"] = task_data.BidOffsetFlag; + data["BidPrice"] = task_data.BidPrice; + data["OrderSubmitStatus"] = task_data.OrderSubmitStatus; + data["InstrumentID"] = task_data.InstrumentID; + data["QuoteStatus"] = task_data.QuoteStatus; + data["ExchangeID"] = task_data.ExchangeID; + data["StatusMsg"] = task_data.StatusMsg; + data["SettlementID"] = task_data.SettlementID; + data["QuoteLocalID"] = task_data.QuoteLocalID; + data["BidVolume"] = task_data.BidVolume; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["InsertTime"] = task_data.InsertTime; + data["QuoteSysID"] = task_data.QuoteSysID; + data["ClearingPartID"] = task_data.ClearingPartID; + data["CancelTime"] = task_data.CancelTime; + data["BusinessUnit"] = task_data.BusinessUnit; + data["InsertDate"] = task_data.InsertDate; + data["AskPrice"] = task_data.AskPrice; + data["SequenceNo"] = task_data.SequenceNo; + data["InvestorID"] = task_data.InvestorID; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["RequestID"] = task_data.RequestID; + data["BrokerQuoteSeq"] = task_data.BrokerQuoteSeq; + data["FrontID"] = task_data.FrontID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryQuote(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryTransferSerial(Task task) +{ + CThostFtdcTransferSerialField task_data = any_cast(task.task_data); + dict data; + data["BankNewAccount"] = task_data.BankNewAccount; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["TradeTime"] = task_data.TradeTime; + data["OperatorCode"] = task_data.OperatorCode; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["PlateSerial"] = task_data.PlateSerial; + data["FutureAccType"] = task_data.FutureAccType; + data["ErrorID"] = task_data.ErrorID; + data["BankSerial"] = task_data.BankSerial; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["IdCardType"] = task_data.IdCardType; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["FutureSerial"] = task_data.FutureSerial; + data["InvestorID"] = task_data.InvestorID; + data["ErrorMsg"] = task_data.ErrorMsg; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["AvailabilityFlag"] = task_data.AvailabilityFlag; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryTransferSerial(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryAccountregister(Task task) +{ + CThostFtdcAccountregisterField task_data = any_cast(task.task_data); + dict data; + data["BankAccount"] = task_data.BankAccount; + data["CustType"] = task_data.CustType; + data["CustomerName"] = task_data.CustomerName; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["OutDate"] = task_data.OutDate; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["BankBranchID"] = task_data.BankBranchID; + data["RegDate"] = task_data.RegDate; + data["BrokerID"] = task_data.BrokerID; + data["BankID"] = task_data.BankID; + data["TID"] = task_data.TID; + data["OpenOrDestroy"] = task_data.OpenOrDestroy; + data["IdCardType"] = task_data.IdCardType; + data["TradeDay"] = task_data.TradeDay; + data["BankAccType"] = task_data.BankAccType; + data["AccountID"] = task_data.AccountID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryAccountregister(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspError(Task task) +{ + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspError(error, task.task_id, task.task_last); +}; + +void TdApi::processRtnOrder(Task task) +{ + CThostFtdcOrderField task_data = any_cast(task.task_data); + dict data; + data["ContingentCondition"] = task_data.ContingentCondition; + data["NotifySequence"] = task_data.NotifySequence; + data["ActiveUserID"] = task_data.ActiveUserID; + data["VolumeTraded"] = task_data.VolumeTraded; + data["UserProductInfo"] = task_data.UserProductInfo; + data["CombOffsetFlag"] = task_data.CombOffsetFlag; + data["TraderID"] = task_data.TraderID; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["UserForceClose"] = task_data.UserForceClose; + data["RelativeOrderSysID"] = task_data.RelativeOrderSysID; + data["Direction"] = task_data.Direction; + data["InstallID"] = task_data.InstallID; + data["IsSwapOrder"] = task_data.IsSwapOrder; + data["ParticipantID"] = task_data.ParticipantID; + data["VolumeTotalOriginal"] = task_data.VolumeTotalOriginal; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["ClientID"] = task_data.ClientID; + data["VolumeTotal"] = task_data.VolumeTotal; + data["OrderPriceType"] = task_data.OrderPriceType; + data["SessionID"] = task_data.SessionID; + data["TimeCondition"] = task_data.TimeCondition; + data["OrderStatus"] = task_data.OrderStatus; + data["OrderSysID"] = task_data.OrderSysID; + data["OrderSubmitStatus"] = task_data.OrderSubmitStatus; + data["IsAutoSuspend"] = task_data.IsAutoSuspend; + data["StopPrice"] = task_data.StopPrice; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["MinVolume"] = task_data.MinVolume; + data["StatusMsg"] = task_data.StatusMsg; + data["SettlementID"] = task_data.SettlementID; + data["ForceCloseReason"] = task_data.ForceCloseReason; + data["OrderType"] = task_data.OrderType; + data["UpdateTime"] = task_data.UpdateTime; + data["TradingDay"] = task_data.TradingDay; + data["ActiveTime"] = task_data.ActiveTime; + data["BrokerID"] = task_data.BrokerID; + data["InsertTime"] = task_data.InsertTime; + data["FrontID"] = task_data.FrontID; + data["SuspendTime"] = task_data.SuspendTime; + data["ClearingPartID"] = task_data.ClearingPartID; + data["CombHedgeFlag"] = task_data.CombHedgeFlag; + data["CancelTime"] = task_data.CancelTime; + data["GTDDate"] = task_data.GTDDate; + data["OrderLocalID"] = task_data.OrderLocalID; + data["BusinessUnit"] = task_data.BusinessUnit; + data["InsertDate"] = task_data.InsertDate; + data["SequenceNo"] = task_data.SequenceNo; + data["OrderRef"] = task_data.OrderRef; + data["BrokerOrderSeq"] = task_data.BrokerOrderSeq; + data["InvestorID"] = task_data.InvestorID; + data["VolumeCondition"] = task_data.VolumeCondition; + data["RequestID"] = task_data.RequestID; + data["OrderSource"] = task_data.OrderSource; + data["ZCETotalTradedVolume"] = task_data.ZCETotalTradedVolume; + data["ActiveTraderID"] = task_data.ActiveTraderID; + + this->onRtnOrder(data); +}; + +void TdApi::processRtnTrade(Task task) +{ + CThostFtdcTradeField task_data = any_cast(task.task_data); + dict data; + data["TradeType"] = task_data.TradeType; + data["TraderID"] = task_data.TraderID; + data["HedgeFlag"] = task_data.HedgeFlag; + data["TradeTime"] = task_data.TradeTime; + data["Direction"] = task_data.Direction; + data["ParticipantID"] = task_data.ParticipantID; + data["Price"] = task_data.Price; + data["ClientID"] = task_data.ClientID; + data["Volume"] = task_data.Volume; + data["OrderSysID"] = task_data.OrderSysID; + data["ClearingPartID"] = task_data.ClearingPartID; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["SettlementID"] = task_data.SettlementID; + data["UserID"] = task_data.UserID; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["OffsetFlag"] = task_data.OffsetFlag; + data["OrderLocalID"] = task_data.OrderLocalID; + data["TradeID"] = task_data.TradeID; + data["TradeDate"] = task_data.TradeDate; + data["BusinessUnit"] = task_data.BusinessUnit; + data["SequenceNo"] = task_data.SequenceNo; + data["OrderRef"] = task_data.OrderRef; + data["BrokerOrderSeq"] = task_data.BrokerOrderSeq; + data["InvestorID"] = task_data.InvestorID; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["TradeSource"] = task_data.TradeSource; + data["PriceSource"] = task_data.PriceSource; + data["TradingRole"] = task_data.TradingRole; + + this->onRtnTrade(data); +}; + +void TdApi::processErrRtnOrderInsert(Task task) +{ + CThostFtdcInputOrderField task_data = any_cast(task.task_data); + dict data; + data["ContingentCondition"] = task_data.ContingentCondition; + data["CombOffsetFlag"] = task_data.CombOffsetFlag; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["UserForceClose"] = task_data.UserForceClose; + data["Direction"] = task_data.Direction; + data["IsSwapOrder"] = task_data.IsSwapOrder; + data["VolumeTotalOriginal"] = task_data.VolumeTotalOriginal; + data["OrderPriceType"] = task_data.OrderPriceType; + data["TimeCondition"] = task_data.TimeCondition; + data["IsAutoSuspend"] = task_data.IsAutoSuspend; + data["StopPrice"] = task_data.StopPrice; + data["InstrumentID"] = task_data.InstrumentID; + data["MinVolume"] = task_data.MinVolume; + data["ForceCloseReason"] = task_data.ForceCloseReason; + data["BrokerID"] = task_data.BrokerID; + data["CombHedgeFlag"] = task_data.CombHedgeFlag; + data["GTDDate"] = task_data.GTDDate; + data["BusinessUnit"] = task_data.BusinessUnit; + data["OrderRef"] = task_data.OrderRef; + data["InvestorID"] = task_data.InvestorID; + data["VolumeCondition"] = task_data.VolumeCondition; + data["RequestID"] = task_data.RequestID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnOrderInsert(data, error); +}; + +void TdApi::processErrRtnOrderAction(Task task) +{ + CThostFtdcOrderActionField task_data = any_cast(task.task_data); + dict data; + data["ActionTime"] = task_data.ActionTime; + data["InvestorID"] = task_data.InvestorID; + data["TraderID"] = task_data.TraderID; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["OrderActionStatus"] = task_data.OrderActionStatus; + data["InstallID"] = task_data.InstallID; + data["ParticipantID"] = task_data.ParticipantID; + data["OrderActionRef"] = task_data.OrderActionRef; + data["VolumeChange"] = task_data.VolumeChange; + data["SessionID"] = task_data.SessionID; + data["ActionFlag"] = task_data.ActionFlag; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["StatusMsg"] = task_data.StatusMsg; + data["OrderSysID"] = task_data.OrderSysID; + data["BrokerID"] = task_data.BrokerID; + data["ClientID"] = task_data.ClientID; + data["ActionDate"] = task_data.ActionDate; + data["OrderLocalID"] = task_data.OrderLocalID; + data["BusinessUnit"] = task_data.BusinessUnit; + data["OrderRef"] = task_data.OrderRef; + data["ActionLocalID"] = task_data.ActionLocalID; + data["RequestID"] = task_data.RequestID; + data["FrontID"] = task_data.FrontID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnOrderAction(data, error); +}; + +void TdApi::processRtnInstrumentStatus(Task task) +{ + CThostFtdcInstrumentStatusField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["EnterTime"] = task_data.EnterTime; + data["SettlementGroupID"] = task_data.SettlementGroupID; + data["TradingSegmentSN"] = task_data.TradingSegmentSN; + data["EnterReason"] = task_data.EnterReason; + data["InstrumentStatus"] = task_data.InstrumentStatus; + data["ExchangeInstID"] = task_data.ExchangeInstID; + + this->onRtnInstrumentStatus(data); +}; + +void TdApi::processRtnTradingNotice(Task task) +{ + CThostFtdcTradingNoticeInfoField task_data = any_cast(task.task_data); + dict data; + data["SequenceSeries"] = task_data.SequenceSeries; + data["SequenceNo"] = task_data.SequenceNo; + data["FieldContent"] = task_data.FieldContent; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["SendTime"] = task_data.SendTime; + + this->onRtnTradingNotice(data); +}; + +void TdApi::processRtnErrorConditionalOrder(Task task) +{ + CThostFtdcErrorConditionalOrderField task_data = any_cast(task.task_data); + dict data; + data["ContingentCondition"] = task_data.ContingentCondition; + data["NotifySequence"] = task_data.NotifySequence; + data["ActiveUserID"] = task_data.ActiveUserID; + data["VolumeTraded"] = task_data.VolumeTraded; + data["UserProductInfo"] = task_data.UserProductInfo; + data["CombOffsetFlag"] = task_data.CombOffsetFlag; + data["TraderID"] = task_data.TraderID; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["UserForceClose"] = task_data.UserForceClose; + data["RelativeOrderSysID"] = task_data.RelativeOrderSysID; + data["Direction"] = task_data.Direction; + data["InstallID"] = task_data.InstallID; + data["IsSwapOrder"] = task_data.IsSwapOrder; + data["ParticipantID"] = task_data.ParticipantID; + data["VolumeTotalOriginal"] = task_data.VolumeTotalOriginal; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["ClientID"] = task_data.ClientID; + data["VolumeTotal"] = task_data.VolumeTotal; + data["OrderPriceType"] = task_data.OrderPriceType; + data["SessionID"] = task_data.SessionID; + data["TimeCondition"] = task_data.TimeCondition; + data["OrderStatus"] = task_data.OrderStatus; + data["OrderSysID"] = task_data.OrderSysID; + data["OrderSubmitStatus"] = task_data.OrderSubmitStatus; + data["IsAutoSuspend"] = task_data.IsAutoSuspend; + data["StopPrice"] = task_data.StopPrice; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["MinVolume"] = task_data.MinVolume; + data["StatusMsg"] = task_data.StatusMsg; + data["SettlementID"] = task_data.SettlementID; + data["ForceCloseReason"] = task_data.ForceCloseReason; + data["OrderType"] = task_data.OrderType; + data["ErrorID"] = task_data.ErrorID; + data["UpdateTime"] = task_data.UpdateTime; + data["TradingDay"] = task_data.TradingDay; + data["ActiveTime"] = task_data.ActiveTime; + data["BrokerID"] = task_data.BrokerID; + data["InsertTime"] = task_data.InsertTime; + data["FrontID"] = task_data.FrontID; + data["SuspendTime"] = task_data.SuspendTime; + data["ClearingPartID"] = task_data.ClearingPartID; + data["CombHedgeFlag"] = task_data.CombHedgeFlag; + data["CancelTime"] = task_data.CancelTime; + data["GTDDate"] = task_data.GTDDate; + data["OrderLocalID"] = task_data.OrderLocalID; + data["BusinessUnit"] = task_data.BusinessUnit; + data["InsertDate"] = task_data.InsertDate; + data["SequenceNo"] = task_data.SequenceNo; + data["OrderRef"] = task_data.OrderRef; + data["BrokerOrderSeq"] = task_data.BrokerOrderSeq; + data["InvestorID"] = task_data.InvestorID; + data["VolumeCondition"] = task_data.VolumeCondition; + data["RequestID"] = task_data.RequestID; + data["ErrorMsg"] = task_data.ErrorMsg; + data["OrderSource"] = task_data.OrderSource; + data["ZCETotalTradedVolume"] = task_data.ZCETotalTradedVolume; + data["ActiveTraderID"] = task_data.ActiveTraderID; + + this->onRtnErrorConditionalOrder(data); +}; + +void TdApi::processRtnExecOrder(Task task) +{ + CThostFtdcExecOrderField task_data = any_cast(task.task_data); + dict data; + data["NotifySequence"] = task_data.NotifySequence; + data["CloseFlag"] = task_data.CloseFlag; + data["ActiveUserID"] = task_data.ActiveUserID; + data["UserProductInfo"] = task_data.UserProductInfo; + data["TraderID"] = task_data.TraderID; + data["HedgeFlag"] = task_data.HedgeFlag; + data["ExecResult"] = task_data.ExecResult; + data["ReservePositionFlag"] = task_data.ReservePositionFlag; + data["Volume"] = task_data.Volume; + data["InstallID"] = task_data.InstallID; + data["OffsetFlag"] = task_data.OffsetFlag; + data["PosiDirection"] = task_data.PosiDirection; + data["ClientID"] = task_data.ClientID; + data["ExecOrderRef"] = task_data.ExecOrderRef; + data["SessionID"] = task_data.SessionID; + data["ActionType"] = task_data.ActionType; + data["OrderSubmitStatus"] = task_data.OrderSubmitStatus; + data["ClearingPartID"] = task_data.ClearingPartID; + data["InstrumentID"] = task_data.InstrumentID; + data["ExecOrderSysID"] = task_data.ExecOrderSysID; + data["ExchangeID"] = task_data.ExchangeID; + data["StatusMsg"] = task_data.StatusMsg; + data["SettlementID"] = task_data.SettlementID; + data["UserID"] = task_data.UserID; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["InsertTime"] = task_data.InsertTime; + data["ExecOrderLocalID"] = task_data.ExecOrderLocalID; + data["ParticipantID"] = task_data.ParticipantID; + data["CancelTime"] = task_data.CancelTime; + data["BusinessUnit"] = task_data.BusinessUnit; + data["InsertDate"] = task_data.InsertDate; + data["SequenceNo"] = task_data.SequenceNo; + data["InvestorID"] = task_data.InvestorID; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["RequestID"] = task_data.RequestID; + data["BrokerExecOrderSeq"] = task_data.BrokerExecOrderSeq; + data["FrontID"] = task_data.FrontID; + + this->onRtnExecOrder(data); +}; + +void TdApi::processErrRtnExecOrderInsert(Task task) +{ + CThostFtdcInputExecOrderField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["ExecOrderRef"] = task_data.ExecOrderRef; + data["CloseFlag"] = task_data.CloseFlag; + data["OffsetFlag"] = task_data.OffsetFlag; + data["PosiDirection"] = task_data.PosiDirection; + data["BusinessUnit"] = task_data.BusinessUnit; + data["HedgeFlag"] = task_data.HedgeFlag; + data["UserID"] = task_data.UserID; + data["Volume"] = task_data.Volume; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["RequestID"] = task_data.RequestID; + data["ActionType"] = task_data.ActionType; + data["ReservePositionFlag"] = task_data.ReservePositionFlag; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnExecOrderInsert(data, error); +}; + +void TdApi::processErrRtnExecOrderAction(Task task) +{ + CThostFtdcExecOrderActionField task_data = any_cast(task.task_data); + dict data; + data["ActionTime"] = task_data.ActionTime; + data["TraderID"] = task_data.TraderID; + data["UserID"] = task_data.UserID; + data["OrderActionStatus"] = task_data.OrderActionStatus; + data["InstallID"] = task_data.InstallID; + data["ParticipantID"] = task_data.ParticipantID; + data["InvestorID"] = task_data.InvestorID; + data["ClientID"] = task_data.ClientID; + data["ExecOrderRef"] = task_data.ExecOrderRef; + data["SessionID"] = task_data.SessionID; + data["ActionType"] = task_data.ActionType; + data["ActionFlag"] = task_data.ActionFlag; + data["InstrumentID"] = task_data.InstrumentID; + data["ExecOrderSysID"] = task_data.ExecOrderSysID; + data["ExchangeID"] = task_data.ExchangeID; + data["StatusMsg"] = task_data.StatusMsg; + data["BrokerID"] = task_data.BrokerID; + data["ExecOrderLocalID"] = task_data.ExecOrderLocalID; + data["ActionDate"] = task_data.ActionDate; + data["BusinessUnit"] = task_data.BusinessUnit; + data["ActionLocalID"] = task_data.ActionLocalID; + data["RequestID"] = task_data.RequestID; + data["ExecOrderActionRef"] = task_data.ExecOrderActionRef; + data["FrontID"] = task_data.FrontID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnExecOrderAction(data, error); +}; + +void TdApi::processErrRtnForQuoteInsert(Task task) +{ + CThostFtdcInputForQuoteField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["UserID"] = task_data.UserID; + data["ForQuoteRef"] = task_data.ForQuoteRef; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnForQuoteInsert(data, error); +}; + +void TdApi::processRtnQuote(Task task) +{ + CThostFtdcQuoteField task_data = any_cast(task.task_data); + dict data; + data["NotifySequence"] = task_data.NotifySequence; + data["AskHedgeFlag"] = task_data.AskHedgeFlag; + data["BidOrderSysID"] = task_data.BidOrderSysID; + data["TraderID"] = task_data.TraderID; + data["UserID"] = task_data.UserID; + data["AskVolume"] = task_data.AskVolume; + data["ActiveUserID"] = task_data.ActiveUserID; + data["BidHedgeFlag"] = task_data.BidHedgeFlag; + data["QuoteRef"] = task_data.QuoteRef; + data["AskOrderSysID"] = task_data.AskOrderSysID; + data["InstallID"] = task_data.InstallID; + data["ParticipantID"] = task_data.ParticipantID; + data["UserProductInfo"] = task_data.UserProductInfo; + data["AskOffsetFlag"] = task_data.AskOffsetFlag; + data["ClientID"] = task_data.ClientID; + data["SessionID"] = task_data.SessionID; + data["BidOffsetFlag"] = task_data.BidOffsetFlag; + data["BidPrice"] = task_data.BidPrice; + data["OrderSubmitStatus"] = task_data.OrderSubmitStatus; + data["InstrumentID"] = task_data.InstrumentID; + data["QuoteStatus"] = task_data.QuoteStatus; + data["ExchangeID"] = task_data.ExchangeID; + data["StatusMsg"] = task_data.StatusMsg; + data["SettlementID"] = task_data.SettlementID; + data["QuoteLocalID"] = task_data.QuoteLocalID; + data["BidVolume"] = task_data.BidVolume; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["InsertTime"] = task_data.InsertTime; + data["QuoteSysID"] = task_data.QuoteSysID; + data["ClearingPartID"] = task_data.ClearingPartID; + data["CancelTime"] = task_data.CancelTime; + data["BusinessUnit"] = task_data.BusinessUnit; + data["InsertDate"] = task_data.InsertDate; + data["AskPrice"] = task_data.AskPrice; + data["SequenceNo"] = task_data.SequenceNo; + data["InvestorID"] = task_data.InvestorID; + data["ExchangeInstID"] = task_data.ExchangeInstID; + data["RequestID"] = task_data.RequestID; + data["BrokerQuoteSeq"] = task_data.BrokerQuoteSeq; + data["FrontID"] = task_data.FrontID; + + this->onRtnQuote(data); +}; + +void TdApi::processErrRtnQuoteInsert(Task task) +{ + CThostFtdcInputQuoteField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["AskHedgeFlag"] = task_data.AskHedgeFlag; + data["BusinessUnit"] = task_data.BusinessUnit; + data["AskPrice"] = task_data.AskPrice; + data["UserID"] = task_data.UserID; + data["AskOffsetFlag"] = task_data.AskOffsetFlag; + data["BidVolume"] = task_data.BidVolume; + data["AskVolume"] = task_data.AskVolume; + data["InvestorID"] = task_data.InvestorID; + data["BidOffsetFlag"] = task_data.BidOffsetFlag; + data["BrokerID"] = task_data.BrokerID; + data["RequestID"] = task_data.RequestID; + data["BidPrice"] = task_data.BidPrice; + data["BidHedgeFlag"] = task_data.BidHedgeFlag; + data["QuoteRef"] = task_data.QuoteRef; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnQuoteInsert(data, error); +}; + +void TdApi::processErrRtnQuoteAction(Task task) +{ + CThostFtdcQuoteActionField task_data = any_cast(task.task_data); + dict data; + data["ActionTime"] = task_data.ActionTime; + data["TraderID"] = task_data.TraderID; + data["UserID"] = task_data.UserID; + data["OrderActionStatus"] = task_data.OrderActionStatus; + data["QuoteRef"] = task_data.QuoteRef; + data["InstallID"] = task_data.InstallID; + data["ParticipantID"] = task_data.ParticipantID; + data["InvestorID"] = task_data.InvestorID; + data["ClientID"] = task_data.ClientID; + data["SessionID"] = task_data.SessionID; + data["ActionFlag"] = task_data.ActionFlag; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["QuoteActionRef"] = task_data.QuoteActionRef; + data["StatusMsg"] = task_data.StatusMsg; + data["QuoteLocalID"] = task_data.QuoteLocalID; + data["BrokerID"] = task_data.BrokerID; + data["QuoteSysID"] = task_data.QuoteSysID; + data["ActionDate"] = task_data.ActionDate; + data["BusinessUnit"] = task_data.BusinessUnit; + data["ActionLocalID"] = task_data.ActionLocalID; + data["RequestID"] = task_data.RequestID; + data["FrontID"] = task_data.FrontID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnQuoteAction(data, error); +}; + +void TdApi::processRtnForQuoteRsp(Task task) +{ + CThostFtdcForQuoteRspField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["TradingDay"] = task_data.TradingDay; + data["ForQuoteTime"] = task_data.ForQuoteTime; + data["ForQuoteSysID"] = task_data.ForQuoteSysID; + data["ActionDay"] = task_data.ActionDay; + + this->onRtnForQuoteRsp(data); +}; + +void TdApi::processRspQryContractBank(Task task) +{ + CThostFtdcContractBankField task_data = any_cast(task.task_data); + dict data; + data["BankName"] = task_data.BankName; + data["BrokerID"] = task_data.BrokerID; + data["BankBrchID"] = task_data.BankBrchID; + data["BankID"] = task_data.BankID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryContractBank(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryParkedOrder(Task task) +{ + CThostFtdcParkedOrderField task_data = any_cast(task.task_data); + dict data; + data["ContingentCondition"] = task_data.ContingentCondition; + data["CombOffsetFlag"] = task_data.CombOffsetFlag; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["UserForceClose"] = task_data.UserForceClose; + data["Status"] = task_data.Status; + data["Direction"] = task_data.Direction; + data["IsSwapOrder"] = task_data.IsSwapOrder; + data["UserType"] = task_data.UserType; + data["VolumeTotalOriginal"] = task_data.VolumeTotalOriginal; + data["OrderPriceType"] = task_data.OrderPriceType; + data["TimeCondition"] = task_data.TimeCondition; + data["IsAutoSuspend"] = task_data.IsAutoSuspend; + data["StopPrice"] = task_data.StopPrice; + data["InstrumentID"] = task_data.InstrumentID; + data["ExchangeID"] = task_data.ExchangeID; + data["MinVolume"] = task_data.MinVolume; + data["ForceCloseReason"] = task_data.ForceCloseReason; + data["ErrorID"] = task_data.ErrorID; + data["ParkedOrderID"] = task_data.ParkedOrderID; + data["BrokerID"] = task_data.BrokerID; + data["CombHedgeFlag"] = task_data.CombHedgeFlag; + data["GTDDate"] = task_data.GTDDate; + data["BusinessUnit"] = task_data.BusinessUnit; + data["ErrorMsg"] = task_data.ErrorMsg; + data["OrderRef"] = task_data.OrderRef; + data["InvestorID"] = task_data.InvestorID; + data["VolumeCondition"] = task_data.VolumeCondition; + data["RequestID"] = task_data.RequestID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryParkedOrder(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryParkedOrderAction(Task task) +{ + CThostFtdcParkedOrderActionField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["Status"] = task_data.Status; + data["ExchangeID"] = task_data.ExchangeID; + data["ActionFlag"] = task_data.ActionFlag; + data["OrderActionRef"] = task_data.OrderActionRef; + data["UserType"] = task_data.UserType; + data["ErrorMsg"] = task_data.ErrorMsg; + data["UserID"] = task_data.UserID; + data["LimitPrice"] = task_data.LimitPrice; + data["OrderRef"] = task_data.OrderRef; + data["InvestorID"] = task_data.InvestorID; + data["SessionID"] = task_data.SessionID; + data["VolumeChange"] = task_data.VolumeChange; + data["BrokerID"] = task_data.BrokerID; + data["RequestID"] = task_data.RequestID; + data["OrderSysID"] = task_data.OrderSysID; + data["ParkedOrderActionID"] = task_data.ParkedOrderActionID; + data["FrontID"] = task_data.FrontID; + data["ErrorID"] = task_data.ErrorID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryParkedOrderAction(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryTradingNotice(Task task) +{ + CThostFtdcTradingNoticeField task_data = any_cast(task.task_data); + dict data; + data["SequenceSeries"] = task_data.SequenceSeries; + data["SequenceNo"] = task_data.SequenceNo; + data["UserID"] = task_data.UserID; + data["FieldContent"] = task_data.FieldContent; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["SendTime"] = task_data.SendTime; + data["InvestorRange"] = task_data.InvestorRange; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryTradingNotice(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryBrokerTradingParams(Task task) +{ + CThostFtdcBrokerTradingParamsField task_data = any_cast(task.task_data); + dict data; + data["MarginPriceType"] = task_data.MarginPriceType; + data["Algorithm"] = task_data.Algorithm; + data["CurrencyID"] = task_data.CurrencyID; + data["OptionRoyaltyPriceType"] = task_data.OptionRoyaltyPriceType; + data["InvestorID"] = task_data.InvestorID; + data["BrokerID"] = task_data.BrokerID; + data["AvailIncludeCloseProfit"] = task_data.AvailIncludeCloseProfit; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryBrokerTradingParams(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQryBrokerTradingAlgos(Task task) +{ + CThostFtdcBrokerTradingAlgosField task_data = any_cast(task.task_data); + dict data; + data["InstrumentID"] = task_data.InstrumentID; + data["HandlePositionAlgoID"] = task_data.HandlePositionAlgoID; + data["ExchangeID"] = task_data.ExchangeID; + data["FindMarginRateAlgoID"] = task_data.FindMarginRateAlgoID; + data["BrokerID"] = task_data.BrokerID; + data["HandleTradingAccountAlgoID"] = task_data.HandleTradingAccountAlgoID; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQryBrokerTradingAlgos(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRtnFromBankToFutureByBank(Task task) +{ + CThostFtdcRspTransferField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnFromBankToFutureByBank(data); +}; + +void TdApi::processRtnFromFutureToBankByBank(Task task) +{ + CThostFtdcRspTransferField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnFromFutureToBankByBank(data); +}; + +void TdApi::processRtnRepealFromBankToFutureByBank(Task task) +{ + CThostFtdcRspRepealField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["BankRepealFlag"] = task_data.BankRepealFlag; + data["RepealedTimes"] = task_data.RepealedTimes; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["FutureRepealSerial"] = task_data.FutureRepealSerial; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["BrokerRepealFlag"] = task_data.BrokerRepealFlag; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankRepealSerial"] = task_data.BankRepealSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["RepealTimeInterval"] = task_data.RepealTimeInterval; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["PlateRepealSerial"] = task_data.PlateRepealSerial; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnRepealFromBankToFutureByBank(data); +}; + +void TdApi::processRtnRepealFromFutureToBankByBank(Task task) +{ + CThostFtdcRspRepealField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["BankRepealFlag"] = task_data.BankRepealFlag; + data["RepealedTimes"] = task_data.RepealedTimes; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["FutureRepealSerial"] = task_data.FutureRepealSerial; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["BrokerRepealFlag"] = task_data.BrokerRepealFlag; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankRepealSerial"] = task_data.BankRepealSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["RepealTimeInterval"] = task_data.RepealTimeInterval; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["PlateRepealSerial"] = task_data.PlateRepealSerial; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnRepealFromFutureToBankByBank(data); +}; + +void TdApi::processRtnFromBankToFutureByFuture(Task task) +{ + CThostFtdcRspTransferField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnFromBankToFutureByFuture(data); +}; + +void TdApi::processRtnFromFutureToBankByFuture(Task task) +{ + CThostFtdcRspTransferField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnFromFutureToBankByFuture(data); +}; + +void TdApi::processRtnRepealFromBankToFutureByFutureManual(Task task) +{ + CThostFtdcRspRepealField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["BankRepealFlag"] = task_data.BankRepealFlag; + data["RepealedTimes"] = task_data.RepealedTimes; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["FutureRepealSerial"] = task_data.FutureRepealSerial; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["BrokerRepealFlag"] = task_data.BrokerRepealFlag; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankRepealSerial"] = task_data.BankRepealSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["RepealTimeInterval"] = task_data.RepealTimeInterval; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["PlateRepealSerial"] = task_data.PlateRepealSerial; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnRepealFromBankToFutureByFutureManual(data); +}; + +void TdApi::processRtnRepealFromFutureToBankByFutureManual(Task task) +{ + CThostFtdcRspRepealField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["BankRepealFlag"] = task_data.BankRepealFlag; + data["RepealedTimes"] = task_data.RepealedTimes; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["FutureRepealSerial"] = task_data.FutureRepealSerial; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["BrokerRepealFlag"] = task_data.BrokerRepealFlag; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankRepealSerial"] = task_data.BankRepealSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["RepealTimeInterval"] = task_data.RepealTimeInterval; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["PlateRepealSerial"] = task_data.PlateRepealSerial; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnRepealFromFutureToBankByFutureManual(data); +}; + +void TdApi::processRtnQueryBankBalanceByFuture(Task task) +{ + CThostFtdcNotifyQueryAccountField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["BankUseAmount"] = task_data.BankUseAmount; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["ErrorMsg"] = task_data.ErrorMsg; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Digest"] = task_data.Digest; + data["BankFetchAmount"] = task_data.BankFetchAmount; + + this->onRtnQueryBankBalanceByFuture(data); +}; + +void TdApi::processErrRtnBankToFutureByFuture(Task task) +{ + CThostFtdcReqTransferField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnBankToFutureByFuture(data, error); +}; + +void TdApi::processErrRtnFutureToBankByFuture(Task task) +{ + CThostFtdcReqTransferField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnFutureToBankByFuture(data, error); +}; + +void TdApi::processErrRtnRepealBankToFutureByFutureManual(Task task) +{ + CThostFtdcReqRepealField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["BankRepealFlag"] = task_data.BankRepealFlag; + data["RepealedTimes"] = task_data.RepealedTimes; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["FutureRepealSerial"] = task_data.FutureRepealSerial; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["BrokerRepealFlag"] = task_data.BrokerRepealFlag; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankRepealSerial"] = task_data.BankRepealSerial; + data["RepealTimeInterval"] = task_data.RepealTimeInterval; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["PlateRepealSerial"] = task_data.PlateRepealSerial; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnRepealBankToFutureByFutureManual(data, error); +}; + +void TdApi::processErrRtnRepealFutureToBankByFutureManual(Task task) +{ + CThostFtdcReqRepealField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["BankRepealFlag"] = task_data.BankRepealFlag; + data["RepealedTimes"] = task_data.RepealedTimes; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["FutureRepealSerial"] = task_data.FutureRepealSerial; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["BrokerRepealFlag"] = task_data.BrokerRepealFlag; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankRepealSerial"] = task_data.BankRepealSerial; + data["RepealTimeInterval"] = task_data.RepealTimeInterval; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["PlateRepealSerial"] = task_data.PlateRepealSerial; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnRepealFutureToBankByFutureManual(data, error); +}; + +void TdApi::processErrRtnQueryBankBalanceByFuture(Task task) +{ + CThostFtdcReqQueryAccountField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Digest"] = task_data.Digest; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onErrRtnQueryBankBalanceByFuture(data, error); +}; + +void TdApi::processRtnRepealFromBankToFutureByFuture(Task task) +{ + CThostFtdcRspRepealField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["BankRepealFlag"] = task_data.BankRepealFlag; + data["RepealedTimes"] = task_data.RepealedTimes; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["FutureRepealSerial"] = task_data.FutureRepealSerial; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["BrokerRepealFlag"] = task_data.BrokerRepealFlag; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankRepealSerial"] = task_data.BankRepealSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["RepealTimeInterval"] = task_data.RepealTimeInterval; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["PlateRepealSerial"] = task_data.PlateRepealSerial; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnRepealFromBankToFutureByFuture(data); +}; + +void TdApi::processRtnRepealFromFutureToBankByFuture(Task task) +{ + CThostFtdcRspRepealField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["BankRepealFlag"] = task_data.BankRepealFlag; + data["RepealedTimes"] = task_data.RepealedTimes; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["FutureRepealSerial"] = task_data.FutureRepealSerial; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["BrokerRepealFlag"] = task_data.BrokerRepealFlag; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankRepealSerial"] = task_data.BankRepealSerial; + data["ErrorMsg"] = task_data.ErrorMsg; + data["RepealTimeInterval"] = task_data.RepealTimeInterval; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["PlateRepealSerial"] = task_data.PlateRepealSerial; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + this->onRtnRepealFromFutureToBankByFuture(data); +}; + +void TdApi::processRspFromBankToFutureByFuture(Task task) +{ + CThostFtdcReqTransferField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspFromBankToFutureByFuture(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspFromFutureToBankByFuture(Task task) +{ + CThostFtdcReqTransferField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["FeePayFlag"] = task_data.FeePayFlag; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["TransferStatus"] = task_data.TransferStatus; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["FutureFetchAmount"] = task_data.FutureFetchAmount; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BrokerFee"] = task_data.BrokerFee; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Message"] = task_data.Message; + data["CustFee"] = task_data.CustFee; + data["TradeAmount"] = task_data.TradeAmount; + data["Digest"] = task_data.Digest; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspFromFutureToBankByFuture(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRspQueryBankAccountMoneyByFuture(Task task) +{ + CThostFtdcReqQueryAccountField task_data = any_cast(task.task_data); + dict data; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["TradeTime"] = task_data.TradeTime; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["InstallID"] = task_data.InstallID; + data["CustomerName"] = task_data.CustomerName; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["BankID"] = task_data.BankID; + data["Password"] = task_data.Password; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["RequestID"] = task_data.RequestID; + data["CustType"] = task_data.CustType; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["DeviceID"] = task_data.DeviceID; + data["IdCardType"] = task_data.IdCardType; + data["PlateSerial"] = task_data.PlateSerial; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["FutureSerial"] = task_data.FutureSerial; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["Digest"] = task_data.Digest; + + CThostFtdcRspInfoField task_error = any_cast(task.task_error); + dict error; + error["ErrorMsg"] = task_error.ErrorMsg; + error["ErrorID"] = task_error.ErrorID; + + this->onRspQueryBankAccountMoneyByFuture(data, error, task.task_id, task.task_last); +}; + +void TdApi::processRtnOpenAccountByBank(Task task) +{ + CThostFtdcOpenAccountField task_data = any_cast(task.task_data); + dict data; + data["MoneyAccountStatus"] = task_data.MoneyAccountStatus; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["Telephone"] = task_data.Telephone; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["Fax"] = task_data.Fax; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["CountryCode"] = task_data.CountryCode; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["Address"] = task_data.Address; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["CustType"] = task_data.CustType; + data["Gender"] = task_data.Gender; + data["BankID"] = task_data.BankID; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["CashExchangeCode"] = task_data.CashExchangeCode; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["MobilePhone"] = task_data.MobilePhone; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["ErrorMsg"] = task_data.ErrorMsg; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["ZipCode"] = task_data.ZipCode; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["TradeTime"] = task_data.TradeTime; + data["EMail"] = task_data.EMail; + data["Digest"] = task_data.Digest; + data["DeviceID"] = task_data.DeviceID; + + this->onRtnOpenAccountByBank(data); +}; + +void TdApi::processRtnCancelAccountByBank(Task task) +{ + CThostFtdcCancelAccountField task_data = any_cast(task.task_data); + dict data; + data["MoneyAccountStatus"] = task_data.MoneyAccountStatus; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["UserID"] = task_data.UserID; + data["BankPassWord"] = task_data.BankPassWord; + data["Telephone"] = task_data.Telephone; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["Fax"] = task_data.Fax; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["CountryCode"] = task_data.CountryCode; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["Address"] = task_data.Address; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["CustType"] = task_data.CustType; + data["Gender"] = task_data.Gender; + data["BankID"] = task_data.BankID; + data["BankSerial"] = task_data.BankSerial; + data["OperNo"] = task_data.OperNo; + data["TradingDay"] = task_data.TradingDay; + data["BankSecuAcc"] = task_data.BankSecuAcc; + data["BrokerID"] = task_data.BrokerID; + data["CashExchangeCode"] = task_data.CashExchangeCode; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["MobilePhone"] = task_data.MobilePhone; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["ErrorMsg"] = task_data.ErrorMsg; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["ZipCode"] = task_data.ZipCode; + data["BankSecuAccType"] = task_data.BankSecuAccType; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["TradeTime"] = task_data.TradeTime; + data["EMail"] = task_data.EMail; + data["Digest"] = task_data.Digest; + data["DeviceID"] = task_data.DeviceID; + + this->onRtnCancelAccountByBank(data); +}; + +void TdApi::processRtnChangeAccountByBank(Task task) +{ + CThostFtdcChangeAccountField task_data = any_cast(task.task_data); + dict data; + data["MoneyAccountStatus"] = task_data.MoneyAccountStatus; + data["NewBankPassWord"] = task_data.NewBankPassWord; + data["BrokerBranchID"] = task_data.BrokerBranchID; + data["BankPassWord"] = task_data.BankPassWord; + data["Telephone"] = task_data.Telephone; + data["IdentifiedCardNo"] = task_data.IdentifiedCardNo; + data["VerifyCertNoFlag"] = task_data.VerifyCertNoFlag; + data["TID"] = task_data.TID; + data["AccountID"] = task_data.AccountID; + data["BankAccount"] = task_data.BankAccount; + data["Fax"] = task_data.Fax; + data["InstallID"] = task_data.InstallID; + data["SecuPwdFlag"] = task_data.SecuPwdFlag; + data["CustomerName"] = task_data.CustomerName; + data["CountryCode"] = task_data.CountryCode; + data["TradeCode"] = task_data.TradeCode; + data["BankBranchID"] = task_data.BankBranchID; + data["SessionID"] = task_data.SessionID; + data["NewBankAccount"] = task_data.NewBankAccount; + data["Address"] = task_data.Address; + data["PlateSerial"] = task_data.PlateSerial; + data["BankPwdFlag"] = task_data.BankPwdFlag; + data["ErrorID"] = task_data.ErrorID; + data["CustType"] = task_data.CustType; + data["Gender"] = task_data.Gender; + data["BankID"] = task_data.BankID; + data["BankSerial"] = task_data.BankSerial; + data["TradingDay"] = task_data.TradingDay; + data["BrokerID"] = task_data.BrokerID; + data["IdCardType"] = task_data.IdCardType; + data["Password"] = task_data.Password; + data["MobilePhone"] = task_data.MobilePhone; + data["TradeDate"] = task_data.TradeDate; + data["CurrencyID"] = task_data.CurrencyID; + data["ErrorMsg"] = task_data.ErrorMsg; + data["BankAccType"] = task_data.BankAccType; + data["LastFragment"] = task_data.LastFragment; + data["ZipCode"] = task_data.ZipCode; + data["BrokerIDByBank"] = task_data.BrokerIDByBank; + data["TradeTime"] = task_data.TradeTime; + data["EMail"] = task_data.EMail; + data["Digest"] = task_data.Digest; + + this->onRtnChangeAccountByBank(data); +}; + + + +///------------------------------------------------------------------------------------- +///主动函数 +///------------------------------------------------------------------------------------- + +void TdApi::createFtdcTraderApi(string pszFlowPath) +{ + this->api = CThostFtdcTraderApi::CreateFtdcTraderApi(pszFlowPath.c_str()); + this->api->RegisterSpi(this); +}; + +void TdApi::release() +{ + this->api->Release(); +}; + +void TdApi::init() +{ + this->api->Init(); +}; + +int TdApi::join() +{ + int i = this->api->Join(); + return i; +}; + +int TdApi::exit() +{ + //该函数在原生API里没有,用于安全退出API用,原生的join似乎不太稳定 + this->api->RegisterSpi(NULL); + this->api->Release(); + this->api = NULL; + return 1; +}; + +string TdApi::getTradingDay() +{ + string day = this->api->GetTradingDay(); + return day; +}; + +void TdApi::registerFront(string pszFrontAddress) +{ + this->api->RegisterFront((char*)pszFrontAddress.c_str()); +}; + +void TdApi::subscribePrivateTopic(int nType) +{ + //该函数为手动编写 + THOST_TE_RESUME_TYPE type; + + switch (nType) + { + case 0: + { + type = THOST_TERT_RESTART; + break; + }; + + case 1: + { + type = THOST_TERT_RESUME; + break; + }; + + case 2: + { + type = THOST_TERT_QUICK; + break; + }; + } + + this->api->SubscribePrivateTopic(type); +}; + +void TdApi::subscribePublicTopic(int nType) +{ + //该函数为手动编写 + THOST_TE_RESUME_TYPE type; + + switch (nType) + { + case 0: + { + type = THOST_TERT_RESTART; + break; + }; + + case 1: + { + type = THOST_TERT_RESUME; + break; + }; + + case 2: + { + type = THOST_TERT_QUICK; + break; + }; + } + + this->api->SubscribePublicTopic(type); +}; + +int TdApi::reqAuthenticate(dict req, int nRequestID) +{ + CThostFtdcReqAuthenticateField myreq = CThostFtdcReqAuthenticateField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "UserID", myreq.UserID); + getChar(req, "AuthCode", myreq.AuthCode); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "UserProductInfo", myreq.UserProductInfo); + int i = this->api->ReqAuthenticate(&myreq, nRequestID); + return i; +}; + +int TdApi::reqUserLogin(dict req, int nRequestID) +{ + CThostFtdcReqUserLoginField myreq = CThostFtdcReqUserLoginField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "MacAddress", myreq.MacAddress); + getChar(req, "UserProductInfo", myreq.UserProductInfo); + getChar(req, "UserID", myreq.UserID); + getChar(req, "TradingDay", myreq.TradingDay); + getChar(req, "InterfaceProductInfo", myreq.InterfaceProductInfo); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "ClientIPAddress", myreq.ClientIPAddress); + getChar(req, "OneTimePassword", myreq.OneTimePassword); + getChar(req, "ProtocolInfo", myreq.ProtocolInfo); + getChar(req, "Password", myreq.Password); + int i = this->api->ReqUserLogin(&myreq, nRequestID); + return i; +}; + +int TdApi::reqUserLogout(dict req, int nRequestID) +{ + CThostFtdcUserLogoutField myreq = CThostFtdcUserLogoutField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "UserID", myreq.UserID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqUserLogout(&myreq, nRequestID); + return i; +}; + +int TdApi::reqUserPasswordUpdate(dict req, int nRequestID) +{ + CThostFtdcUserPasswordUpdateField myreq = CThostFtdcUserPasswordUpdateField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "UserID", myreq.UserID); + getChar(req, "NewPassword", myreq.NewPassword); + getChar(req, "OldPassword", myreq.OldPassword); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqUserPasswordUpdate(&myreq, nRequestID); + return i; +}; + +int TdApi::reqTradingAccountPasswordUpdate(dict req, int nRequestID) +{ + CThostFtdcTradingAccountPasswordUpdateField myreq = CThostFtdcTradingAccountPasswordUpdateField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "NewPassword", myreq.NewPassword); + getChar(req, "OldPassword", myreq.OldPassword); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "AccountID", myreq.AccountID); + int i = this->api->ReqTradingAccountPasswordUpdate(&myreq, nRequestID); + return i; +}; + +int TdApi::reqOrderInsert(dict req, int nRequestID) +{ + CThostFtdcInputOrderField myreq = CThostFtdcInputOrderField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "ContingentCondition", &myreq.ContingentCondition); + getChar(req, "CombOffsetFlag", myreq.CombOffsetFlag); + getChar(req, "UserID", myreq.UserID); + getChar(req, "UserID", myreq.UserID); + getInt(req, "UserForceClose", &myreq.UserForceClose); + getChar(req, "Direction", &myreq.Direction); + getInt(req, "IsSwapOrder", &myreq.IsSwapOrder); + getInt(req, "VolumeTotalOriginal", &myreq.VolumeTotalOriginal); + getChar(req, "OrderPriceType", &myreq.OrderPriceType); + getChar(req, "TimeCondition", &myreq.TimeCondition); + getInt(req, "IsAutoSuspend", &myreq.IsAutoSuspend); + getInt(req, "IsAutoSuspend", &myreq.IsAutoSuspend); + getChar(req, "InstrumentID", myreq.InstrumentID); + getInt(req, "MinVolume", &myreq.MinVolume); + getChar(req, "ForceCloseReason", &myreq.ForceCloseReason); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "CombHedgeFlag", myreq.CombHedgeFlag); + getChar(req, "GTDDate", myreq.GTDDate); + getChar(req, "BusinessUnit", myreq.BusinessUnit); + getChar(req, "OrderRef", myreq.OrderRef); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "VolumeCondition", &myreq.VolumeCondition); + getInt(req, "RequestID", &myreq.RequestID); + int i = this->api->ReqOrderInsert(&myreq, nRequestID); + return i; +}; + +int TdApi::reqParkedOrderInsert(dict req, int nRequestID) +{ + CThostFtdcParkedOrderField myreq = CThostFtdcParkedOrderField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "ContingentCondition", &myreq.ContingentCondition); + getChar(req, "CombOffsetFlag", myreq.CombOffsetFlag); + getChar(req, "UserID", myreq.UserID); + getChar(req, "UserID", myreq.UserID); + getInt(req, "UserForceClose", &myreq.UserForceClose); + getChar(req, "Status", &myreq.Status); + getChar(req, "Direction", &myreq.Direction); + getInt(req, "IsSwapOrder", &myreq.IsSwapOrder); + getChar(req, "UserType", &myreq.UserType); + getInt(req, "VolumeTotalOriginal", &myreq.VolumeTotalOriginal); + getChar(req, "OrderPriceType", &myreq.OrderPriceType); + getChar(req, "TimeCondition", &myreq.TimeCondition); + getInt(req, "IsAutoSuspend", &myreq.IsAutoSuspend); + getInt(req, "IsAutoSuspend", &myreq.IsAutoSuspend); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getInt(req, "MinVolume", &myreq.MinVolume); + getChar(req, "ForceCloseReason", &myreq.ForceCloseReason); + getInt(req, "ErrorID", &myreq.ErrorID); + getChar(req, "ParkedOrderID", myreq.ParkedOrderID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "CombHedgeFlag", myreq.CombHedgeFlag); + getChar(req, "GTDDate", myreq.GTDDate); + getChar(req, "BusinessUnit", myreq.BusinessUnit); + getChar(req, "ErrorMsg", myreq.ErrorMsg); + getChar(req, "OrderRef", myreq.OrderRef); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "VolumeCondition", &myreq.VolumeCondition); + getInt(req, "RequestID", &myreq.RequestID); + int i = this->api->ReqParkedOrderInsert(&myreq, nRequestID); + return i; +}; + +int TdApi::reqParkedOrderAction(dict req, int nRequestID) +{ + CThostFtdcParkedOrderActionField myreq = CThostFtdcParkedOrderActionField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "Status", &myreq.Status); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "ActionFlag", &myreq.ActionFlag); + getInt(req, "OrderActionRef", &myreq.OrderActionRef); + getChar(req, "UserType", &myreq.UserType); + getChar(req, "ErrorMsg", myreq.ErrorMsg); + getChar(req, "UserID", myreq.UserID); + getChar(req, "UserID", myreq.UserID); + getChar(req, "OrderRef", myreq.OrderRef); + getChar(req, "InvestorID", myreq.InvestorID); + getInt(req, "SessionID", &myreq.SessionID); + getInt(req, "VolumeChange", &myreq.VolumeChange); + getChar(req, "BrokerID", myreq.BrokerID); + getInt(req, "RequestID", &myreq.RequestID); + getChar(req, "OrderSysID", myreq.OrderSysID); + getChar(req, "ParkedOrderActionID", myreq.ParkedOrderActionID); + getInt(req, "FrontID", &myreq.FrontID); + getInt(req, "ErrorID", &myreq.ErrorID); + int i = this->api->ReqParkedOrderAction(&myreq, nRequestID); + return i; +}; + +int TdApi::reqOrderAction(dict req, int nRequestID) +{ + CThostFtdcInputOrderActionField myreq = CThostFtdcInputOrderActionField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "ActionFlag", &myreq.ActionFlag); + getInt(req, "OrderActionRef", &myreq.OrderActionRef); + getChar(req, "UserID", myreq.UserID); + getChar(req, "UserID", myreq.UserID); + getChar(req, "OrderRef", myreq.OrderRef); + getChar(req, "InvestorID", myreq.InvestorID); + getInt(req, "SessionID", &myreq.SessionID); + getInt(req, "VolumeChange", &myreq.VolumeChange); + getChar(req, "BrokerID", myreq.BrokerID); + getInt(req, "RequestID", &myreq.RequestID); + getChar(req, "OrderSysID", myreq.OrderSysID); + getInt(req, "FrontID", &myreq.FrontID); + int i = this->api->ReqOrderAction(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQueryMaxOrderVolume(dict req, int nRequestID) +{ + CThostFtdcQueryMaxOrderVolumeField myreq = CThostFtdcQueryMaxOrderVolumeField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "Direction", &myreq.Direction); + getChar(req, "OffsetFlag", &myreq.OffsetFlag); + getChar(req, "HedgeFlag", &myreq.HedgeFlag); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getInt(req, "MaxVolume", &myreq.MaxVolume); + int i = this->api->ReqQueryMaxOrderVolume(&myreq, nRequestID); + return i; +}; + +int TdApi::reqSettlementInfoConfirm(dict req, int nRequestID) +{ + CThostFtdcSettlementInfoConfirmField myreq = CThostFtdcSettlementInfoConfirmField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "ConfirmTime", myreq.ConfirmTime); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "ConfirmDate", myreq.ConfirmDate); + int i = this->api->ReqSettlementInfoConfirm(&myreq, nRequestID); + return i; +}; + +int TdApi::reqRemoveParkedOrder(dict req, int nRequestID) +{ + CThostFtdcRemoveParkedOrderField myreq = CThostFtdcRemoveParkedOrderField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "ParkedOrderID", myreq.ParkedOrderID); + int i = this->api->ReqRemoveParkedOrder(&myreq, nRequestID); + return i; +}; + +int TdApi::reqRemoveParkedOrderAction(dict req, int nRequestID) +{ + CThostFtdcRemoveParkedOrderActionField myreq = CThostFtdcRemoveParkedOrderActionField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "ParkedOrderActionID", myreq.ParkedOrderActionID); + int i = this->api->ReqRemoveParkedOrderAction(&myreq, nRequestID); + return i; +}; + +int TdApi::reqExecOrderInsert(dict req, int nRequestID) +{ + CThostFtdcInputExecOrderField myreq = CThostFtdcInputExecOrderField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExecOrderRef", myreq.ExecOrderRef); + getChar(req, "CloseFlag", &myreq.CloseFlag); + getChar(req, "OffsetFlag", &myreq.OffsetFlag); + getChar(req, "PosiDirection", &myreq.PosiDirection); + getChar(req, "BusinessUnit", myreq.BusinessUnit); + getChar(req, "HedgeFlag", &myreq.HedgeFlag); + getChar(req, "UserID", myreq.UserID); + getInt(req, "Volume", &myreq.Volume); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getInt(req, "RequestID", &myreq.RequestID); + getChar(req, "ActionType", &myreq.ActionType); + getChar(req, "ReservePositionFlag", &myreq.ReservePositionFlag); + int i = this->api->ReqExecOrderInsert(&myreq, nRequestID); + return i; +}; + +int TdApi::reqExecOrderAction(dict req, int nRequestID) +{ + CThostFtdcInputExecOrderActionField myreq = CThostFtdcInputExecOrderActionField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExecOrderSysID", myreq.ExecOrderSysID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "UserID", myreq.UserID); + getChar(req, "ExecOrderRef", myreq.ExecOrderRef); + getChar(req, "InvestorID", myreq.InvestorID); + getInt(req, "SessionID", &myreq.SessionID); + getChar(req, "BrokerID", myreq.BrokerID); + getInt(req, "RequestID", &myreq.RequestID); + getChar(req, "ActionFlag", &myreq.ActionFlag); + getInt(req, "ExecOrderActionRef", &myreq.ExecOrderActionRef); + getInt(req, "FrontID", &myreq.FrontID); + int i = this->api->ReqExecOrderAction(&myreq, nRequestID); + return i; +}; + +int TdApi::reqForQuoteInsert(dict req, int nRequestID) +{ + CThostFtdcInputForQuoteField myreq = CThostFtdcInputForQuoteField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "UserID", myreq.UserID); + getChar(req, "ForQuoteRef", myreq.ForQuoteRef); + int i = this->api->ReqForQuoteInsert(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQuoteInsert(dict req, int nRequestID) +{ + CThostFtdcInputQuoteField myreq = CThostFtdcInputQuoteField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "AskHedgeFlag", &myreq.AskHedgeFlag); + getChar(req, "BusinessUnit", myreq.BusinessUnit); + getChar(req, "BusinessUnit", myreq.BusinessUnit); + getChar(req, "UserID", myreq.UserID); + getChar(req, "AskOffsetFlag", &myreq.AskOffsetFlag); + getInt(req, "BidVolume", &myreq.BidVolume); + getInt(req, "AskVolume", &myreq.AskVolume); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BidOffsetFlag", &myreq.BidOffsetFlag); + getChar(req, "BrokerID", myreq.BrokerID); + getInt(req, "RequestID", &myreq.RequestID); + getInt(req, "RequestID", &myreq.RequestID); + getChar(req, "BidHedgeFlag", &myreq.BidHedgeFlag); + getChar(req, "QuoteRef", myreq.QuoteRef); + int i = this->api->ReqQuoteInsert(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQuoteAction(dict req, int nRequestID) +{ + CThostFtdcInputQuoteActionField myreq = CThostFtdcInputQuoteActionField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getInt(req, "QuoteActionRef", &myreq.QuoteActionRef); + getChar(req, "UserID", myreq.UserID); + getChar(req, "InvestorID", myreq.InvestorID); + getInt(req, "SessionID", &myreq.SessionID); + getChar(req, "BrokerID", myreq.BrokerID); + getInt(req, "RequestID", &myreq.RequestID); + getChar(req, "ActionFlag", &myreq.ActionFlag); + getInt(req, "FrontID", &myreq.FrontID); + getChar(req, "QuoteSysID", myreq.QuoteSysID); + getChar(req, "QuoteRef", myreq.QuoteRef); + int i = this->api->ReqQuoteAction(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryOrder(dict req, int nRequestID) +{ + CThostFtdcQryOrderField myreq = CThostFtdcQryOrderField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "InsertTimeStart", myreq.InsertTimeStart); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "OrderSysID", myreq.OrderSysID); + getChar(req, "InsertTimeEnd", myreq.InsertTimeEnd); + int i = this->api->ReqQryOrder(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryTrade(dict req, int nRequestID) +{ + CThostFtdcQryTradeField myreq = CThostFtdcQryTradeField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "TradeTimeStart", myreq.TradeTimeStart); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "TradeID", myreq.TradeID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "TradeTimeEnd", myreq.TradeTimeEnd); + int i = this->api->ReqQryTrade(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryInvestorPosition(dict req, int nRequestID) +{ + CThostFtdcQryInvestorPositionField myreq = CThostFtdcQryInvestorPositionField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryInvestorPosition(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryTradingAccount(dict req, int nRequestID) +{ + CThostFtdcQryTradingAccountField myreq = CThostFtdcQryTradingAccountField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryTradingAccount(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryInvestor(dict req, int nRequestID) +{ + CThostFtdcQryInvestorField myreq = CThostFtdcQryInvestorField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryInvestor(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryTradingCode(dict req, int nRequestID) +{ + CThostFtdcQryTradingCodeField myreq = CThostFtdcQryTradingCodeField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "ClientIDType", &myreq.ClientIDType); + getChar(req, "ClientID", myreq.ClientID); + int i = this->api->ReqQryTradingCode(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryInstrumentMarginRate(dict req, int nRequestID) +{ + CThostFtdcQryInstrumentMarginRateField myreq = CThostFtdcQryInstrumentMarginRateField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "HedgeFlag", &myreq.HedgeFlag); + int i = this->api->ReqQryInstrumentMarginRate(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryInstrumentCommissionRate(dict req, int nRequestID) +{ + CThostFtdcQryInstrumentCommissionRateField myreq = CThostFtdcQryInstrumentCommissionRateField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryInstrumentCommissionRate(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryExchange(dict req, int nRequestID) +{ + CThostFtdcQryExchangeField myreq = CThostFtdcQryExchangeField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "ExchangeID", myreq.ExchangeID); + int i = this->api->ReqQryExchange(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryProduct(dict req, int nRequestID) +{ + CThostFtdcQryProductField myreq = CThostFtdcQryProductField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "ProductClass", &myreq.ProductClass); + getChar(req, "ProductID", myreq.ProductID); + int i = this->api->ReqQryProduct(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryInstrument(dict req, int nRequestID) +{ + CThostFtdcQryInstrumentField myreq = CThostFtdcQryInstrumentField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "ExchangeInstID", myreq.ExchangeInstID); + getChar(req, "ProductID", myreq.ProductID); + int i = this->api->ReqQryInstrument(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryDepthMarketData(dict req, int nRequestID) +{ + CThostFtdcQryDepthMarketDataField myreq = CThostFtdcQryDepthMarketDataField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + int i = this->api->ReqQryDepthMarketData(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQrySettlementInfo(dict req, int nRequestID) +{ + CThostFtdcQrySettlementInfoField myreq = CThostFtdcQrySettlementInfoField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "TradingDay", myreq.TradingDay); + int i = this->api->ReqQrySettlementInfo(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryTransferBank(dict req, int nRequestID) +{ + CThostFtdcQryTransferBankField myreq = CThostFtdcQryTransferBankField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "BankBrchID", myreq.BankBrchID); + getChar(req, "BankID", myreq.BankID); + int i = this->api->ReqQryTransferBank(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryInvestorPositionDetail(dict req, int nRequestID) +{ + CThostFtdcQryInvestorPositionDetailField myreq = CThostFtdcQryInvestorPositionDetailField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryInvestorPositionDetail(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryNotice(dict req, int nRequestID) +{ + CThostFtdcQryNoticeField myreq = CThostFtdcQryNoticeField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryNotice(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQrySettlementInfoConfirm(dict req, int nRequestID) +{ + CThostFtdcQrySettlementInfoConfirmField myreq = CThostFtdcQrySettlementInfoConfirmField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQrySettlementInfoConfirm(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryInvestorPositionCombineDetail(dict req, int nRequestID) +{ + CThostFtdcQryInvestorPositionCombineDetailField myreq = CThostFtdcQryInvestorPositionCombineDetailField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "CombInstrumentID", myreq.CombInstrumentID); + int i = this->api->ReqQryInvestorPositionCombineDetail(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryCFMMCTradingAccountKey(dict req, int nRequestID) +{ + CThostFtdcQryCFMMCTradingAccountKeyField myreq = CThostFtdcQryCFMMCTradingAccountKeyField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryCFMMCTradingAccountKey(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryEWarrantOffset(dict req, int nRequestID) +{ + CThostFtdcQryEWarrantOffsetField myreq = CThostFtdcQryEWarrantOffsetField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryEWarrantOffset(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryInvestorProductGroupMargin(dict req, int nRequestID) +{ + CThostFtdcQryInvestorProductGroupMarginField myreq = CThostFtdcQryInvestorProductGroupMarginField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "HedgeFlag", &myreq.HedgeFlag); + getChar(req, "ProductGroupID", myreq.ProductGroupID); + int i = this->api->ReqQryInvestorProductGroupMargin(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryExchangeMarginRate(dict req, int nRequestID) +{ + CThostFtdcQryExchangeMarginRateField myreq = CThostFtdcQryExchangeMarginRateField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "HedgeFlag", &myreq.HedgeFlag); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryExchangeMarginRate(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryExchangeMarginRateAdjust(dict req, int nRequestID) +{ + CThostFtdcQryExchangeMarginRateAdjustField myreq = CThostFtdcQryExchangeMarginRateAdjustField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "HedgeFlag", &myreq.HedgeFlag); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryExchangeMarginRateAdjust(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryExchangeRate(dict req, int nRequestID) +{ + CThostFtdcQryExchangeRateField myreq = CThostFtdcQryExchangeRateField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "FromCurrencyID", myreq.FromCurrencyID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "ToCurrencyID", myreq.ToCurrencyID); + int i = this->api->ReqQryExchangeRate(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQrySecAgentACIDMap(dict req, int nRequestID) +{ + CThostFtdcQrySecAgentACIDMapField myreq = CThostFtdcQrySecAgentACIDMapField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "UserID", myreq.UserID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "AccountID", myreq.AccountID); + int i = this->api->ReqQrySecAgentACIDMap(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryOptionInstrTradeCost(dict req, int nRequestID) +{ + CThostFtdcQryOptionInstrTradeCostField myreq = CThostFtdcQryOptionInstrTradeCostField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "HedgeFlag", &myreq.HedgeFlag); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryOptionInstrTradeCost(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryOptionInstrCommRate(dict req, int nRequestID) +{ + CThostFtdcQryOptionInstrCommRateField myreq = CThostFtdcQryOptionInstrCommRateField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryOptionInstrCommRate(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryExecOrder(dict req, int nRequestID) +{ + CThostFtdcQryExecOrderField myreq = CThostFtdcQryExecOrderField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExecOrderSysID", myreq.ExecOrderSysID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "InsertTimeStart", myreq.InsertTimeStart); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "InsertTimeEnd", myreq.InsertTimeEnd); + int i = this->api->ReqQryExecOrder(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryForQuote(dict req, int nRequestID) +{ + CThostFtdcQryForQuoteField myreq = CThostFtdcQryForQuoteField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "InsertTimeStart", myreq.InsertTimeStart); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "InsertTimeEnd", myreq.InsertTimeEnd); + int i = this->api->ReqQryForQuote(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryQuote(dict req, int nRequestID) +{ + CThostFtdcQryQuoteField myreq = CThostFtdcQryQuoteField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "InsertTimeStart", myreq.InsertTimeStart); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "QuoteSysID", myreq.QuoteSysID); + getChar(req, "InsertTimeEnd", myreq.InsertTimeEnd); + int i = this->api->ReqQryQuote(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryTransferSerial(dict req, int nRequestID) +{ + CThostFtdcQryTransferSerialField myreq = CThostFtdcQryTransferSerialField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "BankID", myreq.BankID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "AccountID", myreq.AccountID); + int i = this->api->ReqQryTransferSerial(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryAccountregister(dict req, int nRequestID) +{ + CThostFtdcQryAccountregisterField myreq = CThostFtdcQryAccountregisterField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "BankID", myreq.BankID); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "BankBranchID", myreq.BankBranchID); + getChar(req, "AccountID", myreq.AccountID); + int i = this->api->ReqQryAccountregister(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryContractBank(dict req, int nRequestID) +{ + CThostFtdcQryContractBankField myreq = CThostFtdcQryContractBankField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "BankBrchID", myreq.BankBrchID); + getChar(req, "BankID", myreq.BankID); + int i = this->api->ReqQryContractBank(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryParkedOrder(dict req, int nRequestID) +{ + CThostFtdcQryParkedOrderField myreq = CThostFtdcQryParkedOrderField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryParkedOrder(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryParkedOrderAction(dict req, int nRequestID) +{ + CThostFtdcQryParkedOrderActionField myreq = CThostFtdcQryParkedOrderActionField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryParkedOrderAction(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryTradingNotice(dict req, int nRequestID) +{ + CThostFtdcQryTradingNoticeField myreq = CThostFtdcQryTradingNoticeField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryTradingNotice(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryBrokerTradingParams(dict req, int nRequestID) +{ + CThostFtdcQryBrokerTradingParamsField myreq = CThostFtdcQryBrokerTradingParamsField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "InvestorID", myreq.InvestorID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryBrokerTradingParams(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQryBrokerTradingAlgos(dict req, int nRequestID) +{ + CThostFtdcQryBrokerTradingAlgosField myreq = CThostFtdcQryBrokerTradingAlgosField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "InstrumentID", myreq.InstrumentID); + getChar(req, "ExchangeID", myreq.ExchangeID); + getChar(req, "BrokerID", myreq.BrokerID); + int i = this->api->ReqQryBrokerTradingAlgos(&myreq, nRequestID); + return i; +}; + +int TdApi::reqFromBankToFutureByFuture(dict req, int nRequestID) +{ + CThostFtdcReqTransferField myreq = CThostFtdcReqTransferField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "BrokerBranchID", myreq.BrokerBranchID); + getChar(req, "UserID", myreq.UserID); + getChar(req, "BankPassWord", myreq.BankPassWord); + getChar(req, "TradeTime", myreq.TradeTime); + getChar(req, "VerifyCertNoFlag", &myreq.VerifyCertNoFlag); + getInt(req, "TID", &myreq.TID); + getChar(req, "AccountID", myreq.AccountID); + getChar(req, "BankAccount", myreq.BankAccount); + getInt(req, "InstallID", &myreq.InstallID); + getChar(req, "CustomerName", myreq.CustomerName); + getChar(req, "TradeCode", myreq.TradeCode); + getChar(req, "BankBranchID", myreq.BankBranchID); + getInt(req, "SessionID", &myreq.SessionID); + getChar(req, "BankID", myreq.BankID); + getChar(req, "Password", myreq.Password); + getChar(req, "BankPwdFlag", &myreq.BankPwdFlag); + getInt(req, "RequestID", &myreq.RequestID); + getChar(req, "CustType", &myreq.CustType); + getChar(req, "IdentifiedCardNo", myreq.IdentifiedCardNo); + getChar(req, "FeePayFlag", &myreq.FeePayFlag); + getChar(req, "BankSerial", myreq.BankSerial); + getChar(req, "OperNo", myreq.OperNo); + getChar(req, "TradingDay", myreq.TradingDay); + getChar(req, "BankSecuAcc", myreq.BankSecuAcc); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "DeviceID", myreq.DeviceID); + getChar(req, "TransferStatus", &myreq.TransferStatus); + getChar(req, "IdCardType", &myreq.IdCardType); + getInt(req, "PlateSerial", &myreq.PlateSerial); + getInt(req, "PlateSerial", &myreq.PlateSerial); + getChar(req, "TradeDate", myreq.TradeDate); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "BankAccType", &myreq.BankAccType); + getChar(req, "LastFragment", &myreq.LastFragment); + getInt(req, "FutureSerial", &myreq.FutureSerial); + getChar(req, "BankSecuAccType", &myreq.BankSecuAccType); + getChar(req, "BrokerIDByBank", myreq.BrokerIDByBank); + getChar(req, "SecuPwdFlag", &myreq.SecuPwdFlag); + getChar(req, "Message", myreq.Message); + getChar(req, "Message", myreq.Message); + getChar(req, "Message", myreq.Message); + getChar(req, "Digest", myreq.Digest); + int i = this->api->ReqFromBankToFutureByFuture(&myreq, nRequestID); + return i; +}; + +int TdApi::reqFromFutureToBankByFuture(dict req, int nRequestID) +{ + CThostFtdcReqTransferField myreq = CThostFtdcReqTransferField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "BrokerBranchID", myreq.BrokerBranchID); + getChar(req, "UserID", myreq.UserID); + getChar(req, "BankPassWord", myreq.BankPassWord); + getChar(req, "TradeTime", myreq.TradeTime); + getChar(req, "VerifyCertNoFlag", &myreq.VerifyCertNoFlag); + getInt(req, "TID", &myreq.TID); + getChar(req, "AccountID", myreq.AccountID); + getChar(req, "BankAccount", myreq.BankAccount); + getInt(req, "InstallID", &myreq.InstallID); + getChar(req, "CustomerName", myreq.CustomerName); + getChar(req, "TradeCode", myreq.TradeCode); + getChar(req, "BankBranchID", myreq.BankBranchID); + getInt(req, "SessionID", &myreq.SessionID); + getChar(req, "BankID", myreq.BankID); + getChar(req, "Password", myreq.Password); + getChar(req, "BankPwdFlag", &myreq.BankPwdFlag); + getInt(req, "RequestID", &myreq.RequestID); + getChar(req, "CustType", &myreq.CustType); + getChar(req, "IdentifiedCardNo", myreq.IdentifiedCardNo); + getChar(req, "FeePayFlag", &myreq.FeePayFlag); + getChar(req, "BankSerial", myreq.BankSerial); + getChar(req, "OperNo", myreq.OperNo); + getChar(req, "TradingDay", myreq.TradingDay); + getChar(req, "BankSecuAcc", myreq.BankSecuAcc); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "DeviceID", myreq.DeviceID); + getChar(req, "TransferStatus", &myreq.TransferStatus); + getChar(req, "IdCardType", &myreq.IdCardType); + getInt(req, "PlateSerial", &myreq.PlateSerial); + getInt(req, "PlateSerial", &myreq.PlateSerial); + getChar(req, "TradeDate", myreq.TradeDate); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "BankAccType", &myreq.BankAccType); + getChar(req, "LastFragment", &myreq.LastFragment); + getInt(req, "FutureSerial", &myreq.FutureSerial); + getChar(req, "BankSecuAccType", &myreq.BankSecuAccType); + getChar(req, "BrokerIDByBank", myreq.BrokerIDByBank); + getChar(req, "SecuPwdFlag", &myreq.SecuPwdFlag); + getChar(req, "Message", myreq.Message); + getChar(req, "Message", myreq.Message); + getChar(req, "Message", myreq.Message); + getChar(req, "Digest", myreq.Digest); + int i = this->api->ReqFromFutureToBankByFuture(&myreq, nRequestID); + return i; +}; + +int TdApi::reqQueryBankAccountMoneyByFuture(dict req, int nRequestID) +{ + CThostFtdcReqQueryAccountField myreq = CThostFtdcReqQueryAccountField(); + memset(&myreq, 0, sizeof(myreq)); + getChar(req, "BrokerBranchID", myreq.BrokerBranchID); + getChar(req, "UserID", myreq.UserID); + getChar(req, "BankPassWord", myreq.BankPassWord); + getChar(req, "TradeTime", myreq.TradeTime); + getChar(req, "VerifyCertNoFlag", &myreq.VerifyCertNoFlag); + getInt(req, "TID", &myreq.TID); + getChar(req, "AccountID", myreq.AccountID); + getChar(req, "BankAccount", myreq.BankAccount); + getInt(req, "InstallID", &myreq.InstallID); + getChar(req, "CustomerName", myreq.CustomerName); + getChar(req, "TradeCode", myreq.TradeCode); + getChar(req, "BankBranchID", myreq.BankBranchID); + getInt(req, "SessionID", &myreq.SessionID); + getChar(req, "BankID", myreq.BankID); + getChar(req, "Password", myreq.Password); + getChar(req, "BankPwdFlag", &myreq.BankPwdFlag); + getInt(req, "RequestID", &myreq.RequestID); + getChar(req, "CustType", &myreq.CustType); + getChar(req, "IdentifiedCardNo", myreq.IdentifiedCardNo); + getChar(req, "BankSerial", myreq.BankSerial); + getChar(req, "OperNo", myreq.OperNo); + getChar(req, "TradingDay", myreq.TradingDay); + getChar(req, "BankSecuAcc", myreq.BankSecuAcc); + getChar(req, "BrokerID", myreq.BrokerID); + getChar(req, "DeviceID", myreq.DeviceID); + getChar(req, "IdCardType", &myreq.IdCardType); + getInt(req, "PlateSerial", &myreq.PlateSerial); + getChar(req, "TradeDate", myreq.TradeDate); + getChar(req, "CurrencyID", myreq.CurrencyID); + getChar(req, "BankAccType", &myreq.BankAccType); + getChar(req, "LastFragment", &myreq.LastFragment); + getInt(req, "FutureSerial", &myreq.FutureSerial); + getChar(req, "BankSecuAccType", &myreq.BankSecuAccType); + getChar(req, "BrokerIDByBank", myreq.BrokerIDByBank); + getChar(req, "SecuPwdFlag", &myreq.SecuPwdFlag); + getChar(req, "Digest", myreq.Digest); + int i = this->api->ReqQueryBankAccountMoneyByFuture(&myreq, nRequestID); + return i; +}; + + + +///------------------------------------------------------------------------------------- +///Boost.Python封装 +///------------------------------------------------------------------------------------- + +struct TdApiWrap : TdApi, wrapper < TdApi > +{ + virtual void onFrontConnected() + { + //在向python环境中调用回调函数推送数据前,需要先获取全局锁GIL,防止解释器崩溃 + PyLock lock; + + //以下的try...catch...可以实现捕捉python环境中错误的功能,防止C++直接出现原因未知的崩溃 + try + { + this->get_override("onFrontConnected")(); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onFrontDisconnected(int i) + { + PyLock lock; + + try + { + this->get_override("onFrontDisconnected")(i); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onHeartBeatWarning(int i) + { + PyLock lock; + + try + { + this->get_override("onHeartBeatWarning")(i); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspAuthenticate(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspAuthenticate")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspUserLogin(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspUserLogin")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspUserLogout(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspUserLogout")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspUserPasswordUpdate(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspUserPasswordUpdate")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspTradingAccountPasswordUpdate(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspTradingAccountPasswordUpdate")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspOrderInsert(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspOrderInsert")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspParkedOrderInsert(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspParkedOrderInsert")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspParkedOrderAction(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspParkedOrderAction")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspOrderAction(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspOrderAction")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQueryMaxOrderVolume(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQueryMaxOrderVolume")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspSettlementInfoConfirm(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspSettlementInfoConfirm")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspRemoveParkedOrder(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspRemoveParkedOrder")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspRemoveParkedOrderAction(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspRemoveParkedOrderAction")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspExecOrderInsert(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspExecOrderInsert")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspExecOrderAction(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspExecOrderAction")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspForQuoteInsert(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspForQuoteInsert")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQuoteInsert(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQuoteInsert")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQuoteAction(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQuoteAction")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryOrder(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryOrder")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryTrade(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryTrade")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryInvestorPosition(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryInvestorPosition")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryTradingAccount(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryTradingAccount")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryInvestor(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryInvestor")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryTradingCode(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryTradingCode")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryInstrumentMarginRate(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryInstrumentMarginRate")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryInstrumentCommissionRate(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryInstrumentCommissionRate")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryExchange(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryExchange")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryProduct(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryProduct")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryInstrument(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryInstrument")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryDepthMarketData(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryDepthMarketData")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQrySettlementInfo(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQrySettlementInfo")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryTransferBank(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryTransferBank")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryInvestorPositionDetail(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryInvestorPositionDetail")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryNotice(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryNotice")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQrySettlementInfoConfirm(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQrySettlementInfoConfirm")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryInvestorPositionCombineDetail(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryInvestorPositionCombineDetail")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryCFMMCTradingAccountKey(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryCFMMCTradingAccountKey")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryEWarrantOffset(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryEWarrantOffset")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryInvestorProductGroupMargin(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryInvestorProductGroupMargin")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryExchangeMarginRate(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryExchangeMarginRate")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryExchangeMarginRateAdjust(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryExchangeMarginRateAdjust")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryExchangeRate(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryExchangeRate")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQrySecAgentACIDMap(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQrySecAgentACIDMap")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryOptionInstrTradeCost(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryOptionInstrTradeCost")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryOptionInstrCommRate(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryOptionInstrCommRate")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryExecOrder(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryExecOrder")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryForQuote(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryForQuote")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryQuote(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryQuote")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryTransferSerial(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryTransferSerial")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryAccountregister(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryAccountregister")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspError(dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspError")(error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnOrder(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnOrder")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnTrade(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnTrade")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onErrRtnOrderInsert(dict data, dict error) + { + PyLock lock; + + try + { + this->get_override("onErrRtnOrderInsert")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onErrRtnOrderAction(dict data, dict error) + { + PyLock lock; + + try + { + this->get_override("onErrRtnOrderAction")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnInstrumentStatus(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnInstrumentStatus")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnTradingNotice(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnTradingNotice")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnErrorConditionalOrder(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnErrorConditionalOrder")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnExecOrder(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnExecOrder")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onErrRtnExecOrderInsert(dict data, dict error) + { + PyLock lock; + + try + { + this->get_override("onErrRtnExecOrderInsert")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onErrRtnExecOrderAction(dict data, dict error) + { + PyLock lock; + + try + { + this->get_override("onErrRtnExecOrderAction")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onErrRtnForQuoteInsert(dict data, dict error) + { + PyLock lock; + + try + { + this->get_override("onErrRtnForQuoteInsert")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnQuote(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnQuote")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onErrRtnQuoteInsert(dict data, dict error) + { + PyLock lock; + + try + { + this->get_override("onErrRtnQuoteInsert")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onErrRtnQuoteAction(dict data, dict error) + { + PyLock lock; + + try + { + this->get_override("onErrRtnQuoteAction")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnForQuoteRsp(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnForQuoteRsp")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryContractBank(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryContractBank")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryParkedOrder(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryParkedOrder")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryParkedOrderAction(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryParkedOrderAction")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryTradingNotice(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryTradingNotice")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryBrokerTradingParams(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryBrokerTradingParams")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQryBrokerTradingAlgos(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQryBrokerTradingAlgos")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnFromBankToFutureByBank(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnFromBankToFutureByBank")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnFromFutureToBankByBank(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnFromFutureToBankByBank")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnRepealFromBankToFutureByBank(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnRepealFromBankToFutureByBank")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnRepealFromFutureToBankByBank(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnRepealFromFutureToBankByBank")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnFromBankToFutureByFuture(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnFromBankToFutureByFuture")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnFromFutureToBankByFuture(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnFromFutureToBankByFuture")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnRepealFromBankToFutureByFutureManual(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnRepealFromBankToFutureByFutureManual")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnRepealFromFutureToBankByFutureManual(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnRepealFromFutureToBankByFutureManual")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnQueryBankBalanceByFuture(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnQueryBankBalanceByFuture")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onErrRtnBankToFutureByFuture(dict data, dict error) + { + PyLock lock; + + try + { + this->get_override("onErrRtnBankToFutureByFuture")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onErrRtnFutureToBankByFuture(dict data, dict error) + { + PyLock lock; + + try + { + this->get_override("onErrRtnFutureToBankByFuture")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onErrRtnRepealBankToFutureByFutureManual(dict data, dict error) + { + PyLock lock; + + try + { + this->get_override("onErrRtnRepealBankToFutureByFutureManual")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onErrRtnRepealFutureToBankByFutureManual(dict data, dict error) + { + PyLock lock; + + try + { + this->get_override("onErrRtnRepealFutureToBankByFutureManual")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onErrRtnQueryBankBalanceByFuture(dict data, dict error) + { + PyLock lock; + + try + { + this->get_override("onErrRtnQueryBankBalanceByFuture")(data, error); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnRepealFromBankToFutureByFuture(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnRepealFromBankToFutureByFuture")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnRepealFromFutureToBankByFuture(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnRepealFromFutureToBankByFuture")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspFromBankToFutureByFuture(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspFromBankToFutureByFuture")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspFromFutureToBankByFuture(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspFromFutureToBankByFuture")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRspQueryBankAccountMoneyByFuture(dict data, dict error, int id, bool last) + { + PyLock lock; + + try + { + this->get_override("onRspQueryBankAccountMoneyByFuture")(data, error, id, last); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnOpenAccountByBank(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnOpenAccountByBank")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnCancelAccountByBank(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnCancelAccountByBank")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; + + virtual void onRtnChangeAccountByBank(dict data) + { + PyLock lock; + + try + { + this->get_override("onRtnChangeAccountByBank")(data); + } + catch (error_already_set const &) + { + PyErr_Print(); + } + }; +}; + +BOOST_PYTHON_MODULE(vnctptd) +{ + PyEval_InitThreads(); //导入时运行,保证先创建GIL + + class_("TdApi") + .def("createFtdcTraderApi", &TdApiWrap::createFtdcTraderApi) + .def("release", &TdApiWrap::release) + .def("init", &TdApiWrap::init) + .def("join", &TdApiWrap::join) + .def("exit", &TdApiWrap::exit) + .def("getTradingDay", &TdApiWrap::getTradingDay) + .def("registerFront", &TdApiWrap::registerFront) + .def("subscribePrivateTopic", &TdApiWrap::subscribePrivateTopic) + .def("subscribePublicTopic", &TdApiWrap::subscribePublicTopic) + .def("reqAuthenticate", &TdApiWrap::reqAuthenticate) + .def("reqUserLogin", &TdApiWrap::reqUserLogin) + .def("reqUserLogout", &TdApiWrap::reqUserLogout) + .def("reqUserPasswordUpdate", &TdApiWrap::reqUserPasswordUpdate) + .def("reqTradingAccountPasswordUpdate", &TdApiWrap::reqTradingAccountPasswordUpdate) + .def("reqOrderInsert", &TdApiWrap::reqOrderInsert) + .def("reqParkedOrderInsert", &TdApiWrap::reqParkedOrderInsert) + .def("reqParkedOrderAction", &TdApiWrap::reqParkedOrderAction) + .def("reqOrderAction", &TdApiWrap::reqOrderAction) + .def("reqQueryMaxOrderVolume", &TdApiWrap::reqQueryMaxOrderVolume) + .def("reqSettlementInfoConfirm", &TdApiWrap::reqSettlementInfoConfirm) + .def("reqRemoveParkedOrder", &TdApiWrap::reqRemoveParkedOrder) + .def("reqRemoveParkedOrderAction", &TdApiWrap::reqRemoveParkedOrderAction) + .def("reqExecOrderInsert", &TdApiWrap::reqExecOrderInsert) + .def("reqExecOrderAction", &TdApiWrap::reqExecOrderAction) + .def("reqForQuoteInsert", &TdApiWrap::reqForQuoteInsert) + .def("reqQuoteInsert", &TdApiWrap::reqQuoteInsert) + .def("reqQuoteAction", &TdApiWrap::reqQuoteAction) + .def("reqQryOrder", &TdApiWrap::reqQryOrder) + .def("reqQryTrade", &TdApiWrap::reqQryTrade) + .def("reqQryInvestorPosition", &TdApiWrap::reqQryInvestorPosition) + .def("reqQryTradingAccount", &TdApiWrap::reqQryTradingAccount) + .def("reqQryInvestor", &TdApiWrap::reqQryInvestor) + .def("reqQryTradingCode", &TdApiWrap::reqQryTradingCode) + .def("reqQryInstrumentMarginRate", &TdApiWrap::reqQryInstrumentMarginRate) + .def("reqQryInstrumentCommissionRate", &TdApiWrap::reqQryInstrumentCommissionRate) + .def("reqQryExchange", &TdApiWrap::reqQryExchange) + .def("reqQryProduct", &TdApiWrap::reqQryProduct) + .def("reqQryInstrument", &TdApiWrap::reqQryInstrument) + .def("reqQryDepthMarketData", &TdApiWrap::reqQryDepthMarketData) + .def("reqQrySettlementInfo", &TdApiWrap::reqQrySettlementInfo) + .def("reqQryTransferBank", &TdApiWrap::reqQryTransferBank) + .def("reqQryInvestorPositionDetail", &TdApiWrap::reqQryInvestorPositionDetail) + .def("reqQryNotice", &TdApiWrap::reqQryNotice) + .def("reqQrySettlementInfoConfirm", &TdApiWrap::reqQrySettlementInfoConfirm) + .def("reqQryInvestorPositionCombineDetail", &TdApiWrap::reqQryInvestorPositionCombineDetail) + .def("reqQryCFMMCTradingAccountKey", &TdApiWrap::reqQryCFMMCTradingAccountKey) + .def("reqQryEWarrantOffset", &TdApiWrap::reqQryEWarrantOffset) + .def("reqQryInvestorProductGroupMargin", &TdApiWrap::reqQryInvestorProductGroupMargin) + .def("reqQryExchangeMarginRate", &TdApiWrap::reqQryExchangeMarginRate) + .def("reqQryExchangeMarginRateAdjust", &TdApiWrap::reqQryExchangeMarginRateAdjust) + .def("reqQryExchangeRate", &TdApiWrap::reqQryExchangeRate) + .def("reqQrySecAgentACIDMap", &TdApiWrap::reqQrySecAgentACIDMap) + .def("reqQryOptionInstrTradeCost", &TdApiWrap::reqQryOptionInstrTradeCost) + .def("reqQryOptionInstrCommRate", &TdApiWrap::reqQryOptionInstrCommRate) + .def("reqQryExecOrder", &TdApiWrap::reqQryExecOrder) + .def("reqQryForQuote", &TdApiWrap::reqQryForQuote) + .def("reqQryQuote", &TdApiWrap::reqQryQuote) + .def("reqQryTransferSerial", &TdApiWrap::reqQryTransferSerial) + .def("reqQryAccountregister", &TdApiWrap::reqQryAccountregister) + .def("reqQryContractBank", &TdApiWrap::reqQryContractBank) + .def("reqQryParkedOrder", &TdApiWrap::reqQryParkedOrder) + .def("reqQryParkedOrderAction", &TdApiWrap::reqQryParkedOrderAction) + .def("reqQryTradingNotice", &TdApiWrap::reqQryTradingNotice) + .def("reqQryBrokerTradingParams", &TdApiWrap::reqQryBrokerTradingParams) + .def("reqQryBrokerTradingAlgos", &TdApiWrap::reqQryBrokerTradingAlgos) + .def("reqFromBankToFutureByFuture", &TdApiWrap::reqFromBankToFutureByFuture) + .def("reqFromFutureToBankByFuture", &TdApiWrap::reqFromFutureToBankByFuture) + .def("reqQueryBankAccountMoneyByFuture", &TdApiWrap::reqQueryBankAccountMoneyByFuture) + + .def("onFrontConnected", pure_virtual(&TdApiWrap::onFrontConnected)) + .def("onFrontDisconnected", pure_virtual(&TdApiWrap::onFrontDisconnected)) + .def("onHeartBeatWarning", pure_virtual(&TdApiWrap::onHeartBeatWarning)) + .def("onRspError", pure_virtual(&TdApiWrap::onRspError)) + .def("onRspAuthenticate", pure_virtual(&TdApiWrap::onRspAuthenticate)) + .def("onRspUserLogin", pure_virtual(&TdApiWrap::onRspUserLogin)) + .def("onRspUserLogout", pure_virtual(&TdApiWrap::onRspUserLogout)) + .def("onRspUserPasswordUpdate", pure_virtual(&TdApiWrap::onRspUserPasswordUpdate)) + .def("onRspTradingAccountPasswordUpdate", pure_virtual(&TdApiWrap::onRspTradingAccountPasswordUpdate)) + .def("onRspOrderInsert", pure_virtual(&TdApiWrap::onRspOrderInsert)) + .def("onRspParkedOrderInsert", pure_virtual(&TdApiWrap::onRspParkedOrderInsert)) + .def("onRspParkedOrderAction", pure_virtual(&TdApiWrap::onRspParkedOrderAction)) + .def("onRspOrderAction", pure_virtual(&TdApiWrap::onRspOrderAction)) + .def("onRspQueryMaxOrderVolume", pure_virtual(&TdApiWrap::onRspQueryMaxOrderVolume)) + .def("onRspSettlementInfoConfirm", pure_virtual(&TdApiWrap::onRspSettlementInfoConfirm)) + .def("onRspRemoveParkedOrder", pure_virtual(&TdApiWrap::onRspRemoveParkedOrder)) + .def("onRspRemoveParkedOrderAction", pure_virtual(&TdApiWrap::onRspRemoveParkedOrderAction)) + .def("onRspExecOrderInsert", pure_virtual(&TdApiWrap::onRspExecOrderInsert)) + .def("onRspExecOrderAction", pure_virtual(&TdApiWrap::onRspExecOrderAction)) + .def("onRspForQuoteInsert", pure_virtual(&TdApiWrap::onRspForQuoteInsert)) + .def("onRspQuoteInsert", pure_virtual(&TdApiWrap::onRspQuoteInsert)) + .def("onRspQuoteAction", pure_virtual(&TdApiWrap::onRspQuoteAction)) + .def("onRspQryOrder", pure_virtual(&TdApiWrap::onRspQryOrder)) + .def("onRspQryTrade", pure_virtual(&TdApiWrap::onRspQryTrade)) + .def("onRspQryInvestorPosition", pure_virtual(&TdApiWrap::onRspQryInvestorPosition)) + .def("onRspQryTradingAccount", pure_virtual(&TdApiWrap::onRspQryTradingAccount)) + .def("onRspQryInvestor", pure_virtual(&TdApiWrap::onRspQryInvestor)) + .def("onRspQryTradingCode", pure_virtual(&TdApiWrap::onRspQryTradingCode)) + .def("onRspQryInstrumentMarginRate", pure_virtual(&TdApiWrap::onRspQryInstrumentMarginRate)) + .def("onRspQryInstrumentCommissionRate", pure_virtual(&TdApiWrap::onRspQryInstrumentCommissionRate)) + .def("onRspQryExchange", pure_virtual(&TdApiWrap::onRspQryExchange)) + .def("onRspQryProduct", pure_virtual(&TdApiWrap::onRspQryProduct)) + .def("onRspQryInstrument", pure_virtual(&TdApiWrap::onRspQryInstrument)) + .def("onRspQryDepthMarketData", pure_virtual(&TdApiWrap::onRspQryDepthMarketData)) + .def("onRspQrySettlementInfo", pure_virtual(&TdApiWrap::onRspQrySettlementInfo)) + .def("onRspQryTransferBank", pure_virtual(&TdApiWrap::onRspQryTransferBank)) + .def("onRspQryInvestorPositionDetail", pure_virtual(&TdApiWrap::onRspQryInvestorPositionDetail)) + .def("onRspQryNotice", pure_virtual(&TdApiWrap::onRspQryNotice)) + .def("onRspQrySettlementInfoConfirm", pure_virtual(&TdApiWrap::onRspQrySettlementInfoConfirm)) + .def("onRspQryInvestorPositionCombineDetail", pure_virtual(&TdApiWrap::onRspQryInvestorPositionCombineDetail)) + .def("onRspQryCFMMCTradingAccountKey", pure_virtual(&TdApiWrap::onRspQryCFMMCTradingAccountKey)) + .def("onRspQryEWarrantOffset", pure_virtual(&TdApiWrap::onRspQryEWarrantOffset)) + .def("onRspQryInvestorProductGroupMargin", pure_virtual(&TdApiWrap::onRspQryInvestorProductGroupMargin)) + .def("onRspQryExchangeMarginRate", pure_virtual(&TdApiWrap::onRspQryExchangeMarginRate)) + .def("onRspQryExchangeMarginRateAdjust", pure_virtual(&TdApiWrap::onRspQryExchangeMarginRateAdjust)) + .def("onRspQryExchangeRate", pure_virtual(&TdApiWrap::onRspQryExchangeRate)) + .def("onRspQrySecAgentACIDMap", pure_virtual(&TdApiWrap::onRspQrySecAgentACIDMap)) + .def("onRspQryOptionInstrTradeCost", pure_virtual(&TdApiWrap::onRspQryOptionInstrTradeCost)) + .def("onRspQryOptionInstrCommRate", pure_virtual(&TdApiWrap::onRspQryOptionInstrCommRate)) + .def("onRspQryExecOrder", pure_virtual(&TdApiWrap::onRspQryExecOrder)) + .def("onRspQryForQuote", pure_virtual(&TdApiWrap::onRspQryForQuote)) + .def("onRspQryQuote", pure_virtual(&TdApiWrap::onRspQryQuote)) + .def("onRspQryTransferSerial", pure_virtual(&TdApiWrap::onRspQryTransferSerial)) + .def("onRspQryAccountregister", pure_virtual(&TdApiWrap::onRspQryAccountregister)) + .def("onRtnOrder", pure_virtual(&TdApiWrap::onRtnOrder)) + .def("onRtnTrade", pure_virtual(&TdApiWrap::onRtnTrade)) + .def("onErrRtnOrderInsert", pure_virtual(&TdApiWrap::onErrRtnOrderInsert)) + .def("onErrRtnOrderAction", pure_virtual(&TdApiWrap::onErrRtnOrderAction)) + .def("onRtnInstrumentStatus", pure_virtual(&TdApiWrap::onRtnInstrumentStatus)) + .def("onRtnTradingNotice", pure_virtual(&TdApiWrap::onRtnTradingNotice)) + .def("onRtnErrorConditionalOrder", pure_virtual(&TdApiWrap::onRtnErrorConditionalOrder)) + .def("onRtnExecOrder", pure_virtual(&TdApiWrap::onRtnExecOrder)) + .def("onErrRtnExecOrderInsert", pure_virtual(&TdApiWrap::onErrRtnExecOrderInsert)) + .def("onErrRtnExecOrderAction", pure_virtual(&TdApiWrap::onErrRtnExecOrderAction)) + .def("onErrRtnForQuoteInsert", pure_virtual(&TdApiWrap::onErrRtnForQuoteInsert)) + .def("onRtnQuote", pure_virtual(&TdApiWrap::onRtnQuote)) + .def("onErrRtnQuoteInsert", pure_virtual(&TdApiWrap::onErrRtnQuoteInsert)) + .def("onErrRtnQuoteAction", pure_virtual(&TdApiWrap::onErrRtnQuoteAction)) + .def("onRtnForQuoteRsp", pure_virtual(&TdApiWrap::onRtnForQuoteRsp)) + .def("onRspQryContractBank", pure_virtual(&TdApiWrap::onRspQryContractBank)) + .def("onRspQryParkedOrder", pure_virtual(&TdApiWrap::onRspQryParkedOrder)) + .def("onRspQryParkedOrderAction", pure_virtual(&TdApiWrap::onRspQryParkedOrderAction)) + .def("onRspQryTradingNotice", pure_virtual(&TdApiWrap::onRspQryTradingNotice)) + .def("onRspQryBrokerTradingParams", pure_virtual(&TdApiWrap::onRspQryBrokerTradingParams)) + .def("onRspQryBrokerTradingAlgos", pure_virtual(&TdApiWrap::onRspQryBrokerTradingAlgos)) + .def("onRtnFromBankToFutureByBank", pure_virtual(&TdApiWrap::onRtnFromBankToFutureByBank)) + .def("onRtnFromFutureToBankByBank", pure_virtual(&TdApiWrap::onRtnFromFutureToBankByBank)) + .def("onRtnRepealFromBankToFutureByBank", pure_virtual(&TdApiWrap::onRtnRepealFromBankToFutureByBank)) + .def("onRtnRepealFromFutureToBankByBank", pure_virtual(&TdApiWrap::onRtnRepealFromFutureToBankByBank)) + .def("onRtnFromBankToFutureByFuture", pure_virtual(&TdApiWrap::onRtnFromBankToFutureByFuture)) + .def("onRtnFromFutureToBankByFuture", pure_virtual(&TdApiWrap::onRtnFromFutureToBankByFuture)) + .def("onRtnRepealFromBankToFutureByFutureManual", pure_virtual(&TdApiWrap::onRtnRepealFromBankToFutureByFutureManual)) + .def("onRtnRepealFromFutureToBankByFutureManual", pure_virtual(&TdApiWrap::onRtnRepealFromFutureToBankByFutureManual)) + .def("onRtnQueryBankBalanceByFuture", pure_virtual(&TdApiWrap::onRtnQueryBankBalanceByFuture)) + .def("onErrRtnBankToFutureByFuture", pure_virtual(&TdApiWrap::onErrRtnBankToFutureByFuture)) + .def("onErrRtnFutureToBankByFuture", pure_virtual(&TdApiWrap::onErrRtnFutureToBankByFuture)) + .def("onErrRtnRepealBankToFutureByFutureManual", pure_virtual(&TdApiWrap::onErrRtnRepealBankToFutureByFutureManual)) + .def("onErrRtnRepealFutureToBankByFutureManual", pure_virtual(&TdApiWrap::onErrRtnRepealFutureToBankByFutureManual)) + .def("onErrRtnQueryBankBalanceByFuture", pure_virtual(&TdApiWrap::onErrRtnQueryBankBalanceByFuture)) + .def("onRtnRepealFromBankToFutureByFuture", pure_virtual(&TdApiWrap::onRtnRepealFromBankToFutureByFuture)) + .def("onRtnRepealFromFutureToBankByFuture", pure_virtual(&TdApiWrap::onRtnRepealFromFutureToBankByFuture)) + .def("onRspFromBankToFutureByFuture", pure_virtual(&TdApiWrap::onRspFromBankToFutureByFuture)) + .def("onRspFromFutureToBankByFuture", pure_virtual(&TdApiWrap::onRspFromFutureToBankByFuture)) + .def("onRspQueryBankAccountMoneyByFuture", pure_virtual(&TdApiWrap::onRspQueryBankAccountMoneyByFuture)) + .def("onRtnOpenAccountByBank", pure_virtual(&TdApiWrap::onRtnOpenAccountByBank)) + .def("onRtnCancelAccountByBank", pure_virtual(&TdApiWrap::onRtnCancelAccountByBank)) + .def("onRtnChangeAccountByBank", pure_virtual(&TdApiWrap::onRtnChangeAccountByBank)) + ; +} \ No newline at end of file diff --git a/vn.ctp/vnctptd/vnctptd/vnctptd.h b/vn.ctp/vnctptd/vnctptd/vnctptd.h new file mode 100644 index 00000000..59e4c60c --- /dev/null +++ b/vn.ctp/vnctptd/vnctptd/vnctptd.h @@ -0,0 +1,1101 @@ +//说明部分 +/* +由于CTP API中和资金转账相关的函数太多, +同时也已经有大量的客户端支持这些功能, +因此在这个Python封装中暂时选择只支持交易功能 +*/ + + +//系统 +#include "stdafx.h" +#include +#include + +//Boost +#define BOOST_PYTHON_STATIC_LIB +#include //python封装 +#include //python封装 +#include //python封装 +#include //python封装 +#include //python封装 +#include //任务队列的线程功能 +#include //任务队列的线程功能 +#include //任务队列的任务实现 + +//API +#include "ThostFtdcTraderApi.h" + +//命名空间 +using namespace std; +using namespace boost::python; +using namespace boost; + +//常量 +#define ONFRONTCONNECTED 1 +#define ONFRONTDISCONNECTED 2 +#define ONHEARTBEATWARNING 3 +#define ONRSPAUTHENTICATE 4 +#define ONRSPUSERLOGIN 5 +#define ONRSPUSERLOGOUT 6 +#define ONRSPUSERPASSWORDUPDATE 7 +#define ONRSPTRADINGACCOUNTPASSWORDUPDATE 8 +#define ONRSPORDERINSERT 9 +#define ONRSPPARKEDORDERINSERT 10 +#define ONRSPPARKEDORDERACTION 11 +#define ONRSPORDERACTION 12 +#define ONRSPQUERYMAXORDERVOLUME 13 +#define ONRSPSETTLEMENTINFOCONFIRM 14 +#define ONRSPREMOVEPARKEDORDER 15 +#define ONRSPREMOVEPARKEDORDERACTION 16 +#define ONRSPEXECORDERINSERT 17 +#define ONRSPEXECORDERACTION 18 +#define ONRSPFORQUOTEINSERT 19 +#define ONRSPQUOTEINSERT 20 +#define ONRSPQUOTEACTION 21 +#define ONRSPQRYORDER 22 +#define ONRSPQRYTRADE 23 +#define ONRSPQRYINVESTORPOSITION 24 +#define ONRSPQRYTRADINGACCOUNT 25 +#define ONRSPQRYINVESTOR 26 +#define ONRSPQRYTRADINGCODE 27 +#define ONRSPQRYINSTRUMENTMARGINRATE 28 +#define ONRSPQRYINSTRUMENTCOMMISSIONRATE 29 +#define ONRSPQRYEXCHANGE 30 +#define ONRSPQRYPRODUCT 31 +#define ONRSPQRYINSTRUMENT 32 +#define ONRSPQRYDEPTHMARKETDATA 33 +#define ONRSPQRYSETTLEMENTINFO 34 +#define ONRSPQRYTRANSFERBANK 35 +#define ONRSPQRYINVESTORPOSITIONDETAIL 36 +#define ONRSPQRYNOTICE 37 +#define ONRSPQRYSETTLEMENTINFOCONFIRM 38 +#define ONRSPQRYINVESTORPOSITIONCOMBINEDETAIL 39 +#define ONRSPQRYCFMMCTRADINGACCOUNTKEY 40 +#define ONRSPQRYEWARRANTOFFSET 41 +#define ONRSPQRYINVESTORPRODUCTGROUPMARGIN 42 +#define ONRSPQRYEXCHANGEMARGINRATE 43 +#define ONRSPQRYEXCHANGEMARGINRATEADJUST 44 +#define ONRSPQRYEXCHANGERATE 45 +#define ONRSPQRYSECAGENTACIDMAP 46 +#define ONRSPQRYOPTIONINSTRTRADECOST 47 +#define ONRSPQRYOPTIONINSTRCOMMRATE 48 +#define ONRSPQRYEXECORDER 49 +#define ONRSPQRYFORQUOTE 50 +#define ONRSPQRYQUOTE 51 +#define ONRSPQRYTRANSFERSERIAL 52 +#define ONRSPQRYACCOUNTREGISTER 53 +#define ONRSPERROR 54 +#define ONRTNORDER 55 +#define ONRTNTRADE 56 +#define ONERRRTNORDERINSERT 57 +#define ONERRRTNORDERACTION 58 +#define ONRTNINSTRUMENTSTATUS 59 +#define ONRTNTRADINGNOTICE 60 +#define ONRTNERRORCONDITIONALORDER 61 +#define ONRTNEXECORDER 62 +#define ONERRRTNEXECORDERINSERT 63 +#define ONERRRTNEXECORDERACTION 64 +#define ONERRRTNFORQUOTEINSERT 65 +#define ONRTNQUOTE 66 +#define ONERRRTNQUOTEINSERT 67 +#define ONERRRTNQUOTEACTION 68 +#define ONRTNFORQUOTERSP 69 +#define ONRSPQRYCONTRACTBANK 70 +#define ONRSPQRYPARKEDORDER 71 +#define ONRSPQRYPARKEDORDERACTION 72 +#define ONRSPQRYTRADINGNOTICE 73 +#define ONRSPQRYBROKERTRADINGPARAMS 74 +#define ONRSPQRYBROKERTRADINGALGOS 75 +#define ONRTNFROMBANKTOFUTUREBYBANK 76 +#define ONRTNFROMFUTURETOBANKBYBANK 77 +#define ONRTNREPEALFROMBANKTOFUTUREBYBANK 78 +#define ONRTNREPEALFROMFUTURETOBANKBYBANK 79 +#define ONRTNFROMBANKTOFUTUREBYFUTURE 80 +#define ONRTNFROMFUTURETOBANKBYFUTURE 81 +#define ONRTNREPEALFROMBANKTOFUTUREBYFUTUREMANUAL 82 +#define ONRTNREPEALFROMFUTURETOBANKBYFUTUREMANUAL 83 +#define ONRTNQUERYBANKBALANCEBYFUTURE 84 +#define ONERRRTNBANKTOFUTUREBYFUTURE 85 +#define ONERRRTNFUTURETOBANKBYFUTURE 86 +#define ONERRRTNREPEALBANKTOFUTUREBYFUTUREMANUAL 87 +#define ONERRRTNREPEALFUTURETOBANKBYFUTUREMANUAL 88 +#define ONERRRTNQUERYBANKBALANCEBYFUTURE 89 +#define ONRTNREPEALFROMBANKTOFUTUREBYFUTURE 90 +#define ONRTNREPEALFROMFUTURETOBANKBYFUTURE 91 +#define ONRSPFROMBANKTOFUTUREBYFUTURE 92 +#define ONRSPFROMFUTURETOBANKBYFUTURE 93 +#define ONRSPQUERYBANKACCOUNTMONEYBYFUTURE 94 +#define ONRTNOPENACCOUNTBYBANK 95 +#define ONRTNCANCELACCOUNTBYBANK 96 +#define ONRTNCHANGEACCOUNTBYBANK 97 + + + + +///------------------------------------------------------------------------------------- +///API中的部分组件 +///------------------------------------------------------------------------------------- + +//GIL全局锁简化获取用, +//用于帮助C++线程获得GIL锁,从而防止python崩溃 +class PyLock +{ +private: + PyGILState_STATE gil_state; + +public: + //在某个函数方法中创建该对象时,获得GIL锁 + PyLock() + { + gil_state = PyGILState_Ensure(); + } + + //在某个函数完成后销毁该对象时,解放GIL锁 + ~PyLock() + { + PyGILState_Release(gil_state); + } +}; + + +//任务结构体 +struct Task +{ + int task_name; //回调函数名称对应的常量 + any task_data; //数据结构体 + any task_error; //错误结构体 + int task_id; //请求id + bool task_last; //是否为最后返回 +}; + + +///线程安全的队列 +template + +class ConcurrentQueue +{ +private: + queue the_queue; //标准库队列 + mutable mutex the_mutex; //boost互斥锁 + condition_variable the_condition_variable; //boost条件变量 + +public: + + //存入新的任务 + void push(Data const& data) + { + mutex::scoped_lock lock(the_mutex); //获取互斥锁 + the_queue.push(data); //向队列中存入数据 + lock.unlock(); //释放锁 + the_condition_variable.notify_one(); //通知正在阻塞等待的线程 + } + + //检查队列是否为空 + bool empty() const + { + mutex::scoped_lock lock(the_mutex); + return the_queue.empty(); + } + + //取出 + Data wait_and_pop() + { + mutex::scoped_lock lock(the_mutex); + + while (the_queue.empty()) //当队列为空时 + { + the_condition_variable.wait(lock); //等待条件变量通知 + } + + Data popped_value = the_queue.front(); //获取队列中的最后一个任务 + the_queue.pop(); //删除该任务 + return popped_value; //返回该任务 + } + +}; + + +//从字典中获取某个建值对应的整数,并赋值到请求结构体对象的值上 +void getInt(dict d, string key, int* value); + + +//从字典中获取某个建值对应的浮点数,并赋值到请求结构体对象的值上 +void getDouble(dict d, string key, double* value); + + +//从字典中获取某个建值对应的字符串,并赋值到请求结构体对象的值上 +void getChar(dict d, string key, char* value); + + + +///------------------------------------------------------------------------------------- +///C++ SPI的回调函数方法实现 +///------------------------------------------------------------------------------------- + +//API的继承实现 +class TdApi : public CThostFtdcTraderSpi +{ +private: + CThostFtdcTraderApi* api; //API对象 + thread *task_thread; //工作线程指针(向python中推送数据) + ConcurrentQueue task_queue; //任务队列 + +public: + TdApi() + { + function0 f = boost::bind(&TdApi::processTask, this); + thread t(f); + this->task_thread = &t; + }; + + ~TdApi() + { + }; + + //------------------------------------------------------------------------------------- + //API回调函数 + //------------------------------------------------------------------------------------- + + ///当客户端与交易后台建立起通信连接时(还未登录前),该方法被调用。 + virtual void OnFrontConnected(); + + ///当客户端与交易后台通信连接断开时,该方法被调用。当发生这个情况后,API会自动重新连接,客户端可不做处理。 + ///@param nReason 错误原因 + /// 0x1001 网络读失败 + /// 0x1002 网络写失败 + /// 0x2001 接收心跳超时 + /// 0x2002 发送心跳失败 + /// 0x2003 收到错误报文 + virtual void OnFrontDisconnected(int nReason); + + ///心跳超时警告。当长时间未收到报文时,该方法被调用。 + ///@param nTimeLapse 距离上次接收报文的时间 + virtual void OnHeartBeatWarning(int nTimeLapse); + + ///客户端认证响应 + virtual void OnRspAuthenticate(CThostFtdcRspAuthenticateField *pRspAuthenticateField, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast); + + ///登录请求响应 + virtual void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///登出请求响应 + virtual void OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///用户口令更新请求响应 + virtual void OnRspUserPasswordUpdate(CThostFtdcUserPasswordUpdateField *pUserPasswordUpdate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///资金账户口令更新请求响应 + virtual void OnRspTradingAccountPasswordUpdate(CThostFtdcTradingAccountPasswordUpdateField *pTradingAccountPasswordUpdate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///报单录入请求响应 + virtual void OnRspOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///预埋单录入请求响应 + virtual void OnRspParkedOrderInsert(CThostFtdcParkedOrderField *pParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///预埋撤单录入请求响应 + virtual void OnRspParkedOrderAction(CThostFtdcParkedOrderActionField *pParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///报单操作请求响应 + virtual void OnRspOrderAction(CThostFtdcInputOrderActionField *pInputOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///查询最大报单数量响应 + virtual void OnRspQueryMaxOrderVolume(CThostFtdcQueryMaxOrderVolumeField *pQueryMaxOrderVolume, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///投资者结算结果确认响应 + virtual void OnRspSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///删除预埋单响应 + virtual void OnRspRemoveParkedOrder(CThostFtdcRemoveParkedOrderField *pRemoveParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///删除预埋撤单响应 + virtual void OnRspRemoveParkedOrderAction(CThostFtdcRemoveParkedOrderActionField *pRemoveParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///执行宣告录入请求响应 + virtual void OnRspExecOrderInsert(CThostFtdcInputExecOrderField *pInputExecOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///执行宣告操作请求响应 + virtual void OnRspExecOrderAction(CThostFtdcInputExecOrderActionField *pInputExecOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///询价录入请求响应 + virtual void OnRspForQuoteInsert(CThostFtdcInputForQuoteField *pInputForQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///报价录入请求响应 + virtual void OnRspQuoteInsert(CThostFtdcInputQuoteField *pInputQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///报价操作请求响应 + virtual void OnRspQuoteAction(CThostFtdcInputQuoteActionField *pInputQuoteAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询报单响应 + virtual void OnRspQryOrder(CThostFtdcOrderField *pOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询成交响应 + virtual void OnRspQryTrade(CThostFtdcTradeField *pTrade, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询投资者持仓响应 + virtual void OnRspQryInvestorPosition(CThostFtdcInvestorPositionField *pInvestorPosition, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询资金账户响应 + virtual void OnRspQryTradingAccount(CThostFtdcTradingAccountField *pTradingAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询投资者响应 + virtual void OnRspQryInvestor(CThostFtdcInvestorField *pInvestor, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询交易编码响应 + virtual void OnRspQryTradingCode(CThostFtdcTradingCodeField *pTradingCode, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询合约保证金率响应 + virtual void OnRspQryInstrumentMarginRate(CThostFtdcInstrumentMarginRateField *pInstrumentMarginRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询合约手续费率响应 + virtual void OnRspQryInstrumentCommissionRate(CThostFtdcInstrumentCommissionRateField *pInstrumentCommissionRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询交易所响应 + virtual void OnRspQryExchange(CThostFtdcExchangeField *pExchange, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询产品响应 + virtual void OnRspQryProduct(CThostFtdcProductField *pProduct, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询合约响应 + virtual void OnRspQryInstrument(CThostFtdcInstrumentField *pInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询行情响应 + virtual void OnRspQryDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询投资者结算结果响应 + virtual void OnRspQrySettlementInfo(CThostFtdcSettlementInfoField *pSettlementInfo, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询转帐银行响应 + virtual void OnRspQryTransferBank(CThostFtdcTransferBankField *pTransferBank, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询投资者持仓明细响应 + virtual void OnRspQryInvestorPositionDetail(CThostFtdcInvestorPositionDetailField *pInvestorPositionDetail, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询客户通知响应 + virtual void OnRspQryNotice(CThostFtdcNoticeField *pNotice, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询结算信息确认响应 + virtual void OnRspQrySettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField *pSettlementInfoConfirm, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询投资者持仓明细响应 + virtual void OnRspQryInvestorPositionCombineDetail(CThostFtdcInvestorPositionCombineDetailField *pInvestorPositionCombineDetail, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///查询保证金监管系统经纪公司资金账户密钥响应 + virtual void OnRspQryCFMMCTradingAccountKey(CThostFtdcCFMMCTradingAccountKeyField *pCFMMCTradingAccountKey, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询仓单折抵信息响应 + virtual void OnRspQryEWarrantOffset(CThostFtdcEWarrantOffsetField *pEWarrantOffset, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询投资者品种/跨品种保证金响应 + virtual void OnRspQryInvestorProductGroupMargin(CThostFtdcInvestorProductGroupMarginField *pInvestorProductGroupMargin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询交易所保证金率响应 + virtual void OnRspQryExchangeMarginRate(CThostFtdcExchangeMarginRateField *pExchangeMarginRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询交易所调整保证金率响应 + virtual void OnRspQryExchangeMarginRateAdjust(CThostFtdcExchangeMarginRateAdjustField *pExchangeMarginRateAdjust, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询汇率响应 + virtual void OnRspQryExchangeRate(CThostFtdcExchangeRateField *pExchangeRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询二级代理操作员银期权限响应 + virtual void OnRspQrySecAgentACIDMap(CThostFtdcSecAgentACIDMapField *pSecAgentACIDMap, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询期权交易成本响应 + virtual void OnRspQryOptionInstrTradeCost(CThostFtdcOptionInstrTradeCostField *pOptionInstrTradeCost, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询期权合约手续费响应 + virtual void OnRspQryOptionInstrCommRate(CThostFtdcOptionInstrCommRateField *pOptionInstrCommRate, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询执行宣告响应 + virtual void OnRspQryExecOrder(CThostFtdcExecOrderField *pExecOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询询价响应 + virtual void OnRspQryForQuote(CThostFtdcForQuoteField *pForQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询报价响应 + virtual void OnRspQryQuote(CThostFtdcQuoteField *pQuote, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询转帐流水响应 + virtual void OnRspQryTransferSerial(CThostFtdcTransferSerialField *pTransferSerial, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询银期签约关系响应 + virtual void OnRspQryAccountregister(CThostFtdcAccountregisterField *pAccountregister, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///错误应答 + virtual void OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///报单通知 + virtual void OnRtnOrder(CThostFtdcOrderField *pOrder) ; + + ///成交通知 + virtual void OnRtnTrade(CThostFtdcTradeField *pTrade) ; + + ///报单录入错误回报 + virtual void OnErrRtnOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo) ; + + ///报单操作错误回报 + virtual void OnErrRtnOrderAction(CThostFtdcOrderActionField *pOrderAction, CThostFtdcRspInfoField *pRspInfo) ; + + ///合约交易状态通知 + virtual void OnRtnInstrumentStatus(CThostFtdcInstrumentStatusField *pInstrumentStatus) ; + + ///交易通知 + virtual void OnRtnTradingNotice(CThostFtdcTradingNoticeInfoField *pTradingNoticeInfo) ; + + ///提示条件单校验错误 + virtual void OnRtnErrorConditionalOrder(CThostFtdcErrorConditionalOrderField *pErrorConditionalOrder) ; + + ///执行宣告通知 + virtual void OnRtnExecOrder(CThostFtdcExecOrderField *pExecOrder) ; + + ///执行宣告录入错误回报 + virtual void OnErrRtnExecOrderInsert(CThostFtdcInputExecOrderField *pInputExecOrder, CThostFtdcRspInfoField *pRspInfo) ; + + ///执行宣告操作错误回报 + virtual void OnErrRtnExecOrderAction(CThostFtdcExecOrderActionField *pExecOrderAction, CThostFtdcRspInfoField *pRspInfo) ; + + ///询价录入错误回报 + virtual void OnErrRtnForQuoteInsert(CThostFtdcInputForQuoteField *pInputForQuote, CThostFtdcRspInfoField *pRspInfo) ; + + ///报价通知 + virtual void OnRtnQuote(CThostFtdcQuoteField *pQuote) ; + + ///报价录入错误回报 + virtual void OnErrRtnQuoteInsert(CThostFtdcInputQuoteField *pInputQuote, CThostFtdcRspInfoField *pRspInfo) ; + + ///报价操作错误回报 + virtual void OnErrRtnQuoteAction(CThostFtdcQuoteActionField *pQuoteAction, CThostFtdcRspInfoField *pRspInfo) ; + + ///询价通知 + virtual void OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp) ; + + ///请求查询签约银行响应 + virtual void OnRspQryContractBank(CThostFtdcContractBankField *pContractBank, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询预埋单响应 + virtual void OnRspQryParkedOrder(CThostFtdcParkedOrderField *pParkedOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询预埋撤单响应 + virtual void OnRspQryParkedOrderAction(CThostFtdcParkedOrderActionField *pParkedOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询交易通知响应 + virtual void OnRspQryTradingNotice(CThostFtdcTradingNoticeField *pTradingNotice, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询经纪公司交易参数响应 + virtual void OnRspQryBrokerTradingParams(CThostFtdcBrokerTradingParamsField *pBrokerTradingParams, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///请求查询经纪公司交易算法响应 + virtual void OnRspQryBrokerTradingAlgos(CThostFtdcBrokerTradingAlgosField *pBrokerTradingAlgos, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///银行发起银行资金转期货通知 + virtual void OnRtnFromBankToFutureByBank(CThostFtdcRspTransferField *pRspTransfer) ; + + ///银行发起期货资金转银行通知 + virtual void OnRtnFromFutureToBankByBank(CThostFtdcRspTransferField *pRspTransfer) ; + + ///银行发起冲正银行转期货通知 + virtual void OnRtnRepealFromBankToFutureByBank(CThostFtdcRspRepealField *pRspRepeal) ; + + ///银行发起冲正期货转银行通知 + virtual void OnRtnRepealFromFutureToBankByBank(CThostFtdcRspRepealField *pRspRepeal) ; + + ///期货发起银行资金转期货通知 + virtual void OnRtnFromBankToFutureByFuture(CThostFtdcRspTransferField *pRspTransfer) ; + + ///期货发起期货资金转银行通知 + virtual void OnRtnFromFutureToBankByFuture(CThostFtdcRspTransferField *pRspTransfer) ; + + ///系统运行时期货端手工发起冲正银行转期货请求,银行处理完毕后报盘发回的通知 + virtual void OnRtnRepealFromBankToFutureByFutureManual(CThostFtdcRspRepealField *pRspRepeal) ; + + ///系统运行时期货端手工发起冲正期货转银行请求,银行处理完毕后报盘发回的通知 + virtual void OnRtnRepealFromFutureToBankByFutureManual(CThostFtdcRspRepealField *pRspRepeal) ; + + ///期货发起查询银行余额通知 + virtual void OnRtnQueryBankBalanceByFuture(CThostFtdcNotifyQueryAccountField *pNotifyQueryAccount) ; + + ///期货发起银行资金转期货错误回报 + virtual void OnErrRtnBankToFutureByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo) ; + + ///期货发起期货资金转银行错误回报 + virtual void OnErrRtnFutureToBankByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo) ; + + ///系统运行时期货端手工发起冲正银行转期货错误回报 + virtual void OnErrRtnRepealBankToFutureByFutureManual(CThostFtdcReqRepealField *pReqRepeal, CThostFtdcRspInfoField *pRspInfo) ; + + ///系统运行时期货端手工发起冲正期货转银行错误回报 + virtual void OnErrRtnRepealFutureToBankByFutureManual(CThostFtdcReqRepealField *pReqRepeal, CThostFtdcRspInfoField *pRspInfo) ; + + ///期货发起查询银行余额错误回报 + virtual void OnErrRtnQueryBankBalanceByFuture(CThostFtdcReqQueryAccountField *pReqQueryAccount, CThostFtdcRspInfoField *pRspInfo) ; + + ///期货发起冲正银行转期货请求,银行处理完毕后报盘发回的通知 + virtual void OnRtnRepealFromBankToFutureByFuture(CThostFtdcRspRepealField *pRspRepeal) ; + + ///期货发起冲正期货转银行请求,银行处理完毕后报盘发回的通知 + virtual void OnRtnRepealFromFutureToBankByFuture(CThostFtdcRspRepealField *pRspRepeal) ; + + ///期货发起银行资金转期货应答 + virtual void OnRspFromBankToFutureByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///期货发起期货资金转银行应答 + virtual void OnRspFromFutureToBankByFuture(CThostFtdcReqTransferField *pReqTransfer, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///期货发起查询银行余额应答 + virtual void OnRspQueryBankAccountMoneyByFuture(CThostFtdcReqQueryAccountField *pReqQueryAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) ; + + ///银行发起银期开户通知 + virtual void OnRtnOpenAccountByBank(CThostFtdcOpenAccountField *pOpenAccount) ; + + ///银行发起银期销户通知 + virtual void OnRtnCancelAccountByBank(CThostFtdcCancelAccountField *pCancelAccount) ; + + ///银行发起变更银行账号通知 + virtual void OnRtnChangeAccountByBank(CThostFtdcChangeAccountField *pChangeAccount) ; + + //------------------------------------------------------------------------------------- + //task:任务 + //------------------------------------------------------------------------------------- + + void processTask(); + + void processFrontConnected(Task task); + + void processFrontDisconnected(Task task); + + void processHeartBeatWarning(Task task); + + void processRspAuthenticate(Task task); + + void processRspUserLogin(Task task); + + void processRspUserLogout(Task task); + + void processRspUserPasswordUpdate(Task task); + + void processRspTradingAccountPasswordUpdate(Task task); + + void processRspOrderInsert(Task task); + + void processRspParkedOrderInsert(Task task); + + void processRspParkedOrderAction(Task task); + + void processRspOrderAction(Task task); + + void processRspQueryMaxOrderVolume(Task task); + + void processRspSettlementInfoConfirm(Task task); + + void processRspRemoveParkedOrder(Task task); + + void processRspRemoveParkedOrderAction(Task task); + + void processRspExecOrderInsert(Task task); + + void processRspExecOrderAction(Task task); + + void processRspForQuoteInsert(Task task); + + void processRspQuoteInsert(Task task); + + void processRspQuoteAction(Task task); + + void processRspQryOrder(Task task); + + void processRspQryTrade(Task task); + + void processRspQryInvestorPosition(Task task); + + void processRspQryTradingAccount(Task task); + + void processRspQryInvestor(Task task); + + void processRspQryTradingCode(Task task); + + void processRspQryInstrumentMarginRate(Task task); + + void processRspQryInstrumentCommissionRate(Task task); + + void processRspQryExchange(Task task); + + void processRspQryProduct(Task task); + + void processRspQryInstrument(Task task); + + void processRspQryDepthMarketData(Task task); + + void processRspQrySettlementInfo(Task task); + + void processRspQryTransferBank(Task task); + + void processRspQryInvestorPositionDetail(Task task); + + void processRspQryNotice(Task task); + + void processRspQrySettlementInfoConfirm(Task task); + + void processRspQryInvestorPositionCombineDetail(Task task); + + void processRspQryCFMMCTradingAccountKey(Task task); + + void processRspQryEWarrantOffset(Task task); + + void processRspQryInvestorProductGroupMargin(Task task); + + void processRspQryExchangeMarginRate(Task task); + + void processRspQryExchangeMarginRateAdjust(Task task); + + void processRspQryExchangeRate(Task task); + + void processRspQrySecAgentACIDMap(Task task); + + void processRspQryOptionInstrTradeCost(Task task); + + void processRspQryOptionInstrCommRate(Task task); + + void processRspQryExecOrder(Task task); + + void processRspQryForQuote(Task task); + + void processRspQryQuote(Task task); + + void processRspQryTransferSerial(Task task); + + void processRspQryAccountregister(Task task); + + void processRspError(Task task); + + void processRtnOrder(Task task); + + void processRtnTrade(Task task); + + void processErrRtnOrderInsert(Task task); + + void processErrRtnOrderAction(Task task); + + void processRtnInstrumentStatus(Task task); + + void processRtnTradingNotice(Task task); + + void processRtnErrorConditionalOrder(Task task); + + void processRtnExecOrder(Task task); + + void processErrRtnExecOrderInsert(Task task); + + void processErrRtnExecOrderAction(Task task); + + void processErrRtnForQuoteInsert(Task task); + + void processRtnQuote(Task task); + + void processErrRtnQuoteInsert(Task task); + + void processErrRtnQuoteAction(Task task); + + void processRtnForQuoteRsp(Task task); + + void processRspQryContractBank(Task task); + + void processRspQryParkedOrder(Task task); + + void processRspQryParkedOrderAction(Task task); + + void processRspQryTradingNotice(Task task); + + void processRspQryBrokerTradingParams(Task task); + + void processRspQryBrokerTradingAlgos(Task task); + + void processRtnFromBankToFutureByBank(Task task); + + void processRtnFromFutureToBankByBank(Task task); + + void processRtnRepealFromBankToFutureByBank(Task task); + + void processRtnRepealFromFutureToBankByBank(Task task); + + void processRtnFromBankToFutureByFuture(Task task); + + void processRtnFromFutureToBankByFuture(Task task); + + void processRtnRepealFromBankToFutureByFutureManual(Task task); + + void processRtnRepealFromFutureToBankByFutureManual(Task task); + + void processRtnQueryBankBalanceByFuture(Task task); + + void processErrRtnBankToFutureByFuture(Task task); + + void processErrRtnFutureToBankByFuture(Task task); + + void processErrRtnRepealBankToFutureByFutureManual(Task task); + + void processErrRtnRepealFutureToBankByFutureManual(Task task); + + void processErrRtnQueryBankBalanceByFuture(Task task); + + void processRtnRepealFromBankToFutureByFuture(Task task); + + void processRtnRepealFromFutureToBankByFuture(Task task); + + void processRspFromBankToFutureByFuture(Task task); + + void processRspFromFutureToBankByFuture(Task task); + + void processRspQueryBankAccountMoneyByFuture(Task task); + + void processRtnOpenAccountByBank(Task task); + + void processRtnCancelAccountByBank(Task task); + + void processRtnChangeAccountByBank(Task task); + + //------------------------------------------------------------------------------------- + //data:回调函数的数据字典 + //error:回调函数的错误字典 + //id:请求id + //last:是否为最后返回 + //i:整数 + //------------------------------------------------------------------------------------- + + virtual void onFrontConnected(){}; + + virtual void onFrontDisconnected(int i){}; + + virtual void onHeartBeatWarning(int i){}; + + virtual void onRspAuthenticate(dict data, dict error, int id, bool last) {}; + + virtual void onRspUserLogin(dict data, dict error, int id, bool last) {}; + + virtual void onRspUserLogout(dict data, dict error, int id, bool last) {}; + + virtual void onRspUserPasswordUpdate(dict data, dict error, int id, bool last) {}; + + virtual void onRspTradingAccountPasswordUpdate(dict data, dict error, int id, bool last) {}; + + virtual void onRspOrderInsert(dict data, dict error, int id, bool last) {}; + + virtual void onRspParkedOrderInsert(dict data, dict error, int id, bool last) {}; + + virtual void onRspParkedOrderAction(dict data, dict error, int id, bool last) {}; + + virtual void onRspOrderAction(dict data, dict error, int id, bool last) {}; + + virtual void onRspQueryMaxOrderVolume(dict data, dict error, int id, bool last) {}; + + virtual void onRspSettlementInfoConfirm(dict data, dict error, int id, bool last) {}; + + virtual void onRspRemoveParkedOrder(dict data, dict error, int id, bool last) {}; + + virtual void onRspRemoveParkedOrderAction(dict data, dict error, int id, bool last) {}; + + virtual void onRspExecOrderInsert(dict data, dict error, int id, bool last) {}; + + virtual void onRspExecOrderAction(dict data, dict error, int id, bool last) {}; + + virtual void onRspForQuoteInsert(dict data, dict error, int id, bool last) {}; + + virtual void onRspQuoteInsert(dict data, dict error, int id, bool last) {}; + + virtual void onRspQuoteAction(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryOrder(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryTrade(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryInvestorPosition(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryTradingAccount(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryInvestor(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryTradingCode(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryInstrumentMarginRate(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryInstrumentCommissionRate(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryExchange(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryProduct(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryInstrument(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryDepthMarketData(dict data, dict error, int id, bool last) {}; + + virtual void onRspQrySettlementInfo(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryTransferBank(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryInvestorPositionDetail(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryNotice(dict data, dict error, int id, bool last) {}; + + virtual void onRspQrySettlementInfoConfirm(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryInvestorPositionCombineDetail(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryCFMMCTradingAccountKey(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryEWarrantOffset(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryInvestorProductGroupMargin(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryExchangeMarginRate(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryExchangeMarginRateAdjust(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryExchangeRate(dict data, dict error, int id, bool last) {}; + + virtual void onRspQrySecAgentACIDMap(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryOptionInstrTradeCost(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryOptionInstrCommRate(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryExecOrder(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryForQuote(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryQuote(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryTransferSerial(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryAccountregister(dict data, dict error, int id, bool last) {}; + + virtual void onRspError(dict error, int id, bool last) {}; + + virtual void onRtnOrder(dict data) {}; + + virtual void onRtnTrade(dict data) {}; + + virtual void onErrRtnOrderInsert(dict data, dict error) {}; + + virtual void onErrRtnOrderAction(dict data, dict error) {}; + + virtual void onRtnInstrumentStatus(dict data) {}; + + virtual void onRtnTradingNotice(dict data) {}; + + virtual void onRtnErrorConditionalOrder(dict data) {}; + + virtual void onRtnExecOrder(dict data) {}; + + virtual void onErrRtnExecOrderInsert(dict data, dict error) {}; + + virtual void onErrRtnExecOrderAction(dict data, dict error) {}; + + virtual void onErrRtnForQuoteInsert(dict data, dict error) {}; + + virtual void onRtnQuote(dict data) {}; + + virtual void onErrRtnQuoteInsert(dict data, dict error) {}; + + virtual void onErrRtnQuoteAction(dict data, dict error) {}; + + virtual void onRtnForQuoteRsp(dict data) {}; + + virtual void onRspQryContractBank(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryParkedOrder(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryParkedOrderAction(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryTradingNotice(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryBrokerTradingParams(dict data, dict error, int id, bool last) {}; + + virtual void onRspQryBrokerTradingAlgos(dict data, dict error, int id, bool last) {}; + + virtual void onRtnFromBankToFutureByBank(dict data) {}; + + virtual void onRtnFromFutureToBankByBank(dict data) {}; + + virtual void onRtnRepealFromBankToFutureByBank(dict data) {}; + + virtual void onRtnRepealFromFutureToBankByBank(dict data) {}; + + virtual void onRtnFromBankToFutureByFuture(dict data) {}; + + virtual void onRtnFromFutureToBankByFuture(dict data) {}; + + virtual void onRtnRepealFromBankToFutureByFutureManual(dict data) {}; + + virtual void onRtnRepealFromFutureToBankByFutureManual(dict data) {}; + + virtual void onRtnQueryBankBalanceByFuture(dict data) {}; + + virtual void onErrRtnBankToFutureByFuture(dict data, dict error) {}; + + virtual void onErrRtnFutureToBankByFuture(dict data, dict error) {}; + + virtual void onErrRtnRepealBankToFutureByFutureManual(dict data, dict error) {}; + + virtual void onErrRtnRepealFutureToBankByFutureManual(dict data, dict error) {}; + + virtual void onErrRtnQueryBankBalanceByFuture(dict data, dict error) {}; + + virtual void onRtnRepealFromBankToFutureByFuture(dict data) {}; + + virtual void onRtnRepealFromFutureToBankByFuture(dict data) {}; + + virtual void onRspFromBankToFutureByFuture(dict data, dict error, int id, bool last) {}; + + virtual void onRspFromFutureToBankByFuture(dict data, dict error, int id, bool last) {}; + + virtual void onRspQueryBankAccountMoneyByFuture(dict data, dict error, int id, bool last) {}; + + virtual void onRtnOpenAccountByBank(dict data) {}; + + virtual void onRtnCancelAccountByBank(dict data) {}; + + virtual void onRtnChangeAccountByBank(dict data) {}; + + + + //------------------------------------------------------------------------------------- + //req:主动函数的请求字典 + //------------------------------------------------------------------------------------- + + void createFtdcTraderApi(string pszFlowPath = ""); + + void release(); + + void init(); + + int join(); + + int exit(); + + string getTradingDay(); + + void registerFront(string pszFrontAddress); + + void subscribePrivateTopic(int nType); + + void subscribePublicTopic(int nType); + + int reqAuthenticate(dict req, int nRequestID); + + int reqUserLogin(dict req, int nRequestID); + + int reqUserLogout(dict req, int nRequestID); + + int reqUserPasswordUpdate(dict req, int nRequestID); + + int reqTradingAccountPasswordUpdate(dict req, int nRequestID); + + int reqOrderInsert(dict req, int nRequestID); + + int reqParkedOrderInsert(dict req, int nRequestID); + + int reqParkedOrderAction(dict req, int nRequestID); + + int reqOrderAction(dict req, int nRequestID); + + int reqQueryMaxOrderVolume(dict req, int nRequestID); + + int reqSettlementInfoConfirm(dict req, int nRequestID); + + int reqRemoveParkedOrder(dict req, int nRequestID); + + int reqRemoveParkedOrderAction(dict req, int nRequestID); + + int reqExecOrderInsert(dict req, int nRequestID); + + int reqExecOrderAction(dict req, int nRequestID); + + int reqForQuoteInsert(dict req, int nRequestID); + + int reqQuoteInsert(dict req, int nRequestID); + + int reqQuoteAction(dict req, int nRequestID); + + int reqQryOrder(dict req, int nRequestID); + + int reqQryTrade(dict req, int nRequestID); + + int reqQryInvestorPosition(dict req, int nRequestID); + + int reqQryTradingAccount(dict req, int nRequestID); + + int reqQryInvestor(dict req, int nRequestID); + + int reqQryTradingCode(dict req, int nRequestID); + + int reqQryInstrumentMarginRate(dict req, int nRequestID); + + int reqQryInstrumentCommissionRate(dict req, int nRequestID); + + int reqQryExchange(dict req, int nRequestID); + + int reqQryProduct(dict req, int nRequestID); + + int reqQryInstrument(dict req, int nRequestID); + + int reqQryDepthMarketData(dict req, int nRequestID); + + int reqQrySettlementInfo(dict req, int nRequestID); + + int reqQryTransferBank(dict req, int nRequestID); + + int reqQryInvestorPositionDetail(dict req, int nRequestID); + + int reqQryNotice(dict req, int nRequestID); + + int reqQrySettlementInfoConfirm(dict req, int nRequestID); + + int reqQryInvestorPositionCombineDetail(dict req, int nRequestID); + + int reqQryCFMMCTradingAccountKey(dict req, int nRequestID); + + int reqQryEWarrantOffset(dict req, int nRequestID); + + int reqQryInvestorProductGroupMargin(dict req, int nRequestID); + + int reqQryExchangeMarginRate(dict req, int nRequestID); + + int reqQryExchangeMarginRateAdjust(dict req, int nRequestID); + + int reqQryExchangeRate(dict req, int nRequestID); + + int reqQrySecAgentACIDMap(dict req, int nRequestID); + + int reqQryOptionInstrTradeCost(dict req, int nRequestID); + + int reqQryOptionInstrCommRate(dict req, int nRequestID); + + int reqQryExecOrder(dict req, int nRequestID); + + int reqQryForQuote(dict req, int nRequestID); + + int reqQryQuote(dict req, int nRequestID); + + int reqQryTransferSerial(dict req, int nRequestID); + + int reqQryAccountregister(dict req, int nRequestID); + + int reqQryContractBank(dict req, int nRequestID); + + int reqQryParkedOrder(dict req, int nRequestID); + + int reqQryParkedOrderAction(dict req, int nRequestID); + + int reqQryTradingNotice(dict req, int nRequestID); + + int reqQryBrokerTradingParams(dict req, int nRequestID); + + int reqQryBrokerTradingAlgos(dict req, int nRequestID); + + int reqFromBankToFutureByFuture(dict req, int nRequestID); + + int reqFromFutureToBankByFuture(dict req, int nRequestID); + + int reqQueryBankAccountMoneyByFuture(dict req, int nRequestID); +}; + diff --git a/vn.lts/vnltstd/pyltstd/vnltstd.h b/vn.lts/vnltstd/pyltstd/vnltstd.h index e8a3db34..ee45a916 100644 --- a/vn.lts/vnltstd/pyltstd/vnltstd.h +++ b/vn.lts/vnltstd/pyltstd/vnltstd.h @@ -398,6 +398,7 @@ public: void processErrRtnFundInterTransfer(Task task); + //------------------------------------------------------------------------------------- //data:回调函数的数据字典 //error:回调函数的错误字典