def init_default(): config = load_test_config() exchange_manager = ExchangeManager(config, ccxt.binance, is_simulated=True) exchange_inst = exchange_manager.get_exchange() trader_inst = TraderSimulator(config, exchange_inst, 1) trades_manager_inst = trader_inst.get_trades_manager() return config, exchange_inst, trader_inst, trades_manager_inst
async def _get_tools(): config = load_test_config() symbol = "BTC/USDT" 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.portfolio.initialize() trader_inst.stop_order_manager() trader_inst.portfolio.portfolio["SUB"] = { Portfolio.TOTAL: 0.000000000000000000005, Portfolio.AVAILABLE: 0.000000000000000000005 } trader_inst.portfolio.portfolio["BNB"] = { Portfolio.TOTAL: 0.000000000000000000005, Portfolio.AVAILABLE: 0.000000000000000000005 } trader_inst.portfolio.portfolio["USDT"] = { Portfolio.TOTAL: 2000, Portfolio.AVAILABLE: 2000 } trading_mode = MarketMakerTradingMode(config, exchange_inst) return config, exchange_inst, trader_inst, symbol, trading_mode
async def create_exchange_traders(self, ignore_config=False): self.async_loop = asyncio.get_running_loop() available_exchanges = ccxt.exchanges for exchange_class_string in self.config[CONFIG_EXCHANGES]: if exchange_class_string in available_exchanges: exchange_type = getattr(ccxt, exchange_class_string) # Backtesting Exchange if self.backtesting_enabled: exchange_manager = ExchangeManager(self.config, exchange_type, is_simulated=True) else: # Real Exchange exchange_manager = ExchangeManager( self.config, exchange_type, is_simulated=False, ignore_config=ignore_config) await exchange_manager.initialize() exchange_inst = exchange_manager.get_exchange() self.exchanges_list[exchange_inst.get_name()] = exchange_inst self.global_updaters_by_exchange[exchange_inst.get_name( )] = GlobalPriceUpdater(exchange_inst) # create trader instance for this exchange exchange_trader = Trader(self.config, exchange_inst) await exchange_trader.initialize() self.exchange_traders[ exchange_inst.get_name()] = exchange_trader # create trader simulator instance for this exchange exchange_trader_simulator = TraderSimulator( self.config, exchange_inst) await exchange_trader_simulator.initialize() self.exchange_trader_simulators[ exchange_inst.get_name()] = exchange_trader_simulator if not (exchange_trader_simulator.enabled(self.config) or exchange_trader.enabled(self.config)): self.logger.error( f"No trader simulator nor real trader activated on {exchange_inst.get_name()}" ) # create trading mode try: self.trading_mode = get_activated_trading_mode( self.config)(self.config, exchange_inst) self.exchange_trading_modes[ exchange_inst.get_name()] = self.trading_mode self.logger.debug( f"Using {self.trading_mode.get_name()} trading mode") except RuntimeError as e: self.logger.error(e.args[0]) raise e else: self.logger.error( f"{exchange_class_string} exchange not found")
def init_default(): config = load_test_config() exchange_manager = ExchangeManager(config, ccxt.binance, is_simulated=True) exchange_inst = exchange_manager.get_exchange() trader_inst = TraderSimulator(config, exchange_inst, 1) portfolio_inst = Portfolio(config, trader_inst) trader_inst.stop_order_manager() sub_portfolio_inst = SubPortfolio(config, trader_inst, portfolio_inst, TestSubPortfolio.DEFAULT_PERCENT) return config, portfolio_inst, exchange_inst, trader_inst, sub_portfolio_inst
async def init_default(): config = load_test_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, 1) await trader_inst.portfolio.initialize() trades_manager_inst = trader_inst.get_trades_manager() await trades_manager_inst.initialize() return config, exchange_inst, trader_inst, trades_manager_inst
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
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
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): config = load_test_config() symbol = "BTC/USDT" exchange_traders = {} exchange_traders2 = {} time_frame = TimeFrames.FIVE_MINUTES AdvancedManager.create_class_list(config) exchange_manager = ExchangeManager(config, ccxt.binance, is_simulated=True) await exchange_manager.initialize() exchange_inst = exchange_manager.get_exchange() symbol_time_frame_updater_thread = GlobalPriceUpdater(exchange_inst) 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() trader_inst2.set_enabled(False) trader_inst.portfolio.portfolio["SUB"] = { Portfolio.TOTAL: 0.000000000000000000005, Portfolio.AVAILABLE: 0.000000000000000000005 } trader_inst.portfolio.portfolio["BNB"] = { Portfolio.TOTAL: 0.000000000000000000005, Portfolio.AVAILABLE: 0.000000000000000000005 } trader_inst.portfolio.portfolio["USDT"] = { Portfolio.TOTAL: 2000, Portfolio.AVAILABLE: 2000 } 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) trading_mode_inst = get_activated_trading_mode(config)(config, exchange_inst) _ = EvaluatorTaskManager(config, time_frame, symbol_time_frame_updater_thread, symbol_evaluator, exchange_inst, trading_mode_inst, [], event_loop) trading_mode = HighFrequencyMode(config, exchange_inst) trading_mode.add_symbol_evaluator(symbol_evaluator) decider = trading_mode.get_only_decider_key(symbol) await decider.initialize() return config, exchange_inst, trader_inst, symbol, trading_mode
async def init_default(): config = load_test_config() config[CONFIG_TRADER][CONFIG_ENABLED_OPTION] = True exchange_manager = ExchangeManager(config, ccxt.binance, is_simulated=True) await exchange_manager.initialize() exchange_inst = exchange_manager.get_exchange() trader_real_inst = Trader(config, exchange_inst, 1) trader_simulator_inst = TraderSimulator(config, exchange_inst, 1) order_manager_inst = trader_real_inst.get_order_manager() order_manager_simulator_inst = trader_simulator_inst.get_order_manager( ) return config, exchange_inst, trader_real_inst, order_manager_inst, trader_simulator_inst, \ order_manager_simulator_inst
def create_exchange_traders(self): self.backtesting_enabled = Backtesting.enabled(self.config) available_exchanges = ccxt.exchanges for exchange_class_string in self.config[CONFIG_EXCHANGES]: if exchange_class_string in available_exchanges: exchange_type = getattr(ccxt, exchange_class_string) # Backtesting Exchange if self.backtesting_enabled: exchange_manager = ExchangeManager(self.config, exchange_type, is_simulated=True) else: # True Exchange exchange_manager = ExchangeManager(self.config, exchange_type, is_simulated=False) exchange_inst = exchange_manager.get_exchange() self.exchanges_list[exchange_inst.get_name()] = exchange_inst # create trader instance for this exchange exchange_trader = Trader(self.config, exchange_inst) self.exchange_traders[ exchange_inst.get_name()] = exchange_trader # create trader simulator instance for this exchange exchange_trader_simulator = TraderSimulator( self.config, exchange_inst) self.exchange_trader_simulators[ exchange_inst.get_name()] = exchange_trader_simulator else: self.logger.error( "{0} exchange not found".format(exchange_class_string))
async def init_default(): config = load_test_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, 2) order_inst = Order(trader_inst) return config, order_inst, trader_inst, exchange_inst
def _get_tools(): config = load_test_config() symbol = "BTC/USDT" exchange_traders = {} exchange_traders2 = {} time_frame = TimeFrames.FIVE_MINUTES 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() trader_inst2.set_enabled(False) trader_inst.portfolio.portfolio["SUB"] = { Portfolio.TOTAL: 0.000000000000000000005, Portfolio.AVAILABLE: 0.000000000000000000005 } trader_inst.portfolio.portfolio["BNB"] = { Portfolio.TOTAL: 0.000000000000000000005, Portfolio.AVAILABLE: 0.000000000000000000005 } trader_inst.portfolio.portfolio["USDT"] = { Portfolio.TOTAL: 2000, Portfolio.AVAILABLE: 2000 } 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) trading_mode_inst = OctoBot.get_trading_mode_class(config)(config, exchange_inst) _ = EvaluatorThreadsManager(config, time_frame, symbol_time_frame_updater_thread, symbol_evaluator, exchange_inst, trading_mode_inst, []) trading_mode = HighFrequencyMode(config, exchange_inst) trading_mode.add_symbol_evaluator(symbol_evaluator) return config, exchange_inst, trader_inst, symbol, trading_mode
def init_default(): config = load_test_config() config[CONFIG_BACKTESTING][CONFIG_ENABLED_OPTION] = True exchange_manager = ExchangeManager(config, ccxt.binance, is_simulated=True) exchange_inst = exchange_manager.get_exchange() exchange_simulator = exchange_inst.get_exchange() exchange_simulator.init_candles_offset([TimeFrames.ONE_HOUR, TimeFrames.FOUR_HOURS, TimeFrames.ONE_DAY], TestExchangeSimulator.DEFAULT_SYMBOL) trader_inst = TraderSimulator(config, exchange_inst, 1) return config, exchange_inst, exchange_simulator, trader_inst
def init_default(): config = load_test_config() config[CONFIG_BACKTESTING][CONFIG_ENABLED_OPTION] = True exchange_manager = ExchangeManager(config, ccxt.binance, is_simulated=True) exchange_inst = exchange_manager.get_exchange() exchange_simulator = exchange_inst.get_exchange() trader_inst = TraderSimulator(config, exchange_inst, 1) return config, exchange_inst, exchange_simulator, trader_inst
def _get_tools(): config = load_test_config() symbol = "BTC/USDT" 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_inst.portfolio.portfolio["SUB"] = { Portfolio.TOTAL: 0.000000000000000000005, Portfolio.AVAILABLE: 0.000000000000000000005 } trader_inst.portfolio.portfolio["BNB"] = { Portfolio.TOTAL: 0.000000000000000000005, Portfolio.AVAILABLE: 0.000000000000000000005 } trader_inst.portfolio.portfolio["USDT"] = { Portfolio.TOTAL: 2000, Portfolio.AVAILABLE: 2000 } return config, exchange_inst, trader_inst, symbol
async def test_get_risk(self): config, exchange_inst, trader_inst = await self.init_default() self.stop(trader_inst) config[CONFIG_TRADING][CONFIG_TRADER_RISK] = 0 trader_1 = TraderSimulator(config, exchange_inst) assert trader_1.get_risk() == CONFIG_TRADER_RISK_MIN self.stop(trader_1) config[CONFIG_TRADING][CONFIG_TRADER_RISK] = 2 trader_2 = TraderSimulator(config, exchange_inst) assert trader_2.get_risk() == CONFIG_TRADER_RISK_MAX self.stop(trader_2) config[CONFIG_TRADING][CONFIG_TRADER_RISK] = 0.5 trader_2 = TraderSimulator(config, exchange_inst) assert trader_2.get_risk() == 0.5 self.stop(trader_2)
async def test_new(self): config, order_inst, trader_inst, exchange_inst = await self.init_default( ) # with real trader order_inst.new( OrderConstants.TraderOrderTypeClasses[TraderOrderType.BUY_MARKET], "BTC/USDT", 10000, 1, price=None, stop_price=None, order_notifier=None) assert order_inst.get_order_type( ) == OrderConstants.TraderOrderTypeClasses[TraderOrderType.BUY_MARKET] assert order_inst.get_order_symbol() == "BTC/USDT" assert order_inst.get_create_last_price() == 10000 assert order_inst.get_origin_quantity() == 1 assert order_inst.get_creation_time() != 0 assert order_inst.get_currency_and_market() == ('BTC', 'USDT') assert order_inst.get_side() is None assert order_inst.get_status() == OrderStatus.OPEN order_inst.new(OrderConstants.TraderOrderTypeClasses[ TraderOrderType.STOP_LOSS_LIMIT], "ETH/BTC", 0.1, 5.2, price=0.12, stop_price=0.9, order_notifier=None) assert order_inst.origin_stop_price == 0.9 assert order_inst.last_prices is None assert order_inst.origin_price == 0.12 # with simulated trader trader_sim_inst = TraderSimulator(config, exchange_inst, 1) order_sim_inst = Order(trader_sim_inst) order_sim_inst.new( OrderConstants.TraderOrderTypeClasses[TraderOrderType.SELL_MARKET], "LTC/USDT", 100, 3.22, price=None, stop_price=None, order_notifier=None) assert order_sim_inst.get_status() == OrderStatus.OPEN self.stop(trader_inst) self.stop(trader_sim_inst)
def create_exchange_traders(self): for exchange_type in self.exchanges: exchange_inst = Exchange(self.config, exchange_type) # create trader instance for this exchange exchange_trader = Trader(self.config, exchange_inst) exchange_trader_simulator = TraderSimulator( self.config, exchange_inst) self.exchanges_list[exchange_type.__name__] = exchange_inst self.exchange_traders[exchange_type.__name__] = exchange_trader self.exchange_trader_simulators[ exchange_type.__name__] = exchange_trader_simulator
def create_exchange_traders(self): available_exchanges = ccxt.exchanges for exchange_class_string in self.config[CONFIG_EXCHANGES]: if exchange_class_string in available_exchanges: exchange_type = getattr(ccxt, exchange_class_string) # Backtesting Exchange if self.backtesting_enabled: exchange_manager = ExchangeManager(self.config, exchange_type, is_simulated=True) else: # Real Exchange exchange_manager = ExchangeManager(self.config, exchange_type, is_simulated=False) exchange_inst = exchange_manager.get_exchange() self.exchanges_list[exchange_inst.get_name()] = exchange_inst # create trader instance for this exchange exchange_trader = Trader(self.config, exchange_inst) self.exchange_traders[ exchange_inst.get_name()] = exchange_trader # create trader simulator instance for this exchange exchange_trader_simulator = TraderSimulator( self.config, exchange_inst) self.exchange_trader_simulators[ exchange_inst.get_name()] = exchange_trader_simulator # create trading mode try: self.trading_mode = get_activated_trading_mode( self.config)(self.config, exchange_inst) self.exchange_trading_modes[ exchange_inst.get_name()] = self.trading_mode self.logger.debug( f"Using {self.trading_mode.get_name()} trading mode") except RuntimeError as e: self.logger.error(e.args[0]) raise e else: self.logger.error( f"{exchange_class_string} exchange not found")
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
def init_default(): config = load_test_config() exchange_inst = ExchangeSimulator(config, ccxt.binance) trader_inst = TraderSimulator(config, exchange_inst) return config, exchange_inst, trader_inst