# Buggy code
def _rpc_daily_profit(
    self, timescale: int, stake_currency: str, fiat_display_currency: str
) -> List[List[Any]]:
    today = datetime.utcnow().date()
    profit_days: Dict[date, Dict] = {}

    if not (isinstance(timescale, int) and timescale > 0):
        raise RPCException("timescale must be an integer greater than 0")

    for day in range(0, timescale):
        profitday = today - timedelta(days=day)
        trades = (
            Trade.query.filter(Trade.is_open.is_(False))
            .filter(Trade.close_date >= profitday)
            .filter(Trade.close_date < (profitday + timedelta(days=1)))
            .order_by(Trade.close_date)
            .all()
        )
        curdayprofit = sum(trade.calc_profit() for trade in trades)
        profit_days[profitday] = {
            "amount": f"{curdayprofit:.8f}",
            "trades": len(trades),
        }

    return [
        [
            key,
            "{value:.8f} {symbol}".format(
                value=float(value["amount"]), symbol=stake_currency
            ),
            "{value:.3f} {symbol}".format(
                value=self._fiat_converter.convert_amount(
                    value["amount"], stake_currency, fiat_display_currency
                )
                if self._fiat_converter
                else 0,
                symbol=fiat_display_currency,
            ),
            "{value} trade{s}".format(
                value=value["trades"], s="" if value["trades"] < 2 else "s"
            ),
        ]
        for key, value in profit_days.items()
    ]


# Traceback (sqlalchemy.exc.InvalidRequestError)
2019-06-30 03:51:36,539 - freqtrade.rpc.telegram - INFO - Executing handler: _forcebuy for chat_id: 146554112
2019-06-30 03:51:36,545 - freqtrade.freqtradebot - INFO - Using Last Ask / Last Price
2019-06-30 03:51:37,260 - freqtrade.rpc.rpc_manager - INFO - Sending rpc message: {'type': buy, 'exchange': 'Binance', 'pair': 'ALGO/USDT', 'limit': 1.5642505330623224, 'order_type': 'market', 'stake_amount': 13811.040136000001, 'stake_currency': 'USDT', 'fiat_currency': 'USD'}
2019-06-30 03:51:37,612 - freqtrade.freqtradebot - INFO - Found open order for Trade(id=None, pair=ALGO/USDT, amount=8829.17400000, open_rate=1.56425053, open_since=closed)
2019-06-30 03:51:37,758 - freqtrade.freqtradebot - WARNING - Amount 8829.173999999999 does not match amount 8829.174
2019-06-30 03:51:37,760 - freqtrade.freqtradebot - WARNING - Could not update trade amount: Half bought? Amounts don't match
2019-06-30 03:51:37,760 - freqtrade.persistence - INFO - Updating trade (id=None) ...
2019-06-30 03:51:37,760 - freqtrade.persistence - INFO - MARKET_BUY has been fulfilled for Trade(id=None, pair=ALGO/USDT, amount=8829.17400000, open_rate=1.56425053, open_since=closed).
2019-06-30 03:51:37,761 - freqtrade.rpc.telegram - ERROR - Exception occurred within Telegram module
Traceback (most recent call last):
File "/home/dante/freqtrade/freqtrade/rpc/telegram.py", line 52, in wrapper
return command_handler(self, *args, **kwargs)
File "/home/dante/freqtrade/freqtrade/rpc/telegram.py", line 433, in _forcebuy
self._rpc_forcebuy(pair, price)
File "/home/dante/freqtrade/freqtrade/rpc/rpc.py", line 432, in _rpc_forcebuy
if self._freqtrade.execute_buy(pair, stakeamount, price):
File "/home/dante/freqtrade/freqtrade/freqtradebot.py", line 416, in execute_buy
self.update_trade_state(trade, order)
File "/home/dante/freqtrade/freqtrade/freqtradebot.py", line 539, in update_trade_state
trade.update(order)
File "/home/dante/freqtrade/freqtrade/persistence.py", line 317, in update
cleanup()
File "/home/dante/freqtrade/freqtrade/persistence.py", line 155, in cleanup
Trade.session.flush()
File "/home/dante/.local/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 2445, in flush
raise sa_exc.InvalidRequestError("Session is already flushing")
sqlalchemy.exc.InvalidRequestError: Session is already flushing

# Fixed code
def _rpc_daily_profit(
    self, timescale: int, stake_currency: str, fiat_display_currency: str
) -> List[List[Any]]:
    today = datetime.utcnow().date()
    profit_days: Dict[date, Dict] = {}

    if not (isinstance(timescale, int) and timescale > 0):
        raise RPCException("timescale must be an integer greater than 0")

    for day in range(0, timescale):
        profitday = today - timedelta(days=day)
        trades = (
            Trade.get_trades(
                trade_filter=[
                    Trade.is_open.is_(False),
                    Trade.close_date >= profitday,
                    Trade.close_date < (profitday + timedelta(days=1)),
                ]
            )
            .order_by(Trade.close_date)
            .all()
        )
        curdayprofit = sum(trade.calc_profit() for trade in trades)
        profit_days[profitday] = {
            "amount": f"{curdayprofit:.8f}",
            "trades": len(trades),
        }

    return [
        [
            key,
            "{value:.8f} {symbol}".format(
                value=float(value["amount"]), symbol=stake_currency
            ),
            "{value:.3f} {symbol}".format(
                value=self._fiat_converter.convert_amount(
                    value["amount"], stake_currency, fiat_display_currency
                )
                if self._fiat_converter
                else 0,
                symbol=fiat_display_currency,
            ),
            "{value} trade{s}".format(
                value=value["trades"], s="" if value["trades"] < 2 else "s"
            ),
        ]
        for key, value in profit_days.items()
    ]