code: public Bitflyer4j createInstance(Properties properties) {
  
          log.info("Creating instance.");
  
          final AbstractConfiguration conf = createConfiguration(properties);
  
          final Class<? extends RealtimeService> realtimeClass = getRealtimeType(conf);
  
          Module module = new AbstractModule() {
              @Override
              protected void configure() {
  
                  bind(Configuration.class).toInstance(conf);
  
                  bind(EventSource.class).toInstance(conf);
  
                  bind(Gson.class).toProvider(GsonProvider.class).asEagerSingleton();
  
                  bind(PubNub.class).toProvider(PubNubProvider.class).asEagerSingleton();
  
                  bind(Socket.class).toProvider(SocketProvider.class).asEagerSingleton();
  
                  bind(Environment.class).to(EnvironmentImpl.class).asEagerSingleton();
  
                  bind(Throttler.class).to(ThrottlerImpl.class).asEagerSingleton();
  
                  bind(ExecutorFactory.class).to(ExecutorFactoryImpl.class).asEagerSingleton();
  
                  bind(HttpClient.class).to(HttpClientImpl.class).asEagerSingleton();
  
                  bind(Bitflyer4j.class).to(Bitflyer4jImpl.class).asEagerSingleton();
  
                  bind(MarketService.class).to(MarketServiceImpl.class).asEagerSingleton();
  
                  bind(AccountService.class).to(AccountServiceImpl.class).asEagerSingleton();
  
                  bind(OrderService.class).to(OrderServiceImpl.class).asEagerSingleton();
  
                  bind(RealtimeService.class).to(realtimeClass).asEagerSingleton();
  
              }
          };
  
          return Guice.createInjector(module).getInstance(Bitflyer4j.class);
  
      }
docs: Create a new instance of the {@link Bitflyer4j} with instance specific properties.
  A new instance is created for each invocation.
  
  @param properties Instance specific properties.
  @return New instance.