 Hello everybody, my name is Matt Gorlick and I'm here to talk to you guys about TimeBase Community Edition. I'm a product manager of digital asset technology with E-PAM systems and yeah, I'm really excited to be here. Before we get started, I'd just like to say if you guys have any questions, please feel free to interrupt me. You know, raise your hand and we'll get to it there in the presentation. I really don't feel like doing a monologue right now, so if anyone has any questions, please don't hesitate to ask them as they come up. So, in order to understand what we're talking about today, I'm going to start with a quick overview of what TimeBase is, talk about it in the context of our commercial software, and then we're going to talk about why it's important to bring it into the open source community. And hopefully if we have time, we'll go through some real demonstrations of this all running on my machine. So what is TimeBase? TimeBase is our time series data warehouse and messaging middleware or streaming system developed by the E-PAM Real Time Computing Lab, which is formerly known as Deltix. Deltix is a product company, so we sell licenses to various financial institutions, banks, hedge funds, etc. And we use TimeBase as a foundational piece of pretty much all of our commercial implementations. TimeBase was designed with a few key features in mind, key paradigms. Those are basically, we needed to make sure that it was able to process a large volume of real-time and historical data simultaneously, massive amounts of data quickly, and we needed to make sure that it has a wide variety of APIs that allow you to quickly integrate it into your existing platforms. So for the past 15 plus years, TimeBase has been a core piece of our technological offerings. And over the past few years, we have been working to make it a standalone product that we are now sharing with the open source community. And we're really excited about this because it allows us to handle a wide variety of new challenges and so to speak, expand our horizons. So Aggregate Analyze Act is one of our core mantras at Deltix, or now the EPAM Real-Time Computing Lab. We believe that all financial solutions start with processing data, and TimeBase is the, and that's why we built TimeBase from the ground up to handle our time series database needs. So the key point here that I want to make is that TimeBase allows you to very quickly and seamlessly go from historical to real-time data processing. That means that the strategies that you design in Quant Office can be deployed in Quant Server without needing to rewrite the code to work in a real-time landscape. It's just a few flags that tell the engine that we're switching over to a real-time regime. So TimeBase allows you to make that happen. This is by no means an exhaustive list of the use cases that we've handled, but this design paradigm of switching from historical to real-time context allows us to handle a wide array of different tasks. Now, Deltix is definitely best known for our quantitative analysis, our ability to let you build your models, backtest them, and deploy them in real-time. But using TimeBase, we've also built streaming platforms, massive data aggregation, data warehouses, and things of that nature. The key point I want to highlight here, in addition to the use cases, is what kind of data can go into TimeBase. So on the left here you see pricing data and trade data. Of course, that's standard market data, but we allow you to basically define your message structure in such that you can also store corporate actions, Twitter data, and really any type of data at all that includes a timestamp and a symbol. And I'll show exactly why this is interesting and important a little bit later, but that's just something to think about for the time being. So what kind of applications have clients built using our software? Again, this is definitely not exhaustive, but it's going to be used to illustrate a point that historical data, we built TCA platforms, which obviously relies on historical data to compare your order execution to various benchmarks, T-Wops, V-Wops, etc. Back testing, of course, relies on historical data to test your models. Risk measurement and trade surveillance, again, can be done using historical data to build your rules, your rule sets rather, and then apply them to a real-time context. So the fact that on the right-hand side, you see a lot of overlap with the left-hand side, that's not a coincidence. That was done by design, front office risk management, of course, that has to be done in real time. Executing the algos that you've built, again, uses real-time data. And the point here is that the simultaneous use of historical and real-time data is a difficult problem to solve, and Timebase seeks to bridge that gap. And how we do that is using our moving window concept. So let me start by basically explaining that Timebase was built to take in a lot of data rapidly, build up a stream of data, and digest it and give it to you in chunks. So as soon as data comes in, and we're talking, you know, an order of magnitude of millions of messages per second, as soon as data comes in, by definition, it becomes historical data. So these streams build up, and Timebase has this concept of a moving window where we can, where we provide this data in blocks that can be measured in seconds or minutes or months, years, it doesn't matter, but it's all chunks. And with Timebase, we've built, we've also built our real-time math libraries that can, that are optimized for time series data that allow you to perform rapid calculations across this dataset. So, you know, I don't want to spend too much time going through all of the features of Timebase, but, you know, the key points here, it's a real product using production over the past 15 years, you know, so we know it's reliable, we know it works. We've built APIs in a wide variety of languages, Java, C sharp, Python, and web APIs for use in web applications. This allows us to, you know, developers to download our product and immediately integrate it with whatever platforms they currently use. And finally, the data modeling, it allows you to define your classes, your data structures, such that we can store any form of time series data. The next few slides are going to be more technical in nature, and to be honest, I don't want to spend too much time on these for two reasons. The first is that all of this and a lot more is explained in detail at our website, timebase.info. But more importantly, I want to really try to focus on showing you how all this stuff works rather than just telling you. But, you know, the key takeaway here is how data goes into our platform and how it goes out. So, you see that we can take in a wide variety of different data feeds, you know, customer data. And on the right-hand side, you see like a .NET client, Java client, and timebase administrator, for example. This is just to illustrate that we have a wide variety of technical capabilities built into timebase to allow you to process the data in whatever way you want. You know, this kind of recaps a lot of what we've talked about already. You know, we provide a wide variety of APIs. And I want to draw some special attention to the right-hand side here, the bullet points there. You know, in a few minutes I'm going to show you a demo of this running on my laptop with the data connectors using Docker images. So, you know, commodity hardware, no need for, you know, big data centers or anything like that to run a simple instance of timebase. This slide outlines how data is stored in timebase. You know, so we've got our traditional databases tables. We have streams. A stream consists of many messages. And each message is defined by a schema. You can define that schema. We have, you know, a few standard ones built in for L1 messages, L2 messages, market data, you know, like that. But you define the schema and I'll show you exactly how this looks. But the point is it's designed to handle any type of time series data that you want. You can define what it's supposed to look like and write a connector to publish that data into timebase. We also have a query language. It's called QQL, quant query language, and it's optimized for time series data. So it might not be as robust as, you know, some SQL-like query languages, but it allows you to perform rapid calculations over a set of time series data. And I'll show you how that all looks in a few minutes as well. So getting data into timebase. For that, we use data connectors. You know, we've built over 100 steltics. But now that we've put this in the open source community, we hope to see a lot more connectors being built for a wide variety of use cases. Today we're going to be focusing on our crypto connectors. But it really, you know, I hope that I'm able to illustrate that it's really designed to be able to take in any data that you want. These data connectors can be written in a variety of different languages. And the aggregator is used to manage this set of data connectors and ensure that the right data goes into the right streams. This slide talks about some of the performance metrics. You know, these were taken a few years ago. So they might be a little bit out of date. But the main topic so I want to highlight are that the order of magnitude, you know, messages are measured on the order of a million messages per second. And while the performance doesn't quite scale linearly, it does scale with the amount of hardware that you push at it. So 1.8 million messages per second on one thread, or 5.5 million messages per second with four threads. And also, you know, I want to highlight that latency. For these, for time based streams, it's measured in the order of microseconds. So we expect sub 100 microsecond latencies for the messages that we process. You know, as I said, this system was originally built to handle high frequency trading use cases. So, you know, we needed to be able to back test and process in real time millions of messages per second. That's why we built this. And that's why you see the performance metrics that you do. So just to recap what we've spent the past few minutes talking about, time based single API for historical and real time contexts. This is different than, you know, most traditional databases, which of course allow you to dump hundreds of millions of messages into a database and perform historical analysis on them. We wanted to make sure that you can rapidly transition from that to real time use cases. And our polymorphic class support, our message schemas allow you to handle any type of business logic that you need. So, you know, in addition to standard L1, L2 messages, we can also support pretty much anything with a timestamp that you throw at it. So, now that we understand what time base is and what it does, let's talk a little bit about the history of time base and what we're all doing here. And that's to talk about how it can fit into the open source landscape. So, you know, it's been a foundational piece of our commercial software for over a decade. But over the past three years, we've really pushed to make it a standalone product. And that started with this dockerization, with making it available to run on cloud platforms. So, you know, long gone are the days where people want you to deploy on prem. Most of our clients now run in the cloud. So, Kubernetes plus docker allows us to deploy on, you know, GCP, Azure, whatever, AWS. Last year, we finally released time base to the open source community with the help of Finos to as time based community edition. And, you know, we really hope that this effort, as well as, you know, releasing the data connectors, open source data connectors, we really hope that this leads to an additional adoption of time base as a viable time series data warehouse. People use it. And, you know, we start facing new challenges and improving the software. We know that we can do financial data really, really well. We don't know what we don't know. And that's kind of our goal here to see how we fare in the IoT landscape or other applications. So, that's why we spent all this time and energy to publish it to the open source community. Again, you know, just want to highlight that I'm about to be running all of this on my Windows 10 laptop using Docker compose, using Docker images. You don't need anything fancy. You can just run it. And finally, these are a few different links that you can look up for reference. Everything that I'm going to be showing in a couple minutes can be just downloaded from GitHub. And, you know, you can start running it in minutes. So, yeah, that's pretty much it for the slides. Now let's get to the fun part. I'm going to start by just launching the software and then I'm going to pause for a minute for questions, you know, because as I mentioned, Timebase does handle both, you know, it processes real-time data and handles historical data. I want to give it a couple minutes to, you know, to populate some data so we can look at some of the stuff that we've built. So, I guess, does anyone have any questions about what we've talked about so far? Yes. They are not, no, they're part of our commercial product offering. So, yeah, we have, you know, a lot of different products. Some math libraries are open source, but really, Timebase is what we're focusing on with the open source community right now. Great question. So, right now, that's actually take a look. We're going to be looking at our at our crypto connectors at Timebase Community Edition plus crypto connectors. That's a little too small to be zoom in. And I'm going to show basically how we aggregate data from a wide variety of different venues. Our open source connectors that we have published right now will show Coinbase, Kraken, Bitmax, a couple others. I believe we have 15 or 16 connectors in open source right now. So, I'm showing you basically the configuration for our crypto connectors. That's a good segue to basically talk about what files you get when you download the repos. So, here I've got the three repos that I linked in resources, Timebase tutorial, Grafana plugin, and crypto connectors. These are the only three folders that I'm going to be referencing. So, everything I'm about to show is all freely downloadable and you can get started with it immediately. The Docker compose file that you get when you clone our repo, to those of you familiar with Docker, basically it's, you know, the collection of different images that we publish, the ones that I'm going to be showing today, the core Timebase server, the Timebase Web administrator, the crypto connectors repo, the configuration of which I just showed, Grafana, and a Jupyter Hub demo as well. The purpose of the Grafana and Jupyter demos is to highlight how quickly and easily you can integrate Timebase into, you know, open source projects. Our APIs make that a trivial process. So, yeah, back to the connectors. Now, let's just pick one to talk about. The Coinbase connector is going to write everything into a stream called Coinbase. We're going to indicate that we want to grab 20 levels of the book. We're going to specify the URL, tell it what type of messages to capture, and here we see a pretty interesting capability, and that's our mapping. So, you know, as we've learned, different crypto venues have completely different symbologies. You know, Kraken, BTC USD, Bitcoin USD might be here at Kraken, it's XBT slash USD. At other venues it might be BTC dash USD with Timebase and with the aggregator we have a method to basically unify all these streams and publish them using one unified symbol. That's how you define it in our connectors example. Now that I've given it a couple of minutes, I should have enough info to really start showing the nitty gritty. So, Timebase.info, this is just our documentation site. It covers our enterprise edition as well as our community edition. We talked a little bit about the architecture, the data structures, everything you need to know to get started using Timebase. If I didn't explain it, it's going to be here on our website. So, I highly recommend you check it out. But, yeah, let's get started. So, our Timebase admin tool, get it right out of the box with our open source technology. On the left-hand side, you see all of the data streams that we define using our connectors configuration. If we look at any stream schema here, for example, for Coinbase, we see a little bit of what I was talking about earlier about how we define complex data structures. So, we basically have a unified schema. All messages come in as package headers and then we define a wide variety of different types of messages, L2 entries, book resets, all sorts of different fields that we have defined for our data connectors. This allows you to basically take in market data from anywhere, normalize it, process it, and show this, you know, process this data basically. So, let's take a look at our BTC USD stream, for example. And actually, let me click on monitor mode so I can show you how this data comes in in real time. You know, millisecond timestamps every 400 or so milliseconds, we see a new message come in. Each message looks a little bit like this. It'll show you, you know, this is an update to basically show you the most recent, let's see actually, let me find a better example. Find a, let me find an L2 entry update. Here we go. So, this message basically says that now, you know, in the 19th level of the book, we have a new ask with this price and this size. We aggregate all these messages and publish them out into the stream. And you can see all of them. Let's just take a look at our chart for BTC USD and I'll talk a little bit about how this relates to our moving window concept. So, and let me just say for the last, oops, sorry, the last five minutes. So, this is the data we have collected over the last five minutes for Coinbase, for Bitcoin tether. We see each discrete message in the book and with our moving window concept, you can zoom in to any period of time and select the time range to view it discreetly. For some reason, no, let's do this another way. In addition to this chart, we also can display this data in the form of an order book. So, if you've, let's see, Coinbase and let me actually add, let me add Coinbase and let me add Kraken and I'll show you guys how this looks side by side. So, right now, this is the real time price of Bitcoin tether coming in from Coinbase and from Kraken. So, you know, all those tens of thousands of messages that come in every, you know, over a time interval, we process it and we show you the order book as it is in real time. And, you know, you can add, as I mentioned, Timebase can process millions of messages per second, so you can aggregate from however many venues you want. Finally, the last thing I want to show you about the web admin is our query language. So, if I select any of these streams and hit query, I'm brought to this query engine and here's an example of a query just to get you me the BBO on both sides of the book. So, I can either run this on the historical data set or I can run it in live mode, which should update in real time. So, you can see that this query, you know, works over the historical data set, but it also can update in real time to show you the bids and asks as they change over a period of time. So, that's the Timebase web admin. If you have any questions, please let me know. Otherwise, we'll move on to our integrations with Grafana and Jupyter Hub. No questions? All right. Let's go to our Grafana integration. So, as I said, the reason that we built these integrations, these are just examples of how you can take Timebase data from the web admin and use it in your own, use it in conjunction with or build your own web data visualization tools or analysis tools, whatever you want. This is all built on top of our EPS. So, we built a dashboard. Let's just select stream we know has good data. Let me do Coinbase. Let me do BTC tether. And again, with the moving window concept, right now we've got the last hour because I've only been running it for a few minutes. It might look a little strange. So, let me just select the last five minutes. Let me tell it to update every five seconds. So, here we use Grafana to again calculate the current bid, current ask, and various little indicators, Bollinger Bands, average price. We use Grafana's tools to design these. I'm not quite sure why the bars are not displaying as I normally expect them to, but you can see that they still do relate to the current bid and ask. And finally, you can see the frequency of trades that have occurred over this time period. Let's see if maybe Kraken has better data. Well, either way, I guess that's a little bit better, I guess. But the point is Grafana's APIs can be used to work with this. So, yeah, that just shows one quick example. Another just really quick example of our APIs will work with Jupyter Notebook. This is an example of our Python APIs. Python APIs used with Jupyter's visualization tools. It uses our Python APIs and can be used to construct order books or whatever visualization tools you have. So, that's all the time I have for now, but please don't hesitate to take a look at the resources I shared in the presentation and reach out to me or anyone else from the real-time computing lab team if you have any further questions. Thank you very much.