@@ -47,9 +47,11 @@ def test_create_get_and_cancel_order(backtesting_dispatcher):
4747 bar_events = []
4848
4949 async def on_order_updated (event : exchange .OrderEvent ):
50- order_events .append (event . order )
50+ order_events .append (event )
5151
5252 async def on_bar (bar_event ):
53+ bar_events .append (bar_event )
54+
5355 order_request = requests .MarketOrder (OrderOperation .BUY , pair , Decimal ("1" ))
5456 created_order = await e .create_order (order_request )
5557 assert created_order is not None
@@ -87,11 +89,54 @@ async def on_bar(bar_event):
8789 assert sum (e ._balances .holds .values ()) == 0
8890 assert len (e ._order_mgr ._holds_by_order ) == 0
8991
92+ async def impl ():
93+ e .subscribe_to_bar_events (pair , on_bar )
94+ e .subscribe_to_order_events (on_order_updated )
95+
96+ e .add_bar_source (
97+ event .FifoQueueEventSource (events = [
98+ bar .BarEvent (
99+ dt .local_datetime (2001 , 1 , 3 ),
100+ bar .Bar (
101+ dt .local_datetime (2001 , 1 , 2 ), pair ,
102+ Decimal (5 ), Decimal (10 ), Decimal (1 ), Decimal (5 ), Decimal (100 )
103+ )
104+ ),
105+ ])
106+ )
107+
108+ await backtesting_dispatcher .run ()
109+
110+ assert len (bar_events ) == 1
111+ assert len (order_events ) == 2
112+ assert order_events [0 ].order .is_open is True
113+ assert order_events [1 ].order .is_open is False
114+
115+ asyncio .run (impl ())
116+
117+
118+ def test_order_updates_have_priority (backtesting_dispatcher ):
119+ e = exchange .Exchange (
120+ backtesting_dispatcher ,
121+ {"USD" : Decimal ("50000" )}
122+ )
123+ pair = Pair ("BTC" , "USD" )
124+ order_events = []
125+ bar_events = []
126+ all_events = []
127+
128+ async def on_order_updated (event : exchange .OrderEvent ):
129+ order_events .append (event )
130+ all_events .append (event )
131+
132+ async def on_bar (bar_event ):
90133 bar_events .append (bar_event )
134+ all_events .append (bar_event )
91135
92136 async def impl ():
93137 e .subscribe_to_bar_events (pair , on_bar )
94138 e .subscribe_to_order_events (on_order_updated )
139+
95140 e .add_bar_source (
96141 event .FifoQueueEventSource (events = [
97142 bar .BarEvent (
@@ -104,12 +149,13 @@ async def impl():
104149 ])
105150 )
106151
152+ await e .create_limit_order (OrderOperation .BUY , pair , Decimal (1 ), Decimal (10 ))
107153 await backtesting_dispatcher .run ()
108154
109155 assert len (bar_events ) == 1
110- assert len (order_events ) == 2
111- assert order_events [0 ].is_open is True
112- assert order_events [ 1 ]. is_open is False
156+ assert len (order_events ) == 1
157+ assert order_events [0 ].order . amount_filled == Decimal ( 1 )
158+ assert all_events == order_events + bar_events
113159
114160 asyncio .run (impl ())
115161
0 commit comments