The reason why you can't produce any more indicators than the final pair in the list, is because the code keeps on overriding self,macd, self.sma and self.rsi. In order to save the objects once created, try creating a SymbolData object like so:
class SymbolData(object):
def __init__(self, symbol, macd, sma, rsi):
self.Symbol = symbol
self.MACD = macd
self.SMA = sma
self.RSI = rsi
This SymbolData object can be stored in a dictionary that is keyed by the symbol just like self.Data in the above code. This way the indicators for each symbol will be properly stored. The backtest below shows a possible implementation.