Split fee detection from trades from general logic
This commit is contained in:
parent
371100a97c
commit
7558e4bffe
@ -1164,10 +1164,12 @@ class FreqtradeBot:
|
|||||||
|
|
||||||
def get_real_amount(self, trade: Trade, order: Dict, order_amount: float = None) -> float:
|
def get_real_amount(self, trade: Trade, order: Dict, order_amount: float = None) -> float:
|
||||||
"""
|
"""
|
||||||
Get real amount for the trade
|
Detect and update trade fee.
|
||||||
|
Calls trade.update_fee() uppon correct detection.
|
||||||
|
Returns modified amount if the fee was taken from the destination currency.
|
||||||
Necessary for exchanges which charge fees in base currency (e.g. binance)
|
Necessary for exchanges which charge fees in base currency (e.g. binance)
|
||||||
|
:return: identical (or new) amount for the trade
|
||||||
"""
|
"""
|
||||||
fee_currency = None
|
|
||||||
# Init variables
|
# Init variables
|
||||||
if order_amount is None:
|
if order_amount is None:
|
||||||
order_amount = order['amount']
|
order_amount = order['amount']
|
||||||
@ -1186,17 +1188,23 @@ class FreqtradeBot:
|
|||||||
f"to {order_amount}) from Order")
|
f"to {order_amount}) from Order")
|
||||||
trade.update_fee(fee_cost, fee_currency, fee_rate, order['side'])
|
trade.update_fee(fee_cost, fee_currency, fee_rate, order['side'])
|
||||||
return order_amount
|
return order_amount
|
||||||
|
return self.fee_detection_from_trades(trade, order, order_amount)
|
||||||
|
|
||||||
# Fallback to Trades
|
def fee_detection_from_trades(self, trade: Trade, order: Dict, order_amount: float) -> float:
|
||||||
|
"""
|
||||||
|
fee-detection fallback to Trades. Parses result of fetch_my_trades to get correct fee.
|
||||||
|
"""
|
||||||
trades = self.exchange.get_trades_for_order(trade.open_order_id, trade.pair,
|
trades = self.exchange.get_trades_for_order(trade.open_order_id, trade.pair,
|
||||||
trade.open_date)
|
trade.open_date)
|
||||||
|
|
||||||
if len(trades) == 0:
|
if len(trades) == 0:
|
||||||
logger.info("Applying fee on amount for %s failed: myTrade-Dict empty found", trade)
|
logger.info("Applying fee on amount for %s failed: myTrade-Dict empty found", trade)
|
||||||
return order_amount
|
return order_amount
|
||||||
|
fee_currency = None
|
||||||
amount = 0
|
amount = 0
|
||||||
fee_abs = 0.0
|
fee_abs = 0.0
|
||||||
fee_cost = 0.0
|
fee_cost = 0.0
|
||||||
|
trade_base_currency = self.exchange.get_pair_base_currency(trade.pair)
|
||||||
fee_rate_array: List[float] = []
|
fee_rate_array: List[float] = []
|
||||||
for exectrade in trades:
|
for exectrade in trades:
|
||||||
amount += exectrade['amount']
|
amount += exectrade['amount']
|
||||||
|
Loading…
Reference in New Issue
Block a user