예제 #1
0
    def __init__(self, config, crypto_currency, dispatchers_list):
        self.crypto_currency = crypto_currency
        self.trader_simulator = None
        self.config = config
        self.traders = None
        self.trader_simulators = None
        self.finalize_enabled = False
        self.dispatchers_list = dispatchers_list

        self.evaluator_threads = []

        self.matrix = EvaluatorMatrix()

        self.social_eval_list = EvaluatorCreator.create_social_eval(
            self.config, self.crypto_currency, self.dispatchers_list)

        self.social_not_threaded_list = EvaluatorCreator.create_social_not_threaded_list(
            self.social_eval_list)

        self.strategies_eval_list = EvaluatorCreator.create_strategies_eval_list(
            self.config)

        self.social_evaluator_refresh = SocialEvaluatorNotThreadedUpdateThread(
            self.social_not_threaded_list)

        self.global_social_updater = SocialGlobalUpdaterThread(self)

        self.evaluator_order_creator = EvaluatorOrderCreator()

        self.final_evaluator = FinalEvaluator(self)
    def __init__(self,
                 config,
                 crypto_currency,
                 dispatchers_list,
                 relevant_evaluators=None):
        if relevant_evaluators is None:
            relevant_evaluators = CONFIG_EVALUATORS_WILDCARD
        self.config = config
        self.crypto_currency = crypto_currency
        self.dispatchers_list = dispatchers_list

        self.symbol_evaluator_list = {}

        if Backtesting.enabled(self.config):
            self.social_eval_list = []
            self.social_not_tasked_list = []
        else:
            self.social_eval_list = EvaluatorCreator.create_social_eval(
                self.config, self.crypto_currency, self.dispatchers_list,
                relevant_evaluators)

            self.social_not_tasked_list = EvaluatorCreator.create_social_not_tasked_list(
                self.social_eval_list)

        self.social_evaluator_refresh_task = SocialEvaluatorNotTaskedUpdateTask(
            self.social_not_tasked_list)
예제 #3
0
    def __init__(self, config):
        self.start_time = time.time()
        self.config = config
        self.startup_config = copy.deepcopy(config)
        self.edited_config = copy.deepcopy(config)
        self.ready = False
        self.watcher = None

        # tools: used for alternative operations on a bot on the fly (ex: backtesting started from web interface)
        self.tools = {
            BOT_TOOLS_BACKTESTING: None,
            BOT_TOOLS_STRATEGY_OPTIMIZER: None,
            BOT_TOOLS_RECORDER: None,
        }

        # Logger
        self.logger = get_logger(self.__class__.__name__)

        # Advanced
        AdvancedManager.init_advanced_classes_if_necessary(self.config)

        # Debug tools
        self.performance_analyser = None
        if CONFIG_DEBUG_OPTION_PERF in self.config and self.config[
                CONFIG_DEBUG_OPTION_PERF]:
            self.performance_analyser = PerformanceAnalyser()

        # Init time frames using enabled strategies
        EvaluatorCreator.init_time_frames_from_strategies(self.config)
        self.time_frames = TimeFrameManager.get_config_time_frame(self.config)

        # Init relevant evaluator names list using enabled strategies
        self.relevant_evaluators = EvaluatorCreator.get_relevant_evaluators_from_strategies(
            self.config)

        # Backtesting
        self.backtesting_enabled = Backtesting.enabled(self.config)

        # Add services to self.config[CONFIG_CATEGORY_SERVICES]
        ServiceCreator.create_services(self.config, self.backtesting_enabled)

        # Notifier
        self.config[CONFIG_NOTIFICATION_INSTANCE] = Notification(self.config)

        # Notify starting
        if self.config[CONFIG_NOTIFICATION_INSTANCE].enabled(
                CONFIG_NOTIFICATION_GLOBAL_INFO):
            self.config[CONFIG_NOTIFICATION_INSTANCE].notify_with_all(
                NOTIFICATION_STARTING_MESSAGE, False)

        self.symbol_threads_manager = {}
        self.exchange_traders = {}
        self.exchange_trader_simulators = {}
        self.trading_mode = None
        self.exchange_trading_modes = {}
        self.exchanges_list = {}
        self.symbol_evaluator_list = {}
        self.crypto_currency_evaluator_list = {}
        self.dispatchers_list = []
        self.symbol_time_frame_updater_threads = []
예제 #4
0
def test_create_social_not_threaded_list():
    evaluator, config = _get_tools()
    so_list = EvaluatorCreator.create_social_eval(config, evaluator.symbol, [],
                                                  CONFIG_EVALUATORS_WILDCARD)
    not_thread_so_list = EvaluatorCreator.create_social_not_threaded_list(
        so_list)
    for evalator in not_thread_so_list:
        assert not evalator.is_threaded
예제 #5
0
    def __init__(self, config):
        self.start_time = time.time()
        self.config = config
        self.startup_config = copy.deepcopy(config)
        self.edited_config = copy.deepcopy(config)
        self.ready = False
        self.watcher = None
        self.current_loop_thread = None

        # tools: used for alternative operations on a bot on the fly (ex: backtesting started from web interface)
        self.tools = {
            BOT_TOOLS_BACKTESTING: None,
            BOT_TOOLS_STRATEGY_OPTIMIZER: None,
            BOT_TOOLS_RECORDER: None,
        }

        # Logger
        self.logger = get_logger(self.__class__.__name__)

        # Advanced
        AdvancedManager.init_advanced_classes_if_necessary(self.config)

        # Debug tools
        self.performance_analyser = None
        if CONFIG_DEBUG_OPTION_PERF in self.config and self.config[
                CONFIG_DEBUG_OPTION_PERF]:
            self.performance_analyser = PerformanceAnalyser()

        # Init time frames using enabled strategies
        EvaluatorCreator.init_time_frames_from_strategies(self.config)
        self.time_frames = TimeFrameManager.get_config_time_frame(self.config)

        # Init relevant evaluator names list using enabled strategies
        self.relevant_evaluators = EvaluatorCreator.get_relevant_evaluators_from_strategies(
            self.config)

        # Backtesting
        self.backtesting_enabled = Backtesting.enabled(self.config)

        # Notifier
        self.config[CONFIG_NOTIFICATION_INSTANCE] = Notification(self.config)

        self.symbol_tasks_manager = {}
        self.exchange_traders = {}
        self.exchange_trader_simulators = {}
        self.trading_mode = None
        self.exchange_trading_modes = {}
        self.exchanges_list = {}
        self.symbol_evaluator_list = {}
        self.crypto_currency_evaluator_list = {}
        self.dispatchers_list = []
        self.global_updaters_by_exchange = {}
        self.async_loop = None
        self.social_eval_tasks = []
        self.real_time_eval_tasks = []

        self.main_task_group = None
예제 #6
0
    def _init_time_frames(self):
        # Init time frames using enabled strategies
        EvaluatorCreator.init_time_frames_from_strategies(self.octobot.get_config())
        self.time_frames = copy.copy(TimeFrameManager.get_config_time_frame(self.octobot.get_config()))

        # Init display time frame
        config_time_frames = TimeFrameManager.get_config_time_frame(self.octobot.get_config())
        if TimeFrames.ONE_HOUR not in config_time_frames and not backtesting_enabled(self.octobot.get_config()):
            config_time_frames.append(TimeFrames.ONE_HOUR)
            TimeFrameManager.sort_config_time_frames(self.octobot.get_config())
예제 #7
0
파일: octobot.py 프로젝트: lipq525/OctoBot
    def __init__(self, config):
        self.start_time = time.time()
        self.config = config
        self.ready = False

        # Logger
        self.logger = logging.getLogger(self.__class__.__name__)

        # Advanced
        AdvancedManager.create_class_list(self.config)

        # Debug tools
        self.performance_analyser = None
        if CONFIG_DEBUG_OPTION_PERF in self.config and self.config[
                CONFIG_DEBUG_OPTION_PERF]:
            self.performance_analyser = PerformanceAnalyser()

        # Init time frames using enabled strategies
        EvaluatorCreator.init_time_frames_from_strategies(self.config)
        self.time_frames = TimeFrameManager.get_config_time_frame(self.config)

        # Init relevant evaluator names list using enabled strategies
        self.relevant_evaluators = EvaluatorCreator.get_relevant_evaluators_from_strategies(
            self.config)

        # Add services to self.config[CONFIG_CATEGORY_SERVICES]
        ServiceCreator.create_services(self.config)

        # Notifier
        self.config[CONFIG_NOTIFICATION_INSTANCE] = Notification(self.config)

        # Notify starting
        if self.config[CONFIG_NOTIFICATION_INSTANCE].enabled(
                CONFIG_NOTIFICATION_GLOBAL_INFO):
            self.config[CONFIG_NOTIFICATION_INSTANCE].notify_with_all(
                NOTIFICATION_STARTING_MESSAGE)

        # Backtesting
        self.backtesting_enabled = None

        self.symbol_threads_manager = {}
        self.exchange_traders = {}
        self.exchange_trader_simulators = {}
        self.exchanges_list = {}
        self.symbol_evaluator_list = {}
        self.crypto_currency_evaluator_list = {}
        self.dispatchers_list = []
        self.symbol_time_frame_updater_threads = []
async def _get_tools():
    symbol = "BTC/USDT"
    exchange_traders = {}
    exchange_traders2 = {}
    config = load_test_config()
    AdvancedManager.create_class_list(config)
    exchange_manager = ExchangeManager(config, ccxt.binance, is_simulated=True)
    await exchange_manager.initialize()
    exchange_inst = exchange_manager.get_exchange()
    trader_inst = TraderSimulator(config, exchange_inst, 0.3)
    await trader_inst.initialize()
    trader_inst.stop_order_manager()
    trader_inst2 = TraderSimulator(config, exchange_inst, 0.3)
    await trader_inst2.initialize()
    trader_inst2.stop_order_manager()
    crypto_currency_evaluator = CryptocurrencyEvaluator(config, "Bitcoin", [])
    symbol_evaluator = SymbolEvaluator(config, symbol,
                                       crypto_currency_evaluator)
    exchange_traders[exchange_inst.get_name()] = trader_inst
    exchange_traders2[exchange_inst.get_name()] = trader_inst2
    symbol_evaluator.set_trader_simulators(exchange_traders)
    symbol_evaluator.set_traders(exchange_traders2)
    symbol_evaluator.strategies_eval_lists[exchange_inst.get_name()] = \
        EvaluatorCreator.create_strategies_eval_list(config)

    trading_mode = DailyTradingMode(config, exchange_inst)
    trading_mode.add_symbol_evaluator(symbol_evaluator)
    final_evaluator = trading_mode.get_only_decider_key(symbol)

    trader_inst.portfolio.portfolio["USDT"] = {
        Portfolio.TOTAL: 2000,
        Portfolio.AVAILABLE: 2000
    }
    return final_evaluator, trader_inst
예제 #9
0
def _get_tools():
    symbol = "BTC/USDT"
    exchange_traders = {}
    exchange_traders2 = {}
    config = load_test_config()
    time_frame = TimeFrames.ONE_HOUR
    AdvancedManager.create_class_list(config)
    symbol_time_frame_updater_thread = SymbolTimeFramesDataUpdaterThread()
    exchange_manager = ExchangeManager(config, ccxt.binance, is_simulated=True)
    exchange_inst = exchange_manager.get_exchange()
    trader_inst = TraderSimulator(config, exchange_inst, 0.3)
    trader_inst.stop_order_manager()
    trader_inst2 = TraderSimulator(config, exchange_inst, 0.3)
    trader_inst2.stop_order_manager()
    crypto_currency_evaluator = CryptocurrencyEvaluator(config, "Bitcoin", [])
    symbol_evaluator = SymbolEvaluator(config, symbol,
                                       crypto_currency_evaluator)
    exchange_traders[exchange_inst.get_name()] = trader_inst
    exchange_traders2[exchange_inst.get_name()] = trader_inst2
    symbol_evaluator.set_trader_simulators(exchange_traders)
    symbol_evaluator.set_traders(exchange_traders2)
    symbol_evaluator.strategies_eval_lists[exchange_inst.get_name(
    )] = EvaluatorCreator.create_strategies_eval_list(config)
    evaluator_thread_manager = EvaluatorThreadsManager(
        config, time_frame, symbol_time_frame_updater_thread, symbol_evaluator,
        exchange_inst, [])
    trader_inst.portfolio.portfolio["USDT"] = {
        Portfolio.TOTAL: 2000,
        Portfolio.AVAILABLE: 2000
    }
    symbol_evaluator.add_evaluator_thread_manager(exchange_inst, time_frame,
                                                  evaluator_thread_manager)
    return symbol_evaluator, exchange_inst, time_frame, evaluator_thread_manager
async def _get_tools(event_loop):
    symbol = "BTC/USDT"
    exchange_traders = {}
    exchange_traders2 = {}
    config = load_test_config()
    time_frame = TimeFrames.ONE_HOUR
    AdvancedManager.create_class_list(config)
    exchange_manager = ExchangeManager(config, ccxt.binance, is_simulated=True)
    await exchange_manager.initialize()
    exchange_inst = exchange_manager.get_exchange()
    global_price_updater = GlobalPriceUpdater(exchange_inst)
    trader_inst = TraderSimulator(config, exchange_inst, 0.3)
    trader_inst.stop_order_manager()
    trader_inst2 = TraderSimulator(config, exchange_inst, 0.3)
    trader_inst2.stop_order_manager()
    crypto_currency_evaluator = CryptocurrencyEvaluator(config, "Bitcoin", [])
    symbol_evaluator = SymbolEvaluator(config, symbol, crypto_currency_evaluator)
    exchange_traders[exchange_inst.get_name()] = trader_inst
    exchange_traders2[exchange_inst.get_name()] = trader_inst2
    symbol_evaluator.set_trader_simulators(exchange_traders)
    symbol_evaluator.set_traders(exchange_traders2)
    symbol_evaluator.strategies_eval_lists[exchange_inst.get_name()] = \
        EvaluatorCreator.create_strategies_eval_list(config)
    trading_mode_inst = get_activated_trading_mode(config)(config, exchange_inst)
    evaluator_task_manager = EvaluatorTaskManager(config, time_frame, global_price_updater,
                                                  symbol_evaluator, exchange_inst, trading_mode_inst, [],
                                                  event_loop)
    trader_inst.portfolio.portfolio["USDT"] = {
        Portfolio.TOTAL: 2000,
        Portfolio.AVAILABLE: 2000
    }
    return evaluator_task_manager, time_frame, global_price_updater, symbol_evaluator, symbol
예제 #11
0
    def _create_symbol_threads_managers(self, exchange, symbol_evaluator):

        if Backtesting.enabled(self.config):
            real_time_ta_eval_list = []
        else:
            # Create real time TA evaluators
            real_time_ta_eval_list = EvaluatorCreator.create_real_time_ta_evals(
                self.config, exchange, symbol_evaluator.get_symbol(),
                self.relevant_evaluators)
        symbol_time_frame_updater_thread = SymbolTimeFramesDataUpdaterThread()
        for time_frame in self.time_frames:
            if exchange.get_exchange_manager().time_frame_exists(
                    time_frame.value, symbol_evaluator.get_symbol()):
                self.symbol_threads_manager[
                    time_frame] = EvaluatorThreadsManager(
                        self.config, time_frame,
                        symbol_time_frame_updater_thread, symbol_evaluator,
                        exchange,
                        self.exchange_trading_modes[exchange.get_name()],
                        real_time_ta_eval_list, self.relevant_evaluators)
            else:
                self.logger.warning(
                    f"{exchange.get_name()} exchange is not supporting the required time frame: "
                    f"'{time_frame.value}' for {symbol_evaluator.get_symbol()}."
                )
        self.symbol_time_frame_updater_threads.append(
            symbol_time_frame_updater_thread)
예제 #12
0
    def _create_symbol_threads_managers(self, exchange, symbol_evaluator,
                                        global_price_updater):

        if Backtesting.enabled(self.config):
            real_time_ta_eval_list = []
        else:
            # Create real time TA evaluators
            real_time_ta_eval_list = EvaluatorCreator.create_real_time_ta_evals(
                self.config, exchange, symbol_evaluator.get_symbol(),
                self.relevant_evaluators)
            self.real_time_eval_tasks = self.real_time_eval_tasks + real_time_ta_eval_list

        for time_frame in self.time_frames:
            if exchange.get_exchange_manager().time_frame_exists(
                    time_frame.value, symbol_evaluator.get_symbol()):
                self.symbol_tasks_manager[time_frame] = \
                    EvaluatorTaskManager(self.config,
                                         time_frame,
                                         global_price_updater,
                                         symbol_evaluator,
                                         exchange,
                                         self.exchange_trading_modes[exchange.get_name()],
                                         real_time_ta_eval_list,
                                         self.async_loop,
                                         self.relevant_evaluators)
            else:
                self.logger.warning(
                    f"{exchange.get_name()} exchange is not supporting the required time frame: "
                    f"'{time_frame.value}' for {symbol_evaluator.get_symbol()}."
                )
예제 #13
0
 def add_evaluator_instance_to_strategy_instances_list(self, evaluator, exchange):
     exchange_name = exchange.get_exchange().get_name()
     for strategy in self.evaluator_instances_by_strategies[exchange_name].keys():
         if EvaluatorCreator.is_relevant_evaluator(evaluator, strategy.get_required_evaluators(self.config)):
             evaluator_parents = evaluator.get_parent_evaluator_classes()
             for evaluator_type in self.evaluator_instances_by_strategies[exchange_name][strategy].keys():
                 if evaluator_type in evaluator_parents:
                     self.evaluator_instances_by_strategies[exchange_name][strategy][evaluator_type].add(evaluator)
예제 #14
0
def get_evaluators_list(strategy_name):
    if strategy_name:
        strategy_class = get_class_from_string(strategy_name, StrategiesEvaluator,
                                               Strategies, evaluator_parent_inspection)
        evaluators = EvaluatorCreator.get_relevant_TAs_for_strategy(strategy_class, get_bot().get_config())
        return set(evaluator.get_name() for evaluator in evaluators)
    else:
        return []
예제 #15
0
 def add_evaluator_thread_manager(self, exchange, symbol, time_frame, evaluator_thread):
     if exchange.get_name() in self.evaluator_thread_managers:
         self.evaluator_thread_managers[exchange.get_name()][time_frame] = evaluator_thread
     else:
         self.evaluator_thread_managers[exchange.get_name()] = {time_frame: evaluator_thread}
         self.final_evaluators[exchange.get_name()] = FinalEvaluator(self, exchange, symbol)
         self.matrices[exchange.get_name()] = EvaluatorMatrix(self.config)
         self.strategies_eval_lists[exchange.get_name()] = EvaluatorCreator.create_strategies_eval_list(self.config)
         self.finalize_enabled_list[exchange.get_name()] = False
    def __init__(self, config, crypto_currency, dispatchers_list):
        self.config = config
        self.crypto_currency = crypto_currency
        self.dispatchers_list = dispatchers_list

        self.symbol_evaluator_list = {}

        if Backtesting.enabled(self.config):
            self.social_eval_list = []
            self.social_not_threaded_list = []
        else:
            self.social_eval_list = EvaluatorCreator.create_social_eval(self.config,
                                                                        self.crypto_currency,
                                                                        self.dispatchers_list)

            self.social_not_threaded_list = EvaluatorCreator.create_social_not_threaded_list(self.social_eval_list)

        self.social_evaluator_refresh = SocialEvaluatorNotThreadedUpdateThread(self.social_not_threaded_list)
    def __init__(self, config, crypto_currency, dispatchers_list):
        self.config = config
        self.crypto_currency = crypto_currency
        self.dispatchers_list = dispatchers_list

        self.symbol_evaluator_list = {}

        if Backtesting.enabled(self.config):
            self.social_eval_list = []
            self.social_not_threaded_list = []
        else:
            self.social_eval_list = EvaluatorCreator.create_social_eval(
                self.config, self.crypto_currency, self.dispatchers_list)

            self.social_not_threaded_list = EvaluatorCreator.create_social_not_threaded_list(
                self.social_eval_list)

        self.social_evaluator_refresh = SocialEvaluatorNotThreadedUpdateThread(
            self.social_not_threaded_list)
예제 #18
0
    def create_evaluation_tasks(self):
        self.logger.info("Evaluation threads creation...")

        # create dispatchers
        self.dispatchers_list = EvaluatorCreator.create_dispatchers(
            self.config, self.async_loop)

        # create Social and TA evaluators
        for crypto_currency, crypto_currency_data in self.config[
                CONFIG_CRYPTO_CURRENCIES].items():

            # create crypto_currency evaluator
            crypto_currency_evaluator = CryptocurrencyEvaluator(
                self.config, crypto_currency, self.dispatchers_list,
                self.relevant_evaluators)
            self.crypto_currency_evaluator_list[
                crypto_currency] = crypto_currency_evaluator
            self.social_eval_tasks = self.social_eval_tasks + crypto_currency_evaluator.get_social_tasked_eval_list(
            )

            # create TA evaluators
            for symbol in crypto_currency_data[CONFIG_CRYPTO_PAIRS]:

                # create symbol evaluator
                symbol_evaluator = SymbolEvaluator(self.config, symbol,
                                                   crypto_currency_evaluator)
                symbol_evaluator.set_traders(self.exchange_traders)
                symbol_evaluator.set_trader_simulators(
                    self.exchange_trader_simulators)

                crypto_currency_evaluator.add_symbol_evaluator(
                    symbol, symbol_evaluator)
                self.symbol_evaluator_list[symbol] = symbol_evaluator

                for exchange in self.exchanges_list.values():
                    global_price_updater = self.global_updaters_by_exchange[
                        exchange.get_name()]
                    if exchange.get_exchange_manager().enabled():

                        # Verify that symbol exists on this exchange
                        if symbol in exchange.get_exchange_manager(
                        ).get_traded_pairs():
                            self._create_symbol_threads_managers(
                                exchange, symbol_evaluator,
                                global_price_updater)

                        # notify that exchange doesn't support this symbol
                        else:
                            if not self.backtesting_enabled:
                                self.logger.warning(
                                    f"{exchange.get_name()} doesn't support {symbol}"
                                )

        self._check_required_evaluators()
예제 #19
0
 def create_symbol_threads_managers(self, symbol, exchange,
                                    symbol_evaluator):
     # Create real time TA evaluators
     real_time_ta_eval_list = EvaluatorCreator.create_real_time_ta_evals(
         self.config, exchange, symbol)
     for time_frame in self.time_frames:
         if exchange.time_frame_exists(time_frame.value):
             self.symbols_threads_manager.append(
                 EvaluatorThreadsManager(self.config, symbol, time_frame,
                                         symbol_evaluator, exchange,
                                         real_time_ta_eval_list))
예제 #20
0
    def add_evaluator_thread_manager(self, exchange, time_frame, trading_mode, evaluator_thread):
        if exchange.get_name() in self.evaluator_thread_managers:
            self.evaluator_thread_managers[exchange.get_name()][time_frame] = evaluator_thread
        else:
            self.evaluator_thread_managers[exchange.get_name()] = {time_frame: evaluator_thread}

            self.matrices[exchange.get_name()] = EvaluatorMatrix(self.config)
            self.strategies_eval_lists[exchange.get_name()] = EvaluatorCreator.create_strategies_eval_list(self.config)
            self.finalize_enabled_list[exchange.get_name()] = False

            self.init_evaluator_instances_by_strategies()

            self.trading_mode_instances[exchange.get_name()] = trading_mode
            trading_mode.add_symbol_evaluator(self)
async def _get_tools():
    symbol = "BTC/USD"
    exchange_traders = {}
    exchange_traders2 = {}
    config = load_test_config()
    config[CONFIG_EVALUATOR]["FullMixedStrategiesEvaluator"] = False
    config[CONFIG_EVALUATOR]["StaggeredStrategiesEvaluator"] = True
    config[CONFIG_TRADING_TENTACLES]["DailyTradingMode"] = False
    config[CONFIG_TRADING_TENTACLES]["StaggeredOrdersTradingMode"] = True
    AdvancedManager.create_class_list(config)
    exchange_manager = ExchangeManager(config, ccxt.binance, is_simulated=True)
    await exchange_manager.initialize()
    exchange_inst = exchange_manager.get_exchange()
    trader_inst = TraderSimulator(config, exchange_inst, 0.3)
    await trader_inst.initialize()
    trader_inst.stop_order_manager()
    crypto_currency_evaluator = CryptocurrencyEvaluator(config, "Bitcoin", [])
    symbol_evaluator = SymbolEvaluator(config, symbol,
                                       crypto_currency_evaluator)
    exchange_traders[exchange_inst.get_name()] = trader_inst
    symbol_evaluator.set_trader_simulators(exchange_traders)
    symbol_evaluator.set_traders(exchange_traders2)
    symbol_evaluator.strategies_eval_lists[exchange_inst.get_name()] = \
        EvaluatorCreator.create_strategies_eval_list(config)

    trading_mode = StaggeredOrdersTradingMode(config, exchange_inst)
    trading_mode.add_symbol_evaluator(symbol_evaluator)
    final_evaluator = trading_mode.get_only_decider_key(symbol)

    trader_inst.register_trading_mode(trading_mode)

    staggered_strategy_evaluator = symbol_evaluator.strategies_eval_lists[
        exchange_inst.get_name()][0]

    trader_inst.portfolio.portfolio["USD"] = {
        Portfolio.TOTAL: 1000,
        Portfolio.AVAILABLE: 1000
    }
    trader_inst.portfolio.portfolio["BTC"] = {
        Portfolio.TOTAL: 10,
        Portfolio.AVAILABLE: 10
    }
    final_evaluator.lowest_buy = 1
    final_evaluator.highest_sell = 10000
    final_evaluator.operational_depth = 50
    final_evaluator.spread = 0.06
    final_evaluator.increment = 0.04

    return final_evaluator, trader_inst, staggered_strategy_evaluator
예제 #22
0
 def _create_symbol_threads_managers(self, symbol, exchange,
                                     symbol_evaluator):
     # Create real time TA evaluators
     real_time_ta_eval_list = EvaluatorCreator.create_real_time_ta_evals(
         self.config, exchange, symbol)
     symbol_time_frame_updater_thread = SymbolTimeFramesDataUpdaterThread()
     for time_frame in self.time_frames:
         if exchange.time_frame_exists(time_frame.value):
             self.symbol_threads_manager[
                 time_frame] = EvaluatorThreadsManager(
                     self.config, symbol, time_frame,
                     symbol_time_frame_updater_thread, symbol_evaluator,
                     exchange, real_time_ta_eval_list)
     self.symbol_time_frame_updater_threads.append(
         symbol_time_frame_updater_thread)
예제 #23
0
 def add_evaluator_thread_manager(self, exchange, symbol, time_frame,
                                  evaluator_thread):
     if exchange.get_name() in self.evaluator_thread_managers:
         self.evaluator_thread_managers[
             exchange.get_name()][time_frame] = evaluator_thread
     else:
         self.evaluator_thread_managers[exchange.get_name()] = {
             time_frame: evaluator_thread
         }
         self.final_evaluators[exchange.get_name()] = FinalEvaluator(
             self, exchange, symbol)
         self.matrices[exchange.get_name()] = EvaluatorMatrix(self.config)
         self.strategies_eval_lists[exchange.get_name(
         )] = EvaluatorCreator.create_strategies_eval_list(self.config)
         self.finalize_enabled_list[exchange.get_name()] = False
예제 #24
0
    def __init__(self):
        self.config = None
        self.symbol = None
        self.time_frame = None
        self.history_time = None
        self.data = None
        self.symbol = None
        self.exchange = None
        self.symbol_evaluator = None
        self.data_changed = False

        self.social_eval_list = []
        self.ta_eval_list = []
        self.real_time_eval_list = []

        self.creator = EvaluatorCreator()
예제 #25
0
 def _create_symbol_threads_managers(self, symbol, exchange, symbol_evaluator):
     # Create real time TA evaluators
     real_time_ta_eval_list = EvaluatorCreator.create_real_time_ta_evals(self.config,
                                                                         exchange,
                                                                         symbol)
     symbol_time_frame_updater_thread = SymbolTimeFramesDataUpdaterThread()
     for time_frame in self.time_frames:
         if exchange.time_frame_exists(time_frame.value):
             self.symbol_threads_manager[time_frame] = EvaluatorThreadsManager(self.config,
                                                                               symbol,
                                                                               time_frame,
                                                                               symbol_time_frame_updater_thread,
                                                                               symbol_evaluator,
                                                                               exchange,
                                                                               real_time_ta_eval_list)
     self.symbol_time_frame_updater_threads.append(symbol_time_frame_updater_thread)
예제 #26
0
파일: octobot.py 프로젝트: lipq525/OctoBot
    def create_evaluation_threads(self):
        self.logger.info("Evaluation threads creation...")

        # create dispatchers
        self.dispatchers_list = EvaluatorCreator.create_dispatchers(
            self.config)

        # create Social and TA evaluators
        for crypto_currency, crypto_currency_data in self.config[
                CONFIG_CRYPTO_CURRENCIES].items():

            # create crypto_currency evaluator
            crypto_currency_evaluator = CryptocurrencyEvaluator(
                self.config, crypto_currency, self.dispatchers_list,
                self.relevant_evaluators)
            self.crypto_currency_evaluator_list[
                crypto_currency] = crypto_currency_evaluator

            # create TA evaluators
            for symbol in crypto_currency_data[CONFIG_CRYPTO_PAIRS]:

                # create symbol evaluator
                symbol_evaluator = SymbolEvaluator(self.config, symbol,
                                                   crypto_currency_evaluator)
                symbol_evaluator.set_traders(self.exchange_traders)
                symbol_evaluator.set_trader_simulators(
                    self.exchange_trader_simulators)

                crypto_currency_evaluator.add_symbol_evaluator(
                    symbol, symbol_evaluator)
                self.symbol_evaluator_list[symbol] = symbol_evaluator

                for exchange in self.exchanges_list.values():
                    if exchange.get_exchange_manager().enabled():

                        # Verify that symbol exists on this exchange
                        if symbol in exchange.get_exchange_manager(
                        ).get_traded_pairs():
                            self._create_symbol_threads_managers(
                                exchange, symbol_evaluator)

                        # notify that exchange doesn't support this symbol
                        else:
                            if not self.backtesting_enabled:
                                self.logger.warning(
                                    "{0} doesn't support {1}".format(
                                        exchange.get_name(), symbol))
예제 #27
0
    def create_evaluation_threads(self):
        self.logger.info("Evaluation threads creation...")

        # create dispatchers
        self.dispatchers_list = EvaluatorCreator.create_dispatchers(
            self.config)

        # create Social and TA evaluators
        for crypto_currency, crypto_currency_data in self.config[
                CONFIG_CRYPTO_CURRENCIES].items():

            # create symbol evaluator
            symbol_evaluator = Symbol_Evaluator(self.config, crypto_currency,
                                                self.dispatchers_list)
            symbol_evaluator.set_traders(self.exchange_traders)
            symbol_evaluator.set_trader_simulators(
                self.exchange_trader_simulators)
            self.symbol_evaluator_list.append(symbol_evaluator)

            # create TA evaluators
            for symbol in crypto_currency_data[CONFIG_CRYPTO_PAIRS]:

                for exchange_type in self.exchanges:
                    exchange = self.exchanges_list[exchange_type.__name__]

                    if exchange.enabled():

                        # Verify that symbol exists on this exchange
                        if exchange.symbol_exists(symbol):
                            self.create_symbol_threads_managers(
                                symbol, exchange, symbol_evaluator)

                        # notify that exchange doesn't support this symbol
                        else:
                            self.logger.warning(
                                "{0} doesn't support {1}".format(
                                    exchange_type.__name__, symbol))
예제 #28
0
    def create_evaluation_threads(self):
        self.logger.info("Evaluation threads creation...")

        # create dispatchers
        self.dispatchers_list = EvaluatorCreator.create_dispatchers(self.config)

        # create Social and TA evaluators
        for crypto_currency, crypto_currency_data in self.config[CONFIG_CRYPTO_CURRENCIES].items():

            # create crypto_currency evaluator
            crypto_currency_evaluator = CryptocurrencyEvaluator(self.config, crypto_currency, self.dispatchers_list)
            self.crypto_currency_evaluator_list[crypto_currency] = crypto_currency_evaluator

            # create TA evaluators
            for symbol in crypto_currency_data[CONFIG_CRYPTO_PAIRS]:

                # create symbol evaluator
                symbol_evaluator = SymbolEvaluator(self.config, symbol, crypto_currency_evaluator)
                symbol_evaluator.set_traders(self.exchange_traders)
                symbol_evaluator.set_trader_simulators(self.exchange_trader_simulators)

                crypto_currency_evaluator.add_symbol_evaluator(symbol, symbol_evaluator)
                self.symbol_evaluator_list[symbol] = symbol_evaluator

                for exchange in self.exchanges_list.values():
                    if exchange.enabled():

                        # Verify that symbol exists on this exchange
                        if symbol in exchange.get_traded_pairs():
                            self._create_symbol_threads_managers(symbol,
                                                                 exchange,
                                                                 symbol_evaluator)

                        # notify that exchange doesn't support this symbol
                        else:
                            if not self.backtesting_enabled:
                                self.logger.warning("{0} doesn't support {1}".format(exchange.get_name(), symbol))
def test_create_strategies_eval_list():
    evaluator, config = _get_tools()
    strat_list = EvaluatorCreator.create_strategies_eval_list(config)
    _assert_created_instances(strat_list, StrategiesEvaluator, config)
def test_create_social_eval_list():
    evaluator, config = _get_tools()
    so_list = EvaluatorCreator.create_social_eval(config, evaluator.symbol, [], CONFIG_EVALUATORS_WILDCARD)
    _assert_created_instances(so_list, SocialEvaluator, config)
def test_create_ta_eval_list():
    evaluator, config = _get_tools()
    ta_list = EvaluatorCreator.create_ta_eval_list(evaluator, CONFIG_EVALUATORS_WILDCARD)
    _assert_created_instances(ta_list, TAEvaluator, config)
def test_create_dispatchers():
    _, config = _get_tools()
    dispatchers = EvaluatorCreator.create_dispatchers(config)
    assert len(dispatchers) == 0  # no dispatcher created because no config for associated services
예제 #33
0
 def _create_real_time_ta_evaluators(self, exchange, symbol_evaluator):
     return EvaluatorCreator.create_real_time_ta_evals(
         self.octobot.get_config(), exchange, symbol_evaluator.get_symbol(),
         self.octobot.get_relevant_evaluators(), self.dispatchers_list)
예제 #34
0
 def _init_relevant_evaluators(self):
     # Init relevant evaluator names list using enabled strategies
     self.relevant_evaluators = EvaluatorCreator.get_relevant_evaluators_from_strategies(
         self.octobot.get_config())