def getTrending(self):
        trending = []
        k = 0
        retry = 0
        maxRetries = 3
        while k < len(self.bySymbol.keys()):
            ticker = self.bySymbol.keys()[k]
            try:
                sData = Share(ticker)
                sData.get_avg_daily_volume()
                avgVolume = float(sData.get_avg_daily_volume())
                pVolume = float(sData.get_volume())
                sdVolume = (avgVolume)**0.5
                trendingP = (pVolume - avgVolume) / sdVolume
                trending.append((ticker, trendingP))
                k += 1
            except:
                time.sleep(0.05)
                retry += 1
                if retry >= maxRetries:
                    retry = 0
                    k += 1

        trending.sort(key=lambda x: x[1], reverse=True)
        trending = [s for s in trending if s[1] > 0]
        return trending
Exemplo n.º 2
0
def collect_stock_data(symbol):
    """ Collect stock data for stock with symbol symbol
	:param symbol: symbol of stock to collect data for
	:return: dictionary containing stock data
	"""
    stock_data = dict()
    stock = Share(symbol)
    # check if symbol was for a valid stock
    name = stock.get_name()
    if name == 'N/A':
        return None
    stock_data['symbol'] = symbol
    stock_data['name'] = name
    # get all data between today and start of 21st century
    start_date = time.strftime("2000-01-01")
    end_date = time.strftime("%Y-%m-%d")
    stock_data['historical_data'] = stock.get_historical(start_date, end_date)
    # get dividend information
    stock_data['dividend_per_share'] = stock.get_dividend_share()
    stock_data['dividend_yield'] = stock.get_dividend_yield()
    # get volume information
    stock_data['avg_daily_volume'] = stock.get_avg_daily_volume()
    # primary key is the stock's symbol
    stock_data['_id'] = symbol
    return stock_data
Exemplo n.º 3
0
    def data_frame_companies_amount(list_companies,porcentaje_volumnen_diario,max_var_pvd):

        # Es una funcion que toma una lista de empresas (codificadas por yahoo.finance), el porcentaje (tanto por uno)
        # sobre el volumen diario a considerar y la maxima variacion en porcentaje (tanto por uno) sobre este porcentaje.



        list_index=["ask5","ask4","ask3","ask2","ask1","bid1","bid2","bid3","bid4","bid5"]
        companies_amount=pd.DataFrame(index=list_index)
        for i in list_companies:

            company = Share(i)
            volume=company.get_volume()
            cantidad_per_ba=float(company.get_avg_daily_volume())*porcentaje_volumnen_diario
            num=cantidad_per_ba*max_var_pvd # variacion maxima respecto al 1% del volumen diario
            vec_list_amount=[]

            for h in range(0,len(list_index)):

                vec_list_amount.append(round(cantidad_per_ba+np.random.randint(-num,num,1)))

            vec_amount=np.array(vec_list_amount)
            companies_amount[i]=vec_amount   

        return companies_amount
    def metricsForSector(self,
                         Sector,
                         screenParam=['avgVolume'],
                         screenParamRange=(float("-inf"), float("inf"))):
        outputData = []
        for stock in self.bySector[Sector]:
            try:
                working = stock
                sData = Share(stock[0])
                screenQ = (type(screenParam) == list)

                if 'avgVolume' in screenParam:
                    avgVolume = sData.get_avg_daily_volume()
                    if (screenParamRange[0] <= float(avgVolume) <=
                            screenParamRange[1]) or screenQ:
                        working.append(avgVolume)
                    else:
                        working = None

                if 'mrkCap' in screenParam:
                    mrkCap = sData.get_market_cap()
                    if mrkCap[-1] == 'B':
                        amrkCap = float(mrkCap[:-1]) * 1000000000
                    if mrkCap[-1] == 'M':
                        amrkCap = float(mrkCap[:-1]) * 1000000
                    if (screenParamRange[0] <= amrkCap <=
                            screenParamRange[1]) or screenQ:
                        working.append(amrkCap)
                    else:
                        working = None

                outputData.append(working)
            except:
                pass
        return outputData
Exemplo n.º 5
0
def set_ETF_data():
    etf_data = []

    for index, etf_symbol in enumerate(settings.ETF_MASTER_LIST):
        etf_dict = {
            'model': 'portfolio.ETF',
            'pk': index + 1,
            'fields': {},
        }

        fund = Share(etf_symbol)

        fields = {
            'name': fund.get_name(),
            'symbol': etf_symbol,
            'last_trade': fund.get_price(),
            'dividend_yield': fund.get_dividend_yield(),
            'absolute_change': fund.get_change(),
            'percentage_change': fund.get_percent_change(),
            'year high': fund.get_year_high(),
            'year low': fund.get_year_low(),
            '50 day moving average': fund.get_50day_moving_avg(),
            '200 day moving average': fund.get_200day_moving_avg(),
            'average_daily_volume': fund.get_avg_daily_volume()
        }

        etf_dict['fields'] = fields
        etf_data.append(etf_dict)
    json_data = json.dumps(etf_data)

    # print(json_data)

    output_dict = [y for y in etf_data if y['fields']['dividend_yield'] > 1]

    output_dict = [
        x for x in output_dict if x['fields']['average_daily_volume'] > 100000
    ]

    output_dict = [
        z for z in output_dict
        if z['fields']['200 day moving average'] < z['fields']['last_trade']
    ]

    sorted_list = sorted(output_dict,
                         key=lambda k: k['fields']['dividend_yield'],
                         reverse=True)

    for etf in sorted_list[:5]:
        ETF.objects.create(
            portfolio=Portfolio.objects.get(pk=1),
            name=etf['fields']['name'],
            symbol=etf['fields']['symbol'],
            investment_style=1,
            last_trade=etf['fields']['last_trade'],
            dividend_yield=etf['fields']['dividend_yield'],
            absolute_change=etf['fields']['absolute_change'],
            percentage_change=etf['fields']['percentage_change'],
            currency='USD',
            last_updated=timezone.now())
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.º 7
0
def get_stock_info(ticker):
    temp_share = Share(ticker)
    real_price = temp_share.get_price()
    adj_price = (float(temp_share.get_open()) + float(temp_share.get_close()) +
                 float(temp_share.get_high()) +
                 float(temp_share.get_low())) / 4
    real_vol = temp_share.get_volume()
    avg_vol = temp_share.get_avg_daily_volume()
    avg_50_day = temp_share.get_50day_moving_avg()
    avg_200_day = temp_share.get_200day_moving_avg()
    return real_price, adj_price, real_vol, avg_vol, avg_50_day, avg_200_day
Exemplo n.º 8
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.º 9
0
    def filter_good_candidates(self, good_candidates):
        """
        Filter all of the matching candidates by certain parameters.  Right now, specifically
        filter out all low volume stocks.  Low volume limit is 500,000/day.  Could be adjusted
        """

        filtered_tickers = []

        for ticker in good_candidates:
            # Filter duplicates.  This happens from time to time
            if ticker in filtered_tickers:
                continue

            print "ticker: %s" % ticker

            # Try to load the share object.  If you can't after a certain
            # number of retries, just continue and skip the ticker
            retries = 0
            failure = False
            while True:

                try:
                    time.sleep(0.25)
                    share_object = Share(ticker)
                except Exception:
                    if retries > 5:
                        failure = True
                        break

                    retries = retries + 1
                    continue

                break

            if failure is True:
                continue

            # Filter by volume
            average_volume = share_object.get_avg_daily_volume()

            # If the average volume can't be found, just continue
            try:
                int(average_volume)
            except TypeError:
                continue

            if int(average_volume) >= LOW_VOLUME_LIMIT:
                filtered_tickers.append(ticker)

            # Add any other filtering conditions here!!!

        return filtered_tickers
Exemplo n.º 10
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.º 12
0
def get_price_YAHOO(ticker):
    #for ticker in list_of_symbols:
    try:
        from yahoo_finance import Share
        yahoo = Share(ticker)
        yahoo.refresh()
        price_finance = yahoo.get_price()
        print("IN->", ticker)
        print("Open -> ", yahoo.get_open())
        print("Current Price -> ", yahoo.get_price())
        print("Ave Volume -> ", yahoo.get_avg_daily_volume())
        print("Volume -> ", yahoo.get_volume())
        print("Time -> ", yahoo.get_trade_datetime())
        return float(price_finance)
    except:
        get_price_YAHOO(ticker)
 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 {}
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.º 16
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.º 17
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
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.º 19
0
	except:
		pass
	try:
		russell3000.set_value(s,'Change',shy.get_change())
	except:
		pass
	try:
		russell3000.set_value(s,'Volume',shy.get_volume())
	except:
		pass
	try:
		russell3000.set_value(s,'Open',shy.get_open())
	except:
		pass
	try:
		russell3000.set_value(s,'Average daily volume',shy.get_avg_daily_volume())
	except:
		pass
	try:
		russell3000.set_value(s,'Market cap',shy.get_market_cap())
	except:
		pass
	try:
		russell3000.set_value(s,'Book value',shy.get_book_value())
	except:
		pass
	try:
		russell3000.set_value(s,'Ebitda',shy.get_ebitda())
	except:
		pass
	try:
Exemplo n.º 20
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.º 21
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)
Exemplo n.º 22
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")
    def on_message(self, message):
        print_logger.debug("Received message: %s" % (message))

        self.write_message("Test 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]

            # The file I have stored didn't end up being a good validation
            # option as it does not contain a complete list of all
            # securities.  I have to acquire the data from yahoo
            # finance anyway, so just use that.  The Share function
            # call will throw a NameError exception if the ticker doesn't exist
            # isValid = current_stock_list.is_valid_stock(ticker)

            isValid = True
            try:
                test = Share(str(ticker))

                if test.get_price() is None:
                    isValid = False
            except NameError:
                isValid = False

            if isValid:
                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 = ""
            try:
                company_info="../task_1/google_search_program/cleaned_data/" + company_ticker + "/company_info"
                company_name = " "

                f = open(company_info, "r")
                line = f.readlines()
                company_name = line[0].split(",")
                company_name = company_name[0]
                company_name = company_name.title()

                if '(' not in company_name:
                    company_name = company_name + " (%s)" % company_ticker
            except Exception:
                company_name = get_company_title_proxied(company_ticker)


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

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

            if len(message) != 2:
                print_logger.error("Malformed input query")
                self.write_message("QueryResult:Error")

            data = current_solr_object.issue_query(str(message[1]))

            data = current_solr_object.recover_links(data)

            final_string = "QueryResult"

            for link in data:
                final_string = final_string + ":" + str(link)

            self.write_message(final_string)

        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]

            # Read in the company description
            description = ""
            try:
                f = open("../task_1/google_search_program/cleaned_data/%s/company_description" % str(ticker), "r")
                description = f.read()
            except Exception:
                # If the file does not exist, get the data manually
                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]

            # Get the bollinger band history along with the 5 day moving average
            close, lower_band, five_day_ma = calculate_bands(ticker)

            last_5_days_5_day_ma = []
            last_5_days_bb = []
            last_5_days_close = []
            for i in range(0, 5):
                last_5_days_5_day_ma.append(five_day_ma[i])
                last_5_days_bb.append(lower_band[i])
                last_5_days_close.append(close[i])

            condition_1 = False
            condition_2 = False

            # Condition 1: Has the stock price at close been below the lower bollinger band
            # at market close within the last 5 days
            for i in range(0, 5):
                if last_5_days_close[i] < last_5_days_bb[i]:
                    condition_1 = True

            # Condition 2: Has the current stock price been above the 5 day moving average sometime in the last 3 days
            for i in range(0, 3):
                if last_5_days_close[i] > last_5_days_5_day_ma[i]:
                    condition_2 = True

            if condition_1 is True and condition_2 is True:
                self.write_message("BB:GoodCandidate")
            else:
                self.write_message("BB:BadCandidate")
        elif "GetSentiment" in message:
            message = message.split(":")

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

            ticker = message[1]

            # Lists of sentiment based words
            good_words = ["buy", "bull", "bullish", "positive", "gain", "gains", "up"]
            bad_words = ["sell", "bear", "bearish", "negative", "loss", "losses", "down"]

            DATA_DIRECTORY = "../task_1/google_search_program/cleaned_data/%s" % ticker.upper()


            positive_file_stats = []
            negative_file_stats = []
            positive_files = 0
            negative_files = 0

            neutral_files = 0

            trump_count = 0

            files_examined = 0

            for root, dirs, files in os.walk(DATA_DIRECTORY):
                path = root.split(os.sep)
                print((len(path) - 1) * '---', os.path.basename(root))

                for file in files:

                    if "article" in file:
                        f = open('/'.join(path) + '/' + file)

                        title = f.readline()

                        article_text = " ".join(f.readlines())

                        if article_text.count("trump") > 0:
                            trump_count = trump_count + 1

                        positive_word_count = 0
                        negative_word_count = 0

                        files_examined = files_examined + 1

                        for word in good_words:
                            if word in article_text:
                                positive_word_count = positive_word_count + article_text.count(word)
                                print "Word: %s, %s" % (word, article_text.count(word))


                        for word in bad_words:
                            if word in article_text:
                                negative_word_count = negative_word_count + article_text.count(word)

                        if positive_word_count > negative_word_count:
                            positive_ratio = float(positive_word_count) / float(negative_word_count + positive_word_count)

                            if positive_ratio > 0.7:
                                positive_files = positive_files + 1

                                positive_file_stats.append((positive_word_count, negative_word_count))
                            else:
                                neutral_files = neutral_files + 1

                        elif positive_word_count == negative_word_count:
                            neutral_files = neutral_files + 1

                        else:
                            negative_ratio = float(negative_word_count) / float(negative_word_count + positive_word_count)

                            if negative_ratio > 0.7:
                                negative_files = negative_files + 1

                                negative_file_stats.append((positive_word_count, negative_word_count))
                            else:
                                neutral_files = neutral_files + 1

            print_logger.debug("Sentiment:" + str(positive_files) + ":" + str(negative_files) +\
                ":" + str(neutral_files) + ":" + str(trump_count) + ":" + str(files_examined))

            self.write_message("Sentiment:" + str(positive_files) + ":" + str(negative_files) +\
                ":" + str(neutral_files) + ":" + str(trump_count) + ":" + str(files_examined))
    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()
Exemplo n.º 25
0
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        '''Creates basic geometry for GUI'''
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.setMinimumSize(QtCore.QSize(490, 400))
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(_fromUtf8("DK_icon.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        MainWindow.setWindowIcon(icon)
        MainWindow.setTabShape(QtGui.QTabWidget.Rounded)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.btnPredictPrices = QtGui.QPushButton(self.centralwidget)
        self.btnPredictPrices.setGeometry(QtCore.QRect(300, 330, 161, 23))
        self.btnPredictPrices.setObjectName(_fromUtf8("btnPredictPrices"))
        self.btnPredictPrices.clicked.connect(self.show_predictions)
        self.btnPlotSymbol = QtGui.QPushButton(self.centralwidget)
        self.btnPlotSymbol.setGeometry(QtCore.QRect(300, 90, 161, 23))
        self.btnPlotSymbol.setObjectName(_fromUtf8("btnPlotSymbol"))
        self.btnPlotSymbol.clicked.connect(self.display_plots)
        self.leditEnterTickers = QtGui.QLineEdit(self.centralwidget)
        self.leditEnterTickers.setGeometry(QtCore.QRect(30, 330, 241, 21))
        self.leditEnterTickers.setObjectName(_fromUtf8("leditEnterTickers"))
        self.deditStartDate = QtGui.QDateEdit(self.centralwidget)
        self.deditStartDate.setGeometry(QtCore.QRect(30, 30, 110, 22))
        self.deditStartDate.setAlignment(QtCore.Qt.AlignCenter)
        self.deditStartDate.setDate(QtCore.QDate(2013, 1, 1))
        self.deditStartDate.setCalendarPopup(True)
        self.deditStartDate.setObjectName(_fromUtf8("deditStartDate"))
        self.deditEndDate = QtGui.QDateEdit(self.centralwidget)
        self.deditEndDate.setGeometry(QtCore.QRect(290, 30, 110, 22))
        self.deditEndDate.setAlignment(QtCore.Qt.AlignCenter)
        self.deditEndDate.setDate(QtCore.QDate(2017, 1, 1))
        self.deditEndDate.setCalendarPopup(True)
        self.deditEndDate.setObjectName(_fromUtf8("deditEndDate"))
        self.labelStartDate = QtGui.QLabel(self.centralwidget)
        self.labelStartDate.setGeometry(QtCore.QRect(150, 30, 111, 21))
        self.labelStartDate.setObjectName(_fromUtf8("labelStartDate"))
        self.labelEndDate = QtGui.QLabel(self.centralwidget)
        self.labelEndDate.setGeometry(QtCore.QRect(410, 30, 51, 21))
        self.labelEndDate.setObjectName(_fromUtf8("labelEndDate"))
        self.leditPlotSymb = QtGui.QLineEdit(self.centralwidget)
        self.leditPlotSymb.setGeometry(QtCore.QRect(30, 90, 241, 21))
        self.leditPlotSymb.setObjectName(_fromUtf8("leditPlotSymb"))
        self.dedit1stPDate = QtGui.QDateEdit(self.centralwidget)
        self.dedit1stPDate.setGeometry(QtCore.QRect(30, 210, 110, 22))
        self.dedit1stPDate.setAlignment(QtCore.Qt.AlignCenter)
        self.dedit1stPDate.setDate(QtCore.QDate(2016, 12, 6))
        self.dedit1stPDate.setCalendarPopup(True)
        self.dedit1stPDate.setObjectName(_fromUtf8("dedit1stPDate"))
        self.dedit2ndPDate = QtGui.QDateEdit(self.centralwidget)
        self.dedit2ndPDate.setGeometry(QtCore.QRect(30, 240, 110, 22))
        self.dedit2ndPDate.setAlignment(QtCore.Qt.AlignCenter)
        self.dedit2ndPDate.setDate(QtCore.QDate(2016, 12, 7))
        self.dedit2ndPDate.setCalendarPopup(True)
        self.dedit2ndPDate.setObjectName(_fromUtf8("dedit2ndPDate"))
        self.dedit3rdPDate = QtGui.QDateEdit(self.centralwidget)
        self.dedit3rdPDate.setGeometry(QtCore.QRect(30, 270, 110, 22))
        self.dedit3rdPDate.setAlignment(QtCore.Qt.AlignCenter)
        self.dedit3rdPDate.setDate(QtCore.QDate(2016, 12, 8))
        self.dedit3rdPDate.setCalendarPopup(True)
        self.dedit3rdPDate.setObjectName(_fromUtf8("dedit3rdPDate"))
        self.label1stPDate = QtGui.QLabel(self.centralwidget)
        self.label1stPDate.setGeometry(QtCore.QRect(150, 210, 131, 21))
        self.label1stPDate.setObjectName(_fromUtf8("label1stPDate"))
        self.label3rdPDate = QtGui.QLabel(self.centralwidget)
        self.label3rdPDate.setGeometry(QtCore.QRect(150, 270, 121, 21))
        self.label3rdPDate.setObjectName(_fromUtf8("label3rdPDate"))
        self.label2ndPDate = QtGui.QLabel(self.centralwidget)
        self.label2ndPDate.setGeometry(QtCore.QRect(150, 240, 131, 21))
        self.label2ndPDate.setObjectName(_fromUtf8("label2ndPDate"))
        self.btnFundData = QtGui.QPushButton(self.centralwidget)
        self.btnFundData.setGeometry(QtCore.QRect(300, 120, 161, 23))
        self.btnFundData.setObjectName(_fromUtf8("btnFundData"))
        self.btnFundData.clicked.connect(self.display_fund_data)
        self.deditLastTDate = QtGui.QDateEdit(self.centralwidget)
        self.deditLastTDate.setGeometry(QtCore.QRect(30, 180, 110, 22))
        self.deditLastTDate.setAlignment(QtCore.Qt.AlignCenter)
        self.deditLastTDate.setDate(QtCore.QDate(2016, 12, 5))
        self.deditLastTDate.setCalendarPopup(True)
        self.deditLastTDate.setObjectName(_fromUtf8("deditLastTDate"))
        self.labelStartDate_6 = QtGui.QLabel(self.centralwidget)
        self.labelStartDate_6.setGeometry(QtCore.QRect(150, 180, 91, 21))
        self.labelStartDate_6.setObjectName(_fromUtf8("labelStartDate_6"))
        self.sbox1stPDate = QtGui.QSpinBox(self.centralwidget)
        self.sbox1stPDate.setGeometry(QtCore.QRect(290, 210, 42, 22))
        self.sbox1stPDate.setAlignment(QtCore.Qt.AlignCenter)
        self.sbox1stPDate.setMinimum(0)
        self.sbox1stPDate.setProperty("value", 0)
        self.sbox1stPDate.setObjectName(_fromUtf8("sbox1stPDate"))
        self.dedit4thPDate = QtGui.QDateEdit(self.centralwidget)
        self.dedit4thPDate.setGeometry(QtCore.QRect(30, 300, 110, 22))
        self.dedit4thPDate.setAlignment(QtCore.Qt.AlignCenter)
        self.dedit4thPDate.setDate(QtCore.QDate(2016, 12, 9))
        self.dedit4thPDate.setCalendarPopup(True)
        self.dedit4thPDate.setObjectName(_fromUtf8("dedit4thPDate"))
        self.label4thPDate = QtGui.QLabel(self.centralwidget)
        self.label4thPDate.setGeometry(QtCore.QRect(150, 300, 131, 21))
        self.label4thPDate.setFrameShape(QtGui.QFrame.NoFrame)
        self.label4thPDate.setObjectName(_fromUtf8("label4thPDate"))
        self.label1stPDate_2 = QtGui.QLabel(self.centralwidget)
        self.label1stPDate_2.setGeometry(QtCore.QRect(340, 210, 121, 21))
        self.label1stPDate_2.setObjectName(_fromUtf8("label1stPDate_2"))
        self.label2ndPDate_2 = QtGui.QLabel(self.centralwidget)
        self.label2ndPDate_2.setGeometry(QtCore.QRect(340, 240, 121, 21))
        self.label2ndPDate_2.setObjectName(_fromUtf8("label2ndPDate_2"))
        self.sbox2ndPDate = QtGui.QSpinBox(self.centralwidget)
        self.sbox2ndPDate.setGeometry(QtCore.QRect(290, 240, 42, 22))
        self.sbox2ndPDate.setAlignment(QtCore.Qt.AlignCenter)
        self.sbox2ndPDate.setMinimum(0)
        self.sbox2ndPDate.setProperty("value", 0)
        self.sbox2ndPDate.setObjectName(_fromUtf8("sbox2ndPDate"))
        self.label3rdPDate_2 = QtGui.QLabel(self.centralwidget)
        self.label3rdPDate_2.setGeometry(QtCore.QRect(340, 270, 121, 21))
        self.label3rdPDate_2.setObjectName(_fromUtf8("label3rdPDate_2"))
        self.sbox3rdPDate = QtGui.QSpinBox(self.centralwidget)
        self.sbox3rdPDate.setGeometry(QtCore.QRect(290, 270, 42, 22))
        self.sbox3rdPDate.setAlignment(QtCore.Qt.AlignCenter)
        self.sbox3rdPDate.setMinimum(0)
        self.sbox3rdPDate.setProperty("value", 0)
        self.sbox3rdPDate.setObjectName(_fromUtf8("sbox3rdPDate"))
        self.label4thPDate_2 = QtGui.QLabel(self.centralwidget)
        self.label4thPDate_2.setGeometry(QtCore.QRect(340, 300, 121, 21))
        self.label4thPDate_2.setObjectName(_fromUtf8("label4thPDate_2"))
        self.sbox4thPDate = QtGui.QSpinBox(self.centralwidget)
        self.sbox4thPDate.setGeometry(QtCore.QRect(290, 300, 42, 22))
        self.sbox4thPDate.setAlignment(QtCore.Qt.AlignCenter)
        self.sbox4thPDate.setMinimum(0)
        self.sbox4thPDate.setProperty("value", 0)
        self.sbox4thPDate.setObjectName(_fromUtf8("sbox4thPDate"))
        self.btnLookupSymbol = QtGui.QPushButton(self.centralwidget)
        self.btnLookupSymbol.setGeometry(QtCore.QRect(30, 120, 161, 23))
        self.btnLookupSymbol.setObjectName(_fromUtf8("btnLookupSymbol"))
        self.btnLookupSymbol.clicked.connect(self.lookup_symbol)
        self.line2ndHorizontal = QtGui.QFrame(self.centralwidget)
        self.line2ndHorizontal.setGeometry(QtCore.QRect(30, 140, 431, 20))
        self.line2ndHorizontal.setFrameShape(QtGui.QFrame.HLine)
        self.line2ndHorizontal.setFrameShadow(QtGui.QFrame.Sunken)
        self.line2ndHorizontal.setObjectName(_fromUtf8("line2ndHorizontal"))
        self.labelPricePredictionDates = QtGui.QLabel(self.centralwidget)
        self.labelPricePredictionDates.setGeometry(QtCore.QRect(30, 160, 151, 20))
        self.labelPricePredictionDates.setObjectName(_fromUtf8("labelPricePredictionDates"))
        self.line1stHorizontal = QtGui.QFrame(self.centralwidget)
        self.line1stHorizontal.setGeometry(QtCore.QRect(30, 50, 431, 20))
        self.line1stHorizontal.setFrameShape(QtGui.QFrame.HLine)
        self.line1stHorizontal.setFrameShadow(QtGui.QFrame.Sunken)
        self.line1stHorizontal.setObjectName(_fromUtf8("line1stHorizontal"))
        self.labelHistoricalData = QtGui.QLabel(self.centralwidget)
        self.labelHistoricalData.setGeometry(QtCore.QRect(30, 70, 151, 20))
        self.labelHistoricalData.setObjectName(_fromUtf8("labelHistoricalData"))
        self.labelDateRange = QtGui.QLabel(self.centralwidget)
        self.labelDateRange.setGeometry(QtCore.QRect(30, 10, 261, 20))
        self.labelDateRange.setObjectName(_fromUtf8("labelDateRange"))
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 490, 21))
        self.menubar.setObjectName(_fromUtf8("menubar"))
        self.menuFile = QtGui.QMenu(self.menubar)
        self.menuFile.setObjectName(_fromUtf8("menuFile"))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))
        MainWindow.setStatusBar(self.statusbar)
        self.actionQuit = QtGui.QAction(MainWindow)
        self.actionQuit.triggered.connect(QtGui.qApp.quit)
        self.actionQuit.setObjectName(_fromUtf8("actionQuit"))
        self.actionTo_Find_Stock_Symbol = QtGui.QAction(MainWindow)
        self.actionTo_Find_Stock_Symbol.setObjectName(_fromUtf8("actionTo_Find_Stock_Symbol"))
        self.actionPortfolio_Folder = QtGui.QAction(MainWindow)
        self.actionPortfolio_Folder.setObjectName(_fromUtf8("actionPortfolio_Folder"))
        self.menuFile.addAction(self.actionQuit)
        self.menubar.addAction(self.menuFile.menuAction())

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        '''Adds extra features to GUI's buttons and fields'''
        MainWindow.setWindowTitle(_translate("MainWindow", "Stock Price Predictor", None))
        self.btnPredictPrices.setToolTip(_translate("MainWindow", "<html><head/><body><p>Displays the predicted closing prices for the stock symbols and days entered. Also compares the predicted price to the actual price if possible.</p></body></html>", None))
        self.btnPredictPrices.setText(_translate("MainWindow", "Predict Future Prices", None))
        self.btnPlotSymbol.setToolTip(_translate("MainWindow", "Plots the daily historical stock price and volume information for a given stock symbol.", None))
        self.btnPlotSymbol.setText(_translate("MainWindow", "Plot Historical Data", None))
        self.leditEnterTickers.setToolTip(_translate("MainWindow", "(MAX 5) Enter stock ticker symbols for price prediction, separated by commas.", None))
        self.leditEnterTickers.setPlaceholderText(_translate("MainWindow", "Enter Stock Ticker Symbols for Price Prediction", None))
        self.deditStartDate.setToolTip(_translate("MainWindow", "The beginning of the range of dates to be used for data download and/or stock price prediction.", None))
        self.deditEndDate.setToolTip(_translate("MainWindow", "The end of the range of dates to be used for data download and/or stock price prediction.", None))
        self.labelStartDate.setToolTip(_translate("MainWindow", "The beginning of the range of dates to be used for data download and/or stock price prediction.", None))
        self.labelStartDate.setText(_translate("MainWindow", "Start Date            TO", None))
        self.labelEndDate.setToolTip(_translate("MainWindow", "The end of the range of dates to be used for data download and/or stock price prediction.", None))
        self.labelEndDate.setText(_translate("MainWindow", " End Date", None))
        self.leditPlotSymb.setToolTip(_translate("MainWindow", "(MAX 5) Enter stock ticker symbols to plot, separated by commas.", None))
        self.leditPlotSymb.setPlaceholderText(_translate("MainWindow", "Enter Stock Ticker Symbols to Plot", None))
        self.dedit1stPDate.setToolTip(_translate("MainWindow", "First day for which the closing price will be predicted. Must come after the Last Training Date.", None))
        self.dedit2ndPDate.setToolTip(_translate("MainWindow", "(Optional) Second day for which the closing price will be predicted. Must come after the Last Training Date.", None))
        self.dedit3rdPDate.setToolTip(_translate("MainWindow", "(Optional) Third day for which the closing price will be predicted. Must come after the Last Training Date.", None))
        self.label1stPDate.setToolTip(_translate("MainWindow", "First day for which the closing price will be predicted. Must come after the Last Training Date.", None))
        self.label1stPDate.setText(_translate("MainWindow", "1st Predicted Date      OR", None))
        self.label3rdPDate.setToolTip(_translate("MainWindow", "(Optional) Third day for which the closing price will be predicted. Must come after the Last Training Date.", None))
        self.label3rdPDate.setText(_translate("MainWindow", "3rd Predicted Date      OR", None))
        self.label2ndPDate.setToolTip(_translate("MainWindow", "(Optional) Second day for which the closing price will be predicted. Must come after the Last Training Date.", None))
        self.label2ndPDate.setText(_translate("MainWindow", "2nd Predicted Date     OR", None))
        self.btnFundData.setToolTip(_translate("MainWindow", "Plots the fundamental data for a given stock symbol.", None))
        self.btnFundData.setText(_translate("MainWindow", "Show Fundamental Data", None))
        self.labelStartDate_6.setToolTip(_translate("MainWindow", "Last day used for training the price prediction model.", None))
        self.labelStartDate_6.setText(_translate("MainWindow", "Last Training Date", None))
        self.sbox1stPDate.setToolTip(_translate("MainWindow", "First day for which the closing price will be predicted. Must come after the Last Training Date.", None))
        self.dedit4thPDate.setToolTip(_translate("MainWindow", "(Optional) Fourth day for which the closing price will be predicted. Must come after the Last Training Date.", None))
        self.label4thPDate.setToolTip(_translate("MainWindow", "(Optional) Fourth day for which the closing price will be predicted. Must come after the Last Training Date.", None))
        self.label4thPDate.setText(_translate("MainWindow", "4th Predicted Date      OR", None))
        self.label1stPDate_2.setToolTip(_translate("MainWindow", "First day for which the closing price will be predicted. Must come after the Last Training Date.", None))
        self.label1stPDate_2.setText(_translate("MainWindow", "Trading Days into Future", None))
        self.label2ndPDate_2.setToolTip(_translate("MainWindow", "(Optional) Second day for which the closing price will be predicted. Must come after the Last Training Date.", None))
        self.label2ndPDate_2.setText(_translate("MainWindow", "Trading Days into Future", None))
        self.sbox2ndPDate.setToolTip(_translate("MainWindow", "(Optional) Second day for which the closing price will be predicted. Must come after the Last Training Date.", None))
        self.label3rdPDate_2.setToolTip(_translate("MainWindow", "(Optional) Third day for which the closing price will be predicted. Must come after the Last Training Date.", None))
        self.label3rdPDate_2.setText(_translate("MainWindow", "Trading Days into Future", None))
        self.sbox3rdPDate.setToolTip(_translate("MainWindow", "(Optional) Third day for which the closing price will be predicted. Must come after the Last Training Date.", None))
        self.label4thPDate_2.setToolTip(_translate("MainWindow", "(Optional) Fourth day for which the closing price will be predicted. Must come after the Last Training Date.", None))
        self.label4thPDate_2.setText(_translate("MainWindow", "Trading Days into Future", None))
        self.sbox4thPDate.setToolTip(_translate("MainWindow", "(Optional) Fourth day for which the closing price will be predicted. Must come after the Last Training Date.", None))
        self.btnLookupSymbol.setToolTip(_translate("MainWindow", "Opens web page to help find a stock\'s ticker symbol.", None))
        self.btnLookupSymbol.setText(_translate("MainWindow", "Lookup Symbol", None))
        self.labelPricePredictionDates.setText(_translate("MainWindow", "Stock Price Prediction", None))
        self.labelHistoricalData.setText(_translate("MainWindow", "Historical Stock Data", None))
        self.labelDateRange.setText(_translate("MainWindow", "Date Range for Data Download and Price Prediction", None))
        self.menuFile.setTitle(_translate("MainWindow", "File", None))
        self.actionQuit.setText(_translate("MainWindow", "Quit", None))
        self.actionTo_Find_Stock_Symbol.setText(_translate("MainWindow", "Look Up Stock Symbols", None))
        self.actionPortfolio_Folder.setText(_translate("MainWindow", "Portfolio Folder", None))
        self.actionPortfolio_Folder.setToolTip(_translate("MainWindow", "Location for saved portfolios", None))
        
    def lookup_symbol(self):
        '''Opens web page in browser to help user research stock ticker symbols'''
        webbrowser.open('http://finance.yahoo.com/')
        
    def get_fund_data(self, fund_ticker):
        '''Obtains and displays basic stock information from Yahoo! Finance for each of the tickers'''
        self.yahoo_request = Share(self.fund_ticker)
        self.ADV = self.yahoo_request.get_avg_daily_volume()
        self.market_cap = self.yahoo_request.get_market_cap()
        self.mov_avg50 = self.yahoo_request.get_50day_moving_avg()
        self.mov_avg200 = self.yahoo_request.get_200day_moving_avg()
        self.pe_ratio = self.yahoo_request.get_price_earnings_ratio()
        self.price = self.yahoo_request.get_price()
        self.year_high = self.yahoo_request.get_year_high()
        self.year_low = self.yahoo_request.get_year_low()     
        self.data = {'Ticker': self.fund_ticker, 'Price' : self.price, 'Year High' : self.year_high, 'Year Low' : self.year_low,
                'Market Cap.' : self.market_cap, 'Avg. Daily Volume' : self.ADV,  
                '50 Day Moving Avg.': self.mov_avg50, '200 Day Moving Avg.': self.mov_avg200, 'P/E Ratio' : self.pe_ratio,
                }  
        self.temp_df = pd.DataFrame(data = self.data, index=[0])
        self.temp_df = self.temp_df[['Ticker', 'Price', 'Year High', 'Year Low', 'Market Cap.',
                            'Avg. Daily Volume', '50 Day Moving Avg.', '200 Day Moving Avg.', 'P/E Ratio']]
        return self.temp_df
        
        
    def display_fund_data(self):
        '''Reads ticker symbols entered into GUI's plotting line edit, obtains fundamental data from Yahoo, displays data in FundamentalWidget''' 
        fund_ticker_text = str(self.leditPlotSymb.text())
        fund_tickers = fund_ticker_text.split(',')
        self.fundamental_df = pd.DataFrame()
        
        for self.fund_ticker in fund_tickers:
            self.fund_ticker = self.fund_ticker.strip().upper()
            self.temp_df = self.get_fund_data(self.fund_ticker) 
            self.fundamental_df = self.fundamental_df.append(self.temp_df)
        
        self.fund_window = FundamentalWidget(self.fundamental_df)
        self.fund_window.show()
   
        
    def show_predictions(self):
        '''Reads ticker symbols and dates entered into GUI's fields, makes Predictor object, displays results in PredictionWidget'''
        self.start_date = self.deditStartDate.date().toPyDate() 
        self.end_date = self.deditEndDate.date().toPyDate()
        self.last_train_date = self.deditLastTDate.date().toPyDate()
        
        future_date1 = self.dedit1stPDate.date().toPyDate()
        future_date2 = self.dedit2ndPDate.date().toPyDate()
        future_date3 = self.dedit3rdPDate.date().toPyDate()
        future_date4 = self.dedit4thPDate.date().toPyDate()
        self.future_dates = [future_date1, future_date2, future_date3, future_date4]
        
        future_num_day1 = self.sbox1stPDate.value()
        future_num_day2 = self.sbox2ndPDate.value()
        future_num_day3 = self.sbox3rdPDate.value()
        future_num_day4 = self.sbox4thPDate.value()
        self.future_num_days = [future_num_day1, future_num_day2, future_num_day3, future_num_day4]
        
        pred_ticker_text = str(self.leditEnterTickers.text())
        self.pred_tickers = pred_ticker_text.split(',')
        self.results_df = pd.DataFrame()
        
        for self.pred_ticker in self.pred_tickers:
            self.pred_ticker = self.pred_ticker.strip().upper()
            self.predictor = PricePredictor(self.start_date, self.end_date, self.last_train_date, 
                                        self.future_dates, self.future_num_days, self.pred_ticker)
            self.temp_df = self.predictor.make_predictions()
            self.results_df = self.results_df.append(self.temp_df)
        
        self.results_window = PredictionWidget(self.results_df)
        self.results_window.show()
        
    def display_plots(self):
        '''Reads ticks symbols from GUI's plotting line edit, retrieves data from Yahoo, plots data in PlotWidget'''
        plot_ticker_text = str(self.leditPlotSymb.text())
        plot_tickers = plot_ticker_text.split(',')
        self.start_date = self.deditStartDate.date().toPyDate() 
        self.end_date = self.deditEndDate.date().toPyDate()
        
        for self.plot_ticker in plot_tickers:
            self.plot_ticker = self.plot_ticker.strip().upper()
            self.yahoo_df = web.DataReader(self.plot_ticker, 'yahoo', self.start_date, self.end_date)
            self.plot_window = PlotWidget(self.yahoo_df, self.plot_ticker)
Exemplo n.º 26
0
def getNDaysAgo(N):
    date_N_days_ago = datetime.now() - timedelta(days=N)

    return str(date_N_days_ago.date())


fname = 'C:\dump\companylist.csv'
with open(fname) as f:
    content = csv.reader(f, delimiter=',')
    twentDay = getNDaysAgo(1)
    today = str(datetime.now().date())
    for line in content:
        if any(x not in line[0] for x in ['^', '$']):
            stock = Share(line[0])
            print line[0]
            print stock.get_name()
            print stock.get_50day_moving_avg()
            # print stock.get_200day_moving_avg()
            print stock.get_avg_daily_volume()
            pprint(stock.get_historical(twentDay, today))
        else:
            print line[0] + ' contains a special character******'

# yahoo = Share('WWW')
# print yahoo.get_name()
# print yahoo.get_open();
#
# print yahoo.get_50day_moving_avg();
#
# print yahoo.get_avg_daily_volume()
def relative_analysis_00_get_average_daily_volume(stock_name):
    # TODO: Error checking.
    stock = Share(stock_name)
    return stock.get_avg_daily_volume()
Exemplo n.º 28
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)
def main():
    count = 0  # Counter

    # Need this for Technical Analysis calculations
    curr = datetime.datetime.now()
    currYear = str(curr.year)
    currMonth = str(curr.month)
    currDay = str(curr.day)
    currDate = currYear + '-' + currMonth + '-' + currDay
    startDate = str(curr.year - 1) + '-' + currMonth + '-' + currDay

    contents = open('constituents.csv',
                    'r')  # Open constituents file for reading
    reader = csv.reader(contents)  # CSV reader object

    writeData = open('stockData.csv', 'w',
                     newline='')  # Open output data file in write mode
    writer = csv.writer(writeData)  # CSV writer object

    for row in reader:  # For each line in the constituents file
        try:
            ticker = Share(row[0])  # Share object with ticker symbol as input

            currPrice = ticker.get_price()  # Get currPrice (15 min delay)
            avgVol = ticker.get_avg_daily_volume()  # Get average volume
            cap = ticker.get_market_cap()  # Get market cap
            yearHigh = ticker.get_year_high()  # Get year high
            yearLow = ticker.get_year_low()  # Get year low
            ma50d = ticker.get_50day_moving_avg()  # 50 DMA
            ma200d = ticker.get_200day_moving_avg()  # 200 DMA

            dataList = numpy.array([])  # Create empty numpy array
            data = ticker.get_historical(
                startDate, currDate)  # Get historical data for 1 year
            data = data[::-1]  # Reverse data

            for item in data:
                dataList = numpy.append(dataList, float(
                    item['Close']))  # Add closing prices to list

            macd, macdsignal, macdhist = talib.MACD(
                dataList, fastperiod=12, slowperiod=26,
                signalperiod=9)  # Calculate MACD values
            rsi = talib.RSI(dataList, timeperiod=14)  # Calculate RSI value

            # Write data to stockData file
            writer.writerow([
                row[0], row[1], currPrice, avgVol, cap, yearLow, yearHigh,
                ma50d, ma200d, macd[-1], macdsignal[-1], macdhist[-1], rsi[-1]
            ])

        except:
            pass

        # Update screen with percent complete
        count = count + 1
        os.system('CLS')
        print((str(format(count / 504.0 * 100.0, '.2f')) + '%'))

    # Close CSV files
    writeData.close()
    contents.close()
Exemplo n.º 30
0
    }

    fund = Share(ETF)

    fields = {
        'name': fund.get_name(),
        'symbol': ETF,
        'last_trade': fund.get_price(),
        'dividend_yield': fund.get_dividend_yield(),
        'absolute_change': fund.get_change(),
        'percentage_change': fund.get_percent_change(),
        'year high': fund.get_year_high(),
        'year low': fund.get_year_low(),
        '50 day moving average': fund.get_50day_moving_avg(),
        '200 day moving average': fund.get_200day_moving_avg(),
        'average_daily_volume': fund.get_avg_daily_volume()
    }

    etf_dict['fields'] = fields
    etf_data.append(etf_dict)
json_data = json.dumps(etf_data)

# print(json_data)

output_dict = [y for y in etf_data if y['fields']['dividend_yield'] > 1]

output_dict = [
    x for x in output_dict if x['fields']['average_daily_volume'] > 100000
]

output_dict = [
Exemplo n.º 31
0
        ticker = ticker.rstrip()
        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
Exemplo n.º 32
0
            print(row_title)
        ticker = ticker.rstrip()
        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
Exemplo n.º 33
0
	if myargs.volume is True:
		volume = stock.get_volume()
		output.append(volume)
		selections.append('Volume: ')
		print output
		

	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()
Exemplo n.º 34
0
from Parser.models import EtfInfo, EtfData, StockInfo, StockDetail



etfResult = StockInfo.objects.values('ticker', 'name')

#for etfIdx in range(0, len(etfResult)) :
tickerStr = etfResult[0]['ticker']

share = Share(tickerStr)

dateStr = share.get_trade_datetime()[0:11].replace('-','')
ma_200Str = convert(share.get_200day_moving_avg())
ma_50Str = convert(share.get_50day_moving_avg())
book_valueStr = convert(share.get_book_value())
volume_avgStr = convert(share.get_avg_daily_volume())
ebitdaStr = convert(share.get_ebitda())
dividend_yieldStr = convert(share.get_dividend_yield())
market_capStr = convert(share.get_market_cap())
year_highStr = convert(share.get_year_high())
year_lowStr = convert(share.get_year_low())

print tickerStr, dateStr, ma_200Str, ma_50Str, book_valueStr, volume_avgStr, ebitdaStr, dividend_yieldStr, market_capStr, year_highStr, year_lowStr


# print share.get_change()
# print share.get_days_high()
# print share.get_days_low()
# print share.get_dividend_share()
# print share.get_info()
# print share.get_open()
Exemplo n.º 35
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.º 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)