async def test_trailing_stop_with_new_price(trailing_stop_order): trailing_stop_order, order_price, price_events_manager = await initialize_trailing_stop( trailing_stop_order) await trailing_stop_order.set_trailing_percent(2) new_trailing_price = random_price(min_value=order_price + 1) # set mark price set_mark_price(trailing_stop_order, new_trailing_price) # move trailing price price_events_manager.handle_recent_trades([ random_recent_trade(price=new_trailing_price, timestamp=trailing_stop_order.timestamp) ]) await wait_asyncio_next_cycle() assert not trailing_stop_order.is_filled() # test fill stop loss with new order price reference price_events_manager.handle_recent_trades([ random_recent_trade(price=get_price_percent( new_trailing_price, trailing_stop_order.trailing_percent), timestamp=trailing_stop_order.timestamp) ]) await wait_asyncio_next_cycle() assert trailing_stop_order.is_filled()
async def test_trailing_stop_trigger(trailing_stop_order): trailing_stop_order, order_price, price_events_manager = await initialize_trailing_stop( trailing_stop_order) await trailing_stop_order.set_trailing_percent(10) max_trailing_hit_price = get_price_percent( order_price, trailing_stop_order.trailing_percent) # set mark price set_mark_price(trailing_stop_order, order_price) price_events_manager.handle_recent_trades([ random_recent_trade(price=random_price( min_value=max_trailing_hit_price, max_value=order_price - 1), timestamp=trailing_stop_order.timestamp) ]) await wait_asyncio_next_cycle() assert not trailing_stop_order.is_filled() price_events_manager.handle_recent_trades([ random_recent_trade(price=order_price, timestamp=trailing_stop_order.timestamp - 1) ]) await wait_asyncio_next_cycle() assert not trailing_stop_order.is_filled() price_events_manager.handle_recent_trades([ random_recent_trade(price=order_price, timestamp=trailing_stop_order.timestamp) ]) await wait_asyncio_next_cycle() assert not trailing_stop_order.is_filled() price_events_manager.handle_recent_trades([ random_recent_trade(price=max_trailing_hit_price, timestamp=trailing_stop_order.timestamp) ]) await wait_asyncio_next_cycle() assert trailing_stop_order.is_filled()