Merge pull request #1942 from freqtrade/fix/rpc_market_buy

RPC: don't use limit for rates that could be market orders
This commit is contained in:
Matthias 2019-06-17 14:55:31 +02:00 committed by GitHub
commit 0d360167f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 28 additions and 10 deletions

View File

@ -43,6 +43,7 @@ Possible parameters are:
* `stake_amount` * `stake_amount`
* `stake_currency` * `stake_currency`
* `fiat_currency` * `fiat_currency`
* `order_type`
### Webhooksell ### Webhooksell
@ -61,6 +62,7 @@ Possible parameters are:
* `stake_currency` * `stake_currency`
* `fiat_currency` * `fiat_currency`
* `sell_reason` * `sell_reason`
* `order_type`
### Webhookstatus ### Webhookstatus

View File

@ -345,8 +345,8 @@ class FreqtradeBot(object):
return False return False
amount = stake_amount / buy_limit_requested amount = stake_amount / buy_limit_requested
order_type = self.strategy.order_types['buy']
order = self.exchange.buy(pair=pair, ordertype=self.strategy.order_types['buy'], order = self.exchange.buy(pair=pair, ordertype=order_type,
amount=amount, rate=buy_limit_requested, amount=amount, rate=buy_limit_requested,
time_in_force=time_in_force) time_in_force=time_in_force)
order_id = order['id'] order_id = order['id']
@ -356,7 +356,6 @@ class FreqtradeBot(object):
buy_limit_filled_price = buy_limit_requested buy_limit_filled_price = buy_limit_requested
if order_status == 'expired' or order_status == 'rejected': if order_status == 'expired' or order_status == 'rejected':
order_type = self.strategy.order_types['buy']
order_tif = self.strategy.order_time_in_force['buy'] order_tif = self.strategy.order_time_in_force['buy']
# return false if the order is not filled # return false if the order is not filled
@ -390,6 +389,7 @@ class FreqtradeBot(object):
'exchange': self.exchange.name.capitalize(), 'exchange': self.exchange.name.capitalize(),
'pair': pair_s, 'pair': pair_s,
'limit': buy_limit_filled_price, 'limit': buy_limit_filled_price,
'order_type': order_type,
'stake_amount': stake_amount, 'stake_amount': stake_amount,
'stake_currency': stake_currency, 'stake_currency': stake_currency,
'fiat_currency': fiat_currency 'fiat_currency': fiat_currency
@ -875,6 +875,7 @@ class FreqtradeBot(object):
'pair': trade.pair, 'pair': trade.pair,
'gain': gain, 'gain': gain,
'limit': trade.close_rate_requested, 'limit': trade.close_rate_requested,
'order_type': self.strategy.order_types['sell'],
'amount': trade.amount, 'amount': trade.amount,
'open_rate': trade.open_rate, 'open_rate': trade.open_rate,
'current_rate': current_rate, 'current_rate': current_rate,

View File

@ -132,7 +132,7 @@ class Telegram(RPC):
msg['stake_amount_fiat'] = 0 msg['stake_amount_fiat'] = 0
message = ("*{exchange}:* Buying {pair}\n" message = ("*{exchange}:* Buying {pair}\n"
"with limit `{limit:.8f}\n" "at rate `{limit:.8f}\n"
"({stake_amount:.6f} {stake_currency}").format(**msg) "({stake_amount:.6f} {stake_currency}").format(**msg)
if msg.get('fiat_currency', None): if msg.get('fiat_currency', None):
@ -144,7 +144,7 @@ class Telegram(RPC):
msg['profit_percent'] = round(msg['profit_percent'] * 100, 2) msg['profit_percent'] = round(msg['profit_percent'] * 100, 2)
message = ("*{exchange}:* Selling {pair}\n" message = ("*{exchange}:* Selling {pair}\n"
"*Limit:* `{limit:.8f}`\n" "*Rate:* `{limit:.8f}`\n"
"*Amount:* `{amount:.8f}`\n" "*Amount:* `{amount:.8f}`\n"
"*Open Rate:* `{open_rate:.8f}`\n" "*Open Rate:* `{open_rate:.8f}`\n"
"*Current Rate:* `{current_rate:.8f}`\n" "*Current Rate:* `{current_rate:.8f}`\n"

View File

@ -756,6 +756,7 @@ def test_forcesell_handle(default_conf, update, ticker, fee,
'gain': 'profit', 'gain': 'profit',
'limit': 1.172e-05, 'limit': 1.172e-05,
'amount': 90.99181073703367, 'amount': 90.99181073703367,
'order_type': 'limit',
'open_rate': 1.099e-05, 'open_rate': 1.099e-05,
'current_rate': 1.172e-05, 'current_rate': 1.172e-05,
'profit_amount': 6.126e-05, 'profit_amount': 6.126e-05,
@ -810,6 +811,7 @@ def test_forcesell_down_handle(default_conf, update, ticker, fee,
'gain': 'loss', 'gain': 'loss',
'limit': 1.044e-05, 'limit': 1.044e-05,
'amount': 90.99181073703367, 'amount': 90.99181073703367,
'order_type': 'limit',
'open_rate': 1.099e-05, 'open_rate': 1.099e-05,
'current_rate': 1.044e-05, 'current_rate': 1.044e-05,
'profit_amount': -5.492e-05, 'profit_amount': -5.492e-05,
@ -855,6 +857,7 @@ def test_forcesell_all_handle(default_conf, update, ticker, fee, markets, mocker
'gain': 'loss', 'gain': 'loss',
'limit': 1.098e-05, 'limit': 1.098e-05,
'amount': 90.99181073703367, 'amount': 90.99181073703367,
'order_type': 'limit',
'open_rate': 1.099e-05, 'open_rate': 1.099e-05,
'current_rate': 1.098e-05, 'current_rate': 1.098e-05,
'profit_amount': -5.91e-06, 'profit_amount': -5.91e-06,
@ -1188,6 +1191,7 @@ def test_send_msg_buy_notification(default_conf, mocker) -> None:
'exchange': 'Bittrex', 'exchange': 'Bittrex',
'pair': 'ETH/BTC', 'pair': 'ETH/BTC',
'limit': 1.099e-05, 'limit': 1.099e-05,
'order_type': 'limit',
'stake_amount': 0.001, 'stake_amount': 0.001,
'stake_amount_fiat': 0.0, 'stake_amount_fiat': 0.0,
'stake_currency': 'BTC', 'stake_currency': 'BTC',
@ -1195,7 +1199,7 @@ def test_send_msg_buy_notification(default_conf, mocker) -> None:
}) })
assert msg_mock.call_args[0][0] \ assert msg_mock.call_args[0][0] \
== '*Bittrex:* Buying ETH/BTC\n' \ == '*Bittrex:* Buying ETH/BTC\n' \
'with limit `0.00001099\n' \ 'at rate `0.00001099\n' \
'(0.001000 BTC,0.000 USD)`' '(0.001000 BTC,0.000 USD)`'
@ -1217,6 +1221,7 @@ def test_send_msg_sell_notification(default_conf, mocker) -> None:
'gain': 'loss', 'gain': 'loss',
'limit': 3.201e-05, 'limit': 3.201e-05,
'amount': 1333.3333333333335, 'amount': 1333.3333333333335,
'order_type': 'market',
'open_rate': 7.5e-05, 'open_rate': 7.5e-05,
'current_rate': 3.201e-05, 'current_rate': 3.201e-05,
'profit_amount': -0.05746268, 'profit_amount': -0.05746268,
@ -1227,7 +1232,7 @@ def test_send_msg_sell_notification(default_conf, mocker) -> None:
}) })
assert msg_mock.call_args[0][0] \ assert msg_mock.call_args[0][0] \
== ('*Binance:* Selling KEY/ETH\n' == ('*Binance:* Selling KEY/ETH\n'
'*Limit:* `0.00003201`\n' '*Rate:* `0.00003201`\n'
'*Amount:* `1333.33333333`\n' '*Amount:* `1333.33333333`\n'
'*Open Rate:* `0.00007500`\n' '*Open Rate:* `0.00007500`\n'
'*Current Rate:* `0.00003201`\n' '*Current Rate:* `0.00003201`\n'
@ -1242,6 +1247,7 @@ def test_send_msg_sell_notification(default_conf, mocker) -> None:
'gain': 'loss', 'gain': 'loss',
'limit': 3.201e-05, 'limit': 3.201e-05,
'amount': 1333.3333333333335, 'amount': 1333.3333333333335,
'order_type': 'market',
'open_rate': 7.5e-05, 'open_rate': 7.5e-05,
'current_rate': 3.201e-05, 'current_rate': 3.201e-05,
'profit_amount': -0.05746268, 'profit_amount': -0.05746268,
@ -1251,7 +1257,7 @@ def test_send_msg_sell_notification(default_conf, mocker) -> None:
}) })
assert msg_mock.call_args[0][0] \ assert msg_mock.call_args[0][0] \
== ('*Binance:* Selling KEY/ETH\n' == ('*Binance:* Selling KEY/ETH\n'
'*Limit:* `0.00003201`\n' '*Rate:* `0.00003201`\n'
'*Amount:* `1333.33333333`\n' '*Amount:* `1333.33333333`\n'
'*Open Rate:* `0.00007500`\n' '*Open Rate:* `0.00007500`\n'
'*Current Rate:* `0.00003201`\n' '*Current Rate:* `0.00003201`\n'
@ -1339,6 +1345,7 @@ def test_send_msg_buy_notification_no_fiat(default_conf, mocker) -> None:
'exchange': 'Bittrex', 'exchange': 'Bittrex',
'pair': 'ETH/BTC', 'pair': 'ETH/BTC',
'limit': 1.099e-05, 'limit': 1.099e-05,
'order_type': 'limit',
'stake_amount': 0.001, 'stake_amount': 0.001,
'stake_amount_fiat': 0.0, 'stake_amount_fiat': 0.0,
'stake_currency': 'BTC', 'stake_currency': 'BTC',
@ -1346,7 +1353,7 @@ def test_send_msg_buy_notification_no_fiat(default_conf, mocker) -> None:
}) })
assert msg_mock.call_args[0][0] \ assert msg_mock.call_args[0][0] \
== '*Bittrex:* Buying ETH/BTC\n' \ == '*Bittrex:* Buying ETH/BTC\n' \
'with limit `0.00001099\n' \ 'at rate `0.00001099\n' \
'(0.001000 BTC)`' '(0.001000 BTC)`'
@ -1367,6 +1374,7 @@ def test_send_msg_sell_notification_no_fiat(default_conf, mocker) -> None:
'gain': 'loss', 'gain': 'loss',
'limit': 3.201e-05, 'limit': 3.201e-05,
'amount': 1333.3333333333335, 'amount': 1333.3333333333335,
'order_type': 'limit',
'open_rate': 7.5e-05, 'open_rate': 7.5e-05,
'current_rate': 3.201e-05, 'current_rate': 3.201e-05,
'profit_amount': -0.05746268, 'profit_amount': -0.05746268,
@ -1377,7 +1385,7 @@ def test_send_msg_sell_notification_no_fiat(default_conf, mocker) -> None:
}) })
assert msg_mock.call_args[0][0] \ assert msg_mock.call_args[0][0] \
== '*Binance:* Selling KEY/ETH\n' \ == '*Binance:* Selling KEY/ETH\n' \
'*Limit:* `0.00003201`\n' \ '*Rate:* `0.00003201`\n' \
'*Amount:* `1333.33333333`\n' \ '*Amount:* `1333.33333333`\n' \
'*Open Rate:* `0.00007500`\n' \ '*Open Rate:* `0.00007500`\n' \
'*Current Rate:* `0.00003201`\n' \ '*Current Rate:* `0.00003201`\n' \

View File

@ -74,6 +74,7 @@ def test_send_msg(default_conf, mocker):
'gain': "profit", 'gain': "profit",
'limit': 0.005, 'limit': 0.005,
'amount': 0.8, 'amount': 0.8,
'order_type': 'limit',
'open_rate': 0.004, 'open_rate': 0.004,
'current_rate': 0.005, 'current_rate': 0.005,
'profit_amount': 0.001, 'profit_amount': 0.001,
@ -126,6 +127,7 @@ def test_exception_send_msg(default_conf, mocker, caplog):
'exchange': 'Bittrex', 'exchange': 'Bittrex',
'pair': 'ETH/BTC', 'pair': 'ETH/BTC',
'limit': 0.005, 'limit': 0.005,
'order_type': 'limit',
'stake_amount': 0.8, 'stake_amount': 0.8,
'stake_amount_fiat': 500, 'stake_amount_fiat': 500,
'stake_currency': 'BTC', 'stake_currency': 'BTC',

View File

@ -1994,6 +1994,7 @@ def test_execute_sell_up(default_conf, ticker, fee, ticker_sell_up, markets, moc
'gain': 'profit', 'gain': 'profit',
'limit': 1.172e-05, 'limit': 1.172e-05,
'amount': 90.99181073703367, 'amount': 90.99181073703367,
'order_type': 'limit',
'open_rate': 1.099e-05, 'open_rate': 1.099e-05,
'current_rate': 1.172e-05, 'current_rate': 1.172e-05,
'profit_amount': 6.126e-05, 'profit_amount': 6.126e-05,
@ -2040,6 +2041,7 @@ def test_execute_sell_down(default_conf, ticker, fee, ticker_sell_down, markets,
'gain': 'loss', 'gain': 'loss',
'limit': 1.044e-05, 'limit': 1.044e-05,
'amount': 90.99181073703367, 'amount': 90.99181073703367,
'order_type': 'limit',
'open_rate': 1.099e-05, 'open_rate': 1.099e-05,
'current_rate': 1.044e-05, 'current_rate': 1.044e-05,
'profit_amount': -5.492e-05, 'profit_amount': -5.492e-05,
@ -2094,6 +2096,7 @@ def test_execute_sell_down_stoploss_on_exchange_dry_run(default_conf, ticker, fe
'gain': 'loss', 'gain': 'loss',
'limit': 1.08801e-05, 'limit': 1.08801e-05,
'amount': 90.99181073703367, 'amount': 90.99181073703367,
'order_type': 'limit',
'open_rate': 1.099e-05, 'open_rate': 1.099e-05,
'current_rate': 1.044e-05, 'current_rate': 1.044e-05,
'profit_amount': -1.498e-05, 'profit_amount': -1.498e-05,
@ -2265,6 +2268,7 @@ def test_execute_sell_without_conf_sell_up(default_conf, ticker, fee,
'gain': 'profit', 'gain': 'profit',
'limit': 1.172e-05, 'limit': 1.172e-05,
'amount': 90.99181073703367, 'amount': 90.99181073703367,
'order_type': 'limit',
'open_rate': 1.099e-05, 'open_rate': 1.099e-05,
'current_rate': 1.172e-05, 'current_rate': 1.172e-05,
'profit_amount': 6.126e-05, 'profit_amount': 6.126e-05,
@ -2312,6 +2316,7 @@ def test_execute_sell_without_conf_sell_down(default_conf, ticker, fee,
'gain': 'loss', 'gain': 'loss',
'limit': 1.044e-05, 'limit': 1.044e-05,
'amount': 90.99181073703367, 'amount': 90.99181073703367,
'order_type': 'limit',
'open_rate': 1.099e-05, 'open_rate': 1.099e-05,
'current_rate': 1.044e-05, 'current_rate': 1.044e-05,
'profit_amount': -5.492e-05, 'profit_amount': -5.492e-05,