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); }
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); }
private void OnRspQryQuote_callback(object sender, ref QuoteField quote, int size1, bool bIsLast) { if (null != OnRspQryQuote) { OnRspQryQuote(this, new OnRspQryQuoteEventArgs(ref quote, size1, bIsLast)); } }
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); }
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()); }
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); } }
private void _OnRtnQuote(IntPtr ptr1, int size1) { if (OnRtnQuote == null) { return; } QuoteField obj = PInvokeUtility.GetObjectFromIntPtr <QuoteField>(ptr1); OnRtnQuote(this, ref obj); }
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); }
private void _OnRtnQuote(IntPtr ptr1, int size1) { if (OnRtnQuote_ == null) { return; } QuoteField obj = (QuoteField)Marshal.PtrToStructure(ptr1, typeof(QuoteField)); OnRtnQuote_(this, ref obj); }
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); }
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)); //} }
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); }
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 OnRtnQuoteEventArgs(ref QuoteField quote) { this.quote = quote; }
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); }
public OnRspQryQuoteEventArgs(ref QuoteField quote, int size1, bool bIsLast) { this.quote = quote; this.size1 = size1; this.bIsLast = bIsLast; }
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; } }
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; }