<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def strikes(self, opttype, expiry):
 """ Retrieve option prices for all strikes of a given type with a given expiration. Parameters opttype : str ('call' or 'put') expiry : date-like Expiration date. Can be a :class:`datetime.datetime` or a string that :mod:`pandas` can interpret as such, e.g. '2015-01-01'. Returns df : :class:`pandas.DataFrame` eq : float Price of underlying. qt : datetime.datetime Time of quote. See Also -------- :meth:`exps` """

        _relevant = _relevant_rows(self.data, (slice(None), expiry, opttype,),
                "No key for {} {}".format(expiry, opttype))
        _index = _relevant.index.get_level_values('Strike')
        _columns = ['Price', 'Time_Val', 'Last', 'Bid', 'Ask', 'Vol', 'Open_Int']
        _df = pd.DataFrame(index=_index, columns=_columns)
        _underlying = _relevant.loc[:, 'Underlying_Price'].values[0]
        _quotetime = pd.to_datetime(_relevant.loc[:, 'Quote_Time'].values[0], utc=True).to_datetime()
        for _col in _columns[2:]:
            _df.loc[:, _col] = _relevant.loc[:, _col].values
        _df.loc[:, 'Price'] = (_df.loc[:, 'Bid'] + _df.loc[:, 'Ask']) / 2.
        _set_tv_strike_ix(_df, opttype, 'Price', 'Time_Val', _underlying)
        return _df, _underlying, _quotetime