# Filtering

This section contains 8 examples for Filtering using the `onetick-py`.<br />
\\\\
Each example is a self-contained script that can be run against the OneTick Cloud sample databases.

```default
# onetick-py WebAPI configuration for OneTick Cloud
import os
os.environ['OTP_WEBAPI'] = '1'
os.environ['OTP_HTTP_ADDRESS'] = 'https://rest.cloud.onetick.com'
os.environ['OTP_ACCESS_TOKEN_URL'] = 'https://cloud-auth.parent.onetick.com/realms/OMD/protocol/openid-connect/token'
os.environ['OTP_CLIENT_ID'] = '__FILL_IN__'
os.environ['OTP_CLIENT_SECRET'] = '__FILL_IN__'
```

## Adding Multiple Filters

Applying multiple filters to the dataset as two separate operations.

```ipython3
import onetick.py as otp

data = otp.DataSource(db='US_COMP_SAMPLE', tick_type='TRD')
data = data[['PRICE', 'SIZE', 'EXCHANGE']]
data['TRADED_VALUE'] = data['PRICE'] * data['SIZE']

data = data.where(data['EXCHANGE'] == 'N')
data = data.where(data['SIZE'] > 100)

result = otp.run(data,
                 start=otp.dt(2024, 1, 3, 9, 30),
                 end=otp.dt(2024, 1, 3, 9, 40),
                 timezone='America/New_York',
                 symbols='CSCO')
result
```

```myst-ansi
                            Time  PRICE  SIZE EXCHANGE  TRADED_VALUE
0  2024-01-03 09:30:02.371760827  50.13   127        N       6366.51
1  2024-01-03 09:30:19.325065423  50.13   337        N      16893.81
2  2024-01-03 09:30:19.701084742  50.15   400        N      20060.00
3  2024-01-03 09:30:20.787037891  50.14   107        N       5364.98
4  2024-01-03 09:30:23.436860708  50.14   600        N      30084.00
..                           ...    ...   ...      ...           ...
54 2024-01-03 09:38:28.029695573  50.08   200        N      10016.00
55 2024-01-03 09:39:01.147191601  50.09   312        N      15628.08
56 2024-01-03 09:39:04.654739241  50.08   200        N      10016.00
57 2024-01-03 09:39:17.427491120  50.08   211        N      10566.88
58 2024-01-03 09:39:22.549900523  50.10   200        N      10020.00

[59 rows x 5 columns]
```

## Filtering on a Single Trade Condition

Filtering that a trade condition is present in the `COND` field of the `US_COMP_SAMPLE` database.

```ipython3
import onetick.py as otp

data = otp.DataSource(db='US_COMP_SAMPLE', tick_type='TRD')
data, _= data[data['COND'].str.contains('I')]
data = data[:100]
result = otp.run(data,
                 start=otp.dt(2024, 1, 3),
                 end=otp.dt(2024, 1, 4),
                 timezone='America/New_York',
                 symbols='CSCO')
result
```

```myst-ansi
                            Time  COND  CORR        DELETED_TIME EXCHANGE  \
0  2024-01-03 04:00:00.019128245  @ TI     0 1969-12-31 19:00:00        K   
1  2024-01-03 04:00:00.905488831  @ TI     0 1969-12-31 19:00:00        P   
2  2024-01-03 04:00:01.278537460  @FTI     0 1969-12-31 19:00:00        Q   
3  2024-01-03 04:00:01.278746794  @FTI     0 1969-12-31 19:00:00        P   
4  2024-01-03 04:00:03.090763650  @FTI     0 1969-12-31 19:00:00        Q   
..                           ...   ...   ...                 ...      ...   
95 2024-01-03 06:42:37.790073044  @FTI     0 1969-12-31 19:00:00        P   
96 2024-01-03 06:42:37.804968776  @FTI     0 1969-12-31 19:00:00        Q   
97 2024-01-03 06:42:37.805831496  @FTI     0 1969-12-31 19:00:00        Q   
98 2024-01-03 06:42:37.816687662  @FTI     0 1969-12-31 19:00:00        Q   
99 2024-01-03 06:42:38.014732702  @FTI     0 1969-12-31 19:00:00        Q   

    OMDSEQ              PARTICIPANT_TIME  PRICE  SEQ_NUM  SIZE SOURCE  \
0        0 2024-01-03 04:00:00.000052000  50.46     1496     1      N   
1        0 2024-01-03 04:00:00.905146127  50.05     1531     5      N   
2        0 2024-01-03 04:00:01.278518875  50.29     1540    13      N   
3        1 2024-01-03 04:00:01.278404559  50.29     1541    13      N   
4        0 2024-01-03 04:00:03.090746743  50.29     1565     1      N   
..     ...                           ...    ...      ...   ...    ...   
95       0 2024-01-03 06:42:37.789729308  50.12    43556     1      N   
96       0 2024-01-03 06:42:37.804953171  50.17    43557    10      N   
97       0 2024-01-03 06:42:37.805816609  50.17    43558     5      N   
98       0 2024-01-03 06:42:37.816672176  50.17    43559     5      N   
99       0 2024-01-03 06:42:38.014717674  50.19    43562     5      N   

   STOP_STOCK TICKER  TICK_STATUS TRADE_ID TRF            TRF_TIME TTE  
0               CSCO            0        1     1969-12-31 19:00:00   0  
1               CSCO            0        1     1969-12-31 19:00:00   0  
2               CSCO            0        1     1969-12-31 19:00:00   1  
3               CSCO            0        2     1969-12-31 19:00:00   1  
4               CSCO            0        2     1969-12-31 19:00:00   1  
..        ...    ...          ...      ...  ..                 ...  ..  
95              CSCO            0       39     1969-12-31 19:00:00   1  
96              CSCO            0       54     1969-12-31 19:00:00   1  
97              CSCO            0       55     1969-12-31 19:00:00   1  
98              CSCO            0       56     1969-12-31 19:00:00   1  
99              CSCO            0       57     1969-12-31 19:00:00   1  

[100 rows x 18 columns]
```

## Filtering on Multiple Trade Conditions

Filtering that any of the specified trade conditions are present
in the `COND` field of the `US_COMP` database, by using [`character_present()`](https://docs.pip.distribution.sol.onetick.com/api/source/character_present.html.md#onetick.py.Source.character_present).

```ipython3
import onetick.py as otp

data = otp.DataSource(db='US_COMP_SAMPLE', tick_type='TRD')
data = data.character_present(data['COND'], 'O6TUHILNRWZ47QMBCGPV')
data = data[:100]
result = otp.run(data,
                 start=otp.dt(2024, 1, 3),
                 end=otp.dt(2024, 1, 4),
                 timezone='America/New_York',
                 symbols='CSCO')
result
```

```myst-ansi
                            Time  COND  CORR        DELETED_TIME EXCHANGE  \
0  2024-01-03 04:00:00.019128245  @ TI     0 1969-12-31 19:00:00        K   
1  2024-01-03 04:00:00.905488831  @ TI     0 1969-12-31 19:00:00        P   
2  2024-01-03 04:00:01.278537460  @FTI     0 1969-12-31 19:00:00        Q   
3  2024-01-03 04:00:01.278746794  @FTI     0 1969-12-31 19:00:00        P   
4  2024-01-03 04:00:03.090763650  @FTI     0 1969-12-31 19:00:00        Q   
..                           ...   ...   ...                 ...      ...   
95 2024-01-03 06:10:45.228483994  @ T      0 1969-12-31 19:00:00        P   
96 2024-01-03 06:10:52.079452806  @ T      0 1969-12-31 19:00:00        P   
97 2024-01-03 06:10:52.079454393  @ T      0 1969-12-31 19:00:00        P   
98 2024-01-03 06:31:08.521306739  @FTI     0 1969-12-31 19:00:00        P   
99 2024-01-03 06:42:03.828154778  @ TI     0 1969-12-31 19:00:00        K   

    OMDSEQ              PARTICIPANT_TIME  PRICE  SEQ_NUM  SIZE SOURCE  \
0        0 2024-01-03 04:00:00.000052000  50.46     1496     1      N   
1        0 2024-01-03 04:00:00.905146127  50.05     1531     5      N   
2        0 2024-01-03 04:00:01.278518875  50.29     1540    13      N   
3        1 2024-01-03 04:00:01.278404559  50.29     1541    13      N   
4        0 2024-01-03 04:00:03.090746743  50.29     1565     1      N   
..     ...                           ...    ...      ...   ...    ...   
95       3 2024-01-03 06:10:45.228132116  50.20    36285   788      N   
96       0 2024-01-03 06:10:52.079105701  50.20    36303   100      N   
97       1 2024-01-03 06:10:52.079105701  50.20    36304   900      N   
98       0 2024-01-03 06:31:08.520961545  50.15    39749     1      N   
99       0 2024-01-03 06:42:03.827956000  50.17    43183     1      N   

   STOP_STOCK TICKER  TICK_STATUS TRADE_ID TRF            TRF_TIME TTE  
0               CSCO            0        1     1969-12-31 19:00:00   0  
1               CSCO            0        1     1969-12-31 19:00:00   0  
2               CSCO            0        1     1969-12-31 19:00:00   1  
3               CSCO            0        2     1969-12-31 19:00:00   1  
4               CSCO            0        2     1969-12-31 19:00:00   1  
..        ...    ...          ...      ...  ..                 ...  ..  
95              CSCO            0       35     1969-12-31 19:00:00   0  
96              CSCO            0       36     1969-12-31 19:00:00   0  
97              CSCO            0       37     1969-12-31 19:00:00   0  
98              CSCO            0       38     1969-12-31 19:00:00   1  
99              CSCO            0       10     1969-12-31 19:00:00   0  

[100 rows x 18 columns]
```

## Filtering on Excluding Multiple Trade Conditions

Filtering that any of the specified trade conditions are not present
in the `COND` field of the `US_COMP_SAMPLE` database.<br />
\\\\
Using [`character_present()`](https://docs.pip.distribution.sol.onetick.com/api/source/character_present.html.md#onetick.py.Source.character_present) with parameter `discard_on_match=True`.

```ipython3
import onetick.py as otp

data = otp.DataSource(db='US_COMP_SAMPLE', tick_type='TRD')
data = data.character_present(data['COND'], 'O6TUHILNRWZ47QMBCGPV', discard_on_match=True)
data = data[:100]
result = otp.run(data,
                 start=otp.dt(2024, 1, 3),
                 end=otp.dt(2024, 1, 4),
                 timezone='America/New_York',
                 symbols='CSCO')
result
```

```myst-ansi
                            Time  COND  CORR        DELETED_TIME EXCHANGE  \
0  2024-01-03 09:30:00.127459523  @        0 1969-12-31 19:00:00        V   
1  2024-01-03 09:30:00.280877749  @        0 1969-12-31 19:00:00        D   
2  2024-01-03 09:30:00.607073913  @F       0 1969-12-31 19:00:00        Z   
3  2024-01-03 09:30:00.888302226  @        0 1969-12-31 19:00:00        Q   
4  2024-01-03 09:30:00.889018624  @F       0 1969-12-31 19:00:00        U   
..                           ...   ...   ...                 ...      ...   
95 2024-01-03 09:30:04.203519590  @F       0 1969-12-31 19:00:00        Q   
96 2024-01-03 09:30:04.203522132  @F       0 1969-12-31 19:00:00        Q   
97 2024-01-03 09:30:04.203653496  @        0 1969-12-31 19:00:00        Q   
98 2024-01-03 09:30:04.203816597  @F       0 1969-12-31 19:00:00        Z   
99 2024-01-03 09:30:04.203826441  @        0 1969-12-31 19:00:00        Q   

    OMDSEQ              PARTICIPANT_TIME   PRICE  SEQ_NUM  SIZE SOURCE  \
0        0 2024-01-03 09:30:00.065044730  50.170   169181   100      N   
1        0 2024-01-03 09:30:00.280542269  50.002   169295   200      N   
2        4 2024-01-03 09:30:00.606878000  50.090   170006   124      N   
3        4 2024-01-03 09:30:00.888283518  50.090   171782   109      N   
4        0 2024-01-03 09:30:00.888812693  50.090   171787   100      N   
..     ...                           ...     ...      ...   ...    ...   
95       0 2024-01-03 09:30:04.203504691  50.220   185111   100      N   
96       1 2024-01-03 09:30:04.203504691  50.220   185112   138      N   
97       2 2024-01-03 09:30:04.203638794  50.220   185114   100      N   
98       4 2024-01-03 09:30:04.203620000  50.220   185121   296      N   
99       5 2024-01-03 09:30:04.203810447  50.220   185122   100      N   

   STOP_STOCK TICKER  TICK_STATUS TRADE_ID TRF                      TRF_TIME  \
0               CSCO            0       13     1969-12-31 19:00:00.000000000   
1               CSCO            0       94   Q 2024-01-03 09:30:00.280841375   
2               CSCO            0       63     1969-12-31 19:00:00.000000000   
3               CSCO            0      360     1969-12-31 19:00:00.000000000   
4               CSCO            0       17     1969-12-31 19:00:00.000000000   
..        ...    ...          ...      ...  ..                           ...   
95              CSCO            0      537     1969-12-31 19:00:00.000000000   
96              CSCO            0      538     1969-12-31 19:00:00.000000000   
97              CSCO            0      539     1969-12-31 19:00:00.000000000   
98              CSCO            0      109     1969-12-31 19:00:00.000000000   
99              CSCO            0      540     1969-12-31 19:00:00.000000000   

   TTE  
0    0  
1    0  
2    1  
3    0  
4    1  
..  ..  
95   1  
96   1  
97   0  
98   1  
99   0  

[100 rows x 18 columns]
```

## Filtering on Specific Time Ranges

Applying a filter on the Data Source based on specific time periods per day,
using [`time_filter()`](https://docs.pip.distribution.sol.onetick.com/api/source/time_filter.html.md#onetick.py.Source.time_filter).

```ipython3
import onetick.py as otp

data = otp.DataSource(db='US_COMP_SAMPLE', tick_type='TRD')
data = data.time_filter(start_time='09:33:00', end_time='09:35:00')
data = data[:1000]
result = otp.run(data,
                 start=otp.dt(2024, 1, 3, 9, 30),
                 end=otp.dt(2024, 1, 3, 9, 40),
                 timezone='America/New_York',
                 symbols='CSCO')
result
```

```myst-ansi
                             Time  COND  CORR        DELETED_TIME EXCHANGE  \
0   2024-01-03 09:33:00.084705868  @  I     0 1969-12-31 19:00:00        Z   
1   2024-01-03 09:33:00.230210508  @  I     0 1969-12-31 19:00:00        Z   
2   2024-01-03 09:33:00.320146067  @  I     0 1969-12-31 19:00:00        Z   
3   2024-01-03 09:33:00.441710628  @  I     0 1969-12-31 19:00:00        Z   
4   2024-01-03 09:33:00.444156451  @F I     0 1969-12-31 19:00:00        Q   
..                            ...   ...   ...                 ...      ...   
780 2024-01-03 09:34:59.152722398  @F       0 1969-12-31 19:00:00        P   
781 2024-01-03 09:34:59.263442478  @  I     0 1969-12-31 19:00:00        D   
782 2024-01-03 09:34:59.263934938  @F I     0 1969-12-31 19:00:00        K   
783 2024-01-03 09:34:59.263938903  @F I     0 1969-12-31 19:00:00        K   
784 2024-01-03 09:34:59.547741776  @  I     0 1969-12-31 19:00:00        D   

     OMDSEQ              PARTICIPANT_TIME  PRICE  SEQ_NUM  SIZE SOURCE  \
0         0 2024-01-03 09:33:00.084511000  50.05   262862     1      N   
1         0 2024-01-03 09:33:00.230021000  50.05   262931     2      N   
2         0 2024-01-03 09:33:00.319957000  50.05   262947     1      N   
3         0 2024-01-03 09:33:00.441521000  50.05   262984     1      N   
4         0 2024-01-03 09:33:00.444135893  50.05   262986     2      N   
..      ...                           ...    ...      ...   ...    ...   
780       4 2024-01-03 09:34:59.152378746  50.02   300893   100      N   
781       0 2024-01-03 09:34:59.263054575  50.01   300948    21      N   
782       1 2024-01-03 09:34:59.263744000  50.01   300949     1      N   
783       2 2024-01-03 09:34:59.263744000  50.01   300950    99      N   
784       0 2024-01-03 09:34:59.524000000  50.02   300986     1      N   

    STOP_STOCK TICKER  TICK_STATUS TRADE_ID TRF                      TRF_TIME  \
0                CSCO            0      305     1969-12-31 19:00:00.000000000   
1                CSCO            0      306     1969-12-31 19:00:00.000000000   
2                CSCO            0      307     1969-12-31 19:00:00.000000000   
3                CSCO            0      308     1969-12-31 19:00:00.000000000   
4                CSCO            0     1142     1969-12-31 19:00:00.000000000   
..         ...    ...          ...      ...  ..                           ...   
780              CSCO            0      512     1969-12-31 19:00:00.000000000   
781              CSCO            0     1372   Q 2024-01-03 09:34:59.263418818   
782              CSCO            0      367     1969-12-31 19:00:00.000000000   
783              CSCO            0      368     1969-12-31 19:00:00.000000000   
784              CSCO            0     1373   Q 2024-01-03 09:34:59.547719733   

    TTE  
0     0  
1     0  
2     0  
3     0  
4     1  
..   ..  
780   1  
781   0  
782   1  
783   1  
784   0  

[785 rows x 18 columns]
```

## Filtering on Excluding Specific Time Ranges

Applying a filter on the Data Source based on excluding specific time periods per day.<br />
\\\\
Using [`time_filter()`](https://docs.pip.distribution.sol.onetick.com/api/source/time_filter.html.md#onetick.py.Source.time_filter) with parameter `discard_on_match=True`.

```ipython3
import onetick.py as otp

data = otp.DataSource(db='US_COMP_SAMPLE', tick_type='TRD')
data = data.time_filter(start_time='09:30:00', end_time='09:33:00', discard_on_match=True)
data = data[:1000]
result = otp.run(data,
                 start=otp.dt(2024, 1, 3, 9, 30),
                 end=otp.dt(2024, 1, 3, 9, 40),
                 timezone='America/New_York',
                 symbols='CSCO')
result
```

```myst-ansi
                             Time  COND  CORR        DELETED_TIME EXCHANGE  \
0   2024-01-03 09:33:00.084705868  @  I     0 1969-12-31 19:00:00        Z   
1   2024-01-03 09:33:00.230210508  @  I     0 1969-12-31 19:00:00        Z   
2   2024-01-03 09:33:00.320146067  @  I     0 1969-12-31 19:00:00        Z   
3   2024-01-03 09:33:00.441710628  @  I     0 1969-12-31 19:00:00        Z   
4   2024-01-03 09:33:00.444156451  @F I     0 1969-12-31 19:00:00        Q   
..                            ...   ...   ...                 ...      ...   
995 2024-01-03 09:35:19.333430053  @F I     0 1969-12-31 19:00:00        K   
996 2024-01-03 09:35:19.333435686  @F I     0 1969-12-31 19:00:00        K   
997 2024-01-03 09:35:19.333440538  @  I     0 1969-12-31 19:00:00        Z   
998 2024-01-03 09:35:19.333444799  @  I     0 1969-12-31 19:00:00        Z   
999 2024-01-03 09:35:19.333448520  @        0 1969-12-31 19:00:00        U   

     OMDSEQ              PARTICIPANT_TIME  PRICE  SEQ_NUM  SIZE SOURCE  \
0         0 2024-01-03 09:33:00.084511000  50.05   262862     1      N   
1         0 2024-01-03 09:33:00.230021000  50.05   262931     2      N   
2         0 2024-01-03 09:33:00.319957000  50.05   262947     1      N   
3         0 2024-01-03 09:33:00.441521000  50.05   262984     1      N   
4         0 2024-01-03 09:33:00.444135893  50.05   262986     2      N   
..      ...                           ...    ...      ...   ...    ...   
995      57 2024-01-03 09:35:19.333225000  50.00   309118    50      N   
996      58 2024-01-03 09:35:19.333225000  50.00   309119    25      N   
997      59 2024-01-03 09:35:19.333213000  50.00   309120    16      N   
998      60 2024-01-03 09:35:19.333250000  50.00   309121     9      N   
999      61 2024-01-03 09:35:19.333227544  50.00   309122   398      N   

    STOP_STOCK TICKER  TICK_STATUS TRADE_ID TRF            TRF_TIME TTE  
0                CSCO            0      305     1969-12-31 19:00:00   0  
1                CSCO            0      306     1969-12-31 19:00:00   0  
2                CSCO            0      307     1969-12-31 19:00:00   0  
3                CSCO            0      308     1969-12-31 19:00:00   0  
4                CSCO            0     1142     1969-12-31 19:00:00   1  
..         ...    ...          ...      ...  ..                 ...  ..  
995              CSCO            0      378     1969-12-31 19:00:00   1  
996              CSCO            0      379     1969-12-31 19:00:00   1  
997              CSCO            0      427     1969-12-31 19:00:00   0  
998              CSCO            0      428     1969-12-31 19:00:00   0  
999              CSCO            0      319     1969-12-31 19:00:00   0  

[1000 rows x 18 columns]
```

## Relative Time Filtering on the last 5 minutes Trades

Retrieving Trades for the last 5 minutes, using relative syntax for start and end in [`otp.run`](https://docs.pip.distribution.sol.onetick.com/api/run.html.md#onetick.py.run).

```python
import onetick.py as otp

data = otp.DataSource(db='US_COMP', tick_type='TRD')
data = data[['PRICE', 'SIZE', 'COND']]
data = data.limit(1000)
result = otp.run(data,
                 start=otp.now() - otp.Minute(5),
                 end=otp.now(),
                 timezone='America/New_York',
                 symbols='CSCO')
result
```

|     | Time                          | PRICE    | SIZE   | COND   |
|-----|-------------------------------|----------|--------|--------|
| 0   | 2026-08-04 09:38:09.337531279 | 120.1068 | 1      | @  I   |
| 1   | 2026-08-04 09:38:09.509870550 | 120.1200 | 14     | @  I   |
| 2   | 2026-08-04 09:38:09.572110788 | 120.1500 | 10     | @  I   |
| 3   | 2026-08-04 09:38:09.572151798 | 120.1500 | 398    | @F     |
| 4   | 2026-08-04 09:38:09.572172621 | 120.1500 | 1      | @  I   |
| ... | ...                           | ...      | ...    | ...    |
| 995 | 2026-08-04 09:39:06.025000447 | 120.3100 | 20     | @F I   |
| 996 | 2026-08-04 09:39:06.281626529 | 120.2871 | 1      | @  I   |
| 997 | 2026-08-04 09:39:06.311070704 | 120.3138 | 1      | @  I   |
| 998 | 2026-08-04 09:39:06.475337961 | 120.3050 | 100    | @      |
| 999 | 2026-08-04 09:39:06.475912328 | 120.3050 | 17     | @  I   |

1000 rows x 4 columns

## Relative Time Filtering on Trades from Today

Retrieving Trades from Today until Now, using relative syntax for start and end in [`otp.run`](https://docs.pip.distribution.sol.onetick.com/api/run.html.md#onetick.py.run).

```python
import onetick.py as otp

data = otp.DataSource(db='US_COMP', tick_type='TRD')
data = data[['PRICE', 'SIZE', 'COND']]
data = data.limit(1000)
result = otp.run(data,
                 # get the current date == start of day
                 start=otp.now().dt.date(),
                 end=otp.now(),
                 timezone='America/New_York',
                 symbols='CSCO')
result
```

|     | Time                          | PRICE    | SIZE   | COND   |
|-----|-------------------------------|----------|--------|--------|
| 0   | 2026-08-04 04:00:00.062628594 | 115.8700 | 10     | @ TI   |
| 1   | 2026-08-04 04:00:00.517801239 | 115.8700 | 28     | @ TI   |
| 2   | 2026-08-04 04:00:01.572798398 | 116.2988 | 1      | @ TI   |
| 3   | 2026-08-04 04:00:01.961360151 | 115.4412 | 1      | @ TI   |
| 4   | 2026-08-04 04:00:02.804289238 | 115.8300 | 5      | @ TI   |
| ... | ...                           | ...      | ...    | ...    |
| 995 | 2026-08-04 07:34:13.936435065 | 117.7400 | 18     | @FTI   |
| 996 | 2026-08-04 07:34:13.936615045 | 117.7400 | 2      | @FTI   |
| 997 | 2026-08-04 07:34:13.941759948 | 117.8000 | 37     | @FTI   |
| 998 | 2026-08-04 07:34:13.941765195 | 117.8000 | 31     | @FTI   |
| 999 | 2026-08-04 07:34:13.952417322 | 117.7800 | 34     | @ TI   |

1000 rows x 4 columns
