def ta_ema(df): """ It create the exponential moving average variable. :param df: pandas dataframe :return: pandas dataframe """ temp_df = df.copy() # test = EMAIndicator(temp_df["Close"], window=mc["ema_period"], fillna=True) test = EMAIndicator(temp_df["Close"], fillna=False) temp_df["ta_ema"] = test.ema_indicator() return temp_df
def add_trend_indicators(data: pd.DataFrame) -> pd.DataFrame: """Adds the trend indicators. Parameters ---------- data : pd.DataFrame A dataframe with daily stock values. Must include: open, high, low, close and volume. It should also be sorted in a descending manner. Returns ------- pd.DataFrame The input dataframe with the indicators added. """ adx = ADXIndicator(data['high'], data['low'], data['close']) ema = EMAIndicator(data['close']) ema_200 = EMAIndicator(data['close'], n=200) ichimoku = IchimokuIndicator(data['high'], data['low']) macd = MACD(data['close']) sma = SMAIndicator(data['close'], n=14) sma_200 = SMAIndicator(data['close'], n=200) data.loc[:, 'adx'] = adx.adx() data.loc[:, 'adx_pos'] = adx.adx_pos() data.loc[:, 'adx_neg'] = adx.adx_neg() data.loc[:, 'ema'] = ema.ema_indicator() data.loc[:, 'ema_200'] = ema_200.ema_indicator() data.loc[:, 'ichimoku_a'] = ichimoku.ichimoku_a() data.loc[:, 'ichimoku_b'] = ichimoku.ichimoku_b() data.loc[:, 'ichimoku_base_line'] = ichimoku.ichimoku_base_line() data.loc[:, 'ichimoku_conversion_line'] = ( ichimoku.ichimoku_conversion_line()) data.loc[:, 'macd'] = macd.macd() data.loc[:, 'macd_diff'] = macd.macd_diff() data.loc[:, 'macd_signal'] = macd.macd_signal() data.loc[:, 'sma'] = sma.sma_indicator() data.loc[:, 'sma_200'] = sma_200.sma_indicator() return data
def techIndicator(df1): #OFtrader # Initialize Bollinger Bands Indicator from ta.volatility import BollingerBands indicator_bb = BollingerBands(close=df1["Close"], window=10, window_dev=2) # Add Bollinger Bands features df1['bb_bbh'] = indicator_bb.bollinger_hband() df1['bb_bbl'] = indicator_bb.bollinger_lband() # Initialize Bollinger Bands Indicator from ta.trend import PSARIndicator indicator_SAR = PSARIndicator(high=df1["high"], low=df1["low"], close=df1["Close"]) # Add Bollinger Bands features df1['sar_high'] = indicator_SAR.psar_up() df1['sar_low'] = indicator_SAR.psar_down() from ta.trend import EMAIndicator indicator_EMA = EMAIndicator(close=df1["Close"], window=7) df1['Media7'] = indicator_EMA.ema_indicator() df1['sar_low'] = df1['sar_low'].fillna(0) df1['sar_high'] = df1['sar_high'].fillna(0) df1['Distancia_M7'] = df1['Close'] / df1['Media7'] df1['Distancia_BBH'] = df1['Close'] / df1['bb_bbh'] df1['Distancia_BBL'] = df1['Close'] / df1['bb_bbl'] df1['Distancia_SAR'] = np.where(df1['sar_high'] > 0, df1['Close'] / df1['sar_high'], df1['sar_low'] / df1['Close']) df1['posicao_sar'] = np.where(df1['sar_high'] > 0, '1', '0') corte = 3 df1["Distancia_M7"] = pd.qcut(df1["Distancia_M7"], corte, labels=False) df1["Distancia_BBH"] = pd.qcut(df1["Distancia_BBH"], corte, labels=False) df1["Distancia_BBL"] = pd.qcut(df1["Distancia_BBL"], 15, labels=False) df1["Distancia_SAR"] = pd.qcut(df1["Distancia_SAR"], 15, labels=False) # # Padrão Bom com M7: 3 - BBH: 3 - BBL: 15 - DSAR: 15 df1 = df1.drop(["sar_high", "sar_low", "bb_bbh", "bb_bbl", "Media7"], axis=1) #df1.tail(50) return df1
def get_ema(data, days): """ Function to get the EMA of a ticker """ ema = EMAIndicator(close=data["c"], n=days) return ema.ema_indicator()
def __init__(self, symbols): # data = json.loads(symbols) # df_stock = pd.json_normalize(symbols) # df_stock = pd.read_csv(fn,names = ['sym']).drop_duplicates() df_stock = pd.DataFrame(symbols) ls_stock = df_stock['sym'].to_list() df_stock = df_stock.reset_index() df_stock.columns = ['sort', 'sym'] df_stock.head() # In[3]: start = dt.date.today() + relativedelta(days=-150) end = dt.date.today() + relativedelta(days=-0) ls_tickers = ls_stock ls_df = [] for ticker in ls_tickers: try: df = web.DataReader(ticker, 'yahoo', start, end) except Exception as e: print(str(e)) continue df['sym'] = ticker ls_df.append(df.copy()) df_price = pd.concat(ls_df).reset_index() df_price.columns = [ 'dte', 'hgh', 'low', 'opn', 'cls', 'vol', 'cls_adj', 'sym' ] df_price.sort_values(['sym', 'dte'], inplace=True) df_price = df_price[['dte', 'sym', 'hgh', 'low', 'cls', 'vol']].copy() df_price['curr'] = end df_price['curr'] = pd.to_datetime(df_price['curr']) df_price['dte'] = pd.to_datetime(df_price['dte']) df_price['ndays'] = (df_price['curr'] - df_price['dte']).dt.days df_price['ndays'] = df_price.groupby(['sym'])['ndays'].rank() df_price[df_price['sym'] == 'SPY'].head() # In[4]: ls_df = [] ls_tickers = ls_stock for ticker in ls_tickers: #df = dropna(df_price[df_price['sym']==ticker]) df = df_price[df_price['sym'] == ticker].copy() indicator_bb = BollingerBands(close=df['cls'], window=20, window_dev=2) indicator_macd = MACD(close=df['cls'], window_fast=12, window_slow=26, window_sign=9) indicator_rsi14 = RSIIndicator(close=df['cls'], window=14) indicator_cci20 = cci(high=df['hgh'], low=df['low'], close=df['cls'], window=20, constant=0.015) indicator_obv = OnBalanceVolumeIndicator(close=df['cls'], volume=df['vol'], fillna=True) indicator_vol_sma20 = SMAIndicator(close=df['vol'], window=20) indicator_ema03 = EMAIndicator(close=df['cls'], window=3) indicator_ema05 = EMAIndicator(close=df['cls'], window=5) indicator_ema08 = EMAIndicator(close=df['cls'], window=8) indicator_ema10 = EMAIndicator(close=df['cls'], window=10) indicator_ema12 = EMAIndicator(close=df['cls'], window=12) indicator_ema15 = EMAIndicator(close=df['cls'], window=15) indicator_ema30 = EMAIndicator(close=df['cls'], window=30) indicator_ema35 = EMAIndicator(close=df['cls'], window=35) indicator_ema40 = EMAIndicator(close=df['cls'], window=40) indicator_ema45 = EMAIndicator(close=df['cls'], window=45) indicator_ema50 = EMAIndicator(close=df['cls'], window=50) indicator_ema60 = EMAIndicator(close=df['cls'], window=60) # Add Bollinger Band high indicator df['bb_bbhi'] = indicator_bb.bollinger_hband_indicator() # Add Bollinger Band low indicator df['bb_bbli'] = indicator_bb.bollinger_lband_indicator() #df['macd'] = indicator_macd.macd() df['macd'] = indicator_macd.macd_diff() #df['macd_signal'] = indicator_macd.macd_signal() df['obv'] = indicator_obv.on_balance_volume() df['vol_sma20'] = indicator_vol_sma20.sma_indicator() df['ema03'] = indicator_ema03.ema_indicator() df['ema05'] = indicator_ema05.ema_indicator() df['ema08'] = indicator_ema08.ema_indicator() df['ema10'] = indicator_ema10.ema_indicator() df['ema12'] = indicator_ema12.ema_indicator() df['ema15'] = indicator_ema15.ema_indicator() df['ema30'] = indicator_ema30.ema_indicator() df['ema35'] = indicator_ema35.ema_indicator() df['ema40'] = indicator_ema40.ema_indicator() df['ema45'] = indicator_ema45.ema_indicator() df['ema50'] = indicator_ema50.ema_indicator() df['ema60'] = indicator_ema60.ema_indicator() df['rsi14'] = indicator_rsi14.rsi() df['cci20'] = indicator_cci20 ls_df.append(df.copy()) df = pd.concat(ls_df) df['score_vol_sma20'] = df[['vol', 'vol_sma20']].apply(lambda x: x[0] / x[1], axis=1) df['emash_min'] = df[[ 'ema03', 'ema05', 'ema08', 'ema10', 'ema12', 'ema15' ]].min(axis=1) df['emash_max'] = df[[ 'ema03', 'ema05', 'ema08', 'ema10', 'ema12', 'ema15' ]].max(axis=1) df['emash_avg'] = df[[ 'ema03', 'ema05', 'ema08', 'ema10', 'ema12', 'ema15' ]].mean(axis=1) #df['score_short'] = df[['cls','emash_min','emash_max','emash_min']].apply(lambda x: 100 * (x[0]-x[1])/(x[2]-x[3]),axis=1) df['emalg_min'] = df[[ 'ema30', 'ema35', 'ema40', 'ema45', 'ema50', 'ema60' ]].min(axis=1) df['emalg_max'] = df[[ 'ema30', 'ema35', 'ema40', 'ema45', 'ema50', 'ema60' ]].max(axis=1) df['emalg_avg'] = df[[ 'ema30', 'ema35', 'ema40', 'ema45', 'ema50', 'ema60' ]].mean(axis=1) #df['score_long'] = df[['cls','emalg_min','emalg_max','emalg_min']].apply(lambda x: 100 * (x[0]-x[1])/(x[2]-x[3]),axis=1) df['ema_min'] = df[[ 'ema03', 'ema05', 'ema08', 'ema10', 'ema12', 'ema15', 'ema30', 'ema35', 'ema40', 'ema45', 'ema50', 'ema60' ]].min(axis=1) df['ema_max'] = df[[ 'ema03', 'ema05', 'ema08', 'ema10', 'ema12', 'ema15', 'ema30', 'ema35', 'ema40', 'ema45', 'ema50', 'ema60' ]].max(axis=1) df['score_ovlp_ema'] = df[[ 'emash_min', 'emalg_max', 'ema_max', 'ema_min' ]].apply(lambda x: 100 * (x[0] - x[1]) / (x[2] - x[3]), axis=1) df = pd.merge(df_stock, df, on=['sym'], how='inner').sort_values(['sort', 'ndays']) decimals = pd.Series([1, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0], index=[ 'cls', 'ndays', 'vol', 'score_vol_sma20', 'bb_bbhi', 'bb_bbli', 'macd', 'obv', 'rsi14', 'cci20', 'score_ovlp_ema' ]) cols = [ 'ndays', 'dte', 'sort', 'sym', 'cls', 'vol', 'score_vol_sma20', 'bb_bbhi', 'bb_bbli', 'macd', 'obv', 'rsi14', 'cci20', 'score_ovlp_ema' ] df = df[df['ndays'] <= 10][cols].round(decimals).copy() print(df['score_ovlp_ema'].min(), df['score_ovlp_ema'].max()) df[df['sym'] == 'QQQ'].head(50) self.df = df
insert_list = list() # get all the prices for equity ticker_eod_df = eod_df[eod_df['equity_id'] == equity_id] ticker_eod_df = ticker_eod_df.sort_values(by=['trading_date']) df = dropna(ticker_eod_df) # Initialize Bollinger Bands Indicator indicator_bb = BollingerBands(close=df["adj_close"], window=20, window_dev=2) # Add Bollinger Bands features df['bb_bbm'] = indicator_bb.bollinger_mavg() df['bb_bbh'] = indicator_bb.bollinger_hband() df['bb_bbl'] = indicator_bb.bollinger_lband() # EMA Indicator indicator_ema_200 = EMAIndicator(close=df["adj_close"], window=200) df['ema_200'] = indicator_ema_200.ema_indicator() indicator_ema_100 = EMAIndicator(close=df["adj_close"], window=100) df['ema_100'] = indicator_ema_100.ema_indicator() indicator_ema_50 = EMAIndicator(close=df["adj_close"], window=50) df['ema_50'] = indicator_ema_50.ema_indicator() # SMA Indicator indicator_sma_200 = SMAIndicator(close=df["adj_close"], window=200) df['sma_200'] = indicator_sma_200.sma_indicator() indicator_sma_100 = SMAIndicator(close=df["adj_close"], window=100) df['sma_100'] = indicator_sma_100.sma_indicator() indicator_sma_50 = SMAIndicator(close=df["adj_close"], window=50) df['sma_50'] = indicator_sma_50.sma_indicator() # RSI Indicator indicator_rsi_6 = RSIIndicator(close=df["adj_close"], window=6)
def applyIndicator(self, full_company_price): self.data = full_company_price high = self.data['high'] low = self.data['low'] close = self.data['close'] volume = self.data['volume'] EMA12 = EMAIndicator(close, 12, fillna=False) EMA30 = EMAIndicator(close, 20, fillna=False) EMA60 = EMAIndicator(close, 60, fillna=False) MACD1226 = MACD(close, 26, 12, 9, fillna=False) MACD2452 = MACD(close, 52, 24, 18, fillna=False) ROC12 = ROCIndicator(close, 12, fillna=False) ROC30 = ROCIndicator(close, 30, fillna=False) ROC60 = ROCIndicator(close, 60, fillna=False) RSI14 = RSIIndicator(close, 14, fillna=False) RSI28 = RSIIndicator(close, 28, fillna=False) RSI60 = RSIIndicator(close, 60, fillna=False) AROON25 = AroonIndicator(close, 25, fillna=False) AROON50 = AroonIndicator(close, 50, fillna=False) AROON80 = AroonIndicator(close, 80, fillna=False) MFI14 = MFIIndicator(high, low, close, volume, 14, fillna=False) MFI28 = MFIIndicator(high, low, close, volume, 28, fillna=False) MFI80 = MFIIndicator(high, low, close, volume, 80, fillna=False) CCI20 = CCIIndicator(high, low, close, 20, 0.015, fillna=False) CCI40 = CCIIndicator(high, low, close, 40, 0.015, fillna=False) CCI100 = CCIIndicator(high, low, close, 100, 0.015, fillna=False) WILLR14 = WilliamsRIndicator(high, low, close, 14, fillna=False) WILLR28 = WilliamsRIndicator(high, low, close, 28, fillna=False) WILLR60 = WilliamsRIndicator(high, low, close, 60, fillna=False) BBANDS20 = BollingerBands(close, 20, 2, fillna=False) KC20 = KeltnerChannel(high, low, close, 20, 10, fillna=False) STOCH14 = StochasticOscillator(high, low, close, 14, 3, fillna=False) STOCH28 = StochasticOscillator(high, low, close, 28, 6, fillna=False) STOCH60 = StochasticOscillator(high, low, close, 60, 12, fillna=False) CMI20 = ChaikinMoneyFlowIndicator(high, low, close, volume, 20, fillna=False) CMI40 = ChaikinMoneyFlowIndicator(high, low, close, volume, 40, fillna=False) CMI100 = ChaikinMoneyFlowIndicator(high, low, close, volume, 100, fillna=False) self.data['ema12'] = (close - EMA12.ema_indicator()) / close self.data['ema30'] = (close - EMA30.ema_indicator()) / close self.data['ema60'] = (close - EMA60.ema_indicator()) / close self.data['macd1226'] = MACD1226.macd() - MACD1226.macd_signal() self.data['macd2452'] = MACD2452.macd() - MACD2452.macd_signal() self.data['roc12'] = ROC12.roc() self.data['roc30'] = ROC30.roc() self.data['roc60'] = ROC60.roc() self.data['rsi14'] = RSI14.rsi() self.data['rsi28'] = RSI28.rsi() self.data['rsi60'] = RSI60.rsi() self.data['aroon25'] = AROON25.aroon_indicator() self.data['aroon50'] = AROON50.aroon_indicator() self.data['aroon80'] = AROON80.aroon_indicator() self.data['mfi14'] = MFI14.money_flow_index() self.data['mfi28'] = MFI28.money_flow_index() self.data['mfi80'] = MFI80.money_flow_index() self.data['cci20'] = CCI20.cci() self.data['cci40'] = CCI40.cci() self.data['cci100'] = CCI100.cci() self.data['willr14'] = WILLR14.wr() self.data['willr28'] = WILLR28.wr() self.data['willr60'] = WILLR60.wr() self.data['bband20up'] = (BBANDS20.bollinger_hband() - close) / close self.data['bband20down'] = (close - BBANDS20.bollinger_lband()) / close self.data['stoch14'] = STOCH14.stoch() self.data['stoch28'] = STOCH28.stoch() self.data['stoch60'] = STOCH60.stoch() self.data['cmi20'] = CMI20.chaikin_money_flow() self.data['cmi40'] = CMI40.chaikin_money_flow() self.data['cmi100'] = CMI100.chaikin_money_flow() self.data['kc20up'] = (KC20.keltner_channel_hband() - close) / close self.data['kc20down'] = (close - KC20.keltner_channel_lband()) / close return self.data
# Add Bollinger Band high indicator df['bb_bbhi'] = indicator_bb.bollinger_hband_indicator() # Add Bollinger Band low indicator df['bb_bbli'] = indicator_bb.bollinger_lband_indicator() #df['macd'] = indicator_macd.macd() df['macd'] = indicator_macd.macd_diff() #df['macd_signal'] = indicator_macd.macd_signal() df['obv'] = indicator_obv.on_balance_volume() df['vol_sma20'] = indicator_vol_sma20.sma_indicator() df['ema03'] = indicator_ema03.ema_indicator() df['ema05'] = indicator_ema05.ema_indicator() df['ema08'] = indicator_ema08.ema_indicator() df['ema10'] = indicator_ema10.ema_indicator() df['ema12'] = indicator_ema12.ema_indicator() df['ema15'] = indicator_ema15.ema_indicator() df['ema30'] = indicator_ema30.ema_indicator() df['ema35'] = indicator_ema35.ema_indicator() df['ema40'] = indicator_ema40.ema_indicator() df['ema45'] = indicator_ema45.ema_indicator() df['ema50'] = indicator_ema50.ema_indicator() df['ema60'] = indicator_ema60.ema_indicator() df['rsi14'] = indicator_rsi14.rsi() df['cci20'] = indicator_cci20
# Process json file closes = [] for candle in data: closes.append(float(candle[4])) print('Max: ', max(closes), '\nMin: ', min(closes)) df = pd.DataFrame(data=closes, columns=['close']) # Build technical indicators emas_Used = [3, 5, 8, 10, 12, 15, 30, 35, 40, 45, 50, 60] for x in emas_Used: ema = x indicator_ema = EMAIndicator(close=df['close'], window=x, fillna=False) df['ema_' + str(ema)] = indicator_ema.ema_indicator() # print(df.tail()) # Strategy position = 0 open_long = [] open_short = [] close_long = [] close_short = [] pnl = [] fees = [] for i in df.index: c_min = min( df['ema_3'][i], df['ema_5'][i],