Source code for ccxt_pandas.wrappers.schemas.orders_schema

"""Orders 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, FeeFieldsMixin


[docs] class OrdersSchema(BaseExchangeSchema, FeeFieldsMixin): """Orders data schema. Used by methods like fetch_open_orders, fetch_closed_orders, fetch_canceled_orders. Returns order information for both open and closed orders. Fields like clientOrderId, lastTradeTimestamp, timeInForce, and average are optional as they may not be present in open orders. """ # Required fields id: Series[str] = pa.Field(title="Order ID", description="Unique order identifier") timestamp: Series[pd.Timestamp] = pa.Field( title="Timestamp", description="Order creation timestamp" ) datetime: Series[pd.Timestamp] = pa.Field( title="Datetime", description="Order creation datetime (alias)" ) lastUpdateTimestamp: Series[pd.Timestamp] = pa.Field( title="Last Update Timestamp", description="Last order update timestamp" ) symbol: Series[str] = pa.Field(title="Symbol", description="Trading pair") type: Series[str] = pa.Field(title="Type", description="Order type (e.g., limit, market)") side: Series[str] = pa.Field( isin=["buy", "sell"], title="Side", description="Order side: 'buy' or 'sell'" ) price: Series[float] = pa.Field(ge=0, title="Price", description="Order price") cost: Series[float] = pa.Field( ge=0, title="Cost", description="Total cost (filled amount * price)" ) amount: Series[float] = pa.Field(ge=0, title="Amount", description="Order amount") filled: Series[float] = pa.Field(ge=0, title="Filled", description="Filled amount") remaining: Series[float] = pa.Field( ge=0, title="Remaining", description="Remaining amount to be filled" ) status: Series[str] = pa.Field( title="Status", description="Order status (e.g., open, closed, canceled)" ) trades: Series[object] = pa.Field( title="Trades", description="List of trades that filled this order" ) fees: Series[object] = pa.Field(title="Fees", description="Fee details (list of dicts)") # Optional fields (vary by exchange and order state) clientOrderId: Series[str] | None = pa.Field( nullable=True, title="Client Order ID", description="User-defined order identifier", ) lastTradeTimestamp: Series[pd.Timestamp] | None = pa.Field( nullable=True, title="Last Trade Timestamp", description="Timestamp of last trade execution", ) timeInForce: Series[str] | None = pa.Field( nullable=True, title="Time In Force", description="Order time in force (e.g., GTC, IOC, FOK)", ) average: Series[float] | None = pa.Field( ge=0, nullable=True, title="Average", description="Average fill price" ) reduceOnly: Series[bool] | None = pa.Field( nullable=True, title="Reduce Only", description="Whether order is reduce-only (derivatives)", ) postOnly: Series[bool] | None = pa.Field( nullable=True, title="Post Only", description="Whether order is post-only (maker-only)", )
# Note: fee_currency, fee_cost, fee_rate come from FeeFieldsMixin (Optional) # Note: exchange field comes from BaseExchangeSchema (Optional)