feat: add grid level suggestions

This commit is contained in:
王鹏
2026-07-09 10:50:25 +08:00
parent 15636fb910
commit 6d30d48c33
8 changed files with 291 additions and 1 deletions

View File

@@ -223,3 +223,38 @@ def test_service_refresh_quotes_uses_realtime_price_in_summaries(tmp_path):
assert position.current_price == Decimal("4.12")
assert position.price_source == "tencent"
assert summary.market_value == Decimal("4120.00")
def test_service_generates_grid_level_suggestions_from_realtime_price(tmp_path):
service = TradingService(tmp_path / "grid.db", quote_provider=FakeQuoteProvider())
service.ensure_defaults()
account = service.get_active_account()
instrument = service.add_instrument(Instrument(id=None, code="510300", name="沪深300ETF", market="ETF"))
service.save_trade(
Trade(
id=None,
account_id=account.id,
instrument_id=instrument.id,
trade_date=date(2026, 7, 7),
side=TradeSide.BUY,
price=Decimal("4.00"),
quantity=1000,
trade_group=TradeGroup.BASE,
)
)
service.refresh_quotes()
levels = service.get_grid_level_suggestions(instrument.id, levels=2)
assert [item.buy_price for item in levels] == [Decimal("4.00"), Decimal("3.88")]
assert [item.sell_price for item in levels] == [Decimal("4.12"), Decimal("4.00")]
assert [item.buy_amount for item in levels] == [Decimal("5000.00"), Decimal("5000.00")]
assert [item.suggested_quantity for item in levels] == [1200, 1200]
def test_service_returns_empty_grid_levels_without_realtime_price(tmp_path):
service = TradingService(tmp_path / "grid.db")
service.ensure_defaults()
instrument = service.add_instrument(Instrument(id=None, code="510300", name="沪深300ETF", market="ETF"))
assert service.get_grid_level_suggestions(instrument.id, levels=10) == []