Source code for ccxt_pandas.wrappers.schemas.positions_history_schema

"""Positions history data schema."""

import pandas as pd
import pandera.pandas as pa
from pandera.typing import Series

from ccxt_pandas.wrappers.schemas.base_schemas import BaseExchangeSchema


[docs] class PositionsHistorySchema(BaseExchangeSchema): """Positions history data schema. Used by methods like fetch_positions_history. Returns historical (closed) positions for derivatives contracts including entry/exit details and realized PnL. """ # Required fields id: Series[str] = pa.Field(title="Position ID", description="Unique position identifier") symbol: Series[str] = pa.Field(title="Symbol", description="Trading pair") marginMode: Series[str] = pa.Field( isin=["cross", "isolated"], title="Margin Mode", description="Margin mode: 'cross' or 'isolated'", ) entryPrice: Series[float] = pa.Field( ge=0, title="Entry Price", description="Average entry price of the position" ) realizedPnl: Series[float] = pa.Field( title="Realized PnL", description="Realized profit and loss" ) contractSize: Series[float] = pa.Field( ge=0, title="Contract Size", description="Size of each contract" ) lastPrice: Series[float] = pa.Field( ge=0, title="Last Price", description="Last price when position was closed" ) side: Series[str] = pa.Field( isin=["long", "short"], title="Side", description="Position side: 'long' or 'short'", ) hedged: Series[bool] = pa.Field( title="Hedged", description="Whether position was in hedge mode" ) timestamp: Series[pd.Timestamp] = pa.Field( title="Timestamp", description="Position open timestamp" ) datetime: Series[pd.Timestamp] = pa.Field( title="Datetime", description="Position open datetime (alias)" ) lastUpdateTimestamp: Series[pd.Timestamp] = pa.Field( title="Last Update Timestamp", description="Position close/update timestamp" ) maintenanceMarginPercentage: Series[float] = pa.Field( ge=0, title="Maintenance Margin %", description="Maintenance margin percentage" ) leverage: Series[float] = pa.Field(ge=0, title="Leverage", description="Position leverage") # Optional fields initialMarginPercentage: Series[float] | None = pa.Field( ge=0, nullable=True, title="Initial Margin %", description="Initial margin percentage", )
# Note: exchange field comes from BaseExchangeSchema (Optional)