set initial open_rate and amount in create_trade
This is mostly needed by dry_run
This commit is contained in:
parent
1e5b0e8726
commit
543857ddb2
@ -106,9 +106,7 @@ def cancel_order(order_id: str) -> None:
|
|||||||
|
|
||||||
def get_order(order_id: str) -> Dict:
|
def get_order(order_id: str) -> Dict:
|
||||||
if _CONF['dry_run']:
|
if _CONF['dry_run']:
|
||||||
return {
|
return {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return _API.get_order(order_id)
|
return _API.get_order(order_id)
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ def _process() -> None:
|
|||||||
logger.info('Got open order for %s', trade)
|
logger.info('Got open order for %s', trade)
|
||||||
trade.update(exchange.get_order(trade.open_order_id))
|
trade.update(exchange.get_order(trade.open_order_id))
|
||||||
|
|
||||||
if not close_trade_if_fulfilled(trade) and trade.open_rate:
|
if not close_trade_if_fulfilled(trade):
|
||||||
# Check if we can sell our current pair
|
# Check if we can sell our current pair
|
||||||
handle_trade(trade)
|
handle_trade(trade)
|
||||||
|
|
||||||
@ -198,6 +198,8 @@ def create_trade(stake_amount: float) -> Optional[Trade]:
|
|||||||
telegram.send_msg(message)
|
telegram.send_msg(message)
|
||||||
return Trade(pair=pair,
|
return Trade(pair=pair,
|
||||||
stake_amount=stake_amount,
|
stake_amount=stake_amount,
|
||||||
|
amount=amount,
|
||||||
|
open_rate=buy_limit,
|
||||||
open_date=datetime.utcnow(),
|
open_date=datetime.utcnow(),
|
||||||
exchange=exchange.get_name().upper(),
|
exchange=exchange.get_name().upper(),
|
||||||
open_order_id=order_id,
|
open_order_id=order_id,
|
||||||
|
@ -78,12 +78,12 @@ class Trade(Base):
|
|||||||
:param order: order retrieved by exchange.get_order()
|
:param order: order retrieved by exchange.get_order()
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
if not order['closed']:
|
if not order.get('closed'):
|
||||||
return
|
return
|
||||||
|
|
||||||
logger.debug('Updating trade (id=%d) ...', self.id)
|
logger.debug('Updating trade (id=%d) ...', self.id)
|
||||||
if order['type'] == 'LIMIT_BUY':
|
if order['type'] == 'LIMIT_BUY':
|
||||||
# Set open rate and actual amount
|
# Update open rate and actual amount
|
||||||
self.open_rate = order['rate']
|
self.open_rate = order['rate']
|
||||||
self.amount = order['amount']
|
self.amount = order['amount']
|
||||||
elif order['type'] == 'LIMIT_SELL':
|
elif order['type'] == 'LIMIT_SELL':
|
||||||
|
@ -118,14 +118,13 @@ def _status(bot: Bot, update: Update) -> None:
|
|||||||
else:
|
else:
|
||||||
for trade in trades:
|
for trade in trades:
|
||||||
order = exchange.get_order(trade.open_order_id)
|
order = exchange.get_order(trade.open_order_id)
|
||||||
if trade.open_rate:
|
# calculate profit and send message to user
|
||||||
# calculate profit and send message to user
|
current_rate = exchange.get_ticker(trade.pair)['bid']
|
||||||
current_rate = exchange.get_ticker(trade.pair)['bid']
|
current_profit = trade.calc_profit(current_rate)
|
||||||
current_profit = trade.calc_profit(current_rate)
|
fmt_close_profit = '{:.2f}%'.format(
|
||||||
fmt_close_profit = '{:.2f}%'.format(
|
round(trade.close_profit * 100, 2)
|
||||||
round(trade.close_profit * 100, 2)
|
) if trade.close_profit else None
|
||||||
) if trade.close_profit else None
|
message = """
|
||||||
message = """
|
|
||||||
*Trade ID:* `{trade_id}`
|
*Trade ID:* `{trade_id}`
|
||||||
*Current Pair:* [{pair}]({market_url})
|
*Current Pair:* [{pair}]({market_url})
|
||||||
*Open Since:* `{date}`
|
*Open Since:* `{date}`
|
||||||
@ -136,38 +135,21 @@ def _status(bot: Bot, update: Update) -> None:
|
|||||||
*Close Profit:* `{close_profit}`
|
*Close Profit:* `{close_profit}`
|
||||||
*Current Profit:* `{current_profit:.2f}%`
|
*Current Profit:* `{current_profit:.2f}%`
|
||||||
*Open Order:* `{open_order}`
|
*Open Order:* `{open_order}`
|
||||||
""".format(
|
""".format(
|
||||||
trade_id=trade.id,
|
trade_id=trade.id,
|
||||||
pair=trade.pair,
|
pair=trade.pair,
|
||||||
market_url=exchange.get_pair_detail_url(trade.pair),
|
market_url=exchange.get_pair_detail_url(trade.pair),
|
||||||
date=arrow.get(trade.open_date).humanize(),
|
date=arrow.get(trade.open_date).humanize(),
|
||||||
open_rate=trade.open_rate,
|
open_rate=trade.open_rate,
|
||||||
close_rate=trade.close_rate,
|
close_rate=trade.close_rate,
|
||||||
current_rate=current_rate,
|
current_rate=current_rate,
|
||||||
amount=round(trade.amount, 8),
|
amount=round(trade.amount, 8),
|
||||||
close_profit=fmt_close_profit,
|
close_profit=fmt_close_profit,
|
||||||
current_profit=round(current_profit * 100, 2),
|
current_profit=round(current_profit * 100, 2),
|
||||||
open_order='{} ({})'.format(
|
open_order='{} ({})'.format(
|
||||||
order['remaining'], order['type']
|
order['remaining'], order['type']
|
||||||
) if order else None,
|
) if order else None,
|
||||||
)
|
)
|
||||||
else:
|
|
||||||
message = """
|
|
||||||
*Trade ID:* `{trade_id}`
|
|
||||||
*Current Pair:* [{pair}]({market_url})
|
|
||||||
*Open Since:* `{date}`
|
|
||||||
*Open Order:* `{open_order}`
|
|
||||||
|
|
||||||
`Waiting until order is fulfilled.`
|
|
||||||
""".format(
|
|
||||||
trade_id=trade.id,
|
|
||||||
pair=trade.pair,
|
|
||||||
market_url=exchange.get_pair_detail_url(trade.pair),
|
|
||||||
date=arrow.get(trade.open_date).humanize(),
|
|
||||||
open_order='{} ({})'.format(
|
|
||||||
order['remaining'], order['type']
|
|
||||||
) if order else None,
|
|
||||||
)
|
|
||||||
send_msg(message, bot=bot)
|
send_msg(message, bot=bot)
|
||||||
|
|
||||||
|
|
||||||
|
@ -99,7 +99,6 @@ def test_status_handle(conf, update, mocker):
|
|||||||
_status(bot=MagicBot(), update=update)
|
_status(bot=MagicBot(), update=update)
|
||||||
|
|
||||||
assert msg_mock.call_count == 3
|
assert msg_mock.call_count == 3
|
||||||
assert 'Waiting until order is fulfilled' in msg_mock.call_args_list[-2][0][0]
|
|
||||||
assert '[BTC_ETH]' in msg_mock.call_args_list[-1][0][0]
|
assert '[BTC_ETH]' in msg_mock.call_args_list[-1][0][0]
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user