Files
vnpy/tests/test_object.py

162 lines
4.6 KiB
Python

from datetime import datetime
from vnpy.trader.constant import Direction, Exchange, Offset, OrderType, Product, Status
from vnpy.trader.object import (
AccountData,
BarData,
CancelRequest,
ContractData,
HistoryRequest,
OrderData,
OrderRequest,
PositionData,
QuoteData,
QuoteRequest,
SubscribeRequest,
TickData,
TradeData,
)
def test_vt_symbol_joins_symbol_and_exchange() -> None:
moment: datetime = datetime(2024, 1, 2, 9, 0)
tick: TickData = TickData(
gateway_name="CTP",
symbol="rb2410",
exchange=Exchange.SHFE,
datetime=moment,
)
bar: BarData = BarData(
gateway_name="CTP",
symbol="rb2410",
exchange=Exchange.SHFE,
datetime=moment,
)
contract: ContractData = ContractData(
gateway_name="CTP",
symbol="rb2410",
exchange=Exchange.SHFE,
name="rb",
product=Product.FUTURES,
size=10,
pricetick=1,
)
subscribe: SubscribeRequest = SubscribeRequest(symbol="rb2410", exchange=Exchange.SHFE)
cancel: CancelRequest = CancelRequest(orderid="1001", symbol="rb2410", exchange=Exchange.SHFE)
history: HistoryRequest = HistoryRequest(
symbol="rb2410",
exchange=Exchange.SHFE,
start=moment,
)
assert tick.vt_symbol == "rb2410.SHFE"
assert bar.vt_symbol == "rb2410.SHFE"
assert contract.vt_symbol == "rb2410.SHFE"
assert subscribe.vt_symbol == "rb2410.SHFE"
assert cancel.vt_symbol == "rb2410.SHFE"
assert history.vt_symbol == "rb2410.SHFE"
def test_order_request_builds_order_identity() -> None:
request: OrderRequest = OrderRequest(
symbol="rb2410",
exchange=Exchange.SHFE,
direction=Direction.LONG,
type=OrderType.LIMIT,
volume=2,
price=3500,
offset=Offset.OPEN,
)
order: OrderData = request.create_order_data("1001", "CTP")
cancel: CancelRequest = order.create_cancel_request()
assert request.vt_symbol == "rb2410.SHFE"
assert order.gateway_name == "CTP"
assert order.orderid == "1001"
assert order.vt_symbol == "rb2410.SHFE"
assert order.vt_orderid == "CTP.1001"
assert order.direction == Direction.LONG
assert order.offset == Offset.OPEN
assert order.volume == 2
assert cancel.orderid == "1001"
assert cancel.symbol == "rb2410"
assert cancel.exchange == Exchange.SHFE
assert cancel.vt_symbol == "rb2410.SHFE"
def test_trade_and_quote_ids_include_gateway() -> None:
trade: TradeData = TradeData(
gateway_name="CTP",
symbol="rb2410",
exchange=Exchange.SHFE,
orderid="1001",
tradeid="9",
direction=Direction.LONG,
)
quote: QuoteData = QuoteData(
gateway_name="CTP",
symbol="rb2410",
exchange=Exchange.SHFE,
quoteid="q1",
)
quote_request: QuoteRequest = QuoteRequest(
symbol="rb2410",
exchange=Exchange.SHFE,
bid_price=3499,
bid_volume=1,
ask_price=3501,
ask_volume=1,
)
created: QuoteData = quote_request.create_quote_data("q1", "CTP")
assert trade.vt_symbol == "rb2410.SHFE"
assert trade.vt_orderid == "CTP.1001"
assert trade.vt_tradeid == "CTP.9"
assert quote.vt_symbol == "rb2410.SHFE"
assert quote.vt_quoteid == "CTP.q1"
assert quote_request.vt_symbol == "rb2410.SHFE"
assert created.vt_quoteid == "CTP.q1"
assert created.vt_symbol == "rb2410.SHFE"
def test_position_and_account_ids() -> None:
position: PositionData = PositionData(
gateway_name="CTP",
symbol="rb2410",
exchange=Exchange.SHFE,
direction=Direction.SHORT,
)
account: AccountData = AccountData(
gateway_name="CTP",
accountid="acc",
balance=1000,
frozen=100,
)
assert position.vt_symbol == "rb2410.SHFE"
assert position.vt_positionid == f"CTP.rb2410.SHFE.{Direction.SHORT.value}"
assert account.vt_accountid == "CTP.acc"
assert account.available == 900
def test_order_is_active_for_working_statuses() -> None:
order: OrderData = OrderData(
gateway_name="CTP",
symbol="rb2410",
exchange=Exchange.SHFE,
orderid="1001",
status=Status.SUBMITTING,
)
assert order.is_active()
order.status = Status.NOTTRADED
assert order.is_active()
order.status = Status.PARTTRADED
assert order.is_active()
order.status = Status.ALLTRADED
assert not order.is_active()
order.status = Status.CANCELLED
assert not order.is_active()
order.status = Status.REJECTED
assert not order.is_active()