This commit is contained in:
2026-09-03 11:33:43 +08:00
parent d5303cc22b
commit e6a5096353
38 changed files with 1911 additions and 2742 deletions

View File

@@ -8,7 +8,7 @@ from types import SimpleNamespace
from unittest.mock import patch
from libs.grid_take_profit import GridState, GridTrailingTracker
from sdk import APIError, Assets, OrderItem, PositionItem, Tick
from sdk import APIError, Assets, OrderItem, Portfolio, PositionItem, Tick
from strategy.trend.order import OrderBook, PlaceOrderRequest
from strategy.trend.positions import LOSS_TIERS, handle_loss, manage_positions
from strategy.trend.boot import RunOnce
@@ -80,7 +80,7 @@ class TrendTests(unittest.TestCase):
client = FakeOrderClient(orders)
book = OrderBook(cancel_timeout_sec=10)
book.refresh(client)
book.refresh(client, orders)
self.assertEqual({item.id for item in book.data}, {"completed"})
self.assertEqual(client.canceled, ["active"])
@@ -196,10 +196,11 @@ class TrendTests(unittest.TestCase):
def test_low_cash_still_runs_position_management(self):
client = SimpleNamespace(
assets=lambda: Assets(total=10000, available=10),
positions=lambda: (["A"], [PositionItem(stock_code="A", volume=100, open_price=10)]),
trade_detail_data=lambda _datatype: [],
deals=lambda: [],
portfolio=lambda: Portfolio(
assets=Assets(total=10000, available=10),
positions={"A": PositionItem(stock_code="A", volume=100, open_price=10)},
orders=[],
),
full_tick=lambda _codes: {"A": Tick(last_price=11)},
)
with ThreadPoolExecutor(max_workers=2) as executor:
@@ -207,7 +208,7 @@ class TrendTests(unittest.TestCase):
client=client,
account_cfg=SimpleNamespace(min_cash_ratio=0.1),
global_cfg=SimpleNamespace(api_host="http://example"),
orders=SimpleNamespace(refresh=lambda _client: None, data=[]),
orders=SimpleNamespace(refresh=lambda _client, _orders: None, data=[]),
state=SimpleNamespace(
codes=["A"],
reconcile=lambda *_args: None,
@@ -235,10 +236,11 @@ class TrendTests(unittest.TestCase):
))
state.save()
client = SimpleNamespace(
assets=lambda: Assets(total=10000, available=5000),
positions=lambda: ([], []),
trade_detail_data=lambda _datatype: [],
deals=lambda: [],
portfolio=lambda: Portfolio(
assets=Assets(total=10000, available=5000),
positions={},
orders=[],
),
full_tick=lambda _codes: {"A": Tick(last_price=10)},
)
signal = SimpleNamespace(code="A", signal_key="morning")