fix bug
This commit is contained in:
@@ -10,6 +10,7 @@ from unittest.mock import patch
|
||||
from libs.grid_take_profit import GridState, GridTrailingTracker
|
||||
from sdk import APIError, Assets, OrderItem, Portfolio, PositionItem, Tick
|
||||
from strategy.trend.order import OrderBook, PlaceOrderRequest
|
||||
from strategy.trend.open import do_open
|
||||
from strategy.trend.positions import LOSS_TIERS, handle_loss, manage_positions
|
||||
from strategy.trend.boot import RunOnce
|
||||
from strategy.trend.state import STATUS_OK, STATUS_UNKNOWN, State, StateItem
|
||||
@@ -42,6 +43,49 @@ class FailedOrderClient:
|
||||
|
||||
|
||||
class TrendTests(unittest.TestCase):
|
||||
def test_trend_order_id_format(self):
|
||||
self.assertRegex(OrderBook.new_order_id("base"), r"^trend-[0-9a-f]{8}$")
|
||||
|
||||
def test_open_records_base_order_and_rounded_cost(self):
|
||||
with TemporaryDirectory() as directory:
|
||||
state = State.for_strategy(directory, "trend", "A")
|
||||
forgotten = []
|
||||
runtime = SimpleNamespace(
|
||||
client=FakeClient(),
|
||||
orders=OrderBook(),
|
||||
state=state,
|
||||
open_watch=SimpleNamespace(forget=forgotten.append),
|
||||
)
|
||||
|
||||
do_open(runtime, "000001.SZ", 100, "morning", 12.345)
|
||||
|
||||
item = state.get("000001.SZ")
|
||||
self.assertRegex(item.base_order_id, r"^trend-[0-9a-f]{8}$")
|
||||
self.assertEqual(item.base_qty, 100)
|
||||
self.assertEqual(item.base_cost, 12.35)
|
||||
self.assertEqual(item.base_status, "ING")
|
||||
self.assertEqual(forgotten, ["000001.SZ"])
|
||||
|
||||
def test_pending_base_order_survives_position_delay(self):
|
||||
with TemporaryDirectory() as directory:
|
||||
state = State.for_strategy(directory, "trend", "A")
|
||||
state.set(StateItem(
|
||||
"000001.SZ",
|
||||
base_order_id="trend-12345678",
|
||||
base_status="ING",
|
||||
))
|
||||
pending = OrderItem(
|
||||
"1", "000001.SZ", "BUY", "", "50", None, 100,
|
||||
local_order_id="trend-12345678",
|
||||
)
|
||||
|
||||
state.reconcile([], [pending])
|
||||
|
||||
self.assertEqual(
|
||||
state.get("000001.SZ").base_order_id,
|
||||
"trend-12345678",
|
||||
)
|
||||
|
||||
def test_grid_states_and_account_isolation(self):
|
||||
tracker = GridTrailingTracker(1)
|
||||
self.assertEqual(tracker.observe("A:code", 2.1).state, GridState.ARMED)
|
||||
|
||||
Reference in New Issue
Block a user