Exemplo n.º 1
0
        // receive a signal from the Matcher (via the Simulation, via the Population) that an order has been filled
        public void recvOrderNotification(IOrderbook_Agent ob, IOrderbookEvent evt)
        {
            // Fill order events
            if (evt is IOrderbookEvent_FillOrder)
            {
                IOrderbookEvent_FillOrder fillEvent = (IOrderbookEvent_FillOrder)evt;
                IOrder filledOrder = fillEvent.getOrder();

                SingletonLogger.Instance().InfoLog(typeof(AbstractAgent), "AbstractAgent " + GetName() + " Fill " + filledOrder + " @ " + Scheduler.GetTime());

                if (filledOrder.isBid())
                {
                    AccumulateHoldings(+1 * fillEvent.getVolume());
                }
                else
                {
                    AccumulateHoldings(-1 * fillEvent.getVolume());
                }

                if (fillEvent.orderFilled())
                {
                    RemoveFromOpenOrderList(filledOrder);
                    FilledOrderNotification(filledOrder, fillEvent.getExecutionPrice(), fillEvent.getVolume());
                }
                else
                {
                    PartialFilledOrderNotification(filledOrder, fillEvent.getExecutionPrice(), fillEvent.getVolume());
                }
            }
            // Add and Cancel events are not forwarded to agents by the Population class
        }
Exemplo n.º 2
0
        public void recvSimulationNotification(ISimulationParameters sim, ISimulationEvent se)
        {
            SingletonLogger.Instance().DebugLog(typeof(AbstractPassiveTrajectoryFactory), "AbstractPassiveTrajectoryFactory recvSimulationNotification");

            // events received from ISimulation

            if (se.OrderbookEvent == null)
            {
                if (se is ISimulationStart)
                {
                    SingletonLogger.Instance().DebugLog(typeof(AbstractPassiveTrajectoryFactory), "AbstractPassiveTrajectoryFactory SET Sim!");
                    _sim = sim;
                    reset();
                    SimulationStartNotification();
                }

                if (se is ISimulationEnd)
                {
                    SimulationEndNotification();
                    SingletonLogger.Instance().DebugLog(typeof(AbstractPassiveTrajectoryFactory), "AbstractPassiveTrajectoryFactory CLEAR Sim!");
                    _sim = null;
                }
            }
            else
            {
                if (_sim == null)
                {
                    // too late
                    SingletonLogger.Instance().DebugLog(typeof(AbstractPassiveTrajectoryFactory), "AbstractPassiveTrajectoryFactory Too Late!");
                    return;
                }

                if (se.OrderbookEvent is IOrderbookEvent_FillOrder)
                {
                    IOrderbookEvent_FillOrder fillEvent = (IOrderbookEvent_FillOrder)se.OrderbookEvent;
                    IOrder filledOrder = fillEvent.getOrder();
                    if (fillEvent.orderFilled())
                    {
                        FilledOrderNotification(filledOrder, fillEvent.getExecutionPrice(), fillEvent.getVolume());
                    }
                    else
                    {
                        PartialFilledOrderNotification(filledOrder, fillEvent.getExecutionPrice(), fillEvent.getVolume());
                    }
                }
                else if (se.OrderbookEvent is IOrderbookEvent_AddOrder)
                {
                    IOrderbookEvent_AddOrder addEvent = (IOrderbookEvent_AddOrder)se.OrderbookEvent;
                    IOrder newOrder = addEvent.getOrder();
                    NewOrderNotification(newOrder);
                }
                else if (se.OrderbookEvent is IOrderbookEvent_CancelOrder)
                {
                    IOrderbookEvent_CancelOrder cancelEvent = (IOrderbookEvent_CancelOrder)se.OrderbookEvent;
                    IOrder cancelledOrder = cancelEvent.getOrder();
                    CancelOrderNotification(cancelledOrder);
                }
            }
        }
Exemplo n.º 3
0
        public void recvSimulationNotification(ISimulationParameters sim, ISimulationEvent se)
        {
            // events received from ISimulation

            if (se.OrderbookEvent == null)
            {
                if (se is ISimulationStart)
                {
                    SingletonLogger.Instance().DebugLog(typeof(AbstractAgentEvaluationFactory), "*** AbstractAgentEvaluationFactory got ISimulationStart");
                    _sim = sim;
                    reset();
                    SimulationStartNotification();
                }

                if (se is ISimulationEnd)
                {
                    SingletonLogger.Instance().DebugLog(typeof(AbstractAgentEvaluationFactory), "*** AbstractAgentEvaluationFactory got ISimulationEnd");
                    SimulationEndNotification();
                    _sim = null;
                }
            }
            else
            {
                SingletonLogger.Instance().DebugLog(typeof(AbstractAgentEvaluationFactory), "*** AbstractAgentEvaluationFactory got ISimulationEvent with non-null Orderbook");

                if (se.OrderbookEvent is IOrderbookEvent_FillOrder)
                {
                    IOrderbookEvent_FillOrder fillEvent = (IOrderbookEvent_FillOrder)se.OrderbookEvent;
                    IOrder filledOrder = fillEvent.getOrder();
                    if (fillEvent.orderFilled())
                    {
                        FilledOrderNotification(filledOrder, fillEvent.getExecutionPrice(), fillEvent.getVolume());
                    }
                    else
                    {
                        PartialFilledOrderNotification(filledOrder, fillEvent.getExecutionPrice(), fillEvent.getVolume());
                    }
                }
                else if (se.OrderbookEvent is IOrderbookEvent_AddOrder)
                {
                    IOrderbookEvent_AddOrder addEvent = (IOrderbookEvent_AddOrder)se.OrderbookEvent;
                    IOrder newOrder = addEvent.getOrder();
                    NewOrderNotification(newOrder);
                }
                else if (se.OrderbookEvent is IOrderbookEvent_CancelOrder)
                {
                    IOrderbookEvent_CancelOrder cancelEvent = (IOrderbookEvent_CancelOrder)se.OrderbookEvent;
                    IOrder cancelledOrder = cancelEvent.getOrder();
                    CancelOrderNotification(cancelledOrder);
                }
            }
        }
Exemplo n.º 4
0
 // delegate signals from the Simulation to appropriate agents
 public void recvSimulationNotification(ISimulationParameters sim, ISimulationEvent se)
 {
     if (se.OrderbookEvent == null)
     {
         // start and end events go to all agents
         if (se is ISimulationStart)
         {
             foreach (IAgent ag in _agents)
             {
                 ag.recvSimulationNotification(sim, se);
             }
         }
         else if (se is ISimulationEnd)
         {
             foreach (IAgent ag in _agents)
             {
                 ag.recvSimulationNotification(sim, se);
             }
         }
     }
     else
     {
         // fill events go to the order owner only
         if (se.OrderbookEvent is IOrderbookEvent_FillOrder)
         {
             IOrderbookEvent_FillOrder fillEvent = (IOrderbookEvent_FillOrder)se.OrderbookEvent;
             IOrderOwner owner = fillEvent.getOrder().getOwner();
             if (_agents.Contains((IAgent)owner))
             {
                 owner.recvOrderNotification(sim.Orderbook, fillEvent);
             }
             else
             {
                 throw new Exception("Population is attempting to forward signal to an unrecognized IAgent");
             }
         }
         // Add and Cancel events are ignored by the Population class
     }
 }
Exemplo n.º 5
0
        public void recvOrderbookNotification(IOrderbook_Matcher ob, IOrderbookEvent evt)
        {
            String line = "";

            if (evt is IOrderbookEvent_AddOrder)
            {
                // log an Add row
                IOrderbookEvent_AddOrder addEvt = (IOrderbookEvent_AddOrder)evt;
                IOrder order = addEvt.getOrder();

                string status = "Add";
                string time   = "" + String.Format("{0:.###}", Scheduler.GetTime());

                string price = "" + (ob.getNumBids() > 0 ? String.Format("{0:.###}", ob.getHighestBid()) : "?")
                               + "," + (ob.getNumAsks() > 0 ? String.Format("{0:.###}", ob.getLowestAsk()) : "?");
                string direction  = "" + (order.isBid() ? "BID" : "ASK");
                string orderprice = "" + String.Format("{0:.###}", order.getPrice());
                string ordersize  = "" + order.getVolume();
                string owner      = "\"" + order.getOwner().ToString() + "\"";
                line = status + "," + time + "," + price + "," + direction + "," + orderprice + "," + ordersize + "," + owner;
                Console.WriteLine(line);
            }
            else if (evt is IOrderbookEvent_CancelOrder)
            {
                // log a Cancel
                IOrderbookEvent_CancelOrder cancelEvt = (IOrderbookEvent_CancelOrder)evt;
                IOrder order = cancelEvt.getOrder();

                string status = "Cancel";
                string time   = "" + String.Format("{0:.###}", Scheduler.GetTime());
                string price  = "" + (ob.getNumBids() > 0 ? String.Format("{0:.###}", ob.getHighestBid()) : "?")
                                + "," + (ob.getNumAsks() > 0 ? String.Format("{0:.###}", ob.getLowestAsk()) : "?"); string direction = "" + (order.isBid() ? "BID" : "ASK");
                string orderprice = "" + String.Format("{0:.###}", order.getPrice());
                string ordersize  = "" + order.getVolume();
                string owner      = "\"" + order.getOwner().ToString() + "\"";
                line = status + "," + time + "," + price + "," + direction + "," + orderprice + "," + ordersize + "," + owner;
                Console.WriteLine(line);
            }
            else if (evt is IOrderbookEvent_FillOrder)
            {
                // no op
                IOrderbookEvent_FillOrder fillEvt = (IOrderbookEvent_FillOrder)evt;
                IOrder order = fillEvt.getOrder();

                string status = "Fill";
                string time   = "" + String.Format("{0:.###}", Scheduler.GetTime());
                string price  = "" + (ob.getNumBids() > 0 ? String.Format("{0:.###}", ob.getHighestBid()) : "?")
                                + "," + (ob.getNumAsks() > 0 ? String.Format("{0:.###}", ob.getLowestAsk()) : "?"); string direction = "" + (order.isBid() ? "BID" : "ASK");
                string orderprice = "" + String.Format("{0:.###}", order.getPrice());
                string ordersize  = "" + order.getVolume();
                string owner      = "\"" + order.getOwner().ToString() + "\"";
                line = status + "," + time + "," + price + "," + direction + "," + orderprice + "," + ordersize + "," + owner;
                Console.WriteLine(line);
            }

            OrderbookBoundaries newbdy = new OrderbookBoundaries();

            newbdy.process(ob);
            if (_bdy.differentFrom(newbdy))
            {
                Console.WriteLine("*** OB boundaries changed!! " + newbdy.ToString());
            }
            _bdy = newbdy;

            using (FileStream fs = new FileStream("frames/OB-" + _tag + ".txt", FileMode.Append, FileAccess.Write))
                using (StreamWriter sw = new StreamWriter(fs)) {
                    sw.WriteLine(line);
                }

            if (Scheduler.GetTime() - _LastDumpTime > DUMP_INTERVAL)
            {
                _LastDumpTime = Scheduler.GetTime();

                using (FileStream fs = new FileStream("frames/BIDS-" + _tag + "-" + _DumpNumber + ".dat", FileMode.Append, FileAccess.Write))
                    using (StreamWriter sw = new StreamWriter(fs)) {
                        if (_Virgin)
                        {
                            sw.WriteLine("#===================================");
                            _Virgin = true;
                        }

                        IDictionary <double, IList <IOrder_Mutable> > bids = ob.getBids_Mutable();
                        sw.WriteLine("# num bid: " + bids.Keys.Count);
                        sw.WriteLine("# low bid: " + (ob.getNumBids() > 0 ? "" + ob.getLowestBid():"?"));
                        sw.WriteLine("# high bid: " + (ob.getNumBids() > 0 ? "" + ob.getHighestBid():"?"));
                        foreach (double price in bids.Keys)
                        {
                            IList <IOrder_Mutable> orders = bids[price];
                            double vol = 0;
                            foreach (IOrder_Mutable o in orders)
                            {
                                vol += o.getVolume();
                            }
                            sw.WriteLine("" + price + "," + vol + "");
                        }
                    }


                using (FileStream fs = new FileStream("frames/ASKS-" + _tag + "-" + _DumpNumber + ".dat", FileMode.Append, FileAccess.Write))
                    using (StreamWriter sw = new StreamWriter(fs)) {
                        if (_Virgin)
                        {
                            sw.WriteLine("#===================================");
                            _Virgin = true;
                        }

                        IDictionary <double, IList <IOrder_Mutable> > asks = ob.getAsks_Mutable();
                        sw.WriteLine("# num ask: " + asks.Keys.Count);
                        sw.WriteLine("# low ask: " + (ob.getNumAsks() > 0 ? "" + ob.getLowestAsk():"?"));
                        sw.WriteLine("# high ask: " + (ob.getNumAsks() > 0 ? "" + ob.getHighestAsk():"?"));
                        foreach (double price in asks.Keys)
                        {
                            IList <IOrder_Mutable> orders = asks[price];
                            double vol = 0;
                            foreach (IOrder_Mutable o in orders)
                            {
                                vol += o.getVolume();
                            }
                            sw.WriteLine("" + price + "," + vol);
                        }
                    }

                using (FileStream fs = new FileStream("frames/GP-" + _tag + "-" + _DumpNumber + ".gp", FileMode.Append, FileAccess.Write))
                    using (StreamWriter sw = new StreamWriter(fs)) {
                        sw.WriteLine("set terminal postscript eps color");
                        sw.WriteLine("set output \"EPS-" + _tag + "-" + String.Format("{0:00000000}", _DumpNumber) + ".eps\"");
                        sw.WriteLine("set title \"Orderbook at time=" + Scheduler.GetTime() + " in " + _tag + "\"");
                        sw.WriteLine("set ylabel \"Orders (count)\"");
                        sw.WriteLine("set xlabel \"Price\"");
                        sw.WriteLine("binwidth=0.125");
                        sw.WriteLine("set boxwidth binwidth");
                        sw.WriteLine("bin(x,width)=width*floor(x/width) + binwidth/2.0");
                        sw.WriteLine("plot 'Asks-" + _tag + "-" + _DumpNumber + ".dat' using (bin($1,binwidth)):(1.0) smooth freq with boxes t \"ASKS " + _tag + "-" + _DumpNumber + "\" fs solid 0.50, 'Bids-" + _tag + "-" + _DumpNumber + ".dat' using (bin($1,binwidth)):(1.0) smooth freq with boxes t \"BIDS " + _tag + "-" + _DumpNumber + "\" fill empty");
                    }

                _DumpNumber++;
            }
        }