public void EmitExecutionReport(OrderRecord record, SQ.ExecType execType, SQ.OrderStatus orderStatus, string text) { ExecutionReport report = CreateReport(record, execType, orderStatus); report.Text = text; provider.EmitExecutionReport(report); }
private static ExecutionReport CreateReport(OrderRecord record, OrderStatus ordStatus, ExecType execType, string text = "") { var report = new ExecutionReport(record.Order); report.DateTime = DateTime.Now; report.AvgPx = record.AvgPx; report.CumQty = record.CumQty; report.LeavesQty = record.LeavesQty; report.OrdStatus = ordStatus; report.ExecType = execType; report.Text = text == "" ? record.Order.Text : text; return(report); }
public void Process(ref TradeField trade, NLog.Logger log) { lock (this) { OrderRecord record; if (!workingOrders.TryGetValue(trade.ID, out record)) { record = GetExternalOrder(ref trade); } if (record != null) { // CTP出现过重复发送委托与成交的情况,需要过滤。并提示 // 同一交易ID同一方向不会同时出现,出现表示系统重复提示 // 不向方向表示自成交了 TradeField field = null; if (tradesDict.TryGetValue(trade.TradeID, out field)) { // 有取出,可能是自成交,也可能是重复发单 if (trade.Side == field.Side) { log.Error("重复收到成交回报!"); // 后面不再处理 return; } else { log.Warn("出现自成交!"); // 自成交也得处理 } } else { tradesDict[trade.TradeID] = trade; } record.AddFill(trade.Price, (int)trade.Qty); SQ.ExecType execType = SQ.ExecType.ExecTrade; SQ.OrderStatus orderStatus = (record.LeavesQty > 0) ? SQ.OrderStatus.PartiallyFilled : SQ.OrderStatus.Filled; ExecutionReport report = CreateReport(record, execType, orderStatus); report.LastPx = trade.Price; report.LastQty = trade.Qty; provider.EmitExecutionReport(report); } else { // log.Warn("Trade,找不到订单,workingOrders.Count={0}", workingOrders.Count); } } }
public void Process(ref TradeField trade) { OrderRecord record; if (!workingOrders.TryGetValue(trade.ID, out record)) { record = GetExternalOrder(ref trade); } if (record != null) { record.AddFill(trade.Price, (int)trade.Qty); SQ.ExecType execType = SQ.ExecType.ExecTrade; SQ.OrderStatus orderStatus = (record.LeavesQty > 0) ? SQ.OrderStatus.PartiallyFilled : SQ.OrderStatus.Filled; ExecutionReport report = CreateReport(record, execType, orderStatus); report.LastPx = trade.Price; report.LastQty = trade.Qty; provider.EmitExecutionReport(report); } }
public static void SetOrderStatus(this Order order, SmartQuant.OrderStatus status) { StatusField.Setter(order, status); }
public void EmitExecutionReport(OrderRecord record, SQ.ExecType execType, SQ.OrderStatus orderStatus) { ExecutionReport report = CreateReport(record, execType, orderStatus); provider.EmitExecutionReport(report); }
public void EmitExecutionReport(QuoteRecord record, SQ.ExecType execType, SQ.OrderStatus orderStatus, string text) { EmitExecutionReport(new OrderRecord(record.AskOrder), execType, orderStatus, text); EmitExecutionReport(new OrderRecord(record.BidOrder), execType, orderStatus, text); }