def get_option_data(self, exp_date, symbol):

        ops = Option.in_chain(self.client,
                              self.option_chain_id[symbol],
                              expiration_dates=exp_date)
        ops2 = Option.mergein_marketdata_list(self.client, ops)

        return pd.DataFrame(ops2)
    def get_options_robinhood(self, symbol, **exp):
        """Get Robinhood Options Chains for Puts and Calls.
        The code returns three objects. This code returns two pandas dataframes
        The first is Calls, the Second is Puts. The final output is the spot price.


        """

        try:
            stock = Stock.fetch(self.client, symbol)
            stock_id = stock["id"]
            option_chain = OptionChain.fetch(self.client,
                                             stock_id,
                                             symbol=symbol)
            eds = option_chain['expiration_dates']

            oc_id = option_chain["id"]

            spot = self.get_spot_price(symbol)

            spot_price = self._process_spot_price(spot)
            if exp:
                if exp['exp'] not in eds:
                    print(
                        'Expiry not a Valid Expiration,Here are the valid Expirations \n'
                    )
                    print(eds)
                    return np.nan, np.nan, np.nan

                expiry = exp['exp']
                eds = [expiry]
            else:
                print(
                    'Expiry not a Valid Expiration,Here are the valid Expirations \n'
                )
                print(eds)
                return np.nan, np.nan, np.nan

            ops = Option.in_chain(self.client, oc_id, expiration_dates=eds)
            ops = Option.mergein_marketdata_list(self.client, ops)
            df = pd.DataFrame(ops)
            df.index = np.arange(0, len(df))

            #calls = df.loc[df.type=='call']
            #calls = calls.sort_index()
            #puts = df.loc[df.type=='put']
            #puts = puts.sort_index()
            df['spot_price'] = spot_price
            #puts['spot_price'] = spot_price
            df = df.applymap(self.__convert_to_float)
            df['expiration_date'] = pd.to_datetime(
                df['expiration_date'].values)
            #puts  = puts.applymap(self.__convert_to_float)

            return df.fillna(0)

        except:
            return pd.DataFrame()
Exemplo n.º 3
0
    def get_next_3_exp_options(self, option_chain):
        option_chain_id = option_chain["id"]
        expiration_dates = option_chain['expiration_dates']

        next_3_expiration_dates = expiration_dates[0:3]

        ops = Option.in_chain(self.client, option_chain_id, expiration_dates=next_3_expiration_dates)
        ops = Option.mergein_marketdata_list(client, ops)
        return ops
Exemplo n.º 4
0
    def test_fetch_fields(self):
        client = gen_client()
        option_id = "e03e7414-527d-4b44-a081-c61aeb474060"
        with gen_vcr().use_cassette("option_fetch.yaml"):
            option = Option.fetch(client, option_id)

            expected_fields = [
                'issue_date', 'tradability', 'strike_price', 'state', 'url',
                'expiration_date', 'created_at', 'chain_id', 'updated_at',
                'rhs_tradability', 'type', 'chain_symbol', 'min_ticks', 'id']

            actual_fields = list(option.keys())

            assert(set(expected_fields) == set(actual_fields))
Exemplo n.º 5
0
#
symbol = "TLT"
md = StockMarketdata.quote_by_symbol(client, symbol)


#
# get the TLT option chain info
#
stock_id = md["instrument"].split("/")[-2]
option_chain = OptionChain.fetch(client, stock_id, symbol)
option_chain_id = option_chain["id"]
expiration_dates = option_chain['expiration_dates']


#
# reduce the number of expiration dates we're interested in
#
next_3_expiration_dates = expiration_dates[0:3]


#
# get all options on the TLT option chain
#
ops = Option.in_chain(client, option_chain_id, expiration_dates=next_3_expiration_dates)


#
# merge in market data fro TLT option instruments
#
ops = Option.mergein_marketdata_list(client, ops)
Exemplo n.º 6
0
#
# initialize and authenticate Client
#
client = Client(username=username, password=password)
client.authenticate()

#
# fetch spy options
#
symbol = "SPY"
stock = Stock.fetch(client, symbol)
stock = Stock.mergein_marketdata_list(client, [stock])[0]

oc = OptionChain.fetch(client, stock["id"], symbol)
ed = oc['expiration_dates'][0]
ops = Option.in_chain(client, oc["id"], expiration_dates=[ed])

#
# enrich options with market data
#
ops = Option.mergein_marketdata_list(client, ops)

#
# genrate vertical spread table
#
width = 1
spread_type = "put"
spread_kind = "sell"
df = Vertical.gen_df(ops, width, spread_type, spread_kind)

#
Exemplo n.º 7
0
#
# initialize client with auth_data
#
client = Client(auth_data)

#
# get TLT options
#
symbol = "TLT"
md = StockMarketdata.quote_by_symbol(client, symbol)
stock_id = md["instrument"].split("/")[-2]
oc = OptionChain.fetch(client, stock_id, symbol)
oc_id = oc["id"]
next_2_eds = oc['expiration_dates'][0:1]
ops = Option.in_chain(client, oc_id, expiration_dates=next_2_eds)

#
# get TLT in the middle of the current TLT trading range
#
urls = [op["url"] for op in ops]
middle = math.floor(len(urls) / 2)
diff = math.floor(len(urls) * 0.7)
lower_end = middle - diff
higher_end = middle + diff
urls_subset = urls[lower_end:higher_end]

#
# get historical data for TLT options
#
hd = OptionMarketdata.historical_quotes_by_urls(client,