Beispiel #1
0
 public TradingEvent(ExecType type, OrderField order)
 {
     Type        = type;
     OrderReturn = order;
     Trade       = null;
     Order       = null;
 }
        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);
        }
Beispiel #3
0
 public TradingEvent(ExecType type, TradeField trade)
 {
     Type        = type;
     Trade       = trade;
     Order       = null;
     OrderReturn = null;
 }
Beispiel #4
0
 public TradingEvent(ExecType type)
 {
     Type        = type;
     Order       = null;
     Trade       = null;
     OrderReturn = null;
 }
Beispiel #5
0
        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);
                }
            }
        }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
        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 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);
 }