Files
sanguo_vnpy_v2/tests/trader/test_models.py
T

90 lines
2.2 KiB
Python

"""PaperAccount/Order/Trade/Reject 数据类测试。"""
from sanguo_trader.models import (
AccountConfig,
PaperOrder,
PaperTrade,
PaperReject,
MatchSession,
OrderSide,
)
def test_account_config_defaults():
cfg = AccountConfig(initial_capital=1_000_000)
assert cfg.initial_capital == 1_000_000
assert cfg.rate == 0.0003
assert cfg.min_commission == 5.0
assert cfg.stamp_duty_rate == 0.0005
assert cfg.transfer_fee_rate == 0.00001
assert cfg.slippage == 0
assert cfg.pricetick == 0.01
def test_account_config_is_frozen():
import dataclasses
cfg = AccountConfig(initial_capital=1_000_000)
assert dataclasses.is_dataclass(cfg)
# frozen=True → 不可变
try:
cfg.rate = 0.001 # type: ignore[misc]
except dataclasses.FrozenInstanceError:
pass
else:
raise AssertionError("AccountConfig 应为 frozen dataclass")
def test_paper_order_defaults_next_open():
o = PaperOrder(
strategy_id="s1",
symbol="600000",
side=OrderSide.BUY,
price=10.0,
volume=100,
is_market=True,
)
assert o.match_session == MatchSession.NEXT_OPEN
def test_paper_order_explicit_current_close():
o = PaperOrder(
strategy_id="s1",
symbol="600000",
side=OrderSide.SELL,
price=10.0,
volume=100,
is_market=False,
match_session=MatchSession.CURRENT_CLOSE,
)
assert o.match_session == MatchSession.CURRENT_CLOSE
assert o.is_market is False
def test_paper_trade_fields():
t = PaperTrade(
strategy_id="s1",
symbol="600000",
side=OrderSide.BUY,
price=10.0,
volume=100,
commission=5.0,
stamp_duty=0.0,
transfer_fee=0.01,
bar_date="2024-01-02",
match_session=MatchSession.NEXT_OPEN,
)
assert t.volume == 100
assert t.commission == 5.0
assert t.bar_date == "2024-01-02"
def test_paperReject_records_reason():
r = PaperReject(
strategy_id="s1",
symbol="600000",
reason="limit_up_locked",
bar_date="2024-01-02",
)
assert r.reason == "limit_up_locked"
assert r.symbol == "600000"