public void FromAPILoginResult(LibTDBWrap.TDBDefine_ResLogin loginRes) { m_strInfo = LibWrapHelper.AnsiArr2String(loginRes.szInfo, 0, loginRes.szInfo.Length); if (loginRes.nMarkets > 0) { m_nDynDates = new int[loginRes.nMarkets]; Debug.Assert(loginRes.nDynDate.Length >= loginRes.nMarkets); System.Array.Copy(loginRes.nDynDate, m_nDynDates, loginRes.nMarkets); m_strMarkets = new string[loginRes.nMarkets]; Debug.Assert(loginRes.szMarket.Length >= 24 * loginRes.nMarkets); for (int i = 0; i < loginRes.nMarkets; i++) { m_strMarkets[i] = LibWrapHelper.AnsiArr2String(loginRes.szMarket, i * 24, 24); } } else { m_nDynDates = new int[0]; m_strMarkets = new string[0]; } }
//代理连接,返回值TDB_SUCCESS表示成功 public TDBErrNo ConnectProxy(out TDBLoginResult tdbLoginResult) { //重复登录处理 if ((UInt64)m_hTdb != 0) { tdbLoginResult = (TDBLoginResult)m_loginResult.Clone(); Console.WriteLine("已经登录,登录信息:{0}", tdbLoginResult.m_strInfo); return(TDBErrNo.TDB_SUCCESS); } LibTDBWrap.OPEN_SETTINGS openSettings = new LibTDBWrap.OPEN_SETTINGS(); openSettings.szIP = LibWrapHelper.String2AnsiArr(m_strIP, 24); openSettings.szPort = LibWrapHelper.String2AnsiArr(m_strPort, 8); openSettings.szUser = LibWrapHelper.String2AnsiArr(m_strUser, 32); openSettings.szPassword = LibWrapHelper.String2AnsiArr(m_strPassword, 32); LibTDBWrap.TDB_Proxy_SETTINGS proxySetting = new LibTDBWrap.TDB_Proxy_SETTINGS(); proxySetting.szProxyHostIp = LibWrapHelper.String2AnsiArr(m_strProxyIp, 64); proxySetting.szProxyPort = LibWrapHelper.String2AnsiArr(m_strProxyPort, 8); proxySetting.szProxyUser = LibWrapHelper.String2AnsiArr(m_strProxyUser, 32); proxySetting.szProxyPwd = LibWrapHelper.String2AnsiArr(m_strProxyPwd, 32); proxySetting.nProxyType = m_nProxyType; openSettings.nTimeOutVal = m_nTimeOutVal; openSettings.nRetryCount = m_nRetryCount; openSettings.nRetryGap = m_nRetryGap; IntPtr pUnmanagedOpenSettings = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(LibTDBWrap.OPEN_SETTINGS))); Marshal.StructureToPtr(openSettings, pUnmanagedOpenSettings, false); IntPtr pUnmanagedProxySettings = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(LibTDBWrap.TDB_Proxy_SETTINGS))); Marshal.StructureToPtr(proxySetting, pUnmanagedProxySettings, false); IntPtr pUnmanagedLoginRes = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(LibTDBWrap.TDBDefine_ResLogin))); m_hTdb = LibTDBWrap.TDB_OpenProxy(pUnmanagedOpenSettings, pUnmanagedProxySettings, pUnmanagedLoginRes); LibTDBWrap.TDBDefine_ResLogin loginRes = (LibTDBWrap.TDBDefine_ResLogin)Marshal.PtrToStructure(pUnmanagedLoginRes, typeof(LibTDBWrap.TDBDefine_ResLogin)); Marshal.FreeHGlobal(pUnmanagedOpenSettings); Marshal.FreeHGlobal(pUnmanagedProxySettings); Marshal.FreeHGlobal(pUnmanagedLoginRes); m_loginResult = new TDBLoginResult(); m_loginResult.FromAPILoginResult(loginRes); tdbLoginResult = (TDBLoginResult)m_loginResult.Clone(); if ((UInt64)m_hTdb != 0) { return(TDBErrNo.TDB_SUCCESS); } else { return(TDBErrNo.TDB_OPEN_FAILED); } }
public int m_nType; //证券类型,参考tdf 3.0文档中的证券索引表nType 说明 public void FromAPICode(ref LibTDBWrap.TDBDefine_Code apiCode) { m_strWindCode = LibWrapHelper.AnsiArr2String(apiCode.chWindCode, 0, apiCode.chWindCode.Length); m_strCode = LibWrapHelper.AnsiArr2String(apiCode.chCode, 0, apiCode.chCode.Length); m_strMarket = LibWrapHelper.AnsiArr2String(apiCode.chMarket, 0, apiCode.chMarket.Length); m_strCNName = LibWrapHelper.AnsiArr2String(apiCode.chCNName, 0, apiCode.chCNName.Length); m_strENName = LibWrapHelper.AnsiArr2String(apiCode.chENName, 0, apiCode.chENName.Length); m_nType = apiCode.nType; }
public LibTDBWrap.TDBDefine_ReqTransaction ToAPIReqOrderQueue() { LibTDBWrap.TDBDefine_ReqTransaction reqOrderQueue = new LibTDBWrap.TDBDefine_ReqTransaction(); reqOrderQueue.chCode = LibWrapHelper.String2AnsiArr(m_strWindCode, 32); reqOrderQueue.chMarketKey = LibWrapHelper.String2AnsiArr(m_strMarketKey, 24); reqOrderQueue.nDate = m_nDate; reqOrderQueue.nBeginTime = m_nBeginTime; reqOrderQueue.nEndTime = m_nEndTime; return(reqOrderQueue); }
public LibTDBWrap.TDBDefine_ReqTick ToAPIReqTick() { LibTDBWrap.TDBDefine_ReqTick reqAPITick = new LibTDBWrap.TDBDefine_ReqTick(); reqAPITick.chCode = LibWrapHelper.String2AnsiArr(m_strWindCode, 32); reqAPITick.chMarketKey = LibWrapHelper.String2AnsiArr(m_strMarketKey, 24); reqAPITick.nDate = m_nDate; reqAPITick.nBeginTime = m_nBeginTime; reqAPITick.nEndTime = m_nEndTime; reqAPITick.nAutoComplete = 0; return(reqAPITick); }
public int[] m_nABVolume; //订单明细 public void FromAPIOrderQueue(ref LibTDBWrap.TDBDefine_OrderQueue apiOrderQueue) { m_strWindCode = LibWrapHelper.AnsiArr2String(apiOrderQueue.chWindCode, 0, apiOrderQueue.chWindCode.Length); m_strCode = LibWrapHelper.AnsiArr2String(apiOrderQueue.chCode, 0, apiOrderQueue.chCode.Length); m_nDate = apiOrderQueue.nDate; m_nTime = apiOrderQueue.nTime; m_nSide = apiOrderQueue.nSide; m_nPrice = apiOrderQueue.nPrice; m_nOrderItems = apiOrderQueue.nOrderItems; m_nABItems = apiOrderQueue.nABItems; m_nABVolume = LibWrapHelper.CopyIntArr(apiOrderQueue.nABVolume); }
//逐笔委托 public TDBErrNo GetOrder(TDBReq reqOrder, out TDBOrder[] tdbOrder) { TDBErrNo nVerifyRet = SimpleVerifyReqInput(reqOrder); tdbOrder = new TDBOrder[0]; if (nVerifyRet != TDBErrNo.TDB_SUCCESS) { return(nVerifyRet); } LibTDBWrap.TDBDefine_ReqTransaction reqAPIOrder = reqOrder.ToAPIReqTransaction(); IntPtr pUnmanagedReqAPIOrder = LibWrapHelper.CopyStructToGlobalMem(reqAPIOrder, typeof(LibTDBWrap.TDBDefine_ReqTransaction)); IntPtr ppOrder = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(IntPtr))); IntPtr pCount = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(Int32))); int nRet = LibTDBWrap.TDB_GetOrder(m_hTdb, pUnmanagedReqAPIOrder, ppOrder, pCount); IntPtr pOrder = (IntPtr)Marshal.PtrToStructure(ppOrder, typeof(IntPtr)); int nCount = (Int32)Marshal.PtrToStructure(pCount, typeof(Int32)); if ((UInt64)pOrder != 0 && nCount > 0 && nRet == 0) { tdbOrder = new TDBOrder[nCount]; int nElemLen = Marshal.SizeOf(typeof(LibTDBWrap.TDBDefine_Order)); for (int i = 0; i < nCount; i++) { IntPtr pCurRecord = (IntPtr)((UInt64)pOrder + (UInt64)(nElemLen * i)); LibTDBWrap.TDBDefine_Order apiOrder = (LibTDBWrap.TDBDefine_Order)Marshal.PtrToStructure(pCurRecord, typeof(LibTDBWrap.TDBDefine_Order)); tdbOrder[i] = new TDBOrder(); tdbOrder[i].FromAPIOrder(ref apiOrder); } } else { //如果网络连接断掉,则关闭连接 if (nRet == (int)TDBErrNo.TDB_NETWORK_ERROR) { DisConnect(); } } if ((UInt64)pOrder != 0) { LibTDBWrap.TDB_Free(pOrder); } Marshal.FreeHGlobal(pUnmanagedReqAPIOrder); Marshal.FreeHGlobal(ppOrder); Marshal.FreeHGlobal(pCount); return((TDBErrNo)nRet); }
//获取普通股票的行情数据(不带买卖盘),本接口不支持期货,对于期货(CF市场和商品期货),需要调用GetFuture或GetFutureAB public TDBErrNo GetTick(TDBReq reqTick, out TDBTick[] tdbTick) { TDBErrNo nVerifyRet = SimpleVerifyReqInput(reqTick); tdbTick = new TDBTick[0]; if (nVerifyRet != TDBErrNo.TDB_SUCCESS) { return(nVerifyRet); } LibTDBWrap.TDBDefine_ReqTick reqAPITick = reqTick.ToAPIReqTick(); IntPtr pUnmanagedReqAPITick = LibWrapHelper.CopyStructToGlobalMem(reqAPITick, typeof(LibTDBWrap.TDBDefine_ReqTick)); IntPtr ppTick = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(IntPtr))); IntPtr pCount = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(Int32))); int nRet = LibTDBWrap.TDB_GetTick(m_hTdb, pUnmanagedReqAPITick, ppTick, pCount); IntPtr pTick = (IntPtr)Marshal.PtrToStructure(ppTick, typeof(IntPtr)); int nCount = (Int32)Marshal.PtrToStructure(pCount, typeof(Int32)); if ((UInt64)pTick != 0 && nCount > 0 && nRet == 0) { tdbTick = new TDBTick[nCount]; int nElemLen = Marshal.SizeOf(typeof(LibTDBWrap.TDBDefine_Tick)); for (int i = 0; i < nCount; i++) { IntPtr pCurRecord = (IntPtr)((UInt64)pTick + (UInt64)(nElemLen * i)); LibTDBWrap.TDBDefine_Tick apiTick = (LibTDBWrap.TDBDefine_Tick)Marshal.PtrToStructure(pCurRecord, typeof(LibTDBWrap.TDBDefine_Tick)); tdbTick[i] = new TDBTick(); tdbTick[i].FromAPITick(ref apiTick); } } else { //如果网络连接断掉,则关闭连接 if (nRet == (int)TDBErrNo.TDB_NETWORK_ERROR) { DisConnect(); } } if ((UInt64)pTick != 0) { LibTDBWrap.TDB_Free(pTick); } Marshal.FreeHGlobal(pUnmanagedReqAPITick); Marshal.FreeHGlobal(ppTick); Marshal.FreeHGlobal(pCount); return((TDBErrNo)nRet); }
//获取某个市场或者全部市场的代码表。strMarket取值: "SH"、"SZ"、"CF"、"SHF"、"CZC"、"DCE",全部市场:"" public TDBErrNo GetCodeTable(string strMarket, out TDBCode[] codeArr) { TDBErrNo nVerifyRet = SimpleVerifyReqInput(strMarket); codeArr = new TDBCode[0]; if (nVerifyRet != TDBErrNo.TDB_SUCCESS) { return(nVerifyRet); } int nArrLen = 128; byte[] btMarketArr = LibWrapHelper.String2AnsiArr(strMarket, nArrLen); IntPtr pUnmanagedMarket = Marshal.AllocHGlobal(btMarketArr.Length); Marshal.Copy(btMarketArr, 0, pUnmanagedMarket, nArrLen); IntPtr ppCodeTable = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(IntPtr))); IntPtr pCount = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(Int32))); int nRet = LibTDBWrap.TDB_GetCodeTable(m_hTdb, pUnmanagedMarket, ppCodeTable, pCount); IntPtr pCodeTable = (IntPtr)Marshal.PtrToStructure(ppCodeTable, typeof(IntPtr)); int nCount = (Int32)Marshal.PtrToStructure(pCount, typeof(Int32)); if (nRet == 0 && (UInt64)pCodeTable != 0 && nCount > 0) { codeArr = new TDBCode[nCount]; int nElemLen = Marshal.SizeOf(typeof(LibTDBWrap.TDBDefine_Code)); for (int i = 0; i < nCount; i++) { LibTDBWrap.TDBDefine_Code apiCode = (LibTDBWrap.TDBDefine_Code)Marshal.PtrToStructure((IntPtr)((UInt64)pCodeTable + (UInt64)(nElemLen * i)), typeof(LibTDBWrap.TDBDefine_Code)); codeArr[i] = new TDBCode(); codeArr[i].FromAPICode(ref apiCode); } } else { //如果网络连接断掉,则关闭连接 if (nRet == (int)TDBErrNo.TDB_NETWORK_ERROR) { DisConnect(); } } if ((UInt16)pCodeTable != 0) { LibTDBWrap.TDB_Free(pCodeTable); } Marshal.FreeHGlobal(pUnmanagedMarket); Marshal.FreeHGlobal(ppCodeTable); Marshal.FreeHGlobal(pCount); return((TDBErrNo)nRet); }
public int m_nOrderVolume; //委托数量 public void FromAPIOrder(ref LibTDBWrap.TDBDefine_Order apiOrder) { m_strWindCode = LibWrapHelper.AnsiArr2String(apiOrder.chWindCode, 0, apiOrder.chWindCode.Length); m_strCode = LibWrapHelper.AnsiArr2String(apiOrder.chCode, 0, apiOrder.chCode.Length); m_nDate = apiOrder.nDate; m_nTime = apiOrder.nTime; m_nIndex = apiOrder.nIndex; m_nOrder = apiOrder.nOrder; m_chOrderKind = (char)apiOrder.chOrderKind; m_chFunctionCode = (char)apiOrder.chFunctionCode; m_nOrderPrice = apiOrder.nOrderPrice; m_nOrderVolume = apiOrder.nOrderVolume; }
public int m_nBidOrder; //叫买序号 public void FromAPITransaction(ref LibTDBWrap.TDBDefine_Transaction apiTransaction) { m_strWindCode = LibWrapHelper.AnsiArr2String(apiTransaction.chWindCode, 0, apiTransaction.chWindCode.Length); m_strCode = LibWrapHelper.AnsiArr2String(apiTransaction.chCode, 0, apiTransaction.chCode.Length); m_nDate = apiTransaction.nDate; m_nTime = apiTransaction.nTime; m_nIndex = apiTransaction.nIndex; m_chFunctionCode = (char)apiTransaction.chFunctionCode; m_chOrderKind = (char)apiTransaction.chOrderKind; m_chBSFlag = (char)apiTransaction.chBSFlag; m_nTradePrice = apiTransaction.nTradePrice; m_nTradeVolume = apiTransaction.nTradeVolume; m_nAskOrder = apiTransaction.nAskOrder; m_nBidOrder = apiTransaction.nBidOrder; }
public int m_nInterest; //持仓量(期货)、IOPV(基金)、利息(债券) public void FromAPIKLine(ref LibTDBWrap.TDBDefine_KLine apiKLine) { m_strWindCode = LibWrapHelper.AnsiArr2String(apiKLine.chWindCode, 0, apiKLine.chWindCode.Length); m_strCode = LibWrapHelper.AnsiArr2String(apiKLine.chCode, 0, apiKLine.chCode.Length); m_nDate = apiKLine.nDate; m_nTime = apiKLine.nTime; m_nOpen = apiKLine.nOpen; m_nHigh = apiKLine.nHigh; m_nLow = apiKLine.nLow; m_nClose = apiKLine.nClose; m_iVolume = apiKLine.iVolume; m_iTurover = apiKLine.iTurover; m_nMatchItems = apiKLine.nMatchItems; m_nInterest = apiKLine.nInterest; }
public int m_nEndTime; //结束时间: public LibTDBWrap.TDBDefine_ReqKLine ToAPIReqKLine() { LibTDBWrap.TDBDefine_ReqKLine reqAPIKLine = new LibTDBWrap.TDBDefine_ReqKLine(); reqAPIKLine.chCode = LibWrapHelper.String2AnsiArr(m_strWindCode, 32); reqAPIKLine.chMarketKey = LibWrapHelper.String2AnsiArr(m_strMarketKey, 24); reqAPIKLine.nCQFlag = (int)m_nCQFlag; reqAPIKLine.nCQDate = m_nCQDate; reqAPIKLine.nQJFlag = m_nQJFlag; reqAPIKLine.nCycType = (int)m_nCycType; reqAPIKLine.nCycDef = m_nCycDef; reqAPIKLine.nAutoComplete = m_nAutoComplete; reqAPIKLine.nBeginDate = m_nBeginDate; reqAPIKLine.nBeginTime = m_nBeginTime; reqAPIKLine.nEndDate = m_nEndDate; reqAPIKLine.nEndTime = m_nEndTime; return(reqAPIKLine); }
public int m_nHoldLines; //持平品种数 public void FromAPITick(ref LibTDBWrap.TDBDefine_Tick apiTick) { m_strWindCode = LibWrapHelper.AnsiArr2String(apiTick.chWindCode, 0, apiTick.chWindCode.Length); m_strCode = LibWrapHelper.AnsiArr2String(apiTick.chCode, 0, apiTick.chCode.Length); m_nDate = apiTick.nDate; m_nTime = apiTick.nTime; m_nPrice = apiTick.nPrice; m_iVolume = apiTick.iVolume; m_iTurover = apiTick.iTurover; m_nMatchItems = apiTick.nMatchItems; m_nInterest = apiTick.nInterest; m_chTradeFlag = (char)apiTick.chTradeFlag; m_chBSFlag = (char)apiTick.chBSFlag; m_iAccVolume = apiTick.iAccVolume; m_iAccTurover = apiTick.iAccTurover; m_nHigh = apiTick.nHigh; m_nLow = apiTick.nLow; m_nOpen = apiTick.nOpen; m_nPreClose = apiTick.nPreClose; //期货字段 m_nSettle = apiTick.nSettle; m_nPosition = apiTick.nPosition; m_nCurDelta = apiTick.nCurDelta; m_nPreSettle = apiTick.nPreSettle; m_nPrePosition = apiTick.nPrePosition; //买卖盘字段 m_nAskPrice = LibWrapHelper.CopyIntArr(apiTick.nAskPrice); m_nAskVolume = LibWrapHelper.CopyUIntArr(apiTick.nAskVolume); m_nBidPrice = LibWrapHelper.CopyIntArr(apiTick.nBidPrice); m_nBidVolume = LibWrapHelper.CopyUIntArr(apiTick.nBidVolume); m_nAskAvPrice = apiTick.nAskAvPrice; m_nBidAvPrice = apiTick.nBidAvPrice; m_iTotalAskVolume = apiTick.iTotalAskVolume; m_iTotalBidVolume = apiTick.iTotalBidVolume; //指数字段 m_nIndex = apiTick.nIndex; m_nStocks = apiTick.nStocks; m_nUps = apiTick.nUps; m_nDowns = apiTick.nDowns; m_nHoldLines = apiTick.nHoldLines; }
//如果查询的代码不存在,连接已经断掉、未连接,则返回null public TDBCode GetCodeInfo(string strWindCode, string strMarketKey) { TDBErrNo nVerifyRet = SimpleVerifyReqInput(strWindCode); if (nVerifyRet != TDBErrNo.TDB_SUCCESS) { return(null); } int nMaxWindCodeLen = 64; int nMaxmarketLen = 48; IntPtr pszWindCode = Marshal.AllocHGlobal(nMaxWindCodeLen); byte[] btWindCode = LibWrapHelper.String2AnsiArr(strWindCode, nMaxWindCodeLen); btWindCode[btWindCode.Length - 1] = 0; Marshal.Copy(btWindCode, 0, pszWindCode, btWindCode.Length); IntPtr pszMarket = Marshal.AllocHGlobal(nMaxmarketLen); byte[] btMarket = LibWrapHelper.String2AnsiArr(strMarketKey, nMaxmarketLen); btMarket[btMarket.Length - 1] = 0; Marshal.Copy(btMarket, 0, pszMarket, btMarket.Length); IntPtr pCode = LibTDBWrap.TDB_GetCodeInfo(m_hTdb, pszWindCode, pszMarket); Marshal.FreeHGlobal(pszWindCode); Marshal.FreeHGlobal(pszMarket); if ((UInt64)pCode != 0) { LibTDBWrap.TDBDefine_Code apiCode = (LibTDBWrap.TDBDefine_Code)Marshal.PtrToStructure(pCode, typeof(LibTDBWrap.TDBDefine_Code)); TDBCode tdbCode = new TDBCode(); tdbCode.FromAPICode(ref apiCode); return(tdbCode); } else { return(null); } }