Ejemplo n.º 1
0
    def _initialize_markets(self, market_names: List[Tuple[str, List[str]]]):
        # aggregate trading_pairs if there are duplicate markets

        for market_name, trading_pairs in market_names:
            if market_name not in self.market_trading_pairs_map:
                self.market_trading_pairs_map[market_name] = []
            for hb_trading_pair in trading_pairs:
                self.market_trading_pairs_map[market_name].append(hb_trading_pair)

        for connector_name, trading_pairs in self.market_trading_pairs_map.items():
            conn_setting = AllConnectorSettings.get_connector_settings()[connector_name]

            if connector_name.endswith("paper_trade") and conn_setting.type == ConnectorType.Exchange:
                connector = create_paper_trade_market(conn_setting.parent_name, self.client_config_map, trading_pairs)
                paper_trade_account_balance = self.client_config_map.paper_trade.paper_trade_account_balance
                if paper_trade_account_balance is not None:
                    for asset, balance in paper_trade_account_balance.items():
                        connector.set_balance(asset, balance)
            else:
                keys = Security.api_keys(connector_name)
                init_params = conn_setting.conn_init_parameters(keys)
                init_params.update(trading_pairs=trading_pairs, trading_required=self._trading_required)
                connector_class = get_connector_class(connector_name)
                read_only_config = ReadOnlyClientConfigAdapter.lock_config(self.client_config_map)
                connector = connector_class(read_only_config, **init_params)
            self.markets[connector_name] = connector

        self.markets_recorder = MarketsRecorder(
            self.trade_fill_db,
            list(self.markets.values()),
            self.strategy_file_name,
            self.strategy_name,
        )
        self.markets_recorder.start()
Ejemplo n.º 2
0
 async def update_exchange_balance(
         self, exchange_name: str,
         client_config_map: ClientConfigMap) -> Optional[str]:
     is_gateway_market = self.is_gateway_market(exchange_name)
     if is_gateway_market and exchange_name in self._markets:
         # we want to refresh gateway connectors always, since the applicable tokens change over time.
         # doing this will reinitialize and fetch balances for active trading pair
         del self._markets[exchange_name]
     if exchange_name in self._markets:
         return await self._update_balances(self._markets[exchange_name])
     else:
         await Security.wait_til_decryption_done()
         api_keys = Security.api_keys(
             exchange_name) if not is_gateway_market else {}
         return await self.add_exchange(exchange_name, client_config_map,
                                        **api_keys)
Ejemplo n.º 3
0
    def test_login(self):
        password = "******"
        secrets_manager = ETHKeyFileSecretManger(password)
        store_password_verification(secrets_manager)

        Security.login(secrets_manager)
        config_map = self.store_binance_config()
        self.async_run_with_timeout(Security.wait_til_decryption_done(), timeout=2)

        self.assertTrue(Security.is_decryption_done())
        self.assertTrue(Security.any_secure_configs())
        self.assertTrue(Security.connector_config_file_exists(self.connector))

        api_keys = Security.api_keys(self.connector)
        expected_keys = api_keys_from_connector_config_map(config_map)

        self.assertEqual(expected_keys, api_keys)