Source code for ccxt_pandas.wrappers.schemas.trade_schema
"""Trade data schemas for public and user trades."""
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 TradeSchema(BaseExchangeSchema):
"""Public trade data schema.
Used by methods like fetch_trades.
These are public market trades visible to all users.
Most fields are required except fees and exchange.
"""
# Timestamps (required)
timestamp: Series[pd.Timestamp] = pa.Field(title="Timestamp", description="Trade timestamp")
datetime: Series[pd.Timestamp] = pa.Field(
title="Datetime", description="Trade datetime (alias)"
)
# Core trade fields (all required)
symbol: Series[str] = pa.Field(title="Symbol", description="Trading pair")
id: Series[str] = pa.Field(unique=True, title="Trade ID", description="Unique trade identifier")
side: Series[str] = pa.Field(
isin=["buy", "sell"], title="Side", description="Trade side: 'buy' or 'sell'"
)
price: Series[float] = pa.Field(ge=0, title="Price", description="Trade price")
amount: Series[float] = pa.Field(ge=0, title="Amount", description="Trade amount")
cost: Series[float] = pa.Field(ge=0, title="Cost", description="Trade cost (price * amount)")
# Optional fields
fees: Series[object] | None = pa.Field(
nullable=True, title="Fees", description="Fee information (can be dict or list)"
)
# Note: exchange field comes from BaseExchangeSchema (Optional)
[docs]
class MyTradesSchema(TradeSchema, FeeFieldsMixin):
"""User trades (my trades) data schema.
Used by methods like fetch_my_trades, fetch_order_trades.
Returns the authenticated user's trade history including fees and order references.
Inherits all fields from TradeSchema and FeeFieldsMixin, and adds:
- order (order ID that generated the trade)
- takerOrMaker (whether trade was taker or maker)
"""
# Additional required fields for user trades
order: Series[str] = pa.Field(
title="Order ID", description="Order ID that generated this trade"
)
takerOrMaker: Series[str] = pa.Field(
isin=["taker", "maker"],
title="Taker or Maker",
description="Whether trade was taker or maker",
)