Beispiel #1
0
        public string SendQuote(QuoteField quote)
        {
            int QuoteField_size  = Marshal.SizeOf(typeof(QuoteField));
            int OrderIDType_size = Marshal.SizeOf(typeof(OrderIDType));

            IntPtr QuoteField_Ptr  = Marshal.AllocHGlobal(QuoteField_size);
            IntPtr OrderIDType_Ptr = Marshal.AllocHGlobal(OrderIDType_size * 3);

            // 将结构体写成内存块
            for (int i = 0; i < 1; ++i)
            {
                Marshal.StructureToPtr(quote, new IntPtr(QuoteField_Ptr.ToInt64() + i * QuoteField_size), false);
            }

            IntPtr ptr = proxy.XRequest((byte)RequestType.ReqQuoteInsert, Handle, IntPtr.Zero,
                                        0, 0,
                                        QuoteField_Ptr, 1, OrderIDType_Ptr, 0, IntPtr.Zero, 0);

            string ret = Marshal.PtrToStringAnsi(ptr);

            Marshal.FreeHGlobal(QuoteField_Ptr);
            Marshal.FreeHGlobal(OrderIDType_Ptr);

            return(ret);
        }
        private QuoteField ToQuoteStruct(ExecutionCommand command, string apiSymbol, string apiExchange, out Order askOrder, out Order bidOrder)
        {
            bidOrder = command.Order;
            askOrder = (Order)bidOrder.GetSameTimeOrder();

            QuoteField field = new QuoteField();

            field.InstrumentID = apiSymbol;
            field.ExchangeID   = apiExchange;

            field.AskQty       = askOrder.Qty;
            field.AskPrice     = askOrder.Price;
            field.AskOpenClose = GetOpenClose(askOrder);
            field.AskHedgeFlag = GetHedgeFlag(askOrder);

            field.BidQty       = bidOrder.Qty;
            field.BidPrice     = bidOrder.Price;
            field.BidOpenClose = GetOpenClose(bidOrder);
            field.BidHedgeFlag = GetHedgeFlag(bidOrder);

            field.QuoteReqID = bidOrder.GetQuoteReqID();
            //field.Account = command.Order.Account;

            return(field);
        }
Beispiel #3
0
        public void SendQuote(ref QuoteField quote, out string AskRef, out string BidRef)
        {
            int QuoteField_size  = Marshal.SizeOf(typeof(QuoteField));
            int OrderIDType_size = Marshal.SizeOf(typeof(OrderIDType));

            IntPtr QuoteField_Ptr = Marshal.AllocHGlobal(QuoteField_size);
            IntPtr AskRef_Ptr     = Marshal.AllocHGlobal(OrderIDType_size);
            IntPtr BidRef_Ptr     = Marshal.AllocHGlobal(OrderIDType_size);

            // 将结构体写成内存块
            for (int i = 0; i < 1; ++i)
            {
                Marshal.StructureToPtr(quote, QuoteField_Ptr + i * QuoteField_size, false);
            }

            IntPtr ptr = proxy.XRequest((byte)RequestType.ReqQuoteInsert, Handle, IntPtr.Zero,
                                        0, 0,
                                        QuoteField_Ptr, 1, AskRef_Ptr, 0, BidRef_Ptr, 0);

            AskRef = string.Empty;
            BidRef = string.Empty;

            for (int i = 0; i < 1; ++i)
            {
                // 这里定义一个ID占64字节
                OrderIDType output = (OrderIDType)Marshal.PtrToStructure(AskRef_Ptr + i * OrderIDType_size, typeof(OrderIDType));
                AskRef = output.ID;
                output = (OrderIDType)Marshal.PtrToStructure(BidRef_Ptr + i * OrderIDType_size, typeof(OrderIDType));
                BidRef = output.ID;
            }

            Marshal.FreeHGlobal(QuoteField_Ptr);
            Marshal.FreeHGlobal(AskRef_Ptr);
            Marshal.FreeHGlobal(BidRef_Ptr);
        }
Beispiel #4
0
 private void OnRspQryQuote_callback(object sender, ref QuoteField quote, int size1, bool bIsLast)
 {
     if (null != OnRspQryQuote)
     {
         OnRspQryQuote(this, new OnRspQryQuoteEventArgs(ref quote, size1, bIsLast));
     }
 }
Beispiel #5
0
 private void OnRtnQuote_callback(object sender, ref QuoteField quote)
 {
     if (null != OnRtnQuote)
     {
         OnRtnQuote(this, new OnRtnQuoteEventArgs(ref quote));
     }
 }
        private void _OnRtnQuote(IntPtr ptr1, int size1)
        {
            //if (OnRtnQuote_ == null)
            //    return;

            //QuoteField obj = PInvokeUtility.GetObjectFromIntPtr<QuoteField>(ptr1);
            QuoteField obj = (QuoteField)Marshal.PtrToStructure(ptr1, typeof(QuoteField));

            OnRtnQuote_(this, ref obj);
        }
Beispiel #7
0
        private void OnRspQryQuote_callback(object sender, ref QuoteField quote, int size1, bool bIsLast)
        {
            if (size1 <= 0)
            {
                (sender as XApi).GetLog().Info("OnRspQryQuote");
                return;
            }

            (sender as XApi).GetLog().Info("OnRspQryQuote:" + quote.ToFormattedString());
        }
Beispiel #8
0
 private void OnRtnQuote_callback(object sender, ref QuoteField quote)
 {
     (sender as XApi).GetLog().Debug("OnRtnQuote:" + quote.ToFormattedString());
     try {
         quoteMap.Process(ref quote);
     }
     catch (Exception ex) {
         (sender as XApi).GetLog().Error(ex);
     }
 }
Beispiel #9
0
        private void _OnRtnQuote(IntPtr ptr1, int size1)
        {
            if (OnRtnQuote == null)
            {
                return;
            }

            QuoteField obj = PInvokeUtility.GetObjectFromIntPtr <QuoteField>(ptr1);

            OnRtnQuote(this, ref obj);
        }
Beispiel #10
0
        private void _OnRspQryQuote(IntPtr ptr1, int size1, double double1)
        {
            if (OnRspQryQuote_ == null)
            {
                return;
            }

            QuoteField obj = PInvokeUtility.GetObjectFromIntPtr <QuoteField>(ptr1);

            OnRspQryQuote_(this, ref obj, size1, double1 != 0);
        }
Beispiel #11
0
        private void _OnRtnQuote(IntPtr ptr1, int size1)
        {
            if (OnRtnQuote_ == null)
            {
                return;
            }

            QuoteField obj = (QuoteField)Marshal.PtrToStructure(ptr1, typeof(QuoteField));

            OnRtnQuote_(this, ref obj);
        }
Beispiel #12
0
        public void ProcessNew(ref QuoteField quote, QuoteRecord record)
        {
            OrderRecord askRecord = new OrderRecord(record.AskOrder);

            this.workingOrders[quote.AskID]   = askRecord;
            this.orderIDs[askRecord.Order.Id] = quote.AskID;
            EmitExecutionReport(askRecord, (SQ.ExecType)quote.ExecType, (SQ.OrderStatus)quote.Status);

            OrderRecord bidRecord = new OrderRecord(record.BidOrder);

            this.workingOrders[quote.BidID]   = bidRecord;
            this.orderIDs[bidRecord.Order.Id] = quote.BidID;
            EmitExecutionReport(bidRecord, (SQ.ExecType)quote.ExecType, (SQ.OrderStatus)quote.Status);
        }
Beispiel #13
0
        public void ProcessNew(ref QuoteField quote, QuoteRecord record)
        {
            OrderRecord askRecord = new OrderRecord(record.AskOrder);

            this.workingOrders.Add(quote.AskID, askRecord);
            this.orderIDs.Add(askRecord.Order.Id, quote.AskID);
            EmitExecutionReport(askRecord, (SQ.ExecType)quote.ExecType, (SQ.OrderStatus)quote.Status);

            OrderRecord bidRecord = new OrderRecord(record.BidOrder);

            this.workingOrders.Add(quote.BidID, bidRecord);
            this.orderIDs.Add(bidRecord.Order.Id, quote.BidID);
            EmitExecutionReport(bidRecord, (SQ.ExecType)quote.ExecType, (SQ.OrderStatus)quote.Status);
        }
 public void DoQuoteSend(QuoteField quote, ExecutionCommand command, Order askOrder, Order bidOrder)
 {
     //string askRef;
     //string bidRef;
     //provider._TdApi.SendQuote(ref quote,out askRef,out bidRef);
     //if (askRef == null)
     //{
     //    // 直接将单子拒绝
     //    EmitExecutionReport(new QuoteRecord(askOrder, bidOrder), SQ.ExecType.ExecRejected, SQ.OrderStatus.Rejected, "ErrorCode:");
     //}
     //else
     //{
     //    this.pendingOrders.TryAdd(askRef, new QuoteRecord(askOrder, bidOrder));
     //}
 }
Beispiel #15
0
        private void CmdNewQuote(ExecutionCommand command)
        {
            string altSymbol;
            string altExchange;
            string apiSymbol;
            string apiExchange;
            double apiTickSize;

            GetApi_Symbol_Exchange_TickSize(command.Instrument, this.id,
                                            out altSymbol, out altExchange,
                                            out apiSymbol, out apiExchange,
                                            out apiTickSize);

            Order bidOrder;
            Order askOrder;

            QuoteField field = ToQuoteStruct(command, apiSymbol, apiExchange, out askOrder, out bidOrder);

            quoteMap.DoQuoteSend(field, command, askOrder, bidOrder);
        }
Beispiel #16
0
        public string SendQuote(int QuoteRef, ref QuoteField quote)
        {
            int size = Marshal.SizeOf(typeof(QuoteField));

            IntPtr quotePtr = Marshal.AllocHGlobal(size);

            Marshal.StructureToPtr(quote, quotePtr, false);

            IntPtr ptr = proxy.XRequest((byte)RequestType.ReqQuoteInsert, Handle, IntPtr.Zero,
                                        QuoteRef, 0,
                                        quotePtr, size, IntPtr.Zero, 0, IntPtr.Zero, 0);

            Marshal.FreeHGlobal(quotePtr);

            if (ptr.ToInt64() == 0)
            {
                return(null);
            }

            return(Marshal.PtrToStringAnsi(ptr));
        }
Beispiel #17
0
 private void OnRtnQuote_callback(object sender, ref QuoteField quote)
 {
     if (null != OnRtnQuote)
     {
         OnRtnQuote(this, new OnRtnQuoteEventArgs(ref quote));
     }
 }
Beispiel #18
0
 public OnRtnQuoteEventArgs(ref QuoteField quote)
 {
     this.quote = quote;
 }
Beispiel #19
0
 public OnRtnQuoteEventArgs(ref QuoteField quote)
 {
     this.quote = quote;
 }
Beispiel #20
0
        public void SendQuote(ref QuoteField quote,out string AskRef,out string BidRef)
        {
            int QuoteField_size = Marshal.SizeOf(typeof(QuoteField));
            int OrderIDType_size = Marshal.SizeOf(typeof(OrderIDType));

            IntPtr QuoteField_Ptr = Marshal.AllocHGlobal(QuoteField_size);
            IntPtr AskRef_Ptr = Marshal.AllocHGlobal(OrderIDType_size);
            IntPtr BidRef_Ptr = Marshal.AllocHGlobal(OrderIDType_size);

            // 将结构体写成内存块
            for (int i = 0; i < 1; ++i)
            {
                Marshal.StructureToPtr(quote, new IntPtr(QuoteField_Ptr.ToInt64() + i * QuoteField_size), false);
            }

            IntPtr ptr = proxy.XRequest((byte)RequestType.ReqQuoteInsert, Handle, IntPtr.Zero,
                0, 0,
                QuoteField_Ptr, 1, AskRef_Ptr, 0, BidRef_Ptr, 0);

            AskRef = string.Empty;
            BidRef = string.Empty;

            for (int i = 0; i < 1; ++i)
            {
                // 这里定义一个ID占64字节
                OrderIDType output = (OrderIDType)Marshal.PtrToStructure(new IntPtr(AskRef_Ptr.ToInt64() + i * OrderIDType_size), typeof(OrderIDType));
                AskRef = output.ID;
                output = (OrderIDType)Marshal.PtrToStructure(new IntPtr(BidRef_Ptr.ToInt64() + i * OrderIDType_size), typeof(OrderIDType));
                BidRef = output.ID;
            }

            Marshal.FreeHGlobal(QuoteField_Ptr);
            Marshal.FreeHGlobal(AskRef_Ptr);
            Marshal.FreeHGlobal(BidRef_Ptr);
        }
Beispiel #21
0
 public OnRspQryQuoteEventArgs(ref QuoteField quote, int size1, bool bIsLast)
 {
     this.quote   = quote;
     this.size1   = size1;
     this.bIsLast = bIsLast;
 }
Beispiel #22
0
        public string SendQuote(int QuoteRef, ref QuoteField quote)
        {
            int size = Marshal.SizeOf(typeof(QuoteField));

            IntPtr quotePtr = Marshal.AllocHGlobal(size);
            Marshal.StructureToPtr(quote, quotePtr, false);

            IntPtr ptr = proxy.XRequest((byte)RequestType.ReqQuoteInsert, Handle, IntPtr.Zero,
                QuoteRef, 0,
                quotePtr, size, IntPtr.Zero, 0, IntPtr.Zero, 0);

            Marshal.FreeHGlobal(quotePtr);

            if (ptr.ToInt64() == 0)
                return null;

            return Marshal.PtrToStringAnsi(ptr);
        }
        public void Process(ref QuoteField quote)
        {
            // 所有的成交信息都不处理,交给TradeField处理
            if (quote.ExecType == XAPI.ExecType.Trade)
            {
                return;
            }

            QuoteRecord record = null;

            switch (quote.ExecType)
            {
            case XAPI.ExecType.New:
                if (this.pendingOrders.TryRemove(quote.ID, out record))
                {
                    this.workingOrders.Add(quote.ID, record);
                    this.orderIDs.Add(record.AskOrder.Id, quote.ID);
                    this.orderIDs.Add(record.BidOrder.Id, quote.ID);

                    orderMap.ProcessNew(ref quote, record);

                    // 这个地方可以跳过
                    //EmitExecutionReport(record, quote.ExecType, quote.Status);
                }
                break;

            case XAPI.ExecType.Rejected:
                if (this.pendingOrders.TryRemove(quote.ID, out record))
                {
                    EmitExecutionReport(record, (SQ.ExecType)quote.ExecType, (SQ.OrderStatus)quote.Status, quote.Text());
                }
                else if (this.workingOrders.TryGetValue(quote.ID, out record))
                {
                    // 比如说出现超出涨跌停时,先会到ProcessNew,所以得再多判断一次
                    workingOrders.Remove(quote.ID);
                    orderIDs.Remove(record.AskOrder.Id);
                    orderIDs.Remove(record.BidOrder.Id);
                    EmitExecutionReport(record, (SQ.ExecType)quote.ExecType, (SQ.OrderStatus)quote.Status, quote.Text());
                }
                break;

            case XAPI.ExecType.Cancelled:
                if (this.workingOrders.TryGetValue(quote.ID, out record))
                {
                    workingOrders.Remove(quote.ID);
                    orderIDs.Remove(record.AskOrder.Id);
                    orderIDs.Remove(record.BidOrder.Id);
                    EmitExecutionReport(record, SQ.ExecType.ExecCancelled, SQ.OrderStatus.Cancelled);
                }
                break;

            case XAPI.ExecType.PendingCancel:
                if (this.workingOrders.TryGetValue(quote.ID, out record))
                {
                    EmitExecutionReport(record, SQ.ExecType.ExecPendingCancel, SQ.OrderStatus.PendingCancel);
                }
                break;

            case XAPI.ExecType.CancelReject:
                if (this.pendingCancels.TryRemove(quote.ID, out record))
                {
                    EmitExecutionReport(record, SQ.ExecType.ExecCancelReject, (SQ.OrderStatus)quote.Status, quote.Text());
                }
                break;
            }
            if (record != null)
            {
                record.Status = (SQ.OrderStatus)quote.Status;
            }
        }
Beispiel #24
0
        public string SendQuote(ref QuoteField quote)
        {
            int QuoteField_size = Marshal.SizeOf(typeof(QuoteField));
            int OrderIDType_size = Marshal.SizeOf(typeof(OrderIDType));

            IntPtr QuoteField_Ptr = Marshal.AllocHGlobal(QuoteField_size);
            IntPtr OrderIDType_Ptr = Marshal.AllocHGlobal(OrderIDType_size * 3);

            // 将结构体写成内存块
            for (int i = 0; i < 1; ++i)
            {
                Marshal.StructureToPtr(quote, new IntPtr(QuoteField_Ptr.ToInt64() + i * QuoteField_size), false);
            }

            IntPtr ptr = proxy.XRequest((byte)RequestType.ReqQuoteInsert, Handle, IntPtr.Zero,
                0, 0,
                QuoteField_Ptr, 1, OrderIDType_Ptr, 0, IntPtr.Zero, 0);

            string ret = Marshal.PtrToStringAnsi(ptr);

            Marshal.FreeHGlobal(QuoteField_Ptr);
            Marshal.FreeHGlobal(OrderIDType_Ptr);

            return ret;
        }
Beispiel #25
0
 public OnRspQryQuoteEventArgs(ref QuoteField quote, int size1, bool bIsLast)
 {
     this.quote = quote;
     this.size1 = size1;
     this.bIsLast = bIsLast;
 }
Beispiel #26
0
 private void OnRspQryQuote_callback(object sender, ref QuoteField quote, int size1, bool bIsLast)
 {
     if (null != OnRspQryQuote)
     {
         OnRspQryQuote(this, new OnRspQryQuoteEventArgs(ref quote, size1, bIsLast));
     }
 }