public void testShowHidden() { O.freezeNow("07/01/2009"); WatcherExclusionsTable.EXCLUSIONS.insert("QF.NDayBreak"); MarketTickersTable.TICKERS.C_BLOOMBERG.updateOne(MarketTickersTable.TICKERS.C_MARKET.@is("TU.1C"), "TOE"); var tuTopic = LiveWatcher.tickerTopic("QF.NDayBreak", "TOE", "Comdty"); var fakeGui = new FakeWatcherGui(); var watcher = new LiveWatcher(fakeGui); watcher.initialize(); watcher.requireVisible(0); publishAim(tuTopic, "QF.NDayBreak", "TOE", "COMDTY", 5, "2009/07/01 14:00:03"); fakeGui.waitMatches(0, watcher.visible); watcher.setShowHidden(true); fakeGui.waitMatches(1, watcher.visible); var visible = O.first(watcher.visibleRows()); watcher.setShowHidden(false); fakeGui.waitMatches(0, watcher.visible); watcher.removeExclusion(visible); fakeGui.waitMatches(1, watcher.visible); watcher.addExclusion(visible); fakeGui.waitMatches(0, watcher.visible); }
public void testCanPopulateDataTable() { var now = "2008/07/05 12:31:45"; Dates.freezeNow(now); addOrders(); var gui = new FakeOrderTrackerGUI(); var orderTable = gui.tracker.orderTable(); gui.setMarket("RE.TEST.TY.1C"); gui.doAllWork(); var row = O.first(orderTable.rows()); AreEqual("NDayBreak-daily-1.0", row["system"]); AreEqual("BFBD30", row["pv"]); AreEqual("RE.TEST.TY.1C", row["symbol"]); AreEqual(now, row["simFillTime"]); AreEqual("Enter short", row["enterExit"]); AreEqual("10,000", row["size"]); AreEqual("99.501235", row["simFillPrice"]); AreEqual("STOP(99.50)", row["details"]); AreEqual("an order", row["description"]); AreEqual("my pc", row["hostname"]); }
public void testFerretMessages() { O.freezeNow("2008/08/08 08:08:08"); ExecutionConfigurationTable.CONFIG.insert("Future", "CurrentPlatform", "CurrentRoute"); var order1 = buy("order 1", stop(99.50), 100, oneBar()); symbolSystem.order(order1); processTick(2.5); requireFerretHasOrders(order1); order1.cancel(); O.wait(() => ferret.hasMessages(2)); var orderMessage = O.first(ferret.get()); var cancelMessage = O.last(ferret.get()); var orderId = order1.ferretSubmission.id; AreEqual(orderId, orderMessage.text("USERORDERID")); AreEqual("BLACKBOX", orderMessage.text("CLIENTUSERID")); AreEqual("TOMAHAWK", orderMessage.text("CLIENTAPPNAME")); AreEqual("2008-08-08", orderMessage.text("ORDERDATE")); AreEqual("CurrentRoute", orderMessage.text("ROUTE")); AreEqual("CurrentPlatform", orderMessage.text("PLATFORM")); AreEqual(orderId, cancelMessage.text("ORIGINALUSERORDERID")); AreEqual(orderId.Replace('T', 'C'), cancelMessage.text("USERORDERID")); AreEqual("CancelOrder", cancelMessage.text("MESSAGETYPE")); AreEqual("2008-08-08", cancelMessage.text("ORDERDATE")); AreEqual(O.hostname(), cancelMessage.text("CLIENTHOSTNAME")); AreEqual("BLACKBOX", cancelMessage.text("CLIENTUSERID")); AreEqual("TOMAHAWK", cancelMessage.text("CLIENTAPPNAME")); }
protected virtual void processBar(Dictionary <Symbol, Bar> symbolBars) { if (!barsLoadedThisBar) { loader.add(symbolBars); barsLoadedThisBar = false; } bridge().setCurrentSlippage(loader.currentSlippages(O.first(symbolBars.Values).time)); bridge().processBar(symbolBars); }
public DataTable table() { var result = new QDataTable(); result.addTypedColumn("Metric", typeof(string)); O.each(O.sort(Keys, (a, b) => { if (a.Equals(b)) { return(0); } if (a.Equals("ALL")) { return(-1); } return(b.Equals("ALL") ? 1 : a.CompareTo(b)); }), symbol => result.addTypedColumn(symbol.Replace(".", "_"), typeof(double))); var example = O.first(Values); O.each(O.sort(example.Keys), metric => addRow(metric, result)); return(result); }
public void testOrderSubmission() { O.freezeNow("2008/08/08 08:08:08"); var order1 = buy("order 1", stop(99.50), 100, oneBar()); symbolSystem.order(order1); processBar(1, 3, 1, 2); hasOrders(order1); requireFerretHasOrders(); processTick(2.5); requireFerretHasOrders(order1); emailer.allowMessages(); var submitted = O.the <LiveOrders.LiveOrder>(LiveOrders.ORDERS.ordersSubmitted(systemId, symbol().name)); AreEqual("Enter", submitted.entryExit()); fill(order1, 123); submitted = O.the <LiveOrders.LiveOrder>(LiveOrders.ORDERS.ordersSubmitted(systemId, symbol().name)); var filled = O.the(O.list <LiveOrders.LiveOrder>(LiveOrders.ORDERS.ordersFilled(systemId, symbol().name))); AreEqual(123.0, filled.price().doubleValue()); AreEqual(submitted, filled); var order2 = sell("order 2", stop(97.50), 10, oneBar()); symbolSystem.order(order2); processTick(3.0); requireFerretHasOrders(order1, order2); var order3 = sell("market", market(), 50, oneBar()); symbolSystem.order(order3); processTick(3.0); requireFerretHasOrders(order1, order2); symbolSystem.order(symbolSystem.position().exit("exit 1", market(), onTheClose())); processTick(4.0); submitted = O.first(O.list <LiveOrders.LiveOrder>(LiveOrders.ORDERS.ordersSubmitted(systemId, symbol().name))); AreEqual("Exit", submitted.entryExit()); }
public void testEmails() { var abc = new Symbol("RE.TEST.TY.1C"); var slippage = MarketTable.MARKET.fixedSlippage(abc.name); var monitor = new PositionMonitor(LIVE_SYSTEM, O.list(abc, new Symbol("DEF")), "A_TOPIC"); var counter = new PublishCounter("OrderTracker.orderAdded"); var order = abc.buy("Go LONG", new Stop(50), 10, FillOrKill.FILL_KILL).placed(); var trade = new Trade(order, 52, 10, slippage, 1); var position = order.fill(trade); monitor.positionUpdate(position, trade, PositionMonitor.basicTradeEmail); monitor.goLive(O.list(position), abc); O.freezeNow("2008/09/22 14:47:04"); LiveOrderEmailsTable.ORDER_EMAILS.insert("S-I-V", "PV", "ALL", "team"); emailer.allowMessages(); monitor.positionUpdate(position, trade, PositionMonitor.basicTradeEmail); var message = emailer.sent(); message.hasSubject(@"S\(PV\) Filled Order for RE.TEST.TY.1C - " + O.hostname()); message.hasContent(@"Order.*: Enter long 10 RE.TEST.TY.1C @ 52 STOP\(50.0000000\)"); message.hasContent("Timestamp: 2008/09/22 14:47:04"); message.hasContent("Description: Go LONG"); emailer.clear(); var liveOrders = O.list <LiveOrders.LiveOrder>(LiveOrders.ORDERS.ordersFilled(LIVE_SYSTEM.id(), abc.name)); HasCount(1, liveOrders); var liveOrder = O.the(liveOrders); AreEqual(10, liveOrder.size()); AreEqual("Enter", liveOrder.entryExit()); AreEqual("long", liveOrder.positionDirection()); AreEqual(liveOrder.id(), counter.getOneAndClear <int>("liveOrderId")); order = position.scaleUpLong("gimme more", new StopLimit(50, 60), 25, FillOrKill.FILL_KILL).placed(); trade = new Trade(order, 55, 25, slippage, 1); order.fill(trade); monitor.positionUpdate(position, trade, PositionMonitor.basicTradeEmail); emailer.sent().hasContent(@"Order.*: Scale up long 25 RE.TEST.TY.1C @ 55 STOP_LIMIT\(50.0000000, 60.0000000\)"); emailer.clear(); liveOrders = O.list <LiveOrders.LiveOrder>(LiveOrders.ORDERS.ordersFilled(LIVE_SYSTEM.id(), abc.name)); HasCount(2, liveOrders); liveOrder = O.first(liveOrders); AreEqual(25, liveOrder.size()); AreEqual("Scale up", liveOrder.entryExit()); AreEqual("long", liveOrder.positionDirection()); order = position.scaleDownLong("gimme more", new Limit(55), 20, FillOrKill.FILL_KILL).placed(); trade = new Trade(order, 55, 20, slippage, 1); order.fill(trade); monitor.positionUpdate(position, trade, PositionMonitor.basicTradeEmail); emailer.sent().hasContent(@"Order.*: Scale down long 20 RE.TEST.TY.1C @ 55 LIMIT\(55.0000000\)"); emailer.clear(); order = position.exitLong("Get out", new Market(), OneBar.ONE).placed(); trade = new Trade(order, 40, 15, slippage, 1); order.fill(trade); monitor.positionUpdate(position, trade, PositionMonitor.basicTradeEmail); emailer.sent().hasContent(@"Order.*: Exit long 15 RE.TEST.TY.1C @ 40 MARKET"); emailer.disallowMessages(); LiveOrderEmailsTable.ORDER_EMAILS.deleteAll(Clause.TRUE); monitor.positionUpdate(position, trade, PositionMonitor.basicTradeEmail); }
static DataRow latestRow(FakeOrderTrackerGUI gui) { return(O.first(gui.tracker.orderTable().rows())); }