Add stoploss_value to strategy template
This commit is contained in:
parent
f8639fe938
commit
8574751a07
@ -8,6 +8,9 @@ If you're just getting started, please be familiar with the methods described in
|
|||||||
!!! Note
|
!!! Note
|
||||||
All callback methods described below should only be implemented in a strategy if they are actually used.
|
All callback methods described below should only be implemented in a strategy if they are actually used.
|
||||||
|
|
||||||
|
!!! Tip
|
||||||
|
You can get a strategy template containing all below methods by running `freqtrade new-strategy --strategy MyAwesomeStrategy --template advanced`
|
||||||
|
|
||||||
## Custom stoploss
|
## Custom stoploss
|
||||||
|
|
||||||
A stoploss can only ever move upwards - so if you set it to an absolute profit of 2%, you can never move it below this price.
|
A stoploss can only ever move upwards - so if you set it to an absolute profit of 2%, you can never move it below this price.
|
||||||
@ -37,32 +40,6 @@ E.g. `current_profit = 0.05` (5% profit) - stoploss returns `0.02` - then you "l
|
|||||||
The next section will show some examples on what's possible with the custom stoploss function.
|
The next section will show some examples on what's possible with the custom stoploss function.
|
||||||
Of course, many more things are possible, and all examples can be combined at will.
|
Of course, many more things are possible, and all examples can be combined at will.
|
||||||
|
|
||||||
#### Absolute stoploss
|
|
||||||
|
|
||||||
The below example sets absolute profit levels based on the current profit.
|
|
||||||
|
|
||||||
* Use the regular stoploss until 20% profit is reached
|
|
||||||
* Once profit is > 40%, stoploss will be at 25%, locking in at least 25% of the profit.
|
|
||||||
* Once profit is > 25% - stoploss will be 15%.
|
|
||||||
* Once profit is > 20% - stoploss will be set to 7%.
|
|
||||||
|
|
||||||
``` python
|
|
||||||
custom_stoploss = True
|
|
||||||
|
|
||||||
def stoploss_value(self, pair: str, trade: Trade, current_time: datetime, current_rate: float,
|
|
||||||
current_profit: float, **kwargs) -> float:
|
|
||||||
# TODO: Add full docstring here
|
|
||||||
|
|
||||||
# Calculate as `-desired_stop_from_open + current_profit` to get the distance between current_profit and initial price
|
|
||||||
if current_profit > 0.40:
|
|
||||||
return (-0.25 + current_profit)
|
|
||||||
if current_profit > 0.25:
|
|
||||||
return (-0.15 + current_profit)
|
|
||||||
if current_profit > 0.20:
|
|
||||||
return (-0.7 + current_profit)
|
|
||||||
return 1
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Time based trailing stop
|
#### Time based trailing stop
|
||||||
|
|
||||||
Use the initial stoploss for the first 60 minutes, after this change to 10% trailing stoploss, and after 2 hours (120 minutes) we use a 5% trailing stoploss.
|
Use the initial stoploss for the first 60 minutes, after this change to 10% trailing stoploss, and after 2 hours (120 minutes) we use a 5% trailing stoploss.
|
||||||
@ -101,6 +78,32 @@ In this example, we'll trail the highest price with 10% trailing stoploss for `E
|
|||||||
return -0.15
|
return -0.15
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Absolute stoploss
|
||||||
|
|
||||||
|
The below example sets absolute profit levels based on the current profit.
|
||||||
|
|
||||||
|
* Use the regular stoploss until 20% profit is reached
|
||||||
|
* Once profit is > 40%, stoploss will be at 25%, locking in at least 25% of the profit.
|
||||||
|
* Once profit is > 25% - stoploss will be 15%.
|
||||||
|
* Once profit is > 20% - stoploss will be set to 7%.
|
||||||
|
|
||||||
|
``` python
|
||||||
|
custom_stoploss = True
|
||||||
|
|
||||||
|
def stoploss_value(self, pair: str, trade: Trade, current_time: datetime, current_rate: float,
|
||||||
|
current_profit: float, **kwargs) -> float:
|
||||||
|
# TODO: Add full docstring here
|
||||||
|
|
||||||
|
# Calculate as `-desired_stop_from_open + current_profit` to get the distance between current_profit and initial price
|
||||||
|
if current_profit > 0.40:
|
||||||
|
return (-0.25 + current_profit)
|
||||||
|
if current_profit > 0.25:
|
||||||
|
return (-0.15 + current_profit)
|
||||||
|
if current_profit > 0.20:
|
||||||
|
return (-0.7 + current_profit)
|
||||||
|
return 1
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Custom order timeout rules
|
## Custom order timeout rules
|
||||||
|
@ -12,6 +12,30 @@ def bot_loop_start(self, **kwargs) -> None:
|
|||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
custom_stoploss = True
|
||||||
|
|
||||||
|
def stoploss_value(self, pair: str, trade: 'Trade', current_time: 'datetime', current_rate: float,
|
||||||
|
current_profit: float, **kwargs) -> float:
|
||||||
|
"""
|
||||||
|
Custom stoploss logic, returning the new distance relative to current_rate (as ratio).
|
||||||
|
e.g. returning -0.05 would create a stoploss 5% below current_rate.
|
||||||
|
The custom stoploss can never be below self.stoploss, which serves as a hard maximum loss.
|
||||||
|
|
||||||
|
For full documentation please go to https://www.freqtrade.io/en/latest/strategy-advanced/
|
||||||
|
|
||||||
|
When not implemented by a strategy, returns the initial stoploss value
|
||||||
|
Only called when custom_stoploss is set to True.
|
||||||
|
|
||||||
|
:param pair: Pair that's about to be sold.
|
||||||
|
:param trade: trade object.
|
||||||
|
:param current_time: datetime object, containing the current datetime
|
||||||
|
:param current_rate: Rate, calculated based on pricing settings in ask_strategy.
|
||||||
|
:param current_profit: Current profit (as ratio), calculated based on current_rate.
|
||||||
|
:param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
|
||||||
|
:return float: New stoploss value, relative to the currentrate
|
||||||
|
"""
|
||||||
|
return self.stoploss
|
||||||
|
|
||||||
def confirm_trade_entry(self, pair: str, order_type: str, amount: float, rate: float,
|
def confirm_trade_entry(self, pair: str, order_type: str, amount: float, rate: float,
|
||||||
time_in_force: str, **kwargs) -> bool:
|
time_in_force: str, **kwargs) -> bool:
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user