sell_order_status -> exit_order_status
This commit is contained in:
parent
b09ac3e5b6
commit
c899eabe1d
@ -1348,7 +1348,7 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
trade.orders.append(order_obj)
|
trade.orders.append(order_obj)
|
||||||
|
|
||||||
trade.open_order_id = order['id']
|
trade.open_order_id = order['id']
|
||||||
trade.sell_order_status = ''
|
trade.exit_order_status = ''
|
||||||
trade.close_rate_requested = limit
|
trade.close_rate_requested = limit
|
||||||
trade.sell_reason = exit_tag or sell_reason.sell_reason
|
trade.sell_reason = exit_tag or sell_reason.sell_reason
|
||||||
|
|
||||||
@ -1414,10 +1414,10 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
"""
|
"""
|
||||||
Sends rpc notification when a sell cancel occurred.
|
Sends rpc notification when a sell cancel occurred.
|
||||||
"""
|
"""
|
||||||
if trade.sell_order_status == reason:
|
if trade.exit_order_status == reason:
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
trade.sell_order_status = reason
|
trade.exit_order_status = reason
|
||||||
|
|
||||||
profit_rate = trade.close_rate if trade.close_rate else trade.close_rate_requested
|
profit_rate = trade.close_rate if trade.close_rate else trade.close_rate_requested
|
||||||
profit_trade = trade.calc_profit(rate=profit_rate)
|
profit_trade = trade.calc_profit(rate=profit_rate)
|
||||||
|
@ -75,7 +75,7 @@ def migrate_trades_table(decl_base, inspector, engine, table_back_name: str, col
|
|||||||
cols, 'close_profit_abs',
|
cols, 'close_profit_abs',
|
||||||
f"(amount * close_rate * (1 - {fee_close})) - {open_trade_value}")
|
f"(amount * close_rate * (1 - {fee_close})) - {open_trade_value}")
|
||||||
# TODO-lev: update to exit order status
|
# TODO-lev: update to exit order status
|
||||||
sell_order_status = get_column_def(cols, 'sell_order_status', 'null')
|
exit_order_status = get_column_def(cols, 'exit_order_status', 'null')
|
||||||
amount_requested = get_column_def(cols, 'amount_requested', 'amount')
|
amount_requested = get_column_def(cols, 'amount_requested', 'amount')
|
||||||
|
|
||||||
# Schema migration necessary
|
# Schema migration necessary
|
||||||
@ -98,7 +98,7 @@ def migrate_trades_table(decl_base, inspector, engine, table_back_name: str, col
|
|||||||
stake_amount, amount, amount_requested, open_date, close_date, open_order_id,
|
stake_amount, amount, amount_requested, open_date, close_date, open_order_id,
|
||||||
stop_loss, stop_loss_pct, initial_stop_loss, initial_stop_loss_pct,
|
stop_loss, stop_loss_pct, initial_stop_loss, initial_stop_loss_pct,
|
||||||
stoploss_order_id, stoploss_last_update,
|
stoploss_order_id, stoploss_last_update,
|
||||||
max_rate, min_rate, sell_reason, sell_order_status, strategy, enter_tag,
|
max_rate, min_rate, sell_reason, exit_order_status, strategy, enter_tag,
|
||||||
timeframe, open_trade_value, close_profit_abs,
|
timeframe, open_trade_value, close_profit_abs,
|
||||||
trading_mode, leverage, isolated_liq, is_short,
|
trading_mode, leverage, isolated_liq, is_short,
|
||||||
interest_rate, funding_fees
|
interest_rate, funding_fees
|
||||||
@ -115,7 +115,7 @@ def migrate_trades_table(decl_base, inspector, engine, table_back_name: str, col
|
|||||||
{initial_stop_loss_pct} initial_stop_loss_pct,
|
{initial_stop_loss_pct} initial_stop_loss_pct,
|
||||||
{stoploss_order_id} stoploss_order_id, {stoploss_last_update} stoploss_last_update,
|
{stoploss_order_id} stoploss_order_id, {stoploss_last_update} stoploss_last_update,
|
||||||
{max_rate} max_rate, {min_rate} min_rate, {sell_reason} sell_reason,
|
{max_rate} max_rate, {min_rate} min_rate, {sell_reason} sell_reason,
|
||||||
{sell_order_status} sell_order_status,
|
{exit_order_status} exit_order_status,
|
||||||
{strategy} strategy, {enter_tag} enter_tag, {timeframe} timeframe,
|
{strategy} strategy, {enter_tag} enter_tag, {timeframe} timeframe,
|
||||||
{open_trade_value} open_trade_value, {close_profit_abs} close_profit_abs,
|
{open_trade_value} open_trade_value, {close_profit_abs} close_profit_abs,
|
||||||
{trading_mode} trading_mode, {leverage} leverage, {isolated_liq} isolated_liq,
|
{trading_mode} trading_mode, {leverage} leverage, {isolated_liq} isolated_liq,
|
||||||
|
@ -262,7 +262,7 @@ class LocalTrade():
|
|||||||
# Lowest price reached
|
# Lowest price reached
|
||||||
min_rate: float = 0.0
|
min_rate: float = 0.0
|
||||||
sell_reason: str = ''
|
sell_reason: str = ''
|
||||||
sell_order_status: str = ''
|
exit_order_status: str = ''
|
||||||
strategy: str = ''
|
strategy: str = ''
|
||||||
enter_tag: Optional[str] = None
|
enter_tag: Optional[str] = None
|
||||||
timeframe: Optional[int] = None
|
timeframe: Optional[int] = None
|
||||||
@ -436,7 +436,7 @@ class LocalTrade():
|
|||||||
'profit_abs': self.close_profit_abs,
|
'profit_abs': self.close_profit_abs,
|
||||||
|
|
||||||
'sell_reason': self.sell_reason,
|
'sell_reason': self.sell_reason,
|
||||||
'sell_order_status': self.sell_order_status,
|
'exit_order_status': self.exit_order_status,
|
||||||
'stop_loss_abs': self.stop_loss,
|
'stop_loss_abs': self.stop_loss,
|
||||||
'stop_loss_ratio': self.stop_loss_pct if self.stop_loss_pct else None,
|
'stop_loss_ratio': self.stop_loss_pct if self.stop_loss_pct else None,
|
||||||
'stop_loss_pct': (self.stop_loss_pct * 100) if self.stop_loss_pct else None,
|
'stop_loss_pct': (self.stop_loss_pct * 100) if self.stop_loss_pct else None,
|
||||||
@ -593,7 +593,7 @@ class LocalTrade():
|
|||||||
self.close_profit = self.calc_profit_ratio()
|
self.close_profit = self.calc_profit_ratio()
|
||||||
self.close_profit_abs = self.calc_profit()
|
self.close_profit_abs = self.calc_profit()
|
||||||
self.is_open = False
|
self.is_open = False
|
||||||
self.sell_order_status = 'closed'
|
self.exit_order_status = 'closed'
|
||||||
self.open_order_id = None
|
self.open_order_id = None
|
||||||
if show_msg:
|
if show_msg:
|
||||||
logger.info(
|
logger.info(
|
||||||
@ -937,7 +937,7 @@ class Trade(_DECL_BASE, LocalTrade):
|
|||||||
# Lowest price reached
|
# Lowest price reached
|
||||||
min_rate = Column(Float, nullable=True)
|
min_rate = Column(Float, nullable=True)
|
||||||
sell_reason = Column(String(100), nullable=True)
|
sell_reason = Column(String(100), nullable=True)
|
||||||
sell_order_status = Column(String(100), nullable=True)
|
exit_order_status = Column(String(100), nullable=True)
|
||||||
strategy = Column(String(100), nullable=True)
|
strategy = Column(String(100), nullable=True)
|
||||||
enter_tag = Column(String(100), nullable=True)
|
enter_tag = Column(String(100), nullable=True)
|
||||||
timeframe = Column(Integer, nullable=True)
|
timeframe = Column(Integer, nullable=True)
|
||||||
|
@ -213,7 +213,7 @@ class TradeSchema(BaseModel):
|
|||||||
profit_abs: Optional[float]
|
profit_abs: Optional[float]
|
||||||
profit_fiat: Optional[float]
|
profit_fiat: Optional[float]
|
||||||
sell_reason: Optional[str]
|
sell_reason: Optional[str]
|
||||||
sell_order_status: Optional[str]
|
exit_order_status: Optional[str]
|
||||||
stop_loss_abs: Optional[float]
|
stop_loss_abs: Optional[float]
|
||||||
stop_loss_ratio: Optional[float]
|
stop_loss_ratio: Optional[float]
|
||||||
stop_loss_pct: Optional[float]
|
stop_loss_pct: Optional[float]
|
||||||
|
@ -233,7 +233,7 @@ class Telegram(RPCHandler):
|
|||||||
f"{emoji} *{msg['exchange']}:*"
|
f"{emoji} *{msg['exchange']}:*"
|
||||||
f" {enter_side['entered'] if is_fill else enter_side['enter']} {msg['pair']}"
|
f" {enter_side['entered'] if is_fill else enter_side['enter']} {msg['pair']}"
|
||||||
f" (#{msg['trade_id']})\n"
|
f" (#{msg['trade_id']})\n"
|
||||||
)
|
)
|
||||||
message += f"*Enter Tag:* `{msg['enter_tag']}`\n" if msg.get('enter_tag', None) else ""
|
message += f"*Enter Tag:* `{msg['enter_tag']}`\n" if msg.get('enter_tag', None) else ""
|
||||||
message += f"*Amount:* `{msg['amount']:.8f}`\n"
|
message += f"*Amount:* `{msg['amount']:.8f}`\n"
|
||||||
if msg.get('leverage') and msg.get('leverage', 1.0) != 1.0:
|
if msg.get('leverage') and msg.get('leverage', 1.0) != 1.0:
|
||||||
@ -435,8 +435,8 @@ class Telegram(RPCHandler):
|
|||||||
lines.append("*Stoploss distance:* `{stoploss_current_dist:.8f}` "
|
lines.append("*Stoploss distance:* `{stoploss_current_dist:.8f}` "
|
||||||
"`({stoploss_current_dist_ratio:.2%})`")
|
"`({stoploss_current_dist_ratio:.2%})`")
|
||||||
if r['open_order']:
|
if r['open_order']:
|
||||||
if r['sell_order_status']:
|
if r['exit_order_status']:
|
||||||
lines.append("*Open Order:* `{open_order}` - `{sell_order_status}`")
|
lines.append("*Open Order:* `{open_order}` - `{exit_order_status}`")
|
||||||
else:
|
else:
|
||||||
lines.append("*Open Order:* `{open_order}`")
|
lines.append("*Open Order:* `{open_order}`")
|
||||||
|
|
||||||
@ -1318,7 +1318,7 @@ class Telegram(RPCHandler):
|
|||||||
"Avg. holding durationsfor buys and sells.`\n"
|
"Avg. holding durationsfor buys and sells.`\n"
|
||||||
"*/help:* `This help message`\n"
|
"*/help:* `This help message`\n"
|
||||||
"*/version:* `Show version`"
|
"*/version:* `Show version`"
|
||||||
)
|
)
|
||||||
|
|
||||||
self._send_msg(message, parse_mode=ParseMode.MARKDOWN)
|
self._send_msg(message, parse_mode=ParseMode.MARKDOWN)
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ def test_rpc_trade_status(default_conf, ticker, fee, mocker) -> None:
|
|||||||
'open_trade_value': 0.0010025,
|
'open_trade_value': 0.0010025,
|
||||||
'close_rate_requested': ANY,
|
'close_rate_requested': ANY,
|
||||||
'sell_reason': ANY,
|
'sell_reason': ANY,
|
||||||
'sell_order_status': ANY,
|
'exit_order_status': ANY,
|
||||||
'min_rate': ANY,
|
'min_rate': ANY,
|
||||||
'max_rate': ANY,
|
'max_rate': ANY,
|
||||||
'strategy': ANY,
|
'strategy': ANY,
|
||||||
@ -139,7 +139,7 @@ def test_rpc_trade_status(default_conf, ticker, fee, mocker) -> None:
|
|||||||
'open_trade_value': ANY,
|
'open_trade_value': ANY,
|
||||||
'close_rate_requested': ANY,
|
'close_rate_requested': ANY,
|
||||||
'sell_reason': ANY,
|
'sell_reason': ANY,
|
||||||
'sell_order_status': ANY,
|
'exit_order_status': ANY,
|
||||||
'min_rate': ANY,
|
'min_rate': ANY,
|
||||||
'max_rate': ANY,
|
'max_rate': ANY,
|
||||||
'strategy': ANY,
|
'strategy': ANY,
|
||||||
|
@ -956,7 +956,7 @@ def test_api_status(botclient, mocker, ticker, fee, markets, is_short,
|
|||||||
'open_rate_requested': ANY,
|
'open_rate_requested': ANY,
|
||||||
'open_trade_value': open_trade_value,
|
'open_trade_value': open_trade_value,
|
||||||
'sell_reason': None,
|
'sell_reason': None,
|
||||||
'sell_order_status': None,
|
'exit_order_status': None,
|
||||||
'strategy': CURRENT_TEST_STRATEGY,
|
'strategy': CURRENT_TEST_STRATEGY,
|
||||||
'buy_tag': None,
|
'buy_tag': None,
|
||||||
'enter_tag': None,
|
'enter_tag': None,
|
||||||
@ -1035,8 +1035,8 @@ def test_api_blacklist(botclient, mocker):
|
|||||||
"NOTHING/BTC": {
|
"NOTHING/BTC": {
|
||||||
"error_msg": "Pair NOTHING/BTC is not in the current blacklist."
|
"error_msg": "Pair NOTHING/BTC is not in the current blacklist."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
rc = client_delete(
|
rc = client_delete(
|
||||||
client,
|
client,
|
||||||
f"{BASE_URI}/blacklist?pairs_to_delete=HOT/BTC&pairs_to_delete=ETH/BTC")
|
f"{BASE_URI}/blacklist?pairs_to_delete=HOT/BTC&pairs_to_delete=ETH/BTC")
|
||||||
@ -1147,7 +1147,7 @@ def test_api_forcebuy(botclient, mocker, fee):
|
|||||||
'open_rate_requested': None,
|
'open_rate_requested': None,
|
||||||
'open_trade_value': 0.24605460,
|
'open_trade_value': 0.24605460,
|
||||||
'sell_reason': None,
|
'sell_reason': None,
|
||||||
'sell_order_status': None,
|
'exit_order_status': None,
|
||||||
'strategy': CURRENT_TEST_STRATEGY,
|
'strategy': CURRENT_TEST_STRATEGY,
|
||||||
'buy_tag': None,
|
'buy_tag': None,
|
||||||
'enter_tag': None,
|
'enter_tag': None,
|
||||||
|
@ -196,7 +196,7 @@ def test_telegram_status(default_conf, update, mocker) -> None:
|
|||||||
'profit_ratio': -0.0059,
|
'profit_ratio': -0.0059,
|
||||||
'initial_stop_loss_abs': 1.098e-05,
|
'initial_stop_loss_abs': 1.098e-05,
|
||||||
'stop_loss_abs': 1.099e-05,
|
'stop_loss_abs': 1.099e-05,
|
||||||
'sell_order_status': None,
|
'exit_order_status': None,
|
||||||
'initial_stop_loss_ratio': -0.0005,
|
'initial_stop_loss_ratio': -0.0005,
|
||||||
'stoploss_current_dist': 1e-08,
|
'stoploss_current_dist': 1e-08,
|
||||||
'stoploss_current_dist_ratio': -0.0002,
|
'stoploss_current_dist_ratio': -0.0002,
|
||||||
@ -544,7 +544,7 @@ def test_weekly_wrong_input(default_conf, update, ticker, mocker) -> None:
|
|||||||
context.args = ["this week"]
|
context.args = ["this week"]
|
||||||
telegram._weekly(update=update, context=context)
|
telegram._weekly(update=update, context=context)
|
||||||
assert str('Weekly Profit over the last 8 weeks (starting from Monday)</b>:') \
|
assert str('Weekly Profit over the last 8 weeks (starting from Monday)</b>:') \
|
||||||
in msg_mock.call_args_list[0][0][0]
|
in msg_mock.call_args_list[0][0][0]
|
||||||
|
|
||||||
|
|
||||||
def test_monthly_handle(default_conf, update, ticker, limit_buy_order, fee,
|
def test_monthly_handle(default_conf, update, ticker, limit_buy_order, fee,
|
||||||
@ -1769,7 +1769,7 @@ def test_send_msg_protection_notification(default_conf, mocker, time_machine) ->
|
|||||||
(RPCMessageType.BUY_FILL, 'Longed', 'long_signal_01', 1.0),
|
(RPCMessageType.BUY_FILL, 'Longed', 'long_signal_01', 1.0),
|
||||||
(RPCMessageType.BUY_FILL, 'Longed', 'long_signal_02', 2.0),
|
(RPCMessageType.BUY_FILL, 'Longed', 'long_signal_02', 2.0),
|
||||||
(RPCMessageType.SHORT_FILL, 'Shorted', 'short_signal_01', 2.0),
|
(RPCMessageType.SHORT_FILL, 'Shorted', 'short_signal_01', 2.0),
|
||||||
])
|
])
|
||||||
def test_send_msg_buy_fill_notification(default_conf, mocker, message_type, entered,
|
def test_send_msg_buy_fill_notification(default_conf, mocker, message_type, entered,
|
||||||
enter_signal, leverage) -> None:
|
enter_signal, leverage) -> None:
|
||||||
|
|
||||||
@ -1799,7 +1799,7 @@ def test_send_msg_buy_fill_notification(default_conf, mocker, message_type, ente
|
|||||||
f"{leverage_text}"
|
f"{leverage_text}"
|
||||||
'*Open Rate:* `0.00001099`\n'
|
'*Open Rate:* `0.00001099`\n'
|
||||||
'*Total:* `(0.00100000 BTC, 12.345 USD)`'
|
'*Total:* `(0.00100000 BTC, 12.345 USD)`'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_send_msg_sell_notification(default_conf, mocker) -> None:
|
def test_send_msg_sell_notification(default_conf, mocker) -> None:
|
||||||
@ -1841,7 +1841,7 @@ def test_send_msg_sell_notification(default_conf, mocker) -> None:
|
|||||||
'*Open Rate:* `0.00007500`\n'
|
'*Open Rate:* `0.00007500`\n'
|
||||||
'*Current Rate:* `0.00003201`\n'
|
'*Current Rate:* `0.00003201`\n'
|
||||||
'*Close Rate:* `0.00003201`'
|
'*Close Rate:* `0.00003201`'
|
||||||
)
|
)
|
||||||
|
|
||||||
msg_mock.reset_mock()
|
msg_mock.reset_mock()
|
||||||
telegram.send_msg({
|
telegram.send_msg({
|
||||||
@ -1875,7 +1875,7 @@ def test_send_msg_sell_notification(default_conf, mocker) -> None:
|
|||||||
'*Open Rate:* `0.00007500`\n'
|
'*Open Rate:* `0.00007500`\n'
|
||||||
'*Current Rate:* `0.00003201`\n'
|
'*Current Rate:* `0.00003201`\n'
|
||||||
'*Close Rate:* `0.00003201`'
|
'*Close Rate:* `0.00003201`'
|
||||||
)
|
)
|
||||||
# Reset singleton function to avoid random breaks
|
# Reset singleton function to avoid random breaks
|
||||||
telegram._rpc._fiat_converter.convert_amount = old_convamount
|
telegram._rpc._fiat_converter.convert_amount = old_convamount
|
||||||
|
|
||||||
@ -2039,7 +2039,7 @@ def test_send_msg_buy_notification_no_fiat(
|
|||||||
('Long', 'long_signal_01', 1.0),
|
('Long', 'long_signal_01', 1.0),
|
||||||
('Long', 'long_signal_01', 5.0),
|
('Long', 'long_signal_01', 5.0),
|
||||||
('Short', 'short_signal_01', 2.0),
|
('Short', 'short_signal_01', 2.0),
|
||||||
])
|
])
|
||||||
def test_send_msg_sell_notification_no_fiat(
|
def test_send_msg_sell_notification_no_fiat(
|
||||||
default_conf, mocker, direction, enter_signal, leverage) -> None:
|
default_conf, mocker, direction, enter_signal, leverage) -> None:
|
||||||
del default_conf['fiat_display_currency']
|
del default_conf['fiat_display_currency']
|
||||||
@ -2081,7 +2081,7 @@ def test_send_msg_sell_notification_no_fiat(
|
|||||||
'*Open Rate:* `0.00007500`\n'
|
'*Open Rate:* `0.00007500`\n'
|
||||||
'*Current Rate:* `0.00003201`\n'
|
'*Current Rate:* `0.00003201`\n'
|
||||||
'*Close Rate:* `0.00003201`'
|
'*Close Rate:* `0.00003201`'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('msg,expected', [
|
@pytest.mark.parametrize('msg,expected', [
|
||||||
|
@ -2798,7 +2798,7 @@ def test_handle_cancel_exit_limit(mocker, default_conf_usdt, fee) -> None:
|
|||||||
assert freqtrade.handle_cancel_exit(trade, order, reason
|
assert freqtrade.handle_cancel_exit(trade, order, reason
|
||||||
) == CANCEL_REASON['PARTIALLY_FILLED_KEEP_OPEN']
|
) == CANCEL_REASON['PARTIALLY_FILLED_KEEP_OPEN']
|
||||||
# Message should not be iterated again
|
# Message should not be iterated again
|
||||||
assert trade.sell_order_status == CANCEL_REASON['PARTIALLY_FILLED_KEEP_OPEN']
|
assert trade.exit_order_status == CANCEL_REASON['PARTIALLY_FILLED_KEEP_OPEN']
|
||||||
assert send_msg_mock.call_count == 1
|
assert send_msg_mock.call_count == 1
|
||||||
|
|
||||||
|
|
||||||
|
@ -1588,7 +1588,7 @@ def test_to_json(default_conf, fee):
|
|||||||
'profit_pct': None,
|
'profit_pct': None,
|
||||||
'profit_abs': None,
|
'profit_abs': None,
|
||||||
'sell_reason': None,
|
'sell_reason': None,
|
||||||
'sell_order_status': None,
|
'exit_order_status': None,
|
||||||
'stop_loss_abs': None,
|
'stop_loss_abs': None,
|
||||||
'stop_loss_ratio': None,
|
'stop_loss_ratio': None,
|
||||||
'stop_loss_pct': None,
|
'stop_loss_pct': None,
|
||||||
@ -1673,7 +1673,7 @@ def test_to_json(default_conf, fee):
|
|||||||
'open_rate_requested': None,
|
'open_rate_requested': None,
|
||||||
'open_trade_value': 12.33075,
|
'open_trade_value': 12.33075,
|
||||||
'sell_reason': None,
|
'sell_reason': None,
|
||||||
'sell_order_status': None,
|
'exit_order_status': None,
|
||||||
'strategy': None,
|
'strategy': None,
|
||||||
'buy_tag': 'buys_signal_001',
|
'buy_tag': 'buys_signal_001',
|
||||||
'enter_tag': 'buys_signal_001',
|
'enter_tag': 'buys_signal_001',
|
||||||
|
Loading…
Reference in New Issue
Block a user