{
"cells": [
{
"cell_type": "markdown",
"id": "aef8b826",
"metadata": {},
"source": [
"# Aggregations"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "965c2ea7-9035-430e-baf5-23153f3b055a",
"metadata": {},
"outputs": [],
"source": [
"import onetick.py as otp"
]
},
{
"cell_type": "markdown",
"id": "157bf535-0415-431d-a9d7-0375319e6bf1",
"metadata": {},
"source": [
"Let's start with an unaggregated time series."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "91d63514-8e66-4680-be77-252937bdd85d",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Time | \n",
" PRICE | \n",
" SIZE | \n",
" COND | \n",
" EXCHANGE | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2023-03-29 09:30:00.000877568 | \n",
" 399.920 | \n",
" 400 | \n",
" T | \n",
" P | \n",
"
\n",
" \n",
" 1 | \n",
" 2023-03-29 09:30:00.001151232 | \n",
" 399.920 | \n",
" 1000 | \n",
" T | \n",
" T | \n",
"
\n",
" \n",
" 2 | \n",
" 2023-03-29 09:30:00.001154304 | \n",
" 399.920 | \n",
" 1000 | \n",
" T | \n",
" T | \n",
"
\n",
" \n",
" 3 | \n",
" 2023-03-29 09:30:00.001921280 | \n",
" 399.930 | \n",
" 657 | \n",
" T | \n",
" T | \n",
"
\n",
" \n",
" 4 | \n",
" 2023-03-29 09:30:00.010831360 | \n",
" 399.925 | \n",
" 100 | \n",
" F | \n",
" Z | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 537609 | \n",
" 2023-03-29 15:59:59.994555136 | \n",
" 401.350 | \n",
" 643 | \n",
" F | \n",
" P | \n",
"
\n",
" \n",
" 537610 | \n",
" 2023-03-29 15:59:59.995045376 | \n",
" 401.350 | \n",
" 900 | \n",
" F | \n",
" P | \n",
"
\n",
" \n",
" 537611 | \n",
" 2023-03-29 15:59:59.997313024 | \n",
" 401.340 | \n",
" 100 | \n",
" | \n",
" Z | \n",
"
\n",
" \n",
" 537612 | \n",
" 2023-03-29 15:59:59.997354752 | \n",
" 401.340 | \n",
" 498 | \n",
" | \n",
" N | \n",
"
\n",
" \n",
" 537613 | \n",
" 2023-03-29 15:59:59.997406208 | \n",
" 401.340 | \n",
" 200 | \n",
" | \n",
" T | \n",
"
\n",
" \n",
"
\n",
"
537614 rows × 5 columns
\n",
"
"
],
"text/plain": [
" Time PRICE SIZE COND EXCHANGE\n",
"0 2023-03-29 09:30:00.000877568 399.920 400 T P\n",
"1 2023-03-29 09:30:00.001151232 399.920 1000 T T\n",
"2 2023-03-29 09:30:00.001154304 399.920 1000 T T\n",
"3 2023-03-29 09:30:00.001921280 399.930 657 T T\n",
"4 2023-03-29 09:30:00.010831360 399.925 100 F Z\n",
"... ... ... ... ... ...\n",
"537609 2023-03-29 15:59:59.994555136 401.350 643 F P\n",
"537610 2023-03-29 15:59:59.995045376 401.350 900 F P\n",
"537611 2023-03-29 15:59:59.997313024 401.340 100 Z\n",
"537612 2023-03-29 15:59:59.997354752 401.340 498 N\n",
"537613 2023-03-29 15:59:59.997406208 401.340 200 T\n",
"\n",
"[537614 rows x 5 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"otp.config['tz'] = 'EST5EDT'\n",
"q = otp.DataSource('NYSE_TAQ', tick_type='TRD')\n",
"q = q[['PRICE','SIZE','COND','EXCHANGE']]\n",
"otp.run(q, start=otp.dt(2023,3,29,9,30), end=otp.dt(2023,3,29,16), symbols=['SPY'])"
]
},
{
"cell_type": "markdown",
"id": "56dbfa00-45b9-408c-bfc0-3ea78f601498",
"metadata": {},
"source": [
"Let's make a note of the total number of trades.\n",
"\n",
"We can aggregate over the entire queried interval."
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "34a94316-be74-4548-9f2f-0c7ea6781289",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Time | \n",
" volume | \n",
" vwap | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2023-03-29 16:00:00 | \n",
" 68233701 | \n",
" 399.760148 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Time volume vwap\n",
"0 2023-03-29 16:00:00 68233701 399.760148"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q = otp.DataSource('NYSE_TAQ', tick_type='TRD')\n",
"q = q[['PRICE','SIZE','COND','EXCHANGE']]\n",
"q = q.agg({\n",
" 'volume': otp.agg.sum('SIZE'),\n",
" 'vwap': otp.agg.vwap('PRICE','SIZE')\n",
" })\n",
"otp.run(q, start=otp.dt(2023,3,29,9,30), end=otp.dt(2023,3,29,16), symbols=['SPY'])"
]
},
{
"cell_type": "markdown",
"id": "53f66ca3-1029-49d3-97c0-c1f4dd3ad842",
"metadata": {},
"source": [
"Or over fixed buckets (aka bars or windows)."
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "2d408201-90be-44e1-b8c5-0f4dc371e799",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Time | \n",
" volume | \n",
" vwap | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2023-03-29 10:00:00 | \n",
" 11346391 | \n",
" 398.805607 | \n",
"
\n",
" \n",
" 1 | \n",
" 2023-03-29 10:30:00 | \n",
" 5344474 | \n",
" 399.544761 | \n",
"
\n",
" \n",
" 2 | \n",
" 2023-03-29 11:00:00 | \n",
" 5139562 | \n",
" 399.146746 | \n",
"
\n",
" \n",
" 3 | \n",
" 2023-03-29 11:30:00 | \n",
" 2827218 | \n",
" 399.166233 | \n",
"
\n",
" \n",
" 4 | \n",
" 2023-03-29 12:00:00 | \n",
" 3198533 | \n",
" 399.313014 | \n",
"
\n",
" \n",
" 5 | \n",
" 2023-03-29 12:30:00 | \n",
" 4026223 | \n",
" 399.077673 | \n",
"
\n",
" \n",
" 6 | \n",
" 2023-03-29 13:00:00 | \n",
" 2245602 | \n",
" 399.872538 | \n",
"
\n",
" \n",
" 7 | \n",
" 2023-03-29 13:30:00 | \n",
" 2558837 | \n",
" 400.080857 | \n",
"
\n",
" \n",
" 8 | \n",
" 2023-03-29 14:00:00 | \n",
" 3234347 | \n",
" 399.745620 | \n",
"
\n",
" \n",
" 9 | \n",
" 2023-03-29 14:30:00 | \n",
" 3290063 | \n",
" 399.376632 | \n",
"
\n",
" \n",
" 10 | \n",
" 2023-03-29 15:00:00 | \n",
" 3301416 | \n",
" 400.263786 | \n",
"
\n",
" \n",
" 11 | \n",
" 2023-03-29 15:30:00 | \n",
" 7402762 | \n",
" 400.131562 | \n",
"
\n",
" \n",
" 12 | \n",
" 2023-03-29 16:00:00 | \n",
" 14318273 | \n",
" 400.934522 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Time volume vwap\n",
"0 2023-03-29 10:00:00 11346391 398.805607\n",
"1 2023-03-29 10:30:00 5344474 399.544761\n",
"2 2023-03-29 11:00:00 5139562 399.146746\n",
"3 2023-03-29 11:30:00 2827218 399.166233\n",
"4 2023-03-29 12:00:00 3198533 399.313014\n",
"5 2023-03-29 12:30:00 4026223 399.077673\n",
"6 2023-03-29 13:00:00 2245602 399.872538\n",
"7 2023-03-29 13:30:00 2558837 400.080857\n",
"8 2023-03-29 14:00:00 3234347 399.745620\n",
"9 2023-03-29 14:30:00 3290063 399.376632\n",
"10 2023-03-29 15:00:00 3301416 400.263786\n",
"11 2023-03-29 15:30:00 7402762 400.131562\n",
"12 2023-03-29 16:00:00 14318273 400.934522"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q = otp.DataSource('NYSE_TAQ', tick_type='TRD')\n",
"q = q[['PRICE','SIZE','COND','EXCHANGE']]\n",
"q = q.agg({\n",
" 'volume': otp.agg.sum('SIZE'),\n",
" 'vwap': otp.agg.vwap('PRICE','SIZE')\n",
" }, bucket_interval=1800)\n",
"otp.run(q, start=otp.dt(2023,3,29,9,30), end=otp.dt(2023,3,29,16), symbols=['SPY'])"
]
},
{
"cell_type": "markdown",
"id": "038be2be-08c2-432f-88c0-a021d3e6a737",
"metadata": {},
"source": [
"Or over a sliding window."
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "60d494a6-58ba-4b0a-9f5e-f6f01ecb9987",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Time | \n",
" volume | \n",
" vwap | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2023-03-29 09:30:00.000877568 | \n",
" 400 | \n",
" 399.920000 | \n",
"
\n",
" \n",
" 1 | \n",
" 2023-03-29 09:30:00.001151232 | \n",
" 1400 | \n",
" 399.920000 | \n",
"
\n",
" \n",
" 2 | \n",
" 2023-03-29 09:30:00.001154304 | \n",
" 2400 | \n",
" 399.920000 | \n",
"
\n",
" \n",
" 3 | \n",
" 2023-03-29 09:30:00.001921280 | \n",
" 3057 | \n",
" 399.922149 | \n",
"
\n",
" \n",
" 4 | \n",
" 2023-03-29 09:30:00.010831360 | \n",
" 3157 | \n",
" 399.922239 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 946090 | \n",
" 2023-03-29 15:59:59.994555136 | \n",
" 14316575 | \n",
" 400.934474 | \n",
"
\n",
" \n",
" 946091 | \n",
" 2023-03-29 15:59:59.995045376 | \n",
" 14317475 | \n",
" 400.934500 | \n",
"
\n",
" \n",
" 946092 | \n",
" 2023-03-29 15:59:59.997313024 | \n",
" 14317575 | \n",
" 400.934502 | \n",
"
\n",
" \n",
" 946093 | \n",
" 2023-03-29 15:59:59.997354752 | \n",
" 14318073 | \n",
" 400.934517 | \n",
"
\n",
" \n",
" 946094 | \n",
" 2023-03-29 15:59:59.997406208 | \n",
" 14318273 | \n",
" 400.934522 | \n",
"
\n",
" \n",
"
\n",
"
946095 rows × 3 columns
\n",
"
"
],
"text/plain": [
" Time volume vwap\n",
"0 2023-03-29 09:30:00.000877568 400 399.920000\n",
"1 2023-03-29 09:30:00.001151232 1400 399.920000\n",
"2 2023-03-29 09:30:00.001154304 2400 399.920000\n",
"3 2023-03-29 09:30:00.001921280 3057 399.922149\n",
"4 2023-03-29 09:30:00.010831360 3157 399.922239\n",
"... ... ... ...\n",
"946090 2023-03-29 15:59:59.994555136 14316575 400.934474\n",
"946091 2023-03-29 15:59:59.995045376 14317475 400.934500\n",
"946092 2023-03-29 15:59:59.997313024 14317575 400.934502\n",
"946093 2023-03-29 15:59:59.997354752 14318073 400.934517\n",
"946094 2023-03-29 15:59:59.997406208 14318273 400.934522\n",
"\n",
"[946095 rows x 3 columns]"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q = otp.DataSource('NYSE_TAQ', tick_type='TRD')\n",
"q = q[['PRICE','SIZE','COND','EXCHANGE']]\n",
"q = q.agg({\n",
" 'volume': otp.agg.sum('SIZE'),\n",
" 'vwap': otp.agg.vwap('PRICE','SIZE')\n",
" }, bucket_interval=1800, running=True)\n",
"otp.run(q, start=otp.dt(2023,3,29,9,30), end=otp.dt(2023,3,29,16), symbols=['SPY'])"
]
},
{
"cell_type": "markdown",
"id": "66ad92c4-2944-43c0-b950-7f6888f74867",
"metadata": {},
"source": [
"Note that the number of output ticks is more than the number of trades. This is due to the output tick being created not only when each input tick enters the window but also when it drops out."
]
},
{
"cell_type": "markdown",
"id": "8d28f734-8ffe-4525-9261-6f000944d27f",
"metadata": {},
"source": [
"We can display all fields of the incoming tick along with the current values of the sliding window metrics."
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "fad649b3-41c1-4dbb-b130-12f47eac85e1",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Time | \n",
" PRICE | \n",
" SIZE | \n",
" COND | \n",
" EXCHANGE | \n",
" volume | \n",
" vwap | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2023-03-29 09:30:00.000877568 | \n",
" 399.920 | \n",
" 400 | \n",
" T | \n",
" P | \n",
" 400 | \n",
" 399.920000 | \n",
"
\n",
" \n",
" 1 | \n",
" 2023-03-29 09:30:00.001151232 | \n",
" 399.920 | \n",
" 1000 | \n",
" T | \n",
" T | \n",
" 1400 | \n",
" 399.920000 | \n",
"
\n",
" \n",
" 2 | \n",
" 2023-03-29 09:30:00.001154304 | \n",
" 399.920 | \n",
" 1000 | \n",
" T | \n",
" T | \n",
" 2400 | \n",
" 399.920000 | \n",
"
\n",
" \n",
" 3 | \n",
" 2023-03-29 09:30:00.001921280 | \n",
" 399.930 | \n",
" 657 | \n",
" T | \n",
" T | \n",
" 3057 | \n",
" 399.922149 | \n",
"
\n",
" \n",
" 4 | \n",
" 2023-03-29 09:30:00.010831360 | \n",
" 399.925 | \n",
" 100 | \n",
" F | \n",
" Z | \n",
" 3157 | \n",
" 399.922239 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 537609 | \n",
" 2023-03-29 15:59:59.994555136 | \n",
" 401.350 | \n",
" 643 | \n",
" F | \n",
" P | \n",
" 14316575 | \n",
" 400.934474 | \n",
"
\n",
" \n",
" 537610 | \n",
" 2023-03-29 15:59:59.995045376 | \n",
" 401.350 | \n",
" 900 | \n",
" F | \n",
" P | \n",
" 14317475 | \n",
" 400.934500 | \n",
"
\n",
" \n",
" 537611 | \n",
" 2023-03-29 15:59:59.997313024 | \n",
" 401.340 | \n",
" 100 | \n",
" | \n",
" Z | \n",
" 14317575 | \n",
" 400.934502 | \n",
"
\n",
" \n",
" 537612 | \n",
" 2023-03-29 15:59:59.997354752 | \n",
" 401.340 | \n",
" 498 | \n",
" | \n",
" N | \n",
" 14318073 | \n",
" 400.934517 | \n",
"
\n",
" \n",
" 537613 | \n",
" 2023-03-29 15:59:59.997406208 | \n",
" 401.340 | \n",
" 200 | \n",
" | \n",
" T | \n",
" 14318273 | \n",
" 400.934522 | \n",
"
\n",
" \n",
"
\n",
"
537614 rows × 7 columns
\n",
"
"
],
"text/plain": [
" Time PRICE SIZE COND EXCHANGE volume vwap\n",
"0 2023-03-29 09:30:00.000877568 399.920 400 T P 400 399.920000\n",
"1 2023-03-29 09:30:00.001151232 399.920 1000 T T 1400 399.920000\n",
"2 2023-03-29 09:30:00.001154304 399.920 1000 T T 2400 399.920000\n",
"3 2023-03-29 09:30:00.001921280 399.930 657 T T 3057 399.922149\n",
"4 2023-03-29 09:30:00.010831360 399.925 100 F Z 3157 399.922239\n",
"... ... ... ... ... ... ... ...\n",
"537609 2023-03-29 15:59:59.994555136 401.350 643 F P 14316575 400.934474\n",
"537610 2023-03-29 15:59:59.995045376 401.350 900 F P 14317475 400.934500\n",
"537611 2023-03-29 15:59:59.997313024 401.340 100 Z 14317575 400.934502\n",
"537612 2023-03-29 15:59:59.997354752 401.340 498 N 14318073 400.934517\n",
"537613 2023-03-29 15:59:59.997406208 401.340 200 T 14318273 400.934522\n",
"\n",
"[537614 rows x 7 columns]"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q = otp.DataSource('NYSE_TAQ', tick_type='TRD')\n",
"q = q[['PRICE','SIZE','COND','EXCHANGE']]\n",
"q = q.agg({\n",
" 'volume': otp.agg.sum('SIZE'),\n",
" 'vwap': otp.agg.vwap('PRICE','SIZE')\n",
" }, bucket_interval=1800, running=True, all_fields=True)\n",
"otp.run(q, start=otp.dt(2023,3,29,9,30), end=otp.dt(2023,3,29,16), symbols=['SPY'])"
]
},
{
"cell_type": "markdown",
"id": "97d03ed4-cbf3-49e6-9989-8fee3b49b172",
"metadata": {},
"source": [
"In this case, we are back to the same number of ticks as the number trades as an output tick is only created on arrival of an input tick."
]
},
{
"cell_type": "markdown",
"id": "9e7454b1-deda-48dc-8a01-da63d48b4a5e",
"metadata": {},
"source": [
"All of the aggregation operations support grouping."
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "b37e62f1-ff2c-4913-b9d7-bde925bfface",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Time | \n",
" EXCHANGE | \n",
" volume | \n",
" vwap | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2023-03-29 16:00:00 | \n",
" A | \n",
" 253162 | \n",
" 400.322973 | \n",
"
\n",
" \n",
" 1 | \n",
" 2023-03-29 16:00:00 | \n",
" B | \n",
" 516793 | \n",
" 400.289029 | \n",
"
\n",
" \n",
" 2 | \n",
" 2023-03-29 16:00:00 | \n",
" C | \n",
" 154697 | \n",
" 400.230680 | \n",
"
\n",
" \n",
" 3 | \n",
" 2023-03-29 16:00:00 | \n",
" D | \n",
" 24495779 | \n",
" 398.999133 | \n",
"
\n",
" \n",
" 4 | \n",
" 2023-03-29 16:00:00 | \n",
" H | \n",
" 1104733 | \n",
" 400.336441 | \n",
"
\n",
" \n",
" 5 | \n",
" 2023-03-29 16:00:00 | \n",
" J | \n",
" 598534 | \n",
" 400.315377 | \n",
"
\n",
" \n",
" 6 | \n",
" 2023-03-29 16:00:00 | \n",
" K | \n",
" 3899343 | \n",
" 400.118436 | \n",
"
\n",
" \n",
" 7 | \n",
" 2023-03-29 16:00:00 | \n",
" L | \n",
" 1948 | \n",
" 401.266828 | \n",
"
\n",
" \n",
" 8 | \n",
" 2023-03-29 16:00:00 | \n",
" M | \n",
" 1268484 | \n",
" 400.170423 | \n",
"
\n",
" \n",
" 9 | \n",
" 2023-03-29 16:00:00 | \n",
" N | \n",
" 2010830 | \n",
" 400.202291 | \n",
"
\n",
" \n",
" 10 | \n",
" 2023-03-29 16:00:00 | \n",
" P | \n",
" 13043077 | \n",
" 400.191965 | \n",
"
\n",
" \n",
" 11 | \n",
" 2023-03-29 16:00:00 | \n",
" T | \n",
" 10210762 | \n",
" 400.208476 | \n",
"
\n",
" \n",
" 12 | \n",
" 2023-03-29 16:00:00 | \n",
" U | \n",
" 1780588 | \n",
" 400.185296 | \n",
"
\n",
" \n",
" 13 | \n",
" 2023-03-29 16:00:00 | \n",
" V | \n",
" 1495374 | \n",
" 400.174316 | \n",
"
\n",
" \n",
" 14 | \n",
" 2023-03-29 16:00:00 | \n",
" X | \n",
" 597341 | \n",
" 400.145003 | \n",
"
\n",
" \n",
" 15 | \n",
" 2023-03-29 16:00:00 | \n",
" Y | \n",
" 1680262 | \n",
" 400.025433 | \n",
"
\n",
" \n",
" 16 | \n",
" 2023-03-29 16:00:00 | \n",
" Z | \n",
" 5121994 | \n",
" 400.172607 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Time EXCHANGE volume vwap\n",
"0 2023-03-29 16:00:00 A 253162 400.322973\n",
"1 2023-03-29 16:00:00 B 516793 400.289029\n",
"2 2023-03-29 16:00:00 C 154697 400.230680\n",
"3 2023-03-29 16:00:00 D 24495779 398.999133\n",
"4 2023-03-29 16:00:00 H 1104733 400.336441\n",
"5 2023-03-29 16:00:00 J 598534 400.315377\n",
"6 2023-03-29 16:00:00 K 3899343 400.118436\n",
"7 2023-03-29 16:00:00 L 1948 401.266828\n",
"8 2023-03-29 16:00:00 M 1268484 400.170423\n",
"9 2023-03-29 16:00:00 N 2010830 400.202291\n",
"10 2023-03-29 16:00:00 P 13043077 400.191965\n",
"11 2023-03-29 16:00:00 T 10210762 400.208476\n",
"12 2023-03-29 16:00:00 U 1780588 400.185296\n",
"13 2023-03-29 16:00:00 V 1495374 400.174316\n",
"14 2023-03-29 16:00:00 X 597341 400.145003\n",
"15 2023-03-29 16:00:00 Y 1680262 400.025433\n",
"16 2023-03-29 16:00:00 Z 5121994 400.172607"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q = otp.DataSource('NYSE_TAQ', tick_type='TRD')\n",
"q = q[['PRICE','SIZE','COND','EXCHANGE']]\n",
"q = q.agg({\n",
" 'volume': otp.agg.sum('SIZE'),\n",
" 'vwap': otp.agg.vwap('PRICE','SIZE')\n",
" }, group_by=['EXCHANGE'])\n",
"otp.run(q, start=otp.dt(2023,3,29,9,30), end=otp.dt(2023,3,29,16), symbols=['SPY'])"
]
},
{
"cell_type": "markdown",
"id": "73244935-ad47-4eb4-b851-2892c5bf8fa5",
"metadata": {},
"source": [
"# Use case: Creating Bars"
]
},
{
"cell_type": "markdown",
"id": "ccafbd04-38c1-4b7a-b4cf-5cda4bbc521f",
"metadata": {},
"source": [
"The code below creates minute bars (`bucket_interval=60` seconds)."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "dfe9918c-3489-41b0-95dc-29d3f90cd222",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Time | \n",
" OPEN | \n",
" HIGH | \n",
" LOW | \n",
" CLOSE | \n",
" VOLUME | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2022-11-28 09:31:00 | \n",
" 399.09 | \n",
" 399.750 | \n",
" 399.000 | \n",
" 399.6500 | \n",
" 289791 | \n",
"
\n",
" \n",
" 1 | \n",
" 2022-11-28 09:32:00 | \n",
" 399.69 | \n",
" 400.000 | \n",
" 399.600 | \n",
" 399.8900 | \n",
" 295441 | \n",
"
\n",
" \n",
" 2 | \n",
" 2022-11-28 09:33:00 | \n",
" 399.89 | \n",
" 400.175 | \n",
" 399.840 | \n",
" 400.1750 | \n",
" 233032 | \n",
"
\n",
" \n",
" 3 | \n",
" 2022-11-28 09:34:00 | \n",
" 400.16 | \n",
" 400.380 | \n",
" 400.000 | \n",
" 400.1600 | \n",
" 208954 | \n",
"
\n",
" \n",
" 4 | \n",
" 2022-11-28 09:35:00 | \n",
" 400.13 | \n",
" 400.360 | \n",
" 400.120 | \n",
" 400.3493 | \n",
" 112015 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 1165 | \n",
" 2022-11-30 15:56:00 | \n",
" 406.68 | \n",
" 406.830 | \n",
" 406.460 | \n",
" 406.8100 | \n",
" 1311316 | \n",
"
\n",
" \n",
" 1166 | \n",
" 2022-11-30 15:57:00 | \n",
" 406.80 | \n",
" 406.830 | \n",
" 406.525 | \n",
" 406.6000 | \n",
" 1319798 | \n",
"
\n",
" \n",
" 1167 | \n",
" 2022-11-30 15:58:00 | \n",
" 406.60 | \n",
" 406.850 | \n",
" 406.550 | \n",
" 406.7300 | \n",
" 1691348 | \n",
"
\n",
" \n",
" 1168 | \n",
" 2022-11-30 15:59:00 | \n",
" 406.73 | \n",
" 406.950 | \n",
" 406.680 | \n",
" 406.7100 | \n",
" 2592503 | \n",
"
\n",
" \n",
" 1169 | \n",
" 2022-11-30 16:00:00 | \n",
" 406.71 | \n",
" 407.550 | \n",
" 406.680 | \n",
" 407.4700 | \n",
" 6700757 | \n",
"
\n",
" \n",
"
\n",
"
1170 rows × 6 columns
\n",
"
"
],
"text/plain": [
" Time OPEN HIGH LOW CLOSE VOLUME\n",
"0 2022-11-28 09:31:00 399.09 399.750 399.000 399.6500 289791\n",
"1 2022-11-28 09:32:00 399.69 400.000 399.600 399.8900 295441\n",
"2 2022-11-28 09:33:00 399.89 400.175 399.840 400.1750 233032\n",
"3 2022-11-28 09:34:00 400.16 400.380 400.000 400.1600 208954\n",
"4 2022-11-28 09:35:00 400.13 400.360 400.120 400.3493 112015\n",
"... ... ... ... ... ... ...\n",
"1165 2022-11-30 15:56:00 406.68 406.830 406.460 406.8100 1311316\n",
"1166 2022-11-30 15:57:00 406.80 406.830 406.525 406.6000 1319798\n",
"1167 2022-11-30 15:58:00 406.60 406.850 406.550 406.7300 1691348\n",
"1168 2022-11-30 15:59:00 406.73 406.950 406.680 406.7100 2592503\n",
"1169 2022-11-30 16:00:00 406.71 407.550 406.680 407.4700 6700757\n",
"\n",
"[1170 rows x 6 columns]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"trd = otp.DataSource('NYSE_TAQ', tick_type='TRD')\n",
"trd, _ = trd[trd['COND'].str.match('^[^O6TUHILNRWZ47QMBCGPV]*$')]\n",
"\n",
"bars = trd.agg({\n",
" 'OPEN': otp.agg.first('PRICE'),\n",
" 'HIGH': otp.agg.max('PRICE'),\n",
" 'LOW': otp.agg.min('PRICE'),\n",
" 'CLOSE': otp.agg.last('PRICE'),\n",
" 'VOLUME': otp.agg.sum('SIZE'),\n",
" },\n",
" bucket_interval=60)\n",
"\n",
"otp.run(bars, start=otp.dt(2022,11,28,9,30), end=otp.dt(2022,11,30,16), symbols=['SPY'], apply_times_daily=True)"
]
},
{
"cell_type": "markdown",
"id": "e7dd5a74-6980-47d6-bee3-4a0ea853bdc0",
"metadata": {},
"source": [
"Note that we have minute bars precomputed for your use."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "72af2724-dc83-4c7e-bb11-10ff224ac1b0",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Time | \n",
" FIRST | \n",
" HIGH | \n",
" LOW | \n",
" LAST | \n",
" VOLUME | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2022-11-28 09:31:00 | \n",
" 399.09 | \n",
" 399.750 | \n",
" 399.000 | \n",
" 399.6500 | \n",
" 289791 | \n",
"
\n",
" \n",
" 1 | \n",
" 2022-11-28 09:32:00 | \n",
" 399.69 | \n",
" 400.000 | \n",
" 399.600 | \n",
" 399.8900 | \n",
" 295441 | \n",
"
\n",
" \n",
" 2 | \n",
" 2022-11-28 09:33:00 | \n",
" 399.89 | \n",
" 400.175 | \n",
" 399.840 | \n",
" 400.1750 | \n",
" 233032 | \n",
"
\n",
" \n",
" 3 | \n",
" 2022-11-28 09:34:00 | \n",
" 400.16 | \n",
" 400.380 | \n",
" 400.000 | \n",
" 400.1600 | \n",
" 208954 | \n",
"
\n",
" \n",
" 4 | \n",
" 2022-11-28 09:35:00 | \n",
" 400.13 | \n",
" 400.360 | \n",
" 400.120 | \n",
" 400.3493 | \n",
" 112015 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 1165 | \n",
" 2022-11-30 15:56:00 | \n",
" 406.68 | \n",
" 406.830 | \n",
" 406.460 | \n",
" 406.8100 | \n",
" 1311316 | \n",
"
\n",
" \n",
" 1166 | \n",
" 2022-11-30 15:57:00 | \n",
" 406.80 | \n",
" 406.830 | \n",
" 406.525 | \n",
" 406.6000 | \n",
" 1319798 | \n",
"
\n",
" \n",
" 1167 | \n",
" 2022-11-30 15:58:00 | \n",
" 406.60 | \n",
" 406.850 | \n",
" 406.550 | \n",
" 406.7300 | \n",
" 1691348 | \n",
"
\n",
" \n",
" 1168 | \n",
" 2022-11-30 15:59:00 | \n",
" 406.73 | \n",
" 406.950 | \n",
" 406.680 | \n",
" 406.7100 | \n",
" 2592503 | \n",
"
\n",
" \n",
" 1169 | \n",
" 2022-11-30 16:00:00 | \n",
" 406.71 | \n",
" 407.550 | \n",
" 406.680 | \n",
" 407.4700 | \n",
" 6700757 | \n",
"
\n",
" \n",
"
\n",
"
1170 rows × 6 columns
\n",
"
"
],
"text/plain": [
" Time FIRST HIGH LOW LAST VOLUME\n",
"0 2022-11-28 09:31:00 399.09 399.750 399.000 399.6500 289791\n",
"1 2022-11-28 09:32:00 399.69 400.000 399.600 399.8900 295441\n",
"2 2022-11-28 09:33:00 399.89 400.175 399.840 400.1750 233032\n",
"3 2022-11-28 09:34:00 400.16 400.380 400.000 400.1600 208954\n",
"4 2022-11-28 09:35:00 400.13 400.360 400.120 400.3493 112015\n",
"... ... ... ... ... ... ...\n",
"1165 2022-11-30 15:56:00 406.68 406.830 406.460 406.8100 1311316\n",
"1166 2022-11-30 15:57:00 406.80 406.830 406.525 406.6000 1319798\n",
"1167 2022-11-30 15:58:00 406.60 406.850 406.550 406.7300 1691348\n",
"1168 2022-11-30 15:59:00 406.73 406.950 406.680 406.7100 2592503\n",
"1169 2022-11-30 16:00:00 406.71 407.550 406.680 407.4700 6700757\n",
"\n",
"[1170 rows x 6 columns]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bars = otp.DataSource('NYSE_TAQ_BARS', tick_type='TRD_1M')\n",
"bars = bars[['FIRST','HIGH','LOW','LAST','VOLUME']]\n",
"otp.run(bars, start=otp.dt(2022,11,28,9,31), end=otp.dt(2022,11,30,16,1), symbols=['SPY'], apply_times_daily=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "96dd5eba-bac7-486a-a5ca-2d991bb32bbf",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}