code: def step(self, actions) -> (np.ndarray, float, bool, None):
      self.time += 1
  
      price = self.price_array[self.time]
      for i in range(self.action_dim):
          norm_vector_i = self.action_norm_vector[i]
          actions[i] = actions[i] * norm_vector_i
  
      for index in np.where(actions < 0)[0]:  # sell_index:
          if price[index] > 0:  # Sell only if current asset is > 0
              sell_num_shares = min(self.stocks[index], -actions[index])
              self.stocks[index] -= sell_num_shares
              self.cash += (
                  price[index]
                  * sell_num_shares
                  * (1 - self.sell_cost_pct)
              )
  
      for index in np.where(actions > 0)[0]:  # buy_index:
          if (
              price[index] > 0
          ):  # Buy only if the price is > 0 (no missing data in this particular date)
              buy_num_shares = min(
                  self.cash // (price[index] * (1 + self.buy_cost_pct)),
                  actions[index],
              )
              self.stocks[index] += buy_num_shares
              self.cash -= (
                  price[index]
                  * buy_num_shares
                  * (1 + self.buy_cost_pct)
              )
  
      """update time"""
      done = self.time == self.max_step
      state = self.get_state()
      next_total_asset = (
          self.cash + (self.stocks * self.price_array[self.time]).sum()
      )
      reward = (next_total_asset - self.total_asset) * 2**-16
      self.total_asset = next_total_asset
      self.gamma_return = self.gamma_return * self.gamma + reward
      self.cumu_return = self.total_asset / self.initial_cash
      if done:
          reward = self.gamma_return
          self.episode_return = self.total_asset / self.initial_cash
      return state, reward, done, None
  
file_path: FinRL/finrl/meta/env_cryptocurrency_trading/env_multiple_crypto.py
imports: from __future__ import annotations
  import numpy
label_desc: Use image node_id 3 for calling the CryptoEnv obj's underlying member method code with example usage: obj.step(actions) and returns: state,  reward,  done,  None