Align edge documentation to configuration page
This commit is contained in:
parent
83ed0b38c1
commit
48935d2932
153
docs/edge.md
153
docs/edge.md
@ -1,4 +1,4 @@
|
|||||||
# Edge positioning
|
# Edge positioning
|
||||||
|
|
||||||
This page explains how to use Edge Positioning module in your bot in order to enter into a trade only if the trade has a reasonable win rate and risk reward ratio, and consequently adjust your position size and stoploss.
|
This page explains how to use Edge Positioning module in your bot in order to enter into a trade only if the trade has a reasonable win rate and risk reward ratio, and consequently adjust your position size and stoploss.
|
||||||
|
|
||||||
@ -9,6 +9,7 @@ This page explains how to use Edge Positioning module in your bot in order to en
|
|||||||
Edge does not consider anything else than buy/sell/stoploss signals. So trailing stoploss, ROI, and everything else are ignored in its calculation.
|
Edge does not consider anything else than buy/sell/stoploss signals. So trailing stoploss, ROI, and everything else are ignored in its calculation.
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
||||||
Trading is all about probability. No one can claim that he has a strategy working all the time. You have to assume that sometimes you lose.
|
Trading is all about probability. No one can claim that he has a strategy working all the time. You have to assume that sometimes you lose.
|
||||||
|
|
||||||
But it doesn't mean there is no rule, it only means rules should work "most of the time". Let's play a game: we toss a coin, heads: I give you 10$, tails: you give me 10$. Is it an interesting game? No, it's quite boring, isn't it?
|
But it doesn't mean there is no rule, it only means rules should work "most of the time". Let's play a game: we toss a coin, heads: I give you 10$, tails: you give me 10$. Is it an interesting game? No, it's quite boring, isn't it?
|
||||||
@ -22,43 +23,61 @@ Let's complicate it more: you win 80% of the time but only 2$, I win 20% of the
|
|||||||
The question is: How do you calculate that? How do you know if you wanna play?
|
The question is: How do you calculate that? How do you know if you wanna play?
|
||||||
|
|
||||||
The answer comes to two factors:
|
The answer comes to two factors:
|
||||||
|
|
||||||
- Win Rate
|
- Win Rate
|
||||||
- Risk Reward Ratio
|
- Risk Reward Ratio
|
||||||
|
|
||||||
### Win Rate
|
### Win Rate
|
||||||
|
|
||||||
Win Rate (*W*) is is the mean over some amount of trades (*N*) what is the percentage of winning trades to total number of trades (note that we don't consider how much you gained but only if you won or not).
|
Win Rate (*W*) is is the mean over some amount of trades (*N*) what is the percentage of winning trades to total number of trades (note that we don't consider how much you gained but only if you won or not).
|
||||||
|
|
||||||
W = (Number of winning trades) / (Total number of trades) = (Number of winning trades) / N
|
```
|
||||||
|
W = (Number of winning trades) / (Total number of trades) = (Number of winning trades) / N
|
||||||
|
```
|
||||||
|
|
||||||
Complementary Loss Rate (*L*) is defined as
|
Complementary Loss Rate (*L*) is defined as
|
||||||
|
|
||||||
L = (Number of losing trades) / (Total number of trades) = (Number of losing trades) / N
|
```
|
||||||
|
L = (Number of losing trades) / (Total number of trades) = (Number of losing trades) / N
|
||||||
|
```
|
||||||
|
|
||||||
or, which is the same, as
|
or, which is the same, as
|
||||||
|
|
||||||
L = 1 – W
|
```
|
||||||
|
L = 1 – W
|
||||||
|
```
|
||||||
|
|
||||||
### Risk Reward Ratio
|
### Risk Reward Ratio
|
||||||
|
|
||||||
Risk Reward Ratio (*R*) is a formula used to measure the expected gains of a given investment against the risk of loss. It is basically what you potentially win divided by what you potentially lose:
|
Risk Reward Ratio (*R*) is a formula used to measure the expected gains of a given investment against the risk of loss. It is basically what you potentially win divided by what you potentially lose:
|
||||||
|
|
||||||
R = Profit / Loss
|
```
|
||||||
|
R = Profit / Loss
|
||||||
|
```
|
||||||
|
|
||||||
Over time, on many trades, you can calculate your risk reward by dividing your average profit on winning trades by your average loss on losing trades:
|
Over time, on many trades, you can calculate your risk reward by dividing your average profit on winning trades by your average loss on losing trades:
|
||||||
|
|
||||||
Average profit = (Sum of profits) / (Number of winning trades)
|
```
|
||||||
|
Average profit = (Sum of profits) / (Number of winning trades)
|
||||||
|
|
||||||
Average loss = (Sum of losses) / (Number of losing trades)
|
Average loss = (Sum of losses) / (Number of losing trades)
|
||||||
|
|
||||||
R = (Average profit) / (Average loss)
|
R = (Average profit) / (Average loss)
|
||||||
|
```
|
||||||
|
|
||||||
### Expectancy
|
### Expectancy
|
||||||
|
|
||||||
At this point we can combine *W* and *R* to create an expectancy ratio. This is a simple process of multiplying the risk reward ratio by the percentage of winning trades and subtracting the percentage of losing trades, which is calculated as follows:
|
At this point we can combine *W* and *R* to create an expectancy ratio. This is a simple process of multiplying the risk reward ratio by the percentage of winning trades and subtracting the percentage of losing trades, which is calculated as follows:
|
||||||
|
|
||||||
Expectancy Ratio = (Risk Reward Ratio X Win Rate) – Loss Rate = (R X W) – L
|
```
|
||||||
|
Expectancy Ratio = (Risk Reward Ratio X Win Rate) – Loss Rate = (R X W) – L
|
||||||
|
```
|
||||||
|
|
||||||
So lets say your Win rate is 28% and your Risk Reward Ratio is 5:
|
So lets say your Win rate is 28% and your Risk Reward Ratio is 5:
|
||||||
|
|
||||||
Expectancy = (5 X 0.28) – 0.72 = 0.68
|
```
|
||||||
|
Expectancy = (5 X 0.28) – 0.72 = 0.68
|
||||||
|
```
|
||||||
|
|
||||||
Superficially, this means that on average you expect this strategy’s trades to return .68 times the size of your loses. This is important for two reasons: First, it may seem obvious, but you know right away that you have a positive return. Second, you now have a number you can compare to other candidate systems to make decisions about which ones you employ.
|
Superficially, this means that on average you expect this strategy’s trades to return .68 times the size of your loses. This is important for two reasons: First, it may seem obvious, but you know right away that you have a positive return. Second, you now have a number you can compare to other candidate systems to make decisions about which ones you employ.
|
||||||
|
|
||||||
@ -69,6 +88,7 @@ You can also use this value to evaluate the effectiveness of modifications to th
|
|||||||
**NOTICE:** It's important to keep in mind that Edge is testing your expectancy using historical data, there's no guarantee that you will have a similar edge in the future. It's still vital to do this testing in order to build confidence in your methodology, but be wary of "curve-fitting" your approach to the historical data as things are unlikely to play out the exact same way for future trades.
|
**NOTICE:** It's important to keep in mind that Edge is testing your expectancy using historical data, there's no guarantee that you will have a similar edge in the future. It's still vital to do this testing in order to build confidence in your methodology, but be wary of "curve-fitting" your approach to the historical data as things are unlikely to play out the exact same way for future trades.
|
||||||
|
|
||||||
## How does it work?
|
## How does it work?
|
||||||
|
|
||||||
If enabled in config, Edge will go through historical data with a range of stoplosses in order to find buy and sell/stoploss signals. It then calculates win rate and expectancy over *N* trades for each stoploss. Here is an example:
|
If enabled in config, Edge will go through historical data with a range of stoplosses in order to find buy and sell/stoploss signals. It then calculates win rate and expectancy over *N* trades for each stoploss. Here is an example:
|
||||||
|
|
||||||
| Pair | Stoploss | Win Rate | Risk Reward Ratio | Expectancy |
|
| Pair | Stoploss | Win Rate | Risk Reward Ratio | Expectancy |
|
||||||
@ -83,6 +103,7 @@ The goal here is to find the best stoploss for the strategy in order to have the
|
|||||||
Edge module then forces stoploss value it evaluated to your strategy dynamically.
|
Edge module then forces stoploss value it evaluated to your strategy dynamically.
|
||||||
|
|
||||||
### Position size
|
### Position size
|
||||||
|
|
||||||
Edge also dictates the stake amount for each trade to the bot according to the following factors:
|
Edge also dictates the stake amount for each trade to the bot according to the following factors:
|
||||||
|
|
||||||
- Allowed capital at risk
|
- Allowed capital at risk
|
||||||
@ -90,13 +111,17 @@ Edge also dictates the stake amount for each trade to the bot according to the f
|
|||||||
|
|
||||||
Allowed capital at risk is calculated as follows:
|
Allowed capital at risk is calculated as follows:
|
||||||
|
|
||||||
Allowed capital at risk = (Capital available_percentage) X (Allowed risk per trade)
|
```
|
||||||
|
Allowed capital at risk = (Capital available_percentage) X (Allowed risk per trade)
|
||||||
|
```
|
||||||
|
|
||||||
Stoploss is calculated as described above against historical data.
|
Stoploss is calculated as described above against historical data.
|
||||||
|
|
||||||
Your position size then will be:
|
Your position size then will be:
|
||||||
|
|
||||||
Position size = (Allowed capital at risk) / Stoploss
|
```
|
||||||
|
Position size = (Allowed capital at risk) / Stoploss
|
||||||
|
```
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
@ -115,100 +140,30 @@ Available capital doesn’t change before a position is sold. Let’s assume tha
|
|||||||
So the Bot receives another buy signal for trade 4 with a stoploss at 2% then your position size would be **0.055 / 0.02 = 2.75 ETH**.
|
So the Bot receives another buy signal for trade 4 with a stoploss at 2% then your position size would be **0.055 / 0.02 = 2.75 ETH**.
|
||||||
|
|
||||||
## Configurations
|
## Configurations
|
||||||
|
|
||||||
Edge module has following configuration options:
|
Edge module has following configuration options:
|
||||||
|
|
||||||
#### enabled
|
| Parameter | Description |
|
||||||
If true, then Edge will run periodically.
|
|------------|-------------|
|
||||||
|
| `enabled` | If true, then Edge will run periodically. <br>*Defaults to `false`.* <br> ***Datatype:*** *Boolean*
|
||||||
(defaults to false)
|
| `process_throttle_secs` | How often should Edge run in seconds. <br>*Defaults to `3600` (once per hour).* <br> ***Datatype:*** *Integer*
|
||||||
|
| `calculate_since_number_of_days` | Number of days of data against which Edge calculates Win Rate, Risk Reward and Expectancy. <br> **Note** that it downloads historical data so increasing this number would lead to slowing down the bot. <br>*Defaults to `7` (once per hour).* <br> ***Datatype:*** *Integer*
|
||||||
#### process_throttle_secs
|
| `capital_available_percentage` | This is the percentage of the total capital on exchange in stake currency. <br>As an example if you have 10 ETH available in your wallet on the exchange and this value is 0.5 (which is 50%), then the bot will use a maximum amount of 5 ETH for trading and considers it as available capital. <br>*Defaults to `0.5` (once per hour).* <br> ***Datatype:*** *Float*
|
||||||
How often should Edge run in seconds?
|
| `allowed_risk` | Ratio of allowed risk per trade. <br>*Defaults to `0.01` (1%)).* <br> ***Datatype:*** *Float*
|
||||||
|
| `stoploss_range_min` | Minimum stoploss. <br>*Defaults to `-0.01`.* <br> ***Datatype:*** *Float*
|
||||||
(defaults to 3600 so one hour)
|
| `stoploss_range_max` | Maximum stoploss. <br>*Defaults to `-0.10`.* <br> ***Datatype:*** *Float*
|
||||||
|
| `stoploss_range_step` | As an example if this is set to -0.01 then Edge will test the strategy for `[-0.01, -0,02, -0,03 ..., -0.09, -0.10]` ranges. <br> **Note** than having a smaller step means having a bigger range which could lead to slow calculation. <br> If you set this parameter to -0.001, you then slow down the Edge calculation by a factor of 10. <br>*Defaults to `-0.001`.* <br> ***Datatype:*** *Float*
|
||||||
#### calculate_since_number_of_days
|
| `minimum_winrate` | It filters out pairs which don't have at least minimum_winrate. <br>This comes handy if you want to be conservative and don't comprise win rate in favour of risk reward ratio. <br>*Defaults to `0.60`.* <br> ***Datatype:*** *Float*
|
||||||
Number of days of data against which Edge calculates Win Rate, Risk Reward and Expectancy
|
| `minimum_expectancy` | It filters out pairs which have the expectancy lower than this number. <br>Having an expectancy of 0.20 means if you put 10$ on a trade you expect a 12$ return. <br>*Defaults to `0.20`.* <br> ***Datatype:*** *Float*
|
||||||
Note that it downloads historical data so increasing this number would lead to slowing down the bot.
|
| `min_trade_number` | When calculating *W*, *R* and *E* (expectancy) against historical data, you always want to have a minimum number of trades. The more this number is the more Edge is reliable. <br>Having a win rate of 100% on a single trade doesn't mean anything at all. But having a win rate of 70% over past 100 trades means clearly something. <br>*Defaults to `10` (it is highly recommended not to decrease this number).* <br> ***Datatype:*** *Integer*
|
||||||
|
| `max_trade_duration_minute` | Edge will filter out trades with long duration. If a trade is profitable after 1 month, it is hard to evaluate the strategy based on it. But if most of trades are profitable and they have maximum duration of 30 minutes, then it is clearly a good sign.<br>**NOTICE:** While configuring this value, you should take into consideration your ticker interval. As an example filtering out trades having duration less than one day for a strategy which has 4h interval does not make sense. Default value is set assuming your strategy interval is relatively small (1m or 5m, etc.).<br>*Defaults to `1440` (one day).* <br> ***Datatype:*** *Integer*
|
||||||
(defaults to 7)
|
| `remove_pumps` | Edge will remove sudden pumps in a given market while going through historical data. However, given that pumps happen very often in crypto markets, we recommend you keep this off.<br>*Defaults to `false`.* <br> ***Datatype:*** *Boolean*
|
||||||
|
|
||||||
#### capital_available_percentage
|
|
||||||
This is the percentage of the total capital on exchange in stake currency.
|
|
||||||
|
|
||||||
As an example if you have 10 ETH available in your wallet on the exchange and this value is 0.5 (which is 50%), then the bot will use a maximum amount of 5 ETH for trading and considers it as available capital.
|
|
||||||
|
|
||||||
(defaults to 0.5)
|
|
||||||
|
|
||||||
#### allowed_risk
|
|
||||||
Percentage of allowed risk per trade.
|
|
||||||
|
|
||||||
(defaults to 0.01 so 1%)
|
|
||||||
|
|
||||||
#### stoploss_range_min
|
|
||||||
|
|
||||||
Minimum stoploss.
|
|
||||||
|
|
||||||
(defaults to -0.01)
|
|
||||||
|
|
||||||
#### stoploss_range_max
|
|
||||||
|
|
||||||
Maximum stoploss.
|
|
||||||
|
|
||||||
(defaults to -0.10)
|
|
||||||
|
|
||||||
#### stoploss_range_step
|
|
||||||
|
|
||||||
As an example if this is set to -0.01 then Edge will test the strategy for \[-0.01, -0,02, -0,03 ..., -0.09, -0.10\] ranges.
|
|
||||||
Note than having a smaller step means having a bigger range which could lead to slow calculation.
|
|
||||||
|
|
||||||
If you set this parameter to -0.001, you then slow down the Edge calculation by a factor of 10.
|
|
||||||
|
|
||||||
(defaults to -0.01)
|
|
||||||
|
|
||||||
#### minimum_winrate
|
|
||||||
|
|
||||||
It filters out pairs which don't have at least minimum_winrate.
|
|
||||||
|
|
||||||
This comes handy if you want to be conservative and don't comprise win rate in favour of risk reward ratio.
|
|
||||||
|
|
||||||
(defaults to 0.60)
|
|
||||||
|
|
||||||
#### minimum_expectancy
|
|
||||||
|
|
||||||
It filters out pairs which have the expectancy lower than this number.
|
|
||||||
|
|
||||||
Having an expectancy of 0.20 means if you put 10$ on a trade you expect a 12$ return.
|
|
||||||
|
|
||||||
(defaults to 0.20)
|
|
||||||
|
|
||||||
#### min_trade_number
|
|
||||||
|
|
||||||
When calculating *W*, *R* and *E* (expectancy) against historical data, you always want to have a minimum number of trades. The more this number is the more Edge is reliable.
|
|
||||||
|
|
||||||
Having a win rate of 100% on a single trade doesn't mean anything at all. But having a win rate of 70% over past 100 trades means clearly something.
|
|
||||||
|
|
||||||
(defaults to 10, it is highly recommended not to decrease this number)
|
|
||||||
|
|
||||||
#### max_trade_duration_minute
|
|
||||||
|
|
||||||
Edge will filter out trades with long duration. If a trade is profitable after 1 month, it is hard to evaluate the strategy based on it. But if most of trades are profitable and they have maximum duration of 30 minutes, then it is clearly a good sign.
|
|
||||||
|
|
||||||
**NOTICE:** While configuring this value, you should take into consideration your ticker interval. As an example filtering out trades having duration less than one day for a strategy which has 4h interval does not make sense. Default value is set assuming your strategy interval is relatively small (1m or 5m, etc.).
|
|
||||||
|
|
||||||
(defaults to 1 day, i.e. to 60 * 24 = 1440 minutes)
|
|
||||||
|
|
||||||
#### remove_pumps
|
|
||||||
|
|
||||||
Edge will remove sudden pumps in a given market while going through historical data. However, given that pumps happen very often in crypto markets, we recommend you keep this off.
|
|
||||||
|
|
||||||
(defaults to false)
|
|
||||||
|
|
||||||
## Running Edge independently
|
## Running Edge independently
|
||||||
|
|
||||||
You can run Edge independently in order to see in details the result. Here is an example:
|
You can run Edge independently in order to see in details the result. Here is an example:
|
||||||
|
|
||||||
```bash
|
``` bash
|
||||||
freqtrade edge
|
freqtrade edge
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user