{ "cells": [ { "cell_type": "markdown", "id": "4a33fb14", "metadata": {}, "source": [ "# Time-Based Joins" ] }, { "cell_type": "markdown", "id": "5eaac7ad-b507-48bf-aff2-7ff5d812e147", "metadata": {}, "source": [ "Time series analysis often involves looking up information from other time series for relevant time ranges. OneTick has built-in functions for this." ] }, { "cell_type": "markdown", "id": "6f00e839-f381-49b2-9249-c1f36b36c12c", "metadata": {}, "source": [ "# `join_by_time`: Enhancing a time series with information from other time series at the time of each tick" ] }, { "cell_type": "markdown", "id": "810b313d-8033-46ee-aac3-15c61faf6635", "metadata": {}, "source": [ "Below we'll enhance the trades with the prevailing quote (i.e., best bid and ask) at the time of each trade. We'll first look just at trades, then just at quotes, and finally we'll join the two." ] }, { "cell_type": "markdown", "id": "9bed10d4-dcd8-414d-b618-d600807f39af", "metadata": {}, "source": [ "Let's examine the trades first." ] }, { "cell_type": "code", "execution_count": 2, "id": "7872865c-768c-4a7d-b30e-6887d0e7b1cf", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | Time | \n", "PRICE | \n", "SIZE | \n", "
---|---|---|---|
0 | \n", "2023-03-29 10:00:00.005852928 | \n", "399.8500 | \n", "100 | \n", "
1 | \n", "2023-03-29 10:00:00.005852928 | \n", "399.8500 | \n", "100 | \n", "
2 | \n", "2023-03-29 10:00:00.005856000 | \n", "399.8500 | \n", "100 | \n", "
3 | \n", "2023-03-29 10:00:00.006580736 | \n", "399.8500 | \n", "1 | \n", "
4 | \n", "2023-03-29 10:00:00.012014592 | \n", "399.8500 | \n", "1 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "
2136 | \n", "2023-03-29 10:00:59.285156096 | \n", "399.8800 | \n", "100 | \n", "
2137 | \n", "2023-03-29 10:00:59.687216896 | \n", "399.8900 | \n", "1 | \n", "
2138 | \n", "2023-03-29 10:00:59.911493888 | \n", "399.8899 | \n", "100 | \n", "
2139 | \n", "2023-03-29 10:00:59.974551040 | \n", "399.8701 | \n", "100 | \n", "
2140 | \n", "2023-03-29 10:00:59.998262528 | \n", "399.8900 | \n", "1 | \n", "
2141 rows × 3 columns
\n", "\n", " | Time | \n", "BID_PRICE | \n", "ASK_PRICE | \n", "
---|---|---|---|
0 | \n", "2023-03-29 10:00:00.005847040 | \n", "399.85 | \n", "399.86 | \n", "
1 | \n", "2023-03-29 10:00:00.005907200 | \n", "399.85 | \n", "399.86 | \n", "
2 | \n", "2023-03-29 10:00:00.005957376 | \n", "399.85 | \n", "399.86 | \n", "
3 | \n", "2023-03-29 10:00:00.005992448 | \n", "399.85 | \n", "399.86 | \n", "
4 | \n", "2023-03-29 10:00:00.006007296 | \n", "399.85 | \n", "399.86 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "
26409 | \n", "2023-03-29 10:00:59.998479872 | \n", "399.88 | \n", "399.89 | \n", "
26410 | \n", "2023-03-29 10:00:59.998615296 | \n", "399.88 | \n", "399.89 | \n", "
26411 | \n", "2023-03-29 10:00:59.998635264 | \n", "399.88 | \n", "399.89 | \n", "
26412 | \n", "2023-03-29 10:00:59.999427072 | \n", "399.88 | \n", "399.89 | \n", "
26413 | \n", "2023-03-29 10:00:59.999838208 | \n", "399.88 | \n", "399.89 | \n", "
26414 rows × 3 columns
\n", "\n", " | Time | \n", "PRICE | \n", "SIZE | \n", "BID_PRICE | \n", "ASK_PRICE | \n", "
---|---|---|---|---|---|
0 | \n", "2023-03-29 10:00:00.005852928 | \n", "399.8500 | \n", "100 | \n", "399.85 | \n", "399.86 | \n", "
1 | \n", "2023-03-29 10:00:00.005852928 | \n", "399.8500 | \n", "100 | \n", "399.85 | \n", "399.86 | \n", "
2 | \n", "2023-03-29 10:00:00.005856000 | \n", "399.8500 | \n", "100 | \n", "399.85 | \n", "399.86 | \n", "
3 | \n", "2023-03-29 10:00:00.006580736 | \n", "399.8500 | \n", "1 | \n", "399.84 | \n", "399.85 | \n", "
4 | \n", "2023-03-29 10:00:00.012014592 | \n", "399.8500 | \n", "1 | \n", "399.85 | \n", "399.87 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
2136 | \n", "2023-03-29 10:00:59.285156096 | \n", "399.8800 | \n", "100 | \n", "399.88 | \n", "399.89 | \n", "
2137 | \n", "2023-03-29 10:00:59.687216896 | \n", "399.8900 | \n", "1 | \n", "399.87 | \n", "399.89 | \n", "
2138 | \n", "2023-03-29 10:00:59.911493888 | \n", "399.8899 | \n", "100 | \n", "399.87 | \n", "399.89 | \n", "
2139 | \n", "2023-03-29 10:00:59.974551040 | \n", "399.8701 | \n", "100 | \n", "399.87 | \n", "399.89 | \n", "
2140 | \n", "2023-03-29 10:00:59.998262528 | \n", "399.8900 | \n", "1 | \n", "399.88 | \n", "399.89 | \n", "
2141 rows × 5 columns
\n", "\n", " | Time | \n", "PRICE | \n", "SIZE | \n", "BID_PRICE | \n", "ASK_PRICE | \n", "quote_time | \n", "
---|---|---|---|---|---|---|
0 | \n", "2023-03-29 10:00:00.005852928 | \n", "399.8500 | \n", "100 | \n", "399.85 | \n", "399.86 | \n", "2023-03-29 10:00:00.005847040 | \n", "
1 | \n", "2023-03-29 10:00:00.005852928 | \n", "399.8500 | \n", "100 | \n", "399.85 | \n", "399.86 | \n", "2023-03-29 10:00:00.005847040 | \n", "
2 | \n", "2023-03-29 10:00:00.005856000 | \n", "399.8500 | \n", "100 | \n", "399.85 | \n", "399.86 | \n", "2023-03-29 10:00:00.005847040 | \n", "
3 | \n", "2023-03-29 10:00:00.006580736 | \n", "399.8500 | \n", "1 | \n", "399.84 | \n", "399.85 | \n", "2023-03-29 10:00:00.006548736 | \n", "
4 | \n", "2023-03-29 10:00:00.012014592 | \n", "399.8500 | \n", "1 | \n", "399.85 | \n", "399.87 | \n", "2023-03-29 10:00:00.011275008 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
2136 | \n", "2023-03-29 10:00:59.285156096 | \n", "399.8800 | \n", "100 | \n", "399.88 | \n", "399.89 | \n", "2023-03-29 10:00:59.285148672 | \n", "
2137 | \n", "2023-03-29 10:00:59.687216896 | \n", "399.8900 | \n", "1 | \n", "399.87 | \n", "399.89 | \n", "2023-03-29 10:00:59.686418176 | \n", "
2138 | \n", "2023-03-29 10:00:59.911493888 | \n", "399.8899 | \n", "100 | \n", "399.87 | \n", "399.89 | \n", "2023-03-29 10:00:59.879587072 | \n", "
2139 | \n", "2023-03-29 10:00:59.974551040 | \n", "399.8701 | \n", "100 | \n", "399.87 | \n", "399.89 | \n", "2023-03-29 10:00:59.933540352 | \n", "
2140 | \n", "2023-03-29 10:00:59.998262528 | \n", "399.8900 | \n", "1 | \n", "399.88 | \n", "399.89 | \n", "2023-03-29 10:00:59.998239232 | \n", "
2141 rows × 6 columns
\n", "\n", " | Time | \n", "PRICE | \n", "SIZE | \n", "BID_PRICE | \n", "ASK_PRICE | \n", "quote_time | \n", "
---|---|---|---|---|---|---|
0 | \n", "2023-03-29 10:00:00.734953984 | \n", "40.9500 | \n", "7 | \n", "NaN | \n", "NaN | \n", "1969-12-31 19:00:00.000000000 | \n", "
1 | \n", "2023-03-29 10:00:01.492248576 | \n", "40.9500 | \n", "100 | \n", "40.92 | \n", "40.95 | \n", "2023-03-29 10:00:01.158007296 | \n", "
2 | \n", "2023-03-29 10:00:03.348103936 | \n", "40.9500 | \n", "8 | \n", "40.92 | \n", "40.95 | \n", "2023-03-29 10:00:03.347166976 | \n", "
3 | \n", "2023-03-29 10:00:03.348121856 | \n", "40.9500 | \n", "391 | \n", "40.92 | \n", "40.95 | \n", "2023-03-29 10:00:03.348119296 | \n", "
4 | \n", "2023-03-29 10:00:03.348169984 | \n", "40.9500 | \n", "100 | \n", "40.92 | \n", "40.95 | \n", "2023-03-29 10:00:03.348169472 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
177 | \n", "2023-03-29 10:00:53.957339392 | \n", "41.0000 | \n", "61 | \n", "40.98 | \n", "41.00 | \n", "2023-03-29 10:00:53.957334528 | \n", "
178 | \n", "2023-03-29 10:00:55.377122560 | \n", "41.0100 | \n", "5 | \n", "40.98 | \n", "41.01 | \n", "2023-03-29 10:00:54.791796736 | \n", "
179 | \n", "2023-03-29 10:00:55.612973568 | \n", "40.9916 | \n", "1 | \n", "40.98 | \n", "41.01 | \n", "2023-03-29 10:00:54.791796736 | \n", "
180 | \n", "2023-03-29 10:00:57.381350656 | \n", "41.0000 | \n", "10 | \n", "40.99 | \n", "41.03 | \n", "2023-03-29 10:00:57.381330688 | \n", "
181 | \n", "2023-03-29 10:00:57.382493184 | \n", "41.0100 | \n", "100 | \n", "41.00 | \n", "41.03 | \n", "2023-03-29 10:00:57.381917184 | \n", "
182 rows × 6 columns
\n", "\n", " | Time | \n", "PRICE | \n", "SIZE | \n", "BID_PRICE | \n", "ASK_PRICE | \n", "quote_time | \n", "
---|---|---|---|---|---|---|
0 | \n", "2023-03-29 10:00:00.734953984 | \n", "40.9500 | \n", "7 | \n", "40.92 | \n", "40.95 | \n", "2023-03-29 10:00:00.000000000 | \n", "
1 | \n", "2023-03-29 10:00:01.492248576 | \n", "40.9500 | \n", "100 | \n", "40.92 | \n", "40.95 | \n", "2023-03-29 10:00:01.158007296 | \n", "
2 | \n", "2023-03-29 10:00:03.348103936 | \n", "40.9500 | \n", "8 | \n", "40.92 | \n", "40.95 | \n", "2023-03-29 10:00:03.347166976 | \n", "
3 | \n", "2023-03-29 10:00:03.348121856 | \n", "40.9500 | \n", "391 | \n", "40.92 | \n", "40.95 | \n", "2023-03-29 10:00:03.348119296 | \n", "
4 | \n", "2023-03-29 10:00:03.348169984 | \n", "40.9500 | \n", "100 | \n", "40.92 | \n", "40.95 | \n", "2023-03-29 10:00:03.348169472 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
177 | \n", "2023-03-29 10:00:53.957339392 | \n", "41.0000 | \n", "61 | \n", "40.98 | \n", "41.00 | \n", "2023-03-29 10:00:53.957334528 | \n", "
178 | \n", "2023-03-29 10:00:55.377122560 | \n", "41.0100 | \n", "5 | \n", "40.98 | \n", "41.01 | \n", "2023-03-29 10:00:54.791796736 | \n", "
179 | \n", "2023-03-29 10:00:55.612973568 | \n", "40.9916 | \n", "1 | \n", "40.98 | \n", "41.01 | \n", "2023-03-29 10:00:54.791796736 | \n", "
180 | \n", "2023-03-29 10:00:57.381350656 | \n", "41.0000 | \n", "10 | \n", "40.99 | \n", "41.03 | \n", "2023-03-29 10:00:57.381330688 | \n", "
181 | \n", "2023-03-29 10:00:57.382493184 | \n", "41.0100 | \n", "100 | \n", "41.00 | \n", "41.03 | \n", "2023-03-29 10:00:57.381917184 | \n", "
182 rows × 6 columns
\n", "\n", " | Time | \n", "PRICE | \n", "SIZE | \n", "ASK_PRICE_-1 | \n", "BID_PRICE_-1 | \n", "quote_time_-1 | \n", "ASK_PRICE_1 | \n", "BID_PRICE_1 | \n", "quote_time_1 | \n", "ASK_PRICE_5 | \n", "BID_PRICE_5 | \n", "quote_time_5 | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "2023-03-08 10:00:00.014762069 | \n", "181.4250 | \n", "300 | \n", "181.47 | \n", "181.41 | \n", "2023-03-08 09:59:59.002564435 | \n", "181.49 | \n", "181.48 | \n", "2023-03-08 10:00:01.000000000 | \n", "181.15 | \n", "181.04 | \n", "2023-03-08 10:00:05.012557243 | \n", "
1 | \n", "2023-03-08 10:00:00.014764168 | \n", "181.4400 | \n", "12 | \n", "181.47 | \n", "181.41 | \n", "2023-03-08 09:59:59.002564435 | \n", "181.49 | \n", "181.48 | \n", "2023-03-08 10:00:01.000000000 | \n", "181.15 | \n", "181.04 | \n", "2023-03-08 10:00:05.012557243 | \n", "
2 | \n", "2023-03-08 10:00:00.014767570 | \n", "181.4400 | \n", "200 | \n", "181.47 | \n", "181.41 | \n", "2023-03-08 09:59:59.002564435 | \n", "181.49 | \n", "181.48 | \n", "2023-03-08 10:00:01.000000000 | \n", "181.15 | \n", "181.04 | \n", "2023-03-08 10:00:05.012557243 | \n", "
3 | \n", "2023-03-08 10:00:00.014799259 | \n", "181.4500 | \n", "2 | \n", "181.47 | \n", "181.41 | \n", "2023-03-08 09:59:59.002564435 | \n", "181.49 | \n", "181.48 | \n", "2023-03-08 10:00:01.000000000 | \n", "181.15 | \n", "181.04 | \n", "2023-03-08 10:00:05.012557243 | \n", "
4 | \n", "2023-03-08 10:00:00.015374686 | \n", "181.4400 | \n", "300 | \n", "181.47 | \n", "181.41 | \n", "2023-03-08 09:59:59.002564435 | \n", "181.49 | \n", "181.48 | \n", "2023-03-08 10:00:01.000000000 | \n", "181.15 | \n", "181.04 | \n", "2023-03-08 10:00:05.012557243 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
705 | \n", "2023-03-09 10:00:00.956041264 | \n", "183.5899 | \n", "500 | \n", "183.46 | \n", "183.43 | \n", "2023-03-09 09:59:59.911620614 | \n", "183.59 | \n", "183.54 | \n", "2023-03-09 10:00:01.945769144 | \n", "183.65 | \n", "183.57 | \n", "2023-03-09 10:00:05.954673686 | \n", "
706 | \n", "2023-03-09 10:00:00.967881686 | \n", "183.5800 | \n", "25 | \n", "183.46 | \n", "183.43 | \n", "2023-03-09 09:59:59.963372673 | \n", "183.59 | \n", "183.54 | \n", "2023-03-09 10:00:01.963256371 | \n", "183.66 | \n", "183.57 | \n", "2023-03-09 10:00:05.967652794 | \n", "
707 | \n", "2023-03-09 10:00:00.978963708 | \n", "183.4718 | \n", "136 | \n", "183.46 | \n", "183.42 | \n", "2023-03-09 09:59:59.971349853 | \n", "183.59 | \n", "183.54 | \n", "2023-03-09 10:00:01.963256371 | \n", "183.66 | \n", "183.57 | \n", "2023-03-09 10:00:05.967652794 | \n", "
708 | \n", "2023-03-09 10:00:00.983358396 | \n", "183.5500 | \n", "20 | \n", "183.46 | \n", "183.41 | \n", "2023-03-09 09:59:59.983288366 | \n", "183.59 | \n", "183.54 | \n", "2023-03-09 10:00:01.963256371 | \n", "183.66 | \n", "183.57 | \n", "2023-03-09 10:00:05.967652794 | \n", "
709 | \n", "2023-03-09 10:00:00.990945922 | \n", "183.5650 | \n", "200 | \n", "183.44 | \n", "183.41 | \n", "2023-03-09 09:59:59.988781014 | \n", "183.59 | \n", "183.54 | \n", "2023-03-09 10:00:01.963256371 | \n", "183.66 | \n", "183.57 | \n", "2023-03-09 10:00:05.967652794 | \n", "
710 rows × 12 columns
\n", "\n", " | Time | \n", "market_vwap | \n", "
---|---|---|
0 | \n", "2023-04-10 10:27:00 | \n", "160.477922 | \n", "
\n", " | Time | \n", "arrival | \n", "exit | \n", "sym | \n", "
---|---|---|---|---|
0 | \n", "2003-12-01 00:00:00.000 | \n", "2023-04-10 10:25:59 | \n", "2023-04-10 10:26:07 | \n", "AAPL | \n", "
1 | \n", "2003-12-01 00:00:00.001 | \n", "2023-04-10 10:26:09 | \n", "2023-04-10 10:27:48 | \n", "MSFT | \n", "
\n", " | Time | \n", "market_vwap | \n", "arrival | \n", "exit | \n", "sym | \n", "
---|---|---|---|---|---|
0 | \n", "2022-04-01 00:00:00.000 | \n", "160.548890 | \n", "2023-04-10 10:25:59 | \n", "2023-04-10 10:26:07 | \n", "AAPL | \n", "
1 | \n", "2022-04-01 00:00:00.001 | \n", "286.136779 | \n", "2023-04-10 10:26:09 | \n", "2023-04-10 10:27:48 | \n", "MSFT | \n", "