Skip to content

critical BUG, market order in QC is only submitted , but in Binance is FILLED #9339

@lukaspistelak

Description

@lukaspistelak

Expected Behavior

if is order filled > call on_order_event method

when its called MARKET ORDER: create only 5 trades!


2026-03-17 00:30:00  Strategy LONG TRADE, SL , TP ,self.time, position_size , entry_price,  : (74670.9, 75428.2, '2026-03-17 00:30:00', 0.002, 75048.6) 
2026-03-17 02:15:00  Strategy LONG TRADE, SL , TP ,self.time, position_size , entry_price,  : (74821.0, 75596.6, '2026-03-17 02:15:00', 0.002, 75207.8) 
2026-03-17 03:45:00  Strategy LONG TRADE, SL , TP ,self.time, position_size , entry_price,  : (74006.0, 74780.2, '2026-03-17 03:45:00', 0.002, 74392.1) 
2026-03-17 04:45:00  Strategy LONG TRADE, SL , TP ,self.time, position_size , entry_price,  : (73632.4, 74408.4, '2026-03-17 04:45:00', 0.002, 74019.4) 
2026-03-17 05:45:00  Strategy LONG TRADE, SL , TP ,self.time, position_size , entry_price,  : (73504.3, 74285.2, '2026-03-17 05:45:00', 0.002, 73893.7) 

Actual Behavior

2026-03-17 00:30:00 on_order_event OrderId=1, Time=2026-03-17 00:30:00.001926+00:00, Symbol=BTCUSDT, Status=Submitted, order_type=Market 2026-03-17 02:15:00 on_order_event OrderId=2, Time=2026-03-17 02:15:00.002993+00:00, Symbol=BTCUSDT, Status=Submitted, order_type=Market 2026-03-17 03:45:00 on_order_event OrderId=3, Time=2026-03-17 03:45:00.002918+00:00, Symbol=BTCUSDT, Status=Submitted, order_type=Market 2026-03-17 04:45:00 on_order_event OrderId=4, Time=2026-03-17 04:45:00.000605+00:00, Symbol=BTCUSDT, Status=Submitted, order_type=Market 2026-03-17 05:45:00 on_order_event OrderId=5, Time=2026-03-17 05:45:00.001071+00:00, Symbol=BTCUSDT, Status=Submitted, order_type=Market

on_order_event is only called when its Submitted _!

AND this so bad :

Instead of creating 5 trades, it creates around 20 trades on Binance!

Image

So only the market order is filled, without TP and SL, so I constantly lose money.

Potential Solution

i Dont know

Reproducing the Problem

self.debug(
                f" Strategy LONG TRADE, SL , TP ,self.time, position_size , entry_price,  : {stop_loss_price, take_profit_price, time_str, position_size, entry_price,} ")

            meta_data_order = {
                "side": "LONG",
                "sl": stop_loss_price,
                "tp": take_profit_price,
                "position_size": position_size
            }

            ticket = self.market_order(symbol=self.symbol , quantity=position_size,
                                       tag=json.dumps(meta_data_order))



     def on_order_event(self, order_event: OrderEvent) -> None:

        self.debug(
            f"on_order_event "
            f"OrderId={order_event.ticket.OrderId}, "
            f"Time={order_event.ticket.Time}, "
            f"Symbol={order_event.ticket.Symbol.Value}, "
            f"Status={order_event.ticket.Status}, "
            f"order_type={order_event.ticket.order_type }"
        )

        if order_event.status != OrderStatus.FILLED:
            return


        # mame 2 situace:

        #     1: prijde new main TRADE market Filled = to je novy trade na LONG > otevri k nemu SL a TP trady
        #
        #     2: Fill  se TP nebo SL trade , musim uzavrit SL/ TP trades
        #
        # navrh architektury:
        #
        #     vse logovat, abych videl kde je problem
        #
        # otazky:
        #     je FILL TP/ SL reduce ?

        new_order_id = order_event.order_id



        match order_event.ticket.order_type:

            case OrderType.MARKET:
                # when we have new order, we have to create new TP, SL orders!

                order_tag = order_event.ticket.tag
                meta_data_order = json.loads(order_tag)

                self.debug(f" MARKET ORDER : {meta_data_order, order_event.ticket.quantity }")

                sl_ticket = self.stop_market_order( self.symbol, - meta_data_order.get('position_size'),     meta_data_order.get('sl') )
                tp_ticket = self.limit_order( self.symbol, - meta_data_order.get('position_size') , meta_data_order.get('tp') )


                self.trade_manager_dict[sl_ticket.order_id] =  {"sl_ticket":sl_ticket , "tp_ticket":tp_ticket, "main_trade_id" :False  }
                self.trade_manager_dict[tp_ticket.order_id] =  {"sl_ticket":sl_ticket , "tp_ticket":tp_ticket, "main_trade_id" :False   }


                # self.debug(f" sl_ticket, tp_ticket: {sl_ticket.status} ,{tp_ticket.status}  ")




            case OrderType.STOP_MARKET:

                # kdyz se hitnul SL, musime uzavrit TP order

                tp_ticket = self.trade_manager_dict.get(new_order_id).get("tp_ticket")
                tp_ticket.cancel()

                # self.debug(f" STOP_MARKET ORDER : { tp_ticket.status  }")


            case OrderType.LIMIT:

                sl_ticket = self.trade_manager_dict.get(new_order_id).get("sl_ticket")
                sl_ticket.cancel()

                # self.debug(f" LIMIT ORDER : { sl_ticket.status  }")

        self.debug(
            f" ==================================================================================================== ")

System Information

Binance futures API,
lean 1.0.224

Ubuntu 25.

Checklist

  • I have completely filled out this template
  • I have confirmed that this issue exists on the current master branch
  • I have confirmed that this is not a duplicate issue by searching issues
  • I have provided detailed steps to reproduce the issue

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions