From bb06365c503c6c9a9cf5c90f994b588d4568431f Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 11 Nov 2020 20:54:24 +0100 Subject: [PATCH] Improve protection documentation --- docs/includes/protections.md | 29 ++++++++++++------- freqtrade/constants.py | 2 +- .../plugins/protections/low_profit_pairs.py | 2 +- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/docs/includes/protections.md b/docs/includes/protections.md index 8efb02b95..91b10cf65 100644 --- a/docs/includes/protections.md +++ b/docs/includes/protections.md @@ -2,35 +2,46 @@ Protections will protect your strategy from unexpected events and market conditions. +!!! Note + Not all Protections will work for all strategies, and parameters will need to be tuned for your strategy. + +!!! Tip + Each Protection can be configured multiple times with different parameters, to allow different levels of protection (short-term / long-term). + ### Available Protection Handlers -* [`StoplossGuard`](#stoploss-guard) (default, if not configured differently) +* [`StoplossGuard`](#stoploss-guard) Stop trading if a certain amount of stoploss occurred within a certain time window. +* [`LowProfitPairs`](#low-profit-pairs) Lock pairs with low profits +* [`CooldownPeriod`](#cooldown-period) Don't enter a trade right after selling a trade. #### Stoploss Guard `StoplossGuard` selects all trades within a `lookback_period` (in minutes), and determines if the amount of trades that resulted in stoploss are above `trade_limit` - in which case trading will stop for `stop_duration`. ```json -"protections": [{ +"protections": [ + { "method": "StoplossGuard", "lookback_period": 60, "trade_limit": 4, "stop_duration": 60 -}], + } +], ``` !!! Note `StoplossGuard` considers all trades with the results `"stop_loss"` and `"trailing_stop_loss"` if the result was negative. + `trade_limit` and `lookback_period` will need to be tuned for your strategy. #### Low Profit Pairs -`LowProfitpairs` uses all trades for a pair within a `lookback_period` (in minutes) to determine the overall profit ratio. +`LowProfitPairs` uses all trades for a pair within a `lookback_period` (in minutes) to determine the overall profit ratio. If that ratio is below `required_profit`, that pair will be locked for `stop_duration` (in minutes). ```json "protections": [ { - "method": "LowProfitpairs", + "method": "LowProfitPairs", "lookback_period": 60, "trade_limit": 4, "stop_duration": 60, @@ -43,8 +54,6 @@ If that ratio is below `required_profit`, that pair will be locked for `stop_dur `CooldownPeriod` locks a pair for `stop_duration` (in minutes) after selling, avoiding a re-entry for this pair for `stop_duration` minutes. - - ```json "protections": [ { @@ -66,7 +75,7 @@ The below example: * stops trading if more than 4 stoploss occur for all pairs within a 1 hour (60 minute) limit (`StoplossGuard`). * Locks each pair after selling for an additional 10 minutes (`CooldownPeriod`), giving other pairs a chance to get filled. -* Locks all pairs that had 4 Trades within the last 6 hours with a combined profit ratio of below 0.02 (<2%). (`LowProfitpairs`) +* Locks all pairs that had 4 Trades within the last 6 hours with a combined profit ratio of below 0.02 (<2%). (`LowProfitPairs`) * Locks all pairs for 120 minutes that had a profit of below 0.01 (<1%) within the last 24h (`60 * 24 = 1440`), a minimum of 7 trades ```json @@ -82,14 +91,14 @@ The below example: "stop_duration": 60 }, { - "method": "LowProfitpairs", + "method": "LowProfitPairs", "lookback_period": 360, "trade_limit": 4, "stop_duration": 60, "required_profit": 0.02 }, { - "method": "LowProfitpairs", + "method": "LowProfitPairs", "lookback_period": 1440, "trade_limit": 7, "stop_duration": 120, diff --git a/freqtrade/constants.py b/freqtrade/constants.py index 3f6b6f440..bc8acc8b3 100644 --- a/freqtrade/constants.py +++ b/freqtrade/constants.py @@ -27,7 +27,7 @@ AVAILABLE_PAIRLISTS = ['StaticPairList', 'VolumePairList', 'AgeFilter', 'PerformanceFilter', 'PrecisionFilter', 'PriceFilter', 'RangeStabilityFilter', 'ShuffleFilter', 'SpreadFilter'] -AVAILABLE_PROTECTIONS = ['StoplossGuard', 'CooldownPeriod', 'LowProfitpairs'] +AVAILABLE_PROTECTIONS = ['StoplossGuard', 'CooldownPeriod', 'LowProfitPairs'] AVAILABLE_DATAHANDLERS = ['json', 'jsongz', 'hdf5'] DRY_RUN_WALLET = 1000 DATETIME_PRINT_FORMAT = '%Y-%m-%d %H:%M:%S' diff --git a/freqtrade/plugins/protections/low_profit_pairs.py b/freqtrade/plugins/protections/low_profit_pairs.py index 739642de7..cbc0052ef 100644 --- a/freqtrade/plugins/protections/low_profit_pairs.py +++ b/freqtrade/plugins/protections/low_profit_pairs.py @@ -11,7 +11,7 @@ from freqtrade.plugins.protections import IProtection, ProtectionReturn logger = logging.getLogger(__name__) -class LowProfitpairs(IProtection): +class LowProfitPairs(IProtection): def __init__(self, config: Dict[str, Any], protection_config: Dict[str, Any]) -> None: super().__init__(config, protection_config)