Point-in-time benchmarks: BBO at different markouts#
Find the prevailing quote at different time intervals (markouts) before/after each trade.
import onetick.py as otp
markouts = [-1, 0, 1, 5, 60, 600]
trd = otp.DataSource('US_COMP_SAMPLE', tick_type='TRD')
trd = trd[['PRICE', 'SIZE']]
qte_by_markout = []
for m in markouts:
    mr = str(m).replace('-', 'm')
    qte = otp.DataSource('US_COMP_SAMPLE',
                         tick_type='NBBO',
                         back_to_first_tick=otp.Hour(24))
    qte = qte[['ASK_PRICE', 'BID_PRICE']]
    qte = qte.rename({'ASK_PRICE': f'ASK_PRICE_{mr}',
                      'BID_PRICE': f'BID_PRICE_{mr}'})
    qte[f'quote_time_{mr}'] = qte['Time']
    # shift the data by m seconds
    qte = qte.time_interval_shift(m * 1000)
    qte_by_markout.append(qte)
trd = otp.join_by_time([trd] + qte_by_markout)
otp.run(
    trd,
    symbols=['AAPL'],
    start=otp.dt(2024, 2, 1, 9, 30),
    end=otp.dt(2024, 2, 1, 9, 30, 1),
    timezone='EST5EDT',
)
| Time | PRICE | SIZE | ASK_PRICE_m1 | BID_PRICE_m1 | quote_time_m1 | ASK_PRICE_0 | BID_PRICE_0 | quote_time_0 | ASK_PRICE_1 | BID_PRICE_1 | quote_time_1 | ASK_PRICE_5 | BID_PRICE_5 | quote_time_5 | ASK_PRICE_60 | BID_PRICE_60 | quote_time_60 | ASK_PRICE_600 | BID_PRICE_600 | quote_time_600 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2024-02-01 09:30:00.000961260 | 184.010 | 302 | 184.29 | 184.14 | 2024-02-01 09:29:59.000000000 | 184.14 | 184.00 | 2024-02-01 09:30:00.000860953 | 183.93 | 183.89 | 2024-02-01 09:30:01.000000000 | 184.35 | 184.30 | 2024-02-01 09:30:05.000000000 | 184.31 | 184.26 | 2024-02-01 09:31:00.000000000 | 185.16 | 185.14 | 2024-02-01 09:40:00.000000000 | 
| 1 | 2024-02-01 09:30:00.000961491 | 184.000 | 100 | 184.29 | 184.14 | 2024-02-01 09:29:59.000000000 | 184.14 | 184.00 | 2024-02-01 09:30:00.000860953 | 183.93 | 183.89 | 2024-02-01 09:30:01.000000000 | 184.35 | 184.30 | 2024-02-01 09:30:05.000000000 | 184.31 | 184.26 | 2024-02-01 09:31:00.000000000 | 185.16 | 185.14 | 2024-02-01 09:40:00.000000000 | 
| 2 | 2024-02-01 09:30:00.000961701 | 184.000 | 1 | 184.29 | 184.14 | 2024-02-01 09:29:59.000000000 | 184.14 | 184.00 | 2024-02-01 09:30:00.000860953 | 183.93 | 183.89 | 2024-02-01 09:30:01.000000000 | 184.35 | 184.30 | 2024-02-01 09:30:05.000000000 | 184.31 | 184.26 | 2024-02-01 09:31:00.000000000 | 185.16 | 185.14 | 2024-02-01 09:40:00.000000000 | 
| 3 | 2024-02-01 09:30:00.000973163 | 184.000 | 1 | 184.29 | 184.14 | 2024-02-01 09:29:59.000000000 | 184.14 | 183.90 | 2024-02-01 09:30:00.000969529 | 183.93 | 183.89 | 2024-02-01 09:30:01.000000000 | 184.35 | 184.30 | 2024-02-01 09:30:05.000000000 | 184.31 | 184.26 | 2024-02-01 09:31:00.000000000 | 185.16 | 185.14 | 2024-02-01 09:40:00.000000000 | 
| 4 | 2024-02-01 09:30:00.000973355 | 184.000 | 5 | 184.29 | 184.14 | 2024-02-01 09:29:59.000000000 | 184.14 | 183.90 | 2024-02-01 09:30:00.000969529 | 183.93 | 183.89 | 2024-02-01 09:30:01.000000000 | 184.35 | 184.30 | 2024-02-01 09:30:05.000000000 | 184.31 | 184.26 | 2024-02-01 09:31:00.000000000 | 185.16 | 185.14 | 2024-02-01 09:40:00.000000000 | 
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | 
| 574 | 2024-02-01 09:30:00.987184691 | 183.900 | 9 | 184.14 | 184.00 | 2024-02-01 09:29:59.972347877 | 183.93 | 183.89 | 2024-02-01 09:30:00.973387417 | 183.98 | 183.91 | 2024-02-01 09:30:01.955975928 | 184.17 | 184.10 | 2024-02-01 09:30:05.980208696 | 184.30 | 184.26 | 2024-02-01 09:31:00.958368208 | 185.15 | 185.13 | 2024-02-01 09:40:00.981049329 | 
| 575 | 2024-02-01 09:30:00.990378350 | 183.920 | 1 | 184.14 | 184.00 | 2024-02-01 09:29:59.972347877 | 183.93 | 183.89 | 2024-02-01 09:30:00.987461418 | 183.98 | 183.91 | 2024-02-01 09:30:01.955975928 | 184.17 | 184.10 | 2024-02-01 09:30:05.980208696 | 184.30 | 184.26 | 2024-02-01 09:31:00.958368208 | 185.15 | 185.13 | 2024-02-01 09:40:00.989520212 | 
| 576 | 2024-02-01 09:30:00.991941892 | 183.935 | 1 | 184.14 | 184.00 | 2024-02-01 09:29:59.972347877 | 183.93 | 183.89 | 2024-02-01 09:30:00.987461418 | 183.98 | 183.91 | 2024-02-01 09:30:01.955975928 | 184.23 | 184.12 | 2024-02-01 09:30:05.991820274 | 184.30 | 184.26 | 2024-02-01 09:31:00.958368208 | 185.15 | 185.13 | 2024-02-01 09:40:00.989520212 | 
| 577 | 2024-02-01 09:30:00.993785116 | 183.905 | 300 | 184.14 | 184.00 | 2024-02-01 09:29:59.972347877 | 183.93 | 183.89 | 2024-02-01 09:30:00.987461418 | 183.98 | 183.91 | 2024-02-01 09:30:01.955975928 | 184.23 | 184.13 | 2024-02-01 09:30:05.992801135 | 184.30 | 184.26 | 2024-02-01 09:31:00.958368208 | 185.15 | 185.13 | 2024-02-01 09:40:00.989520212 | 
| 578 | 2024-02-01 09:30:00.996512511 | 183.934 | 5 | 184.14 | 184.00 | 2024-02-01 09:29:59.972347877 | 183.93 | 183.89 | 2024-02-01 09:30:00.987461418 | 183.98 | 183.91 | 2024-02-01 09:30:01.955975928 | 184.23 | 184.13 | 2024-02-01 09:30:05.996012263 | 184.30 | 184.26 | 2024-02-01 09:31:00.958368208 | 185.15 | 185.13 | 2024-02-01 09:40:00.996424703 | 
579 rows × 21 columns