Flake8 compatibility
This commit is contained in:
parent
cc28f73d7f
commit
30673f84f9
@ -351,11 +351,13 @@ class Backtesting:
|
|||||||
else:
|
else:
|
||||||
return sell_row[OPEN_IDX]
|
return sell_row[OPEN_IDX]
|
||||||
|
|
||||||
def _get_adjust_trade_entry_for_candle(self, trade: LocalTrade, row: Tuple) -> Optional[LocalTrade]:
|
def _get_adjust_trade_entry_for_candle(self, trade: LocalTrade, row: Tuple
|
||||||
|
) -> Optional[LocalTrade]:
|
||||||
|
|
||||||
current_profit = trade.calc_profit_ratio(row[OPEN_IDX])
|
current_profit = trade.calc_profit_ratio(row[OPEN_IDX])
|
||||||
|
|
||||||
stake_amount = strategy_safe_wrapper(self.strategy.adjust_trade_position, default_retval=None)(
|
stake_amount = strategy_safe_wrapper(self.strategy.adjust_trade_position,
|
||||||
|
default_retval=None)(
|
||||||
pair=trade.pair, trade=trade, current_time=row[DATE_IDX].to_pydatetime(),
|
pair=trade.pair, trade=trade, current_time=row[DATE_IDX].to_pydatetime(),
|
||||||
current_rate=row[OPEN_IDX], current_profit=current_profit)
|
current_rate=row[OPEN_IDX], current_profit=current_profit)
|
||||||
|
|
||||||
@ -372,11 +374,15 @@ class Backtesting:
|
|||||||
available_amount = self.wallets.get_available_stake_amount()
|
available_amount = self.wallets.get_available_stake_amount()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
min_stake_amount = self.exchange.get_min_pair_stake_amount(trade.pair, propose_rate, -0.05) or 0
|
min_stake_amount = self.exchange.get_min_pair_stake_amount(
|
||||||
stake_amount = self.wallets.validate_stake_amount(trade.pair, stake_amount, min_stake_amount)
|
trade.pair, propose_rate, -0.05) or 0
|
||||||
stake_amount = self.wallets._check_available_stake_amount(stake_amount, available_amount)
|
stake_amount = self.wallets.validate_stake_amount(trade.pair,
|
||||||
|
stake_amount, min_stake_amount)
|
||||||
|
stake_amount = self.wallets._check_available_stake_amount(stake_amount,
|
||||||
|
available_amount)
|
||||||
except DependencyException:
|
except DependencyException:
|
||||||
logger.debug(f"{trade.pair} adjustment failed, wallet is smaller than asked stake {stake_amount}")
|
logger.debug(f"{trade.pair} adjustment failed, "
|
||||||
|
f"wallet is smaller than asked stake {stake_amount}")
|
||||||
return trade
|
return trade
|
||||||
|
|
||||||
amount = stake_amount / current_price
|
amount = stake_amount / current_price
|
||||||
@ -399,7 +405,7 @@ class Backtesting:
|
|||||||
)
|
)
|
||||||
trade.orders.append(buy_order)
|
trade.orders.append(buy_order)
|
||||||
trade.recalc_trade_from_orders()
|
trade.recalc_trade_from_orders()
|
||||||
self.wallets.update();
|
self.wallets.update()
|
||||||
return trade
|
return trade
|
||||||
|
|
||||||
def _get_sell_trade_entry_for_candle(self, trade: LocalTrade,
|
def _get_sell_trade_entry_for_candle(self, trade: LocalTrade,
|
||||||
|
@ -381,10 +381,9 @@ class IStrategy(ABC, HyperStrategyMixin):
|
|||||||
"""
|
"""
|
||||||
return proposed_stake
|
return proposed_stake
|
||||||
|
|
||||||
|
def adjust_trade_position(self, pair: str, trade: Trade, current_time: datetime,
|
||||||
def adjust_trade_position(self, pair: str, trade: Trade,
|
current_rate: float, current_profit: float, **kwargs
|
||||||
current_time: datetime, current_rate: float, current_profit: float,
|
) -> Optional[float]:
|
||||||
**kwargs) -> Optional[float]:
|
|
||||||
"""
|
"""
|
||||||
Custom trade adjustment logic, returning the stake amount that a trade should be increased.
|
Custom trade adjustment logic, returning the stake amount that a trade should be increased.
|
||||||
This means extra buy orders with additional fees.
|
This means extra buy orders with additional fees.
|
||||||
|
@ -1,30 +1,15 @@
|
|||||||
# pragma pylint: disable=missing-docstring, W0212, line-too-long, C0103, unused-argument
|
# pragma pylint: disable=missing-docstring, W0212, line-too-long, C0103, unused-argument
|
||||||
|
|
||||||
import random
|
|
||||||
from datetime import datetime, timedelta, timezone
|
|
||||||
from pathlib import Path
|
|
||||||
from unittest.mock import MagicMock, PropertyMock
|
|
||||||
import logging
|
|
||||||
|
|
||||||
import numpy as np
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import pytest
|
|
||||||
from arrow import Arrow
|
from arrow import Arrow
|
||||||
|
|
||||||
from freqtrade.commands.optimize_commands import setup_optimize_configuration, start_backtesting
|
|
||||||
from freqtrade.configuration import TimeRange
|
from freqtrade.configuration import TimeRange
|
||||||
from freqtrade.data import history
|
from freqtrade.data import history
|
||||||
from freqtrade.data.btanalysis import BT_DATA_COLUMNS, evaluate_result_multi
|
|
||||||
from freqtrade.data.converter import clean_ohlcv_dataframe
|
|
||||||
from freqtrade.data.dataprovider import DataProvider
|
|
||||||
from freqtrade.data.history import get_timerange
|
from freqtrade.data.history import get_timerange
|
||||||
from freqtrade.enums import RunMode, SellType
|
from freqtrade.enums import SellType
|
||||||
from freqtrade.exceptions import DependencyException, OperationalException
|
|
||||||
from freqtrade.optimize.backtesting import Backtesting
|
from freqtrade.optimize.backtesting import Backtesting
|
||||||
from freqtrade.persistence import LocalTrade
|
from tests.conftest import (patch_exchange)
|
||||||
from freqtrade.resolvers import StrategyResolver
|
|
||||||
from tests.conftest import (get_args, log_has, log_has_re, patch_exchange,
|
|
||||||
patched_configuration_load_config_file)
|
|
||||||
|
|
||||||
def test_backtest_position_adjustment(default_conf, fee, mocker, testdatadir) -> None:
|
def test_backtest_position_adjustment(default_conf, fee, mocker, testdatadir) -> None:
|
||||||
default_conf['use_sell_signal'] = False
|
default_conf['use_sell_signal'] = False
|
||||||
|
@ -8,6 +8,7 @@ from freqtrade.strategy.interface import IStrategy
|
|||||||
from freqtrade.persistence import Trade
|
from freqtrade.persistence import Trade
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
class StrategyTestV2(IStrategy):
|
class StrategyTestV2(IStrategy):
|
||||||
"""
|
"""
|
||||||
Strategy used by tests freqtrade bot.
|
Strategy used by tests freqtrade bot.
|
||||||
@ -163,7 +164,7 @@ class StrategyTestV2(IStrategy):
|
|||||||
for order in trade.orders:
|
for order in trade.orders:
|
||||||
if order.ft_is_open:
|
if order.ft_is_open:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return self.wallets.get_trade_stake_amount(pair, None)
|
return self.wallets.get_trade_stake_amount(pair, None)
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
@ -1506,6 +1506,7 @@ def test_recalc_trade_from_orders(fee):
|
|||||||
assert pytest.approx(trade.fee_open_cost) == o1_fee_cost + o2_fee_cost + o3_fee_cost
|
assert pytest.approx(trade.fee_open_cost) == o1_fee_cost + o2_fee_cost + o3_fee_cost
|
||||||
assert pytest.approx(trade.open_trade_value) == o1_trade_val + o2_trade_val + o3_trade_val
|
assert pytest.approx(trade.open_trade_value) == o1_trade_val + o2_trade_val + o3_trade_val
|
||||||
|
|
||||||
|
|
||||||
def test_recalc_trade_from_orders_ignores_bad_orders(fee):
|
def test_recalc_trade_from_orders_ignores_bad_orders(fee):
|
||||||
|
|
||||||
o1_amount = 100
|
o1_amount = 100
|
||||||
@ -1631,6 +1632,3 @@ def test_recalc_trade_from_orders_ignores_bad_orders(fee):
|
|||||||
assert trade.open_rate == o1_rate
|
assert trade.open_rate == o1_rate
|
||||||
assert trade.fee_open_cost == o1_fee_cost
|
assert trade.fee_open_cost == o1_fee_cost
|
||||||
assert trade.open_trade_value == o1_trade_val
|
assert trade.open_trade_value == o1_trade_val
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user