예제 #1
0
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())
예제 #2
0
    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)
        })
예제 #3
0
 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
예제 #4
0
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
예제 #5
0
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
예제 #6
0
 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)
예제 #7
0
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
예제 #8
0
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)
예제 #9
0
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)
예제 #10
0
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