Ejemplo n.º 1
0
def build_sector_fundamentals(sector):
    log.info("build_sector_fundamentals")
    '''
    In this method, for the given sector, we'll get the data we need for each stock
    in the sector from IEX. Once we have the data, we'll check that the earnings
    reports meet our criteria with `eps_good()`. We'll put stocks that meet those
    requirements into a dataframe along with all the data about them we'll need.
    '''
    stocks = get_sector(sector)
    if len(stocks) == 0:
        raise ValueError("Invalid sector name: {}".format(sector))

    # If we can't see its PE here, we're probably not interested in a stock.
    # Omit it from batch queries.
    stocks = [s for s in stocks if s['peRatio'] is not None]

    # IEX doesn't like batch queries for more than 100 symbols at a time.
    # We need to build our fundamentals info iteratively.
    batch_idx = 0
    batch_size = 99
    fundamentals_dict = {}
    while batch_idx < len(stocks):
        symbol_batch = [
            s['symbol'] for s in stocks[batch_idx:batch_idx + batch_size]
        ]
        stock_batch = Stock(symbol_batch)

        # Pull all the data we'll need from IEX.
        financials_json = stock_batch.get_financials()
        quote_json = stock_batch.get_quote()
        stats_json = stock_batch.get_key_stats()
        earnings_json = stock_batch.get_earnings()

        for symbol in symbol_batch:
            # We'll filter based on earnings first to keep our fundamentals
            # info a bit cleaner.
            if not eps_good(earnings_json[symbol]):
                continue

            # Make sure we have all the data we'll need for our filters for
            # this stock.
            if not data_quality_good(symbol, financials_json, quote_json,
                                     stats_json):
                continue

            fundamentals_dict[symbol] = get_fundamental_data_for_symbol(
                symbol, financials_json, quote_json, stats_json)

        batch_idx += batch_size
    # Transform all our data into a more filterable form - a dataframe - with
    # a bit of pandas magic.
    return pd.DataFrame.from_dict(fundamentals_dict).T
Ejemplo n.º 2
0
def index():
    if request.method == 'POST':  #this block is only entered when the form is submitted
        stock = request.form['symbol']
        symbol = Stock(stock)

        name = symbol.get_company_name() + " (" + str(stock) + ")\n\n"
        curr_time = now
        price = str(symbol.get_price()) + " " + str(
            symbol.get_quote().get('change')) + " (" + str(
                symbol.get_quote().get('changePercent')) + ")"

        return '''<title>Python Finance Info</title>
            <form method="POST">
                <h3>Python Finance Info</h3><br/>
                <i>Input:</i><br/><br/> 
                Enter a symbol <input type="text" name="symbol">
                <input type="submit" value="Submit"><br/><br/>
            </form>
            <i>Output: </i><br/><br/> {} <br/> {} <br/> {} </h5>'''.format(
            name, curr_time, price)

    return '''<title>Python Finance Info</title>
Ejemplo n.º 3
0
def pStock(symbol):
    priceCriteria = 5.00
    data = Stock(symbol)
    quote = data.get_quote()
    pe = quote['peRatio']
    close = quote['close']
    sts = data.get_key_stats()
    cName = sts['companyName']

    # apply criteria
    if close > priceCriteria:
        return

    # print the results for what is left
    print('%s,%s,%s,%s' % (symbol, cName, close, pe))
Ejemplo n.º 4
0
def get_stock_information(num):
    try:
        tickers = save_company_names()
        num = int(num)
        a = 0
        info = []
        append = info.append
        for i in tickers:
            if a < num:
                i = str(i)
                tick = i.replace("-", ".")
                firm = Stock('%s' % tick)
                quote = firm.get_quote()
                append(quote)
                #return()
            a += 1
        #print(info)
        return (info)
    except ValueError:
        print("Try again Value error in argument")
Ejemplo n.º 5
0
                                          1000)  # using the local timezone
print(your_dt.strftime("%Y-%m-%d %H:%M:%S"))

io.savemat('test.mat', {'struct': df})

[symbol, symbol500] = load_symbols()

#Stocks

#tsla = Stock(symbol500.ix[[1,2],'Symbol'].values.T.tolist(),output_format='pandas')
#tsla = Stock(symbol500.iloc[0:1,0].values.T.tolist(),output_format='pandas')
allkeys = {}
tsla = Stock('TSLA', output_format='pandas')
ohlc = tsla.get_ohlc()
ohlc.fillna(value=pd.np.nan, inplace=True)
quote = tsla.get_quote()
quote.fillna(value=pd.np.nan, inplace=True)
keys = tsla.get_key_stats()
keys.fillna(value=pd.np.nan, inplace=True)
financial = tsla.get_financials()
financial.fillna(value=pd.np.nan, inplace=True)
chart = tsla.get_chart()

allkeys['ohlc'] = ohlc.to_dict()
allkeys['quote'] = quote.to_dict()
allkeys['keys'] = keys.to_dict()
allkeys['financial'] = financial.to_dict()
allkeys['chart'] = chart
io.savemat('result.mat', {'tsPY': allkeys})

# Historical Data
Ejemplo n.º 6
0
class TestShareDefault(object):
    def setup_class(self):
        self.cshare = Stock("aapl")
        self.cshare2 = Stock("aapl", output_format='pandas')
        self.cshare3 = Stock("svxy")
        self.cshare4 = Stock("aapl",
                             json_parse_int=Decimal,
                             json_parse_float=Decimal)
        self.cshare5 = Stock("gig^")

    def test_invalid_symbol(self):
        data = Stock("BAD SYMBOL")
        with pytest.raises(IEXSymbolError):
            data.get_price()

    def test_get_all_format(self):
        data = self.cshare.get_all()
        assert isinstance(data, dict)

    def test_get_all(self):
        data = self.cshare.get_all()
        assert len(data) == 20

    def test_get_endpoints(self):
        data = self.cshare.get_endpoints(["price"])
        assert list(data) == ["price"]

    def test_get_endpoints_bad_endpoint(self):
        with pytest.raises(IEXEndpointError):
            self.cshare.get_endpoints(["BAD ENDPOINT", "quote"])

        with pytest.raises(IEXEndpointError):
            self.cshare.get_endpoints("BAD ENDPOINT")

    def test_get_book_format(self):
        data = self.cshare.get_book()
        assert isinstance(data, dict)

        data2 = self.cshare2.get_book()
        assert isinstance(data2, pd.DataFrame)

    def test_get_chart_format(self):
        data = self.cshare.get_chart()
        assert isinstance(data, list)

        data2 = self.cshare2.get_chart()
        assert isinstance(data2, list)

    def test_get_chart_params(self):
        data = self.cshare.get_chart()
        # Test chart ranges
        data2 = self.cshare.get_chart(range_='1y')
        assert 15 < len(data) < 35
        assert 240 < len(data2) < 260

        # Test chartSimplify
        data4 = self.cshare.get_chart(chartSimplify=True)[0]
        assert "simplifyFactor" in list(data4)

        data5 = self.cshare.get_chart(range_='1y', chartInterval=5)
        assert 45 < len(data5) < 55

    @pytest.mark.xfail(reason="This test only runs correctly between 00:00 and"
                       "09:30 EST")
    def test_get_chart_reset(self):
        # Test chartReset
        data3 = self.cshare.get_chart(range_='1d', chartReset=True)
        assert data3 == []

    def test_get_company_format(self):
        data = self.cshare.get_company()
        assert isinstance(data, dict)

        data2 = self.cshare2.get_company()
        assert isinstance(data2, pd.DataFrame)

    def test_get_delayed_quote_format(self):
        data = self.cshare.get_delayed_quote()
        assert isinstance(data, dict)

        data2 = self.cshare2.get_delayed_quote()
        assert isinstance(data2, pd.DataFrame)

    def test_get_dividends_format(self):
        data = self.cshare.get_dividends()
        assert isinstance(data, list)

        data2 = self.cshare2.get_dividends()
        assert isinstance(data2, list)

    def test_get_dividends_params(self):
        data = self.cshare.get_dividends()
        data2 = self.cshare.get_dividends(range_='2y')
        data3 = self.cshare.get_dividends(range_='5y')
        assert len(data) < len(data2) < len(data3)

    def test_get_earnings_format(self):
        data = self.cshare.get_earnings()
        assert isinstance(data, list)

        data2 = self.cshare2.get_earnings()
        assert isinstance(data2, pd.DataFrame)

        # Ensure empty list is returned for symbol with no earnings
        data3 = self.cshare5.get_earnings()
        assert isinstance(data3, list)

    def test_get_effective_spread_format(self):
        data = self.cshare.get_effective_spread()
        assert isinstance(data, list)

        data2 = self.cshare2.get_effective_spread()
        assert isinstance(data2, pd.DataFrame)

    def test_get_financials_format(self):
        data = self.cshare.get_financials()
        assert isinstance(data, list)

        data2 = self.cshare2.get_financials()
        assert isinstance(data2, pd.DataFrame)

        # Ensure empty list is returned even when ticker has no financials
        data3 = self.cshare5.get_financials()
        assert isinstance(data3, list)

    def test_get_key_stats_format(self):
        data = self.cshare.get_key_stats()
        assert isinstance(data, dict)

        data2 = self.cshare2.get_key_stats()
        assert isinstance(data2, pd.DataFrame)

    def test_get_largest_trades(self):
        data = self.cshare.get_largest_trades()
        assert isinstance(data, list)

        data2 = self.cshare2.get_largest_trades()
        assert isinstance(data2, pd.DataFrame)

    def test_get_logo_format(self):
        data = self.cshare.get_logo()
        assert isinstance(data, dict)

        data2 = self.cshare2.get_logo()
        assert isinstance(data2, pd.DataFrame)

    def test_get_news_format(self):
        data = self.cshare.get_news()
        assert isinstance(data, list)

    @pytest.mark.xfail(reason="Provider error. Awaiting patch.")
    def test_get_news_params(self):
        data = self.cshare.get_news(last=15)
        assert len(data) == 15

    def test_ohlc(self):
        data = self.cshare.get_ohlc()
        assert isinstance(data, dict)

        data2 = self.cshare2.get_ohlc()
        assert isinstance(data2, pd.DataFrame)

    def test_get_open_close_format(self):
        data = self.cshare.get_open_close()
        assert isinstance(data, dict)

        data2 = self.cshare2.get_open_close()
        assert isinstance(data2, pd.DataFrame)

    def test_get_peers_format(self):
        data = self.cshare.get_peers()
        assert isinstance(data, list)

        data2 = self.cshare2.get_peers()
        assert isinstance(data2, list)

    def test_get_previous_format(self):
        data = self.cshare.get_previous()
        assert isinstance(data, dict)

        data2 = self.cshare2.get_previous()
        assert isinstance(data2, pd.DataFrame)

    def test_get_price_format(self):
        data = self.cshare.get_price()
        assert isinstance(data, float)

        data2 = self.cshare2.get_price()
        assert isinstance(data2, pd.DataFrame)

        data4 = self.cshare4.get_price()
        assert isinstance(data4, Decimal)

    def test_get_quote_format(self):
        data = self.cshare.get_quote()
        assert isinstance(data, dict)

        data2 = self.cshare2.get_quote()
        assert isinstance(data2, pd.DataFrame)

    def test_get_quote_params(self):
        data = self.cshare.get_quote()
        data2 = self.cshare.get_quote(displayPercent=True)

        assert (abs(data2["ytdChange"]) > abs(data["ytdChange"]))

    def test_get_relevant_format(self):
        data = self.cshare.get_relevant()
        assert isinstance(data, dict)

        data2 = self.cshare2.get_relevant()
        assert isinstance(data2, pd.DataFrame)

    def test_get_splits_format(self):
        data = self.cshare3.get_splits()
        assert isinstance(data, list)

        data2 = self.cshare3.get_splits(range_="1y")
        assert isinstance(data2, list)

    def test_get_splits_params(self):
        data = self.cshare3.get_splits(range_="2y")
        data2 = self.cshare3.get_splits(range_="5y")
        assert len(data2) > len(data)

    def test_get_time_series(self):
        data = self.cshare.get_time_series()
        data2 = self.cshare.get_chart()
        assert data == data2

    def test_get_volume_by_venue_format(self):
        data = self.cshare.get_volume_by_venue()
        assert isinstance(data, list)

        data2 = self.cshare2.get_volume_by_venue()
        assert isinstance(data2, pd.DataFrame)

    def test_filter(self):
        data = self.cshare.get_quote(filter_='ytdChange')
        assert isinstance(data, dict)
        assert isinstance(data["ytdChange"], float)

        data4 = self.cshare4.get_quote(filter_='ytdChange')
        assert isinstance(data4, dict)
        assert isinstance(data4["ytdChange"], Decimal)
Ejemplo n.º 7
0
class TestBatchDefault(object):
    def setup_class(self):
        self.cbatch = Stock(["aapl", "tsla"])
        self.cbatch2 = Stock(["aapl", "tsla"], output_format='pandas')
        self.cbatch3 = Stock(["uvxy", "svxy"])

    def test_invalid_symbol_or_symbols(self):
        with pytest.raises(IEXSymbolError):
            a = Stock(["TSLA", "BAD SYMBOL", "BAD SYMBOL"])
            a.get_price()

    def test_get_endpoints(self):
        data = self.cbatch.get_endpoints(["price"])["AAPL"]
        assert list(data) == ["price"]

    def test_get_endpoints_bad_endpoint(self):
        with pytest.raises(IEXEndpointError):
            self.cbatch.get_endpoints(["BAD ENDPOINT", "quote"])

        with pytest.raises(IEXEndpointError):
            self.cbatch.get_endpoints("BAD ENDPOINT")

    def test_get_all(self):
        data = self.cbatch.get_all()
        assert len(data) == 2
        assert len(data["AAPL"]) == 20

    def test_get_all_format(self):
        data = self.cbatch.get_all()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_all()
        assert isinstance(data2["AAPL"], dict)

    def test_get_book_format(self):
        data = self.cbatch.get_book()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_book()
        assert isinstance(data2, pd.DataFrame)

    def test_get_chart_format(self):
        data = self.cbatch.get_chart()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_chart()
        assert isinstance(data2["AAPL"], list)

    def test_get_chart_params(self):
        data = self.cbatch.get_chart()["AAPL"]
        # Test chart range_s
        data2 = self.cbatch.get_chart(range_='1y')["AAPL"]
        assert 15 < len(data) < 35
        assert 240 < len(data2) < 260

        # Test chartSimplify
        data4 = self.cbatch.get_chart(chartSimplify=True)["AAPL"][0]
        assert "simplifyFactor" in list(data4)

        data5 = self.cbatch.get_chart(range_='1y', chartInterval=5)["AAPL"]
        assert 45 < len(data5) < 55

    @pytest.mark.xfail(reason="This test only works overnight")
    def test_get_chart_reset(self):
        # Test chartReset
        data = self.cbatch.get_chart(range_='1d', chartReset=True)
        assert data == []

    def test_get_company_format(self):
        data = self.cbatch.get_company()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_company()
        assert isinstance(data2, pd.DataFrame)

    def test_get_delayed_quote_format(self):
        data = self.cbatch.get_delayed_quote()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_delayed_quote()
        assert isinstance(data2, pd.DataFrame)

    def test_get_dividends_format(self):
        data = self.cbatch.get_dividends()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_dividends()
        assert isinstance(data2, dict)

    def test_get_dividends_params(self):
        data = self.cbatch.get_dividends()["AAPL"]
        data2 = self.cbatch.get_dividends(range_='2y')["AAPL"]
        data3 = self.cbatch.get_dividends(range_='5y')["AAPL"]
        assert len(data) < len(data2) < len(data3)

    def test_get_earnings_format(self):
        data = self.cbatch.get_earnings()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_earnings()
        assert isinstance(data2, pd.DataFrame)

    def test_get_effective_spread_format(self):
        data = self.cbatch.get_effective_spread()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_effective_spread()
        assert isinstance(data2, pd.DataFrame)

    def test_get_financials_format(self):
        data = self.cbatch.get_financials()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_financials()
        assert isinstance(data2, pd.DataFrame)

    def test_get_key_stats_format(self):
        data = self.cbatch.get_key_stats()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_key_stats()
        assert isinstance(data2, pd.DataFrame)

    def test_get_logo_format(self):
        data = self.cbatch.get_logo()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_logo()
        assert isinstance(data2, pd.DataFrame)

    def test_get_news_format(self):
        data = self.cbatch.get_news()
        assert isinstance(data, dict)

    def test_ohlc(self):
        data = self.cbatch.get_ohlc()
        assert isinstance(data, dict)

    def test_get_open_close_format(self):
        data = self.cbatch.get_open_close()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_open_close()
        assert isinstance(data2, pd.DataFrame)

    def test_get_peers_format(self):
        data = self.cbatch.get_peers()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_peers()
        assert isinstance(data2, dict)

    def test_get_previous_format(self):
        data = self.cbatch.get_previous()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_previous()
        assert isinstance(data2, pd.DataFrame)

    def test_get_price_format(self):
        data = self.cbatch.get_price()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_price()
        assert isinstance(data2, pd.DataFrame)

    def test_get_quote_format(self):
        data = self.cbatch.get_quote()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_quote()
        assert isinstance(data2, pd.DataFrame)

        data3 = self.cbatch.get_quote(displayPercent=True)
        assert (abs(data3["AAPL"]["ytdChange"]) > abs(
            data["AAPL"]["ytdChange"]))

    def test_get_relevant_format(self):
        data = self.cbatch.get_relevant()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_relevant()
        assert isinstance(data2, pd.DataFrame)

    def test_get_splits(self):
        data = self.cbatch.get_splits()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_splits()
        assert isinstance(data2, pd.DataFrame)

    def test_get_splits_params(self):
        data = self.cbatch3.get_splits(range_="2y")["SVXY"]
        data2 = self.cbatch3.get_splits(range_="5y")["SVXY"]
        assert len(data2) > len(data)

    def test_time_series(self):
        data = self.cbatch.get_time_series()
        data2 = self.cbatch.get_chart()
        assert data == data2

    def test_get_volume_by_venue_format(self):
        data = self.cbatch.get_volume_by_venue()
        assert isinstance(data, dict)

        data2 = self.cbatch2.get_volume_by_venue()
        assert isinstance(data2, pd.DataFrame)

    def test_get_select_ep_bad_params(self):
        with pytest.raises(ValueError):
            self.cbatch.get_endpoints()

        with pytest.raises(IEXEndpointError):
            self.cbatch.get_endpoints("BADENDPOINT")
Ejemplo n.º 8
0
 def test_listed_crypto_symbols(self):
     a = Stock(self.ticks)
     assert isinstance(a.get_quote(), dict)
Ejemplo n.º 9
0
def hist_prices(stock,start,end,pull_years=1):

	#global f, row, f_short, ohlc, ohlc_vol, data_years, avg_volume, env_percent, ax_max, kris_index, f_reg
	stock = stock.upper()
	try:
		f = data.DataReader(stock, 'iex', start, end)
	except:
		print("ignore this stock---------------")
		#raise
	row, col = f.shape
	now=dt.datetime.now()
	end = datetime(now.year, now.month, now.day)
	if f.index[row-1] != end:
		stock_quote=Stock(stock)
		try:
			stock_pd=stock_quote.get_quote()
		except:
			print("ignore todays prices----------")
			#raise
		stock_date = stock_pd['latestTime']
		stock_date = str(parser.parse(stock_date))[0:10]
		stock_date = pd.to_datetime(stock_date)
		if stock_date == end:
			stock_open = stock_pd['open']
			stock_high = stock_pd['high']
			stock_low = stock_pd['low']
			stock_close = stock_pd['close']
			stock_volume = stock_pd['latestVolume']
			
			f_day = {'open':[stock_open],'high':[stock_high],'low':[stock_low],'close':[stock_close],'volume':[stock_volume]}
			date_index = pd.date_range(stock_date,periods=1, freq='D')
			f_day = pd.DataFrame(data=f_day, index=date_index)
			f_day.index.name = 'date'
			f = f.append(f_day.ix[0])
	
	f = f.set_index(pd.to_datetime(f.index))
	data_years = row - int(round(253*pull_years,0))
	f['date'] = f.index.map(mdates.date2num)
	
	# calculate MACD parameters
	f['ema26'] = f['close'].ewm(span=26,adjust=False).mean()
	f['ema12'] = f['close'].ewm(span=12,adjust=False).mean()
	f['daily_black'] = f['ema12'] - f['ema26']
	f['daily_red'] = f['daily_black'].ewm(span=18,adjust=False).mean()
	f['ema60'] = f['close'].ewm(span=60,adjust=False).mean()
	f['ema130'] = f['close'].ewm(span=130,adjust=False).mean()
	f['weekly_black'] = f['ema60'] - f['ema130']
	f['weekly_red'] = f['weekly_black'].ewm(span=45,adjust=False).mean()

	env_percent = .04
	f['fit_env'] = 0
	while f['fit_env'].mean() <= .9:
		f['ema26_highenv'] = f['ema26']*(1 + env_percent)
		f['ema26_lowenv'] = f['ema26']*(1 - env_percent)
		f['fit_env'] = np.where((f['ema26_highenv'] >= f['high']) & (f['ema26_lowenv'] <= f['low']),1,0)
		env_percent += .005
	
	ax_max = abs(f['weekly_black'][data_years:].max()*1.05)
	if abs(f['weekly_black'][data_years:].min()*1.05) > ax_max:
		ax_max = abs(f['weekly_black'][data_years:].min()*1.05)
	elif abs(f['weekly_red'][data_years:].max()*1.05)  > ax_max:
		ax_max = abs(f['weekly_red'][data_years:].max()*1.05)
	elif abs(f['weekly_red'][data_years:].min()*1.05)  > ax_max:
		ax_max = abs(f['weekly_red'][data_years:].max()*1.05)
	
	if row > 6:
		kris_index = ((f.ix[row-1]['weekly_black']-f.ix[row-5]['weekly_black'])/4)/ax_max
	else:
		kris_index = 0
	
	pd.options.mode.chained_assignment = None
	f['obv_volume'] = 0
	f['obv_volume'][0] = f['volume'][0]
	for i in range(1, row):
		if f['close'][i] > f['close'][i-1]:
			f['obv_volume'][i] = f['obv_volume'][i-1] + f['volume'][i]
		elif f['close'][i] < f['close'][i-1]:
			f['obv_volume'][i] = f['obv_volume'][i-1] - f['volume'][i]
		else:
			f['obv_volume'][i] = f['obv_volume'][i-1]
	
	f['volume'] = f['volume']/f['volume'].max()
	f['obv_volume'] = f['obv_volume']/f['obv_volume'].max()
	
	avg_volume = f['volume'][row-10:].mean()
	f['close_from_top_env'] = f['ema26_highenv']-f['close']
	if row > 5:
		f['weekly_black_deriv'] = np.gradient(f['weekly_black'])
		f['weekly_black_deriv'] = f['weekly_black_deriv'].ewm(span=8,adjust=False).mean()
		f['weekly_black_deriv'] = f['weekly_black_deriv']/f['weekly_black_deriv'].max()
		f['weekly_red_deriv'] = np.gradient(f['weekly_red'])
		f['weekly_red_deriv'] = f['weekly_red_deriv'].ewm(span=8,adjust=False).mean()
		f['weekly_red_deriv'] = f['weekly_red_deriv']/f['weekly_red_deriv'].max()
		
	f['decision']=0
	f['stock-name']=stock
	f['performance']=0
	
	f_short = f[data_years:]

	f_reg = f[data_years:]
	row, col = f_reg.shape
	f_reg['open'] = f_reg['open']/f_reg['open'].max()
	f_reg['high'] = f_reg['high']/f_reg['high'].max()
	f_reg['low'] = f_reg['low']/f_reg['low'].max()
	f_reg['close'] = f_reg['close']/f_reg['close'].max()
	f_reg['ema26'] = f_reg['close'].ewm(span=26,adjust=False).mean()
	f_reg['ema12'] = f_reg['close'].ewm(span=12,adjust=False).mean()
	f_reg['daily_black'] = f_reg['daily_black']/f_reg['daily_black'].max()
	f_reg['daily_red'] = f_reg['daily_red']/f_reg['daily_red'].max()
	f_reg['ema60'] = f_reg['close'].ewm(span=60,adjust=False).mean()
	f_reg['ema130'] = f_reg['close'].ewm(span=130,adjust=False).mean()
	f_reg['weekly_black'] = f_reg['weekly_black']/f_reg['weekly_black'].max()
	f_reg['weekly_red'] = f_reg['weekly_red']/f_reg['weekly_red'].max()
	env_percent = .04
	f_reg['fit_env'] = 0
	while f_reg['fit_env'].mean() <= .9:
		f_reg['ema26_highenv'] = f_reg['ema26']*(1 + env_percent)
		f_reg['ema26_lowenv'] = f_reg['ema26']*(1 - env_percent)
		f_reg['fit_env'] = np.where((f_reg['ema26_highenv'] >= f_reg['high']) & (f_reg['ema26_lowenv'] <= f_reg['low']),1,0)
		env_percent += .0005
	ax_max = abs(f_reg['weekly_black'].max()*1.05)
	if abs(f_reg['weekly_black'].min()*1.05) > ax_max:
		ax_max = abs(f_reg['weekly_black'].min()*1.05)
	elif abs(f_reg['weekly_red'].max()*1.05)  > ax_max:
		ax_max = abs(f_reg['weekly_red'].max()*1.05)
	elif abs(f_reg['weekly_red'].min()*1.05)  > ax_max:
		ax_max = abs(f_reg['weekly_red'].max()*1.05)
	if row > 6:
		kris_index = ((f_reg.ix[row-1]['weekly_black']-f_reg.ix[row-5]['weekly_black'])/4)/ax_max
	else:
		kris_index = 0
	pd.options.mode.chained_assignment = None
	f_reg['obv_volume'] = 0
	f_reg['obv_volume'][0] = f_reg['volume'][0]
	for i in range(1, row):
		if f_reg['close'][i] > f_reg['close'][i-1]:
			f_reg['obv_volume'][i] = f_reg['obv_volume'][i-1] + f_reg['volume'][i]
		elif f['close'][i] < f['close'][i-1]:
			f_reg['obv_volume'][i] = f_reg['obv_volume'][i-1] - f_reg['volume'][i]
		else:
			f_reg['obv_volume'][i] = f_reg['obv_volume'][i-1]
	f_reg['volume'] = f_reg['volume']/f_reg['volume'].max()
	f_reg['obv_volume'] = f_reg['obv_volume']/f_reg['obv_volume'].max()
	avg_volume = f_reg['volume'][row-10:].mean()
	f_reg['close_from_top_env'] = f_reg['ema26_highenv']-f_reg['close']
	if row > 5:
		f_reg['weekly_black_deriv'] = np.gradient(f_reg['weekly_black'])
		f_reg['weekly_black_deriv'] = f_reg['weekly_black_deriv'].ewm(span=8,adjust=False).mean()
		f_reg['weekly_black_deriv'] = f_reg['weekly_black_deriv']/f_reg['weekly_black_deriv'].max()
		f_reg['weekly_red_deriv'] = np.gradient(f_reg['weekly_red'])
		f_reg['weekly_red_deriv'] = f_reg['weekly_red_deriv'].ewm(span=8,adjust=False).mean()
		f_reg['weekly_red_deriv'] = f_reg['weekly_red_deriv']/f_reg['weekly_red_deriv'].max()
Ejemplo n.º 10
0
# look at AA (Alcoa?)
aa = Stock('AA')
eps = aa.get_latest_eps()
pri = aa.get_price()
print('AA: latest EPS %f, current price %f' % (eps, pri))

# show symbols and company name for each
# for s in symbols:
#   if s['isEnabled'] == True: print(s['symbol'] + ', ' + s['name'])

# Apple
apple = Stock('AAPL')
apple.get_key_stats()
apple.get_volume()
apple.get_earnings()
apple.get_quote()
apple.get_quote()['peRatio']
apple.get_quote()['close']


def pStock(symbol):
    priceCriteria = 5.00
    data = Stock(symbol)
    quote = data.get_quote()
    pe = quote['peRatio']
    close = quote['close']
    sts = data.get_key_stats()
    cName = sts['companyName']

    # apply criteria
    if close > priceCriteria: