def summary(self, St=None):
        """Tabular summary of strategy composition, broken out by option.

        Returns
        -------
        pd.DataFrame
            Columns: kind, position, strike, price, St, payoff, profit.
        """

        St = self.St if St is None else St
        if self.options:
            payoffs = [op.payoff(St=St) for op in self.options]
            profits = [op.profit(St=St) for op in self.options]
            strikes = [op.K for op in self.options]
            prices = [op.price for op in self.options]
            exprs = [St] * len(self.options)
            kinds = [op.kind for op in self.options]
            poss = [op.pos for op in self.options]
            res = OrderedDict(
                [
                    ("kind", kinds),
                    ("position", poss),
                    ("strike", strikes),
                    ("price", prices),
                    ("St", exprs),
                    ("payoff", payoffs),
                    ("profit", profits),
                ]
            )

            return DataFrame(res)
        else:
            return None