code: def handle_simulation_end(self, data_portal):
          
          log.info(
              'Simulated {} trading days\n'
              'first open: {}\n'
              'last close: {}',
              self._session_count,
              self._trading_calendar.session_open(self._first_session),
              self._trading_calendar.session_close(self._last_session),
          )
  
          packet = {}
          self.end_of_simulation(
              packet,
              self._ledger,
              self._trading_calendar,
              self._sessions,
              data_portal,
              self._benchmark_source,
          )
          return packet
docs: When the simulation is complete, run the full period risk report
          and send it out on the results socket.