From 93a91bdeee628872663f53f50ac16ef11594ffdb Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 9 Mar 2022 07:39:32 +0100 Subject: [PATCH] Update order_Types documentation --- README.md | 2 +- docs/configuration.md | 23 ++++++++------- docs/faq.md | 6 ++-- docs/includes/pricing.md | 4 +-- docs/rest-api.md | 6 ++-- docs/sandbox-testing.md | 4 +-- docs/sql_cheatsheet.md | 6 ++-- docs/stoploss.md | 28 +++++++++---------- docs/telegram-usage.md | 4 +-- freqtrade/freqtradebot.py | 2 +- freqtrade/templates/base_strategy.py.j2 | 4 +-- .../subtemplates/exchange_bittrex.j2 | 6 ++-- tests/exchange/test_gateio.py | 4 +-- tests/optimize/test_backtesting.py | 8 +++--- tests/test_freqtradebot.py | 2 +- 15 files changed, 54 insertions(+), 55 deletions(-) diff --git a/README.md b/README.md index efa334a27..02eb47e00 100644 --- a/README.md +++ b/README.md @@ -128,7 +128,7 @@ Telegram is not mandatory. However, this is a great way to control your bot. Mor - `/stopbuy`: Stop entering new trades. - `/status |[table]`: Lists all or specific open trades. - `/profit []`: Lists cumulative profit from all finished trades, over the last n days. -- `/forcesell |all`: Instantly sells the given trade (Ignoring `minimum_roi`). +- `/forceexit |all`: Instantly exits the given trade (Ignoring `minimum_roi`). - `/performance`: Show performance of each finished trade grouped by pair - `/balance`: Show account balance per currency. - `/daily `: Shows profit or loss per day, over the last n days. diff --git a/docs/configuration.md b/docs/configuration.md index f514e695a..9610b5866 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -121,7 +121,7 @@ Mandatory parameters are marked as **Required**, which means that they are requi | `sell_profit_offset` | Sell-signal is only active above this value. Only active in combination with `sell_profit_only=True`. [Strategy Override](#parameters-in-the-strategy).
*Defaults to `0.0`.*
**Datatype:** Float (as ratio) | `ignore_roi_if_buy_signal` | Do not sell if the buy signal is still active. This setting takes preference over `minimal_roi` and `use_sell_signal`. [Strategy Override](#parameters-in-the-strategy).
*Defaults to `false`.*
**Datatype:** Boolean | `ignore_buying_expired_candle_after` | Specifies the number of seconds until a buy signal is no longer used.
**Datatype:** Integer -| `order_types` | Configure order-types depending on the action (`"buy"`, `"sell"`, `"stoploss"`, `"stoploss_on_exchange"`). [More information below](#understand-order_types). [Strategy Override](#parameters-in-the-strategy).
**Datatype:** Dict +| `order_types` | Configure order-types depending on the action (`"entry"`, `"exit"`, `"stoploss"`, `"stoploss_on_exchange"`). [More information below](#understand-order_types). [Strategy Override](#parameters-in-the-strategy).
**Datatype:** Dict | `order_time_in_force` | Configure time in force for entry and exit orders. [More information below](#understand-order_time_in_force). [Strategy Override](#parameters-in-the-strategy).
**Datatype:** Dict | `custom_price_max_distance_ratio` | Configure maximum distance ratio between current and custom entry or exit price.
*Defaults to `0.02` 2%).*
**Datatype:** Positive float | `exchange.name` | **Required.** Name of the exchange class to use. [List below](#user-content-what-values-for-exchangename).
**Datatype:** String @@ -374,19 +374,18 @@ For example, if your strategy is using a 1h timeframe, and you only want to buy ### Understand order_types -The `order_types` configuration parameter maps actions (`buy`, `sell`, `stoploss`, `emergencysell`, `forcesell`, `forcebuy`) to order-types (`market`, `limit`, ...) as well as configures stoploss to be on the exchange and defines stoploss on exchange update interval in seconds. +The `order_types` configuration parameter maps actions (`entry`, `exit`, `stoploss`, `emergencyexit`, `forceexit`, `forceentry`) to order-types (`market`, `limit`, ...) as well as configures stoploss to be on the exchange and defines stoploss on exchange update interval in seconds. This allows to buy using limit orders, sell using limit-orders, and create stoplosses using market orders. It also allows to set the stoploss "on exchange" which means stoploss order would be placed immediately once the buy order is fulfilled. - + `order_types` set in the configuration file overwrites values set in the strategy as a whole, so you need to configure the whole `order_types` dictionary in one place. -If this is configured, the following 4 values (`buy`, `sell`, `stoploss` and -`stoploss_on_exchange`) need to be present, otherwise, the bot will fail to start. +If this is configured, the following 4 values (`entry`, `exit`, `stoploss` and `stoploss_on_exchange`) need to be present, otherwise, the bot will fail to start. -For information on (`emergencysell`,`forcesell`, `forcebuy`, `stoploss_on_exchange`,`stoploss_on_exchange_interval`,`stoploss_on_exchange_limit_ratio`) please see stop loss documentation [stop loss on exchange](stoploss.md) +For information on (`emergencyexit`,`forceexit`, `forceentry`, `stoploss_on_exchange`,`stoploss_on_exchange_interval`,`stoploss_on_exchange_limit_ratio`) please see stop loss documentation [stop loss on exchange](stoploss.md) Syntax for Strategy: @@ -408,11 +407,11 @@ Configuration: ```json "order_types": { - "buy": "limit", - "sell": "limit", - "emergencysell": "market", - "forcebuy": "market", - "forcesell": "market", + "entry": "limit", + "exit": "limit", + "emergencyexit": "market", + "forceentry": "market", + "forceexit": "market", "stoploss": "market", "stoploss_on_exchange": false, "stoploss_on_exchange_interval": 60 @@ -435,7 +434,7 @@ Configuration: If `stoploss_on_exchange` is enabled and the stoploss is cancelled manually on the exchange, then the bot will create a new stoploss order. !!! Warning "Warning: stoploss_on_exchange failures" - If stoploss on exchange creation fails for some reason, then an "emergency sell" is initiated. By default, this will sell the asset using a market order. The order-type for the emergency-sell can be changed by setting the `emergencysell` value in the `order_types` dictionary - however, this is not advised. + If stoploss on exchange creation fails for some reason, then an "emergency exit" is initiated. By default, this will sell the asset using a market order. The order-type for the emergency-sell can be changed by setting the `emergencyexit` value in the `order_types` dictionary - however, this is not advised. ### Understand order_time_in_force diff --git a/docs/faq.md b/docs/faq.md index 27bc077ec..147e850ac 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -77,7 +77,7 @@ You can use "current" market data by using the [dataprovider](strategy-customiza ### Is there a setting to only SELL the coins being held and not perform anymore BUYS? -You can use the `/stopbuy` command in Telegram to prevent future buys, followed by `/forcesell all` (sell all open trades). +You can use the `/stopbuy` command in Telegram to prevent future buys, followed by `/forceexit all` (sell all open trades). ### I want to run multiple bots on the same machine @@ -117,10 +117,10 @@ As the message says, your exchange does not support market orders and you have o To fix this, redefine order types in the strategy to use "limit" instead of "market": -``` +``` python order_types = { ... - 'stoploss': 'limit', + "stoploss": "limit", ... } ``` diff --git a/docs/includes/pricing.md b/docs/includes/pricing.md index ed8a45e68..f495be68f 100644 --- a/docs/includes/pricing.md +++ b/docs/includes/pricing.md @@ -101,8 +101,8 @@ Assuming both buy and sell are using market orders, a configuration similar to t ``` jsonc "order_types": { - "buy": "market", - "sell": "market" + "entry": "market", + "exit": "market" // ... }, "bid_strategy": { diff --git a/docs/rest-api.md b/docs/rest-api.md index 5a6b1b7a0..25e7ee205 100644 --- a/docs/rest-api.md +++ b/docs/rest-api.md @@ -145,9 +145,9 @@ python3 scripts/rest_client.py --config rest_config.json [optional par | `locks` | Displays currently locked pairs. | `delete_lock ` | Deletes (disables) the lock by id. | `profit` | Display a summary of your profit/loss from close trades and some stats about your performance. -| `forcesell ` | Instantly sells the given trade (Ignoring `minimum_roi`). -| `forcesell all` | Instantly sells all open trades (Ignoring `minimum_roi`). -| `forcebuy [rate]` | Instantly buys the given pair. Rate is optional. (`forcebuy_enable` must be set to True) +| `forceexit ` | Instantly exits the given trade (Ignoring `minimum_roi`). +| `forceexit all` | Instantly exits all open trades (Ignoring `minimum_roi`). +| `forceenter [rate]` | Instantly enters the given pair. Rate is optional. (`forcebuy_enable` must be set to True) | `forceenter [rate]` | Instantly longs or shorts the given pair. Rate is optional. (`forcebuy_enable` must be set to True) | `performance` | Show performance of each finished trade grouped by pair. | `balance` | Show account balance per currency. diff --git a/docs/sandbox-testing.md b/docs/sandbox-testing.md index 5f572eba8..94a25b35f 100644 --- a/docs/sandbox-testing.md +++ b/docs/sandbox-testing.md @@ -104,8 +104,8 @@ To mitigate this, you can try to match the first order on the opposite orderbook ``` jsonc "order_types": { - "buy": "limit", - "sell": "limit" + "entry": "limit", + "exit": "limit" // ... }, "bid_strategy": { diff --git a/docs/sql_cheatsheet.md b/docs/sql_cheatsheet.md index caa3f53a6..0e2abc239 100644 --- a/docs/sql_cheatsheet.md +++ b/docs/sql_cheatsheet.md @@ -49,14 +49,14 @@ sqlite3 SELECT * FROM trades; ``` -## Fix trade still open after a manual sell on the exchange +## Fix trade still open after a manual exit on the exchange !!! Warning - Manually selling a pair on the exchange will not be detected by the bot and it will try to sell anyway. Whenever possible, forcesell should be used to accomplish the same thing. + Manually selling a pair on the exchange will not be detected by the bot and it will try to sell anyway. Whenever possible, forceexit should be used to accomplish the same thing. It is strongly advised to backup your database file before making any manual changes. !!! Note - This should not be necessary after /forcesell, as forcesell orders are closed automatically by the bot on the next iteration. + This should not be necessary after /forceexit, as forceexit orders are closed automatically by the bot on the next iteration. ```sql UPDATE trades diff --git a/docs/stoploss.md b/docs/stoploss.md index d0e106d8f..631357e52 100644 --- a/docs/stoploss.md +++ b/docs/stoploss.md @@ -17,7 +17,7 @@ Those stoploss modes can be *on exchange* or *off exchange*. These modes can be configured with these values: ``` python - 'emergencysell': 'market', + 'emergencyexit': 'market', 'stoploss_on_exchange': False 'stoploss_on_exchange_interval': 60, 'stoploss_on_exchange_limit_ratio': 0.99 @@ -52,30 +52,30 @@ The bot cannot do these every 5 seconds (at each iteration), otherwise it would So this parameter will tell the bot how often it should update the stoploss order. The default value is 60 (1 minute). This same logic will reapply a stoploss order on the exchange should you cancel it accidentally. -### forcesell +### forceexit -`forcesell` is an optional value, which defaults to the same value as `sell` and is used when sending a `/forcesell` command from Telegram or from the Rest API. +`forceexit` is an optional value, which defaults to the same value as `exit` and is used when sending a `/forceexit` command from Telegram or from the Rest API. -### forcebuy +### forceentry -`forcebuy` is an optional value, which defaults to the same value as `buy` and is used when sending a `/forcebuy` command from Telegram or from the Rest API. +`forceentry` is an optional value, which defaults to the same value as `entry` and is used when sending a `/forceentry` command from Telegram or from the Rest API. -### emergencysell +### emergencyexit -`emergencysell` is an optional value, which defaults to `market` and is used when creating stop loss on exchange orders fails. +`emergencyexit` is an optional value, which defaults to `market` and is used when creating stop loss on exchange orders fails. The below is the default which is used if not changed in strategy or configuration file. Example from strategy file: ``` python order_types = { - 'buy': 'limit', - 'sell': 'limit', - 'emergencysell': 'market', - 'stoploss': 'market', - 'stoploss_on_exchange': True, - 'stoploss_on_exchange_interval': 60, - 'stoploss_on_exchange_limit_ratio': 0.99 + "entry": "limit", + "exit": "limit", + "emergencyexit": "market", + "stoploss": "market", + "stoploss_on_exchange": True, + "stoploss_on_exchange_interval": 60, + "stoploss_on_exchange_limit_ratio": 0.99 } ``` diff --git a/docs/telegram-usage.md b/docs/telegram-usage.md index ebdd062ee..a09579889 100644 --- a/docs/telegram-usage.md +++ b/docs/telegram-usage.md @@ -171,8 +171,8 @@ official commands. You can ask at any moment for help with `/help`. | `/locks` | Show currently locked pairs. | `/unlock ` | Remove the lock for this pair (or for this lock id). | `/profit []` | Display a summary of your profit/loss from close trades and some stats about your performance, over the last n days (all trades by default) -| `/forcesell ` | Instantly sells the given trade (Ignoring `minimum_roi`). -| `/forcesell all` | Instantly sells all open trades (Ignoring `minimum_roi`). +| `/forceexit ` | Instantly exits the given trade (Ignoring `minimum_roi`). +| `/forceexit all` | Instantly exits all open trades (Ignoring `minimum_roi`). | `/forcelong [rate]` | Instantly buys the given pair. Rate is optional and only applies to limit orders. (`forcebuy_enable` must be set to True) | `/forceshort [rate]` | Instantly shorts the given pair. Rate is optional and only applies to limit orders. This will only work on non-spot markets. (`forcebuy_enable` must be set to True) | `/performance` | Show performance of each finished trade grouped by pair diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index f87c8e2ff..4950c2cd0 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -1154,7 +1154,7 @@ class FreqtradeBot(LoggingMixin): max_timeouts = self.config.get( 'unfilledtimeout', {}).get('exit_timeout_count', 0) if canceled and max_timeouts > 0 and canceled_count >= max_timeouts: - logger.warning(f'Emergencyselling trade {trade}, as the sell order ' + logger.warning(f'Emergency exiting trade {trade}, as the exit order ' f'timed out {max_timeouts} times.') try: self.execute_trade_exit( diff --git a/freqtrade/templates/base_strategy.py.j2 b/freqtrade/templates/base_strategy.py.j2 index 701909bf6..e2fe9008e 100644 --- a/freqtrade/templates/base_strategy.py.j2 +++ b/freqtrade/templates/base_strategy.py.j2 @@ -75,8 +75,8 @@ class {{ strategy }}(IStrategy): # Optional order type mapping. order_types = { - 'buy': 'limit', - 'sell': 'limit', + 'entry': 'limit', + 'exit': 'limit', 'stoploss': 'market', 'stoploss_on_exchange': False } diff --git a/freqtrade/templates/subtemplates/exchange_bittrex.j2 b/freqtrade/templates/subtemplates/exchange_bittrex.j2 index 0394790ce..2d9afd578 100644 --- a/freqtrade/templates/subtemplates/exchange_bittrex.j2 +++ b/freqtrade/templates/subtemplates/exchange_bittrex.j2 @@ -1,7 +1,7 @@ "order_types": { - "buy": "limit", - "sell": "limit", - "emergencysell": "limit", + "entry": "limit", + "exit": "limit", + "emergencyexit": "limit", "stoploss": "limit", "stoploss_on_exchange": false }, diff --git a/tests/exchange/test_gateio.py b/tests/exchange/test_gateio.py index 6f7862909..3ecce96aa 100644 --- a/tests/exchange/test_gateio.py +++ b/tests/exchange/test_gateio.py @@ -17,8 +17,8 @@ def test_validate_order_types_gateio(default_conf, mocker): assert isinstance(exch, Gateio) default_conf['order_types'] = { - 'buy': 'market', - 'sell': 'limit', + 'entry': 'market', + 'exit': 'limit', 'stoploss': 'market', 'stoploss_on_exchange': False } diff --git a/tests/optimize/test_backtesting.py b/tests/optimize/test_backtesting.py index ec77d1cbf..f0d5ba5b9 100644 --- a/tests/optimize/test_backtesting.py +++ b/tests/optimize/test_backtesting.py @@ -32,14 +32,14 @@ from tests.conftest import (CURRENT_TEST_STRATEGY, get_args, log_has, log_has_re ORDER_TYPES = [ { - 'buy': 'limit', - 'sell': 'limit', + 'entry': 'limit', + 'exit': 'limit', 'stoploss': 'limit', 'stoploss_on_exchange': False }, { - 'buy': 'limit', - 'sell': 'limit', + 'entry': 'limit', + 'exit': 'limit', 'stoploss': 'limit', 'stoploss_on_exchange': True }] diff --git a/tests/test_freqtradebot.py b/tests/test_freqtradebot.py index 03a5b83be..3e403af0c 100644 --- a/tests/test_freqtradebot.py +++ b/tests/test_freqtradebot.py @@ -2551,7 +2551,7 @@ def test_check_handle_timedout_sell_usercustom( assert et_mock.call_count == 0 freqtrade.check_handle_timedout() - assert log_has_re('Emergencyselling trade.*', caplog) + assert log_has_re('Emergency exiting trade.*', caplog) assert et_mock.call_count == 1