public void Basics() { Broker broker = new Broker(); broker.GotFill += new FillDelegate(broker_GotFill); broker.GotOrder += new OrderDelegate(broker_GotOrder); OrderImpl o = new OrderImpl(); int error = broker.SendOrderStatus(o); Assert.AreNotEqual((int)MessageTypes.OK,error); Assert.That(orders == 0); Assert.That(fills == 0); o = new BuyMarket(s, 100); broker.SendOrderStatus(o); Assert.That(orders == 1); Assert.That(fills == 0); Assert.That(broker.Execute(TickImpl.NewTrade(s,10,200)) == 1); Assert.That(fills == 1); // test that a limit order is not filled outside the market o = new BuyLimit(s, 100, 9); broker.SendOrderStatus(o); Assert.AreEqual(0, broker.Execute(TickImpl.NewTrade(s, 10, 100))); Assert.That(fills == 1); // redudant but for counting // test that limit order is filled inside the market Assert.AreEqual(1, broker.Execute(TickImpl.NewTrade(s, 8, 100))); Assert.That(fills == 2); OrderImpl x = new OrderImpl(); // test that a market order is filled when opposite book exists o = new SellLimit(s, 100, 11); x = new BuyMarket(s, 100); const string t2 = "trader2"; x.Account = t2; broker.SendOrderStatus(o); broker.SendOrderStatus(x); Assert.AreEqual(3, fills); // test that a market order is not filled when no book exists // on opposite side // clear existing orders broker.CancelOrders(); o = new SellMarket(s, 100); o.Account = t2; broker.SendOrderStatus(o); Assert.AreEqual(3, fills); }
public void Basics() { // setup trail tracker TrailTracker tt = new TrailTracker(); tt.SendOrder += new OrderDelegate(tt_SendOrder); // set 15c trailing stop tt.DefaultTrail = new OffsetInfo(0,.15m); // verify it's set Assert.AreEqual(.15m,tt.DefaultTrail.StopDist); // get feed Tick [] tape = SampleData(); // test broker Broker b = new Broker(); // get fills over to trail tracker b.GotFill += new FillDelegate(tt.Adjust); // take initial position b.SendOrderStatus(new MarketOrder(SYM, 100)); // get orders from trail tracker tt.SendOrder += new OrderDelegate(b.SendOrder); // no orders to start oc = 0; // iterate through feed for (int i = 0; i < tape.Length; i++ ) { Tick k = tape[i]; // set a date and time k.date = 20070926; k.time = 95500; // execute orders, nothing to do on first two ticks b.Execute(k); // pass every tick to tracker tt.newTick(k); } // get position Position p = b.GetOpenPosition(SYM); // verify position is flat Assert.IsTrue(p.isFlat,p.ToString()); // one retrace sent at the end Assert.AreEqual(1, oc); }
void _h_GotTick(Tick t) { SimBroker.Execute(t); _r.GotTick(t); }
public void OPGs() { Broker broker = new Broker(); const string s = "TST"; // build and send an OPG order OrderImpl opg = new BuyOPG(s, 200, 10); broker.SendOrderStatus(opg); // build a tick on another exchange TickImpl it = TickImpl.NewTrade(s, 9, 100); it.ex = "ISLD"; // fill order (should fail) int c = broker.Execute(it); Assert.AreEqual(0, c); // build opening price for desired exchange TickImpl nt = TickImpl.NewTrade(s, 9, 10000); nt.ex = "NYS"; // fill order (should work) c = broker.Execute(nt); Assert.AreEqual(1, c); // add another OPG, make sure it's not filled with another tick TickImpl next = TickImpl.NewTrade(s, 9, 2000); next.ex = "NYS"; OrderImpl late = new BuyOPG(s, 200, 10); broker.SendOrderStatus(late); c = broker.Execute(next); Assert.AreEqual(0, c); }
public void MultiFire() { // setup trail tracker TrailTracker tt = new TrailTracker(); tt.VerboseDebugging = true; tt.SendOrder += new OrderDelegate(tt_SendOrder); tt.SendDebug += new DebugDelegate(tt_SendDebug); // set 15c trailing stop tt.DefaultTrail = new OffsetInfo(0, .15m,0,.5m); // verify it's set Assert.AreEqual(.15m, tt.DefaultTrail.StopDist); // get feed Tick[] tape = MultiFireSampleData(); // test broker Broker b = new Broker(); b.Reset(); // get fills over to trail tracker b.GotFill += new FillDelegate(tt.Adjust); // take initial position b.SendOrderStatus(new MarketOrder(SYM, 400)); // get orders from trail tracker tt.SendOrder += new OrderDelegate(b.SendOrder); // no orders to start oc = 0; // iterate through feed for (int i = 0; i < tape.Length; i++) { Tick k = tape[i]; // set a date and time k.date = 20070926; k.time = 95500; // execute orders, nothing to do on first two ticks b.Execute(k); // pass every tick to tracker tt.newTick(k); } // get position Position p = b.GetOpenPosition(SYM); // verify position is flat Assert.AreEqual(200,p.UnsignedSize, "position is not flat: " + p.ToString()); // one retrace sent at the end Assert.AreEqual(1, oc,"too many fires"); }
public void TrailStartedAfterFirePoint() { // setup trail tracker TrailTracker tt = new TrailTracker(); tt.isValid = true; const string acct = "DEFAULT"; tt.pt.DefaultAccount = acct; tt.SendOrder += new OrderDelegate(tt_SendOrder); //tt.SendDebug += new DebugFullDelegate(tt_SendDebug); // set 15c trailing stop tt.DefaultTrail = new OffsetInfo(0, .15m); // verify it's set Assert.AreEqual(.15m, tt.DefaultTrail.StopDist); // tt.TrailByDefault = true; // put in a position to track tt.Adjust(new PositionImpl(SYM, 11.00m, 100, 0m,acct)); // check position in tt-pt Assert.AreEqual(1, tt.pt.Count); // manually enter a trail tt[SYM] = new OffsetInfo(0m, .25m); // check if trail entered for symbol Assert.AreEqual(.25m, tt[SYM].StopDist); // get feed Tick[] tape = SampleData(); // test broker Broker b = new Broker(); // get fills over to trail tracker b.GotFill += new FillDelegate(tt.Adjust); // get orders from trail tracker tt.SendOrder += new OrderDelegate(b.SendOrder); // no orders to start oc = 0; // iterate through feed for (int i = 0; i < tape.Length; i++) { Tick k = tape[i]; // set a date and time k.date = 20070926; k.time = 95500; // execute orders, nothing to do on first two ticks b.Execute(k); // pass every tick to tracker tt.newTick(k); } Assert.AreEqual(1, oc); }
public void MOCs() { Broker broker = new Broker(); const string s = "TST"; OrderImpl moc = new MOCOrder(s, true, 200); Assert.IsTrue(moc.ValidInstruct == OrderInstructionType.MOC, "unexpected order instruction: " + moc.ValidInstruct); Assert.AreEqual(0, broker.SendOrderStatus(moc), "send moc order failed"); TickImpl openingTick = TickImpl.NewTrade(s, Util.ToTLDate(DateTime.Now), Util.TL2FT(9, 30, 00), 9, 10000, "NYS"); TickImpl endMornTick = TickImpl.NewTrade(s, Util.ToTLDate(DateTime.Now), Util.TL2FT(12, 00, 00), 9, 10000, "NYS"); TickImpl endLunchTick = TickImpl.NewTrade(s, Util.ToTLDate(DateTime.Now), Util.TL2FT(14, 15, 00), 9, 10000, "NYS"); TickImpl closingTick = TickImpl.NewTrade(s, Util.ToTLDate(DateTime.Now), Util.TL2FT(16, 00, 00), 9, 10000, "NYS"); int c = 0; c = broker.Execute(openingTick); Assert.AreEqual(0, c,"MOC filled on open"); c = broker.Execute(endMornTick); Assert.AreEqual(0, c, "MOC filled in morning"); c = broker.Execute(endLunchTick); Assert.AreEqual(0, c, "MOC filled at lunch"); c = broker.Execute(closingTick); Assert.AreEqual(1, c, "MOC did not fill at close"); // should execute on the first tick at/after 16:00:00 }
public void DayFill() { Broker broker = new Broker(); const string s = "TST"; OrderImpl day = new MarketOrder(s, true, 200); broker.SendOrderStatus(day); TickImpl openingTick = TickImpl.NewTrade(s, Util.ToTLDate(DateTime.Now), Util.TL2FT(9, 30, 00), 9, 10000, "NYS"); TickImpl endMornTick = TickImpl.NewTrade(s, Util.ToTLDate(DateTime.Now), Util.TL2FT(12, 00, 00), 9, 10000, "NYS"); TickImpl endLunchTick = TickImpl.NewTrade(s, Util.ToTLDate(DateTime.Now), Util.TL2FT(14, 15, 00), 9, 10000, "NYS"); TickImpl closingTick = TickImpl.NewTrade(s, Util.ToTLDate(DateTime.Now), Util.TL2FT(16, 00, 00), 9, 10000, "NYS"); int c; c = broker.Execute(openingTick); Assert.AreEqual(1, c); // should execute on first received tick c = broker.Execute(endMornTick); Assert.AreEqual(0, c); c = broker.Execute(endLunchTick); Assert.AreEqual(0, c); c = broker.Execute(closingTick); Assert.AreEqual(0, c); }
public void Fill_HighLiquidity() { Broker broker = new Broker(); broker.UseHighLiquidityFillsEOD = true; const string s = "SPY"; OrderImpl limitBuy = new LimitOrder(s, true, 1, 133m); OrderImpl limitSell = new LimitOrder(s, false, 2, 133.5m); OrderImpl stopBuy = new StopOrder(s, true, 3, 135.70m); OrderImpl stopSell = new StopOrder(s, false, 4, 135.75m); broker.SendOrderStatus(limitBuy); broker.SendOrderStatus(limitSell); broker.SendOrderStatus(stopBuy); broker.SendOrderStatus(stopSell); // OHLC for 6/21/2012 on SPY TickImpl openingTick = TickImpl.NewTrade(s, Util.ToTLDate(DateTime.Now), Util.TL2FT(9, 30, 00), 135.67m, 10670270, "NYS"); TickImpl endMornTick = TickImpl.NewTrade(s, Util.ToTLDate(DateTime.Now), Util.TL2FT(12, 00, 00), 135.78m, 10670270, "NYS"); TickImpl endLunchTick = TickImpl.NewTrade(s, Util.ToTLDate(DateTime.Now), Util.TL2FT(14, 15, 00), 132.33m, 10670270, "NYS"); TickImpl closingTick = TickImpl.NewTrade(s, Util.ToTLDate(DateTime.Now), Util.TL2FT(16, 00, 00), 132.44m, 10670270, "NYS"); broker.Execute(openingTick); broker.Execute(endMornTick); broker.Execute(endLunchTick); broker.Execute(closingTick); List<Trade> trades = broker.GetTradeList(); Assert.IsTrue(trades.Count == 4); foreach (Trade trade in trades) { if (trade.xsize == 1) Assert.AreEqual(133m, trade.xprice); else if (trade.xsize == 2) Assert.AreEqual(133.5m, trade.xprice); else if (trade.xsize == 3) Assert.AreEqual(135.7m, trade.xprice); else if (trade.xsize == 4) Assert.AreEqual(135.75m, trade.xprice); } }
void _h_GotTick(Tick t) { SimBroker.Execute(t); responseengine.GotTick(t); }
public void DataProvider() { TickImpl t = TickImpl.NewTrade(s, 10, 700); // feature to pass-through ticks to any subscriber // this can be connected to tradelink library to allow filtered subscribptions // and interapplication communication Broker broker = new Broker(); broker.GotTick += new TickDelegate(broker_GotTick); Assert.That((receivedtickDP == null) && (gottickDP == 0)); broker.Execute(t); // should fire a gotTick Assert.That(gottickDP != 0); Assert.That((receivedtickDP != null) && (receivedtickDP.trade == t.trade)); }