162 lines
4.6 KiB
Python
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()
|