Exemplo n.º 1
0
def get_quote(symbol):
    share = Share(symbol)

    if not share.get_price():
        return {}

    change_f = float(share.get_change())
    change_str = '+%.02f' % change_f if change_f >= 0 else '%.02f' % change_f

    change_percent_f = change_f / float(share.get_open()) * 100
    change_percent = '+%.02f' % change_percent_f if change_percent_f >= 0 else '%.02f' % change_percent_f

    return {
        'price': share.get_price(),
        'change': change_str,
        'change_percent': change_percent,
        'open_price': share.get_open(),
        'market_cap': share.get_market_cap(),
        'year_low': share.get_year_low(),
        'year_high': share.get_year_high(),
        'day_low': share.get_days_low(),
        'day_high': share.get_days_high(),
        'volume': share.get_volume(),
        'pe_ratio': share.get_price_earnings_ratio() or '-'
    }
Exemplo n.º 2
0
def createInfos():
    if db.infos.count() == 0:
        print("Creating Infos!!")
        with open('static/sp100.json', 'rb') as f:
            ls = json.load(f)
            for i in ls:
                timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                symbol = Share(i['name'])
                item = {
                    'name': i['name'],
                    'price': symbol.get_price(),
                    'time': timestamp,
                    'prev_close': symbol.get_prev_close(),
                    'open': symbol.get_open(),
                    'volume': symbol.get_volume(),
                    'pe': symbol.get_price_earnings_ratio(),
                    'eps': symbol.get_earnings_share(),
                    'price_sales': symbol.get_price_sales(),
                    'ebitda': symbol.get_ebitda(),
                    'hotness': ms.hotness_function(i['name']),
                    'BS': ms.bs_function(i['name'])}
                db.infos.insert_one({
                    "name": i['name'],
                    "sector": i['sector'],
                    "data": [item]
                })
        print('Collection Infos Created.')
        return Response('Collection Infos Created.')
Exemplo n.º 3
0
def updateInfos():
    print("Updating Infos!")
    with open('static/sp100.json', 'rb') as f:
        ls = json.load(f)
        for i in ls:
            timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            print (i['name'])
            symbol = Share(i['name'])
            item = {
                'name': i['name'],
                'price': symbol.get_price(),
                'time': timestamp,
                'prev_close': symbol.get_prev_close(),
                'open': symbol.get_open(),
                'volume': symbol.get_volume(),
                'pe': symbol.get_price_earnings_ratio(),
                'eps': symbol.get_earnings_share(),
                'price_sales': symbol.get_price_sales(),
                'ebitda': symbol.get_ebitda(),
                'hotness': ms.hotness_function(i['name']),
                'BS': ms.bs_function(i['name'])}
            db.infos.update(
                {"name": i['name']},
                {
                    "$push": {"data": item}
                }
            )
    print('Collection Infos Updated.')
    return Response('Collection Infos Updated.')
Exemplo n.º 4
0
def fundamentalStats(stock):

	try:

		stokOutput = Share(stock)

		openPrice = stokOutput.get_open()
		closePrice = stokOutput.get_prev_close()	
		dailyDelta = stokOutput.get_change()
		earningsShare = stokOutput.get_earnings_share()	
		fiddyDay = stokOutput.get_50day_moving_avg()
		priceBook = stokOutput.get_price_book()
		peeEee = stokOutput.get_price_earnings_ratio()
		pegRatio = stokOutput.get_price_earnings_growth_ratio()


		if (float(priceBook) < 1.5 and float(peeEee) < 50 and float(pegRatio) < 2 and float(peeEee) > 0):
			csvList = [stock, "open price:", openPrice, "previous close:", closePrice, "daily deltas:", dailyDelta, "earnings per share:", earningsShare, "50 day moving avg:", fiddyDay, "price/book:", priceBook, "price/earnings:", peeEee, "peg:", pegRatio, "\n"]
			print (stock, "will be imported to Excel.") 

			stockPicks = open("picks.csv", "a", newline='')

			writeCSV = csv.writer(stockPicks, dialect='excel')
			for stock in csvList:
				writeCSV.writerow([stock])

		else:
			print (stock, "does not meet criteria.")


	except:
		print(stock, "is missing a defined key statistic.")
Exemplo n.º 5
0
def report_current_from_yahoo(symbol):
    yahoo = Share(symbol)
    price_cur = yahoo.get_price()
    eps = yahoo.get_earnings_share()
    pe = yahoo.get_price_earnings_ratio()

    print 'yahoo: price=%s eps=%s, pe=%s'%(price_cur, eps, pe)
def get_stock_info(stock_symbol):
    _stock_info = dict()
    stock = Share(stock_symbol)
    _stock_info['price'] = stock.get_price()
    _stock_info['market_cap'] = stock.get_market_cap()
    if _stock_info['market_cap'] is not None:
        _stock_info['market_cap'] = _stock_info['market_cap'].replace("B", "")
    _stock_info['price_earnings'] = stock.get_price_earnings_ratio()
    return _stock_info
Exemplo n.º 7
0
 def loadKeyStatistics (cls, companyID = 'A'):
     '''
     dataset 
     df= pd.DataFrame(columns=['marketCapital','bookValue','ebitda','dividentShare','DividentYield','earningShare',
                               'BookPrice','SalesPrice','earningsGrowth','earningsRatio', 'symbol', 'date'])
     '''
     yahoo = Share(companyID)
     yahoo.refresh()
    
     try:    
         a = re.search('[a-zA-Z]+', yahoo.get_market_cap())
         b = re.search('[a-zA-Z]+', yahoo.get_ebitda())
 
         if a.group(0) is not None:
             p = re.split('[a-zA-Z]+', yahoo.get_market_cap())
             if a.group(0) in 'B':
                 marketCap = float(p[0]) * 10 ** 9
             elif a.group(0) in 'M':
                 marketCap = float(p[0]) * 10 ** 6
             else: 
                 marketCap = -1
             print ('Market cap: ' + yahoo.get_market_cap())
         else:
             marketCap = yahoo.get_market_cap()
     
         if b.group(0) is not None:    
             p = re.split('[a-zA-Z]+', yahoo.get_ebitda())
             if b.group(0) in 'B':
                 ebitda = float(p[0]) * 10 ** 9
             elif b.group(0) in 'M':
                 ebitda = float(p[0]) * 10 ** 6
             else: 
                 ebitda = -1
             
             print ('Ebitda: ' +yahoo.get_ebitda())
         else:
             ebitda =  yahoo.get_ebitda()
 
     except (TypeError, AttributeError):
         print ('Missing :' + companyID)
         e = sys.exc_info()[0]
         print( "<p>Error: %s</p>" % e )
         ebitda = -1.0
         marketCap = -1.0
     
     try:
         company = LoadYahooFinance(symbol = companyID, marketCap = marketCap, bookValue = float(yahoo.get_book_value()), ebitda = ebitda, 
                                dividentShare = float(yahoo.get_dividend_share()), dividentYield = float(yahoo.get_dividend_yield()), earningShare = float(yahoo.get_earnings_share()),
                                bookPrice = float(yahoo.get_price_book()), salesPrice = float(yahoo.get_price_sales()), earningsGrowth = float(yahoo.get_price_earnings_growth_ratio()),
                                earningRatio = float(yahoo.get_price_earnings_ratio()))
         
         return company
     except TypeError:
         print ('Missing :' + companyID)
         e = sys.exc_info()[0]
         print( "<p>Error: %s</p>" % e )
Exemplo n.º 8
0
def get_quote(symbol):
    share = Share(symbol)

    return {
        'open': share.get_open(),
        'price': share.get_price(),
        'change': share.get_change(),
        'market_cap': share.get_market_cap(),
        'pe': share.get_price_earnings_ratio() or '-'
    }
def stock_summary(request, symbol=None):
    if symbol == None:
        symbol = request.POST['symbol']

    current_stock = Stock()
    stock = Share(symbol)
    current_stock.symbol = symbol.upper()
    current_stock.price = stock.get_price()
    current_stock.change = stock.get_change()
    current_stock.volume = stock.get_volume()
    current_stock.prev_close = stock.get_prev_close()
    current_stock.stock_open = stock.get_open()
    current_stock.avg_daily_volume = stock.get_avg_daily_volume()
    current_stock.stock_exchange = stock.get_stock_exchange()
    current_stock.market_cap = stock.get_market_cap()
    current_stock.book_value = stock.get_book_value()
    current_stock.ebitda = stock.get_ebitda()
    current_stock.dividend_share = stock.get_dividend_share()
    current_stock.dividend_yield = stock.get_dividend_yield()
    current_stock.earnings_share = stock.get_earnings_share()
    current_stock.days_high = stock.get_days_high()
    current_stock.days_low = stock.get_days_low()
    current_stock.year_high = stock.get_year_high()
    current_stock.year_low = stock.get_year_low()
    current_stock.fifty_day_moving_avg = stock.get_50day_moving_avg()
    current_stock.two_hundred_day_moving_avg = stock.get_200day_moving_avg()
    current_stock.price_earnings_ratio = stock.get_price_earnings_ratio()
    current_stock.price_earnings_growth_ratio = stock.get_price_earnings_growth_ratio()
    current_stock.price_sales = stock.get_price_sales()
    current_stock.price_book = stock.get_price_book()
    current_stock.short_ratio = stock.get_short_ratio()

    date_metrics = []
    url = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+symbol+'/chartdata;type=quote;range=1y/csv'
    page = urllib2.urlopen(url).read()
    pagebreaks = page.split('\n')
    for line in pagebreaks:
        items = line.split(',')
        if 'Company-Name:' in line:
            current_stock.company_name = line[13:len(line)]
            current_stock.save()
        if 'values' not in items:
            if len(items)==6:
                hd = HistoricalData(
                    stock_id = Stock.objects.get(id=int(current_stock.id)).id,
                    date = items[0][4:6]+'/'+items[0][6:9]+'/'+items[0][0:4],
                    close = items[1][0:(len(items[1])-2)],
                    high = items[2][0:(len(items[2])-2)],
                    price_open = items[3][0:(len(items[3])-2)],
                    low = items[4][0:(len(items[4])-2)],
                    volume = items[5][0:-6]+","+items[5][-6:-3]+","+items[5][-3:len(items[5])])
                hd.save()
                date_metrics.append(hd)
    del date_metrics[0]
    return render(request, "stock_summary.html", {'current_stock': current_stock, 'date_metrics': date_metrics})
Exemplo n.º 10
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
Exemplo n.º 11
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
Exemplo n.º 12
0
    def pe_ratio(self):
        for i in range(len(self.list_of_tick)):
            try:
                ticker = self.list_of_tick[i][0]
                info_stock = Share(ticker)
                pe_val = float(info_stock.get_price_earnings_ratio())

                if isinstance(pe_val, float) == True:
                    self.db_validate(pe_val, ticker, "PE")

            except yahoo_errors:
                pass
Exemplo n.º 13
0
 def test_filter_stocks(self):
     start, end = get_time_period()
     tickers = self.get_fifty_random_tickers()
     tested = 0
     for ticker in tickers:
         if tested >= 10:
             break
         try:
             s = Share(ticker)
             data = s.get_historical(end, start)
         except:
             continue
         tested += 1
         if len(data) < MIN_DATA_LEN or data[0]['Date'] == last_trading_day:
             continue
         if not data:
             self.assertTrue(filter_stocks(s, data))
         elif data[0]['Close'] < 1:
             self.assertTrue(filter_stocks(s, data))
         elif not s.get_market_cap():
             self.assertTrue(filter_stocks(s, data))
         elif _parse_market_cap_string(s.get_market_cap()) < float(
                 getenv('MARKET_CAP_MIN',
                        FILTER_DEFAULTS['MARKET_CAP_MIN'])):
             self.assertTrue(filter_stocks(s, data))
         elif not s.get_price_earnings_ratio():
             self.assertTrue(filter_stocks(s, data))
         elif float(s.get_price_earnings_ratio()) >= float(getenv('PE_MAX', FILTER_DEFAULTS['PE_MAX'])) or \
             float(s.get_price_earnings_ratio()) <= float(getenv('PE_MIN', FILTER_DEFAULTS['PE_MIN'])):
             self.assertTrue(filter_stocks(s, data))
         elif not s.get_avg_daily_volume() or float(
                 s.get_avg_daily_volume()) >= float(
                     getenv('VOLUME_MIN', FILTER_DEFAULTS['VOLUME_MIN'])):
             self.assertTrue(filter_stocks(s, data))
         elif (float(s.get_year_high()) * .99) <= float(data[0]['High']):
             self.assertTrue(filter_stocks(s, data))
         else:
             self.assertFalse(filter_stocks(s, data))
def rec(p):
    yahoo = Share(p)
    a = yahoo.get_prev_close()
    b = yahoo.get_year_high()
    c = yahoo.get_year_low()
    d = yahoo.get_open()
    e = yahoo.get_ebitda()
    f = yahoo.get_market_cap()
    g = yahoo.get_avg_daily_volume()
    h = yahoo.get_dividend_yield()
    i = yahoo.get_earnings_share()
    j = yahoo.get_days_low()
    k = yahoo.get_days_high()
    l = yahoo.get_50day_moving_avg()
    m = yahoo.get_200day_moving_avg()
    n = yahoo.get_price_earnings_ratio()
    o = yahoo.get_price_earnings_growth_ratio()
    print p
    print "Previous Close: ", a
    print "Year High", b
    print "Year Low", c
    print "Open:", d
    print "EBIDTA", e
    print "Market Cap", f
    print "Average Daily Volume", g
    print "Dividend Yield", h
    print "Earnings per share", i
    print "Days Range:", j, "-", k
    print "50 Days Moving Average", l
    print "200 Days Moving Average", m
    print "Price Earnings Ratio", n
    print "Price Earnings Growth Ratio", o

    import MySQLdb
    db = MySQLdb.connect(host="127.0.0.1",
                         user="******",
                         passwd="1111",
                         db="stocks",
                         local_infile=1)
    cur = db.cursor()
    cur.execute(
        """
	            INSERT INTO stockapp_info (symbol, prev_close, year_high, year_low, open_price , ebidta, market_cap, avg_daily_vol , dividend_yield, eps , days_low ,days_high, moving_avg_50, moving_avg_200, price_earnings_ratio, price_earnings_growth_ratio)
	            VALUES
	                (%s, %s, %s, %s, %s, %s, %s,%s,%s,%s,%s,%s,%s,%s,%s,%s)

	        """, (p, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o))
    db.commit()
    cur.close()
Exemplo n.º 15
0
def get_value_investing_symbols():
    from db import Symbol
    stocks = []

    #Loop each stock and generate an array with (stock_name, price-earnings ratio) tuples
    for s in Symbol.query.filter(Symbol.symbol_type == 'STOCK'):
        stock = Share(s.symbol)
        pe_ratio = stock.get_price_earnings_ratio()
        if pe_ratio is not None:
            stocks.append((s, float(pe_ratio)))

    #sort the array by price–earnings ratio(lowest first)
    stocks = sorted(stocks, key=operator.itemgetter(1))

    #return the recommended symbols
    return [stocks[0][0], stocks[1][0], stocks[2][0]]
Exemplo n.º 16
0
def get_quality_investing_symbols():
    from db import Symbol
    quality_stocks = []

    # Only get specific quality stocks
    for s in db.session.query(Symbol).filter(Symbol.quality == True):
        stock = Share(s.symbol)
        pe_ratio = stock.get_price_earnings_ratio()
        if pe_ratio is not None:
            quality_stocks.append((s, float(pe_ratio)))

    #Sort by highest price earnings ratio
    quality_stocks.sort(key=operator.itemgetter(1), reverse=True)

    #Return top 3
    return [quality_stocks[0][0], quality_stocks[1][0], quality_stocks[2][0]]
Exemplo n.º 17
0
def get_ethical_investing_symbols():
    from db import Symbol
    ethical_stocks = []

    # Only get specific ethical stocks
    for s in db.session.query(Symbol).filter(Symbol.ethical == True):
        stock = Share(s.symbol)
        pe_ratio = stock.get_price_earnings_ratio()
        if pe_ratio is not None:
            ethical_stocks.append((s, float(pe_ratio)))

    # Sort by highest price earnings ratio
    sorted(ethical_stocks, key=operator.itemgetter(1), reverse=True)

    # Return top 3
    return [ethical_stocks[0][0], ethical_stocks[1][0], ethical_stocks[2][0]]
 def get_company_info(ticker):
     try:
         s = Share(ticker)
         data = {
             'Market_cap': s.get_market_cap(),
             'Average_volume': s.get_avg_daily_volume(),
             'EPS': s.get_earnings_share(),
             'Short_ratio': s.get_short_ratio(),
             'PE': s.get_price_earnings_ratio(),
             'PEG': s.get_price_earnings_growth_ratio(),
         }
         return DataFetcher._extract_company_info(data)
     except YQLQueryError:
         logger.error("Company info not found for {}".format(ticker))
     except Exception as e:
         logger.error("Unexpected error occured: {}".format(e))
     return {}
 def get_company_info(ticker):
     try:
         s = Share(ticker)
         data = {
             'Market_cap': s.get_market_cap(),
             'Average_volume': s.get_avg_daily_volume(),
             'EPS': s.get_earnings_share(),
             'Short_ratio': s.get_short_ratio(),
             'PE': s.get_price_earnings_ratio(),
             'PEG': s.get_price_earnings_growth_ratio(),
         }
         return DataFetcher._extract_company_info(data)
     except YQLQueryError:
         logger.error("Company info not found for {}".format(ticker))
     except Exception as e:
         logger.error("Unexpected error occured: {}".format(e))
     return {}
Exemplo n.º 20
0
def get_share_price(stock_symbol):
    try:
        stock_symbol = stock_symbol.lower()
        stock = Share(stock_symbol)
        opening_price = stock.get_open()
        cur_price = stock.get_price()
        pe_ratio = stock.get_price_earnings_ratio()
        market_cap = stock.get_market_cap()
        result = [
            stock_symbol,
            str(cur_price),
            str(opening_price),
            str(pe_ratio),
            str(market_cap)
        ]
    except:
        result = "1"
    return result
def rec(p):
	yahoo = Share(p)
	a=yahoo.get_prev_close()
	b=yahoo.get_year_high()
	c=yahoo.get_year_low()
	d=yahoo.get_open()
	e=yahoo.get_ebitda()
	f=yahoo.get_market_cap()
	g=yahoo.get_avg_daily_volume()
	h=yahoo.get_dividend_yield()
	i=yahoo.get_earnings_share()
	j=yahoo.get_days_low()
	k=yahoo.get_days_high()
	l=yahoo.get_50day_moving_avg()
	m=yahoo.get_200day_moving_avg()
	n=yahoo.get_price_earnings_ratio()
	o=yahoo.get_price_earnings_growth_ratio()
	print p
	print "Previous Close: ",a
	print "Year High",b
	print "Year Low",c
	print "Open:",d
	print "EBIDTA",e 
	print "Market Cap",f
	print "Average Daily Volume",g 
	print "Dividend Yield",h
	print "Earnings per share",i 
	print "Days Range:", j ,"-",k
	print "50 Days Moving Average",l 
	print "200 Days Moving Average",m
	print"Price Earnings Ratio", n
	print"Price Earnings Growth Ratio",o

	import MySQLdb
	db = MySQLdb.connect(host="127.0.0.1", user="******",passwd="1111", db="stocks",local_infile = 1)  
	cur=db.cursor()
	cur.execute ("""
	            INSERT INTO stockapp_info (symbol, prev_close, year_high, year_low, open_price , ebidta, market_cap, avg_daily_vol , dividend_yield, eps , days_low ,days_high, moving_avg_50, moving_avg_200, price_earnings_ratio, price_earnings_growth_ratio)
	            VALUES
	                (%s, %s, %s, %s, %s, %s, %s,%s,%s,%s,%s,%s,%s,%s,%s,%s)

	        """, (p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o))
	db.commit() 
	cur.close()
Exemplo n.º 22
0
def yahooKeyStats(stock):
    try:
		share = Share(stock)
		per = float(share.get_price_earnings_ratio())
		pbr= float (share.get_price_book())
		peg = float (share.get_price_earnings_growth_ratio())
		#xFirst criteria, price earnings ratio must be lower than 15
		if per<15:
			print stock,'meets requirements'
			print 'Price Earnings Ratio:',stock,per
			print 'price to book ratio:',stock,pbr
			print 'price earnings growth ratio:',stock,peg	
			datafm= {"stock":stock,"per":per,'pbr':pbr,'peg':peg}
			print(datafm)
			return datafm
		else:
			raise Exception("does not meet the criteria")
    except Exception,e:
        print stock, "does not meet the criteria"
Exemplo n.º 23
0
    def fetch_stock_price(self, stock_unit_key):
        # Step 1: Make HTTP Call to fetch the Stock Details
        # Step 2: Once received, create it into its corresponding model
        # Step 2.1 : Between the models, exchange packet as a native dictionary, rather as a JSON object

        # Get the share price
        share_item = Share(stock_unit_key)

        if share_item.get_open() is None:
            return

        share_item_dict = share_item.data_set

        st_model = StockModel()
        st_model.stock_unit = stock_unit_key
        st_model.stock_title = share_item_dict['Name']

        # Share Price + Unit of Currency
        st_model.stock_price = share_item.get_price(
        ) + " " + share_item_dict['Currency']

        deviation_price = share_item.get_change()
        st_model.stock_deviation = deviation_price + " (" + share_item_dict[
            'ChangeinPercent'] + ") "  # Ex: '-1.83 (-1.59%)'
        if deviation_price[0] == '-':
            st_model.stock_deviation_status = 'Decline'
        else:
            st_model.stock_deviation_status = 'Incline'

        st_model.stock_equity = share_item.get_stock_exchange()
        st_model.stock_last_update_time = 'At close: ' + share_item_dict[
            'LastTradeDateTimeUTC']

        st_model.stock_52wkrange = share_item.get_year_low(
        ) + " - " + share_item.get_year_high()
        st_model.stock_open = share_item.get_open()
        st_model.stock_market_cap = share_item.get_market_cap()
        st_model.stock_prev_close = share_item.get_prev_close()
        st_model.stock_peratio_tte = share_item.get_price_earnings_ratio()

        st_model_to_publish = self.payload_to_publish_dict.get_stock_payload_to_publish(
            st_model)
        self.push_stock_to_delivery_queue(st_model_to_publish, stock_unit_key)
Exemplo n.º 24
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
Exemplo n.º 25
0
def selectStock(stocks):
    '''
    select the stock with today's trading volume at least 6 fold higher than 
    average historical trading volume
    '''
    start_time = time()
    resultStock = {}
    count = 0
    num = 0
    for symb in stocks.keys():
        try:
            stock = Share(symb)
            vol = int(stock.get_volume())
            daily_avg_vol = int(stock.get_avg_daily_volume())
            price = float(stock.get_price())
            prevPrice = float(stock.get_prev_close())
            avg_50day = float(stock.get_50day_moving_avg())
            avg_200day = float(stock.get_200day_moving_avg())
        except (TypeError, AttributeError):
            continue
        num += 1
        volRatio = vol / daily_avg_vol
        print num, stocks[symb][0], volRatio

        if volRatio > 6 and price > prevPrice and price > avg_50day:
            count += 1
            stocks[symb].extend([
                vol, daily_avg_vol, volRatio, price, prevPrice, avg_50day,
                avg_200day,
                stock.get_price_earnings_ratio(),
                stock.get_price_book(),
                stock.get_short_ratio(),
                stock.get_dividend_yield()
            ])

    resultStock = {
        symb: stocks[symb]
        for symb in stocks.keys() if len(stocks[symb]) > 1
    }
    print '{} stock(s) has marvelous volume'.format(count)
    print 'total time of running: {} seconds'.format(time() - start_time)
    return resultStock
Exemplo n.º 26
0
def getStat(stockTicker):
    StatDict = dict()
    ticker = Share(stockTicker)

    mktCap = ticker.get_market_cap()
    if (mktCap != None and mktCap != 0):
        StatDict["Market cap"] = mktCap
    ebitda = ticker.get_ebitda()
    if (ebitda != None and ebitda != 0):
        StatDict["EBITDA"] = ebitda
    peR = ticker.get_price_earnings_ratio()
    if (peR != None and peR != 0):
        StatDict["Price Earning Ratio"] = peR
    EPS = ticker.get_earnings_share()
    if (EPS != None and EPS != 0):
        StatDict["EPS"] = EPS
    divYield = ticker.get_dividend_yield()
    if (divYield != None and divYield != 0):
        StatDict["Dividend Yield"] = divYield
    return StatDict
Exemplo n.º 27
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)
def main():
    # this adds commas to all numbers greater than one thousand
    locale.setlocale(locale.LC_ALL, 'en_US')
    # if statement that checks for args. error/help message will appear if no args
    if (len(sys.argv) == 1):
        print "\nPlease supply one or more tickers. Example: python stephan_s_stock_quote.py GOOG\n"

    else:
        for counter in range(1, len(sys.argv)):
            # this is where we fetch our stocks from
            y = Share(sys.argv[counter])
            # this is the output along with a message regarding the CSV file
            print "\nSymbol: " + str(sys.argv[counter])

            print "Company Name: " + str(y.get_name())

            print "Market Capitalization: $" + str(y.get_market_cap())

            print "Earnings Per Share: $" + str(
                locale.format(
                    "%d", float(y.get_earnings_share()), grouping=True))

            print "P/E Ratio: " + str(y.get_price_earnings_ratio())

            print "Average Volume: " + str(
                locale.format(
                    "%d", float(y.get_avg_daily_volume()), grouping=True))

            print "Today's Volume: " + str(
                locale.format("%d", float(y.get_volume()), grouping=True))

            print "Today's Closing Price: $" + str(y.get_price())

            print "Percent Change: " + str(y.get_percent_change()) + "\n"

    print "A CSV file of your selected stock tickers has been downloaded to your computer under the name 'stocks.csv'. " + "\n"

    print "The CSV file will be downloaded to the same folder that this program was stored in." + "\n"
Exemplo n.º 29
0
class Symbol(object):

    def __init__(self, symbol, s_date=None, e_date=None):
        self.log=Logging()
        self.name=symbol
        self.created=datetime.datetime.utcnow()
        self.log.info("created {}".format(self.name))
        try:
            self.share=Share(symbol)
        except:
            self.log.error("platform is offline or not connecting")

        if s_date and e_date:
            self.begin=s_date
            self.end=e_date
            try:
                self.share=Share(symbol)
                self.data=self.share.get_historical(self.begin, self.end)
                self.log.refresh("{} data collected".format(self.name))
            except:
                self.log.error("platform is offline or not connecting")
    
    def refresh_data(self, s_date=None, e_date=None):
        if s_date and e_date:
            try:
                share=Share(self.name)
                self.begin=s_date
                self.end=e_date
                share.get_historical(s_date, e_date)
                self.log.refresh("{} data collected".format(self.name))
            except:
                self.log.error("platform is offline or not connecting")

    def market_cap(self):
        try:
            self.market_cap = self.share.get_market_cap()
            self.log.info("{} market cap refreshed".format(self.name))
        except:
            self.log.error("platform is offline or not connecting")
        
    def earnings_per_share(self):
        try:
            self.eps = self.share.get_earnings_share()
            self.log.info("{} eps refreshed".format(self.name))
        except:
            self.log.error("platform is offline or not connecting")

    def moving_average_50(self):
        try:
            self.moving_average_50 = self.share.get_50day_moving_average()
            self.log.info("{} 50 day moving ave refreshed".format(self.name))
        except:
            self.log.error("platform is offline or not connecting")

    #implement TODO
    def nday_moving_average(self, n):
        try:
            self.moving_average_n = None
            self.log.info("{} {} day moving ave refreshed".format(self.name, n))
        except:
            self.log.error("platform is offline or not connecting")

    def price_earnings_ratio(self):
        try:
            self.price_to_earnings = self.share.get_price_earnings_ratio()
            self.log.info("{} price to earnings refreshed".format(self.name))
        except:
            self.log.error("platform is offline or not connecting")


    def book_value(self):
        try:
            self.book = self.share.get_price_book()
            self.log.info("{} book value refreshed".format(self.name))
        except:
            self.log.error("platform is offline or not connecting")

    def year_high(self):
        try:
            self.year_high = self.share.get_change_from_year_high()
            self.log.info("{} year high change refreshed".format(self.name))
        except:
            self.log.error("platform is offline or not connecting")

    def year_low(self):
        try:
            self.year_low = self.share.get_change_from_year_low()
            self.log.info("{} year low change refreshed".format(self.name))
        except:
            self.log.error("platform is offline or not connecting")

    def target_price(self):
        try:
            self.year_target = self.share.get_change_from_year_high()
            self.log.info("{} year target change refreshed".format(self.name))
        except:
            self.log.error("platform is offline or not connecting")
    
    def year_range(self):
        try:
            self.year_range = self.share.get_change_from_year_high()
            self.log.info("{} year range change refreshed".format(self.name))
        except:
            self.log.error("platform is offline or not connecting")
Exemplo n.º 30
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)
    print "The CSV file will be downloaded to the same folder that this program was stored in." + "\n"


# code that creates the CSV file
with open('stocks.csv', 'w') as fp:
    outputFile = csv.writer(fp)
    data1 = [[
        'Symbol', 'Company Name', 'Market Capitalization',
        'Earnings Per Share', 'P/E Ratio', 'Average Volume', 'Today\'s Volume',
        'Today\'s Closing Price', 'Percent Change'
    ]]
    outputFile.writerows(data1)
    for counter in range(1, len(sys.argv)):
        y = Share(sys.argv[counter])

        data2 = [[
            str(sys.argv[counter]),
            str(y.get_name()),
            str(y.get_market_cap()),
            str(y.get_earnings_share()),
            str(y.get_price_earnings_ratio()),
            str(y.get_avg_daily_volume()),
            str(y.get_volume()),
            str(y.get_price()),
            str(y.get_percent_change())
        ]]

        outputFile.writerows(data2)

if __name__ == '__main__':
    main()
Find "under valued" companies

import time
from yahoo_finance import Share

Russell3000 = ['FLWS', 'SRCE', 'FOXA', 'FOX', 'TWOU', 'DDD', 'MMM', 'EGHT', 'AVHI', 'ATEN', 'AAC', 'AAON', 'AIR', 'AAN', 'ABAX', 'ABT', 'ABBV', 'ANF', 'ABMD', 'ABM', 'AXAS', 'ACIA', 'ACTG', 'ACHC', 'ACAD', 'AKR', 'AXDX', 'XLRN', 'ACN', 'ANCX', 'ACCO', 'ARAY', 'ACRX', 'ACET', 'ACHN', 'ACIW', 'ACRS', 'ACNB', 'ACOR', 'ATVI', 'ACTA', 'ATU', 'AYI', 'ACXM', 'ADMS', 'AE', 'ADUS', 'ADPT', 'ADBE', 'ADTN', 'ADRO', 'AAP', 'WMS', 'AEIS', 'AMD', 'ADXS', 'ADVM', 'ABCO', 'ACM', 'AEGN', 'AEPI', 'AERI', 'HIVE', 'AJRD', 'AVAV', 'AES', 'AET', 'AMG', 'AFL', 'MITT', 'AGCO', 'AGEN', 'AGRX', 'A', 'AGYS', 'AGIO', 'GAS', 'ADC', 'AGFS', 'AIMT', 'AL', 'AIRM', 'APD', 'ATSG', 'AYR', 'AKS', 'AKAM', 'AKBA', 'AKRX', 'ALG', 'ALRM', 'ALK', 'AIN', 'AMRI', 'ALB', 'AA', 'ALDR', 'ALR', 'ALEX', 'ALX', 'ARE', 'ALXN', 'ALCO', 'ALGN', 'ALJJ', 'ALKS', 'Y', 'ATI', 'ABTX', 'ALGT', 'ALLE', 'AGN', 'ALE', 'ADS', 'AOI', 'LNT', 'AMOT', 'AWH', 'ALSN', 'MDRX', 'ALL', 'ALLY', 'AFAM', 'ALNY', 'ALJ', 'AOSL', 'GOOGL', 'GOOG', 'ASPS', 'RESI', 'AIMC', 'MO', 'AMAG', 'AMZN', 'AMBC', 'AMBA', 'AMBR', 'AMC', 'AMCX', 'DOX', 'AMED', 'APEI', 'UHAL', 'AEE', 'AAL', 'AAT', 'AXL', 'ACC', 'MTGE', 'AGNC', 'AEO', 'AEP', 'AEL', 'AXP', 'AFG', 'AMH', 'AMIC', 'AIG', 'ANAT', 'AMNB', 'ARII', 'ARA', 'ASEI', 'AMSWA', 'AWR', 'AMSC', 'AMT', 'AVD', 'AMWD', 'AWK', 'CRMT', 'AMP', 'ABCB', 'AMSF', 'ABC', 'ATLO', 'AME', 'AMGN', 'FOLD', 'AMKR', 'AHS', 'AP', 'AMPH', 'APH', 'AMPE', 'BETR', 'AMSG', 'AFSI', 'APC', 'ADI', 'ALOG', 'AVXL', 'AMRC', 'ANGI', 'ANGO', 'ANIP', 'ANIK', 'AXE', 'NLY', 'ANSS', 'AR', 'ANTM', 'ANTH', 'ANH', 'AON', 'APA', 'AIV', 'APIC', 'APOG', 'ARI', 'APOL', 'AMTG', 'APPF', 'APLE', 'AAPL', 'AGTC', 'AIT', 'AMAT', 'AMCC', 'AAOI', 'ATR', 'WTR', 'AQMS', 'ARMK', 'PETX', 'ARC', 'ARCB', 'ACGL', 'ADM', 'AROC', 'ACAT', 'ARDX', 'ASC', 'ARNA', 'ACRE', 'AGX', 'AGII', 'ARGS', 'ARIA', 'AI', 'ANDE', 'AFI', 'AWI', 'ARRY', 'ARRS', 'ARW', 'AROW', 'ARWR', 'ARTNA', 'APAM', 'ANET', 'ABG', 'ASNA', 'ASCMA', 'AHP', 'AHT', 'ASH', 'AHL', 'AZPN', 'ASB', 'AC', 'AIZ', 'AGO', 'ASTE', 'AST', 'AF', 'ATRO', 'T', 'ATRA', 'ATHN', 'ATHX', 'ACBI', 'AT', 'ABY', 'AAWW', 'AFH', 'TEAM', 'ATO', 'ATNI', 'ATRC', 'ATRI', 'ATW', 'ABTL', 'ADSK', 'ADP', 'AN', 'AZO', 'AVB', 'AHH', 'ARR', 'AVY', 'AVXS', 'AVG', 'AVID', 'AVGR', 'CAR', 'AVA', 'AVT', 'AVP', 'AVX', 'AXTA', 'ACLS', 'AXLL', 'AXS', 'AXGN', 'AXON', 'AXSM', 'AZZ', 'BGS', 'RILY', 'BW', 'BMI', 'BHI', 'BCPC', 'BWINB', 'BLL', 'BANC', 'BANF', 'BLX', 'TBBK', 'BXS', 'BKMU', 'BAC', 'BOH', 'BMRC', 'BK', 'OZRK', 'BFIN', 'RATE', 'BKU', 'BWFG', 'BANR', 'BHB', 'BNED', 'BKS', 'B', 'AGR', 'AVNU', 'BAX', 'BV', 'BBT', 'BBCN', 'BBX', 'BEAV', 'BECN', 'BSF', 'BZH', 'BDX', 'BBBY', 'BELFB', 'BDC', 'BLCM', 'BEL', 'BMS', 'BHE', 'BNCL', 'BNFT', 'WRB', 'BRK.B', 'BHLB', 'BERY', 'BBY', 'BGCP', 'BGFV', 'BIG', 'BH', 'BBG', 'BPTH', 'BCRX', 'BIIB', 'BMRN', 'BIO', 'BIOS', 'BSTC', 'TECH', 'BEAT', 'BTX', 'BJRI', 'BBOX', 'BKH', 'BKFS', 'BLKB', 'HAWK', 'BLK', 'CUDA', 'BBSI', 'BSET', 'BLBD', 'BUFF', 'BCRH', 'BHBK', 'NILE', 'BLUE', 'BPMC', 'BRG', 'BMCH', 'BNCN', 'BOBE', 'BA', 'BOFI', 'WIFI', 'BCC', 'BOJA', 'BOKF', 'BOOT', 'BAH', 'BWA', 'SAM', 'BPFH', 'BXP', 'BSX', 'EPAY', 'BOX', 'BYD', 'BRC', 'BDN', 'BDGE', 'BPI', 'BGG', 'BFAM', 'BCOV', 'EAT', 'BCO', 'BMY', 'BRS', 'BRX', 'AVGO', 'BR', 'BSFT', 'BRCD', 'BKD', 'BRKL', 'HRB', 'BLMN', 'BCOR', 'BRKR', 'BC', 'BMTC', 'BLMT', 'BKE', 'BWLD', 'BBW', 'BLDR', 'BG', 'BURL', 'BWXT', 'CFFI', 'CHRW', 'BNK', 'CA', 'CAB', 'CABO', 'CBT', 'CCMP', 'COG', 'CACI', 'CDNS', 'CACQ', 'CZR', 'CSTE', 'CAI', 'CALM', 'CLMS', 'CAMP', 'CAA', 'CVGW', 'CAL', 'CCC', 'CFNB', 'CRC', 'CWT', 'CALX', 'ELY', 'CALD', 'CPE', 'CPN', 'ABCD', 'CBM', 'CAC', 'CPT', 'BRKS', 'BRO', 'BF.A', 'BF.B', 'CCBG', 'COF', 'CSU', 'CFFN', 'CMO', 'CARA', 'CRR', 'CARB', 'CFNL', 'CAH', 'CSII', 'CATM', 'CCP', 'CRCM', 'CECO', 'CTRE', 'CSL', 'KMX', 'CKEC', 'CCL', 'CARO', 'CRS', 'CSV', 'CRZO', 'TAST', 'CRI', 'CACB', 'CSCD', 'CWST', 'CASY', 'CSH', 'CASS', 'CSLT', 'CTLT', 'CTT', 'CAT', 'CATY', 'CATO', 'CVCO', 'CAVM', 'CBZ', 'CBL', 'CBOE', 'CBG', 'CPB', 'CMN', 'CPLA', 'CBF', 'CDR', 'CGI', 'CE', 'CPXX', 'CELG', 'CLDX', 'CBMG', 'CEMP', 'CNC', 'CNP', 'CSFL', 'CETV', 'CENT', 'CPF', 'CVCY', 'CENX', 'CNBKA', 'CNTY', 'CCS', 'CTL', 'CPHD', 'CERN', 'CERS', 'CEVA', 'CF', 'ECOM', 'CRL', 'GTLS', 'CHTR', 'CHFN', 'CCF', 'CLDT', 'CAKE', 'CHEF', 'CHGG', 'CHE', 'CHFC', 'CCXI', 'CHMT', 'CHMG', 'LNG', 'CHK', 'CHSP', 'CPK', 'CBS', 'CDK', 'CDW', 'CEB', 'CECE', 'CIM', 'CMRX', 'CMG', 'CHH', 'CDXC', 'CB', 'CHD', 'CHDN', 'CHUY', 'CDTX', 'CIEN', 'CI', 'XEC', 'CMPR', 'CBB', 'CINF', 'CNK', 'CTAS', 'CIR', 'CRUS', 'CSCO', 'CIT', 'CTRN', 'C', 'CZNC', 'CFG', 'CIA', 'CTXS', 'CHCO', 'CIO', 'CIVI', 'CLC', 'CLNE', 'CLH', 'CCO', 'CLFD', 'CLW', 'CLF', 'CSBK', 'CLX', 'CLVS', 'MYCC', 'CME', 'CVX', 'CBI', 'CHS', 'PLCE', 'COBZ', 'COKE', 'KO', 'CDXS', 'CVLY', 'CDE', 'CCOI', 'CGNX', 'CTSH', 'CNS', 'COHR', 'CHRS', 'COHU', 'CFX', 'CL', 'CLCT', 'COLL', 'CLNY', 'SFR', 'COLB', 'CPGX', 'CXP', 'COLM', 'CMCO', 'CMCSA', 'CMA', 'FIX', 'CSAL', 'CBSH', 'CMC', 'COMM', 'CBU', 'CYH', 'CHCT', 'CTBI', 'COB', 'CVLT', 'CMP', 'CPSI', 'CSC', 'CIX', 'SCOR', 'CMTL', 'CAG', 'CMS', 'CNA', 'CCNE', 'CNO', 'COH', 'CIE', 'CNOB', 'CONN', 'COP', 'CNX', 'CNSL', 'ED', 'CTO', 'CWCO', 'STZ', 'MCF', 'CBPX', 'CLR', 'CTRL', 'CVG', 'COO', 'CPS', 'CTB', 'CPA', 'CPRT', 'CORT', 'CORE', 'CLGX', 'CORR', 'COR', 'CVRS', 'CSOD', 'GLW', 'OFC', 'CXW', 'CRVL', 'CRVS', 'CMRE', 'CSGP', 'COST', 'COTV', 'COTY', 'ICBK', 'CUZ', 'CVA', 'CVTI', 'COWN', 'PMTS', 'CNCE', 'CXO', 'CFMS', 'CNMD', 'CTWS', 'CACC', 'CREE', 'CROX', 'CCRN', 'CCI', 'CCK', 'CRY', 'CSGS', 'CSRA', 'CSS', 'CST', 'CSWI', 'CSX', 'CTS', 'CUNB', 'CUBE', 'CUB', 'CFR', 'CFI', 'CMI', 'CRIS', 'CW', 'CUBI', 'CUTR', 'CVBF', 'CVT', 'CVI', 'CVS', 'CYNO', 'CY', 'CONE', 'CYS', 'CYTK', 'CTMX', 'CYTR', 'DHI', 'DJCO', 'DAKT', 'DAN', 'DHR', 'DRI', 'DAR', 'DTLK', 'BCR', 'CRAI', 'CBRL', 'BREW', 'CR', 'CRD.B', 'CRAY', 'DECK', 'DE', 'DFRG', 'TACO', 'DK', 'DLPH', 'DAL', 'DLA', 'DGAS', 'DEL', 'DLX', 'DWRE', 'DNR', 'DENN', 'XRAY', 'DEPO', 'DERM', 'DXLG', 'DVN', 'DV', 'DXCM', 'DHX', 'DHT', 'DHIL', 'DO', 'DRII', 'FANG', 'DRH', 'DKS', 'DBD', 'DGII', 'DMRC', 'DLR', 'DGI', 'DDS', 'DCOM', 'DMTX', 'DIN', 'DIOD', 'DPLO', 'DFS', 'PLAY', 'DVA', 'DWSN', 'DCT', 'DDR', 'DF', 'DPZ', 'UFS', 'DCI', 'DGICA', 'RRD', 'LPG', 'DORM', 'PLOW', 'DEI', 'DOV', 'DOW', 'DPS', 'DWA', 'DW', 'DRQ', 'DSPG', 'DST', 'DSW', 'DTE', 'DTSI', 'DD', 'DCO', 'DUK', 'DRE', 'DLTH', 'DNB', 'DNKN', 'DFT', 'DRRX', 'DXPE', 'DY', 'BOOM', 'DVAX', 'DYN', 'DX', 'ETFC', 'EGBN', 'EXP', 'EGRX', 'ELNK', 'ESTE', 'EWBC', 'DISCA', 'DISCK', 'DISH', 'DIS', 'DLB', 'DG', 'DLTR', 'D', 'EBIX', 'ECHO', 'SATS', 'ECR', 'ECL', 'EDGE', 'EPC', 'EIX', 'EDIT', 'EDR', 'EW', 'EGLT', 'EHTH', 'EIGR', 'EE', 'LOCO', 'ERI', 'ELRC', 'ESIO', 'EA', 'EFII', 'RDEN', 'ELLI', 'PERY', 'EMC', 'EMCI', 'EME', 'EMKR', 'EBS', 'EMR', 'EDE', 'NYNY', 'ESRT', 'EIG', 'ENTA', 'ECPG', 'WIRE', 'ENDP', 'ECYT', 'ELGX', 'DEA', 'EGP', 'EMN', 'KODK', 'ETN', 'EV', 'EBAY', 'EBF', 'ENVA', 'NPO', 'ESV', 'ENSG', 'ESGR', 'ENTG', 'ENTL', 'ETM', 'ETR', 'EBTC', 'EFSC', 'EVC', 'ENV', 'EVHC', 'ENZ', 'EOG', 'EPE', 'EPAM', 'EPIQ', 'EPZM', 'PLUS', 'EPR', 'EQT', 'EFX', 'EQIX', 'EQBK', 'EQC', 'ELS', 'EQY', 'EQR', 'ERA', 'ERIE', 'ERN', 'EROS', 'ESCA', 'ESE', 'ESPR', 'ESSA', 'ESND', 'ESNT', 'EIGI', 'ENH', 'EGN', 'ENR', 'WATT', 'ERII', 'ENOC', 'ENS', 'EGL', 'RE', 'ES', 'EVTC', 'EVDY', 'EVH', 'EPM', 'EXA', 'EXAS', 'EXAC', 'EXAM', 'EXAR', 'XCO', 'EXEL', 'EXC', 'EXLS', 'XONE', 'EXPE', 'EXPD', 'EXPO', 'EXPR', 'ESRX', 'STAY', 'EXTN', 'EXR', 'EXTR', 'XOM', 'EZPW', 'FFIV', 'FN', 'FB', 'FDS', 'FICO', 'FCS', 'FMSA', 'FRP', 'FARM', 'FFKT', 'FMNB', 'FPI', 'ESS', 'EL', 'ESL', 'ETH', 'ETSY', 'EEFT', 'EVER', 'EVR', 'FNHC', 'FDX', 'FEIC', 'FCH', 'FOE', 'GSM', 'FGEN', 'FGL', 'FIS', 'LION', 'FRGI', 'FSAM', 'FITB', 'FNGN', 'FISI', 'FNSR', 'FINL', 'FEYE', 'FAF', 'FNLC', 'FBNC', 'FBP', 'BUSE', 'FBIZ', 'FCFS', 'FCNCA', 'FCBC', 'FCF', 'FCFP', 'FBNK', 'FDC', 'FDEF', 'FFBC', 'THFF', 'FFIN', 'FFNW', 'FFWM', 'FHN', 'FR', 'INBK', 'FARO', 'FAST', 'FFG', 'FBRC', 'FCB', 'AGM', 'FDML', 'FRT', 'FSS', 'FII', 'FRC', 'FSLR', 'FE', 'FMER', 'FISV', 'FIT', 'FIVE', 'FPRX', 'FIVN', 'FBC', 'FLT', 'FLTX', 'FLKS', 'FLXN', 'FLXS', 'FLIR', 'FTK', 'FLO', 'FLS', 'FLDM', 'FLR', 'FFIC', 'FMC', 'FTI', 'FNB', 'FNF', 'FNFV', 'FOGO', 'FL', 'F', 'FCE.A', 'FOR', 'FORM', 'FORR', 'FTNT', 'FBIO', 'FBHS', 'FET', 'FIBK', 'FLIC', 'FRME', 'FMBH', 'FMBI', 'FNBC', 'FNFG', 'FNWB', 'FPO', 'BEN', 'FSP', 'FRED', 'FCX', 'RAIL', 'FDP', 'FRPT', 'FTR', 'FRO', 'FRPH', 'FTD', 'FCN', 'FCEL', 'FULT', 'FF', 'GK', 'GAIA', 'GCAP', 'GALE', 'AJG', 'GBL', 'GME', 'GLPI', 'GCI', 'GPS', 'GRMN', 'IT', 'GLOG', 'GMT', 'GCP', 'GENC', 'GNRT', 'GNRC', 'BGC', 'GNCMA', 'GD', 'GE', 'GGP', 'GIS', 'FWRD', 'FOSL', 'FMI', 'FCPT', 'FXCB', 'FOXF', 'FRAN', 'FC', 'FELE', 'FSB', 'FI', 'THRM', 'GPC', 'GNW', 'GEO', 'GEOS', 'GABC', 'GERN', 'GTY', 'ROCK', 'GIMO', 'GIG', 'GILD', 'GBCI', 'GOOD', 'GLT', 'GKOS', 'GBT', 'BRSS', 'ENT', 'GBLI', 'GNL', 'GPN', 'GSOL', 'GWRS', 'GSAT', 'GLOB', 'GMED', 'GLUU', 'GLYC', 'GMS', 'GNC', 'GDDY', 'GOGO', 'GLNG', 'GORO', 'GDEN', 'GS', 'GM', 'GCO', 'GWR', 'GEN', 'GNE', 'GNMK', 'GHDX', 'G', 'GNTX', 'GIII', 'GVA', 'GPK', 'GTN', 'AJX', 'GLDD', 'GXP', 'GSBC', 'GWB', 'GB', 'GNBC', 'GRBK', 'GDOT', 'GPRE', 'GBX', 'GCBC', 'GHL', 'GLRE', 'GEF', 'GRIF', 'GFF', 'GPI', 'GRPN', 'GRUB', 'GTT', 'GBNK', 'GES', 'GUID', 'GWRE', 'GPOR', 'HEES', 'HABT', 'HCKT', 'HAE', 'HAIN', 'HAL', 'HALL', 'HALO', 'HYH', 'GT', 'GPRO', 'GRC', 'GOV', 'GPX', 'GRA', 'GGG', 'GHM', 'GHC', 'GWW', 'GPT', 'LOPE', 'HLIT', 'HRS', 'HSC', 'HIG', 'HAS', 'HTS', 'HVT', 'HE', 'HA', 'HCOM', 'HWKN', 'HAYN', 'FUL', 'HCHC', 'HCA', 'HCI', 'HCP', 'HDS', 'HW', 'HR', 'HCSG', 'HTA', 'HQY', 'HLS', 'HSTM', 'HWAY', 'HTLD', 'HTLF', 'HTWR', 'HL', 'HEI.A', 'HEI', 'HSII', 'HELE', 'HLX', 'HP', 'HMPR', 'HBHC', 'HNH', 'HBI', 'HAFC', 'HASI', 'THG', 'HDNG', 'HOG', 'HAR', 'HTZ', 'HSKA', 'HES', 'HPE', 'HXL', 'HF', 'HIBB', 'ONE', 'HIW', 'HIL', 'HI', 'HRC', 'HTH', 'HLT', 'HIFS', 'HMSY', 'HNI', 'HFC', 'HOLX', 'HBCP', 'HOMB', 'HD', 'HMST', 'HTBI', 'HON', 'HOFT', 'HMN', 'HBNC', 'HZN', 'HZNP', 'HRL', 'HOS', 'HDP', 'HPT', 'HST', 'HMHC', 'HLI', 'HOV', 'HMTV', 'HNNA', 'JKHY', 'HLF', 'HTBK', 'HCCI', 'HFWA', 'HRTG', 'HEOP', 'MLHR', 'HRTX', 'HT', 'HSY', 'HUN', 'HURC', 'HURN', 'H', 'HY', 'IAC', 'IBKC', 'ICFI', 'ICON', 'ICUI', 'IDA', 'IDRA', 'IEX', 'IDXX', 'IDI', 'IDT', 'IESC', 'RXDX', 'IHS', 'IIVI', 'ITW', 'ILMN', 'IMAX', 'IMMR', 'IMDZ', 'IMGN', 'IMMU', 'IMH', 'IPXL', 'IMPV', 'IMPR', 'IMS', 'INCR', 'SAAS', 'INCY', 'HHC', 'HPQ', 'HRG', 'HSNI', 'HUBG', 'HUBB', 'HUBS', 'HPP', 'HUM', 'HBAN', 'HII', 'IMKTA', 'IM', 'INGR', 'INWK', 'IPHS', 'IOSP', 'INVA', 'INGN', 'ITEK', 'INOV', 'INO', 'IPHI', 'NSIT', 'INSM', 'NSP', 'IBP', 'IIIN', 'INST', 'PODD', 'INSY', 'IART', 'IDTI', 'INTC', 'IQNT', 'NTLA', 'I', 'IPAR', 'IBKR', 'ININ', 'ICPT', 'ICE', 'IDCC', 'TILE', 'IBOC', 'IGT', 'IP', 'ISCA', 'ICD', 'IHC', 'IRT', 'IBCP', 'INDB', 'IBTX', 'INFN', 'INFI', 'IPCC', 'BLOX', 'III', 'HIFR', 'IR', 'NGVT', 'ISRG', 'IVC', 'INVN', 'SNAK', 'IVZ', 'IVR', 'ITG', 'ISBC', 'IRET', 'ITIC', 'NVTA', 'NVIV', 'IONS', 'IPGP', 'IRMD', 'IRIX', 'IRDM', 'IRBT', 'IRM', 'IRWD', 'ISLE', 'ISRL', 'STAR', 'ITC', 'ITRI', 'ITT', 'XXIA', 'IXYS', 'JJSF', 'JAX', 'JCOM', 'JBL', 'JACK', 'JEC', 'IPG', 'XENT', 'ISIL', 'IILG', 'IBM', 'INTL', 'IFF', 'ITCI', 'IL', 'SNOW', 'XON', 'INTU', 'JNPR', 'JUNO', 'LRN', 'KTWO', 'KAI', 'KALU', 'KAMN', 'KSU', 'KS', 'KAR', 'KPTI', 'KATE', 'KBH', 'KBR', 'KCG', 'KRNY', 'K', 'KELYA', 'KMPR', 'KMT', 'KW', 'KERX', 'KEY', 'KEYS', 'KEYW', 'KFRC', 'KRC', 'KE', 'KBAL', 'KMB', 'KIM', 'KMI', 'KND', 'KEX', 'KIRK', 'KITE', 'JAKK', 'JMBA', 'JRVR', 'JNS', 'JBHT', 'JBLU', 'JIVE', 'JBT', 'JNJ', 'JCI', 'JOUT', 'JONE', 'JLL', 'JOY', 'JPM', 'KRA', 'KTOS', 'KKD', 'KR', 'KRO', 'KVHI', 'LB', 'LLL', 'LJPC', 'LQ', 'LZB', 'LH', 'LADR', 'LTS', 'LSBG', 'LBAI', 'LKFN', 'LRCX', 'LAMR', 'LANC', 'LDR', 'LNDC', 'LE', 'LSTR', 'LCI', 'LPI', 'LVS', 'LHO', 'LSCC', 'LAWS', 'LAYN', 'LAZ', 'LCNB', 'KRG', 'KLAC', 'KLXI', 'KMG', 'KNX', 'KNL', 'KN', 'KSS', 'KONA', 'KOPN', 'KOP', 'KFY', 'KOS', 'LXK', 'LGIH', 'LHCG', 'LBY', 'BATRA', 'BATRK', 'LBRDA', 'LBRDK', 'QVCA', 'LMCA', 'LMCK', 'LPT', 'LSXMA', 'LSXMK', 'TAX', 'LTRPA', 'LVNTA', 'LOCK', 'LPNT', 'LCUT', 'LFVN', 'LWAY', 'LGND', 'LLY', 'LLNW', 'LMNR', 'LECO', 'LNC', 'LIND', 'LNN', 'LLTC', 'LNKD', 'LBIO', 'LIOX', 'LGF', 'LDRH', 'LEA', 'LTXB', 'LM', 'LEG', 'LDOS', 'LMAT', 'LC', 'TREE', 'LEN', 'LEN.B', 'LII', 'LUK', 'LVLT', 'LXRX', 'LXP', 'LOXO', 'LPLA', 'LXU', 'LYTS', 'LTC', 'LUB', 'LULU', 'LL', 'LITE', 'LMNX', 'LMOS', 'LDL', 'LYB', 'MTB', 'MHO', 'MCBC', 'MAC', 'CLI', 'MTSI', 'MIC', 'MGNX', 'M', 'SHOO', 'MSG', 'MGLN', 'MHLD', 'MSFG', 'MJCO', 'MBUU', 'MNK', 'MANH', 'MTW', 'LPCN', 'LQDT', 'LAD', 'LFUS', 'LYV', 'LOB', 'LPSN', 'LKQ', 'LMT', 'L', 'LOGM', 'LORL', 'LPX', 'LOW', 'VAC', 'MMC', 'MRTN', 'MLM', 'MRVL', 'MAS', 'MASI', 'DOOR', 'MTZ', 'MA', 'MTDR', 'MTCH', 'MTRN', 'MTRX', 'MATX', 'MAT', 'MATW', 'MFRM', 'MXIM', 'MMS', 'MXL', 'MXWL', 'MBFI', 'MBI', 'MBTF', 'MCFT', 'MKC', 'MDR', 'MCD', 'MGRC', 'MCK', 'MDCA', 'MDC', 'MDU', 'MFS', 'MN', 'MNKD', 'MAN', 'MANT', 'MRO', 'MPC', 'MCHX', 'MMI', 'MCS', 'MPX', 'HZO', 'MKL', 'MKTX', 'MKTO', 'MRLN', 'MAR', 'MBWM', 'MBVT', 'MRK', 'MCY', 'MRCY', 'MDP', 'EBSB', 'VIVO', 'MMSI', 'MTH', 'MTOR', 'MACK', 'MLAB', 'CASH', 'MPG', 'MEI', 'MET', 'MTD', 'MFA', 'MGEE', 'MTG', 'MGM', 'MGPI', 'KORS', 'MIK', 'MCHP', 'MU', 'MSCC', 'MSFT', 'MSTR', 'MAA', 'MJN', 'MDGN', 'MEG', 'MPW', 'MDCO', 'MNOV', 'MDSO', 'MED', 'MDVN', 'MDLY', 'MD', 'MDT', 'MEET', 'MRD', 'MENT', 'MOD', 'MC', 'MHK', 'MOH', 'TAP', 'MNTA', 'MCRI', 'MDLZ', 'MGI', 'MNR', 'MORE', 'MPWR', 'TYPE', 'MNRO', 'MON', 'MNST', 'MWW', 'MCO', 'MOG.A', 'MS', 'MORN', 'MOS', 'MPAA', 'MSI', 'MOV', 'MRC', 'MSA', 'MSM', 'MSCI', 'MSGN', 'MTSC', 'MLI', 'MWA', 'MBRG', 'MIDD', 'MSEX', 'MSBI', 'MOFG', 'MCRN', 'MLR', 'MDXG', 'MB', 'MTX', 'NERV', 'MRTX', 'MG', 'MITK', 'MKSI', 'MINI', 'MOBL', 'MODN', 'NDAQ', 'NTRA', 'NATH', 'NBHC', 'NKSH', 'FIZZ', 'NCMI', 'NCOM', 'NFG', 'NGHC', 'NHI', 'NHC', 'NATI', 'NATL', 'NOV', 'NPK', 'NRCIA', 'NNN', 'NSA', 'NWLI', 'NSM', 'NGS', 'NGVC', 'NHTC', 'NATR', 'BABY', 'NLS', 'NAVI', 'NCI', 'NAVG', 'LABL', 'MPSX', 'MFLX', 'MUR', 'MUSA', 'MFSF', 'MYE', 'MYL', 'MYOK', 'MYRG', 'MYGN', 'NBR', 'NC', 'NANO', 'NSTG', 'NK', 'NBIX', 'NSR', 'NVRO', 'NWHM', 'NJR', 'NEWM', 'NEWR', 'NRZ', 'SNR', 'NYCB', 'NYMT', 'NYRT', 'NYT', 'NWL', 'NFX', 'NLNK', 'NEU', 'NEM', 'NR', 'NWSA', 'NWS', 'NEWS', 'NXRT', 'NXST', 'NEE', 'EGOV', 'NCBS', 'NLSN', 'NIHD', 'NKE', 'NMBL', 'NI', 'NNA', 'NAV', 'NBTB', 'NCS', 'NCIT', 'NCR', 'NP', 'NEFF', 'NKTR', 'NNI', 'NEOG', 'NEO', 'NPTN', 'NEOS', 'NTAP', 'NFLX', 'NTGR', 'NTCT', 'N', 'NSAM', 'NRE', 'NRF', 'NWBI', 'NWN', 'NWE', 'NCLH', 'NOVT', 'NVAX', 'NVCR', 'DNOW', 'NRG', 'NYLD.A', 'NYLD', 'NUS', 'NUAN', 'NUE', 'NMRX', 'NUTR', 'NTRI', 'NUVA', 'NVEE', 'NVEC', 'NVDA', 'NVR', 'NXTM', 'ORLY', 'OAS', 'OXY', 'NL', 'NMIH', 'NNBR', 'HLTH', 'NE', 'NBL', 'NDLS', 'NAT', 'NDSN', 'JWN', 'NSC', 'NTK', 'NOG', 'NTRS', 'NFBK', 'NRIM', 'NOC', 'OHI', 'OME', 'OMER', 'OMCL', 'OMC', 'OMN', 'ASGN', 'ONDK', 'ON', 'OMED', 'OGS', 'OLP', 'OB', 'OMF', 'OKE', 'OPHT', 'OPK', 'OPY', 'OPB', 'ORCL', 'OSUR', 'ORBC', 'OA', 'ORC', 'TIS', 'ONVO', 'ORN', 'ORIT', 'ORA', 'ORRF', 'OFIX', 'OII', 'OCFC', 'OCLR', 'OCUL', 'OCN', 'ODP', 'OFG', 'OGE', 'ODC', 'OIS', 'ODFL', 'OLBK', 'ONB', 'ORI', 'OSBC', 'OLN', 'OLLI', 'ZEUS', 'OMAM', 'OFLX', 'PCAR', 'PACB', 'PCBK', 'PEIX', 'PMBC', 'PPBI', 'PCRX', 'PKG', 'PACW', 'PANW', 'P', 'PNRA', 'PHX', 'PZZA', 'PARR', 'PGRE', 'PRTK', 'PRXL', 'PCYG', 'PKE', 'PRK', 'PKOH', 'PSTB', 'PKD', 'PH', 'PKY', 'PE', 'PRTY', 'OSK', 'OSIS', 'OSIR', 'OTIC', 'OTTR', 'OUTR', 'OUT', 'OVAS', 'OSG', 'OSTK', 'OMI', 'OC', 'OI', 'ORM', 'OXFD', 'OXM', 'PTSI', 'PCCC', 'PFSI', 'PMT', 'PAG', 'PNR', 'PEN', 'PEBO', 'PFIS', 'PBCT', 'PUB', 'PEP', 'PRFT', 'PFGC', 'PSG', 'PKI', 'PRGO', 'PETS', 'PFNX', 'PFE', 'PFSW', 'PCG', 'PGTI', 'PIP', 'PMC', 'PHH', 'PHIIK', 'PAHC', 'PM', 'PSX', 'PLAB', 'DOC', 'PATK', 'PN', 'PEGI', 'PDCO', 'PTEN', 'PAYX', 'PAYC', 'PCTY', 'PYPL', 'PBF', 'PDCE', 'PDFS', 'PDLI', 'PDVW', 'PGC', 'PEB', 'PEGA', 'PENN', 'JCP', 'PWOD', 'PEI', 'PLUG', 'PGEM', 'PNC', 'PNM', 'PII', 'PLCM', 'POL', 'POOL', 'PLKI', 'BPOP', 'POR', 'PTLA', 'POST', 'PPS', 'PBPB', 'PCH', 'POWL', 'POWI', 'PSIX', 'PPG', 'PPL', 'PRAA', 'PRAH', 'PX', 'APTS', 'PFBC', 'PLPC', 'PICO', 'PNY', 'PDM', 'PIR', 'PPC', 'PNK', 'PNFP', 'PF', 'PNW', 'PES', 'PXD', 'PJC', 'PBI', 'PJT', 'PLNT', 'PLPM', 'PLT', 'PAH', 'PLXS', 'PRLB', 'PRSC', 'PVBC', 'PFS', 'PROV', 'PRU', 'PSB', 'PTC', 'PTCT', 'PSA', 'PEG', 'PHM', 'PBYI', 'PSTG', 'PVH', 'PZN', 'QTWO', 'QADA', 'QCRH', 'QEP', 'QGEN', 'QLIK', 'QLGC', 'QRVO', 'QTS', 'QUAD', 'KWR', 'QCOM', 'QSII', 'PFBI', 'PINC', 'PGND', 'PBH', 'TROW', 'PSMT', 'PRI', 'PRMW', 'PRIM', 'PFG', 'PVTB', 'PRA', 'PG', 'PGNX', 'PRGS', 'PGR', 'PLD', 'PFPT', 'PRO', 'PB', 'PTI', 'PRTA', 'RPT', 'RRC', 'RPD', 'RPTP', 'RAVN', 'RJF', 'RYAM', 'RYN', 'RTN', 'ROLL', 'RMAX', 'RDI', 'RELY', 'RNWK', 'RLGY', 'RP', 'O', 'RETA', 'RHT', 'RLH', 'RRGB', 'RRR', 'RWT', 'RBC', 'RGC', 'REG', 'QLYS', 'NX', 'PWR', 'DGX', 'STR', 'QDEL', 'QNST', 'Q', 'QHC', 'QUOT', 'RAX', 'RDN', 'RLGT', 'ROIAK', 'RSYS', 'RDUS', 'RDNT', 'RAS', 'RL', 'RMBS', 'ROIC', 'RPAI', 'SALE', 'RTRX', 'RVNC', 'REV', 'REX', 'REXR', 'RXN', 'RAI', 'RICE', 'RIGL', 'NAME', 'RNET', 'REI', 'RNG', 'RAD', 'RLI', 'RLJ', 'RMR', 'RRTS', 'RHI', 'ROK', 'COL', 'RMTI', 'RSTI', 'ROG', 'ROL', 'REGN', 'RGNX', 'RM', 'RF', 'RGS', 'RGLS', 'RGA', 'REIS', 'RS', 'RLYP', 'RNR', 'RNST', 'REGI', 'RCII', 'RGEN', 'RBCAA', 'FRBK', 'RSG', 'RMD', 'REXI', 'RSO', 'RECN', 'RH', 'RHP', 'STBA', 'SPGI', 'SBRA', 'SABR', 'SFE', 'SAFT', 'SGA', 'SAGE', 'SGNT', 'SAIA', 'SALM', 'CRM', 'SBH', 'SN', 'SAFM', 'SASR', 'JBSS', 'SGMO', 'SANM', 'SC', 'SPNS', 'SRPT', 'BFS', 'SBAC', 'ROP', 'RST', 'ROST', 'RSE', 'ROVI', 'RDC', 'RCL', 'RGLD', 'RES', 'RPM', 'RPXC', 'RSPP', 'RTIX', 'RUBI', 'RT', 'RTEC', 'RUSHA', 'RUTH', 'R', 'RYI', 'SHOS', 'SGEN', 'SEAS', 'EYES', 'SCWX', 'SEIC', 'SCSS', 'SIR', 'SEM', 'SIGI', 'SEMG', 'SRE', 'SMTC', 'SENEA', 'SNH', 'SENS', 'SXT', 'SQBG', 'MCRB', 'SRG', 'SCI', 'SERV', 'NOW', 'SREV', 'SFBS', 'SHAK', 'SHEN', 'SHW', 'SCG', 'SCSC', 'HSIC', 'SLB', 'SCHN', 'SCHL', 'SHLM', 'SCHW', 'SWM', 'SCLN', 'SAIC', 'SGMS', 'SQI', 'SALT', 'STNG', 'SMG', 'SSP', 'SNI', 'SEB', 'SBCF', 'CKH', 'SDRL', 'SEE', 'SHLD', 'SBGI', 'SIRI', 'SITE', 'SIX', 'SJW', 'SKX', 'SKYW', 'SWKS', 'SLG', 'SLM', 'SM', 'SFS', 'SWHC', 'AOS', 'SJM', 'SNA', 'LNCE', 'SCTY', 'SAH', 'SONC', 'SON', 'SONS', 'SRNE', 'BID', 'SFL', 'SCVL', 'SHBI', 'SHOR', 'SFLY', 'SSTK', 'SIFI', 'BSRR', 'SIGM', 'SBNY', 'SIG', 'SLGN', 'SILC', 'SGI', 'SLAB', 'SBY', 'SSNI', 'SAMG', 'SFNC', 'SPG', 'SSD', 'SPR', 'SAVE', 'SRC', 'SPLK', 'SPOK', 'SPWH', 'S', 'SFM', 'SPSC', 'SPXC', 'FLOW', 'SQ', 'SSNC', 'JOE', 'STJ', 'STAA', 'STAG', 'SSI', 'STMP', 'SMP', 'SXI', 'SWK', 'SPLS', 'SBUX', 'HOT', 'STWD', 'STRZA', 'SJI', 'SSB', 'SO', 'SCCO', 'SFST', 'SMBC', 'SONA', 'SBSI', 'LUV', 'OKSB', 'SWX', 'SWN', 'SSS', 'SP', 'SPKE', 'ONCE', 'SPAR', 'SPTN', 'SPA', 'SE', 'SPNC', 'SPB', 'SPPI', 'TRK', 'SR', 'STRA', 'SYK', 'RGR', 'SCMP', 'SCNB', 'SMMF', 'INN', 'SUM', 'SNBC', 'SUI', 'SNHY', 'SXC', 'SPWR', 'RUN', 'SHO', 'STI', 'SMCI', 'SPN', 'SUP', 'SGC', 'SUPN', 'SVU', 'STS', 'STFC', 'STBZ', 'SNC', 'STT', 'STLD', 'SCS', 'SMRT', 'STML', 'SCL', 'SRCL', 'STL', 'STC', 'SF', 'SWC', 'SYBT', 'SGBK', 'SRI', 'STOR', 'STRP', 'SSYS', 'STRT', 'STRS', 'TLRD', 'TTWO', 'TAL', 'TLN', 'TLMR', 'TNDM', 'SKT', 'TNGO', 'TRGP', 'TGT', 'TASR', 'TCO', 'TMHC', 'TCB', 'AMTD', 'TMH', 'TISI', 'TECD', 'TTGT', 'TE', 'TK', 'TNK', 'TGNA', 'TRC', 'TDOC', 'TDY', 'SGRY', 'SCAI', 'SRDX', 'SIVB', 'SWFT', 'SYKE', 'SYMC', 'SSRG', 'SYNA', 'SNCR', 'SYF', 'SNDX', 'SGYP', 'SYRG', 'SNX', 'SNPS', 'SNV', 'SYNT', 'SYN', 'SYUT', 'SYY', 'SYX', 'TTOO', 'DATA', 'TAHO', 'TTI', 'TTPH', 'TCBI', 'TXN', 'TXRH', 'TGH', 'TXT', 'TFSL', 'TGTX', 'CC', 'TCS', 'KHC', 'PCLN', 'WEN', 'TXMD', 'TBPH', 'TMO', 'THR', 'TPRE', 'TRI', 'THO', 'TDW', 'TIER', 'TFX', 'TNAV', 'TDS', 'TTEC', 'TLGT', 'TPX', 'THC', 'TNC', 'TEN', 'TDC', 'TER', 'TEX', 'GLBL', 'TERP', 'TVIA', 'TRNO', 'TBNK', 'TSRO', 'TESO', 'TSLA', 'TSO', 'TSRA', 'TTEK', 'TDG', 'TRXC', 'RIG', 'TRU', 'TRV', 'TVPT', 'TRR', 'TREC', 'TG', 'THS', 'TRVN', 'TREX', 'TPH', 'TRCO', 'TCBK', 'TRS', 'TRMB', 'TNET', 'TRN', 'TPHS', 'TSE', 'TRIP', 'GTS', 'TSC', 'TBK', 'TIF', 'TTS', 'TLYS', 'TIME', 'TWX', 'TKR', 'TMST', 'TIPT', 'TWI', 'TITN', 'TTNP', 'TIVO', 'TJX', 'TMUS', 'TBRA', 'TKAI', 'TOL', 'TMP', 'TR', 'BLD', 'TMK', 'TTC', 'TSS', 'TOWR', 'TOWN', 'TSQ', 'TSCO', 'SLCA', 'UBNT', 'UCP', 'UDR', 'UFPT', 'UGI', 'ULTA', 'ULTI', 'UCTT', 'RARE', 'UTEK', 'UMBF', 'UMH', 'UMPQ', 'UA', 'UA.C', 'UFI', 'UNF', 'UBSH', 'UNB', 'UNP', 'TGI', 'TRNC', 'TROX', 'TROV', 'TBI', 'TRUE', 'TRUP', 'TRST', 'TRMK', 'TTMI', 'TUBE', 'TUES', 'TUMI', 'TUP', 'TPB', 'TPC', 'TWTR', 'TWO', 'TYC', 'TYL', 'TSN', 'USCR', 'USG', 'USPH', 'UHS', 'UVE', 'ULH', 'UVSP', 'UNM', 'UE', 'URBN', 'UBA', 'USB', 'ECOL', 'USFD', 'USAT', 'USAK', 'USNA', 'USMD', 'UTMD', 'VFC', 'MTN', 'VLO', 'VHI', 'VR', 'VLY', 'VMI', 'VAL', 'UFAB', 'UIS', 'UNT', 'UBSI', 'UCFC', 'UCBI', 'UAL', 'UBNK', 'UFCS', 'UIHC', 'UNFI', 'UNTD', 'UPS', 'URI', 'USM', 'USLM', 'X', 'UTX', 'UTHR', 'UNH', 'UTL', 'UNVR', 'UAM', 'UVV', 'OLED', 'UEIC', 'UFPI', 'UHT', 'VRTX', 'VIA', 'VIAB', 'VVI', 'VSAT', 'VIAV', 'VICR', 'VRAY', 'VLGEA', 'VNCE', 'VA', 'VHC', 'VIRT', 'VRTS', 'VRTU', 'V', 'VSH', 'VPG', 'VSTO', 'VC', 'VALU', 'VNDA', 'VNTV', 'VAR', 'VRNS', 'VDSI', 'VASC', 'WOOF', 'VGR', 'VVC', 'VEC', 'VECO', 'VEEV', 'VTR', 'VRA', 'VCYT', 'VER', 'PAY', 'VRNT', 'VRSN', 'VRSK', 'VBTX', 'VRTV', 'VZ', 'VSAR', 'WM', 'WAT', 'WSBF', 'WSO', 'WTS', 'WVE', 'W', 'WCIC', 'WDFC', 'WFT', 'WEB', 'WBMD', 'WBS', 'WEC', 'WTW', 'WRI', 'WMK', 'WCG', 'WFC', 'HCN', 'WERN', 'WSBC', 'WAIR', 'VTAE', 'VTL', 'VSI', 'VSLR', 'VMW', 'VCRA', 'VG', 'VNO', 'VOYA', 'VYGR', 'VSEC', 'VTVT', 'VMC', 'VWR', 'WPC', 'WTI', 'WNC', 'WBC', 'WAB', 'WDR', 'WAGE', 'WMT', 'WBA', 'WD', 'WAC', 'WAFD', 'WRE', 'WASH', 'WFBI', 'WFM', 'JW.A', 'WG', 'WLH', 'CWEI', 'WMB', 'WSM', 'WLFC', 'WIBC', 'WIN', 'WING', 'WINA', 'WGO', 'WINS', 'WTFC', 'WETF', 'WMIH', 'WWW', 'WWD', 'WCC', 'WTBA', 'WSTC', 'WMAR', 'WST', 'WABC', 'WR', 'WAL', 'WMC', 'WDC', 'WNR', 'WU', 'WFD', 'WLK', 'WLB', 'WRK', 'WHG', 'WEX', 'WEYS', 'WY', 'WGL', 'WHR', 'WTM', 'WSR', 'WWAV', 'WLL', 'YORW', 'YCB', 'YRCW', 'YUM', 'ZFGN', 'ZAGG', 'ZAYO', 'ZBRA', 'ZLTQ', 'ZEN', 'ZG', 'Z', 'ZBH', 'ZION', 'ZIOP', 'ZIXI', 'ZOES', 'ZTS', 'ZGNX', 'ZUMZ', 'ZNGA', 'WDAY', 'WKHS', 'WK', 'WRLD', 'INT', 'WWE', 'WOR', 'WPG', 'WPX', 'WMGI', 'WSFS', 'WYN', 'WYNN', 'XTLY', 'XBIT', 'XEL', 'XCRA', 'XNCR', 'XHR', 'XNPT', 'XRX', 'XLNX', 'XL', 'XOXO', 'XPO', 'MESG', 'XYL', 'YDKN', 'YHOO', 'YELP']

ofInterest = []

try:
	for eachStock in Russell3000:
		ticker = Share(eachStock)
		name = ticker.get_name()
		pbr = ticker.get_price_book()
		PEG5 = ticker.get_price_earnings_growth_ratio()
		PE12 = ticker.get_price_earnings_ratio()
		#print eachStock,'P/B: ',type(pbr)

		if pbr == None:
			pass
		elif float(pbr) < 2:
			if 0 < float(PEG5) < 2:
				if PE12 == None:
					PE12 = ''
				elif float(PE12) < 15:
					
					ofInterest.append(eachStock)
					
					print 'Name: ',name
					print 'Ticker: ',eachStock
					print 'P/B: ',pbr
Exemplo n.º 33
0
from yahoo_finance import Share
#yahoo = Share('YHOO')
#yahoo = Share('SPXC')
yahoo = Share('TFM')
#yahoo = Share('INDU')
#INDEXSP
#yahoo = Share('NDX')
print yahoo
print yahoo.get_open()
#'36.60'
print yahoo.get_price()
print yahoo.get_price_earnings_ratio()
print 'get_dividend_share: ',yahoo.get_dividend_share()
print 'get_dividend_yield: ',yahoo.get_dividend_yield()
print 'get_earnings_share: ',yahoo.get_earnings_share()
print 'get_price_earnings_ratio: ',yahoo.get_price_earnings_ratio()
print 'get_price_earnings_growth_ratio: ',yahoo.get_price_earnings_growth_ratio()
print 'get_year_high: ',yahoo.get_year_high()
print 'get_year_low: ',yahoo.get_year_low()
print 'get_days_high: ',yahoo.get_days_high()
print 'get_days_low: ',yahoo.get_days_low()
print 'get_ebitda: ',yahoo.get_ebitda()
print 'get_book_value: ',yahoo.get_book_value()
#'36.84'
#print yahoo.get_trade_datetime()
#'2014-02-05 20:50:00 UTC+0000'
#get_avg_daily_volume()
Exemplo n.º 34
0
            continue
        stock = Share(ticker)
        stock.refresh()
        change = (float(stock.get_price()) - float(
            stock.get_prev_close())) / float(stock.get_prev_close())
        change = round(change * 100.0, 2)
        if change > 0.0:
            change = '+' + str(change)
        else:
            change = str(change)

        line = ticker.ljust(7)
        line += stock.get_price().ljust(9)+ change.ljust(8)+ stock.get_volume().ljust(11) + \
            str(round(float(stock.get_volume())/float(stock.get_avg_daily_volume())*100.0)).ljust(8) +\
            stock.get_open().ljust(10)+ \
            stock.get_days_low().ljust(10)+ \
            stock.get_days_high().ljust(10)+ \
            stock.get_year_low().ljust(10)+ \
            stock.get_year_high().ljust(10)
        line = line + str(stock.get_market_cap()).ljust(11) + \
            str(stock.get_price_earnings_ratio()).ljust(8)+\
            stock.get_50day_moving_avg().ljust(10) +\
            stock.get_200day_moving_avg().ljust(10)
        print(line)
    except Exception as e:
        print("Exception error:", str(e))
        traceback.print_exc()
    i += 1

#you get get a spy.txt and then filter everything by yourself
Exemplo n.º 35
0
    def on_message(self, message):
        print_logger.debug("Received message: %s" % (message))

        if "ValidateTicker" in message:
            message = message.split(":")

            if len(message) != 2:
                print_logger.error("Malformed ticker validation request")
                self.write_message("ValidationFailed:Malformed")
                return

            ticker = message[1]

            if validate_ticker(ticker):
                self.write_message("ValidationSucceeded:%s" % ticker)
                print_logger.debug("Ticker was valid")
            else:
                self.write_message("ValidationFailed:%s" % ticker)
                print_logger.debug("Ticker was bad")

            return

        elif "GetCompanyName" in message:
            print_logger.debug("You got here")
            message = message.split(":")
            company_ticker = message[1]
            company_name = get_company_title(company_ticker)

            self.write_message("CompanyName:%s" % company_name)

        elif "GetStockData" in message:
            message = message.split(":")

            if len(message) != 2:
                print_logger.error("Malformed Message from Client")
                return

            ticker = message[1]

            # Get ticker information
            share_data = Share(ticker)
            price = share_data.get_price()
            percent_change = share_data.get_change()
            previous_close = share_data.get_prev_close()
            open_price = share_data.get_open()
            volume = share_data.get_volume()
            pe_ratio = share_data.get_price_earnings_ratio()
            peg_ratio = share_data.get_price_earnings_growth_ratio()
            market_cap = share_data.get_market_cap()
            book_value = share_data.get_price_book()
            average_volume = share_data.get_avg_daily_volume()
            dividend_share = share_data.get_dividend_share()
            dividend_yield = share_data.get_dividend_yield()
            earnings_per_share = share_data.get_earnings_share()
            ebitda = share_data.get_ebitda()
            fifty_day_ma = share_data.get_50day_moving_avg()
            days_high = share_data.get_days_high()
            days_low = share_data.get_days_low()
            year_high = share_data.get_year_high()
            year_low = share_data.get_year_low()
            two_hundred_day_ma = share_data.get_200day_moving_avg()

            # Build a string to send to the server containing the stock data
            share_string = "price:" + str(price) + "|"\
                         + "percentChange:" + str(percent_change) + "|"\
                         + "previousClose:" + str(previous_close) + "|"\
                         + "openPrice:" + str(open_price) + "|"\
                         + "volume:" + str(volume) + "|"\
                         + "peRatio:" + str(pe_ratio) + "|"\
                         + "pegRatio:" + str(peg_ratio) + "|"\
                         + "marketCap:" + str(market_cap) + "|"\
                         + "bookValue:" + str(book_value) + "|"\
                         + "averageVolume:" + str(average_volume) + "|"\
                         + "dividendShare:" + str(dividend_share) + "|"\
                         + "dividendYield:" + str(dividend_yield) + "|"\
                         + "earningsPerShare:" + str(earnings_per_share) + "|"\
                         + "ebitda:" + str(ebitda) + "|"\
                         + "50DayMa:" + str(fifty_day_ma) + "|"\
                         + "daysHigh:" + str(days_high) + "|"\
                         + "daysLow:" + str(days_low) + "|"\
                         + "yearHigh:" + str(year_high) + "|"\
                         + "yearLow:" + str(year_low) + "|"\
                         + "200DayMa:" + str(two_hundred_day_ma) + "|"

            self.write_message("StockData;%s" % (share_string))
            print_logger.debug("Sending Message: StockData;%s" % (share_string))

        elif "GetCompanyDesc" in message:
            message = message.split(":")

            if len(message) != 2:
                print_logger.error("Malformed Message from Client")
                return

            ticker = message[1]

            description = update_description_oneoff(ticker)

            self.write_message("CompanyDescription:%s" % str(description))

        elif "GetCompanyDividend" in message and "Record" not in message:
            message = message.split(":")

            if len(message) != 2:
                print_logger.error("Malformed Message from Client")
                return

            ticker = message[1]

            # Grab the dividend data from dividata.com
            dividend_url = "https://dividata.com/stock/%s/dividend" % ticker

            # This should potentially be a
            dividend_data = requests.get(dividend_url)
            dividend_soup = BeautifulSoup(dividend_data.text, 'html5lib')

            if len(dividend_soup.find_all("table")) > 0:
                dividend_soup = dividend_soup.find_all("table")[0]
            else:
                dividend_soup = "<h3>No dividend history found.</h3>"

            # Send this div up to the server
            self.write_message("DividendHistoryData:" + str(dividend_soup))

        elif "GetCompanyDividendRecord" in message:
            message = message.split(":")

            if len(message) != 2:
                print_logger.error("Malformed Message from Client")
                return

            ticker = message[1]

            # Get the dividend record html for the table and send it up
            #dividend_record = strip_dividends(ticker, req_proxy)

            #print_logger.debug("Writing message: " + str(dividend_record))
            #self.write_message("DividendRecord:" + str(dividend_record))

        elif "GetBollinger" in message:
            message = message.split(":")

            if len(message) != 2:
                print_logger.error("Malformed Message from Client")
                return

            ticker = message[1]

            # Switch into the tmp directory
            old_dir = os.getcwd()
            os.chdir(TEMP_DIR)

            # Update the historical data for the ticker symbol
            YAHOO_FINANCE_HISTORICAL_OBJECT.read_ticker_historical(ticker)

            bands = BollingerBandStrategy(data_storage_dir="%s/historical_stock_data" % TEMP_DIR\
                    , ticker_file="%s/stock_list.txt" % TEMP_DIR, filtered_ticker_file=\
                    "%s/filtered_stock_list.txt" % TEMP_DIR)

            # Save the graph so that we can show it on the website
            bands.save_stock_chart(ticker, "%s" % TEMP_DIR)

            # Also let the server know that we found an answer
            result = bands.test_ticker(ticker)

            if result is not None:
                print_logger.debug("BB:GoodCandidate")
                self.write_message("BB:GoodCandidate")
            else:
                print_logger.debug("BB:BadCandidate")
                self.write_message("BB:BadCandidate")
        elif "CheckRobinhoodLogin" in message:
            print "HELLO WORLD!!! HELLO WORLD!!! HELLO WORLD!!!%s" % ROBINHOOD_INSTANCE
            if ROBINHOOD_INSTANCE.is_logged_in() is True:
                self.write_message("RobinhoodLoggedIn:%s" % ROBINHOOD_INSTANCE.username)
            else:
                self.write_message("RobinhoodNotLoggedIn")
                
        elif "GetPosition" in message:

            ticker = message.replace("GetPosition:", "")

            account_positions = ROBINHOOD_INSTANCE.get_position_history(active=True)
            user_owns_stock = False
            position_string = ""
            for position in account_positions:
                
                # Get data about the position, including current price.  
                position_data = requests.get(position["instrument"])
                position_data = json.loads(position_data._content)
                position.update(position_data)

                if position["symbol"] != ticker:
                    continue

                quote_data = requests.get(position["quote"]);
                quote_data = json.loads(quote_data._content)
                position.update(quote_data)
                
                position_string = json.dumps(position)
                user_owns_stock = True
                
            if user_owns_stock is True:
                self.write_message("Position:%s" % position_string)
            else:
                self.write_message("Position:None")
Exemplo n.º 36
0
def view_stock(request, ticker):
    if request.user.__class__.__name__ is "CustomUser":
        c_user = get_object_or_404(CustomUser, pk=request.user.pk)
        account = Account.objects.get(user=c_user)
    else:
        account = False
    stock = get_object_or_404(Stock, ticker=ticker)

    companyName = stock.ticker
    companyName = companyName.upper()
    stock = Stock.objects.get(ticker=companyName)
    namer = "'" + companyName + "'"
    ystock = Share(companyName)
    the_price = ystock.get_price()

    regex = 'Business Summary</span></th><th align="right">&nbsp;</th></tr></table><p>(.+?)</p>'
    pattern = re.compile(regex)

    root_url = urllib.urlopen("http://finance.yahoo.com/q/pr?s=" + companyName + "+Profile")
    htmltext = root_url.read()

    decoded_str = str(re.findall(pattern, htmltext)).decode("utf8")
    encoded_str = decoded_str.encode("ascii", "ignore")
    stock.description = encoded_str
    stock.description = stock.description[:-2]
    stock.description = stock.description[2:]
    stock.book_value = ystockquote.get_book_value(companyName)
    stock.change = ystockquote.get_change(companyName)
    # stock.dividend_per_share = ystockquote.get_dividend_per_share(companyName)
    # stock.dividend_yield = ystockquote.get_dividend_yield(companyName)
    stock.ebitda = ystockquote.get_ebitda(companyName)
    stock.fifty_two_week_high = ystockquote.get_52_week_high(companyName)
    stock.fifty_two_week_low = ystockquote.get_52_week_low(companyName)
    stock.market_cap = ystockquote.get_market_cap(companyName)
    stock.short_ratio = ystockquote.get_short_ratio(companyName)
    stock.stock_exchange = ystockquote.get_stock_exchange(companyName)
    stock.volume = ystockquote.get_volume(companyName)
    stock.price = ystock.get_price()
    # yahoo_finance
    stock.average_daily_volume = ystock.get_avg_daily_volume()
    stock.earnings_per_share = ystock.get_price_earnings_ratio()
    stock.fifty_day_moving_avg = ystock.get_50day_moving_avg()
    stock.two_hundred_day_moving_avg = ystock.get_200day_moving_avg()
    stock.price_book_ratio = ystock.get_price_book()
    stock.last_sale = ystock.get_price()
    stock.price_earnings_growth_ratio = ystock.get_price_earnings_growth_ratio()
    stock.price_earnings_ratio = ystock.get_price_earnings_ratio()
    stock.price_sales_ratio = ystock.get_price_sales()
    stock.save()

    vl = []
    acl = []
    hl = []
    ll = []
    cl = []
    ol = []
    days_list = []
    d = 0
    seven_days_ago = datetime.datetime.now() + datetime.timedelta(-30)
    today = datetime.datetime.now()
    days = ystockquote.get_historical_prices("GOOGL", seven_days_ago.strftime("%Y-%m-%d"), today.strftime("%Y-%m-%d"))
    for day in days.keys():
        d += 1
        date_label = datetime.datetime.now() + datetime.timedelta(-d)
        days_list.append(date_label.strftime("%b-%d"))
        day_info = days.get(day)
        vol = int(day_info.get("Volume"))
        vl.append(vol)
        adjcl = float(day_info.get("Adj Close"))
        acl.append(adjcl)
        highs = float(day_info.get("High"))
        hl.append(highs)
        lows = float(day_info.get("Low"))
        ll.append(lows)
        closes = float(day_info.get("Close"))
        cl.append(closes)
        opens = float(day_info.get("Open"))
        ol.append(opens)

    volume = vl
    lows = ll
    opens = ol
    highs = hl
    averages = acl
    closes = cl
    days_l = days_list[::-1]
    context = RequestContext(
        request,
        dict(
            account=account,
            request=request,
            stock=stock,
            volume=volume,
            lows=lows,
            highs=highs,
            opens=opens,
            closes=closes,
            averages=averages,
            days_l=days_l,
        ),
    )
    return render_to_response("scrapyr_app/stock.html", context=context)
Exemplo n.º 37
0
        if len(ticker) == 0:
            continue
        stock = Share(ticker)
        stock.refresh()
        change = (float(stock.get_price()) - float(stock.get_prev_close()))/float(stock.get_prev_close()) 
        change = round(change *100.0, 2)
        if change > 0.0:
            change= '+' + str(change)
        else:    
            change =str(change)
          
        line = ticker.ljust(7) 
        line += stock.get_price().ljust(9)+ change.ljust(8)+ stock.get_volume().ljust(11) + \
            str(round(float(stock.get_volume())/float(stock.get_avg_daily_volume())*100.0)).ljust(8) +\
            stock.get_open().ljust(10)+ \
            stock.get_days_low().ljust(10)+ \
            stock.get_days_high().ljust(10)+ \
            stock.get_year_low().ljust(10)+ \
            stock.get_year_high().ljust(10)
        line = line + str(stock.get_market_cap()).ljust(11) + \
            str(stock.get_price_earnings_ratio()).ljust(8)+\
            stock.get_50day_moving_avg().ljust(10) +\
            stock.get_200day_moving_avg().ljust(10) 
        print(line)    
    except Exception as e:
        print("Exception error:", str(e))
        traceback.print_exc()
    i+=1

#you get get a spy.txt and then filter everything by yourself
def YaOrg(gather=[
    'debtToEquity', 'Trailing P/E', 'Price/Sales', 'priceToBook',
    'profitMargins', 'operatingMargins', 'returnOnAssets', 'returnOnEquity',
    'revenuePerShare', 'Market Cap', 'enterpriseValue', 'forwardPE',
    'pegRatio', 'enterpriseToRevenue', 'enterpriseToEbitda', 'totalRevenue',
    'grossProfit', 'ebitda', 'netIncomeToCommon', 'trailingEps',
    'earningsGrowth', 'revenueGrowth', 'totalCash', 'totalCashPerShare',
    'totalDebt', 'currentRatio', 'bookValue', 'operatingCashflow', 'beta',
    'heldPercentInsiders', 'heldPercentInstitutions', 'sharesShort',
    'shortRatio', 'shortPercentOfFloat', 'sharesShortPriorMonth',
    'currentPrice', 'sharesOutstanding'
]):

    df = pd.DataFrame(columns=[
        'Date', 'Unix', 'Ticker', 'Price', 'stock_p_change', 'SP500',
        'sp500_p_change', 'Difference', 'DE Ratio', 'Trailing P/E',
        'Price/Sales', 'Price/Book', 'Profit Margin', 'Operating Margin',
        'Return on Assets', 'Return on Equity', 'Revenue Per Share',
        'Market Cap', 'Enterprise Value', 'Forward P/E', 'PEG Ratio',
        'Enterprise Value/Revenue', 'Enterprise Value/EBITDA', 'Revenue',
        'Gross Profit', 'EBITDA', 'Net Income Avl to Common ', 'Diluted EPS',
        'Earnings Growth', 'Revenue Growth', 'Total Cash',
        'Total Cash Per Share', 'Total Debt', 'Current Ratio',
        'Book Value Per Share', 'Cash Flow', 'Beta', 'Held by Insiders',
        'Held by Institutions', 'Shares Short (as of', 'Short Ratio',
        'Short % of Float', 'Shares Short (prior ', 'Status'
    ])

    #time.sleep(2)

    file_list = os.listdir("YaParse")
    counter = 0
    passfiles = 0
    for each_file in file_list:
        ticker = each_file.split(".json")[0]
        full_file_path = "YaParse/" + each_file
        source = open(full_file_path, "r").read()
        data = Share(ticker.upper())
        counter += 1
        print("File No: " + str(counter))
        try:
            value_list = []

            for each_data in gather:
                try:
                    #value = float(source.split(gather + ':</td><td class="yfnc_tabledata1">')[1].split('</td>')[0])
                    regex = re.escape(
                        each_data) + r'.*?(\d{1,8}\.\d{1,8}M?B?K?|N/A)%?'
                    value = re.search(regex, source)
                    value = (value.group(1))

                    if "B" in value:
                        value = float(value.replace("B", '')) * 1000000000
                    elif "M" in value:
                        value = float(value.replace("M", '')) * 1000000

                    value_list.append(value)

                except Exception as e:
                    if not (each_data == 'Trailing P/E' or each_data
                            == 'Price/Sales' or each_data == 'Market Cap'):
                        print("Exception1: " + str(e))
                        print("Data: " + str(each_data) + " File: " +
                              str(each_file))
                    #time.sleep(5)
                    value = "N/A"

                    if each_data == 'Price/Sales':
                        value = data.get_price_sales()

                    if each_data == 'Market Cap':
                        value = data.get_market_cap()

                    if each_data == 'Trailing P/E':
                        value = data.get_price_earnings_ratio()

                    try:

                        if "B" in value:
                            value = float(value.replace("B", '')) * 1000000000
                        elif "M" in value:
                            value = float(value.replace("M", '')) * 1000000
                    except Exception as e:
                        value = "N/A"

                    value_list.append(value)

            #print(value_list)
            #time.sleep(5)

            if value_list.count("N/A") > 0:
                print("Passing on this file: " + str(each_file) +
                      " ::::Count of N/A: " + str(value_list.count("N/A")))
                passfiles += 1
                pass

            else:
                try:
                    df = df.append(
                        {
                            'Date': "N/A",
                            'Unix': "N/A",
                            'Ticker': ticker,
                            'Price': "N/A",
                            'stock_p_change': "N/A",
                            'SP500': "N/A",
                            'sp500_p_change': "N/A",
                            'Difference': "N/A",
                            'DE Ratio': value_list[0],
                            'Trailing P/E': value_list[1],
                            'Price/Sales': value_list[2],
                            'Price/Book': value_list[3],
                            'Profit Margin': value_list[4],
                            'Operating Margin': value_list[5],
                            'Return on Assets': value_list[6],
                            'Return on Equity': value_list[7],
                            'Revenue Per Share': value_list[8],
                            'Market Cap': value_list[9],
                            'Enterprise Value': value_list[10],
                            'Forward P/E': value_list[11],
                            'PEG Ratio': value_list[12],
                            'Enterprise Value/Revenue': value_list[13],
                            'Enterprise Value/EBITDA': value_list[14],
                            'Revenue': value_list[15],
                            'Gross Profit': value_list[16],
                            'EBITDA': value_list[17],
                            'Net Income Avl to Common ': value_list[18],
                            'Diluted EPS': value_list[19],
                            'Earnings Growth': value_list[20],
                            'Revenue Growth': value_list[21],
                            'Total Cash': value_list[22],
                            'Total Cash Per Share': value_list[23],
                            'Total Debt': value_list[24],
                            'Current Ratio': value_list[25],
                            'Book Value Per Share': value_list[26],
                            'Cash Flow': value_list[27],
                            'Beta': value_list[28],
                            'Held by Insiders': value_list[29],
                            'Held by Institutions': value_list[30],
                            'Shares Short (as of': value_list[31],
                            'Short Ratio': value_list[32],
                            'Short % of Float': value_list[33],
                            'Shares Short (prior ': value_list[34],
                            'Current Price': value_list[35],
                            'Shares Outstanding': value_list[36],
                            'Status': "N/A"
                        },
                        ignore_index=True)

                except Exception as e:
                    print("Problem in DF Append: " + str(e))
                    print("Data: " + str(each_data) + "File: " +
                          str(each_file))
                    print(
                        'Error on line {}'.format(
                            sys.exc_info()[-1].tb_lineno),
                        type(e).__name__, e)
                    time.sleep(5)

                #print("DataFrame: ", df)

        except Exception as e:
            print("Problem as a whole: " + str(e))
            print('Error on line {}'.format(sys.exc_info()[-1].tb_lineno),
                  type(e).__name__, e)
            pass

    df.to_csv('YaParse_sample_NO_NA.csv')
    print("Done making csv")
    print("No. of files passed: " + str(passfiles))
Exemplo n.º 39
0
def main():
    # 1. get the time
    day = Time.get_utc_day()
    hours_mins = Time.get_utc_hours_minutes()

    # 1. Get all the list of stocks
    stocks = base.managers.stock_manager.get_many()

    # 2. go through stock and update the desired values
    for stock in stocks:
        ticker = stock.get('ticker')

        try:
            # 2.1 Get the info from the yahoo API
            updated_stock = Share(ticker)
        except:
            print "-->Failed to update: %s with Yahoo API" % ticker
            continue

        price = updated_stock.get_price()
        open = updated_stock.get_open()
        days_high = updated_stock.get_days_high()
        days_low = updated_stock.get_days_low()
        year_high = updated_stock.get_year_high()
        year_low = updated_stock.get_year_low()
        volume = updated_stock.get_volume()
        market_cap = updated_stock.get_market_cap()
        pe_ratio = updated_stock.get_price_earnings_ratio()
        div_yield = updated_stock.get_dividend_yield()
        change = updated_stock.get_change()
        change_percent = updated_stock.data_set.get('ChangeinPercent')

        # 2.2 Get the stock body
        stock_body = stock.get('body')

        stock_price = {hours_mins: price}

        if stock_body:
            # 1. Get the stock info for the day:
            stock_info = stock_body.get(day)

            if stock_info:
                stock_price = stock_info.get('price')
                stock_price.update({hours_mins: price})
        else:
            stock_body = {}

        # 2.2.4 update the stock info dict
        stock_info = {'price': stock_price}
        stock_info.update({'open': open})
        stock_info.update({'days_high': days_high})
        stock_info.update({'days_low': days_low})
        stock_info.update({'year_high': year_high})
        stock_info.update({'year_low': year_low})
        stock_info.update({'volume': volume})
        stock_info.update({'market_cap': market_cap})
        stock_info.update({'pe_ratio': pe_ratio})
        stock_info.update({'div_yield': div_yield})
        stock_info.update({'change': change})
        stock_info.update({'change_percent': change_percent})

        # update the stock body
        stock_body.update({day: stock_info})

        stock.body = stock_body

        # 3. update the stock in the DB
        try:
            base.managers.stock_manager.update_one(stock)
        except:
            print "-->Failed to update: %s in DB" % ticker
            continue
Exemplo n.º 40
0
from yahoo_finance import Share, Currency



yahoo = Share('AAPL')

yahoo.refresh()

print yahoo.get_info()
print yahoo.get_avg_daily_volume()
print yahoo.get_stock_exchange()
print yahoo.get_book_value()
print yahoo.get_ebitda()
print yahoo.get_dividend_share()
print yahoo.get_price_earnings_ratio()
print yahoo.get_short_ratio()
print yahoo.get_price_book()

# f = open('nasdaqlisted.txt', 'r')

# print (f.readline())
# print (f.readline())
Exemplo n.º 41
0
def write_technical_files(stock_code, start_time, end_time):
  # """ Experiment on quandl """
  # print('quandl data')
  # mydata = quandl.get("FRED/GDP")
  # print(mydata)
  # print('hello')

  # data = quandl.get("WIKI/FB.11", start_date="2014-01-01", end_date="2014-12-31", collapse="monthly", transform="diff")
  # print(data)

  stock = Share(stock_code)

  print('stock.get_info()')
  print(stock.get_info())

  print('get_price()')
  print(stock.get_price())

  print('get_change()')
  print(stock.get_change())

  print('get_stock_exchange()')
  print(stock.get_stock_exchange())

  print('get_market_cap()')
  print(stock.get_market_cap())

  print('get_book_value()')
  print(stock.get_book_value())

  print('get_ebitda()')
  print(stock.get_ebitda())

  print('get_dividend_share()')  
  print(stock.get_dividend_share())

  print('get_dividend_yield()')
  print(stock.get_dividend_yield())

  print('get_earnings_share()')
  print(stock.get_earnings_share())

  print('get_50day_moving_avg()')
  print(stock.get_50day_moving_avg())

  print('get_200day_moving_avg()')
  print(stock.get_200day_moving_avg())

  print('get_price_earnings_ratio()')
  print(stock.get_price_earnings_ratio())

  print('get_price_earnings_growth_ratio()')
  print(stock.get_price_earnings_growth_ratio())

  print('get_price_sales()')
  print(stock.get_price_sales())

  print('get_price_book()')
  print(stock.get_price_book())

  print('get_short_ratio()')
  print(stock.get_short_ratio())

  print('historical_data')
  print(stock.get_historical(start_time, end_time))

  historical_data = stock.get_historical(start_time, end_time)

  info_text = "Symbol\t" + "Stock Exchange\t" + "Price\t" + "Market Cap\t" + "Book Value\t" + "EBITDA\t" + "50d Moving Avg\t" + "100d Moving Avg\n"
  info_text += str(stock.get_info()['symbol']) + "\t" + str(stock.get_stock_exchange()) + "\t" + str(stock.get_price()) + "\t" + str(stock.get_market_cap()) + "\t" + str(stock.get_book_value()) + "\t";
  info_text += str(stock.get_ebitda()) + "\t" + str(stock.get_50day_moving_avg()) + "\t" + str(stock.get_200day_moving_avg()) + "\n";

  info_directory = '/data/info.tsv'

  write_to_file(info_directory, info_text)

  high_low_text = "date\t" + "High\t" + "Low\n"
  open_close_text = "date\t" + "Open\t" + "Close\n"
  volume_text = "date\t" + "Volume\n"

  for index, value in enumerate(historical_data):
    date = str(historical_data[len(historical_data) - 1 - index]['Date'])
    date = date.replace('-','')

    stock_high = str(historical_data[len(historical_data) - 1 - index]['High'])
    stock_low = str(historical_data[len(historical_data) - 1 - index]['Low'])

    stock_open = str(historical_data[len(historical_data) - 1 - index]['Open'])
    stock_close = str(historical_data[len(historical_data) - 1 - index]['Close'])

    stock_volume = str(int(historical_data[len(historical_data) - 1 - index]['Volume']) / 1000)

    high_low_text += date + "\t" + stock_high + "\t" + stock_low + "\n"
    open_close_text += date + "\t" + stock_open + "\t" + stock_close + "\n"
    volume_text += date + "\t" + stock_volume + "\n"

  high_low_directory = '/data/highlow.tsv'
  open_close_directory = '/data/openclose.tsv'
  volume_directory = '/data/volume.tsv'

  write_to_file(high_low_directory, high_low_text)
  write_to_file(open_close_directory, open_close_text)
  write_to_file(volume_directory, volume_text)

  ratio_text = "name\t" + "value\n"

  if stock.get_change() != None:
    name = "Change"
    value = str(stock.get_change())
    ratio_text += name + "\t" + value + "\n"

  if stock.get_dividend_share() != None:
    name = "Dividend Share"
    value = str(stock.get_dividend_share())
    ratio_text += name + "\t" + value + "\n"

  if stock.get_dividend_yield() != None:
    name = "Divident Yield"
    value = str(stock.get_dividend_yield())
    ratio_text += name + "\t" + value + "\n"

  if stock.get_earnings_share() != None:
    name = "Earning Share"
    value = str(stock.get_earnings_share())
    ratio_text += name + "\t" + value + "\n"

  if stock.get_price_earnings_ratio() != None:
    name = "Price Earning"
    value = str(stock.get_price_earnings_ratio())
    ratio_text += name + "\t" + value + "\n"

  if stock.get_price_earnings_growth_ratio() != None:
    name = "Price Earning Growth"
    value = str(stock.get_price_earnings_growth_ratio())
    ratio_text += name + "\t" + value + "\n"

  if stock.get_price_sales() != None:
    name = "Price Sales"
    value = str(stock.get_price_sales())
    ratio_text += name + "\t" + value + "\n"

  if stock.get_price_book() != None:
    name = "Price Book"
    value = str(stock.get_price_book())
    ratio_text += name + "\t" + value + "\n"

  if stock.get_short_ratio() != None:
    name = "Short"
    value = str(stock.get_short_ratio())
    ratio_text += name + "\t" + value + "\n"

  ratio_directory = '/data/ratio.tsv'

  write_to_file(ratio_directory, ratio_text)
Exemplo n.º 42
0
	if myargs.change is True:
		change = stock.get_change()
		output.append(change)
		selections.append('Change: ')
		print change

	if myargs.avgvol is True:
		avgvolume = stock.get_avg_daily_volume()
		print avgvolume

	if myargs.short is True:
		short = stock.get_short_ratio()
		print short

	if myargs.peratio is True:
		pe = stock.get_price_earnings_ratio()
		print pe

	if myargs.exchange is True:
		exchange = stock.get_stock_exchange()

	if myargs.ma50 is True:
		ma50 = stock.get_50day_moving_avg()
		print ma50

	if myargs.ma200 is True:
		ma200 = stock.get_200day_moving_avg()
		print ma200

	if myargs.marketcap is True:
		marketcap = stock.get_market_cap()
def checklist(symbol, ibd50_list, ibd_session):
    """
    Looks up information on a given stock market symbol.
    The returned dictionary contains all information from
    Dr. Wish's Stock Checklist for HONR348M.
    """
    stock = {}
    # Load price data from yahoo.
    share = Share(symbol)
    ks = yahoo_ks(symbol)

    # Basics
    basics = stock["basics"] = {}
    basics["date"] = datetime.now().strftime("%m/%d/%Y %I:%M:%S%z")
    basics["symbol"] = symbol
    basics["equity_name"] = share.get_name()
    basics["price"] = float(share.get_price())
    basics["52w_low"] = float(share.get_year_low())
    basics["52w_high"] = float(share.get_year_high())
    basics["percent_from_52w_low"] = share.get_percent_change_from_year_low()
    basics["percent_from_52w_high"] = share.get_percent_change_from_year_high()

    # IBD (Stocks only)
    ibd = stock["ibd"] = ibd_stock_checkup(symbol, ibd_session)
    # ibd["industry"]
    ibd["industry_rank"] = float(ibd["industry_rank"])
    # ibd["industry_top5"]
    # ibd["3y_eps_growth"]
    # ibd["3y_sales_growth"]
    # ibd["eps_change"]
    ibd["eps_rating"] = float(ibd["eps_rating"])
    ibd["rs_rating"] = float(ibd["rs_rating"])
    # ibd["acc_distr_rating"]
    ibd["ibd_rating"] = float(ibd["ibd_rating"])
    ibd["in_ibd50"] = symbol in ibd50_list
    # ibd["fundamental_greens"]
    # ibd["technical_greens"]
    ibd["next_earning"] = datetime.strptime(ibd["next_earning"], '%m/%d/%Y')

    # Yahoo Finance (Stocks only)
    yahoo = stock["yahoo"] = {}
    yahoo["pe"] = float(share.get_price_earnings_ratio())
    yahoo["peg"] = float(share.get_price_earnings_growth_ratio())
    yahoo["ps"] = float(share.get_price_sales())
    yahoo["market_cap"] = share.get_market_cap()
    yahoo["float"] = ks["Float"]
    yahoo["annual_roe"] = ks["Return on Equity"]
    yahoo["percent_inst"] = ks["% Held by Institutions"]
    yahoo["percent_float_short"] = ks["Short % of Float"]
    yahoo["short_ratio"] = float(share.get_short_ratio())

    # Evidence of an uptrend/downtrend
    uptrend = stock["uptrend"] = {}
    downtrend = stock["downtrend"] = {}

    pdstockdata = data.DataReader(symbol, 'yahoo', '1900-01-01')
    sd = StockDataFrame.retype(pdstockdata)
    sd.BOLL_PERIOD = 15

    close1 = sd['close'][-1]
    close2 = sd['close'][-2]
    low1 = sd['low'][-1]
    low2 = sd['low'][-2]
    high1 = sd['high'][-1]
    high2 = sd['high'][-2]
    avg_30d = sd['close_30_sma'][-1]
    avg_4w = sd['close_20_sma'][-1]
    avg_10w = sd['close_50_sma'][-1]
    avg_30w = sd['close_150_sma'][-1]
    high_52w = sd['high'].tail(250).max()
    lbb1 = sd['boll_lb'][-1]
    lbb2 = sd['boll_lb'][-2]
    ubb1 = sd['boll_ub'][-1]
    ubb2 = sd['boll_ub'][-2]

    # Find all GLTs (ATH not broken for at least another 90 days)
    last_ath = 0.0
    ath = Series()
    for day, day_high in sd['high'].iteritems():
        last_ath = max(last_ath, day_high)
        ath.set_value(day, last_ath)
    ath_days = sd[sd['high'] == ath]['high']
    glt = Series()
    for i, (day, high) in enumerate(ath_days.iteritems()):
        next_day = ath_days.keys()[i +
                                   1] if i < len(ath_days) - 1 else Timestamp(
                                       str(date.today()))
        if next_day - day >= Timedelta('90 days'):
            glt.set_value(day, high)

    uptrend["c>30d_avg"] = close1 > avg_30d
    uptrend["c>10w_avg"] = close1 > avg_10w
    uptrend["c>30w_avg"] = close1 > avg_30w
    uptrend["4w>10w>30w"] = avg_4w > avg_10w > avg_30w
    # uptrend["w_rwb"] =
    uptrend["last_glt_date"] = glt.keys()[-1].to_datetime().date(
    ) if len(glt) > 0 else None
    uptrend["last_glt_high"] = glt[-1] if len(glt) > 0 else None
    uptrend["above_last_glt"] = len(glt) > 0 and close1 > glt[-1]
    uptrend["macd_hist_rising"] = sd['macdh'][-1] > sd['macdh_4_sma'][-1]
    uptrend["stoch_fast>slow"] = sd['rsv_10_4_sma'][-1] > sd[
        'rsv_10_4_sma_4_sma'][-1]
    # uptrend["bb_up_expansion_l2"]
    # uptrend["rs>30d_avg"] = (Need Investors.com data)
    # uptrend["rs_rising"] = (Need Investors.com data)
    uptrend["52w_high_l2"] = high_52w == high1 or high_52w == high2
    uptrend["ath_l2"] = ath[-1] == high1 or ath[-2] == high2
    uptrend["1y_doubled"] = close1 >= 2 * sd['close'][-255:-245].mean()
    # uptrend["bounce_30d_l2"] =
    # uptrend["bounce_10w_l2"] =
    # uptrend["bounce_30w_l2"] =
    uptrend["stoch<50"] = sd['rsv_10_4_sma'][-1] < 50
    uptrend["<bb_lower_l2"] = low1 < lbb1 or low2 < lbb2
    uptrend[
        "above_avg_volume"] = sd['volume'][-1] > 1.5 * sd['volume_50_sma'][-1]

    downtrend["c<30d_avg"] = close1 < avg_30d
    downtrend["c<10w_avg"] = close1 < avg_10w
    downtrend["c<30w_avg"] = close1 < avg_30w
    downtrend["4w<10w<30w"] = avg_4w < avg_10w < avg_30w
    # downtrend["w_bwr"] =
    downtrend["macd_hist_falling"] = sd['macdh'][-1] < sd['macdh_4_sma'][-1]
    downtrend["stoch_fast<slow"] = sd['rsv_10_4_sma'][-1] < sd[
        'rsv_10_4_sma_4_sma'][-1]
    # downtrend["bb_down_expansion_l2"]
    # downtrend["bounce_30d_l2"] =
    # downtrend["bounce_10w_l2"] =
    # downtrend["bounce_30w_l2"] =
    downtrend["stoch>50"] = sd['rsv_10_4_sma'][-1] > 50
    downtrend[">bb_upper_l2"] = high1 > ubb1 or high2 > ubb2

    return stock
Exemplo n.º 44
0
	except:
		pass
	try:
		russell3000.set_value(s,'Year low',shy.get_year_low())
	except:
		pass
	try:
		russell3000.set_value(s,'50 days MA',shy.get_50day_moving_avg())
	except:
		pass
	try:
		russell3000.set_value(s,'200 days MA',shy.get_200day_moving_avg())
	except:
		pass
	try:
		russell3000.set_value(s,'Price earnings ratio',shy.get_price_earnings_ratio())
	except:
		pass
	try:
		russell3000.set_value(s,'Price earnings growth ratio',shy.get_price_earnings_growth_ratio())
	except:
		pass
	try:
		russell3000.set_value(s,'Price sales',shy.get_price_sales())
	except:
		pass
	try:
		russell3000.set_value(s,'Price book',shy.get_price_book())
	except:
		pass
	try: