Merge pull request #2018 from freqtrade/market_orders_with_price
Market orders with price
This commit is contained in:
		| @@ -387,7 +387,9 @@ class Exchange(object): | |||||||
|         try: |         try: | ||||||
|             # Set the precision for amount and price(rate) as accepted by the exchange |             # Set the precision for amount and price(rate) as accepted by the exchange | ||||||
|             amount = self.symbol_amount_prec(pair, amount) |             amount = self.symbol_amount_prec(pair, amount) | ||||||
|             rate = self.symbol_price_prec(pair, rate) if ordertype != 'market' else None |             needs_price = (ordertype != 'market' | ||||||
|  |                            or self._api.options.get("createMarketBuyOrderRequiresPrice", False)) | ||||||
|  |             rate = self.symbol_price_prec(pair, rate) if needs_price else None | ||||||
|  |  | ||||||
|             return self._api.create_order(pair, ordertype, side, |             return self._api.create_order(pair, ordertype, side, | ||||||
|                                           amount, rate, params) |                                           amount, rate, params) | ||||||
|   | |||||||
| @@ -543,15 +543,17 @@ def test_dry_run_order(default_conf, mocker, side, exchange_name): | |||||||
|     ("buy"), |     ("buy"), | ||||||
|     ("sell") |     ("sell") | ||||||
| ]) | ]) | ||||||
| @pytest.mark.parametrize("ordertype,rate", [ | @pytest.mark.parametrize("ordertype,rate,marketprice", [ | ||||||
|     ("market", None), |     ("market", None, None), | ||||||
|     ("limit", 200), |     ("market", 200, True), | ||||||
|     ("stop_loss_limit", 200) |     ("limit", 200, None), | ||||||
|  |     ("stop_loss_limit", 200, None) | ||||||
| ]) | ]) | ||||||
| @pytest.mark.parametrize("exchange_name", EXCHANGES) | @pytest.mark.parametrize("exchange_name", EXCHANGES) | ||||||
| def test_create_order(default_conf, mocker, side, ordertype, rate, exchange_name): | def test_create_order(default_conf, mocker, side, ordertype, rate, marketprice, exchange_name): | ||||||
|     api_mock = MagicMock() |     api_mock = MagicMock() | ||||||
|     order_id = 'test_prod_{}_{}'.format(side, randint(0, 10 ** 6)) |     order_id = 'test_prod_{}_{}'.format(side, randint(0, 10 ** 6)) | ||||||
|  |     api_mock.options = {} if not marketprice else {"createMarketBuyOrderRequiresPrice": True} | ||||||
|     api_mock.create_order = MagicMock(return_value={ |     api_mock.create_order = MagicMock(return_value={ | ||||||
|         'id': order_id, |         'id': order_id, | ||||||
|         'info': { |         'info': { | ||||||
| @@ -592,6 +594,7 @@ def test_buy_prod(default_conf, mocker, exchange_name): | |||||||
|     order_id = 'test_prod_buy_{}'.format(randint(0, 10 ** 6)) |     order_id = 'test_prod_buy_{}'.format(randint(0, 10 ** 6)) | ||||||
|     order_type = 'market' |     order_type = 'market' | ||||||
|     time_in_force = 'gtc' |     time_in_force = 'gtc' | ||||||
|  |     api_mock.options = {} | ||||||
|     api_mock.create_order = MagicMock(return_value={ |     api_mock.create_order = MagicMock(return_value={ | ||||||
|         'id': order_id, |         'id': order_id, | ||||||
|         'info': { |         'info': { | ||||||
| @@ -659,6 +662,7 @@ def test_buy_prod(default_conf, mocker, exchange_name): | |||||||
| def test_buy_considers_time_in_force(default_conf, mocker, exchange_name): | def test_buy_considers_time_in_force(default_conf, mocker, exchange_name): | ||||||
|     api_mock = MagicMock() |     api_mock = MagicMock() | ||||||
|     order_id = 'test_prod_buy_{}'.format(randint(0, 10 ** 6)) |     order_id = 'test_prod_buy_{}'.format(randint(0, 10 ** 6)) | ||||||
|  |     api_mock.options = {} | ||||||
|     api_mock.create_order = MagicMock(return_value={ |     api_mock.create_order = MagicMock(return_value={ | ||||||
|         'id': order_id, |         'id': order_id, | ||||||
|         'info': { |         'info': { | ||||||
| @@ -719,6 +723,7 @@ def test_sell_prod(default_conf, mocker, exchange_name): | |||||||
|     api_mock = MagicMock() |     api_mock = MagicMock() | ||||||
|     order_id = 'test_prod_sell_{}'.format(randint(0, 10 ** 6)) |     order_id = 'test_prod_sell_{}'.format(randint(0, 10 ** 6)) | ||||||
|     order_type = 'market' |     order_type = 'market' | ||||||
|  |     api_mock.options = {} | ||||||
|     api_mock.create_order = MagicMock(return_value={ |     api_mock.create_order = MagicMock(return_value={ | ||||||
|         'id': order_id, |         'id': order_id, | ||||||
|         'info': { |         'info': { | ||||||
| @@ -783,6 +788,7 @@ def test_sell_considers_time_in_force(default_conf, mocker, exchange_name): | |||||||
|             'foo': 'bar' |             'foo': 'bar' | ||||||
|         } |         } | ||||||
|     }) |     }) | ||||||
|  |     api_mock.options = {} | ||||||
|     default_conf['dry_run'] = False |     default_conf['dry_run'] = False | ||||||
|     mocker.patch('freqtrade.exchange.Exchange.symbol_amount_prec', lambda s, x, y: y) |     mocker.patch('freqtrade.exchange.Exchange.symbol_amount_prec', lambda s, x, y: y) | ||||||
|     mocker.patch('freqtrade.exchange.Exchange.symbol_price_prec', lambda s, x, y: y) |     mocker.patch('freqtrade.exchange.Exchange.symbol_price_prec', lambda s, x, y: y) | ||||||
|   | |||||||
| @@ -11,6 +11,7 @@ def test_buy_kraken_trading_agreement(default_conf, mocker): | |||||||
|     order_id = 'test_prod_buy_{}'.format(randint(0, 10 ** 6)) |     order_id = 'test_prod_buy_{}'.format(randint(0, 10 ** 6)) | ||||||
|     order_type = 'limit' |     order_type = 'limit' | ||||||
|     time_in_force = 'ioc' |     time_in_force = 'ioc' | ||||||
|  |     api_mock.options = {} | ||||||
|     api_mock.create_order = MagicMock(return_value={ |     api_mock.create_order = MagicMock(return_value={ | ||||||
|         'id': order_id, |         'id': order_id, | ||||||
|         'info': { |         'info': { | ||||||
| @@ -42,6 +43,7 @@ def test_sell_kraken_trading_agreement(default_conf, mocker): | |||||||
|     api_mock = MagicMock() |     api_mock = MagicMock() | ||||||
|     order_id = 'test_prod_sell_{}'.format(randint(0, 10 ** 6)) |     order_id = 'test_prod_sell_{}'.format(randint(0, 10 ** 6)) | ||||||
|     order_type = 'market' |     order_type = 'market' | ||||||
|  |     api_mock.options = {} | ||||||
|     api_mock.create_order = MagicMock(return_value={ |     api_mock.create_order = MagicMock(return_value={ | ||||||
|         'id': order_id, |         'id': order_id, | ||||||
|         'info': { |         'info': { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user