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."); } }); }
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); } }
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(); }
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(); }
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); }
public OrderSubmitter(LiveSystem liveSystem, string topicPrefix) { this.liveSystem = liveSystem; this.topicPrefix = topicPrefix; tag = new Lazy <string>(liveSystem.bloombergTag); ferretApproved = new Lazy <bool>(liveSystem.autoExecuteTrades); }
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"; }
public void insertInto(LiveSystem system) { foreach (var entry in data) { system.insertParameter(entry.Key, entry.Value); } }
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()); }
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; }
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); } }
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(); }
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 )); }
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); }
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 } })); }
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); }
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); }
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")); })); }
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(); }
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(); } }
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); }
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()); } } }
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); }
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); }
public virtual Email tradeEmail(LiveSystem liveSystem, Trade trade, int liveOrderId) { return(PositionMonitor.basicTradeEmail(liveSystem, trade, liveOrderId)); }
static Parameters parameters(LiveSystem system) { return(new Parameters { { "systemId", (double)system.id() }, { "RunMode", (double)RunMode.LIVE } }); }
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.")); }
public SystemStatus tickStatus(LiveSystem system) { return(Bomb.missing(tickStatuses, system)); }
public SystemStatus heartbeatStatus(LiveSystem system) { return(Bomb.missing(beatStatuses, system)); }
public void writeCurveFile(Collectible collectible, LiveSystem liveSystem, QDirectory directory) { CurveFiles.writeOne(directory.file(liveSystem.fileName(collectible.name) + ".bin").path(), dates_, pnl_, positions_); }