Ejemplo n.º 1
0
        public void testBasicFunctionality()
        {
            Objects.freezeNow("2009/06/25 12:00:00");
            var timers = Objects.timerManager();

            timers.isInterceptingTimersForTest = true;
            var heart        = new Heartbeat(JMSTestCase.TEST_BROKER, "test.heartbeat", 2000);
            var fieldsResult = new Fields[] { null };

            heart.subscribe(fields => {
                Bomb.unlessNull(fieldsResult[0], () => "have " + fieldsResult[0] + " but received " + fields);
                fieldsResult[0] = fields;
            });
            timers.intercept("2009/06/25 12:00:00", "first beat");
            heart.initiate();
            timers.intercept("2009/06/25 12:00:02", "second beat");
            timers.runTimers("2009/06/25 12:00:00");
            Objects.wait(() => fieldsResult[0] != null);
            AreEqual(Objects.hostname(), fieldsResult[0].get("Hostname"));
            fieldsResult[0] = null;

            timers.intercept("2009/06/25 12:00:04", "third beat");
            timers.runTimers("2009/06/25 12:00:02");
            Objects.wait(() => fieldsResult[0] != null);
        }
Ejemplo n.º 2
0
        public void testTimerSequence()
        {
            Objects.freezeNow("2008/11/11 11:11:11");
            double currentState = -1;
            var    sequence     = new TimerSequence <double>(d => { currentState = d; });

            sequence.add(1.1, 500);
            sequence.add(2.2, 500);
            sequence.add(3.3);
            IsFalse(sequence.running());
            // starts in 1.1
            sequence.startAsOf(O.now());
            O.wait(() => currentState == 1.1);
            IsTrue(sequence.running());
            Objects.advanceNow(500);
            O.wait(() => currentState == 2.2);
            Objects.advanceNow(500);
            O.wait(() => currentState == 3.3);
            IsFalse(sequence.running());

            sequence.startAsOf(O.now());
            O.wait(() => currentState == 1.1);
            Objects.advanceNow(500);
            O.wait(() => currentState == 2.2);
            sequence.startAsOf(O.now());
            O.wait(() => currentState == 1.1);
            Objects.advanceNow(500);
            O.wait(() => currentState == 2.2);
            Objects.advanceNow(500);
            O.wait(() => currentState == 3.3);

            // starts in 2.2
            var asOf = O.now();

            Objects.advanceNow(500);
            sequence.startAsOf(asOf);
            O.wait(() => currentState == 2.2);
            Objects.advanceNow(500);
            O.wait(() => currentState == 3.3);

            // starts in 3.3
            asOf         = O.now();
            currentState = -1;
            Objects.advanceNow(1000);
            sequence.startAsOf(asOf);
            O.wait(() => currentState == 3.3);
        }
Ejemplo n.º 3
0
        public void testMarketOnClose()
        {
            var in1 = buy("in", Order.market(), OnClose.ON_CLOSE);

            bar(1, 4, 2, 3, ONE_LONG);
            hasNewTrades(new Trade(in1, 3, 1, slippage(), 1));
            var out1 = exit("out", Order.market(), OnClose.ON_CLOSE);

            O.freezeNow("2009/01/01 13:59:59");
            tick(4.5, ONE_LONG);
            noNewTrades();
            O.freezeNow("2009/01/01 14:00:00");
            tick(3.5);
            hasNewTrades(new Trade(out1, 3.5, 1, slippage(), 1));
            buy("in2", Order.market(), OnClose.ON_CLOSE);
            tick(3.5);
            noNewTrades();
        }
Ejemplo n.º 4
0
        public void testSummary()
        {
            var gui      = startGui();
            var systemId = 1234;
            var topic    = new Topic(CloudMonitor.progressTopic(systemId));

            gui.setSystemId(systemId);
            gui.doAllWork();
            O.freezeNow("2008/02/03 02:00:00");
            topic.send(new Dictionary <string, object> {
                { "RunsComplete", 1000 },
                { "TotalRuns", 10000 },
                { "RunsPerMinute", 10 },
            });
            O.wait(() => gui.runsComplete() == 1000);
            AreEqual(date("2008/02/03 17:00:00"), gui.completionTime());
            AreEqual(10000, gui.totalRuns());
        }
Ejemplo n.º 5
0
        public void testHideShowZeros()
        {
            O.freezeNow("07/01/2009");
            MarketTickersTable.TICKERS.C_BLOOMBERG.updateOne(MarketTickersTable.TICKERS.C_MARKET.@is("FV.1C"), "anything");
            MarketTickersTable.TICKERS.C_BLOOMBERG.updateOne(MarketTickersTable.TICKERS.C_MARKET.@is("TU.1C"), "TOE");
            var nday20  = new Topic("TOMAHAWK.NDayBreak.1.0.daily.BFBD20.FV.1C.optimalPosition");
            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(1, watcher.visible);
            publishTomahawk(nday20, 11, "2009/07/01 14:00:04");
            fakeGui.waitMatches(2, watcher.visible);
            watcher.setFilterZeroes(false);
            fakeGui.wait(() => watcher.visible() > 10);
        }
Ejemplo n.º 6
0
        public void testCanPopulateStuffFromSystemIdLive()
        {
            O.freezeNow("2009/04/28");
            var gui = new FakeResearchGUI();

            gui.setSystemId("39");
            gui.loadSystem();
            gui.doAllWork();
            var parameters = gui.parameters();

            AreEqual(39, parameters.get <int>("systemId"));
            AreEqual(50, parameters.get <int>("LeadBars"));
            AreEqual(30, parameters.get <int>("BreakDays"));
            IsTrue(gui.runNumberEnabled());
            IsFalse(gui.runInNativeCurrency());
            var markets = O.convert(O.list <Market>(SystemDetailsTable.DETAILS.details(39).liveSystem().markets()), m => m.name());

            AreEqual(O.list(markets), gui.markets());
        }
Ejemplo n.º 7
0
        [Test] public void testOneSubscribe()
        {
            OrderTable.prefix = "PREFIX";
            O.freezeNow("2009/07/10 13:00:00");
            var liveSystem = OneSystemTest <EmptySystem> .fakeLiveSystem(new Parameters(), false);

            liveSystem.removeAllLiveMarkets();
            insertMarket("FOO", 0);
            liveSystem.addLiveMarket("FOO", "2009/07/07", null);
            insertMarket("BAR", 0);
            liveSystem.addLiveMarket("BAR", "2009/07/07", null);
            var fooTopic = new QTopic("PREFIX.TestSystem1.1.0.daily.Slow.FOO.heartbeat");

            O.timerManager().isInterceptingTimersForTest = true;

            O.timerManager().intercept("2009/07/10 13:00:00", "gui update");
            var map = new StatusTreeMap(new FakeStatusMapGUI(), O.list(liveSystem));

            map.setIsEqualSizes(false);
            var systemNode = O.the(map.nodes());

            AreEqual("TestSystem1", systemNode.text);
            var pvNode = O.the(systemNode.children());

            AreEqual("Slow", pvNode.text);
            var symbolNodes = O.dictionaryFromValues(O.convert(pvNode.children(), child => child as LiveMarketNode), child => child.id);

            AreEqual(1d, symbolNodes["FOO"].size);
            AreEqual(0, symbolNodes["FOO"].ticksReceived);
            AreEqual(1d, symbolNodes["BAR"].size);
            var message = new Fields();

            message.put("timestamp", "2009/07/10 12:59:59");
            message.put("lastTickProcessed", "2009/07/10 12:59:58");
            message.put("ticksReceived", "200");
            message.put("hostname", "hullabaloo");
            fooTopic.send(message);
            Objects.timerManager().intercept("2009/07/10 13:00:01", "second gui update");
            O.timerManager().runTimers("2009/07/10 13:00:00");
            waitMatches(200d, () => symbolNodes["FOO"].ticksReceived); // you just
        }
Ejemplo n.º 8
0
        public void testFerretOrderSimFilled()
        {
            O.freezeNow("2009/03/03");
            insertSubmitted(39, SYMBOL, "test", "f2");
            var id = insertSubmitted(39, SYMBOL, "test", "f3");

            insertSubmitted(39, SYMBOL, "test", "f4");
            insertSubmitted(39, SYMBOL, "test", "f5");
            var gui = startGui();

            gui.setMarket(SYMBOL);
            gui.wait(populateCompleted);
            var filledAt = Dates.date("1999/09/09 09:09:09");

            LiveOrders.ORDERS.order(id).updateFill(12345, filledAt);
            publish(id);
            var row = Util.Objects.nth(gui.tracker.orderTable().rows(), 3);

            AreEqual(id.ToString(), row["liveOrderId"]);
            gui.waitMatches("12345.000000", () => row["simFillPrice"]);
        }
Ejemplo n.º 9
0
        public void testSystemSelectPopulatesPvAndMarketCombo()
        {
            O.freezeNow("2009/07/15");
            var gui = startGui();

            gui.tracker.systemUpdated();
            gui.doAllWork();
            gui.selectedSystem = SYSTEM;
            gui.tracker.systemUpdated();
            gui.wait(populateCompleted);
            IsTrue(gui.marketChoices.Contains("TY.1C"));
            IsTrue(gui.marketChoices.Contains("CD.1C"));
            IsFalse(gui.marketChoices.Contains("TRI.CNAIG5"));
            IsTrue(gui.pvChoices.Contains("BFBD30"));
            IsFalse(gui.pvChoices.Contains("CDXMV20"));
            gui.selectedPv = "BFBD30";
            gui.tracker.pvUpdated();
            gui.wait(populateCompleted);
            IsTrue(gui.marketChoices.Contains("TY.1C"));
            IsFalse(gui.marketChoices.Contains("CD.1C"));
        }
Ejemplo n.º 10
0
        public void testIsolatedTomahawkMessages()
        {
            O.freezeNow("07/01/2009");
            MarketTickersTable.TICKERS.C_BLOOMBERG.updateOne(MarketTickersTable.TICKERS.C_MARKET.@is("FV.1C"), "anything");
            var nday20  = new Topic("TOMAHAWK.NDayBreak.1.0.daily.BFBD20.FV.1C.optimalPosition");
            var nday30  = new Topic("TOMAHAWK.NDayBreak.1.0.daily.BFBD30.FV.1C.optimalPosition");
            var fakeGui = new FakeWatcherGui();
            var watcher = new LiveWatcher(fakeGui);

            watcher.initialize();
            watcher.eachRow(row => AreEqual(row["tomahawk"], 0));
            watcher.requireContains("QF.NDayBreak", "anything Comdty");
            var             fv1C         = new Symbol("FV.1C");
            Action <double> waitForCount = expected => fakeGui.waitMatches(expected, () => watcher.row("QF.NDayBreak", fv1C)["tomahawk"]);

            publishTomahawk(nday20, 3, "2009/07/01 14:00:00");
            waitForCount(3);
            publishTomahawk(nday20, 2, "2009/07/01 14:00:01");
            waitForCount(2);
            publishTomahawk(nday30, 3, "2009/07/01 14:00:03");
            waitForCount(5);
        }
Ejemplo n.º 11
0
        public void testNBarFade()
        {
            O.freezeNow("2009/03/10");
            var symbol = new Symbol("RE.TEST.TY.1C", 1000);
            var args   = new SystemArguments(symbol, new Parameters {
                { "systemId", 133486 },
                { "RunMode", (double)RunMode.RIGHTEDGE },
                { "LeadBars", 50 },
                { "ATRLen", 5 },
                { "nDays", 6 },
                { "nATRentry", 1.5 },
                { "exitATRmultiple", 1 },
                { "stopAfStep", 0.02 },
                { "stopAfMax", 0.2 },
                { "entryBarWindow", 2 },
                { "closeBetter", 1 },
                { "riskDollars", 100000000 }
            });
            var loader    = new SystemDbBarLoader(Interval.DAILY, O.list(symbol), date("2003/01/01"));
            var simulator = new Simulator(args, loader, OrderTable.prefix);

            simulator.processBars();
        }
Ejemplo n.º 12
0
        public void testStoWorks()
        {
            LogC.setOut("testStoWorks", @"C:\logs\localCloud.log", false);
            LogC.useJavaLog = true;
            const int systemId = 178114;

            var curveFile = new QFile(@"V:\Market Systems\General Market Systems\Benchmark\20080923\CurvesBin\Benchmark_1.0_daily_RE.TEST.TY.1C/run_678.bin");

            curveFile.deleteIfExists();
            var testQueue = new Queue("TEST.LocalCloud");

            O.timerManager().isInterceptingTimersForTest = true;
            O.freezeNow("2009/06/22 03:00:00");
            O.timerManager().intercept("2009/06/22 03:00:00", "heartbeat");
            O.timerManager().intercept("2009/06/22 03:00:03", "second heartbeat");
            var server = new STOServer(systemId, 2);
            var fired  = false;

            server.heart.subscribe(fields => {
                fired = true;
                AreEqual(fields.get("Hostname"), O.hostname());
                AreEqual(fields.get("ServerIndex"), 2);
            });
            server.subscribe(testQueue);
            server.heart.initiate();
            IsFalse(fired);
            O.timerManager().runTimers("2009/06/22 03:00:00");
            O.wait(() => fired);
            MetricResults metrics = null;

            O.timerManager().intercept("2009/06/22 03:00:00", "client heartbeat");
            new STOClient(SystemDetailsTable.DETAILS.details(systemId), testQueue).metrics(678, results => metrics = results);
            O.wait(100, 1000, () => metrics != null);
            AreEqual(-1953125.00, metrics["RE.TEST.TY.1C"]["QNetProfit"]);
            curveFile.requireExists();
        }
Ejemplo n.º 13
0
        public void testTick()
        {
            O.freezeNow("2008/08/08 11:00:00");
            StatusTracker.LATE_MILLIS    = 500;
            StatusTracker.CRASHED_MILLIS = 500;
            var tracker = startGui();

            AreEqual(SystemStatus.UNKNOWN, gui.tickStatus(system));
            message("2008/08/08 11:00:00", "2008/08/08 10:00:00");
            waitForTickStatus(SystemStatus.GREEN);
            O.advanceNow(1000);

            Log.setFile(@"C:\foo.log");
            SYMBOL.publish(new Bar(0, 0, 0, 0, date("2008/08/08 11:00:01")));
            O.wait(() => tracker.tickTimers[system].running());
            O.advanceNow(500);
            waitForTickStatus(SystemStatus.YELLOW);
            O.advanceNow(500);
            waitForTickStatus(SystemStatus.RED);
            O.advanceNow(59000);
            message("2008/08/08 11:01:00", "2008/08/08 11:00:01");
            waitForTickStatus(SystemStatus.GREEN);
            // lastTickProcessed should be the time on the tick
        }
Ejemplo n.º 14
0
        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());
        }
Ejemplo n.º 15
0
        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);
        }