working on catching the 'sell insufficient funds error'
This commit is contained in:
parent
00aa1bee9d
commit
4322d40967
@ -82,11 +82,18 @@ class Bittrex(Exchange):
|
|||||||
data = _API.sell_limit(pair.replace('_', '-'), amount, rate)
|
data = _API.sell_limit(pair.replace('_', '-'), amount, rate)
|
||||||
if not data['success']:
|
if not data['success']:
|
||||||
Bittrex._validate_response(data)
|
Bittrex._validate_response(data)
|
||||||
raise OperationalException('{message} params=({pair}, {rate}, {amount})'.format(
|
if data['message'] == "INSUFFICIENT_FUNDS":
|
||||||
message=data['message'],
|
raise NotEnoughFundsExeption('{message} params=({pair}, {rate}, {amount})'.format(
|
||||||
pair=pair,
|
message=data['message'],
|
||||||
rate=rate,
|
pair=pair,
|
||||||
amount=amount))
|
rate=rate,
|
||||||
|
amount=amount))
|
||||||
|
else:
|
||||||
|
raise OperationalException('{message} params=({pair}, {rate}, {amount})'.format(
|
||||||
|
message=data['message'],
|
||||||
|
pair=pair,
|
||||||
|
rate=rate,
|
||||||
|
amount=amount))
|
||||||
return data['result']['uuid']
|
return data['result']['uuid']
|
||||||
|
|
||||||
def get_balance(self, currency: str) -> float:
|
def get_balance(self, currency: str) -> float:
|
||||||
|
@ -472,59 +472,64 @@ class FreqtradeBot(object):
|
|||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
# Execute sell and update trade record
|
# Execute sell and update trade record
|
||||||
order_id = exchange.sell(str(trade.pair), limit, trade.amount)
|
|
||||||
trade.open_order_id = order_id
|
|
||||||
|
|
||||||
fmt_exp_profit = round(trade.calc_profit_percent(rate=limit) * 100, 2)
|
# check if we have these funds first
|
||||||
profit_trade = trade.calc_profit(rate=limit)
|
try:
|
||||||
current_rate = exchange.get_ticker(trade.pair, False)['bid']
|
order_id = exchange.sell(str(trade.pair), limit, trade.amount)
|
||||||
profit = trade.calc_profit_percent(current_rate)
|
trade.open_order_id = order_id
|
||||||
|
|
||||||
message = "*{exchange}:* Selling\n" \
|
fmt_exp_profit = round(trade.calc_profit_percent(rate=limit) * 100, 2)
|
||||||
"*Current Pair:* [{pair}]({pair_url})\n" \
|
profit_trade = trade.calc_profit(rate=limit)
|
||||||
"*Limit:* `{limit}`\n" \
|
current_rate = exchange.get_ticker(trade.pair, False)['bid']
|
||||||
"*Amount:* `{amount}`\n" \
|
profit = trade.calc_profit_percent(current_rate)
|
||||||
"*Open Rate:* `{open_rate:.8f}`\n" \
|
|
||||||
"*Current Rate:* `{current_rate:.8f}`\n" \
|
|
||||||
"*Profit:* `{profit:.2f}%`" \
|
|
||||||
"".format(
|
|
||||||
exchange=trade.exchange,
|
|
||||||
pair=trade.pair,
|
|
||||||
pair_url=exchange.get_pair_detail_url(trade.pair),
|
|
||||||
limit=limit,
|
|
||||||
open_rate=trade.open_rate,
|
|
||||||
current_rate=current_rate,
|
|
||||||
amount=round(trade.amount, 8),
|
|
||||||
profit=round(profit * 100, 2),
|
|
||||||
)
|
|
||||||
|
|
||||||
# For regular case, when the configuration exists
|
message = "*{exchange}:* Selling\n" \
|
||||||
if 'stake_currency' in self.config and 'fiat_display_currency' in self.config:
|
"*Current Pair:* [{pair}]({pair_url})\n" \
|
||||||
fiat_converter = CryptoToFiatConverter()
|
"*Limit:* `{limit}`\n" \
|
||||||
profit_fiat = fiat_converter.convert_amount(
|
"*Amount:* `{amount}`\n" \
|
||||||
profit_trade,
|
"*Open Rate:* `{open_rate:.8f}`\n" \
|
||||||
self.config['stake_currency'],
|
"*Current Rate:* `{current_rate:.8f}`\n" \
|
||||||
self.config['fiat_display_currency']
|
"*Profit:* `{profit:.2f}%`" \
|
||||||
)
|
"".format(
|
||||||
message += '` ({gain}: {profit_percent:.2f}%, {profit_coin:.8f} {coin}`' \
|
exchange=trade.exchange,
|
||||||
'` / {profit_fiat:.3f} {fiat})`' \
|
pair=trade.pair,
|
||||||
''.format(
|
pair_url=exchange.get_pair_detail_url(trade.pair),
|
||||||
gain="profit" if fmt_exp_profit > 0 else "loss",
|
limit=limit,
|
||||||
profit_percent=fmt_exp_profit,
|
open_rate=trade.open_rate,
|
||||||
profit_coin=profit_trade,
|
current_rate=current_rate,
|
||||||
coin=self.config['stake_currency'],
|
amount=round(trade.amount, 8),
|
||||||
profit_fiat=profit_fiat,
|
profit=round(profit * 100, 2),
|
||||||
fiat=self.config['fiat_display_currency'],
|
|
||||||
)
|
)
|
||||||
# Because telegram._forcesell does not have the configuration
|
|
||||||
# Ignore the FIAT value and does not show the stake_currency as well
|
|
||||||
else:
|
|
||||||
message += '` ({gain}: {profit_percent:.2f}%, {profit_coin:.8f})`'.format(
|
|
||||||
gain="profit" if fmt_exp_profit > 0 else "loss",
|
|
||||||
profit_percent=fmt_exp_profit,
|
|
||||||
profit_coin=profit_trade
|
|
||||||
)
|
|
||||||
|
|
||||||
# Send the message
|
# For regular case, when the configuration exists
|
||||||
self.rpc.send_msg(message)
|
if 'stake_currency' in self.config and 'fiat_display_currency' in self.config:
|
||||||
Trade.session.flush()
|
fiat_converter = CryptoToFiatConverter()
|
||||||
|
profit_fiat = fiat_converter.convert_amount(
|
||||||
|
profit_trade,
|
||||||
|
self.config['stake_currency'],
|
||||||
|
self.config['fiat_display_currency']
|
||||||
|
)
|
||||||
|
message += '` ({gain}: {profit_percent:.2f}%, {profit_coin:.8f} {coin}`' \
|
||||||
|
'` / {profit_fiat:.3f} {fiat})`' \
|
||||||
|
''.format(
|
||||||
|
gain="profit" if fmt_exp_profit > 0 else "loss",
|
||||||
|
profit_percent=fmt_exp_profit,
|
||||||
|
profit_coin=profit_trade,
|
||||||
|
coin=self.config['stake_currency'],
|
||||||
|
profit_fiat=profit_fiat,
|
||||||
|
fiat=self.config['fiat_display_currency'],
|
||||||
|
)
|
||||||
|
# Because telegram._forcesell does not have the configuration
|
||||||
|
# Ignore the FIAT value and does not show the stake_currency as well
|
||||||
|
else:
|
||||||
|
message += '` ({gain}: {profit_percent:.2f}%, {profit_coin:.8f})`'.format(
|
||||||
|
gain="profit" if fmt_exp_profit > 0 else "loss",
|
||||||
|
profit_percent=fmt_exp_profit,
|
||||||
|
profit_coin=profit_trade
|
||||||
|
)
|
||||||
|
|
||||||
|
# Send the message
|
||||||
|
self.rpc.send_msg(message)
|
||||||
|
Trade.session.flush()
|
||||||
|
except NotEnoughFundsExeption:
|
||||||
|
logger.warning('Sell order failed, due to not having enough funds for %s.', trade)
|
||||||
|
Loading…
Reference in New Issue
Block a user