# Interval Metrics (e.g., VWAP)

```ipython3
import onetick.py as otp

query = otp.DataSource('US_COMP_SAMPLE', tick_type='TRD')
query = query.agg({'market_vwap': otp.agg.vwap('PRICE', 'SIZE')})

otp.run(
    query,
    symbols=['AAPL'],
    start=otp.dt(2024, 2, 1, 9, 30),
    end=otp.dt(2024, 2, 1, 9, 30, 1),
    timezone='EST5EDT',
)
```

```myst-ansi
                 Time  market_vwap
0 2024-02-01 09:30:01   183.901435
```

## Computing market VWAP for every order's arrival/exit interval

```ipython3
start = otp.dt(2024, 2, 1, 9, 30)
end = otp.dt(2024, 2, 1, 9, 30, 1)

orders = otp.Ticks(arrival=[start, start + otp.Milli(7934)],
                   exit=[end, end + otp.Milli(9556)],
                   sym=['AAPL', 'MSFT'])
otp.run(orders, start=start, end=start + otp.Day(1))
```

```myst-ansi
                     Time                 arrival                    exit  \
0 2024-02-01 09:30:00.000 2024-02-01 09:30:00.000 2024-02-01 09:30:01.000   
1 2024-02-01 09:30:00.001 2024-02-01 09:30:07.934 2024-02-01 09:30:10.556   

    sym  
0  AAPL  
1  MSFT  
```

```ipython3
def vwap(symbol):
    q = otp.DataSource('US_COMP_SAMPLE', tick_type='TRD')
    q = q.agg({'market_vwap': otp.agg.vwap('PRICE','SIZE')})
    return q

orders = orders.join_with_query(vwap, start=orders['arrival'], end=orders['exit'], symbol=orders['sym'])
otp.run(orders, start=start, end=end + otp.Day(1))
```

```myst-ansi
                     Time  market_vwap                 arrival  \
0 2024-02-01 09:30:00.000   183.901435 2024-02-01 09:30:00.000   
1 2024-02-01 09:30:00.001   402.840416 2024-02-01 09:30:07.934   

                     exit   sym  
0 2024-02-01 09:30:01.000  AAPL  
1 2024-02-01 09:30:10.556  MSFT  
```

A more efficient implementation is also available with [symbol parameters](https://docs.pip.distribution.sol.onetick.com/static/getting_started/time_based_joins.html.md#vwap-symbol-params).
