def call(self, lowstrike, highstrike, expiry):
assert lowstrike < highstrike<EOL>_rows = {}<EOL>_prices = {}<EOL>_opttype = '<STR_LIT>'<EOL>for _strike in (lowstrike, highstrike):<EOL><INDENT>_rows[_strike] = _relevant_rows(self.data, (_strike, expiry, _opttype,),<EOL>"<STR_LIT>".format(expiry, _strike, _opttype))<EOL>_prices[_strike] = _getprice(_rows[_strike])<EOL><DEDENT>_eq = _rows[lowstrike].loc[:, '<STR_LIT>'].values[<NUM_LIT:0>]<EOL>_qt = _rows[lowstrike].loc[:, '<STR_LIT>'].values[<NUM_LIT:0>]<EOL>_debit = _prices[lowstrike] - _prices[highstrike]<EOL>_breakeven = lowstrike + _debit<EOL>if _breakeven > highstrike:<EOL><INDENT>_breakeven = np.nan<EOL><DEDENT>_maxprof = highstrike - lowstrike -_debit<EOL>_index = ['<STR_LIT>', '<STR_LIT>', '<STR_LIT>',  '<STR_LIT>',<EOL>'<STR_LIT>', '<STR_LIT>', '<STR_LIT>']<EOL>_vals = np.array([_prices[lowstrike], _prices[highstrike], _debit,<EOL>_breakeven, _maxprof, _eq, _qt])<EOL>return pd.DataFrame(_vals, index=_index, columns=['<STR_LIT>'])<EOL>
Metrics for evaluating a bull call spread.

The metrics returned can easily be translated into bear
spread metrics. The difference is only whether one buys
the call at the lower strike and sells at the higher
(bull call spread) or sells at the lower while buying
at the higher (bear call spread). The metrics
dataframe shows values for a bull call spread, where
the transaction is a debit. A bear call spread
is created by *selling* a bull call spread, so the transaction
amount is the same, but it
is a credit rather than a debit.

Parameters
------------
lowstrike : numeric
    Lower strike price.
highstrike : numeric
    Higher strike sprice.
expiry : date or date str (e.g. '2015-01-01')
    Expiration date.

Returns
------------
metrics : DataFrame

Notes
-----
Cf. Lawrence McMillan, Options as a Strategic Investment, 5th ed., pp. 157ff.

See Also
--------
:meth:`put`