def test_fundamentals(self): quote = r.get_fundamentals(self.single_stock, info=None) assert (len(quote) == 1) assert (quote[0]['symbol'] == self.single_stock) quote = quote[0] assert ('open' in quote) assert isinstance(quote["open"], float) assert ('high' in quote) assert isinstance(quote["high"], float) assert ('low' in quote) assert isinstance(quote["low"], float) assert ('volume' in quote) assert isinstance(quote["volume"], int) assert ('average_volume_2_weeks' in quote) assert isinstance(quote["average_volume_2_weeks"], float) assert ('average_volume' in quote) assert isinstance(quote["average_volume"], float) assert ('high_52_weeks' in quote) assert isinstance(quote["high_52_weeks"], float) assert ('dividend_yield' in quote) assert isinstance(quote["dividend_yield"], float) assert ('float' in quote) assert isinstance(quote["float"], int) assert ('low_52_weeks' in quote) assert isinstance(quote["low_52_weeks"], float) assert ('market_cap' in quote) assert isinstance(quote["market_cap"], float) assert ('pb_ratio' in quote) assert isinstance(quote["pb_ratio"], float) assert ('pe_ratio' in quote) assert isinstance(quote["pe_ratio"], float) assert ('shares_outstanding' in quote) assert isinstance(quote["shares_outstanding"], float) assert ('description' in quote) assert isinstance(quote["description"], str) assert ('instrument' in quote) assert isinstance(quote["instrument"], str) assert ('ceo' in quote) assert isinstance(quote["ceo"], str) assert ('headquarters_city' in quote) assert isinstance(quote["headquarters_city"], str) assert ('headquarters_state' in quote) assert isinstance(quote["headquarters_state"], str) assert ('sector' in quote) assert isinstance(quote["sector"], str) assert ('industry' in quote) assert isinstance(quote["industry"], str) assert ('num_employees' in quote) assert isinstance(quote["num_employees"], int) assert ('year_founded' in quote) assert isinstance(quote["year_founded"], int) assert ('symbol' in quote) assert isinstance(quote["symbol"], str) # more_quotes = r.get_fundamentals(self.list_stocks, info=None) assert (len(more_quotes) == len(self.list_stocks)) # fake_quotes = r.get_fundamentals(self.fake_stocks, info=None) assert (len(fake_quotes) == 1) assert (fake_quotes[0] is None)
def test_instruments(self): quote = r.get_instruments_by_symbols(self.single_stock) assert (len(quote) == 1) assert (quote[0]['symbol'] == self.single_stock) quote = quote[0] assert ('id' in quote) assert isinstance(quote["id"], str) assert ('url' in quote) assert isinstance(quote["url"], str) assert ('quote' in quote) assert isinstance(quote["quote"], str) assert ('fundamentals' in quote) assert isinstance(quote["fundamentals"], str) assert ('splits' in quote) assert isinstance(quote["splits"], str) assert ('state' in quote) assert isinstance(quote["state"], str) assert ('market' in quote) assert isinstance(quote["market"], str) assert ('simple_name' in quote) assert isinstance(quote["simple_name"], str) assert ('name' in quote) assert isinstance(quote["name"], str) assert ('tradeable' in quote) assert isinstance(quote["tradeable"], bool) assert ('tradability' in quote) assert isinstance(quote["tradability"], str) assert ('symbol' in quote) assert isinstance(quote["symbol"], str) assert ('bloomberg_unique' in quote) assert isinstance(quote["bloomberg_unique"], str) assert ('margin_initial_ratio' in quote) assert isinstance(quote["margin_initial_ratio"], float) assert ('maintenance_ratio' in quote) assert isinstance(quote["maintenance_ratio"], float) assert ('country' in quote) assert isinstance(quote["country"], str) assert ('day_trade_ratio' in quote) assert isinstance(quote["day_trade_ratio"], float) assert ('list_date' in quote) assert isinstance(quote["list_date"], str) assert ('min_tick_size' in quote) assert ('type' in quote) assert isinstance(quote["type"], str) assert ('tradable_chain_id' in quote) assert isinstance(quote["tradable_chain_id"], str) assert ('rhs_tradability' in quote) assert isinstance(quote["rhs_tradability"], str) assert ('fractional_tradability' in quote) assert isinstance(quote["fractional_tradability"], str) assert ('default_collar_fraction' in quote) assert isinstance(quote["default_collar_fraction"], float) # more_quotes = r.get_fundamentals(self.list_stocks, info=None) assert (len(more_quotes) == len(self.list_stocks)) # fake_quotes = r.get_fundamentals(self.fake_stocks, info=None) assert (len(fake_quotes) == 1) assert (fake_quotes[0] == None)
def get_fundamentals(tickers): fundamentals = [] sets_of_100 = len(tickers) // 100 for i in range(sets_of_100): print('Call #' + str(i + 1)) fundamentals += r.get_fundamentals(tickers[i * 100:(i + 1) * 100]) fundamentals += r.get_fundamentals(tickers[sets_of_100 * 100:]) return fundamentals
def get_rel_volume(self): try: fund = r.get_fundamentals(self.tick) return float(fund['volume'])/float(fund['average_volume_2_weeks']) except: # be default, assume normal rel volume return 1
def grabIntradayHL(stock): """Returns intra-day low/high of the day. :param stock: {1-5} character stock-ticker :return: [float] low, [float] high """ quote = r.get_fundamentals(stock)[0] low = '{:.2f}'.format(round(float(quote['low']), 2)) high = '{:.2f}'.format(round(float(quote['high']), 2)) return low, high
def test_fundamentals(self): quote = r.get_fundamentals(self.single_stock, info=None) assert (len(quote) == 1) assert (quote[0]['symbol'] == self.single_stock) quote = quote[0] assert ('open' in quote) assert ('high' in quote) assert ('low' in quote) assert ('volume' in quote) assert ('average_volume_2_weeks' in quote) assert ('average_volume' in quote) assert ('high_52_weeks' in quote) assert ('dividend_yield' in quote) assert ('float' in quote) assert ('low_52_weeks' in quote) assert ('market_cap' in quote) assert ('pb_ratio' in quote) assert ('pe_ratio' in quote) assert ('shares_outstanding' in quote) assert ('description' in quote) assert ('instrument' in quote) assert ('ceo' in quote) assert ('headquarters_city' in quote) assert ('headquarters_state' in quote) assert ('sector' in quote) assert ('industry' in quote) assert ('num_employees' in quote) assert ('year_founded' in quote) assert ('symbol' in quote) # more_quotes = r.get_fundamentals(self.list_stocks, info=None) assert (len(more_quotes) == len(self.list_stocks)) # fake_quotes = r.get_fundamentals(self.fake_stocks, info=None) assert (len(fake_quotes) == 1) assert (fake_quotes[0] == None)
def test_fundamentals(self): quote = r.get_fundamentals(self.single_stock, info=None) self.assertEqual(len(quote), 1) self.assertEqual(quote[0]['symbol'], self.single_stock) quote = quote[0] self.assertIn('open', quote) self.assertIn('high', quote) self.assertIn('low', quote) self.assertIn('volume', quote) self.assertIn('average_volume_2_weeks', quote) self.assertIn('average_volume', quote) self.assertIn('high_52_weeks', quote) self.assertIn('dividend_yield', quote) self.assertIn('float', quote) self.assertIn('low_52_weeks', quote) self.assertIn('market_cap', quote) self.assertIn('pb_ratio', quote) self.assertIn('pe_ratio', quote) self.assertIn('shares_outstanding', quote) self.assertIn('description', quote) self.assertIn('instrument', quote) self.assertIn('ceo', quote) self.assertIn('headquarters_city', quote) self.assertIn('headquarters_state', quote) self.assertIn('sector', quote) self.assertIn('industry', quote) self.assertIn('num_employees', quote) self.assertIn('year_founded', quote) self.assertIn('symbol', quote) # more_quotes = r.get_fundamentals(self.list_stocks, info=None) self.assertEqual(len(more_quotes), len(self.list_stocks)) # fake_quotes = r.get_fundamentals(self.fake_stocks, info=None) self.assertEqual(len(fake_quotes), 1) self.assertEqual(fake_quotes[0], None)
def test_instruments(self): quote = r.get_instruments_by_symbols(self.single_stock) self.assertEqual(len(quote), 1) self.assertEqual(quote[0]['symbol'], self.single_stock) quote = quote[0] self.assertIn('id', quote) self.assertIn('url', quote) self.assertIn('quote', quote) self.assertIn('fundamentals', quote) self.assertIn('splits', quote) self.assertIn('state', quote) self.assertIn('market', quote) self.assertIn('simple_name', quote) self.assertIn('name', quote) self.assertIn('tradeable', quote) self.assertIn('tradability', quote) self.assertIn('symbol', quote) self.assertIn('bloomberg_unique', quote) self.assertIn('margin_initial_ratio', quote) self.assertIn('maintenance_ratio', quote) self.assertIn('country', quote) self.assertIn('day_trade_ratio', quote) self.assertIn('list_date', quote) self.assertIn('min_tick_size', quote) self.assertIn('type', quote) self.assertIn('tradable_chain_id', quote) self.assertIn('rhs_tradability', quote) self.assertIn('fractional_tradability', quote) self.assertIn('default_collar_fraction', quote) # more_quotes = r.get_fundamentals(self.list_stocks, info=None) self.assertEqual(len(more_quotes), len(self.list_stocks)) # fake_quotes = r.get_fundamentals(self.fake_stocks, info=None) self.assertEqual(len(fake_quotes), 1) self.assertEqual(fake_quotes[0], None)
def getstockinfo(watchlistname): # fetch data from robinhood and parse data into a dictionary structure that stockcontainer can accept for stock in watchlist: week = r.get_historicals(stock, span='week', bounds="regular") month = r.get_historicals(stock, span='month', bounds="regular") year = r.get_historicals(stock, span='year', bounds="regular") fiveyear = r.get_historicals(stock, span='5year', bounds="regular") data = {} data['name'] = str(stock) data[ 'price'] = "Stock created using secondary method - price not supported" data['earnings'] = r.get_earnings(stock) data['events'] = r.get_events(stock) data['fundamentals'] = r.get_fundamentals(stock) x = stockcontainer(stock, data, "f**k off", week, month, year, fiveyear) traj = trajectory(x) x.addtrajectory(traj) stocksArray.append(x)
def rh_pull_portfolio_data(user_id, passwd): r.login(username=user_id, password=passwd) if DbAccess.is_update_needed(): obj = portfolio_summary.objects.all() if not obj: obj = portfolio_summary() obj.timestamp = timezone.now() else: obj = obj[0] obj.portfolio_cash = float(profiles.load_account_profile()['portfolio_cash']) obj.save() # remove current entries stocks_held.objects.all().delete() # get current owned securites and save to db positions_data = r.get_open_stock_positions() for item in positions_data: quantity = float(item['quantity']) if not quantity: continue # check if instrument is present in robinhood_traded_stocks table obj = stocks_held() obj.symbol, obj.name = RhWrapper.rh_pull_symbol_from_instrument_url(item['instrument']) obj.quantity = quantity obj.average_price = float(item['average_buy_price']) obj.latest_price = float(r.get_latest_price(obj.symbol)[0]) obj.open_price = float(r.get_fundamentals(obj.symbol)[0]['open']) try: obj.prev_close_price = float(StockUtils.getStockInfo(obj.symbol)['previousClose']) except Exception as e: logging.error(str(e) + ' encountered when fetching yahoo data for ' + obj.symbol) obj.prev_close_price = obj.open_price obj.save() # remove current entries options_held.objects.all().delete() # get current owned securites and save to db options_position_data = r.get_open_option_positions() for item in options_position_data: quantity = float(item['quantity']) if not quantity: continue obj = options_held() obj.option_id = item['option_id'] contract_into = r.get_option_instrument_data_by_id(obj.option_id) obj.strike_price = float(contract_into['strike_price']) obj.expiration_date = contract_into['expiration_date'] obj.option_type = contract_into['type'] obj.symbol = item['chain_symbol'] obj.trade_value_multiplier = float(item['trade_value_multiplier']) obj.average_price = float(item['average_price']) / obj.trade_value_multiplier obj.quantity = float(item['quantity']) # adjust value for sold calls if obj.average_price < 0: obj.average_price = (-1) * obj.average_price obj.quantity = (-1) * obj.quantity market_data = r.get_option_market_data_by_id(obj.option_id) obj.previous_close_price = float(market_data['previous_close_price']) obj.current_price = float(market_data['adjusted_mark_price']) # print('symbol: %5s strike_price: %7.2f option_type: %4s expiration_date: %12s trade_value_multiplier: %d average_price: %7.2f quantity: %d previous_close_price: %7.2f current_price: %7.2f' % (obj.symbol, obj.strike_price, obj.option_type, obj.expiration_date, obj.trade_value_multiplier, obj.average_price, obj.quantity, obj.previous_close_price, obj.current_price)) obj.save()
def write_volume(data_frame): for index, new_share_info in data_frame.iterrows(): print('Writing volume for: ', new_share_info['Symbol']) closing_prices = stonks.get_fundamentals(new_share_info['Symbol'], info='average_volume') data_frame.loc[index, 'Volume'] = volume
def searchSymbol(self, symbol): return self.masterFormat(robin_stocks.get_fundamentals(symbol), "search")