Пример #1
0
        void addRow(LiveSystem system)
        {
            var row = table.NewRow();

            systems.Add(row, system);
            insertUnknownRow(row, system);
            plans[system] = new List <Plan>();

            setHeartbeatStatus(row, system, SystemStatus.UNKNOWN);
            setTickStatus(row, system, SystemStatus.UNKNOWN);

            tickTimers[system]      = statusFades(status => setTickStatus(row, system, status));
            heartbeatTimers[system] = statusFades(status => setHeartbeatStatus(row, system, status));

            lastTickProcessed[system] = DateTime.MinValue;

            subscribeSystemHeartbeat(row, system);
            var symbols = convert(list <JMarket>(system.markets()), m => new Symbol(m));

            each(symbols, symbol => {
                try {
                    symbol.subscribe(bar => onTickPublished(row, system, bar.time));
                } catch (Exception ex) {
                    LogC.err("exception caught subscribing to tick data for " + symbol + ", " + system, ex);
                    gui.alertUser("exception caught susbcribing to data for " + symbol + ", " + system + ".\nSkipping... see log for details.");
                }
            });
        }
Пример #2
0
 void onTickProcessed(DataRow row, LiveSystem system, Date jLastProcessed)
 {
     lock (plans[system]) {
         var time = date(jLastProcessed);
         if (lastTickProcessed[system].CompareTo(time) < 0)
         {
             lastTickProcessed[system] = time;
         }
         for (var i = 0; i < plans[system].Count; i++)
         {
             if (first(plans[system]).tickPublished > time)
             {
                 break;
             }
             plans[system].RemoveAt(0);
         }
         if (isEmpty(plans[system]))
         {
             tickTimers[system].stop();
             setTickStatus(row, system, SystemStatus.GREEN);
             return;
         }
         var nextPlanTime = first(plans[system]).tickTime;
         tickTimers[system].startAsOf(nextPlanTime);
     }
 }
Пример #3
0
 public QREBridge(SystemArguments arguments, string topicPrefix)
 {
     arguments_ = arguments;
     if (arguments.runMode() == RunMode.LIVE)
     {
         liveSystem = arguments.liveSystem();
         monitor_   = new LiveTradeMonitor(liveSystem, arguments.symbols, topicPrefix);
     }
     else
     {
         liveSystem = null;
         monitor_   = new TradeMonitor();
     }
     each(arguments.symbols, symbol => bars_[symbol] = new BarSpud(manager));
     system    = System.create <S>(this);
     interval_ = arguments.interval();
     if (!arguments.runInNativeCurrency)
     {
         fxRates = new LazyDictionary <Symbol, SymbolSpud <Bar> >(symbol =>
                                                                  symbol.fxRateSymbol().bars(bars(symbol)).allowStaleTicks()
                                                                  );
     }
     statistics_ = new StatisticsManager(system, arguments);
     arguments.logSystemCreation();
 }
Пример #4
0
        static void generateCurves(LiveSystem system, IEnumerable <JMarket> markets, QDirectory directory, DateTime start, DateTime end, DataSource metricSource)
        {
            var symbols    = convert(markets, market => new Symbol(market.name(), market.bigPointValue()));
            var parameters = new Parameters {
                { "systemId", system.id() },
                { "RunMode", (double)RunMode.LIVE }
            };
            var startLoading = DateTime.Now;

            Bomb.when(system.details().runInNativeCurrency(), () => "portfolio optimization requires systems to run in dollars, not native currency");
            var bars            = new SystemDbBarLoader(system.details().interval(), symbols, start, end);
            var simulator       = new Simulator(new SystemArguments(symbols, parameters), bars, "QUEDGE");
            var startProcessing = DateTime.Now;
            var perSecond       = simulator.processBars();

            saveMetric(system, "marketBarsPerSecond", metricSource, perSecond);
            var startMetricCalc = DateTime.Now;

            simulator.metrics();
            saveMetric(system, "metricCalculationSeconds", metricSource, secondsSince(startMetricCalc));
            saveMetric(system, "totalRunSeconds", metricSource, secondsSince(startProcessing));
            simulator.writeCurveFiles(directory);
            saveMetric(system, "totaSeconds", metricSource, secondsSince(startLoading));
            Db.commit();
        }
Пример #5
0
        public int filledUpdateDb(double fillPrice, LiveSystem liveSystem, string topicPrefix)
        {
            int liveOrderId;

            if (ferretSubmission == null)
            {
                liveOrderId = LiveOrders.ORDERS.insert(
                    liveSystem.id(), symbol.name, jDate(now()), null, enterExit(),
                    positionDirection().ToString(), size, new java.lang.Double(fillPrice),
                    details.ToString(), description, hostname(), topicPrefix, null
                    );
            }
            else
            {
                liveOrderId = ferretSubmission.liveOrderId;
                var submitted = LiveOrders.ORDERS.order(liveOrderId);
                submitted.updateFill(fillPrice, jDate(now()));
            }
            Db.commit();
            OrderTable.topic().send(new Dictionary <string, object> {
                { "liveOrderId", liveOrderId },
                { "timestamp", ymdHuman(now()) }
            });
            return(liveOrderId);
        }
Пример #6
0
 public OrderSubmitter(LiveSystem liveSystem, string topicPrefix)
 {
     this.liveSystem  = liveSystem;
     this.topicPrefix = topicPrefix;
     tag            = new Lazy <string>(liveSystem.bloombergTag);
     ferretApproved = new Lazy <bool>(liveSystem.autoExecuteTrades);
 }
Пример #7
0
        void updateNode(LiveSystem liveSystem, QNode node)
        {
            var childNodes = list <LiveMarketNode>(node.children());
            var totalTicks = sum(convert(childNodes, child => child.ticksReceived));

            if (totalTicks == 0)
            {
                return;
            }
            var tickRate = sum(convert(childNodes, child => child.tickRate));
            var tickLag  = max(convert(childNodes, child => child.tickLag));

            node.color = tickLag - 5000;
            node.size  = isEqualSizes_ ? 1 : Math.Max(1F, tickRate);
            var isDown            = exists(childNodes, child => child.isDown);
            var downText          = isDown ? "" : "DOWN ";
            var lastTickProcessed = max(convert(childNodes, child => child.lastTickProcessed));

            node.text =
                downText +
                liveSystem.pv().name() + " - " + liveSystem.id() + "\n" +
                tickRate.ToString("n0") + "/min, " + tickLag + "ms\n" +
                totalTicks.ToString("n0") + "\n" +
                lastTickProcessed.ToString("HH:mm:ss") + "\n";
        }
Пример #8
0
 public void insertInto(LiveSystem system)
 {
     foreach (var entry in data)
     {
         system.insertParameter(entry.Key, entry.Value);
     }
 }
Пример #9
0
 private void Start()
 {
     GetSpriteRenderer   = gameObject.GetComponent <SpriteRenderer>();
     GetMatch3           = GameObject.Find("GameManager").GetComponent <Match3>();
     GetLiveSystem       = GameObject.Find("GameManager").GetComponent <LiveSystem>();
     GetCircleCollider2D = gameObject.GetComponent <CircleCollider2D>();
     StartCoroutine(activeCollider());
 }
Пример #10
0
 public override void setUp()
 {
     base.setUp();
     system = new LiveSystem(new Siv("TestSystem1", "daily", "1.0"), new Pv("Pv"));
     system.populateDetailsIfNeeded(false);
     system.addLiveMarket("TY.1C", "2008/08/01", null);
     gui = null;
 }
Пример #11
0
        static void saveMetric(LiveSystem system, string metric, DataSource metricSource, double perSecond)
        {
            var reallyMidnight = Dates.midnight(Dates.reallyNow());

            if (metricSource != null)
            {
                system.series(metric).with(metricSource).write(reallyMidnight, perSecond);
            }
        }
Пример #12
0
        public override void  setUp()
        {
            base.setUp();
            liveSystem = new LiveSystem(new Siv("TestSystem1", "daily", "1.0"), new Pv("Slow"));
            liveSystem.populateDetailsIfNeeded(false);

            launcher = new LiveLauncher();
            launcher.beInTestMode();
        }
Пример #13
0
 public static Email basicTradeEmail(LiveSystem system, Trade trade, int liveOrderId)
 {
     return(Email.trade(
                system.siv().system() + paren(system.pv().name()) + " Filled Order for " + trade.order().symbol.name + " - " + hostname(),
                "Order (" + liveOrderId + "): " + trade.shortString() +
                "\nTimestamp: " + ymdHuman(now()) +
                "\nDescription: " + trade.description
                ));
 }
Пример #14
0
        public static LiveSystem fakeLiveSystem(Parameters parameters, bool runInNativeCurrency)
        {
            var liveSystemTemp = new LiveSystem(new Siv("TestSystem1", "daily", "1.0"), new Pv("Slow"));

            liveSystemTemp.setQClassName(typeof(S).FullName);
            liveSystemTemp.populateDetailsIfNeeded(runInNativeCurrency);
            liveSystemTemp.populateTagIfNeeded("QF.Example", false);
            parameters.insertInto(liveSystemTemp);
            return(liveSystemTemp);
        }
Пример #15
0
 static SystemArguments arguments(IEnumerable <Symbol> symbols, LiveSystem liveSystem, RunMode mode, Type type)
 {
     O.each(symbols, symbol => MsivTable.MSIVS.insert(symbol.name, liveSystem.siv()));
     liveSystem.setQClassName(type.FullName);
     liveSystem.populateDetailsIfNeeded(false);
     return(new SystemArguments(symbols, new Parameters {
         { "LeadBars", 5 },
         { "systemId", liveSystem.id() },
         { "RunMode", (double)mode },
         { "lookback", 2 }
     }));
 }
Пример #16
0
        public override void setUp()
        {
            base.setUp();
            emailer.allowMessages();
            liveSystem = OneSystemTest <TestSystem> .fakeLiveSystem(new Parameters { { "LeadBars", 0.0 } }, false);

            data      = new FakeBarLoader(SYMBOL);
            simulator = data.simulator(new SystemArguments(SYMBOL, parameters(liveSystem)), "TEST");
            system    = simulator.theSymbolSystem <TestSystem>(SYMBOL);
            SYMBOL.setCloseTimeForTest("14:00:00", 300);
            bar(0, 0, 0, 0);
        }
Пример #17
0
 void insertUnknownRow(DataRow row, LiveSystem system)
 {
     row.ItemArray = new object[] {
         system.siv().sivName("-"),
         system.pv().name(),
         system.id(),
         "unknown",
         -1,
         "unknown", // "2008/10/09 15:55:07",
         "unknown", // "2008/10/09 15:55:07",
     };
     table.Rows.InsertAt(row, 0);
 }
Пример #18
0
        void subscribeSystemHeartbeat(DataRow row, LiveSystem system)
        {
            var topic = new Topic(system.topicName(OrderTable.prefix, SystemHeartbeat.SUFFIX));

            topic.subscribe(fields => gui.runOnGuiThread(() => {
                row["hostname"] = fields.get("hostname");
                row["ticks"]    = fields.longg("ticksReceived");
                var lastTicked  = ymdHuman(fields.time("lastTickProcessed"));
                row["lastTick"] = lastTicked.Substring(0, 4).Equals("0001") ? "no tick" : lastTicked;
                row["lastBeat"] = ymdHuman(fields.time("timestamp"));
                onHeartbeat(system, fields.time("timestamp"));
                onTickProcessed(row, system, fields.time("lastTickProcessed"));
            }));
        }
Пример #19
0
        public override void setUp()
        {
            base.setUp();

            liveSystem = fakeLiveSystem(parameters(), runInNativeCurrency());
            systemId   = liveSystem.id();
            initializeSymbols();
            bridge_ = new QREBridge <S>(arguments());
            loader  = new FakeBarLoader(bridge_.arguments().symbols);
            loader.setSpudManager(bridge_.manager);
            barsLoadedThisBar = false;

            noOrders();
        }
Пример #20
0
        public void testIntraDayLiveBars()
        {
            var siv5Minute = new Siv("TestSystem1", "second", "1.0");
            var liveSystem = new LiveSystem(siv5Minute, FAST);

            liveSystem.insertParameter("LeadBars", "0");
            var args      = arguments(O.list(SYMBOL, SYMBOL2), liveSystem, RunMode.LIVE, typeof(EmptySystem));
            var loader    = new FakeBarLoader(SYMBOL, SYMBOL2);
            var simulator = loader.simulator(args, OrderTable.prefix);

            try {
                Action <int, int> bar = (close, minutesAfter9) => {
                    var barTime = Dates.minutesAhead(minutesAfter9, Dates.date("2008/09/08 09:00:00"));
                    loader.add(SYMBOL, close, close, close, close, barTime);
                    loader.add(SYMBOL2, close, close, close, close, barTime);
                    simulator.nextBar();
                };
                Action <Symbol, int, string> doTick = (symbol, price, time) => {
                    O.freezeNow("2008/09/08 " + time);
                    tick(simulator, new Bar(0, price, 0, price, O.now()), symbol);
                };
                bar(5, 0);
                O.freezeNow("2008/09/08 09:00:00");
                simulator.goLive();
                doTick(SYMBOL, 26, "09:00:00");
                doTick(SYMBOL2, 28, "09:00:00");
                doTick(SYMBOL, 25, "09:00:00");
                doTick(SYMBOL2, 29, "09:00:00");
                simulator.waitForBar();
                var system  = simulator.theSymbolSystem <EmptySystem>(SYMBOL);
                var system2 = simulator.theSymbolSystem <EmptySystem>(SYMBOL2);
                AreEqual(new Bar(26, 26, 25, 25, date("2008/09/08 09:00:00")), system.bar);
                AreEqual(new Bar(28, 29, 28, 29, date("2008/09/08 09:00:00")), system2.bar);
                O.freezeNow("2008/09/08 09:00:01");
                doTick(SYMBOL, 42, "09:00:01");
                doTick(SYMBOL, 57, "09:00:01");
                doTick(SYMBOL, 15, "09:00:01");
                system.placeOrder(SYMBOL.buy("somethin", Order.market(), 1, FillOrKill.FILL_KILL));
                simulator.waitForBar(); // if it blows up in orderFilled here, it filled orders during live intraday bar (incorrect)
                IsTrue(O.isEmpty(system.allPositions()));
                AreEqual(new Bar(42, 57, 15, 15, date("2008/09/08 09:00:01")), system.bar);
                AreEqual(new Bar(28, 29, 28, 29, date("2008/09/08 09:00:00")), system2.bar);
                AreEqual(3, system.bars.count());
                AreEqual(2, system2.bars.count());
            } finally {
                simulator.clearTimer();
            }
        }
Пример #21
0
        public int submittedInsertDb(LiveSystem liveSystem, string topicPrefix)
        {
            var positionDir = hasPosition() ? positionDirection() : direction;
            var liveOrderId = LiveOrders.ORDERS.insert(
                liveSystem.id(), symbol.name, null, jDate(now()), enterExit(),
                positionDir.ToString(), size, null,
                details.ToString(), description, hostname(), topicPrefix, ferretSubmission.id
                );

            Db.commit();
            OrderTable.topic().send(new Dictionary <string, object> {
                { "liveOrderId", liveOrderId },
                { "timestamp", now() }
            });
            return(liveOrderId);
        }
Пример #22
0
 void onTickPublished(DataRow row, LiveSystem system, DateTime time)
 {
     if (time.CompareTo(lastTickProcessed[system]) <= 0)
     {
         return;
     }
     lock (plans[system]) {
         if (isEmpty(plans[system]) || time > last(plans[system]).tickPublished)
         {
             plans[system].Add(new Plan(now(), time));
         }
         if (plans[system].Count == 1 && !row["lastBeat"].Equals("unknown"))
         {
             tickTimers[system].startAsOf(now());
         }
     }
 }
Пример #23
0
        public void restart(string hostname, int id)
        {
            if (LiveSystem.isAutoExecute(id) && !FerretControl.status().Equals("Stage"))
            {
                var answer = gui.askUser("This will put Ferret into Stage mode.  Are you sure you want to do this?");
                if (answer != YesNoCancel.YES)
                {
                    return;
                }
                FerretControl.requestFerretChange("Stage");
                wait(() => FerretControl.status().Equals("Stage"));
            }
            var fields = new Fields();

            fields.put("SystemId", id);
            fields.put("Hostname", hostname);
            fields.put("Timestamp", ymdHuman(now()));
            LiveLauncher.restartTopic().send(fields);
        }
Пример #24
0
        public void testOnCloseIntraDay()
        {
            var siv5Minute = new Siv("TestSystem1", "5minute", "1.0");
            var liveSystem = new LiveSystem(siv5Minute, FAST);
            var args       = arguments(O.list(SYMBOL, SYMBOL2), liveSystem, RunMode.RIGHTEDGE, typeof(TestOnCloseSystem));
            var loader     = new FakeBarLoader(SYMBOL, SYMBOL2);
            var simulator  = loader.simulator(args, OrderTable.prefix);
            var system     = simulator.theSymbolSystem <TestOnCloseSystem>(SYMBOL);
            var system2    = simulator.theSymbolSystem <TestOnCloseSystem>(SYMBOL2);

            MarketSessionTable.SESSION.update(SYMBOL.name, Session.DAY, "16:00:00", 360);
            MarketSessionTable.SESSION.update(SYMBOL2.name, Session.DAY, "15:50:00", 360);

            Action <int, int> bar = (close, minutesAfter3) => {
                var barTime = Dates.minutesAhead(minutesAfter3, Dates.date("2008/08/08 15:00:00"));
                loader.add(SYMBOL, close, close, close, close, barTime);
                loader.add(SYMBOL2, close, close, close, close, barTime);
                simulator.nextBar();
            };
            Action <bool, bool> closeTriggered = (expected1, expected2) => {
                AreEqual(expected1, system.onCloseTriggered);
                AreEqual(expected2, system2.onCloseTriggered);
                system.onCloseTriggered  = false;
                system2.onCloseTriggered = false;
            };

            O.zeroTo(5, i => {
                bar(i, 15 + i * 5);
                closeTriggered(false, false);
            });
            bar(6, 40); closeTriggered(false, false); // ? format but couldn't resist the parallellism. and terseness.
            bar(7, 45); closeTriggered(false, true);
            bar(8, 50); closeTriggered(false, false);
            bar(9, 55); closeTriggered(true, false);
            bar(10, 60); closeTriggered(false, false);
        }
Пример #25
0
 public virtual Email tradeEmail(LiveSystem liveSystem, Trade trade, int liveOrderId)
 {
     return(PositionMonitor.basicTradeEmail(liveSystem, trade, liveOrderId));
 }
Пример #26
0
 static Parameters parameters(LiveSystem system)
 {
     return(new Parameters {
         { "systemId", (double)system.id() }, { "RunMode", (double)RunMode.LIVE }
     });
 }
Пример #27
0
 public override Email tradeEmail(LiveSystem liveSystem, Trade trade, int liveOrderId)
 {
     LogC.info("calcing trade email");
     return(Email.trade("he hopes@" + trade.price, "jerome can use this functionality."));
 }
Пример #28
0
 public SystemStatus tickStatus(LiveSystem system)
 {
     return(Bomb.missing(tickStatuses, system));
 }
Пример #29
0
 public SystemStatus heartbeatStatus(LiveSystem system)
 {
     return(Bomb.missing(beatStatuses, system));
 }
Пример #30
0
 public void writeCurveFile(Collectible collectible, LiveSystem liveSystem, QDirectory directory)
 {
     CurveFiles.writeOne(directory.file(liveSystem.fileName(collectible.name) + ".bin").path(), dates_, pnl_, positions_);
 }