Introduce get_free_open_trades() method
This commit is contained in:
parent
8eeabd2372
commit
3dbd83e35a
@ -136,7 +136,7 @@ class FreqtradeBot:
|
|||||||
self.process_maybe_execute_sells(trades)
|
self.process_maybe_execute_sells(trades)
|
||||||
|
|
||||||
# Then looking for buy opportunities
|
# Then looking for buy opportunities
|
||||||
if len(trades) < self.config['max_open_trades']:
|
if self.get_free_open_trades():
|
||||||
self.process_maybe_execute_buys()
|
self.process_maybe_execute_buys()
|
||||||
|
|
||||||
# Check and handle any timed out open orders
|
# Check and handle any timed out open orders
|
||||||
@ -173,6 +173,14 @@ class FreqtradeBot:
|
|||||||
"""
|
"""
|
||||||
return [(pair, self.config['ticker_interval']) for pair in pairs]
|
return [(pair, self.config['ticker_interval']) for pair in pairs]
|
||||||
|
|
||||||
|
def get_free_open_trades(self):
|
||||||
|
"""
|
||||||
|
Return the number of free open trades slots or 0 if
|
||||||
|
max number of open trades reached
|
||||||
|
"""
|
||||||
|
open_trades = len(Trade.get_open_trades())
|
||||||
|
return max(0, self.config['max_open_trades'] - open_trades)
|
||||||
|
|
||||||
def get_target_bid(self, pair: str, tick: Dict = None) -> float:
|
def get_target_bid(self, pair: str, tick: Dict = None) -> float:
|
||||||
"""
|
"""
|
||||||
Calculates bid target between current ask price and last price
|
Calculates bid target between current ask price and last price
|
||||||
@ -229,11 +237,11 @@ class FreqtradeBot:
|
|||||||
Calculate stake amount for "unlimited" stake amount
|
Calculate stake amount for "unlimited" stake amount
|
||||||
:return: None if max number of trades reached
|
:return: None if max number of trades reached
|
||||||
"""
|
"""
|
||||||
open_trades = len(Trade.get_open_trades())
|
free_open_trades = self.get_free_open_trades()
|
||||||
if open_trades >= self.config['max_open_trades']:
|
if not free_open_trades:
|
||||||
return None
|
return None
|
||||||
available_amount = self.wallets.get_free(self.config['stake_currency'])
|
available_amount = self.wallets.get_free(self.config['stake_currency'])
|
||||||
return available_amount / (self.config['max_open_trades'] - open_trades)
|
return available_amount / free_open_trades
|
||||||
|
|
||||||
def _check_available_stake_amount(self, stake_amount: Optional[float]) -> Optional[float]:
|
def _check_available_stake_amount(self, stake_amount: Optional[float]) -> Optional[float]:
|
||||||
"""
|
"""
|
||||||
@ -321,12 +329,12 @@ class FreqtradeBot:
|
|||||||
pair, self.strategy.ticker_interval,
|
pair, self.strategy.ticker_interval,
|
||||||
self.dataprovider.ohlcv(pair, self.strategy.ticker_interval))
|
self.dataprovider.ohlcv(pair, self.strategy.ticker_interval))
|
||||||
|
|
||||||
if buy and not sell and len(Trade.get_open_trades()) < self.config['max_open_trades']:
|
if buy and not sell:
|
||||||
stake_amount = self.get_trade_stake_amount(pair)
|
if not self.get_free_open_trades():
|
||||||
if stake_amount is None:
|
|
||||||
logger.warning("Can't open a new trade: max number of trades is reached")
|
logger.warning("Can't open a new trade: max number of trades is reached")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
stake_amount = self.get_trade_stake_amount(pair)
|
||||||
logger.info(f"Buy signal found: about create a new trade with stake_amount: "
|
logger.info(f"Buy signal found: about create a new trade with stake_amount: "
|
||||||
f"{stake_amount} ...")
|
f"{stake_amount} ...")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user