def update_candle(n, tick, start_date, end_date): code = 'WSE/' + tick df = pdr.get_data_quandl(code, api_key='fHsXs9kzqak6UF1haCww', start=start_date, end=end_date) figure = { 'data': [ go.Candlestick(x=df.index, open=df['Open'], close=df['Close'], low=df['Low'], high=df['High'], increasing_line_color='lime', decreasing_line_color='red') ], 'layout': go.Layout(height=350, title='Candlestick chart for {}'.format(tick), plot_bgcolor='#434247', paper_bgcolor='#434247', yaxis={'gridcolor': '#35353b'}, xaxis={'gridcolor': '#35353b'}, font={'color': '#d8d8d8'}, margin=dict(t=30, b=0, l=60, r=60)) } return figure
def update_sharpe(n, ticks, tries, start_date, end_date): if len(ticks) >= 2: df = pd.DataFrame() ret_arr = np.zeros(tries) vol_arr = np.zeros(tries) sr_arr = np.zeros(tries) for name in ticks: tick = 'WSE/' + name df_tick = pdr.get_data_quandl(tick, api_key='fHsXs9kzqak6UF1haCww', start=start_date, end=end_date) df_tick.rename({'Close': name}, axis=1, inplace=True) df = df.join(df_tick[name], how='outer') logs = np.log(df / df.shift(-1)) all_weights = np.zeros((tries, len(logs.columns))) for i in range(tries): weights = np.array(np.random.random(len(logs.columns))) weights = weights / np.sum(weights) all_weights[i, :] = weights ret_arr[i] = np.sum(logs.mean() * weights * len(logs)) vol_arr[i] = np.sqrt( np.dot(weights.T, np.dot(logs.cov() * len(logs), weights))) sr_arr[i] = ret_arr[i] / vol_arr[i] weights_as_string = [] for weight in all_weights: weights_as_string.append(', '.join( str(round(i, 3)) for i in weight)) df = pd.DataFrame({ 'returns': ret_arr, 'volatility': vol_arr, 'sharpe': sr_arr, 'weights': weights_as_string }) figure = px.scatter(df, x='volatility', y='returns', color='sharpe', color_continuous_scale='RdPu_r', hover_data=['weights']) figure.update_traces(marker=dict(size=9, line=dict(width=1))) figure.update_layout(title='Portfolio allocation for {}'.format( ', '.join(ticks)), yaxis={'gridcolor': '#35353b'}, xaxis={'gridcolor': '#35353b'}, xaxis_title='Volatility', yaxis_title='Returns', plot_bgcolor='#434247', paper_bgcolor='#434247', margin=dict(t=40, b=30, l=60, r=60), font={'color': '#d8d8d8'}) return figure
def update_line(n, ticks, start_date, end_date): traces = [] for name, color in zip(ticks, colors): tick = 'WSE/' + name df = pdr.get_data_quandl(tick, api_key='fHsXs9kzqak6UF1haCww', start=start_date, end=end_date) traces.append({ 'x': df.index, 'y': df['Close'], 'name': name, 'mode': 'lines', 'line': dict(color=color) }) figure = { 'data': traces, 'layout': { 'height': 300, 'title': 'Stock chart for {}'.format(', '.join(ticks)), 'yaxis': { 'gridcolor': '#35353b' }, 'xaxis': { 'gridcolor': '#35353b' }, 'plot_bgcolor': '#434247', 'paper_bgcolor': '#434247', 'margin': dict(t=40, b=30, l=60, r=60), 'font': { 'color': '#d8d8d8' } } } return figure
def download_stock(symbol, start_date, end_date, save=True): stock = pdr.get_data_quandl(symbol, start_date, end_date) stock = stock[::-1] stock.columns = [s.lower() for s in stock.columns] stock = stock[['open', 'high', 'low', 'close', 'volume']] if save: name = symbol + '.csv' path = config.path_to_data + '/' + name stock.to_csv(path) return stock
def create_from_quandl(cls, instrument, *args, **kwargs): """ Загрузка данных через pandas_datareader is https://www.quandl.com """ df = pdr.get_data_quandl(instrument, api_key=os.environ.get('QUANDL_API_KEY'), *args, **kwargs) return cls.create_( instrument, df.index.values, df, **{ 'o': 'AdjOpen', 'h': 'AdjHigh', 'l': 'AdjLow', 'c': 'AdjClose', 'v': 'AdjVolume' })
def update_indices(n): rates = [] changes = [] traces = [] try: req = requests.get("https://stooq.pl/t/?i=528") soup = BeautifulSoup(req.text, 'html.parser') for index in indices: rates.append( float(soup.find(text=index).next_element.next_sibling.text)) try: changes.append( float( soup.find(text=index).next_element.next_sibling. next_sibling.next_sibling.text)) except: continue if len(changes) == len(indices): for number, index, rate, change in zip(range(len(indices)), indices, rates, changes): traces.append( go.Indicator(mode='number+delta', title=index, title_font_size=14, number_font_size=20, value=rate, delta={ 'reference': rate - change, 'relative': True, 'valueformat': '.2%' }, domain={ 'row': 1, 'column': number })) else: for number, index, rate in zip(range(len(indices)), indices, rates): traces.append( go.Indicator(mode='number', title=index, title_font_size=14, number_font_size=20, value=rate, domain={ 'row': 1, 'column': number })) figure = { 'data': traces, 'layout': go.Layout(grid={ 'rows': 1, 'columns': len(indices), 'pattern': "independent" }, margin=dict(t=30, b=0, l=0, r=0), plot_bgcolor='#35353b', paper_bgcolor='#35353b', font={'color': '#d8d8d8'}, height=70) } return figure except: try: inds = [ 'WIG', 'WIG20', 'MWIG40', 'SWIG80', 'WIG_ODZIEZ', 'WIG_LEKI' ] traces = [] for index, number in zip(inds, range(len(inds))): code = 'WSE/' + index df = pdr.get_data_quandl(code, api_key='fHsXs9kzqak6UF1haCww', start=datetime.today().date() - timedelta(days=5)) traces.append( go.Indicator(mode='number', title=index, title_font_size=14, number_font_size=20, value=df['Close'][0], domain={ 'row': 1, 'column': number })) figure = { 'data': traces, 'layout': go.Layout(grid={ 'rows': 1, 'columns': len(inds), 'pattern': "independent" }, margin=dict(t=30, b=0, l=0, r=0), plot_bgcolor='#35353b', paper_bgcolor='#35353b', font={'color': '#d8d8d8'}, height=70) } return figure except: figure = { 'data': [ go.Indicator( title='Could not connect to stooq to get index data', title_font_size=20, number_font_size=1) ], 'layout': go.Layout(plot_bgcolor='#35353b', paper_bgcolor='#35353b', font={'color': 'tomato'}, height=70) } return figure
def get_stock_quandl(stock): return DataFrame( pdr.get_data_quandl(stock, api_key="A83E-dJAdqmse9P-Tpng", session=session))
#import what tickers were being monitored on twitter tickers = open('TickersToTrack.txt').read().splitlines() #plot and to some analysis for tick in tickers: s = tick.lower() data = df[df.Stock == s] #plt.plot(data['Date'],data['Sentiment'],'-r') #plt.title(s) #plt.xlabel('Date') #plt.ylabel('Sentiment') #plot tickers with stock price startDate = datetime.datetime(2018, 2, 1) endDate = datetime.datetime(2018, 2, 5) #must be datetime.datetime(yyyy,mm,dd) # Import stock data using pandasreader try: dfstock = pdr.get_data_quandl(tick[1::], start=startDate, end=endDate) dfstock = dfstock.reindex( index=dfstock.index[::-1]) #flip index so 0th row is oldest date plt.plot(dfstock['Close'], data['Sentiment'], 'g-') plt.title('Close to Sentiment: ' + tick[1::]) plt.xlabel('Close') plt.ylabel('Sentiment') plt.show() except: print("Couldn't get data for ticker: " + tick[1::])
# scatter plot the data import pandas_datareader.data as web import pandas as pd import matplotlib.pyplot as plt import numpy as np from scipy.optimize import minimize start = '2017-04-22' end = '2018-04-22' from pandas_datareader import data, wb import pandas_datareader as pdr pdr.get_data_yahoo( 'AAPL', start=start, end=end) # if by default, returns 2009-2019, 2403 rows, daily stock data pdr.get_data_quandl('EOD/BA', start=start, end=end, api_key='DGCrDAbR7GMbx7v9wSCW') def get_risk(prices): return (prices / prices.shift(1) - 1).dropna().std().values def get_return(prices): return ((prices / prices.shift(1) - 1).dropna().mean() * np.sqrt(250)).values # symbols = ['BA', 'AAPL', 'BRK_A', 'MSFT'] symbols = ['BA', 'C', 'AAL', 'NFLX'] prices = pd.DataFrame(index=pd.date_range(start, end))
def data(ticker): return (pdr.get_data_quandl(ticker, start=startdate, end=enddate))
#pd.scatter_matrix(daily_pct_change, diagonal='kde', alpha=0.1,figsize=(12,12)) # this function is broken, use pd.plotting as pdp pdp.scatter_matrix(daily_pct_change, diagonal='kde', alpha=0.1,figsize=(12,12)) plt.savefig('all_data_quandl_4_scattermatrix.png') plt.show() ''' Moving Windows, when u compute the stats on window of data by a particular period of time, then slide the window across the data by a specific interval. Continually calculated as long as the window falls first within the dates of the time series. ''' #data = quandl.get('AAPL', authtoken='-VQTkx89BPNGVyjKvD1p') # from earlier reference (file1) aapl = pdr.get_data_quandl('AAPL', start=datetime.datetime(2006, 10, 1), end=datetime.datetime(2018, 1, 1)) #must use own data, can request 20 pulls per 10 min from quandl (uses AdjClose) #csv (uses Close) #aapl = pd.read_csv('aapl_ohlc.csv') adj_close_px_aapl = aapl['AdjClose'] # Calculate the moving average: # rolling_mean(window[, min_periods, ...]) 'Moving mean'. # rolling_std(arg, window[, min_periods, ...]) 'Moving standard deviation'. # rolling_max(arg, window[, min_periods, ...]) 'Moving max of 1d array of dtype=float64 along axis=0 ignoring NaNs'. # rolling_var(arg, window[, min_periods, ...]) 'Numerically stable implementation using Welford’s method'.
import pandas as pd import pandas_datareader as pdr pd.core.common.is_list_like = pd.api.types.is_list_like # 데이터프레임 저장 # www.quandl.com에 가입하여 api_key받기 tesla = pdr.get_data_quandl('TSLA', api_key='받은 키 입력~') # dataframe을 파일로 저장 tesla.to_csv('tesla_stock_quandl.csv') # date열을 datetime형으로 변환 tesla = pd.read_csv('tesla_stock_quandl.csv', parse_dates=[0]) # date열을 tesla dataframe의 인덱스로 저장 tesla.index = tesla['Date'] # 예시로 2015년의 데이터 추출 print(tesla['2015'].iloc[:5, :5]) # data열의 최솟값을 빼서 데이터 수집이후 시간흘렀는지 확인해보기 # 그 시간을 ref_date열로 추가 tesla['ref_date'] = tesla['Date'] - tesla['Date'].min() # ref_date열을 인덱스로 지정해서 최초 5일의 데이터 추출 tesla.index = tesla['ref_date'] print(tesla['5 days':].iloc[:5, :5])