[Add] Add trader data object structure
This commit is contained in:
parent
ad40633fd8
commit
dfcd0ed0ea
252
vnpy/trader/object.py
Normal file
252
vnpy/trader/object.py
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
"""
|
||||||
|
Basic data structure used for general trading function in VN Trader.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from datetime import datetime
|
||||||
|
from logging import INFO
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class BaseData:
|
||||||
|
"""
|
||||||
|
Any data object needs a gateway_name as source or
|
||||||
|
destination and should inherit base data.
|
||||||
|
"""
|
||||||
|
gateway_name: str
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class TickData(BaseData):
|
||||||
|
"""
|
||||||
|
Tick data contains information about:
|
||||||
|
* last trade in market
|
||||||
|
* orderbook snapshot
|
||||||
|
* intraday market statistics.
|
||||||
|
"""
|
||||||
|
symbol: str
|
||||||
|
exchange: str
|
||||||
|
datetime: datetime
|
||||||
|
volume: float = 0
|
||||||
|
|
||||||
|
last_price: float = 0
|
||||||
|
last_volume: float = 0
|
||||||
|
|
||||||
|
open_price: float = 0
|
||||||
|
high_price: float = 0
|
||||||
|
low_price: float = 0
|
||||||
|
pre_close: float = 0
|
||||||
|
|
||||||
|
bid_price_1: float = 0
|
||||||
|
bid_price_2: float = 0
|
||||||
|
bid_price_3: float = 0
|
||||||
|
bid_price_4: float = 0
|
||||||
|
bid_price_5: float = 0
|
||||||
|
|
||||||
|
ask_price_1: float = 0
|
||||||
|
ask_price_2: float = 0
|
||||||
|
ask_price_3: float = 0
|
||||||
|
ask_price_4: float = 0
|
||||||
|
ask_price_5: float = 0
|
||||||
|
|
||||||
|
bid_volume_1: float = 0
|
||||||
|
bid_volume_2: float = 0
|
||||||
|
bid_volume_3: float = 0
|
||||||
|
bid_volume_4: float = 0
|
||||||
|
bid_volume_5: float = 0
|
||||||
|
|
||||||
|
ask_volume_1: float = 0
|
||||||
|
ask_volume_2: float = 0
|
||||||
|
ask_volume_3: float = 0
|
||||||
|
ask_volume_4: float = 0
|
||||||
|
ask_volume_5: float = 0
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
""""""
|
||||||
|
self.vt_symbol = f"{self.symbol}.{self.exchange}"
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class BarData(BaseData):
|
||||||
|
"""
|
||||||
|
Candlestick bar data of a certain trading period.
|
||||||
|
"""
|
||||||
|
symbol: str
|
||||||
|
exchange: str
|
||||||
|
datetime: datetime
|
||||||
|
inteval: str
|
||||||
|
|
||||||
|
volume: float = 0
|
||||||
|
open_price: float = 0
|
||||||
|
high_price: float = 0
|
||||||
|
low_price: float = 0
|
||||||
|
close_price: float = 0
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
""""""
|
||||||
|
self.vt_symbol = f"{self.symbol}.{self.exchange}"
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class OrderData(BaseData):
|
||||||
|
"""
|
||||||
|
Order data contains information for tracking lastest status
|
||||||
|
of a specific order.
|
||||||
|
"""
|
||||||
|
symbol: str
|
||||||
|
exchange: str
|
||||||
|
orderid: str
|
||||||
|
|
||||||
|
direction: str = ""
|
||||||
|
offset: str = ""
|
||||||
|
price: float = 0
|
||||||
|
volume: float = 0
|
||||||
|
traded: float = 0
|
||||||
|
status: str = ""
|
||||||
|
time: str = ""
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
""""""
|
||||||
|
self.vt_symbol = f"{self.symbol}.{self.exchange}"
|
||||||
|
self.vt_orderid = f"{self.gateway_name}.{self.orderid}"
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class TradeData(BaseData):
|
||||||
|
"""
|
||||||
|
Trade data contains information of a fill of an order. One order
|
||||||
|
can have several trade fills.
|
||||||
|
"""
|
||||||
|
symbol: str
|
||||||
|
exchange: str
|
||||||
|
orderid: str
|
||||||
|
tradeid: str
|
||||||
|
|
||||||
|
direction: str = ""
|
||||||
|
offset: str = ""
|
||||||
|
price: float = 0
|
||||||
|
volume: float = 0
|
||||||
|
time: str = ""
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
""""""
|
||||||
|
self.vt_symbol = f"{self.symbol}.{self.exchange}"
|
||||||
|
self.vt_orderid = f"{self.gateway_name}.{self.orderid}"
|
||||||
|
self.vt_tradeid = f"{self.gateway_name}.{self.tradeid}"
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class PositionData(BaseData):
|
||||||
|
"""
|
||||||
|
Positon data is used for tracking each individual position holding.
|
||||||
|
"""
|
||||||
|
symbol: str
|
||||||
|
exchange: str
|
||||||
|
direction: str
|
||||||
|
|
||||||
|
volume: float = 0
|
||||||
|
frozen: float = 0
|
||||||
|
price: float = 0
|
||||||
|
pnl: float = 0
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
""""""
|
||||||
|
self.vt_symbol = f"{self.symbol}.{self.exchange}"
|
||||||
|
self.vt_positionid = f"{self.vt_symbol}.{self.direction}"
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class AccountData(BaseData):
|
||||||
|
"""
|
||||||
|
Account data contains information about balance, frozen and
|
||||||
|
available.
|
||||||
|
"""
|
||||||
|
accountid: str
|
||||||
|
|
||||||
|
balance: float = 0
|
||||||
|
frozen: float = 0
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
""""""
|
||||||
|
self.available = self.balance - self.frozen
|
||||||
|
self.vt_accountid = f"{self.gateway_name}.{self.accountid}"
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class LogData(BaseData):
|
||||||
|
"""
|
||||||
|
Log data is used for recording log messages on GUI or in log files.
|
||||||
|
"""
|
||||||
|
msg: str
|
||||||
|
level: int = INFO
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
""""""
|
||||||
|
time = datetime
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class ContractData(BaseData):
|
||||||
|
"""
|
||||||
|
Contract data contains basic information about each contract traded.
|
||||||
|
"""
|
||||||
|
symbol: str
|
||||||
|
exchange: str
|
||||||
|
name: str
|
||||||
|
product: str
|
||||||
|
size: int
|
||||||
|
pricetick: float
|
||||||
|
|
||||||
|
option_strike: float = 0
|
||||||
|
option_underlying: str = '' # vt_symbol of underlying contract
|
||||||
|
option_type: str = ''
|
||||||
|
option_expiry: datetime = None
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
""""""
|
||||||
|
self.vt_symbol = f"{self.symbol}.{self.exchange}"
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class SubscribeRequest:
|
||||||
|
"""
|
||||||
|
Request sending to specific gateway for subscribing tick data update.
|
||||||
|
"""
|
||||||
|
symbol: str
|
||||||
|
exchange: str = ''
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
""""""
|
||||||
|
self.vt_symbol = f"{self.symbol}.{self.exchange}"
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class OrderRequest:
|
||||||
|
"""
|
||||||
|
Request sending to specific gateway for creating a new order.
|
||||||
|
"""
|
||||||
|
symbol: str
|
||||||
|
direction: str
|
||||||
|
price_type: str
|
||||||
|
volume: float
|
||||||
|
exchange: str = ''
|
||||||
|
price: float = 0
|
||||||
|
offset: str = ''
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
""""""
|
||||||
|
self.vt_symbol = f"{self.symbol}.{self.exchange}"
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class CancelRequest:
|
||||||
|
"""
|
||||||
|
Request sending to specific gateway for canceling an existing order.
|
||||||
|
"""
|
||||||
|
orderid: str
|
||||||
|
symbol: str = ''
|
||||||
|
exchange: str = ''
|
||||||
|
|
||||||
|
def __post_init__(self):
|
||||||
|
""""""
|
||||||
|
self.vt_symbol = f"{self.symbol}.{self.exchange}"
|
Loading…
Reference in New Issue
Block a user