def save_all_indicators(stock_name): ''' Saves everything to local .csv files with corresponding name @DEV NOTE: can only process any 5 of them, the other 2 will encounter unexpected error :param stock_name: :return: None ''' ti = TechIndicators(key=Env.alpha_vantage_api_key, output_format='pandas') d, _ = ti.get_cci(symbol=stock_name, interval='daily', time_period=60) d.to_csv(stock_name + '_CCI.csv', index=True, sep=',') d, _ = ti.get_rsi(symbol=stock_name, interval='daily', series_type='close', time_period='60') d.to_csv(stock_name + '_RSI.csv', index=True, sep=',') d, _ = ti.get_stoch(symbol=stock_name, interval='daily') d.to_csv(stock_name + '_stoch.csv', index=True, sep=',') d, _ = ti.get_macd(symbol=stock_name, interval='daily', series_type='close') d.to_csv(stock_name + '_MACD.csv', index=True, sep=',') d, _ = ti.get_obv(symbol=stock_name, interval='daily') d.to_csv(stock_name + '_OBV.csv', index=True, sep=',') d, _ = ti.get_ema(symbol=stock_name, interval='daily', series_type='close') d.to_csv(stock_name + '_EMA.csv', index=True, sep=',') d, _ = ti.get_roc(symbol=stock_name, interval='daily', time_period=60, series_type='close') d.to_csv(stock_name + '_ROC.csv', index=True, sep=',')
def get_data(symbol): # Technical Indicators ti = TechIndicators(key='YOUR_API_KEY', output_format='pandas') sma, _ = ti.get_sma(symbol=symbol, interval='daily') wma, _ = ti.get_wma(symbol=symbol, interval='daily') ema, _ = ti.get_ema(symbol=symbol, interval='daily') macd, _ = ti.get_macd(symbol=symbol, interval='daily') stoch, _ = ti.get_stoch(symbol=symbol, interval='daily') rsi, _ = ti.get_rsi(symbol=symbol, interval='daily') adx, _ = ti.get_adx(symbol=symbol, interval='daily') cci, _ = ti.get_cci(symbol=symbol, interval='daily') aroon, _ = ti.get_aroon(symbol=symbol, interval='daily') bbands, _ = ti.get_bbands(symbol=symbol, interval='daily') ad, _ = ti.get_ad(symbol=symbol, interval='daily') obv, _ = ti.get_obv(symbol=symbol, interval='daily') mom, _ = ti.get_mom(symbol=symbol, interval='daily') willr, _ = ti.get_willr(symbol=symbol, interval='daily') tech_ind = pd.concat([sma, ema, macd, stoch, rsi, adx, cci, aroon, bbands, ad, obv, wma, mom, willr], axis=1) ts = TimeSeries(key='YOUR_API_KEY', output_format='pandas') close = ts.get_daily(symbol=symbol, outputsize='full')[0]['close'] # compact/full direction = (close > close.shift()).astype(int) target = direction.shift(-1).fillna(0).astype(int) target.name = 'target' data = pd.concat([tech_ind, close, target], axis=1) return data
def get_daily_technical(stock, indicator, API_key, period=-1): ti = TechIndicators(key=API_key, output_format='pandas') if indicator == "bband": if (period <= 0): period = 20 data, meta_data = ti.get_bbands(symbol=stock, interval='daily', time_period=period) elif indicator == "macd": data, meta_data = ti.get_macd(symbol=stock, interval='daily') elif indicator == "rsi": if (period <= 0): period = 14 data, meta_data = ti.get_rsi(symbol=stock, interval='daily', time_period=period) elif indicator == "cci": if (period <= 0): period = 20 data, meta_data = ti.get_cci(symbol=stock, interval='daily', time_period=period) elif indicator == "aroon": if (period <= 0): period = 14 data, meta_data = ti.get_aroon(symbol=stock, interval='daily', time_period=period) elif indicator == "ad": data, meta_data = ti.get_ad(symbol=stock, interval='daily') elif indicator == "adx": if (period <= 0): period = 20 data, meta_data = ti.get_adx(symbol=stock, interval='daily', time_period=period) elif indicator == "sma": if (period <= 0): period = 40 data, meta_data = ti.get_sma(symbol=stock, interval='daily', time_period=period) else: sys.exit('Failed to input a valid indicator') return data, meta_data
def get_data(symbol): print 'Getting data' # Technical Indicators ti = TechIndicators(key='4BTFICZGTPWZRRQS', output_format='pandas') sma, _ = ti.get_sma(symbol=symbol, interval='daily') wma, _ = ti.get_wma(symbol='SPX', interval='daily') ema, _ = ti.get_ema(symbol=symbol, interval='daily') macd, _ = ti.get_macd(symbol=symbol, interval='daily') stoch, _ = ti.get_stoch(symbol=symbol, interval='daily') rsi, _ = ti.get_rsi(symbol=symbol, interval='daily') adx, _ = ti.get_adx(symbol=symbol, interval='daily') cci, _ = ti.get_cci(symbol=symbol, interval='daily') aroon, _ = ti.get_aroon(symbol=symbol, interval='daily') bbands, _ = ti.get_bbands(symbol='SPX', interval='daily') ad, _ = ti.get_ad(symbol='SPX', interval='daily') obv, _ = ti.get_obv(symbol='SPX', interval='daily') mom, _ = ti.get_mom(symbol='SPX', interval='daily') willr, _ = ti.get_willr(symbol='SPX', interval='daily') tech_ind = pd.concat([sma, ema, macd, stoch, rsi, adx, cci, aroon, bbands, ad, obv, wma, mom, willr], axis=1) print 'Getting time series' ts = TimeSeries(key='4BTFICZGTPWZRRQS', output_format='pandas') close = ts.get_daily(symbol=symbol, outputsize='full')[0].rename(columns={'4. close': 'close'})['close'] direction = (close > close.shift()).astype(int) target = direction.shift(-1).fillna(0).astype(int) target.name = 'target' data = pd.concat([tech_ind, close, target], axis=1) return data
def get_alpha(ticker_list, alpha_key): ''' Input: ticker_list: list of strings of publicly traded companies symbols, 'XYZ' alpha_key: get alpha vantage API key from alpha vantage website Output: build CSV files of stock price history, and technical indicators for each company ''' ts = TimeSeries(key=alpha_key, output_format='pandas') ti = TechIndicators(key=alpha_key, output_format='pandas') zero_time = time() # Build CSV for Daily prices, RSI, CCI, OBV for each company for ticker in ticker_list: print('company: {}, time: {}'.format(ticker, str(time() - zero_time))) df, meta = ts.get_daily(symbol=ticker, outputsize='full') df.to_csv('data/daily/{}.csv'.format(ticker)) sleep(1) df, meta = ti.get_rsi(ticker, interval='daily', time_period=5) df.to_csv('data/rsi/{}.csv'.format(ticker)) sleep(1) df, meta = ti.get_cci(ticker, interval='daily', time_period=5) df.to_csv('data/cci/{}.csv'.format(ticker)) sleep(1) df, meta = ti.get_obv(ticker, interval='daily') df.to_csv('data/obv/{}.csv'.format(ticker))
def CCI(stock_name): ''' Commodity Channel Index (顺势指标) https://en.wikipedia.org/wiki/Commodity_channel_index https://baike.baidu.com/item/%E9%A1%BA%E5%8A%BF%E6%8C%87%E6%A0%87/976711 ''' ti = TechIndicators(key=Env.alpha_vantage_api_key, output_format='pandas') data, meta_data = ti.get_cci(symbol=stock_name, interval='daily', time_period=60) # data.to_csv(stock_name + '_CCI indicator.csv', index=True, sep=',') return data.to_json(orient='split')
def get_data(symbol): # API KEY: 51N1JMO66W56AYA3 ti = TechIndicators(key='51N1JMO66W56AYA3', output_format='pandas') sma, _ = ti.get_sma(symbol=symbol, interval='daily') wma, _ = ti.get_wma(symbol=symbol, interval='daily') ema, _ = ti.get_ema(symbol=symbol, interval='daily') macd, _ = ti.get_macd(symbol=symbol, interval='daily') stoch, _ = ti.get_stoch(symbol=symbol, interval='daily') # Alpha Vantage Times out for more than 5 request time.sleep(65) rsi, _ = ti.get_rsi(symbol=symbol, interval='daily') adx, _ = ti.get_adx(symbol=symbol, interval='daily') cci, _ = ti.get_cci(symbol=symbol, interval='daily') aroon, _ = ti.get_aroon(symbol=symbol, interval='daily') bbands, _ = ti.get_bbands(symbol=symbol, interval='daily') time.sleep(65) ad, _ = ti.get_ad(symbol=symbol, interval='daily') obv, _ = ti.get_obv(symbol=symbol, interval='daily') mom, _ = ti.get_mom(symbol=symbol, interval='daily') willr, _ = ti.get_willr(symbol=symbol, interval='daily') time.sleep(65) tech_ind = pd.concat([ sma, ema, macd, rsi, adx, cci, aroon, bbands, ad, obv, wma, mom, willr, stoch ], axis=1) ts = TimeSeries(key='51N1JMO66W56AYA3', output_format='pandas') close2 = ts.get_daily(symbol=symbol, outputsize='full') close = ts.get_daily(symbol=symbol, outputsize='full')[0]['4. close'] direction = (close > close.shift()).astype(int) target = direction.shift(-1).fillna(0).astype(int) target.name = 'target' data = pd.concat([tech_ind, close, target], axis=1) return data
def data_to_csv(ticker, dire): # Your key here - keep it - not an issue, free key = '6LGG0QGAGBROB2M6' # make the directory if it doesn't exist if os.path.isdir(dire) == False: os.mkdir(ticker) os.mkdir(dire) ts = TimeSeries(key=key, output_format='pandas') ti = TechIndicators(key=key, output_format='pandas') ### PRICE ############################################################### intra, meta = ts.get_intraday(symbol=ticker, interval='1min', outputsize='full') intra.to_csv(dire + ticker + "_prices.csv") ### SMA ################################################################# sma8, meta = ti.get_sma(symbol=ticker, interval='1min', time_period=8) sma8.to_csv(dire + ticker + "_sma8.csv") ### EMA ################################################################# ema8, meta = ti.get_ema(symbol=ticker, interval='1min', time_period=8) ema8.to_csv(dire + ticker + "_ema8.csv") ### VWAP ################################################################ vwap, meta = ti.get_vwap(symbol=ticker, interval='1min') vwap.to_csv(dire + ticker + "_vwap.csv") ### MACD ################################################################ macd, meta = ti.get_macd(symbol=ticker, interval='1min') macd.to_csv(dire + ticker + "_macd.csv") # they limit user to 5 calls per minute and 500 per day for free access # print("waiting so we don't overload API (60 seconds...)") time.sleep(60) ### STOCH ############################################################### stoch, meta = ti.get_stoch(symbol=ticker, interval='1min') stoch.to_csv(dire + ticker + "_stoch.csv") ### RSI ################################################################# rsi, meta = ti.get_rsi(symbol=ticker, interval='1min', time_period=60) rsi.to_csv(dire + ticker + "_rsi.csv") ### ADX ################################################################# adx, meta = ti.get_adx(symbol=ticker, interval='1min', time_period=60) adx.to_csv(dire + ticker + "_adx.csv") ### CCI ################################################################# cci, meta = ti.get_cci(symbol=ticker, interval='1min', time_period=60) cci.to_csv(dire + ticker + "_cci.csv") # TODO: These are tricky, several lines, parse differently, separate indices really ### AROON ############################################################### aroon, meta = ti.get_aroon(symbol=ticker, interval='1min', time_period=60) aroon.to_csv(dire + ticker + "_aroon.csv") # they limit user to 5 calls per minute and 500 per day for free access # print("waiting so we don't overload API (60 seconds...)") time.sleep(60) ### BBANDS ############################################################### bbands, meta = ti.get_bbands(symbol=ticker, interval='1min', time_period=60) bbands.to_csv(dire + ticker + "_bbands.csv") '''
def stockIndicators(self): ti = TechIndicators(key=self.apiKey, output_format='pandas') if (self.stockIndi == "sma"): ts = TimeSeries(key=self.apiKey, output_format='pandas') data, meta_data = ts.get_monthly(symbol=self.stockName) dataIndi, meta_dataIndi = ti.get_sma(symbol=self.stockName, time_period=30) elif (self.stockIndi == "ema"): ts = TimeSeries(key=self.apiKey, output_format='pandas') data, meta_data = ts.get_monthly(symbol=self.stockName) dataIndi, meta_dataIndi = ti.get_ema(symbol=self.stockName, time_period=30) elif (self.stockIndi == "vwap"): ts = TimeSeries(key=self.apiKey, output_format='pandas') data, meta_data = ts.get_monthly(symbol=self.stockName) dataIndi, meta_dataIndi = ti.get_vwap(symbol=self.stockName, time_period=30) elif (self.stockIndi == "macd"): ts = TimeSeries(key=self.apiKey, output_format='pandas') data, meta_data = ts.get_monthly(symbol=self.stockName) dataIndi, meta_dataIndi = ti.get_macd(symbol=self.stockName, time_period=30) elif (self.stockIndi == "obv"): ts = TimeSeries(key=self.apiKey, output_format='pandas') data, meta_data = ts.get_monthly(symbol=self.stockName) dataIndi, meta_dataIndi = ti.get_obv(symbol=self.stockName, time_period=30) elif (self.stockIndi == "ad"): ts = TimeSeries(key=self.apiKey, output_format='pandas') data, meta_data = ts.get_monthly(symbol=self.stockName) dataIndi, meta_dataIndi = ti.get_ad(symbol=self.stockName, time_period=30) elif (self.stockIndi == "bbands"): ts = TimeSeries(key=self.apiKey, output_format='pandas') data, meta_data = ts.get_monthly(symbol=self.stockName) dataIndi, meta_dataIndi = ti.get_bbands(symbol=self.stockName, time_period=30) elif (self.stockIndi == "aroon"): ts = TimeSeries(key=self.apiKey, output_format='pandas') data, meta_data = ts.get_monthly(symbol=self.stockName) dataIndi, meta_dataIndi = ti.get_aroon(symbol=self.stockName, time_period=30) elif (self.stockIndi == "cci"): ts = TimeSeries(key=self.apiKey, output_format='pandas') data, meta_data = ts.get_monthly(symbol=self.stockName) dataIndi, meta_dataIndi = ti.get_cci(symbol=self.stockName, time_period=30) elif (self.stockIndi == "adx"): ts = TimeSeries(key=self.apiKey, output_format='pandas') data, meta_data = ts.get_monthly(symbol=self.stockName) dataIndi, meta_dataIndi = ti.get_adx(symbol=self.stockName, time_period=30) elif (self.stockIndi == "rsi"): ts = TimeSeries(key=self.apiKey, output_format='pandas') data, meta_data = ts.get_monthly(symbol=self.stockName) dataIndi, meta_dataIndi = ti.get_rsi(symbol=self.stockName, time_period=30) elif (self.stockIndi == "stoch"): ts = TimeSeries(key=self.apiKey, output_format='pandas') data, meta_data = ts.get_monthly(symbol=self.stockName) dataIndi, meta_dataIndi = ti.get_stoch(symbol=self.stockName, time_period=30) return data, dataIndi
def get_daily_history(token_1, symbol, amount_of_entries=1000): ts_1 = TimeSeries(key=token_1, output_format='pandas') ti_1 = TechIndicators(key=token_1, output_format='pandas') print('get_daily_history') interval = 'daily' series_type = 'open' # Fetch dataset from api # OHLC series #1 time_series, meta_time_series = ts_1.get_daily(symbol=symbol, outputsize='full') # Bollinger Bands #2 bbands, meta = ti_1.get_bbands(symbol=symbol, interval=interval, time_period=60, series_type=series_type) bbands = bbands.sort_index(ascending=False) # SMA10 or MA10 #3 sma_10, meta = ti_1.get_sma(symbol=symbol, interval=interval, time_period=10, series_type=series_type) sma_10 = sma_10.sort_index(ascending=False) # SMA5 or MA5 #4 sma_5, meta = ti_1.get_sma(symbol=symbol, interval=interval, time_period=5, series_type=series_type) sma_5 = sma_5.sort_index(ascending=False) # ROC #5 roc_20, meta = ti_1.get_roc(symbol=symbol, interval=interval, time_period=20, series_type=series_type) roc_20 = roc_20.sort_index(ascending=False) # Wait 70 seconds print('waiting 70 seconds'); sleep(70) # MACD #1 macd, meta = ti_1.get_macd(symbol=symbol, interval=interval, series_type=series_type) macd = macd.sort_index(ascending=False) # CCI #2 cci_20, meta = ti_1.get_cci(symbol=symbol, interval=interval, time_period=20) cci_20 = cci_20.sort_index(ascending=False) # ATR #3 atr_20, meta = ti_1.get_atr(symbol=symbol, interval=interval, time_period=20) atr_20 = atr_20.sort_index(ascending=False) # EMA20 #4 ema_20, meta = ti_1.get_ema(symbol=symbol, interval=interval, time_period=20, series_type=series_type) ema_20 = ema_20.sort_index(ascending=False) # MTM6 #5 mtm_6, meta = ti_1.get_mom(symbol=symbol, interval=interval, time_period=180, series_type=series_type) mtm_6 = mtm_6.sort_index(ascending=False) # Wait 70 seconds print('waiting 70 seconds'); sleep(70) # MTM12 #1 mtm_12, meta = ti_1.get_mom(symbol=symbol, interval=interval, time_period=360, series_type=series_type) mtm_12 = mtm_12.sort_index(ascending=False) # Get last n data points in the dataset and set your respective column name d1 = time_series[:amount_of_entries]; d1.columns = ['open', 'high', 'low', 'close', 'volume'] d2 = sma_10[:amount_of_entries] d2.columns = ['sma10'] d3 = sma_5[:amount_of_entries] d3.columns = ['sma5'] d4 = pd.DataFrame(bbands['Real Middle Band'][:amount_of_entries]) d4.columns = ['bbands'] d5 = roc_20[:amount_of_entries] d5.columns = ['roc'] d6 = pd.DataFrame(macd['MACD'][:amount_of_entries]) d6.columns = ['macd'] d7 = cci_20[:amount_of_entries] d7.columns = ['cci'] d8 = atr_20[:amount_of_entries] d8.columns = ['atr'] d9 = ema_20[:amount_of_entries] d9.columns = ['ema20'] d10 = mtm_6[:amount_of_entries] d10.columns = ['mtm6'] d11 = mtm_12[:amount_of_entries] d11.columns = ['mtm12'] # Merge elements merged = d1.merge(d2, left_index=True, right_index=True) merged = merged.merge(d3, left_index=True, right_index=True) merged = merged.merge(d4, left_index=True, right_index=True) merged = merged.merge(d5, left_index=True, right_index=True) merged = merged.merge(d6, left_index=True, right_index=True) merged = merged.merge(d7, left_index=True, right_index=True) merged = merged.merge(d8, left_index=True, right_index=True) merged = merged.merge(d9, left_index=True, right_index=True) merged = merged.merge(d10, left_index=True, right_index=True) merged = merged.merge(d11, left_index=True, right_index=True) sep = os.path.sep filename = 'datasets'+sep+'history_'+symbol+'.csv' merged.to_csv(filename, index=True) return merged, meta_time_series
sma, meta_data_sma = ti.get_sma(symbol=stock, interval=t_period, series_type= series_type) print sma.shape #5 rsi, meta_data_rsi = ti.get_rsi(symbol=stock, interval=t_period, series_type= series_type) print rsi.shape #6 macd, meta_data_macd = ti.get_macd(symbol=stock,interval=t_period, series_type= series_type) print macd.shape #7 stoch, meta_data_stoch = ti.get_stoch(symbol=stock, interval=t_period) print stoch.shape #8 adx, meta_data_adx = ti.get_adx(symbol=stock, interval=t_period) print adx.shape #9 cci, meta_data_cci = ti.get_cci(symbol=stock, interval=t_period) print cci.shape #10 aroon, meta_data_aroon = ti.get_aroon(symbol=stock, interval=t_period, series_type=series_type) print aroon.shape #11 ad, meta_data_ad = ti.get_ad(symbol=stock, interval=t_period) print ad.shape #12 obv, meta_data_obv = ti.get_obv(symbol=stock, interval=t_period) print obv.shape #13 mom, meta_data_mom = ti.get_mom(symbol=stock, interval=t_period, series_type= series_type) #14 willr, meta_data_willr = ti.get_willr(symbol=stock, interval=t_period)
def get_technical(symbol, is_save=False): """ Esta función es para descargar todos los indicadores técnicos. Si usamos una API_KEY gratuita de ALPHA VANTAGE tenemos que descomentar los time.sleep() de la función para que no de un problema de peticiones; en el caso de una API_KEY premium no haría falta descomentarlo. Parámetros: ---------- symbol str: Nombre de la acción en bolsa. is_save bool: Booleano para decidir si guardar o no los datos descargados. Por defecto False no guarda los datos descargados """ try: # Comprueba si ya existe o no el archivo y en el caso de que # si exista guarda solo los días que no estén descargados if os.path.isfile(f"{c.PATH_SAVE_TECH}{symbol}.csv"): df = pd.read_csv(f"{c.PATH_SAVE_TECH}{symbol}.csv", names=c.COLUMNS) df = df[df['symbol'] == symbol] df['date'] = pd.to_datetime(df['date']) ld = df['date'].tail(1) last = datetime(ld.dt.year, ld.dt.month, ld.dt.day) else: last = None techindc = list() # Descarga los datos de indicadores técnicos. ti = TechIndicators(key=c.ALPHA_VAN_KEY, output_format='pandas') init = time.time() macd = ti.get_macd(symbol, interval='daily')[0] techindc.append(macd) stoch = ti.get_stoch(symbol, interval='daily')[0] techindc.append(stoch) ad = ti.get_ad(symbol, interval='daily')[0] techindc.append(ad) obv = ti.get_obv(symbol, interval='daily')[0] techindc.append(obv) # time.sleep(60) sma = ti.get_sma(symbol, interval='daily', time_period=50)[0] sma.columns = [f"{c}50" for c in sma.columns] techindc.append(sma) bbands = ti.get_bbands(symbol, interval='daily', time_period=28)[0] bbands.columns = [f"{c}28" for c in bbands.columns] techindc.append(bbands) for tp in c.TIME_PERIOD: rsi = ti.get_rsi(symbol, interval='daily', time_period=tp)[0] rsi.columns = [f"{c}{tp}" for c in rsi.columns] techindc.append(rsi) adx = ti.get_adx(symbol, interval='daily', time_period=tp)[0] adx.columns = [f"{c}{tp}" for c in adx.columns] techindc.append(adx) # time.sleep(60) cci = ti.get_cci(symbol, interval='daily', time_period=tp)[0] cci.columns = [f"{c}{tp}" for c in cci.columns] techindc.append(cci) aroon = ti.get_aroon(symbol, interval='daily', time_period=tp)[0] aroon.columns = [f"{c}{tp}" for c in aroon.columns] techindc.append(aroon) df_techindc = pd.concat(techindc, axis=1, join='inner') df_techindc.reset_index(inplace=True) df_techindc['symbol'] = symbol if last is not None: df_techindc = df_techindc[df_techindc['date'] > last] # Guardar los datos if is_save: df_techindc[c.COLUMNS_TECH].to_csv( f"{c.PATH_SAVE_TECH}{symbol}.csv", mode='a', index=False, header=False) except: LOGGER.warning(f"Ticker {symbol} ha fallado.")
def init_data(companies): # pd.DataFrame(),pd.DataFrame(), pd.DataFrame(),[],pd.DataFrame(), for comp in companies: # main_data[comp] = pd.read_csv(f'./rsc/{comp}_data.csv', sep = ',') # main_data[comp].dropna() # Input all the technical indicators and the stock times series data ti = TechIndicators(key='L2O2TYTG382ETN0N', output_format='pandas') # Fetch the simple moving average (SMA) values main_data[comp], meta_data = ti.get_sma(symbol=comp, interval='1min', time_period=100, series_type='close') # Fetch the exponential moving average (EMA) values ema_data, meta_data = ti.get_ema(symbol=comp, interval='1min', time_period=100, series_type='close') main_data[comp]['EMA'] = ema_data """ # Fetch the weighted moving average (WMA) values wma_data, meta_data = ti.get_wma(symbol=comp,interval='1min', time_period=10, series_type='close') main_data[comp]['WMA'] = wma_data # Fetch the double exponential moving agerage (DEMA) values dema_data, meta_data = ti.get_dema(symbol=comp,interval='1min', time_period=10, series_type='close') main_data[comp]['DEMA'] = dema_data # Fetch the triple exponential moving average (TEMA) values tema_data, meta_data = ti.get_tema(symbol=comp,interval='1min', time_period=10, series_type='close') main_data[comp]['TEMA'] = tema_data # Fetch the triangular moving average (TRIMA) values trima_data, meta_data = ti.get_trima(symbol=comp,interval='1min', time_period=10, series_type='close') main_data[comp]['TRIMA'] = trima_data # Fetch the Kaufman adaptive moving average (KAMA) values kama_data, meta_data = ti.get_kama(symbol=comp,interval='1min', time_period=10, series_type='close') main_data[comp]['KAMA'] = kama_data # Fetch the MESA adaptive moving average (MAMA) values mama_data, meta_data = ti.get_mama(symbol=comp,interval='1min', time_period=10, series_type='close') main_data[comp]['MAMA'] = mama_data['MAMA'] main_data[comp]['FAMA'] = mama_data['FAMA'] # Fetch the triple exponential moving average (T3) values t3_data, meta_data = ti.get_t3(symbol=comp,interval='1min', time_period=10, series_type='close') main_data[comp]['T3'] = t3_data """ # Fetch the moving average convergence / divergence (MACD) values macd_data, meta_data = ti.get_macd(symbol=comp, interval='1min', series_type='close') main_data[comp]['MACD'] = macd_data['MACD'] main_data[comp]['MACD_Hist'] = macd_data['MACD_Hist'] main_data[comp]['MACD_Signal'] = macd_data['MACD_Signal'] """ # Fetch the moving average convergence / divergence values with controllable moving average type macdext_data, meta_data = ti.get_macdext(symbol=comp,interval='1min', series_type='close') main_data[comp]['MACDEXT'] = macdext_data['MACD'] main_data[comp]['MACDEXT_Hist'] = macdext_data['MACD_Hist'] main_data[comp]['MACDEXT_Signal'] = macdext_data['MACD_Signal'] """ # Fetch the stochastic oscillator (STOCH) values stoch_data, meta_data = ti.get_stoch(symbol=comp, interval='1min') main_data[comp]['SlowK'] = stoch_data['SlowK'] main_data[comp]['SlowD'] = stoch_data['SlowD'] """ # Fetch the stochastic fast (STOCHF) values stochf_data, meta_data = ti.get_stochf(symbol=comp,interval='1min') main_data[comp]['FastK'] = stochf_data['FastK'] main_data[comp]['FastD'] = stochf_data['FastD'] """ # Fetch the relative strength index (RSI) values rsi_data, meta_data = ti.get_rsi(symbol=comp, interval='1min', time_period=10, series_type='close') main_data[comp]['RSI'] = rsi_data """ # Fetch the stochastic relative strength index (STOCHRSI) values stochrsi_data, meta_data = ti.get_stochrsi(symbol=comp,interval='1min', time_period=10, series_type='close') main_data[comp]['STOCHRSI_FastK'] = stochrsi_data['FastK'] main_data[comp]['STOCHRSI_FastD'] = stochrsi_data['FastD'] # Fetch the Williams' %R (WILLR) values willr_data, meta_data = ti.get_willr(symbol=comp,interval='1min', time_period=10) main_data[comp]['WILLR'] = willr_data """ # Fetch the average directional movement index (ADX) values adx_data, meta_data = ti.get_adx(symbol=comp, interval='1min', time_period=100) main_data[comp]['ADX'] = adx_data """ # Fetch the average directional movement index rating (ADXR) values adxr_data, meta_data = ti.get_adxr(symbol=comp,interval='1min', time_period=10) main_data[comp]['ADXR'] = adxr_data # Fetch the absolute price oscillator (APO) values apo_data, meta_data = ti.get_apo(symbol=comp,interval='1min', series_type='close') main_data[comp]['APO'] = apo_data # Fetch the percentage price oscillator (PPO) values ppo_data, meta_data = ti.get_ppo(symbol=comp,interval='1min', series_type='close') main_data[comp]['PPO'] = ppo_data # Fetch the momentum (MOM) values mom_data, meta_data = ti.get_mom(symbol=comp,interval='1min', time_period=10, series_type='close') main_data[comp]['MOM'] = mom_data # Fetch the balance of power (BOP) values bop_data, meta_data = ti.get_bop(symbol=comp,interval='1min') main_data[comp]['BOP'] = bop_data """ time.sleep(5) # Fetch the commodity channel index (CCI) values cci_data, meta_data = ti.get_cci(symbol=comp, interval='1min', time_period=100) main_data[comp]['CCI'] = cci_data """ # Fetch the Chande momentum oscillator (CMO) values cmo_data, meta_data = ti.get_cmo(symbol=comp,interval='1min', time_period=10, series_type='close') main_data[comp]['CMO'] = cmo_data # Fetch the rate of change (ROC) values roc_data, meta_data = ti.get_roc(symbol=comp,interval='1min', time_period=10, series_type='close') main_data[comp]['ROC'] = roc_data # Fetch the rate of change ratio (ROCR) values rocr_data, meta_data = ti.get_rocr(symbol=comp,interval='1min', time_period=10, series_type='close') main_data[comp]['ROCR'] = rocr_data time.sleep(5) """ # Fetch the Aroon (AROON) values aroon_data, meta_data = ti.get_aroon(symbol=comp, interval='1min', time_period=100) main_data[comp]['Aroon Down'] = aroon_data['Aroon Down'] main_data[comp]['Aroon Up'] = aroon_data['Aroon Up'] """ # Fetch the Aroon oscillator (AROONOSC) values aroonosc_data, meta_data = ti.get_aroonosc(symbol=comp,interval='1min', time_period=10) main_data[comp]['AROONOSC'] = aroonosc_data # Fetch the money flow index (MFI) values mfi_data, meta_data = ti.get_mfi(symbol=comp,interval='1min', time_period=10) main_data[comp]['MFI'] = mfi_data # Fetch the 1-day rate of change of a triple smooth exponential moving average (TRIX) values triX_train_data['AAPL'], meta_data = ti.get_trix(symbol=comp,interval='1min', time_period=10, series_type='close') main_data[comp]['TRIX'] = triX_train_data['AAPL'] # Fetch the ultimate oscillator (ULTOSC) values ultosc_data, meta_data = ti.get_ultsoc(symbol=comp,interval='1min', time_period=10) main_data[comp]['ULTOSC'] = ultosc_data # Fetch the directional movement index (DX) values dX_train_data['AAPL'], meta_data = ti.get_dx(symbol=comp,interval='1min', time_period=10) main_data[comp]['DX'] = dX_train_data['AAPL'] """ # Fetch the Chaikin A/D line (AD) value ad_data, meta_data = ti.get_trix(symbol=comp, interval='1min') main_data[comp]['AD'] = ad_data # Fetch the on balance volume (OBV) values obv_data, meta_data = ti.get_obv(symbol=comp, interval='1min') main_data[comp]['OBV'] = obv_data # print(main_data[comp].head()) ts = TimeSeries(key='L2O2TYTG382ETN0N', output_format='pandas') intraday_data, meta_data = ts.get_intraday(symbol=comp, interval='1min', outputsize='full') # intraday_data = intraday_data.iloc[9:] # intraday_data = intraday_data.reset_index(drop=True) # intraday_data.index = main_data[comp].index # intraday_data.set_index('date') intraday_data.index = pd.Index( [index[:-3] for index in intraday_data.index], name='date') # intraday_data.set_index('date') """ for index in intraday_data.index: print(index) print(type(intraday_data.index)) """ main_data[comp] = pd.concat([main_data[comp], intraday_data], axis=1) print(main_data[comp].index) print(main_data[comp].head()) main_data[comp] = main_data[comp].dropna() main_data[comp].index.name = 'date' y = np.where( main_data[comp]['4. close'].shift(-1) > main_data[comp]['4. close'], 1, -1) main_data[comp]['Open-Close'] = main_data[comp]['1. open'] - main_data[ comp]['4. close'] main_data[comp]['High-Low'] = main_data[comp]['2. high'] - main_data[ comp]['3. low'] X = main_data[comp][main_data[comp].columns[0:]] split = int(split_percentage * len(main_data[comp]['1. open'])) X_split_data[comp] = main_data[comp][split:] X_train_data[comp] = X[:split] y_train_data[comp] = y[:split] X_test_data[comp] = X[split:] y_test_data[comp] = y[split:] return main_data
def technicalIndicators(API_key,ticker): from alpha_vantage.techindicators import TechIndicators import matplotlib.pyplot as plt import mplfinance as mpf ti=TechIndicators(key=API_key, output_format='pandas') option=input('1. SMA\n2. EMA\n3. VWAP\n4. MACD\n5. STOCH\n6. RSI\n7. ADX\n8. CCI\n9. AROON\n10. BBANDS\n11. AD\n12. OBV\n').lower() if option=='sma' or option=='1': interval=int(input("Enter the interval:\n\t1. 1 minute\n\t2. 5 minutes\n\t3. 15 minutes\n\t4. 30 minutes\n\t5. 60 minutes\n\t6. daily \n\t7. weekly\n\t8. monthly\n")) intervalList=['','1min','5min','15min','30min','60min','daily','weekly','monthly'] timeperiod=int(input('Enter Time Period\n')) ser=int(input('Enter the series:\n\t1. close\n\t2. open\n\t3. low\n\t4. high\n')) series=['','close','open','low','high'] data=ti.get_sma(symbol=ticker, interval=intervalList[interval], time_period=timeperiod, series_type=series[ser])[0] data.columns = ['SMA'] data.index.name ="Date" mpf.plot(data, type='candle', title=f'SMA for the {ticker} stock', mav=(20), volume=True, tight_layout=True, style='yahoo') mpf.plot(data,type='line', volume=True) return data elif option=='ema' or option=='2': interval=int(input("Enter the interval:\n\t1. 1 minute\n\t2. 5 minutes\n\t3. 15 minutes\n\t4. 30 minutes\n\t5. 60 minutes\n\t6. daily \n\t7. weekly\n\t8. monthly\n")) intervalList=['','1min','5min','15min','30min','60min','daily','weekly','monthly'] timeperiod=int(input('Enter Time Period\n')) ser=int(input('Enter the series:\n\t1. close\n\t2. open\n\t3. low\n\t4. high\n')) series=['','close','open','low','high'] data=ti.get_ema(symbol=ticker, interval=intervalList[interval], time_period=timeperiod, series_type=series[ser])[0] data.plot() plt.title(f'EMA for the {ticker} stock') plt.tight_layout() plt.grid() plt.show() return data elif option=='vwap' or option=='3': interval=int(input("Enter the interval:\n\t1. 1 minute\n\t2. 5 minutes\n\t3. 15 minutes\n\t4. 30 minutes\n\t5. 60 minutes\n")) intervalList=['','1min','5min','15min','30min','60min'] data=ti.get_vwap(symbol=ticker, interval=intervalList[interval])[0] data.plot() plt.title(f'VWAP for the {ticker} stock') plt.tight_layout() plt.grid() plt.show() return data elif option=='macd' or option=='4': interval=int(input("Enter the interval:\n\t1. 1 minute\n\t2. 5 minutes\n\t3. 15 minutes\n\t4. 30 minutes\n\t5. 60 minutes\n\t6. daily \n\t7. weekly\n\t8. monthly\n")) intervalList=['','1min','5min','15min','30min','60min','daily','weekly','monthly'] ser=int(input('Enter the series:\n\t1. close\n\t2. open\n\t3. low\n\t4. high\n')) series=['','close','open','low','high'] data=ti.get_macd(symbol=ticker, interval=intervalList[interval], series_type=series[ser])[0] data.plot() plt.title(f'MACD for the {ticker} stock') plt.tight_layout() plt.grid() plt.show() return data elif option=='stoch' or option=='5': interval=int(input("Enter the interval:\n\t1. 1 minute\n\t2. 5 minutes\n\t3. 15 minutes\n\t4. 30 minutes\n\t5. 60 minutes\n\t6. daily \n\t7. weekly\n\t8. monthly\n")) intervalList=['','1min','5min','15min','30min','60min','daily','weekly','monthly'] data=ti.get_stoch(symbol=ticker, interval=intervalList[interval])[0] data.plot() plt.title(f'STOCH for the {ticker} stock') plt.tight_layout() plt.grid() plt.show() return data elif option=='rsi' or option=='6': interval=int(input("Enter the interval:\n\t1. 1 minute\n\t2. 5 minutes\n\t3. 15 minutes\n\t4. 30 minutes\n\t5. 60 minutes\n\t6. daily \n\t7. weekly\n\t8. monthly\n")) intervalList=['','1min','5min','15min','30min','60min','daily','weekly','monthly'] timeperiod=int(input('Enter Time Period\n')) ser=int(input('Enter the series:\n\t1. close\n\t2. open\n\t3. low\n\t4. high\n')) series=['','close','open','low','high'] data=ti.get_rsi(symbol=ticker, interval=intervalList[interval], time_period=timeperiod, series_type=series[ser])[0] data.plot() plt.title(f'RSI for the {ticker} stock') plt.tight_layout() plt.grid() plt.show() return data elif option=='adx' or option=='7': interval=int(input("Enter the interval:\n\t1. 1 minute\n\t2. 5 minutes\n\t3. 15 minutes\n\t4. 30 minutes\n\t5. 60 minutes\n\t6. daily \n\t7. weekly\n\t8. monthly\n")) intervalList=['','1min','5min','15min','30min','60min','daily','weekly','monthly'] timeperiod=int(input('Enter Time Period\n')) data=ti.get_adx(symbol=ticker, interval=intervalList[interval], time_period=timeperiod)[0] data.plot() plt.title(f'ADX for the {ticker} stock') plt.tight_layout() plt.grid() plt.show() return data elif option=='cci' or option=='8': interval=int(input("Enter the interval:\n\t1. 1 minute\n\t2. 5 minutes\n\t3. 15 minutes\n\t4. 30 minutes\n\t5. 60 minutes\n\t6. daily \n\t7. weekly\n\t8. monthly\n")) intervalList=['','1min','5min','15min','30min','60min','daily','weekly','monthly'] timeperiod=int(input('Enter Time Period\n')) data=ti.get_cci(symbol=ticker, interval=intervalList[interval], time_period=timeperiod)[0] data.plot() plt.title(f'CCI for the {ticker} stock') plt.tight_layout() plt.grid() plt.show() return data elif option=='aroon' or option=='9': interval=int(input("Enter the interval:\n\t1. 1 minute\n\t2. 5 minutes\n\t3. 15 minutes\n\t4. 30 minutes\n\t5. 60 minutes\n\t6. daily \n\t7. weekly\n\t8. monthly\n")) intervalList=['','1min','5min','15min','30min','60min','daily','weekly','monthly'] timeperiod=int(input('Enter Time Period')) data=ti.get_aroon(symbol=ticker, interval=intervalList[interval], time_period=timeperiod)[0] data.plot() plt.title(f'AROON for the {ticker} stock') plt.tight_layout() plt.grid() plt.show() return data elif option=='bbands' or option=='10': interval=int(input("Enter the interval:\n\t1. 1 minute\n\t2. 5 minutes\n\t3. 15 minutes\n\t4. 30 minutes\n\t5. 60 minutes\n\t6. daily \n\t7. weekly\n\t8. monthly\n")) intervalList=['','1min','5min','15min','30min','60min','daily','weekly','monthly'] timeperiod=int(input('Enter Time Period\n')) ser=int(input('Enter the series:\n\t1. close\n\t2. open\n\t3. low\n\t4. high\n')) series=['','close','open','low','high'] data=ti.get_bbands(symbol=ticker, interval=intervalList[interval], time_period=timeperiod, series_type=series[ser])[0] data.plot() plt.title(f'BBANDS for the {ticker} stock') plt.tight_layout() plt.grid() plt.show() return data elif option=='ad' or option=='11': interval=int(input("Enter the interval:\n\t1. 1 minute\n\t2. 5 minutes\n\t3. 15 minutes\n\t4. 30 minutes\n\t5. 60 minutes\n\t6. daily \n\t7. weekly\n\t8. monthly\n")) intervalList=['','1min','5min','15min','30min','60min','daily','weekly','monthly'] data=ti.get_ad(symbol=ticker, interval=intervalList[interval])[0] data.plot() plt.title(f'AD for the {ticker} stock') plt.tight_layout() plt.grid() plt.show() return data elif option=='obv' or option=='12': interval=int(input("Enter the interval:\n\t1. 1 minute\n\t2. 5 minutes\n\t3. 15 minutes\n\t4. 30 minutes\n\t5. 60 minutes\n\t6. daily \n\t7. weekly\n\t8. monthly\n")) intervalList=['','1min','5min','15min','30min','60min','daily','weekly','monthly'] data=ti.get_obv(symbol=ticker, interval=intervalList[interval])[0] data.plot() plt.title(f'OBV for the {ticker} stock') plt.tight_layout() plt.grid() plt.show() return data else: print("CANNOT RECOGNIZE")
def init_data(comp, interval): # Input all the technical indicators and the stock times series data # Initialize the AlphaVantage API call functions ts = TimeSeries(key='L2O2TYTG382ETN0N', output_format='pandas') ti = TechIndicators(key='L2O2TYTG382ETN0N', output_format='pandas') # Other keys: QB5APLD84E50TQAC, L2O2TYTG382ETN0N # Fetch the simple moving average (SMA) values main_data, meta_data = ti.get_sma(symbol=comp, interval='60min', time_period=20, series_type='close') time.sleep(3) # Fetch the exponential moving average (EMA) values ema_data, meta_data = ti.get_ema(symbol=comp, interval='60min', time_period=20, series_type='close') main_data['EMA'] = ema_data time.sleep(3) """ # Fetch the weighted moving average (WMA) values wma_data, meta_data = ti.get_wma(symbol=comp,interval='60min', time_period=10, series_type='close') main_data['WMA'] = wma_data # Fetch the double exponential moving agerage (DEMA) values dema_data, meta_data = ti.get_dema(symbol=comp,interval='60min', time_period=10, series_type='close') main_data['DEMA'] = dema_data # Fetch the triple exponential moving average (TEMA) values tema_data, meta_data = ti.get_tema(symbol=comp,interval='60min', time_period=10, series_type='close') main_data['TEMA'] = tema_data # Fetch the triangular moving average (TRIMA) values trima_data, meta_data = ti.get_trima(symbol=comp,interval='60min', time_period=10, series_type='close') main_data['TRIMA'] = trima_data # Fetch the Kaufman adaptive moving average (KAMA) values kama_data, meta_data = ti.get_kama(symbol=comp,interval='60min', time_period=10, series_type='close') main_data['KAMA'] = kama_data # Fetch the MESA adaptive moving average (MAMA) values mama_data, meta_data = ti.get_mama(symbol=comp,interval='60min', time_period=10, series_type='close') main_data['MAMA'] = mama_data['MAMA'] main_data['FAMA'] = mama_data['FAMA'] # Fetch the triple exponential moving average (T3) values t3_data, meta_data = ti.get_t3(symbol=comp,interval='60min', time_period=10, series_type='close') main_data['T3'] = t3_data """ # Fetch the moving average convergence / divergence (MACD) values macd_data, meta_data = ti.get_macd(symbol=comp, interval='60min', series_type='close') main_data['MACD'] = macd_data['MACD'] main_data['MACD_Hist'] = macd_data['MACD_Hist'] main_data['MACD_Signal'] = macd_data['MACD_Signal'] time.sleep(3) """ # Fetch the moving average convergence / divergence values with controllable moving average type macdext_data, meta_data = ti.get_macdext(symbol=comp,interval='60min', series_type='close') main_data['MACDEXT'] = macdext_data['MACD'] main_data['MACDEXT_Hist'] = macdext_data['MACD_Hist'] main_data['MACDEXT_Signal'] = macdext_data['MACD_Signal'] """ # Fetch the stochastic oscillator (STOCH) values stoch_data, meta_data = ti.get_stoch(symbol=comp, interval='60min') main_data['SlowK'] = stoch_data['SlowK'] main_data['SlowD'] = stoch_data['SlowD'] time.sleep(3) """ # Fetch the stochastic fast (STOCHF) values stochf_data, meta_data = ti.get_stochf(symbol=comp,interval='60min') main_data['FastK'] = stochf_data['FastK'] main_data['FastD'] = stochf_data['FastD'] """ # Fetch the relative strength index (RSI) values rsi_data, meta_data = ti.get_rsi(symbol=comp, interval='60min', time_period=10, series_type='close') main_data['RSI'] = rsi_data time.sleep(3) """ # Fetch the stochastic relative strength index (STOCHRSI) values stochrsi_data, meta_data = ti.get_stochrsi(symbol=comp,interval='60min', time_period=10, series_type='close') main_data['STOCHRSI_FastK'] = stochrsi_data['FastK'] main_data['STOCHRSI_FastD'] = stochrsi_data['FastD'] # Fetch the Williams' %R (WILLR) values willr_data, meta_data = ti.get_willr(symbol=comp,interval='60min', time_period=10) main_data['WILLR'] = willr_data """ # Fetch the average directional movement index (ADX) values adx_data, meta_data = ti.get_adx(symbol=comp, interval='60min', time_period=20) main_data['ADX'] = adx_data time.sleep(3) """ # Fetch the average directional movement index rating (ADXR) values adxr_data, meta_data = ti.get_adxr(symbol=comp,interval='60min', time_period=10) main_data['ADXR'] = adxr_data # Fetch the absolute price oscillator (APO) values apo_data, meta_data = ti.get_apo(symbol=comp,interval='60min', series_type='close') main_data['APO'] = apo_data # Fetch the percentage price oscillator (PPO) values ppo_data, meta_data = ti.get_ppo(symbol=comp,interval='60min', series_type='close') main_data['PPO'] = ppo_data # Fetch the momentum (MOM) values mom_data, meta_data = ti.get_mom(symbol=comp,interval='60min', time_period=10, series_type='close') main_data['MOM'] = mom_data # Fetch the balance of power (BOP) values bop_data, meta_data = ti.get_bop(symbol=comp,interval='60min') main_data['BOP'] = bop_data """ # Fetch the commodity channel index (CCI) values cci_data, meta_data = ti.get_cci(symbol=comp, interval='60min', time_period=20) main_data['CCI'] = cci_data time.sleep(3) """ # Fetch the Chande momentum oscillator (CMO) values cmo_data, meta_data = ti.get_cmo(symbol=comp,interval='60min', time_period=10, series_type='close') main_data['CMO'] = cmo_data # Fetch the rate of change (ROC) values roc_data, meta_data = ti.get_roc(symbol=comp,interval='60min', time_period=10, series_type='close') main_data['ROC'] = roc_data # Fetch the rate of change ratio (ROCR) values rocr_data, meta_data = ti.get_rocr(symbol=comp,interval='60min', time_period=10, series_type='close') main_data['ROCR'] = rocr_data time.sleep(5) """ # Fetch the Aroon (AROON) values aroon_data, meta_data = ti.get_aroon(symbol=comp, interval='60min', time_period=20) main_data['Aroon Down'] = aroon_data['Aroon Down'] main_data['Aroon Up'] = aroon_data['Aroon Up'] time.sleep(3) """ # Fetch the Aroon oscillator (AROONOSC) values aroonosc_data, meta_data = ti.get_aroonosc(symbol=comp,interval='60min', time_period=10) main_data['AROONOSC'] = aroonosc_data # Fetch the money flow index (MFI) values mfi_data, meta_data = ti.get_mfi(symbol=comp,interval='60min', time_period=10) main_data['MFI'] = mfi_data # Fetch the 1-day rate of change of a triple smooth exponential moving average (TRIX) values triX_train_data['AAPL'], meta_data = ti.get_trix(symbol=comp,interval='60min', time_period=10, series_type='close') main_data['TRIX'] = triX_train_data['AAPL'] # Fetch the ultimate oscillator (ULTOSC) values ultosc_data, meta_data = ti.get_ultsoc(symbol=comp,interval='60min', time_period=10) main_data['ULTOSC'] = ultosc_data # Fetch the directional movement index (DX) values dX_train_data['AAPL'], meta_data = ti.get_dx(symbol=comp,interval='60min', time_period=10) main_data['DX'] = dX_train_data['AAPL'] """ """ # Fetch the Chaikin A/D line (AD) value ad_data, meta_data = ti.get_ad(symbol=comp,interval='60min') main_data['AD'] = ad_data """ # Fetch the on balance volume (OBV) values obv_data, meta_data = ti.get_obv(symbol=comp, interval='60min') main_data['OBV'] = obv_data intraday_data, meta_data = ts.get_intraday(symbol=comp, interval='60min', outputsize='full') intraday_data.index = pd.Index( [index[:-3] for index in intraday_data.index], name='date') #intraday_data.set_index('date') main_data = pd.concat([main_data, intraday_data], axis=1) print(main_data.index) print(main_data.head()) main_data = main_data.dropna() main_data.index.name = 'date' company = comp main_data.to_csv(f'./rsc/{company}_AV_data.csv', sep=',') time.sleep(1) print(comp) time.sleep(5)
def save_ti(ticker, interval='daily'): ti = TechIndicators(key='WS8K5VM8FZL52BTH', output_format='pandas') ti.get_sma( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_sma.csv') call_check() ti.get_ema( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_ema.csv') call_check() ti.get_wma( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_wma.csv') call_check() ti.get_dema( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_dema.csv') call_check() ti.get_tema( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_tema.csv') call_check() ti.get_trima( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_trima.csv') call_check() ti.get_kama( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_kama.csv') call_check() ti.get_mama( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_mama.csv') call_check() ti.get_t3( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_t3.csv') call_check() ti.get_macd( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_macd.csv') call_check() ti.get_macdext( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_macdext.csv') call_check() ti.get_stoch( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_stoch.csv') call_check() ti.get_stochf( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_stochf.csv') call_check() ti.get_rsi( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_rsi.csv') call_check() ti.get_stochrsi(ticker, interval)[0].to_csv( f'./Stock Data/TI/{ticker}_{interval}_stochris.csv') call_check() ti.get_willr( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_willr.csv') call_check() ti.get_adx( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_adx.csv') call_check() ti.get_adxr( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_adxr.csv') call_check() ti.get_apo( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_apo.csv') call_check() ti.get_ppo( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_ppo.csv') call_check() ti.get_mom( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_mom.csv') call_check() ti.get_bop( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_bop.csv') call_check() ti.get_cci( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_cci.csv') call_check() ti.get_cmo( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_cmo.csv') call_check() ti.get_roc( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_roc.csv') call_check() ti.get_rocr( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_rocr.csv') call_check() ti.get_aroon( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_aroon.csv') call_check() ti.get_aroonosc(ticker, interval)[0].to_csv( f'./Stock Data/TI/{ticker}_{interval}_aroonosc.csv') call_check() ti.get_mfi( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_mfi.csv') call_check() ti.get_trix( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_trix.csv') call_check() ti.get_ultosc( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_ultosc.csv') call_check() ti.get_dx( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_dx.csv') call_check() ti.get_minus_di(ticker, interval)[0].to_csv( f'./Stock Data/TI/{ticker}_{interval}_minus_di.csv') call_check() ti.get_plus_di( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_plus_di.csv') call_check() ti.get_minus_dm(ticker, interval)[0].to_csv( f'./Stock Data/TI/{ticker}_{interval}_minus_dm.csv') call_check() ti.get_plus_dm( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_plus_dm.csv') call_check() ti.get_bbands( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_bbands.csv') call_check() ti.get_midpoint(ticker, interval)[0].to_csv( f'./Stock Data/TI/{ticker}_{interval}_midpoint.csv') call_check() ti.get_midprice(ticker, interval)[0].to_csv( f'./Stock Data/TI/{ticker}_{interval}_midprice.csv') call_check() ti.get_sar( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_sar.csv') call_check() ti.get_trange( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_trange.csv') call_check() ti.get_atr( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_atr.csv') call_check() ti.get_natr( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_natr.csv') call_check() ti.get_ad( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_ad.csv') call_check() ti.get_adosc( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_adosc.csv') call_check() ti.get_obv( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_obv.csv') call_check() ti.get_ht_trendline(ticker, interval)[0].to_csv( f'./Stock Data/TI/{ticker}_{interval}_ht_trendline.csv') call_check() ti.get_ht_sine( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_ht_sine.csv') call_check() ti.get_ht_trendmode(ticker, interval)[0].to_csv( f'./Stock Data/TI/{ticker}_{interval}_ht_trendmode.csv') call_check() ti.get_ht_dcperiod(ticker, interval)[0].to_csv( f'./Stock Data/TI/{ticker}_{interval}_dcperiod.csv') call_check() ti.get_ht_dcphase( ticker, interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_dcphase.csv') call_check() ti.get_ht_phasor(ticker, interval)[0].to_csv( f'./Stock Data/TI/{ticker}_{interval}_ht_phasor.csv')
ti = TechIndicators(key='1HAYLUHGCB6E0VXC', output_format='pandas') print("Progress: 0% complete...") ad_data, meta_data = ti.get_ad(symbol=symbol, interval=interval) adosc_data, meta_data = ti.get_adosc(symbol=symbol, interval=interval) adx_data, meta_data = ti.get_adx(symbol=symbol, interval=interval) adxr_data, meta_data = ti.get_adxr(symbol=symbol, interval=interval) apo_data, meta_data = ti.get_apo(symbol=symbol, interval=interval) aroon_data, meta_data = ti.get_aroon(symbol=symbol, interval=interval) aroonosc_data, meta_data = ti.get_aroonosc(symbol=symbol, interval=interval) atr_data, meta_data = ti.get_atr(symbol=symbol, interval=interval) bop_data, meta_data = ti.get_bop(symbol=symbol, interval=interval) cci_data, meta_data = ti.get_cci(symbol=symbol, interval=interval) print("Progress: 20% complete...") cmo_data, meta_data = ti.get_cmo(symbol=symbol, interval=interval) dema_data, meta_data = ti.get_dema(symbol=symbol, interval=interval) dx_data, meta_data = ti.get_dx(symbol=symbol, interval=interval) ema_data, meta_data = ti.get_ema(symbol=symbol, interval=interval) ht_dcperiod_data, meta_data = ti.get_ht_dcperiod(symbol=symbol, interval=interval) ht_dcphase_data, meta_data = ti.get_ht_dcphase(symbol=symbol, interval=interval) ht_phasor_data, meta_data = ti.get_ht_phasor(symbol=symbol, interval=interval) ht_sine_data, meta_data = ti.get_ht_sine(symbol=symbol, interval=interval) ht_trendline_data, meta_data = ti.get_ht_trendline(symbol=symbol, interval=interval) ht_trendmode_data, meta_data = ti.get_ht_trendmode(symbol=symbol, interval=interval) print("Progress: 40% complete...")
def preds(api_key): df = pd.read_csv('GOOGL.csv', index_col='Date') preds = pd.DataFrame() for i in np.arange(start=1, stop=6): if preds.empty: preds = pd.DataFrame(data=df['close'].pct_change(1)) preds.columns = ['today'] else: lags = pd.DataFrame(df['close'].pct_change(i)) lags.columns = ['lag{}'.format(i)] preds = preds.join(lags) preds = preds.join(df['volume']) preds = preds.join(df['close']) preds['dir'] = (preds['close'] > preds['close'].shift(1)).shift(-1) filename = 'GOOGL-lags.csv' try: preds.to_csv('{}'.format(filename)) print('GOOGL lags saved successfully as "{}"'.format(filename)) except: print('Unable to save "{}"'.format(filename)) ti = TechIndicators(key=api_key, output_format='pandas') sma, _ = ti.get_sma(symbol='GOOGL', interval='daily', series_type='close') ema, _ = ti.get_ema(symbol='GOOGL', interval='daily', series_type='close') wma, _ = ti.get_wma(symbol='GOOGL', interval='daily', series_type='close') trima, _ = ti.get_trima(symbol='GOOGL', interval='daily', series_type='close') kama, _ = ti.get_kama(symbol='GOOGL', interval='daily', series_type='close') macd, _ = ti.get_macd(symbol='GOOGL', interval='daily', series_type='close') rsi, _ = ti.get_rsi(symbol='GOOGL', interval='daily', series_type='close') adx, _ = ti.get_adx(symbol='GOOGL', interval='daily') apo, _ = ti.get_apo(symbol='GOOGL', interval='daily', series_type='close') stoch, _ = ti.get_stoch(symbol='GOOGL', interval='daily') ppo, _ = ti.get_ppo(symbol='GOOGL', interval='daily') mom, _ = ti.get_mom(symbol='GOOGL', interval='daily', series_type='close') cci, _ = ti.get_cci(symbol='GOOGL', interval='daily') aroon, _ = ti.get_aroon(symbol='GOOGL', interval='daily', series_type='close') mfi, _ = ti.get_mfi(symbol='GOOGL', interval='daily', series_type='close') dx, _ = ti.get_dx(symbol='GOOGL', interval='daily', series_type='close') ad, _ = ti.get_ad(symbol='GOOGL', interval='daily') obv, _ = ti.get_obv(symbol='GOOGL', interval='daily') filename2 = 'GOOGL-techs.csv' try: preds_test = pd.concat([ sma, ema, wma, trima, kama, macd, rsi, adx, apo, stoch, ppo, mom, cci, aroon, mfi, dx, ad, obv ], axis=1) pd.DataFrame(preds_test).to_csv('{}'.format(filename2)) print('Google techs saved as successfully as "{}"'.format(filename2)) except: print('Unable to save "{}"'.format(filename2))
df['roc'], _ = ti.get_roc(symbol=symbol, time_period=roc_time_period) df['sma'], _ = ti.get_sma(symbol=symbol, time_period=sma_time_period) df['ema'], _ = ti.get_ema(symbol=symbol, time_period=ema_time_period) df['rsi'], _ = ti.get_rsi(symbol=symbol, time_period=rsi_time_period) df['obv'], _ = ti.get_obv(symbol=symbol) macd = ti.get_macd(symbol=symbol)[0].sort_index(axis=0, ascending=True) for column in macd.columns: df[column] = macd[column] stoch = ti.get_stoch(symbol=symbol)[0].sort_index(axis=0, ascending=True) for column in stoch.columns: df[column] = stoch[column] df['adx'], _ = ti.get_adx(symbol=symbol, time_period=adx_time_period) df['cci'], _ = ti.get_cci(symbol=symbol, time_period=cci_time_period) aroon = ti.get_aroon( symbol=symbol, time_period=aroon_time_period)[0].sort_index(axis=0, ascending=True) for column in aroon.columns: df[column] = aroon[column] bbands = ti.get_bbands(symbol=symbol, time_period=bbands_time_period)[0].sort_index( axis=0, ascending=True) for column in bbands.columns: df[column] = bbands[column] df['ad'], _ = ti.get_ad(symbol=symbol) df['shifted_ROC_BOOL'] = (df['roc'].shift(-1) >= 0).astype(int)
def techIndicatorPull(symbol): interval = "1min" print("Calculating Tech Indicators ...") ti = TechIndicators(key='1HAYLUHGCB6E0VXC', output_format='pandas') print("Progress: 0% complete...") ad_data, meta_data = ti.get_ad(symbol=symbol, interval=interval) adosc_data, meta_data = ti.get_adosc(symbol=symbol, interval=interval) adx_data, meta_data = ti.get_adx(symbol=symbol, interval=interval) adxr_data, meta_data = ti.get_adxr(symbol=symbol, interval=interval) apo_data, meta_data = ti.get_apo(symbol=symbol, interval=interval) aroon_data, meta_data = ti.get_aroon(symbol=symbol, interval=interval) aroonosc_data, meta_data = ti.get_aroonosc(symbol=symbol, interval=interval) atr_data, meta_data = ti.get_atr(symbol=symbol, interval=interval) bop_data, meta_data = ti.get_bop(symbol=symbol, interval=interval) cci_data, meta_data = ti.get_cci(symbol=symbol, interval=interval) print("Progress: 20% complete...") cmo_data, meta_data = ti.get_cmo(symbol=symbol, interval=interval) dema_data, meta_data = ti.get_dema(symbol=symbol, interval=interval) dx_data, meta_data = ti.get_dx(symbol=symbol, interval=interval) ema_data, meta_data = ti.get_ema(symbol=symbol, interval=interval) ht_dcperiod_data, meta_data = ti.get_ht_dcperiod(symbol=symbol, interval=interval) ht_dcphase_data, meta_data = ti.get_ht_dcphase(symbol=symbol, interval=interval) ht_phasor_data, meta_data = ti.get_ht_phasor(symbol=symbol, interval=interval) ht_sine_data, meta_data = ti.get_ht_sine(symbol=symbol, interval=interval) ht_trendline_data, meta_data = ti.get_ht_trendline(symbol=symbol, interval=interval) ht_trendmode_data, meta_data = ti.get_ht_trendmode(symbol=symbol, interval=interval) print("Progress: 40% complete...") kama_data, meta_data = ti.get_kama(symbol=symbol, interval=interval) macd_data, meta_data = ti.get_macd(symbol=symbol, interval=interval) macdext_data, meta_data = ti.get_macdext(symbol=symbol, interval=interval) mama_data, meta_data = ti.get_mama(symbol=symbol, interval=interval) mfi_data, meta_data = ti.get_mfi(symbol=symbol, interval=interval) midpoint_data, meta_data = ti.get_midpoint(symbol=symbol, interval=interval) midprice_data, meta_data = ti.get_midprice(symbol=symbol, interval=interval) minus_di_data, meta_data = ti.get_minus_di(symbol=symbol, interval=interval) mom_data, meta_data = ti.get_mom(symbol=symbol, interval=interval) natr_data, meta_data = ti.get_natr(symbol=symbol, interval=interval) print("Progress: 60% complete...") obv_data, meta_data = ti.get_obv(symbol=symbol, interval=interval) plus_di_data, meta_data = ti.get_plus_di(symbol=symbol, interval=interval) plus_dm_data, meta_data = ti.get_plus_dm(symbol=symbol, interval=interval) ppo_data, meta_data = ti.get_ppo(symbol=symbol, interval=interval) roc_data, meta_data = ti.get_roc(symbol=symbol, interval=interval) rocr_data, meta_data = ti.get_rocr(symbol=symbol, interval=interval) rsi_data, meta_data = ti.get_rsi(symbol=symbol, interval=interval) sar_data, meta_data = ti.get_sar(symbol=symbol, interval=interval) sma_data, meta_data = ti.get_sma(symbol=symbol, interval=interval) stoch_data, meta_data = ti.get_stoch(symbol=symbol, interval=interval) print("Progress: 80% complete...") stochf_data, meta_data = ti.get_stochf(symbol=symbol, interval=interval) stochrsi_data, meta_data = ti.get_stochrsi(symbol=symbol, interval=interval) t3_data, meta_data = ti.get_t3(symbol=symbol, interval=interval) tema_data, meta_data = ti.get_tema(symbol=symbol, interval=interval) trange_data, meta_data = ti.get_trange(symbol=symbol, interval=interval) trima_data, meta_data = ti.get_trima(symbol=symbol, interval=interval) trix_data, meta_data = ti.get_trix(symbol=symbol, interval=interval) ultsoc_data, meta_data = ti.get_ultsoc(symbol=symbol, interval=interval) willr_data, meta_data = ti.get_willr(symbol=symbol, interval=interval) wma_data, meta_data = ti.get_wma(symbol=symbol, interval=interval) bbands_data, meta_data = ti.get_bbands(symbol=symbol, interval=interval) print("Progress: 90% complete...") result = pd.concat([ ad_data, adosc_data, adx_data, adxr_data, apo_data, aroon_data, aroonosc_data, atr_data, bop_data, cci_data, cmo_data, dema_data, dx_data, ema_data, ht_dcperiod_data, ht_dcphase_data, ht_phasor_data, ht_sine_data, ht_trendline_data, ht_trendmode_data, kama_data, macd_data, macdext_data, mama_data, mfi_data, midpoint_data, midprice_data, minus_di_data, mom_data, natr_data, obv_data, plus_di_data, plus_dm_data, ppo_data, roc_data, rocr_data, rsi_data, sar_data, sma_data, stoch_data, stochf_data, stochrsi_data, t3_data, tema_data, trange_data, trima_data, trix_data, ultsoc_data, willr_data, wma_data, bbands_data ], axis=1) result["stockticker"] = symbol result = result.reindex(result.index.rename('timestamp')) result = result.dropna(axis=0, how='any') result = result.round(2) result = result.rename( columns={ 'Chaikin A/D': 'ChaikinAD', 'Aroon Up': 'AroonUp', 'Aroon Down': 'AroonDown', 'LEAD SINE': 'LeadSine', 'Real Upper Band': 'RealUpperBand', 'Real Middle Band': 'RealMiddleBand', 'Real Lower Band': 'RealLowerBand' }) fd = open('results/rawTechIndicatorData.csv', 'w') result.to_csv(fd, index=True, encoding='utf-8') fd.close() print("Progress: 99% complete...") df = pd.read_csv('results/rawTechIndicatorData.csv') insertToOracleDatabase( df, '''insert /*+ ignore_row_on_dupkey_index(stocktechindicator, stocktechindicator_pk) */ into stocktechindicator (timestamp,ChaikinAD,ADOSC,ADX,ADXR, APO,AroonUp,AroonDown,AROONOSC,ATR, BOP,CCI,CMO,DEMA,DX, EMA,DCPERIOD,HT_DCPHASE,QUADRATURE, PHASE, LEADSINE,SINE,HT_TRENDLINE,TRENDMODE,KAMA, MACD,MACD_Hist,MACD_Signal,MACD_Signal2,MACD2, MACD_Hist2,FAMA,MAMA,MFI,MIDPOINT, MIDPRICE,MINUS_DI,MOM,NATR,OBV, PLUS_DI,PLUS_DM,PPO,ROC,ROCR, RSI,SAR,SMA,SlowK,SlowD, FastK,FastD,FastK2,FastD2,T3, TEMA,TRANGE,TRIMA,TRIX,ULTOSC, WILLR,WMA,RealLowerBand,RealUpperBand,RealMiddleBand, stockticker) values (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17, :18, :19, :20, :21, :22, :23, :24, :25, :26, :27, :28, :29, :30, :31, :32, :33, :34, :35, :36, :37, :38, :39, :40, :41, :42, :43, :44, :45, :46, :47, :48, :49, :50, :51, :52, :53, :54, :55, :56, :57, :58, :59, :60, :61, :62, :63, :64, :65, :66)''')
def getData(tker,alg,time,tDF,tI,incP,typeClass,return_list): print("Getting Data") dataDict= [] symb = tker #Do not use 60min since that does not work. #Cannot figure out how, but the keys for date and time are different. tInterval = time ourKey = '2ONP54KRQ2G73D3K' #Using the wrapper class to get the different data for the inputted ticker #In a try-catch because sometime the API fails try: #Making the retry number high so the API call should not fail ts = TimeSeries(key = ourKey, output_format = 'json',retries=10000) #tInterval has first letter capitalized when getting input for neatness, it is then lowered here for the API call #Here we are getting the price data for the requested time interval if tInterval == 'Daily': priceData, meta_priceData = ts.get_daily(symbol= symb, outputsize='full') tInterval = 'daily' elif tInterval == 'Weekly': priceData, meta_priceData = ts.get_weekly(symbol = symb) tInterval = 'weekly' elif tInterval =='Monthly': priceData, meta_priceData = ts.get_monthly(symbol = symb) tInterval = 'monthly' else: priceData, meta_priceData = ts.get_intraday(symbol = symb, interval = tInterval, outputsize='full') #Intraday date and time key includes seconds, while it does not for technicial indicators for day in priceData.copy(): priceData[day[:-3]] = priceData.pop(day) ti = TechIndicators(key = ourKey, output_format ='json') #Here we get the technical indicators the user chose from the menu, unless they chose to do a tDF. if tDF == "No": if 0 in tI: macD, meta_macD = ti.get_macd(symbol = symb, interval = tInterval, series_type = 'close') dataDict.append(macD) if 1 in tI: stoch, meta_stoch = ti.get_stoch(symbol = symb, interval = tInterval, fastkperiod = '5') dataDict.append(stoch) if 2 in tI: ema, meta_ema = ti.get_ema(symbol = symb, interval = tInterval, time_period = '8', series_type = 'close') dataDict.append(ema) if 3 in tI: rsi, meta_rsi = ti.get_rsi(symbol = symb, interval = tInterval, time_period = '14', series_type='close') dataDict.append(rsi) if 4 in tI: plusDI, meta_plusDI = ti.get_plus_di(symbol = symb, interval = tInterval, time_period = '14') minusDI, meta_minusDI = ti.get_minus_di(symbol = symb, interval = tInterval, time_period = '14') dataDict.append(plusDI) dataDict.append(minusDI) if 5 in tI: cci, meta_cci = ti.get_cci(symbol = symb, interval = tInterval, time_period = '14') dataDict.append(cci) if 6 in tI: willR, meta_willR = ti.get_willr(symbol = symb, interval = tInterval, time_period = '14') dataDict.append(willR) if 7 in tI: oBV, meta_OBV = ti.get_obv(symbol = symb, interval = tInterval) dataDict.append(oBV) if 8 in tI: aD, meta_AD = ti.get_ad(symbol = symb, interval = tInterval) dataDict.append(aD) if 9 in tI: bBands, meta_bBands = ti.get_bbands(symbol = symb, interval = tInterval, time_period = '14', series_type = 'close') dataDict.append(bBands) if 10 in tI: aroon, meta_aroon = ti.get_aroon(symbol = symb, interval = tInterval, time_period = '14') dataDict.append(aroon) if 11 in tI: adx, meta_adx = ti.get_adx(symbol = symb, interval = tInterval, time_period = '14') dataDict.append(adx) if(incP == "Yes"): dataDict.append(priceData) #Since a tDF requires a manual transformation, we choose the technical indicators for it, which are retrieved here else: macD, meta_macD = ti.get_macd(symbol = symb, interval = tInterval, series_type = 'close') stoch, meta_stoch = ti.get_stoch(symbol = symb, interval = tInterval, fastkperiod = '5') ema, meta_ema = ti.get_ema(symbol = symb, interval = tInterval, time_period = '8', series_type = 'close') rsi, meta_rsi = ti.get_rsi(symbol = symb, interval = tInterval, time_period = '14', series_type='close') plusDI, meta_plusDI = ti.get_plus_di(symbol = symb, interval = tInterval, time_period = '14') minusDI, meta_minusDI = ti.get_minus_di(symbol = symb, interval = tInterval, time_period = '14') cci, meta_cci = ti.get_cci(symbol = symb, interval = tInterval, time_period = '14') willR, meta_willR = ti.get_willr(symbol = symb, interval = tInterval, time_period = '14') dataDict.append(macD) dataDict.append(stoch) dataDict.append(ema) dataDict.append(rsi) dataDict.append(plusDI) dataDict.append(minusDI) dataDict.append(cci) dataDict.append(willR) #Returning with nothing tells our main process that there was an error except ValueError: return #Sometimes the API may return a empty list which will cause an error for the training for list in dataDict: if not list: return #Need atleast one of the dictionaries to be ordered by date, so we can organize all our data. priceData = collections.OrderedDict(sorted(priceData.items())) #dates used for drawing graph afterwards dates = [] for day in priceData: dates.append(day) #Parsing the data #All the data for each day is put into an array, which is put into trainingData, sorted by dates trainingData = [] #Putting the ordered price data into priceList, instead of using a Dictionary #So if the user doesn't want to include price in training, we still have a list to train #for the actual outputs/ priceList = [] #If the user is using this in the middle of the day/week/month, the data will have a partial time interval up to the current time #Here we remove the last day if it is the same date as today, so we can get a guess for the timer interval asked. todaysDate = str(datetime.datetime.now())[:10] if todaysDate in priceData.keys(): del priceData[todaysDate] for day in priceData: #Making sure the day is in the priceData and each of the technical indicator lists. #The API doesn't necessarily give the data for every data for the different requests if all(day in indic for indic in dataDict): vector = [] priceData[day] = collections.OrderedDict(sorted(priceData[day].items())) for stat in priceData[day]: vector.append(float(priceData[day][stat])) priceList.append(vector) vector = [] for x in range(0,len(dataDict)): #Order the different stats within a data, so the order is consistent across vectors dataDict[x][day] = collections.OrderedDict(sorted(dataDict[x][day].items())) #Combine all the different data into a vector for x in range(0,len(dataDict)): for stat in dataDict[x][day]: vector.append(float(dataDict[x][day][stat])) trainingData.append(vector) #If the user wanted to do a tDF, the training data is transformed, otherwise the trainingData goes straight to PredictAndTest trendDeter = False if tDF == "No" else True #delete first element of priceList because trendDeter, remove first element form training data if trendDeter: del priceList[0] predictAndTest(trendDeterTransform(trainingData), priceList, trendDeter, alg, tInterval, dates, typeClass, return_list) else: predictAndTest(trainingData, priceList, trendDeter, alg, tInterval, dates, typeClass, return_list)
class DataLoader: """ API limit: 5 API requests per minute and 500 requests per day Get your free API key from https://www.alphavantage.co/support/#support FOREX, while supported, is not implemented. API details here: https://github.com/RomelTorres/alpha_vantage """ def __init__(self, api_key): self.API_KEY = api_key self.cc = CryptoCurrencies(key=self.API_KEY, output_format='pandas') self.ti = TechIndicators(key=self.API_KEY, output_format='pandas') self.ts = TimeSeries(key=self.API_KEY, output_format='pandas') def get_local_data(self, path): df = pd.read_csv(path) return df.sort_values('Timestamp') def get_crypto(self, crypto_symbol): data, _ = self.cc.get_digital_currency_daily(symbol=crypto_symbol, market='CNY') return rename_data(data, crypto=True) def get_stock(self, stock: str, period=TimeFrame.TimeFrame.DAILY, full: bool = False): """ Returns stock data and meta data of the ticker for the specified time frame :param stock: [ENUM]: Stock ticker :param period: [ENUM] DAILY, WEEKLY, MONTHLY :param full: Returns only last 100 ticks if False, otherwise full tick data set if True. False by default. :return: stock data, meta_data """ if period is TimeFrame.TimeFrame.DAILY: if full: data, _ = self.ts.get_daily(symbol=stock.upper(), outputsize='full') return rename_data(data) else: data, _ = self.ts.get_daily(symbol=stock.upper(), outputsize='compact') return rename_data(data) if period is TimeFrame.TimeFrame.WEEKLY: if full: data, _ = data = self.ts.get_weekly(symbol=stock.upper(), outputsize='full') return rename_data(data) else: data, _ = self.ts.get_weekly(symbol=stock.upper(), outputsize='compact') return rename_data(data) if period is TimeFrame.TimeFrame.MONTHLY: if full: data, _ = self.ts.get_monthly(symbol=stock.upper(), outputsize='full') return rename_data(data) else: data, _ = self.ts.get_monthly(symbol=stock.upper(), outputsize='compact') return rename_data(data) def get_intraday_stock(self, stock: str, interval: INTERVAL = INTERVAL.INTERVAL.FIVE_MIN, full: bool = False): """ Returns intraday tick data for the given stock in the given time interval :param stock: [ENUM] ticker :param interval: [ENUM] 1min, 5min, 15min, 30min, 60min :param full: Returns only last 100 ticks if False, otherwise full tick data set if True. False by default. :return: stock data, meta_data """ if full: data, _ = self.ts.get_intraday(symbol=stock.upper(), interval=interval.value, outputsize='full') return rename_data(data) else: data, _ = self.ts.get_intraday(symbol=stock.upper(), interval=interval.value, outputsize='compact') return rename_data(data) def get_tech_indicator( self, stock="MSFT", indicator=TECHIND.TECHIND.BBANDS, interval=TimeFrame.TimeFrame.DAILY, time_period: int = 20, ): """ Returns the technical indicator for the given stock ticker on the given interval :param indicator [ENUM]: @See TECHIND :param stock [ENUM]: Ticker :param interval: Daily, Weekly, Monthly. Set to Daily by default :param time_period: Nr of time units between two calculating points. Set to 20 by default. :return: pandas dataframe containing the technical indicator for all recorded trading days of the stock. """ if indicator is TECHIND.TECHIND.BBANDS: data, _ = self.ti.get_bbands(symbol=stock.upper(), interval=interval.name.lower(), time_period=time_period) if indicator is TECHIND.TECHIND.SMA: data, _ = self.ti.get_sma(symbol=stock.upper(), interval=interval.name.lower(), time_period=time_period) if indicator is TECHIND.TECHIND.EMA: data, _ = self.ti.get_ema(symbol=stock.upper(), interval=interval.name.lower(), time_period=time_period) if indicator is TECHIND.TECHIND.WMA: data, _ = self.ti.get_wma(symbol=stock.upper(), interval=interval.name.lower(), time_period=time_period) if indicator is TECHIND.TECHIND.MACD: data, _ = self.ti.get_macd(symbol=stock.upper(), interval=interval.name.lower()) if indicator is TECHIND.TECHIND.STOCH: data, _ = self.ti.get_stoch(symbol=stock.upper(), interval=interval.name.lower()) if indicator is TECHIND.TECHIND.RSI: data, _ = self.ti.get_rsi(symbol=stock.upper(), interval=interval.name.lower(), time_period=time_period) if indicator is TECHIND.TECHIND.ADX: data, _ = self.ti.get_adx(symbol=stock.upper(), interval=interval.name.lower(), time_period=time_period) if indicator is TECHIND.TECHIND.CCI: data, _ = self.ti.get_cci(symbol=stock.upper(), interval=interval.name.lower(), time_period=time_period) if indicator is TECHIND.TECHIND.AROON: data, _ = self.ti.get_aroon(symbol=stock.upper(), interval=interval.name.lower(), time_period=time_period) if indicator is TECHIND.TECHIND.MOM: data, _ = self.ti.get_mom(symbol=stock.upper(), interval=interval.name.lower()) if indicator is TECHIND.TECHIND.OBV: data, _ = self.ti.get_obv(symbol=stock.upper(), interval=interval.name.lower()) return data