private void InsertToCTP(Order order) { if (order.CloseOrders.Count == 0) { OnRspQryOrder(this, new OrderEventArgs(() => Add(order))); int orderRef = tradeApi.OrderInsert(order.InstrumentId, order.OffsetFlag, order.Direction, order.Price, order.Volume); order.RemainVolume = order.Volume; order.OrderRef = orderRef.ToString(); order.FrontID = tradeApi.FrontID; order.SessionID = tradeApi.SessionID; order.StatusType = EnumOrderStatus.开仓中; } else { foreach (var closeOrder in order.GetClosingOrders()) { var orderRef = tradeApi.OrderInsert(closeOrder.InstrumentId, closeOrder.OffsetFlag, closeOrder.Direction, closeOrder.Price, closeOrder.Volume); closeOrder.OrderRef = orderRef.ToString(); closeOrder.FrontID = tradeApi.FrontID; closeOrder.SessionID = tradeApi.SessionID; closeOrder.StatusType = EnumOrderStatus.平仓中; } //order.StatusType = EnumOrderStatus.平仓中; } }
private void InsertToMock(Order order) { if (order.CloseOrders.Count == 0) { OnRspQryOrder(this, new OrderEventArgs(() => Add(order))); order.RemainVolume = order.Volume; order.OrderRef = tradeApi.MaxOrderRef++.ToString(); order.FrontID = tradeApi.FrontID; order.SessionID = tradeApi.SessionID; order.TradePrice = order.Price; order.TradeDate = tradeApi.TradingDay; order.TradeTime = DateTime.Now.ToString("HH:mm:ss"); order.StatusType = EnumOrderStatus.已开仓; } else { foreach (var closeOrder in order.GetClosingOrders()) { closeOrder.OrderRef = tradeApi.MaxOrderRef++.ToString(); closeOrder.FrontID = tradeApi.FrontID; closeOrder.SessionID = tradeApi.SessionID; closeOrder.StatusType = EnumOrderStatus.平仓中; closeOrder.OrderSysID = tradeApi.MaxOrderRef++.ToString(); var tradeField = new CThostFtdcTradeField(); tradeField.TradeID = tradeApi.MaxOrderRef++.ToString(); tradeField.OrderSysID = closeOrder.OrderSysID; tradeField.Price = closeOrder.Price; tradeField.TradeDate = tradeApi.TradingDay; tradeField.TradeTime = DateTime.Now.ToString("HH:mm:ss"); var o = UpdateTradeID(tradeField); if (o == null || o.StatusType != EnumOrderStatus.已平仓) continue; OnRspQryOrder(this, new OrderEventArgs(() => HandleOrderClose(o))); if (!HasMoney) HasMoney = true; } } }
public void CancelOrder(Order order) { if (order == null) return; sw.EnterWriteLock(); if (order.CloseOrders.Count == 0) { tradeApi.CancelOrder(order.OrderRef, order.FrontID, order.SessionID, order.InstrumentId); OnRspQryOrder(this, new OrderEventArgs(() => orders.Remove(order))); OrderRepository.Delete(order); } else { foreach (var item in order.GetClosingOrders()) { tradeApi.CancelOrder(item.OrderRef, item.FrontID, item.SessionID, item.InstrumentId); item.CloseOrders.Remove(item); } order.StatusType = EnumOrderStatus.已开仓; OrderRepository.Update(order); } sw.ExitWriteLock(); }