'Return a dict with all important results & stats.'

def get_results(self):

    equity_s = pd.Series(self.equity).sort_index()
    returns_s = equity_s.pct_change().fillna(0.0)
    rolling = returns_s.rolling(window=self.periods)
    rolling_sharpe_s = (np.sqrt(self.periods) * (rolling.mean() / rolling.std()))
    cum_returns_s = np.exp(np.log((1 + returns_s)).cumsum())
    (dd_s, max_dd, dd_dur) = perf.create_drawdowns(cum_returns_s)
    statistics = {}
    statistics['sharpe'] = perf.create_sharpe_ratio(returns_s, self.periods)
    statistics['drawdowns'] = dd_s
    statistics['max_drawdown'] = max_dd
    statistics['max_drawdown_pct'] = max_dd
    statistics['max_drawdown_duration'] = dd_dur
    statistics['equity'] = equity_s
    statistics['returns'] = returns_s
    statistics['rolling_sharpe'] = rolling_sharpe_s
    statistics['cum_returns'] = cum_returns_s
    positions = self._get_positions()
    if (positions is not None):
        statistics['positions'] = positions
    if (self.benchmark is not None):
        equity_b = pd.Series(self.equity_benchmark).sort_index()
        returns_b = equity_b.pct_change().fillna(0.0)
        rolling_b = returns_b.rolling(window=self.periods)
        rolling_sharpe_b = (np.sqrt(self.periods) * (rolling_b.mean() / rolling_b.std()))
        cum_returns_b = np.exp(np.log((1 + returns_b)).cumsum())
        (dd_b, max_dd_b, dd_dur_b) = perf.create_drawdowns(cum_returns_b)
        statistics['sharpe_b'] = perf.create_sharpe_ratio(returns_b)
        statistics['drawdowns_b'] = dd_b
        statistics['max_drawdown_pct_b'] = max_dd_b
        statistics['max_drawdown_duration_b'] = dd_dur_b
        statistics['equity_b'] = equity_b
        statistics['returns_b'] = returns_b
        statistics['rolling_sharpe_b'] = rolling_sharpe_b
        statistics['cum_returns_b'] = cum_returns_b
    return statistics
