{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "2e3c64a7", "metadata": {}, "source": [ "# Filtering" ] }, { "attachments": {}, "cell_type": "markdown", "id": "bfcab03a-8973-4d02-8cce-8461afad511a", "metadata": {}, "source": [ "Let's start with an unfiltered time series." ] }, { "cell_type": "code", "execution_count": 1, "id": "a171fb32-9ed7-4869-90ed-ab5a2fc676a6", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimePRICESIZECONDEXCHANGE
02023-05-15 09:30:00.000178688412.22100TP
12023-05-15 09:30:00.000776704412.22247Z
22023-05-15 09:30:00.003603456412.22100TT
32023-05-15 09:30:00.006352128412.241IK
42023-05-15 09:30:00.007128064412.243IK
..................
3102023-05-15 09:30:00.934032640412.27160TT
3112023-05-15 09:30:00.975609344412.242ID
3122023-05-15 09:30:00.980264448412.271ID
3132023-05-15 09:30:00.985391616412.28100T
3142023-05-15 09:30:00.985394944412.28100QT
\n", "

315 rows × 5 columns

\n", "
" ], "text/plain": [ " Time PRICE SIZE COND EXCHANGE\n", "0 2023-05-15 09:30:00.000178688 412.22 100 T P\n", "1 2023-05-15 09:30:00.000776704 412.22 247 Z\n", "2 2023-05-15 09:30:00.003603456 412.22 100 T T\n", "3 2023-05-15 09:30:00.006352128 412.24 1 I K\n", "4 2023-05-15 09:30:00.007128064 412.24 3 I K\n", ".. ... ... ... ... ...\n", "310 2023-05-15 09:30:00.934032640 412.27 160 T T\n", "311 2023-05-15 09:30:00.975609344 412.24 2 I D\n", "312 2023-05-15 09:30:00.980264448 412.27 1 I D\n", "313 2023-05-15 09:30:00.985391616 412.28 100 T\n", "314 2023-05-15 09:30:00.985394944 412.28 100 Q T\n", "\n", "[315 rows x 5 columns]" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import onetick.py as otp\n", "\n", "s = otp.dt(2023, 5, 15, 9, 30)\n", "e = otp.dt(2023, 5, 15, 9, 30, 1)\n", "\n", "q = otp.DataSource('NYSE_TAQ', tick_type='TRD')\n", "q = q[['PRICE', 'SIZE', 'COND', 'EXCHANGE']]\n", "otp.run(q, start=s, end=e, symbols=['SPY'])" ] }, { "attachments": {}, "cell_type": "markdown", "id": "cd690ecc-9b96-4a9b-8adf-7e78e9f5dae7", "metadata": {}, "source": [ "We can filter by the value of a field." ] }, { "cell_type": "code", "execution_count": 2, "id": "0de743e9-a63a-4718-bc26-5b337458558b", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimePRICESIZECONDEXCHANGE
02023-05-15 09:30:00.003603456412.22100TT
12023-05-15 09:30:00.033275392412.2458FTIT
22023-05-15 09:30:00.033278464412.25100FTT
32023-05-15 09:30:00.054481920412.25100TT
42023-05-15 09:30:00.124218112412.24200TT
52023-05-15 09:30:00.124500992412.24147FTT
62023-05-15 09:30:00.124581888412.24574TT
72023-05-15 09:30:00.124927744412.24147FTT
82023-05-15 09:30:00.125032960412.24147FTT
92023-05-15 09:30:00.125264640412.24147FTT
102023-05-15 09:30:00.125298176412.24500TT
112023-05-15 09:30:00.125324800412.24790TT
122023-05-15 09:30:00.125357824412.24233TT
132023-05-15 09:30:00.125920256412.24147FTT
142023-05-15 09:30:00.126912512412.24100FTT
152023-05-15 09:30:00.126939648412.23100TT
162023-05-15 09:30:00.135816960412.24400FTT
172023-05-15 09:30:00.150320384412.24500TT
182023-05-15 09:30:00.156800768412.24100TT
192023-05-15 09:30:00.168296960412.24240FTT
202023-05-15 09:30:00.169088000412.2215TIT
212023-05-15 09:30:00.176428544412.2285TIT
222023-05-15 09:30:00.176437504412.2215TIT
232023-05-15 09:30:00.204837376412.24100TT
242023-05-15 09:30:00.260433664412.25100FTT
252023-05-15 09:30:00.260436736412.25100FTT
262023-05-15 09:30:00.277258752412.255TIT
272023-05-15 09:30:00.277670656412.25100TT
282023-05-15 09:30:00.307667200412.25100FTT
292023-05-15 09:30:00.315053056412.25100TT
302023-05-15 09:30:00.315116032412.25100TT
312023-05-15 09:30:00.315614976412.25100TT
322023-05-15 09:30:00.315909888412.2595TIT
332023-05-15 09:30:00.320802304412.2511TIT
342023-05-15 09:30:00.321833984412.2589FTIT
352023-05-15 09:30:00.342056960412.25100TT
362023-05-15 09:30:00.342105088412.25100TT
372023-05-15 09:30:00.342505216412.25100TT
382023-05-15 09:30:00.352696320412.25100TT
392023-05-15 09:30:00.353129472412.25100TT
402023-05-15 09:30:00.406870528412.2527TIT
412023-05-15 09:30:00.421151744412.25100TT
422023-05-15 09:30:00.526528768412.25100TT
432023-05-15 09:30:00.650535168412.241TIT
442023-05-15 09:30:00.787749120412.241000TT
452023-05-15 09:30:00.931313920412.27100FTT
462023-05-15 09:30:00.934032640412.278TIT
472023-05-15 09:30:00.934032640412.27160TT
482023-05-15 09:30:00.985391616412.28100T
492023-05-15 09:30:00.985394944412.28100QT
\n", "
" ], "text/plain": [ " Time PRICE SIZE COND EXCHANGE\n", "0 2023-05-15 09:30:00.003603456 412.22 100 T T\n", "1 2023-05-15 09:30:00.033275392 412.24 58 FTI T\n", "2 2023-05-15 09:30:00.033278464 412.25 100 FT T\n", "3 2023-05-15 09:30:00.054481920 412.25 100 T T\n", "4 2023-05-15 09:30:00.124218112 412.24 200 T T\n", "5 2023-05-15 09:30:00.124500992 412.24 147 FT T\n", "6 2023-05-15 09:30:00.124581888 412.24 574 T T\n", "7 2023-05-15 09:30:00.124927744 412.24 147 FT T\n", "8 2023-05-15 09:30:00.125032960 412.24 147 FT T\n", "9 2023-05-15 09:30:00.125264640 412.24 147 FT T\n", "10 2023-05-15 09:30:00.125298176 412.24 500 T T\n", "11 2023-05-15 09:30:00.125324800 412.24 790 T T\n", "12 2023-05-15 09:30:00.125357824 412.24 233 T T\n", "13 2023-05-15 09:30:00.125920256 412.24 147 FT T\n", "14 2023-05-15 09:30:00.126912512 412.24 100 FT T\n", "15 2023-05-15 09:30:00.126939648 412.23 100 T T\n", "16 2023-05-15 09:30:00.135816960 412.24 400 FT T\n", "17 2023-05-15 09:30:00.150320384 412.24 500 T T\n", "18 2023-05-15 09:30:00.156800768 412.24 100 T T\n", "19 2023-05-15 09:30:00.168296960 412.24 240 FT T\n", "20 2023-05-15 09:30:00.169088000 412.22 15 TI T\n", "21 2023-05-15 09:30:00.176428544 412.22 85 TI T\n", "22 2023-05-15 09:30:00.176437504 412.22 15 TI T\n", "23 2023-05-15 09:30:00.204837376 412.24 100 T T\n", "24 2023-05-15 09:30:00.260433664 412.25 100 FT T\n", "25 2023-05-15 09:30:00.260436736 412.25 100 FT T\n", "26 2023-05-15 09:30:00.277258752 412.25 5 TI T\n", "27 2023-05-15 09:30:00.277670656 412.25 100 T T\n", "28 2023-05-15 09:30:00.307667200 412.25 100 FT T\n", "29 2023-05-15 09:30:00.315053056 412.25 100 T T\n", "30 2023-05-15 09:30:00.315116032 412.25 100 T T\n", "31 2023-05-15 09:30:00.315614976 412.25 100 T T\n", "32 2023-05-15 09:30:00.315909888 412.25 95 TI T\n", "33 2023-05-15 09:30:00.320802304 412.25 11 TI T\n", "34 2023-05-15 09:30:00.321833984 412.25 89 FTI T\n", "35 2023-05-15 09:30:00.342056960 412.25 100 T T\n", "36 2023-05-15 09:30:00.342105088 412.25 100 T T\n", "37 2023-05-15 09:30:00.342505216 412.25 100 T T\n", "38 2023-05-15 09:30:00.352696320 412.25 100 T T\n", "39 2023-05-15 09:30:00.353129472 412.25 100 T T\n", "40 2023-05-15 09:30:00.406870528 412.25 27 TI T\n", "41 2023-05-15 09:30:00.421151744 412.25 100 T T\n", "42 2023-05-15 09:30:00.526528768 412.25 100 T T\n", "43 2023-05-15 09:30:00.650535168 412.24 1 TI T\n", "44 2023-05-15 09:30:00.787749120 412.24 1000 T T\n", "45 2023-05-15 09:30:00.931313920 412.27 100 FT T\n", "46 2023-05-15 09:30:00.934032640 412.27 8 TI T\n", "47 2023-05-15 09:30:00.934032640 412.27 160 T T\n", "48 2023-05-15 09:30:00.985391616 412.28 100 T\n", "49 2023-05-15 09:30:00.985394944 412.28 100 Q T" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "q = otp.DataSource('NYSE_TAQ', tick_type='TRD')\n", "q = q[['PRICE', 'SIZE', 'COND', 'EXCHANGE']]\n", "q, _ = q[q['EXCHANGE'] == 'T']\n", "otp.run(q, start=s, end=e, symbols=['SPY'])" ] }, { "attachments": {}, "cell_type": "markdown", "id": "c6231302-ebe0-4ec0-ae0b-7dd3925abc07", "metadata": {}, "source": [ "Note that the result of a filter expression returns 2 values. The first value is the query returning ticks that satisfy the conditions. The second value is the query returning ticks that do not satisfy the conditions. Most of the time we'd be interested just in the ticks that pass the filter and can use a placeholder `_` for the second value." ] }, { "attachments": {}, "cell_type": "markdown", "id": "fb697b63-adb6-4f32-90bc-a68c82c0a9b3", "metadata": {}, "source": [ "Also, note that all of the filtering is done in OneTick not in Python, which is much more efficient and lets us work with much bigger data sets." ] }, { "attachments": {}, "cell_type": "markdown", "id": "f9e5df5e-f226-46af-b9de-9dcad5015402", "metadata": {}, "source": [ "Filtering for a specific trade condition is done with the string matching methods." ] }, { "cell_type": "code", "execution_count": 3, "id": "3865d9ef-fac5-407f-89e9-bd8f5b068aa3", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimePRICESIZECONDEXCHANGE
02023-05-15 09:30:00.006352128412.241IK
12023-05-15 09:30:00.007128064412.243IK
22023-05-15 09:30:00.007870976412.241IK
32023-05-15 09:30:00.008099328412.241IK
42023-05-15 09:30:00.009025536412.241IK
..................
1962023-05-15 09:30:00.933644288412.267F IK
1972023-05-15 09:30:00.933821952412.268F IH
1982023-05-15 09:30:00.934032640412.278TIT
1992023-05-15 09:30:00.975609344412.242ID
2002023-05-15 09:30:00.980264448412.271ID
\n", "

201 rows × 5 columns

\n", "
" ], "text/plain": [ " Time PRICE SIZE COND EXCHANGE\n", "0 2023-05-15 09:30:00.006352128 412.24 1 I K\n", "1 2023-05-15 09:30:00.007128064 412.24 3 I K\n", "2 2023-05-15 09:30:00.007870976 412.24 1 I K\n", "3 2023-05-15 09:30:00.008099328 412.24 1 I K\n", "4 2023-05-15 09:30:00.009025536 412.24 1 I K\n", ".. ... ... ... ... ...\n", "196 2023-05-15 09:30:00.933644288 412.26 7 F I K\n", "197 2023-05-15 09:30:00.933821952 412.26 8 F I H\n", "198 2023-05-15 09:30:00.934032640 412.27 8 TI T\n", "199 2023-05-15 09:30:00.975609344 412.24 2 I D\n", "200 2023-05-15 09:30:00.980264448 412.27 1 I D\n", "\n", "[201 rows x 5 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "q = otp.DataSource('NYSE_TAQ', tick_type='TRD')\n", "q = q[['PRICE', 'SIZE', 'COND', 'EXCHANGE']]\n", "q, _ = q[q['COND'].str.contains('I')]\n", "otp.run(q, start=s, end=e, symbols=['SPY'])" ] }, { "attachments": {}, "cell_type": "markdown", "id": "ef8e7e9b-e95b-44b0-a37c-ab3a2ecc9b15", "metadata": {}, "source": [ "Trade filter that limits attention to on-exchange continuous trading trades looks like this (it's used when creating bars)." ] }, { "cell_type": "code", "execution_count": 4, "id": "77b9bc26-5b96-483d-89df-409d53c02eca", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimePRICESIZECONDEXCHANGE
02023-05-15 09:30:00.000776704412.220247Z
12023-05-15 09:30:00.019069440412.230100FK
22023-05-15 09:30:00.033083136412.250100FK
32023-05-15 09:30:00.070456064412.240203Z
42023-05-15 09:30:00.119806720412.230130Z
..................
662023-05-15 09:30:00.874213888412.240100D
672023-05-15 09:30:00.875233280412.240149D
682023-05-15 09:30:00.931127552412.260100FP
692023-05-15 09:30:00.932179968412.255160D
702023-05-15 09:30:00.985391616412.280100T
\n", "

71 rows × 5 columns

\n", "
" ], "text/plain": [ " Time PRICE SIZE COND EXCHANGE\n", "0 2023-05-15 09:30:00.000776704 412.220 247 Z\n", "1 2023-05-15 09:30:00.019069440 412.230 100 F K\n", "2 2023-05-15 09:30:00.033083136 412.250 100 F K\n", "3 2023-05-15 09:30:00.070456064 412.240 203 Z\n", "4 2023-05-15 09:30:00.119806720 412.230 130 Z\n", ".. ... ... ... ... ...\n", "66 2023-05-15 09:30:00.874213888 412.240 100 D\n", "67 2023-05-15 09:30:00.875233280 412.240 149 D\n", "68 2023-05-15 09:30:00.931127552 412.260 100 F P\n", "69 2023-05-15 09:30:00.932179968 412.255 160 D\n", "70 2023-05-15 09:30:00.985391616 412.280 100 T\n", "\n", "[71 rows x 5 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "q = otp.DataSource('NYSE_TAQ', tick_type='TRD')\n", "q = q[['PRICE', 'SIZE', 'COND', 'EXCHANGE']]\n", "q, _ = q[q['COND'].str.match('^[^O6TUHILNRWZ47QMBCGPV]*$')]\n", "otp.run(q, start=s, end=e, symbols=['SPY'])" ] }, { "attachments": {}, "cell_type": "markdown", "id": "ab43354f-56f7-43dc-b040-8b9441231a26", "metadata": {}, "source": [ "Filters can include 'and' and/or 'or' clauses." ] }, { "cell_type": "code", "execution_count": 6, "id": "8c9fc0db-94c5-4de5-b07f-9f71a89417a7", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TimePRICESIZECONDEXCHANGE
02023-05-15 09:30:00.931313920412.27100FTT
12023-05-15 09:30:00.934032640412.278TIT
22023-05-15 09:30:00.934032640412.27160TT
32023-05-15 09:30:00.985391616412.28100T
42023-05-15 09:30:00.985394944412.28100QT
\n", "
" ], "text/plain": [ " Time PRICE SIZE COND EXCHANGE\n", "0 2023-05-15 09:30:00.931313920 412.27 100 FT T\n", "1 2023-05-15 09:30:00.934032640 412.27 8 TI T\n", "2 2023-05-15 09:30:00.934032640 412.27 160 T T\n", "3 2023-05-15 09:30:00.985391616 412.28 100 T\n", "4 2023-05-15 09:30:00.985394944 412.28 100 Q T" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "q = otp.DataSource('NYSE_TAQ', tick_type='TRD')\n", "q = q[['PRICE', 'SIZE', 'COND', 'EXCHANGE']]\n", "q, _ = q[(q['EXCHANGE'] == 'T') & (q['PRICE'] > 412.25)]\n", "otp.run(q, start=s, end=e, symbols=['SPY'])" ] } ], "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.6" } }, "nbformat": 4, "nbformat_minor": 5 }