def __init__(self, startingBalance: float, data: list, strategies: list, strategyInterval: Union[str, None] = None, symbol: str = None, marginEnabled: bool = True, startDate: datetime = None, endDate: datetime = None, precision: int = 4, outputTrades: bool = True): super().__init__(symbol=symbol, precision=precision, startingBalance=startingBalance) self.commissionsPaid = 0 self.marginEnabled = marginEnabled self.outputTrades: bool = outputTrades # Boolean that'll determine whether trades are outputted to file or not. convert_all_dates_to_datetime(data) self.data = data self.check_data() self.interval = self.get_interval() self.intervalMinutes = get_interval_minutes(self.interval) self.profit = 0 self.startTime = None self.endTime = None self.inLongPosition = False self.inShortPosition = False self.currentPeriod = None self.minPeriod = 0 self.pastActivity = [ ] # We'll add previous data here when hovering through graph in GUI. if len(strategyInterval.split()) == 1: strategyInterval = convert_small_interval(strategyInterval) self.strategyInterval = self.interval if strategyInterval is None else strategyInterval self.strategyIntervalMinutes = get_interval_minutes( self.strategyInterval) self.intervalGapMinutes = self.strategyIntervalMinutes - self.intervalMinutes self.intervalGapMultiplier = self.strategyIntervalMinutes // self.intervalMinutes if self.intervalMinutes > self.strategyIntervalMinutes: raise RuntimeError( "Your strategy interval can't be smaller than the data interval." ) self.ema_dict = {} self.rsi_dictionary = {} set_up_strategies(self, strategies) self.startDateIndex = self.get_start_index(startDate) self.endDateIndex = self.get_end_index(endDate)
def __init__(self, startingBalance: float, data: list, strategies: list, strategyInterval: Union[str, None] = None, symbol: str = None, marginEnabled: bool = True, startDate: datetime = None, endDate: datetime = None, drawdownPercentage: int = 100, precision: int = 4, outputTrades: bool = True, logger: Logger = None): super().__init__(symbol=symbol, precision=precision, startingBalance=startingBalance, marginEnabled=marginEnabled) convert_all_dates_to_datetime(data) self.data = data self.check_data() self.outputTrades: bool = outputTrades # Boolean that'll determine whether trades are outputted to file or not. self.interval = self.get_interval() self.intervalMinutes = get_interval_minutes(self.interval) self.pastActivity = [ ] # We'll add previous data here when hovering through graph in GUI. self.drawdownPercentageDecimal = drawdownPercentage / 100 # Percentage of loss at which bot exits backtest. self.optimizerRows = [] self.logger = logger if len(strategyInterval.split()) == 1: strategyInterval = convert_small_interval(strategyInterval) self.allStrategies = get_strategies_dictionary( Strategy.__subclasses__()) self.strategyInterval = self.interval if strategyInterval is None else strategyInterval self.strategyIntervalMinutes = get_interval_minutes( self.strategyInterval) self.intervalGapMinutes = self.strategyIntervalMinutes - self.intervalMinutes self.intervalGapMultiplier = self.strategyIntervalMinutes // self.intervalMinutes if self.intervalMinutes > self.strategyIntervalMinutes: raise RuntimeError( f"Your strategy interval ({self.strategyIntervalMinutes} minute(s)) can't be smaller " f"than the data interval ({self.intervalMinutes} minute(s)).") self.ema_dict = {} self.rsi_dictionary = {} self.setup_strategies(strategies) self.startDateIndex = self.get_start_index(startDate) self.endDateIndex = self.get_end_index(endDate)
Test backtester object. """ import os from datetime import datetime import pytest from algobot.enums import LONG, SHORT, STOP, TRAILING from algobot.helpers import convert_all_dates_to_datetime, load_from_csv from algobot.traders.backtester import Backtester data_path = os.path.join(os.path.dirname(__file__), 'data', '1INCHUSDT_data_1m.csv') test_data = load_from_csv(path=data_path, descending=False) convert_all_dates_to_datetime(test_data) @pytest.fixture(scope='function', name='backtester') def get_backtester(): """ Sets up a backtester object and returns it as a fixture. """ backtester = Backtester( startingBalance=1000, data=test_data, strategies=[], strategyInterval='15m', symbol="1INCHUSDT", marginEnabled=True, )