def populate_stocks(): ticker_list = [] for i in range(1, 6): ticker_list.extend( list(map(''.join, product(ascii_uppercase, repeat=i)))) for tick in ticker_list: print("Checking " + tick + ".") if Share(tick).get_name(): try: if Stock.objects.get(ticker=tick): print(tick + " already exists. Skipping database entry.") continue except: stock_info = Share(tick) stock = Stock( name=stock_info.get_name(), ticker=tick, price=stock_info.get_price(), price_target=stock_info.get_one_yr_target_price(), is_bullish=None, last_updated=timezone.now()) stock.save() print(tick + " " + Share(tick).get_name())
def get(self, request, symbol): try: stock = Stock.objects.get(ticker=symbol) self.update_stock(stock) except ObjectDoesNotExist: stock_info = Share(symbol) stock = Stock( name=stock_info.get_name(), ticker=symbol, price=stock_info.get_price(), price_target=stock_info.get_one_yr_target_price(), is_bullish=None, last_updated=timezone.now() ) stock.save() try: stock = Stock.objects.get(ticker=symbol) except ObjectDoesNotExist: stock = "Still can not pull stock." return render(request, self.template_name, { 'stock': stock, 'stock_tracked': self.stock_tracked(request, symbol) })
def update_stock(self, stock): if stock.last_updated < datetime.date.today(): try: stock_info = Share(stock.ticker) stock.price = stock_info.get_price() stock.price_target = stock_info.get_one_yr_target_price() stock.last_updated = timezone.now() stock.save() except: pass
def portfolio_stocks(stocks): tickers = [] index = 0 for stock in stocks: names = [ 'Company Name', 'Ticker', 'Price', 'Market Cap', 'P/E Ratio', 'Earnings Yield', 'Div Yield', '50 Day MA', '200 Day MA', 'Price Target' ] ticker = Share(stock) comp_name = ticker.get_name() #company name tick = stock #ticker price = ticker.get_price() #price market_cap = ticker.get_market_cap() #market_cap pe = ticker.get_price_earnings_ratio() #gets pe as a string pe_two = float(pe) if pe else 0 #returns a float of the p/e if there is a result, otherwise returns 0 final_pe = pe_two if float(pe_two) > 0 else 0 #returns pe_two if > 0 else returns 0 EPS = ticker.get_EPS_estimate_current_year() # gets eps as a string final_eps = EPS if EPS else 0 #returns eps if there is a result, else returns 0 earn_yield = float(final_eps)/float(price) #returns float of earnings yield pos_ey = earn_yield if earn_yield > 0 else 0 #turns negitive numbers to 0 print(tick, 'earn yield', pos_ey) ey = round(pos_ey*100, 2) #returns in % format div = ticker.get_dividend_yield() #returns div in string final_div = 0 if div == None else float(div) #if no result returns 0 else returns float of div fifty = ticker.get_50day_moving_avg() #returns as string short_fifty = round(float(fifty), 2) #returns div with 2 decimal places two_hundred = ticker.get_200day_moving_avg() #returns as string short_two = round(float(two_hundred), 2) #returns float with 2 decimal places target = ticker.get_one_yr_target_price() #returns as string short_target = round(float(target), 2) values = [comp_name, tick, price, market_cap, final_pe, ey, final_div, short_fifty, short_two, short_target] final_values = list(zip(names, values)) index += 1 tickers.append(final_values) return tickers
def getAllStockData(ticker): '''Get a few random tickers.''' stock = Share(ticker) stock.refresh() data = { 'name': stock.get_name(), 'price': stock.get_price(), 'change': stock.get_change(), 'volume': stock.get_volume(), 'prev_close': stock.get_prev_close(), 'open': stock.get_open(), 'avg_daily_volume': stock.get_avg_daily_volume(), 'stock_exchange': stock.get_stock_exchange, 'market_cap': stock.get_market_cap(), 'book_value': stock.get_book_value(), 'ebitda': stock.get_ebitda(), 'dividend_share': stock.get_dividend_share(), 'dividend_yield': stock.get_dividend_yield(), 'earnings_share': stock.get_earnings_share(), 'days_high': stock.get_days_high(), 'days_low': stock.get_days_low(), 'year_high': stock.get_year_high(), 'year_low': stock.get_year_low(), '50day_moving_avg': stock.get_50day_moving_avg(), '200day_moving_avg': stock.get_200day_moving_avg(), 'price_earnings_ratio': stock.get_price_earnings_ratio(), 'price_earnings_growth_ratio': stock.get_price_earnings_growth_ratio(), 'get_price_sales': stock.get_price_sales(), 'get_price_book': stock.get_price_book(), 'get_short_ratio': stock.get_short_ratio(), 'trade_datetime': stock.get_trade_datetime(), 'percent_change_from_year_high': stock.get_percent_change_from_year_high(), 'percent_change_from_year_low': stock.get_percent_change_from_year_low(), 'change_from_year_low': stock.get_change_from_year_low(), 'change_from_year_high': stock.get_change_from_year_high(), 'percent_change_from_200_day_moving_average': stock.get_percent_change_from_200_day_moving_average(), 'change_from_200_day_moving_average': stock.get_change_from_200_day_moving_average(), 'percent_change_from_50_day_moving_average': stock.get_percent_change_from_50_day_moving_average(), 'change_from_50_day_moving_average': stock.get_change_from_50_day_moving_average(), 'EPS_estimate_next_quarter': stock.get_EPS_estimate_next_quarter(), 'EPS_estimate_next_year': stock.get_EPS_estimate_next_year(), 'ex_dividend_date': stock.get_ex_dividend_date(), 'EPS_estimate_current_year': stock.get_EPS_estimate_current_year(), 'price_EPS_estimate_next_year': stock.get_price_EPS_estimate_next_year(), 'price_EPS_estimate_current_year': stock.get_price_EPS_estimate_current_year(), 'one_yr_target_price': stock.get_one_yr_target_price(), 'change_percent_change': stock.get_change_percent_change(), 'divended_pay_date': stock.get_dividend_pay_date(), 'currency': stock.get_currency(), 'last_trade_with_time': stock.get_last_trade_with_time(), 'days_range': stock.get_days_range(), 'years_range': stock.get_year_range() } return data
def update_stocks(self, request): user = User.objects.get(username=request.user) for stock in list(user.stocks.order_by('name')): if stock.last_updated < datetime.date.today(): try: stock_info = Share(stock.ticker) stock.price = stock_info.get_price() stock.price_target = stock_info.get_one_yr_target_price() stock.last_updated = timezone.now() stock.save() except: pass self.user_stock_list.append(stock)
def get_symbol_yahoo_stats_yql(symbols, exclude_name=False): """ Get the symbols' basic statistics from Yahoo Finance. Input: symbols - a list of symbol strings, e.g. ['AAPL'] Output: stats in Pandas DataFrame. This function is ported from pandas_datareader/yahoo/components.py """ sym_list = str2list(symbols) if sym_list == None: return DataFrame() # Yahoo Finance tags, refer to http://www.financialwisdomforum.org/gummy-stuff/Yahoo-data.htm tags = ['Symbol'] if not exclude_name: tags += ['Name'] tags += ['Exchange', 'MarketCap', 'Volume', 'AverageDailyVolume', 'BookValue', 'P/E', 'PEG', 'Price/Sales', 'Price/Book', 'EBITDA', 'EPS', 'EPSEstimateNextQuarter', 'EPSEstimateCurrentYear', 'EPSEstimateNextYear', 'OneyrTargetPrice', 'PriceEPSEstimateCurrentYear', 'PriceEPSEstimateNextYear', 'ShortRatio', 'Dividend/Share', 'DividendYield', 'DividendPayDate', 'ExDividendDate'] lines = [] for sym in sym_list: stock = Share(sym) line = [sym] if not exclude_name: line += [stock.get_name()] line += [stock.get_stock_exchange(), str2num(stock.get_market_cap(), m2b=True), str2num(stock.get_volume()), str2num(stock.get_avg_daily_volume()), str2num(stock.get_book_value()), str2num(stock.get_price_earnings_ratio()), str2num(stock.get_price_earnings_growth_ratio()), str2num(stock.get_price_sales()), str2num(stock.get_price_book()), str2num(stock.get_ebitda()), str2num(stock.get_earnings_share()), str2num(stock.get_EPS_estimate_next_quarter()), str2num(stock.get_EPS_estimate_current_year()), str2num(stock.get_EPS_estimate_next_year()), str2num(stock.get_one_yr_target_price()), str2num(stock.get_price_EPS_estimate_current_year()), str2num(stock.get_price_EPS_estimate_next_year()), str2num(stock.get_short_ratio()), str2num(stock.get_dividend_share()), str2num(stock.get_dividend_yield()), stock.get_dividend_pay_date(), stock.get_ex_dividend_date()] lines.append(line) stats = DataFrame(lines, columns=tags) stats = stats.drop_duplicates() stats = stats.set_index('Symbol') return stats
def stock_info(ticker): obj = session['objective'] stock_list = session['stock_list'] time = session['time'] stock = Share(ticker) name = stock.get_name() price = stock.get_price() pe = stock.get_price_earnings_ratio() final_pe = 0 if not pe else pe EPS = float(stock.get_EPS_estimate_current_year()) earn_yield = 0 if float(EPS) <= 0 else float(price) / EPS final_yield = '%.2f' % earn_yield div = stock.get_dividend_yield() final_div = 0 if div == None else div target = stock.get_one_yr_target_price() fifty = stock.get_50day_moving_avg() two_hundred = stock.get_200day_moving_avg() info = Stock(name, price, pe, final_yield, final_div, target, fifty, two_hundred) beta = Beta(ticker) return render_template("stock-info.html", name=info.name, num_beta=beta.calculate_beta(), beta=beta.compare_beta(), pe_num=final_pe, pe=info.compare_pe(), ey_num=final_yield, ey=info.compare_earn_yield(), div_num=final_div, div=info.compare_div(), fifty=fifty, two=two_hundred, ma_compare=info.compare_ma(), target_num=target, target=info.compare_target(), obj=obj, time=time, stock=stock_list)
def stock_quote_get(): print(request.args.get('symbol')) symbol = str(request.args.get('symbol')) # get all the relevant data from the Yahoo Finance API stock = Share(symbol) stock_name = stock.get_name() stock_symbol = stock.symbol stock_price = stock.get_price() stock_change = stock.get_change() stock_change_pct = stock.get_percent_change() prev_close = stock.get_prev_close() open = stock.get_open() day_range = stock.get_days_range() year_range = stock.get_year_range() volume = stock.get_volume() avg_volume = stock.get_avg_daily_volume() market_cap = stock.get_market_cap() pe_ratio = stock.get_price_earnings_ratio() eps = stock.get_earnings_share() dividend = stock.get_dividend_share() dividend_yld = stock.get_dividend_yield() dividend_ex_date = stock.get_ex_dividend_date() yr_target = stock.get_one_yr_target_price() historical = stock.get_historical('2017-01-01', date.isoformat(date.today())) # put the data into the DynamoDB database table = dynamodb.Table('Stocks') response = table.put_item( Item={ 'symbol': symbol, 'date': date.isoformat(date.today()), 'prev_close': prev_close, 'open': open, 'day_range': day_range, 'year_range': year_range, 'volume': volume, 'avg_volume': avg_volume, 'market_cap': market_cap, 'pe_ratio': pe_ratio, 'eps': eps, 'dividend': dividend, 'dividend_yld': dividend_yld, 'dividend_ex_date': dividend_ex_date, 'yr_target': yr_target, }) close_history = [] for point in historical: close_date = point['Date'] close_date = int( time.mktime(datetime.strptime(close_date, "%Y-%m-%d").timetuple())) close_price = point['Adj_Close'] close_price = float(close_price) close_history.append([close_date, close_price]) return render_template("stock/stock_detail.html", stock_name=stock_name, stock_symbol=stock_symbol, stock_price=stock_price, stock_change=stock_change, stock_change_pct=stock_change_pct, prev_close=prev_close, open=open, day_range=day_range, year_range=year_range, volume=volume, avg_volume=avg_volume, market_cap=market_cap, pe_ratio=pe_ratio, eps=eps, dividend=dividend, dividend_yld=dividend_yld, dividend_ex_date=dividend_ex_date, yr_target=yr_target, close_history=close_history)
print "get_percent_change_from_year_low:", tesla.get_percent_change_from_year_low( ) print "get_change_from_year_low:", tesla.get_change_from_year_low() print "get_change_from_year_high:", tesla.get_change_from_year_high() print "get_percent_change_from_200_day_moving_average:", tesla.get_percent_change_from_200_day_moving_average( ) print "get_change_from_200_day_moving_average:", tesla.get_change_from_200_day_moving_average( ) print "get_percent_change_from_50_day_moving_average:", tesla.get_percent_change_from_50_day_moving_average( ) print "get_change_from_50_day_moving_average:", tesla.get_change_from_50_day_moving_average( ) print "get_EPS_estimate_next_quarter:", tesla.get_EPS_estimate_next_quarter() print "get_EPS_estimate_next_year:", tesla.get_EPS_estimate_next_year() print "get_ex_dividend_date:", tesla.get_ex_dividend_date() print "get_EPS_estimate_current_year:", tesla.get_EPS_estimate_current_year() print "get_price_EPS_estimate_next_year:", tesla.get_price_EPS_estimate_next_year( ) print "get_price_EPS_estimate_current_year:", tesla.get_price_EPS_estimate_current_year( ) print "get_one_yr_target_price:", tesla.get_one_yr_target_price() print "get_change_percent_change:", tesla.get_change_percent_change() print "get_dividend_pay_date:", tesla.get_dividend_pay_date() print "get_currency:", tesla.get_currency() print "get_last_trade_with_time:", tesla.get_last_trade_with_time() print "get_days_range:", tesla.get_days_range() print "get_year_range:", tesla.get_year_range() # http://stackoverflow.com/questions/24233385/pulling-yahoo-finance-data-using-python # http://chartapi.finance.yahoo.com/instrument/1.0/TSLA/chartdata;type=quote;range=1y/csv