mirror of
https://github.com/freqtrade/freqtrade.git
synced 2024-11-10 10:21:59 +00:00
Add sell_profit_offset parameter
Allows defining positive offsets before enabling the sell signal
This commit is contained in:
parent
dbc25f00ac
commit
63a579dbab
|
@ -42,6 +42,7 @@
|
||||||
"order_book_max": 1,
|
"order_book_max": 1,
|
||||||
"use_sell_signal": true,
|
"use_sell_signal": true,
|
||||||
"sell_profit_only": false,
|
"sell_profit_only": false,
|
||||||
|
"sell_profit_offset": 0.0,
|
||||||
"ignore_roi_if_buy_signal": false
|
"ignore_roi_if_buy_signal": false
|
||||||
},
|
},
|
||||||
"order_types": {
|
"order_types": {
|
||||||
|
|
|
@ -72,7 +72,8 @@ Mandatory parameters are marked as **Required**, which means that they are requi
|
||||||
| `ask_strategy.order_book_min` | Bot will scan from the top min to max Order Book Asks searching for a profitable rate. <br>*Defaults to `1`.* <br> **Datatype:** Positive Integer
|
| `ask_strategy.order_book_min` | Bot will scan from the top min to max Order Book Asks searching for a profitable rate. <br>*Defaults to `1`.* <br> **Datatype:** Positive Integer
|
||||||
| `ask_strategy.order_book_max` | Bot will scan from the top min to max Order Book Asks searching for a profitable rate. <br>*Defaults to `1`.* <br> **Datatype:** Positive Integer
|
| `ask_strategy.order_book_max` | Bot will scan from the top min to max Order Book Asks searching for a profitable rate. <br>*Defaults to `1`.* <br> **Datatype:** Positive Integer
|
||||||
| `ask_strategy.use_sell_signal` | Use sell signals produced by the strategy in addition to the `minimal_roi`. [Strategy Override](#parameters-in-the-strategy). <br>*Defaults to `true`.* <br> **Datatype:** Boolean
|
| `ask_strategy.use_sell_signal` | Use sell signals produced by the strategy in addition to the `minimal_roi`. [Strategy Override](#parameters-in-the-strategy). <br>*Defaults to `true`.* <br> **Datatype:** Boolean
|
||||||
| `ask_strategy.sell_profit_only` | Wait until the bot makes a positive profit before taking a sell decision. [Strategy Override](#parameters-in-the-strategy). <br>*Defaults to `false`.* <br> **Datatype:** Boolean
|
| `ask_strategy.sell_profit_only` | Wait until the bot reaches `ask_strategy.sell_profit_offset` before taking a sell decision. [Strategy Override](#parameters-in-the-strategy). <br>*Defaults to `false`.* <br> **Datatype:** Boolean
|
||||||
|
| `ask_strategy.sell_profit_offset` | Sell-signal is only active above this value. [Strategy Override](#parameters-in-the-strategy). <br>*Defaults to `0.0`.* <br> **Datatype:** Float (as ratio)
|
||||||
| `ask_strategy.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). <br>*Defaults to `false`.* <br> **Datatype:** Boolean
|
| `ask_strategy.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). <br>*Defaults to `false`.* <br> **Datatype:** Boolean
|
||||||
| `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).<br> **Datatype:** Dict
|
| `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).<br> **Datatype:** Dict
|
||||||
| `order_time_in_force` | Configure time in force for buy and sell orders. [More information below](#understand-order_time_in_force). [Strategy Override](#parameters-in-the-strategy). <br> **Datatype:** Dict
|
| `order_time_in_force` | Configure time in force for buy and sell orders. [More information below](#understand-order_time_in_force). [Strategy Override](#parameters-in-the-strategy). <br> **Datatype:** Dict
|
||||||
|
|
|
@ -154,6 +154,7 @@ CONF_SCHEMA = {
|
||||||
'order_book_max': {'type': 'integer', 'minimum': 1, 'maximum': 50},
|
'order_book_max': {'type': 'integer', 'minimum': 1, 'maximum': 50},
|
||||||
'use_sell_signal': {'type': 'boolean'},
|
'use_sell_signal': {'type': 'boolean'},
|
||||||
'sell_profit_only': {'type': 'boolean'},
|
'sell_profit_only': {'type': 'boolean'},
|
||||||
|
'sell_profit_offset': {'type': 'number', 'minimum': 0.0},
|
||||||
'ignore_roi_if_buy_signal': {'type': 'boolean'}
|
'ignore_roi_if_buy_signal': {'type': 'boolean'}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -299,6 +299,7 @@ def generate_backtest_stats(btdata: Dict[str, DataFrame],
|
||||||
'minimal_roi': config['minimal_roi'],
|
'minimal_roi': config['minimal_roi'],
|
||||||
'use_sell_signal': config['ask_strategy']['use_sell_signal'],
|
'use_sell_signal': config['ask_strategy']['use_sell_signal'],
|
||||||
'sell_profit_only': config['ask_strategy']['sell_profit_only'],
|
'sell_profit_only': config['ask_strategy']['sell_profit_only'],
|
||||||
|
'sell_profit_offset': config['ask_strategy']['sell_profit_offset'],
|
||||||
'ignore_roi_if_buy_signal': config['ask_strategy']['ignore_roi_if_buy_signal'],
|
'ignore_roi_if_buy_signal': config['ask_strategy']['ignore_roi_if_buy_signal'],
|
||||||
**daily_stats,
|
**daily_stats,
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,6 +79,7 @@ class StrategyResolver(IResolver):
|
||||||
("use_sell_signal", True, 'ask_strategy'),
|
("use_sell_signal", True, 'ask_strategy'),
|
||||||
("sell_profit_only", False, 'ask_strategy'),
|
("sell_profit_only", False, 'ask_strategy'),
|
||||||
("ignore_roi_if_buy_signal", False, 'ask_strategy'),
|
("ignore_roi_if_buy_signal", False, 'ask_strategy'),
|
||||||
|
("sell_profit_offset", 0.0, 'ask_strategy'),
|
||||||
("disable_dataframe_checks", False, None),
|
("disable_dataframe_checks", False, None),
|
||||||
]
|
]
|
||||||
for attribute, default, subkey in attributes:
|
for attribute, default, subkey in attributes:
|
||||||
|
|
|
@ -505,18 +505,19 @@ class IStrategy(ABC):
|
||||||
# Set current rate to high for backtesting sell
|
# Set current rate to high for backtesting sell
|
||||||
current_rate = high or rate
|
current_rate = high or rate
|
||||||
current_profit = trade.calc_profit_ratio(current_rate)
|
current_profit = trade.calc_profit_ratio(current_rate)
|
||||||
config_ask_strategy = self.config.get('ask_strategy', {})
|
ask_strategy = self.config.get('ask_strategy', {})
|
||||||
|
|
||||||
# if buy signal and ignore_roi is set, we don't need to evaluate min_roi.
|
# if buy signal and ignore_roi is set, we don't need to evaluate min_roi.
|
||||||
roi_reached = (not (buy and config_ask_strategy.get('ignore_roi_if_buy_signal', False))
|
roi_reached = (not (buy and ask_strategy.get('ignore_roi_if_buy_signal', False))
|
||||||
and self.min_roi_reached(trade=trade, current_profit=current_profit,
|
and self.min_roi_reached(trade=trade, current_profit=current_profit,
|
||||||
current_time=date))
|
current_time=date))
|
||||||
|
|
||||||
if config_ask_strategy.get('sell_profit_only', False) and trade.calc_profit(rate=rate) <= 0:
|
if (ask_strategy.get('sell_profit_only', False)
|
||||||
|
and trade.calc_profit(rate=rate) <= ask_strategy.get('sell_profit_offset', 0)):
|
||||||
# Negative profits and sell_profit_only - ignore sell signal
|
# Negative profits and sell_profit_only - ignore sell signal
|
||||||
sell_signal = False
|
sell_signal = False
|
||||||
else:
|
else:
|
||||||
sell_signal = sell and not buy and config_ask_strategy.get('use_sell_signal', True)
|
sell_signal = sell and not buy and ask_strategy.get('use_sell_signal', True)
|
||||||
# TODO: return here if sell-signal should be favored over ROI
|
# TODO: return here if sell-signal should be favored over ROI
|
||||||
|
|
||||||
# Start evaluations
|
# Start evaluations
|
||||||
|
|
Loading…
Reference in New Issue
Block a user