Skip to content

Commit

Permalink
Add wallet_size to strategy.custom_stake().
Browse files Browse the repository at this point in the history
  • Loading branch information
rokups committed Jul 3, 2021
1 parent 899515c commit 213bf8b
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 5 deletions.
7 changes: 4 additions & 3 deletions freqtrade/freqtradebot.py
Original file line number Diff line number Diff line change
Expand Up @@ -484,13 +484,14 @@ def execute_buy(self, pair: str, stake_amount: float, price: Optional[float] = N
self.strategy.stoploss)

if not self.edge:
max_stake_amount = self.wallets._get_available_stake_amount(
Trade.total_open_trades_stakes())
tied_up_stake = Trade.total_open_trades_stakes()
max_stake_amount = self.wallets._get_available_stake_amount(tied_up_stake)
wallet_size = max_stake_amount + tied_up_stake
stake_amount = strategy_safe_wrapper(self.strategy.custom_stake_amount,
default_retval=None)(
pair=pair, current_time=datetime.now(timezone.utc),
current_rate=buy_limit_requested, proposed_stake=stake_amount,
min_stake=min_stake_amount, max_stake=max_stake_amount)
min_stake=min_stake_amount, max_stake=max_stake_amount, wallet_size=wallet_size)

if not stake_amount or stake_amount > max_stake_amount:
logger.debug(f"Stake amount is {stake_amount}, ignoring possible trade for {pair}.")
Expand Down
5 changes: 4 additions & 1 deletion freqtrade/optimize/backtesting.py
Original file line number Diff line number Diff line change
Expand Up @@ -312,14 +312,17 @@ def _enter_trade(self, pair: str, row: List) -> Optional[LocalTrade]:
except DependencyException:
return None

tied_up_stake = Trade.total_open_trades_stakes()
min_stake_amount = self.exchange.get_min_pair_stake_amount(pair, row[OPEN_IDX], -0.05) or 0
max_stake_amount = self.wallets._get_available_stake_amount(
Trade.total_open_trades_stakes())
wallet_size = max_stake_amount + tied_up_stake

stake_amount = strategy_safe_wrapper(self.strategy.custom_stake_amount,
default_retval=None)(
pair=pair, current_time=row[DATE_IDX].to_pydatetime(), current_rate=row[OPEN_IDX],
proposed_stake=stake_amount, min_stake=min_stake_amount, max_stake=max_stake_amount)
proposed_stake=stake_amount, min_stake=min_stake_amount, max_stake=max_stake_amount,
wallet_size=wallet_size)
if not stake_amount or stake_amount < min_stake_amount or \
(stake_amount or 0) > max_stake_amount:
logger.error(f'Strategy requested stake amount to be {stake_amount}, while stake '
Expand Down
3 changes: 2 additions & 1 deletion freqtrade/strategy/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ def custom_sell(self, pair: str, trade: Trade, current_time: datetime, current_r

def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float,
proposed_stake: float, min_stake: float, max_stake: float,
**kwargs) -> float:
wallet_size: float, **kwargs) -> float:
"""
Customize stake size for each new trade. This method is not called when edge module is
enabled.
Expand All @@ -316,6 +316,7 @@ def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: f
:param proposed_stake: A stake amount proposed by the bot.
:param min_stake: Minimal stake size allowed by exchange.
:param max_stake: Balance available for trading.
:param wallet_size: Size of wallet, including tied up funds.
:return: A stake size, which is between min_stake and max_stake.
"""
return proposed_stake
Expand Down

0 comments on commit 213bf8b

Please sign in to comment.