class_docstr: A simple discrete action scheme where the only options are to buy, sell,
  or hold.
  
  Parameters
  ----------
  cash : `Wallet`
      The wallet to hold funds in the base intrument.
  asset : `Wallet`
      The wallet to hold funds in the quote instrument.
class_docstr_tok: ["A","simple","discrete","action","scheme","where","the","only","options","are","to","buy",",","sell",",","or","hold",".","Parameters","--","--","--","--","--","cash",":","`","Wallet","`","The","wallet","to","hold","funds","in","the","base","intrument",".","asset",":","`","Wallet","`","The","wallet","to","hold","funds","in","the","quote","instrument","."]
code: def attach(self, listener):
      self.listeners += [listener]
      return self
  
imports: import logging
  from abc import abstractmethod
  from itertools import product
  from typing import Union, List, Any
  from gym.spaces import Space, Discrete
  from tensortrade.core import Clock
  from tensortrade.env.generic import ActionScheme, TradingEnv
  from tensortrade.oms.instruments import ExchangePair
  from tensortrade.oms.orders import Broker, Order, OrderListener, OrderSpec, proportion_order, risk_managed_order, TradeSide, TradeType
  from tensortrade.oms.wallets import Portfolio
label_desc: Use image node_id 3 for calling the BSH obj's underlying member method code with example usage: obj.attach(listener) and returns: self