Example #1
0
        public void FillBidAsk()
        {
            const string s = "TST";
            // market should fill on trade but not on quote
            OrderImpl o = new BuyMarket(s, 100);
            Assert.That(o.FillBidAsk(TickImpl.NewAsk(s, 9, 100)));
            Assert.That(!o.FillBidAsk(TickImpl.NewTrade(s, 9, 100)));
            Assert.That(!o.FillBidAsk(TickImpl.NewBid(s, 8, 100)));

            // buy limit

            // limit should fill if order price is inside market
            o = new BuyLimit(s, 100, 10m);
            Assert.That(o.FillBidAsk(TickImpl.NewAsk(s, 9, 100)));
            // shouldn't fill outside market
            o = new BuyLimit(s, 100, 10m);
            Assert.That(!o.FillBidAsk(TickImpl.NewTrade(s, 11, 100)));
            Assert.That(!o.FillBidAsk(TickImpl.NewAsk(s, 11, 100)));
            Assert.That(!o.FillBidAsk(TickImpl.NewBid(s, 10, 100)));

            // sell limit

            // limit should fill if order price is inside market
            o = new SellLimit(s, 100, 10m);
            Assert.That(o.FillBidAsk(TickImpl.NewBid(s, 11, 100)));
            // shouldn't fill outside market
            o = new SellLimit(s, 100, 10m);
            Assert.That(!o.FillBidAsk(TickImpl.NewTrade(s, 9, 100)));

            // buy stop

            o = new BuyStop(s, 100, 10m);
            Assert.That(o.FillBidAsk(TickImpl.NewAsk(s, 11, 100)));
            // shouldn't fill outside market
            o = new BuyStop(s, 100, 10m);
            Assert.That(!o.FillBidAsk(TickImpl.NewTrade(s, 9, 100)));

            // sell stop

            o = new SellStop(s, 100, 10m);
            Assert.That(o.FillBidAsk(TickImpl.NewBid(s, 9, 100)));
            // shouldn't fill outside market
            o = new SellStop(s, 100, 10m);
            Assert.That(!o.FillBidAsk(TickImpl.NewTrade(s, 11, 100)));

            // always fail filling an invalid tick
            o = new BuyMarket(s, 100);
            Assert.IsFalse(o.FillBidAsk(TickImpl.NewTrade(s, 0, 0)));
        }
Example #2
0
        public void Fill()
        {
            const string s = "TST";
            // market should fill on trade but not on quote
            OrderImpl o = new BuyMarket(s, 100);
            Assert.That(o.Fill(TickImpl.NewTrade(s, 9, 100)));
            Assert.That(!o.Fill(TickImpl.NewBid(s, 8, 100)));

            // buy limit

            // limit should fill if order price is inside market
            o = new BuyLimit(s, 100, 10m);
            Assert.That(o.Fill(TickImpl.NewTrade(s, 9, 100)));
            // shouldn't fill outside market
            o = new BuyLimit(s, 100, 10m);
            Assert.That(!o.Fill(TickImpl.NewTrade(s, 11, 100)));

            // sell limit

            // limit should fill if order price is inside market
            o = new SellLimit(s, 100, 10m);
            Assert.That(o.Fill(TickImpl.NewTrade(s, 11, 100)));
            // shouldn't fill outside market
            o = new SellLimit(s, 100, 10m);
            Assert.That(!o.Fill(TickImpl.NewTrade(s, 9, 100)));

            // buy stop

            o = new BuyStop(s, 100, 10m);
            Assert.That(o.Fill(TickImpl.NewTrade(s, 11, 100)));
            // shouldn't fill outside market
            o = new BuyStop(s, 100, 10m);
            Assert.That(!o.Fill(TickImpl.NewTrade(s, 9, 100)));

            // sell stop

            o = new SellStop(s, 100, 10m);
            Assert.That(o.Fill(TickImpl.NewTrade(s, 9, 100)));
            // shouldn't fill outside market
            o = new SellStop(s, 100, 10m);
            Assert.That(!o.Fill(TickImpl.NewTrade(s, 11, 100)));

            // always fail filling an invalid tick
            o = new BuyMarket(s, 100);
            Assert.IsFalse(o.Fill(TickImpl.NewTrade(s, 0, 0)));

            // always fail filling invalid order
            o = new BuyLimit(s, 100, 10);
            OrderImpl x = new OrderImpl();
            Assert.IsFalse(o.Fill(x));

            // always fail filling an order that doesn't cross market
            x = new BuyMarket(s, 100);
            Assert.IsFalse(o.Fill(x));

            const string t2 = "trader2";
            // suceed on crossing market
            x = new SellMarket(s,100);
            x.Account = t2;
            Assert.IsTrue(o.Fill(x));

            // fail when accounts are the same
            x = new SellMarket(s, 100);
            x.Account = o.Account;
            Assert.IsFalse(o.Fill(x));


            // fail on match outside of market
            x = new SellLimit(s, 100, 11);
            x.Account = t2;
            Assert.IsFalse(o.Fill(x));

            // succeed on limit cross
            o = new BuyLimit(s, 100, 10);
            x = new SellLimit(s, 100, 10);
            x.Account = t2;
            Assert.IsTrue(o.Fill(x));

            // make sure we can stop cross
            o = new SellStop(s, 100, 10);
            x = new BuyMarket(s, 100);
            x.Account = t2;
            Assert.IsTrue(o.Fill(x));

        }
Example #3
0
        public void IdentityStops()
        {
            string sym = "SPY";
            bool side = false;
            int size = -256;
            decimal stop = 134.40m;
            string comment = "Hello, World!";   // not checked for
            long id = 8675309;                  // not checked for

            Order orig = new StopOrder(sym, side, size, stop);
            Order comp;
            
            comp = new StopOrder(sym, size, stop, id);
            Assert.AreEqual(orig.symbol, comp.symbol, "Symbol, SignedStop");
            Assert.AreEqual(orig.side, comp.side, "Side, SignedStop");
            Assert.AreEqual(orig.size, comp.size, "Size, SignedStop");
            Assert.AreEqual(orig.stopp, comp.stopp, "Stop, SignedStop");
            Assert.AreEqual(orig.price, comp.price, "Price, SignedStop");

            comp = new StopOrder(sym, side, size, stop, id);
            Assert.AreEqual(orig.symbol, comp.symbol, "Symbol, StopID");
            Assert.AreEqual(orig.side, comp.side, "Side, StopID");
            Assert.AreEqual(orig.size, comp.size, "Size, StopID");
            Assert.AreEqual(orig.stopp, comp.stopp, "Stop, StopID");
            Assert.AreEqual(orig.price, comp.price, "Price, StopID");

            comp = new StopOrder(sym, side, size, stop, comment);
            Assert.AreEqual(orig.symbol, comp.symbol, "Symbol, StopComment");
            Assert.AreEqual(orig.side, comp.side, "Side, StopComment");
            Assert.AreEqual(orig.size, comp.size, "Size, StopComment");
            Assert.AreEqual(orig.stopp, comp.stopp, "Stop, StopComment");
            Assert.AreEqual(orig.price, comp.price, "Price, StopComment");

            comp = new SellStop(sym, size, stop);
            Assert.AreEqual(orig.symbol, comp.symbol, "Symbol, SellStop");
            Assert.AreEqual(orig.side, comp.side, "Side, SellStop");
            Assert.AreEqual(orig.size, comp.size, "Size, SellStop");
            Assert.AreEqual(orig.stopp, comp.stopp, "Stop, SellStop");
            Assert.AreEqual(orig.price, comp.price, "Price, SellStop");

            comp = new SellStop(sym, size, stop, id);
            Assert.AreEqual(orig.symbol, comp.symbol, "Symbol, SellStopID");
            Assert.AreEqual(orig.side, comp.side, "Side, SellStopID");
            Assert.AreEqual(orig.size, comp.size, "Size, SellStopID");
            Assert.AreEqual(orig.stopp, comp.stopp, "Stop, SellStopID");
            Assert.AreEqual(orig.price, comp.price, "Price, SellStopID");

            comp = new SellStop(sym, size, stop, comment);
            Assert.AreEqual(orig.symbol, comp.symbol, "Symbol, SellStopComment");
            Assert.AreEqual(orig.side, comp.side, "Side, SellStopComment");
            Assert.AreEqual(orig.size, comp.size, "Size, SellStopComment");
            Assert.AreEqual(orig.stopp, comp.stopp, "Stop, SellStopComment");
            Assert.AreEqual(orig.price, comp.price, "Price, SellStopComment");

            side = true;
            orig = new StopOrder(sym, side, size, stop);

            comp = new BuyStop(sym, size, stop);
            Assert.AreEqual(orig.symbol, comp.symbol, "Symbol, BuyStop");
            Assert.AreEqual(orig.side, comp.side, "Side, BuyStop");
            Assert.AreEqual(orig.size, comp.size, "Size, BuyStop");
            Assert.AreEqual(orig.stopp, comp.stopp, "Stop, BuyStop");
            Assert.AreEqual(orig.price, comp.price, "Price, BuyStop");

            comp = new BuyStop(sym, size, stop, id);
            Assert.AreEqual(orig.symbol, comp.symbol, "Symbol, BuyStopID");
            Assert.AreEqual(orig.side, comp.side, "Side, BuyStopID");
            Assert.AreEqual(orig.size, comp.size, "Size, BuyStopID");
            Assert.AreEqual(orig.stopp, comp.stopp, "Stop, BuyStopID");
            Assert.AreEqual(orig.price, comp.price, "Price, BuyStopID");

            comp = new BuyStop(sym, size, stop, comment);
            Assert.AreEqual(orig.symbol, comp.symbol, "Symbol, BuyStopComment");
            Assert.AreEqual(orig.side, comp.side, "Side, BuyStopComment");
            Assert.AreEqual(orig.size, comp.size, "Size, BuyStopComment");
            Assert.AreEqual(orig.stopp, comp.stopp, "Stop, BuyStopComment");
            Assert.AreEqual(orig.price, comp.price, "Price, BuyStopComment");
        }