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!
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
Expected Behavior
if is order filled > call on_order_event method
when its called MARKET ORDER: create only 5 trades!
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=Marketon_order_event is only called when its Submitted _!
AND this so bad :
Instead of creating 5 trades, it creates around 20 trades on Binance!
So only the market order is filled, without TP and SL, so I constantly lose money.
Potential Solution
i Dont know
Reproducing the Problem
System Information
Binance futures API,
lean 1.0.224
Ubuntu 25.
Checklist
masterbranch