mango-v4-service/py/mango_service_v3_py/dtos.py

135 lines
3.1 KiB
Python

from datetime import datetime
from typing import List
from typing import Optional
from typing import Union
from pydantic import BaseModel
from typing_extensions import Literal
Side = Union[Literal["buy"], Literal["sell"]]
def to_camel_case(snake_str):
components = snake_str.split("_")
return components[0] + "".join(x.title() for x in components[1:])
class CamelCaseModel(BaseModel):
class Config:
alias_generator = to_camel_case
allow_population_by_field_name = True
class Balance(CamelCaseModel):
coin: str
free: float
spot_borrow: float
total: float
usd_value: float
available_without_borrow: float
class Market(CamelCaseModel):
name: str
base_currency: str
quote_currency: str
quote_volume24_h: Optional[float]
change1_h: Optional[float]
change24_h: Optional[float]
change_bod: Optional[float]
high_leverage_fee_exempt: Optional[bool]
min_provide_size: Optional[float]
type: str
underlying: Optional[str]
enabled: Optional[bool]
ask: Optional[int] # optional for devnet
bid: Optional[int] # optional for devnet
last: Optional[float] # optional for devnet
post_only: Optional[bool]
price: Optional[float] # optional for devnet
price_increment: float
size_increment: float
restricted: Optional[bool]
volume_usd24_h: Optional[float]
class Orderbook(CamelCaseModel):
asks: List[List[float]]
bids: List[List[float]]
class Trade(CamelCaseModel):
id: str
liquidation: Optional[bool]
price: float
side: str
size: float
time: datetime
class Candle(CamelCaseModel):
time: int
open: float
high: float
low: float
close: float
volume: float
class Position(CamelCaseModel):
cost: float
cumulative_buy_size: Optional[float]
cumulative_sell_size: Optional[float]
entry_price: float
estimated_liquidation_price: Optional[float]
future: str
initial_margin_requirement: Optional[float]
long_order_size: Optional[float]
maintenance_margin_requirement: Optional[float]
net_size: Optional[float]
open_size: Optional[float]
realized_pnl: Optional[float]
recent_average_open_price: Optional[float]
recent_break_even_price: Optional[float]
recent_pnl: Optional[float]
short_order_size: Optional[float]
side: str
size: float
unrealized_pnl: Optional[float]
collateral_used: Optional[float]
class Order(CamelCaseModel):
created_at: Optional[datetime] # optional for spot
filled_size: Optional[int]
future: str
id: int
market: str
price: float
avg_fill_price: Optional[float]
remaining_size: Optional[int]
side: Side
size: float
status: Optional[str]
type: Optional[str]
reduce_only: Optional[bool]
ioc: Optional[bool]
post_only: Optional[bool]
client_id: Optional[str]
class PlaceOrder(CamelCaseModel):
market: str
side: Side
price: int
type: str
size: float
reduce_only: bool
ioc: bool
post_only: bool
client_id: int
class BadRequestError(CamelCaseModel):
msg: str