예제 #1
0
        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];
            }
        }
예제 #2
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);
            }
        }
예제 #3
0
        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;
        }
예제 #4
0
 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);
 }
예제 #5
0
 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);
 }
예제 #6
0
        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);
        }
예제 #7
0
        //逐笔委托
        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);
        }
예제 #8
0
        //获取普通股票的行情数据(不带买卖盘),本接口不支持期货,对于期货(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);
        }
예제 #9
0
        //获取某个市场或者全部市场的代码表。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);
        }
예제 #10
0
        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;
        }
예제 #11
0
        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;
        }
예제 #12
0
        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;
        }
예제 #13
0
        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);
        }
예제 #14
0
        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;
        }
예제 #15
0
        //如果查询的代码不存在,连接已经断掉、未连接,则返回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);
            }
        }