Files
fxhnt/tests/unit/test_databento_options.py

31 lines
1.1 KiB
Python

import datetime as dt
import pandas as pd
from fxhnt.adapters.data.databento import _bars_from_ohlcv_df, _chain_from_definition_df
def test_chain_from_definition_df_parses_puts_and_calls():
df = pd.DataFrame(
{
"raw_symbol": ["XSP 240816P00470000", "XSP 240816C00470000"],
"expiration": [pd.Timestamp("2024-08-16", tz="UTC"), pd.Timestamp("2024-08-16", tz="UTC")],
"strike_price": [470.0, 470.0],
"instrument_class": ["P", "C"],
}
)
chain = _chain_from_definition_df(df)
assert len(chain) == 2
put = next(c for c in chain if c.right == "P")
assert put.strike == 470.0 and put.expiry == dt.date(2024, 8, 16)
assert put.osi_symbol == "XSP 240816P00470000"
def test_bars_from_ohlcv_df_groups_by_symbol():
idx = pd.DatetimeIndex([pd.Timestamp("2024-07-15", tz="UTC"), pd.Timestamp("2024-07-16", tz="UTC")])
df = pd.DataFrame(
{"symbol": ["XSP 240816P00470000", "XSP 240816P00470000"], "close": [1.20, 1.35]}, index=idx
)
bars = _bars_from_ohlcv_df(df)
assert bars["XSP 240816P00470000"] == {"2024-07-15": 1.20, "2024-07-16": 1.35}