31 lines
1.1 KiB
Python
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}
|