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)); }
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"); }