From 66a479c26a0f1bb0fb582b54142c2a9b6c81f2aa Mon Sep 17 00:00:00 2001 From: Matthias Date: Sat, 15 Jan 2022 15:11:13 +0100 Subject: [PATCH] Small doc improvements --- docs/bot-basics.md | 6 ++---- docs/strategy-callbacks.md | 16 +++++++++------- tests/test_persistence.py | 4 +--- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/docs/bot-basics.md b/docs/bot-basics.md index 92ecfc901..a9a2628f6 100644 --- a/docs/bot-basics.md +++ b/docs/bot-basics.md @@ -38,8 +38,7 @@ By default, loop runs every few seconds (`internals.process_throttle_secs`) and * Considers stoploss, ROI and sell-signal, `custom_sell()` and `custom_stoploss()`. * Determine sell-price based on `ask_strategy` configuration setting or by using the `custom_exit_price()` callback. * Before a sell order is placed, `confirm_trade_exit()` strategy callback is called. -* Check position adjustments for open trades if enabled. - * Call `adjust_trade_position()` strategy callback and place additional order if required. +* Check position adjustments for open trades if enabled by calling `adjust_trade_position()` and place additional order if required. * Check if trade-slots are still available (if `max_open_trades` is reached). * Verifies buy signal trying to enter new positions. * Determine buy-price based on `bid_strategy` configuration setting, or by using the `custom_entry_price()` callback. @@ -60,10 +59,9 @@ This loop will be repeated again and again until the bot is stopped. * Confirm trade buy / sell (calls `confirm_trade_entry()` and `confirm_trade_exit()` if implemented in the strategy). * Call `custom_entry_price()` (if implemented in the strategy) to determine entry price (Prices are moved to be within the opening candle). * Determine stake size by calling the `custom_stake_amount()` callback. + * Check position adjustments for open trades if enabled and call `adjust_trade_position()` to determine if an additional order is requested. * Call `custom_stoploss()` and `custom_sell()` to find custom exit points. * For sells based on sell-signal and custom-sell: Call `custom_exit_price()` to determine exit price (Prices are moved to be within the closing candle). - * Check position adjustments for open trades if enabled and call `adjust_trade_position()` determine additional order is required. - * Generate backtest report output !!! Note diff --git a/docs/strategy-callbacks.md b/docs/strategy-callbacks.md index e56526e99..6edc549a4 100644 --- a/docs/strategy-callbacks.md +++ b/docs/strategy-callbacks.md @@ -572,19 +572,21 @@ class AwesomeStrategy(IStrategy): ## Adjust trade position -The `position_adjustment_enable` strategy property enables the usage of `adjust_trade_position()` callback in strategy. +The `position_adjustment_enable` strategy property enables the usage of `adjust_trade_position()` callback in the strategy. For performance reasons, it's disabled by default and freqtrade will show a warning message on startup if enabled. `adjust_trade_position()` can be used to perform additional orders, for example to manage risk with DCA (Dollar Cost Averaging). -The strategy is expected to return a stake_amount if and when an additional buy order should be made (position is increased). -If there is not enough funds in the wallet then nothing will happen. -Additional orders also mean additional fees and those orders don't count towards `max_open_trades`. -This callback is called very frequently, so you must keep your implementation as fast as possible. -This callback is NOT called when there is an open order (either buy or sell) waiting for execution. + +The strategy is expected to return a stake_amount (in stake currency) between `min_stake` and `max_stake` if and when an additional buy order should be made (position is increased). +If there are not enough funds in the wallet (the return value is above `max_stake`) then the signal will be ignored. +Additional orders also result in additional fees and those orders don't count towards `max_open_trades`. + +This callback is **not** called when there is an open order (either buy or sell) waiting for execution. +`adjust_trade_position()` is called very frequently for the duration of a trade, so you must keep your implementation as performant as possible. !!! Note "About stake size" Using fixed stake size means it will be the amount used for the first order, just like without position adjustment. If you wish to buy additional orders with DCA, then make sure to leave enough funds in the wallet for that. - Using 'unlimited' stake amount with DCA orders requires you to also implement custom_stake_amount callback to avoid allocating all funds to the initial order. + Using 'unlimited' stake amount with DCA orders requires you to also implement the `custom_stake_amount()` callback to avoid allocating all funds to the initial order. !!! Warning Stoploss is still calculated from the initial opening price, not averaged price. diff --git a/tests/test_persistence.py b/tests/test_persistence.py index 958f3c42e..d98238f6f 100644 --- a/tests/test_persistence.py +++ b/tests/test_persistence.py @@ -1498,8 +1498,6 @@ def test_recalc_trade_from_orders(fee): trade.orders.append(sell1) trade.recalc_trade_from_orders() - avg_price = (o1_cost + o2_cost + o3_cost) / (o1_amount + o2_amount + o3_amount) - assert trade.amount == o1_amount + o2_amount + o3_amount assert trade.stake_amount == o1_cost + o2_cost + o3_cost assert trade.open_rate == avg_price @@ -1582,7 +1580,7 @@ def test_recalc_trade_from_orders_ignores_bad_orders(fee): assert trade.open_trade_value == o1_trade_val assert trade.nr_of_successful_buys == 1 -# Let's try with some other orders + # Let's try with some other orders order3 = Order( ft_order_side='buy', ft_pair=trade.pair,