async def _trigger_arbitrage_secondary_order(self, arbitrage, filled_order,
                                              filled_quantity_before_fees):
     arbitrage.passed_initial_order = True
     now_buying = arbitrage.state is trading_enums.EvaluatorStates.SHORT
     # a SHORT arbitrage is an initial SELL followed by a BUY order.
     # Here in the secondary order construction:
     # - Buy (at a lower price) when the arbitrage is a SHORT
     # - Sell (at a higher price) when the arbitrage is a LONG
     paid_fees_in_quote = trading_personal_data.total_fees_from_order_dict(
         filled_order, self.quote)
     secondary_quantity = filled_quantity_before_fees - paid_fees_in_quote
     filled_price = filled_order[
         trading_enums.ExchangeConstantsOrderColumns.PRICE.value]
     if now_buying:
         arbitrage.initial_before_fee_filled_quantity = filled_quantity_before_fees
     else:
         arbitrage.initial_before_fee_filled_quantity = filled_quantity_before_fees * filled_price
     if now_buying:
         # buying at a lower price: buy more than what has been sold, take fees into account
         fees_in_base = trading_personal_data.total_fees_from_order_dict(
             filled_order, self.base)
         secondary_base_amount = filled_price * secondary_quantity - fees_in_base
         secondary_quantity = secondary_base_amount / arbitrage.target_price
         # reduce quantity a bit to avoid python rounding issues,
         # remaining amount will be handled as dusts if necessary
         secondary_quantity = secondary_quantity * 0.99999
     await self._create_arbitrage_secondary_order(arbitrage,
                                                  secondary_quantity)
 async def order_filled_callback(self, filled_order):
     if filled_order[
         trading_enums.ExchangeConstantsOrderColumns.SIDE.value] == trading_enums.TradeOrderSide.BUY.value:
         self.state = trading_enums.EvaluatorStates.SHORT
         paid_fees = trading_personal_data.total_fees_from_order_dict(filled_order, self.base)
         sell_quantity = filled_order[trading_enums.ExchangeConstantsOrderColumns.FILLED.value] - paid_fees
         await self._create_sell_order_if_enabled(filled_order[trading_enums.ExchangeConstantsOrderColumns.ID.value],
                                                  sell_quantity,
                                                  filled_order[
                                                      trading_enums.ExchangeConstantsOrderColumns.PRICE.value])