def ADX(df, window_adx=14): adxI = ADXIndicator(df['high'], df['low'], df['close'], window_adx, False) df['PDI'] = adxI.adx_pos() df['NDI'] = adxI.adx_neg() #df['adx'] = adxI.adx() df['ADX'] = ((adxI.adx_pos() - adxI.adx_neg()) / (adxI.adx_pos() + adxI.adx_neg())).rolling(14).mean() return (df)
def get_current_info(self, history: pd.DataFrame, newData: pd.DataFrame, isTD: bool = False) -> Tuple[float, float, float, float, float, datetime, pd.DataFrame]: """ get the latest ADX, pos/neg indicator and date """ history = history.dropna() newData = self.data_preparation(newData) history = history.append(newData) smoothed = 14 adxI = ADXIndicator(history['premium_high'], history['premium_low'], history['premium_close'], smoothed, False) history['pos_directional_indicator'] = adxI.adx_pos() history['neg_directional_indicator'] = adxI.adx_neg() history['adx'] = adxI.adx() adx = history.iloc[-1]['adx'] posDI = history.iloc[-1]['pos_directional_indicator'] negDI = history.iloc[-1]['neg_directional_indicator'] marketPrice = history.iloc[-1]['gbtc_open_price'] curPremium = history.iloc[-1]['premium_close'] date = history.index[-1] return (adx, posDI, negDI, marketPrice, curPremium, datetime.strptime(date, '%Y-%m-%dT%H:%M:%SZ') if not isTD else datetime.strptime(date, '%Y-%m-%d %H:%M:%S'), history)
def DMI(df, n1): #trend df_DMI = df.copy() adxi = ADXIndicator(df['High'], df['Low'], df['Close'], n1, False) df['plusDI'] = adxi.adx_pos() df['minusDI'] = adxi.adx_neg() df['adx'] = adxi.adx() return df
def getADXList(data): adxI = ADXIndicator(data['High'], data['Low'], data['Close'], 14, False) data['pos_directional_indicator'] = adxI.adx_pos() data['neg_directional_indicator'] = adxI.adx_neg() data['adx'] = adxI.adx() return data[[ 'pos_directional_indicator', 'neg_directional_indicator', 'adx' ]]
def adx_indicator(data): data['Adj Open'] = data.Open * data['Adj Close'] / data['Close'] data['Adj High'] = data.High * data['Adj Close'] / data['Close'] data['Adj Low'] = data.Low * data['Adj Close'] / data['Close'] data.dropna(inplace=True) adxI = ADXIndicator(data['Adj High'], data['Adj Low'], data['Adj Close'], 14, False) data['pos_directional_indicator'] = adxI.adx_pos() data['neg_directional_indicator'] = adxI.adx_neg() data['adx'] = adxI.adx() data['di_pos'] = adxI.adx_pos() data['di_neg'] = adxI.adx_neg() #print(data['di_neg']) data['trend_signal'] = np.where(data['adx'] > 25, 1, 0) data['adx_indicator'] = np.where( (data['adx'] >= 25) & (data['di_pos'] >= data['di_neg']), 1, 0) return data
def DMI(self, df, n): #trend df_DMI = df.copy() adxi = ADXIndicator(df['High'], df['Low'], df['Close'], n, False) df['plusDI'] = adxi.adx_pos() df['minusDI'] = adxi.adx_neg() df['adx'] = adxi.adx() # df['DMI'] = np.where((df_DMI['+DI']>df_DMI['-DI'])&(df_DMI['+DI'].shift()<df_DMI['-DI'].shift()),'buy', # (np.where((df_DMI['+DI'] < df_DMI['-DI']) & (df_DMI['+DI'].shift()>df_DMI['-DI'].shift()),'sell','wait or hold'))) return df
def preprocess_data(self, data: pd.DataFrame) -> pd.DataFrame: btc_per_share = 0.00094498 data["nav_open_price"] = data["open_price_x"] * \ btc_per_share data["nav_close_price"] = data["close_price_x"] * btc_per_share data["nav_high_price"] = data["high_price_x"] * \ btc_per_share data["nav_low_price"] = data["low_price_x"] * \ btc_per_share # Calculate premium high data["nav_high_price"] = data["high_price_x"] * btc_per_share data["premium_high"] = (data["high_price_y"] - data["nav_high_price"] ) / data["nav_high_price"] data["premium_high"].dropna() # Calculate premium low data["nav_low_price"] = data["low_price_x"] * btc_per_share data["premium_low"] = (data["low_price_y"] - data["nav_low_price"]) / data["nav_low_price"] data["premium_low"].dropna() # Calculate premium close data["nav_close_price"] = data["close_price_x"] * btc_per_share data["premium_close"] = ( data["close_price_y"] - data["nav_close_price"]) / data["nav_close_price"] data["premium_close"].dropna() print(data) # Calculate ADX, pos/neg direction indicators smoothed = 70 adxI = ADXIndicator(data['premium_high'], data['premium_low'], data['premium_close'], smoothed, False) data['pos_directional_indicator'] = adxI.adx_pos() data['neg_directional_indicator'] = adxI.adx_neg() data['adx'] = adxI.adx() data.dropna() return data
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
f' from historical_data where historical_data.symbol = {SYMBOL}',conn ) #df = ta.add_all_ta_features(df, open = "open_price" , high = "high_price" , low = "low_price" , close = "close_price" , # volume= "volume", fillna= True) low = df["low_price"].to_list() print(low) high = df["high_price"] print (high) close = df["close_price"] print(close) #print(df["low_price"]) print(df.columns) indicator = ADXIndicator( high= df["high_price"], low = df["low_price"] , close = df["close_price"], n=14, fillna= True) print(indicator) df['ADX_NEG'] = indicator.adx_neg() df['ADX_POSVT'] = indicator.adx_pos() #df['RSI']=indicator.rsi() df['ADX'] = indicator.adx() print(df) ohlc = df.loc[:, ['date_recorded', 'open_price', 'high_price', 'low_price', 'close_price']] #print(ohlc) #Now got the price of the tatamotors #aapl['Date'] = aapl.index.map(mdates.date2num)
def add_trend_ta( df: pd.DataFrame, high: str, low: str, close: str, fillna: bool = False, colprefix: str = "", vectorized: bool = False, ) -> pd.DataFrame: """Add trend technical analysis features to dataframe. Args: df (pandas.core.frame.DataFrame): Dataframe base. high (str): Name of 'high' column. low (str): Name of 'low' column. close (str): Name of 'close' column. fillna(bool): if True, fill nan values. colprefix(str): Prefix column names inserted vectorized(bool): if True, use only vectorized functions indicators Returns: pandas.core.frame.DataFrame: Dataframe with new features. """ # MACD indicator_macd = MACD(close=df[close], window_slow=26, window_fast=12, window_sign=9, fillna=fillna) df[f"{colprefix}trend_macd"] = indicator_macd.macd() df[f"{colprefix}trend_macd_signal"] = indicator_macd.macd_signal() df[f"{colprefix}trend_macd_diff"] = indicator_macd.macd_diff() # SMAs df[f"{colprefix}trend_sma_fast"] = SMAIndicator( close=df[close], window=12, fillna=fillna).sma_indicator() df[f"{colprefix}trend_sma_slow"] = SMAIndicator( close=df[close], window=26, fillna=fillna).sma_indicator() # EMAs df[f"{colprefix}trend_ema_fast"] = EMAIndicator( close=df[close], window=12, fillna=fillna).ema_indicator() df[f"{colprefix}trend_ema_slow"] = EMAIndicator( close=df[close], window=26, fillna=fillna).ema_indicator() # Vortex Indicator indicator_vortex = VortexIndicator(high=df[high], low=df[low], close=df[close], window=14, fillna=fillna) df[f"{colprefix}trend_vortex_ind_pos"] = indicator_vortex.vortex_indicator_pos( ) df[f"{colprefix}trend_vortex_ind_neg"] = indicator_vortex.vortex_indicator_neg( ) df[f"{colprefix}trend_vortex_ind_diff"] = indicator_vortex.vortex_indicator_diff( ) # TRIX Indicator df[f"{colprefix}trend_trix"] = TRIXIndicator(close=df[close], window=15, fillna=fillna).trix() # Mass Index df[f"{colprefix}trend_mass_index"] = MassIndex(high=df[high], low=df[low], window_fast=9, window_slow=25, fillna=fillna).mass_index() # DPO Indicator df[f"{colprefix}trend_dpo"] = DPOIndicator(close=df[close], window=20, fillna=fillna).dpo() # KST Indicator indicator_kst = KSTIndicator( close=df[close], roc1=10, roc2=15, roc3=20, roc4=30, window1=10, window2=10, window3=10, window4=15, nsig=9, fillna=fillna, ) df[f"{colprefix}trend_kst"] = indicator_kst.kst() df[f"{colprefix}trend_kst_sig"] = indicator_kst.kst_sig() df[f"{colprefix}trend_kst_diff"] = indicator_kst.kst_diff() # Ichimoku Indicator indicator_ichi = IchimokuIndicator( high=df[high], low=df[low], window1=9, window2=26, window3=52, visual=False, fillna=fillna, ) df[f"{colprefix}trend_ichimoku_conv"] = indicator_ichi.ichimoku_conversion_line( ) df[f"{colprefix}trend_ichimoku_base"] = indicator_ichi.ichimoku_base_line() df[f"{colprefix}trend_ichimoku_a"] = indicator_ichi.ichimoku_a() df[f"{colprefix}trend_ichimoku_b"] = indicator_ichi.ichimoku_b() # Schaff Trend Cycle (STC) df[f"{colprefix}trend_stc"] = STCIndicator( close=df[close], window_slow=50, window_fast=23, cycle=10, smooth1=3, smooth2=3, fillna=fillna, ).stc() if not vectorized: # Average Directional Movement Index (ADX) indicator_adx = ADXIndicator(high=df[high], low=df[low], close=df[close], window=14, fillna=fillna) df[f"{colprefix}trend_adx"] = indicator_adx.adx() df[f"{colprefix}trend_adx_pos"] = indicator_adx.adx_pos() df[f"{colprefix}trend_adx_neg"] = indicator_adx.adx_neg() # CCI Indicator df[f"{colprefix}trend_cci"] = CCIIndicator( high=df[high], low=df[low], close=df[close], window=20, constant=0.015, fillna=fillna, ).cci() # Ichimoku Visual Indicator indicator_ichi_visual = IchimokuIndicator( high=df[high], low=df[low], window1=9, window2=26, window3=52, visual=True, fillna=fillna, ) df[f"{colprefix}trend_visual_ichimoku_a"] = indicator_ichi_visual.ichimoku_a( ) df[f"{colprefix}trend_visual_ichimoku_b"] = indicator_ichi_visual.ichimoku_b( ) # Aroon Indicator indicator_aroon = AroonIndicator(close=df[close], window=25, fillna=fillna) df[f"{colprefix}trend_aroon_up"] = indicator_aroon.aroon_up() df[f"{colprefix}trend_aroon_down"] = indicator_aroon.aroon_down() df[f"{colprefix}trend_aroon_ind"] = indicator_aroon.aroon_indicator() # PSAR Indicator indicator_psar = PSARIndicator( high=df[high], low=df[low], close=df[close], step=0.02, max_step=0.20, fillna=fillna, ) # df[f'{colprefix}trend_psar'] = indicator.psar() df[f"{colprefix}trend_psar_up"] = indicator_psar.psar_up() df[f"{colprefix}trend_psar_down"] = indicator_psar.psar_down() df[f"{colprefix}trend_psar_up_indicator"] = indicator_psar.psar_up_indicator( ) df[f"{colprefix}trend_psar_down_indicator"] = indicator_psar.psar_down_indicator( ) return df
def add_trend_ta(df: pd.DataFrame, high: str, low: str, close: str, fillna: bool = False, colprefix: str = ""): """Add trend technical analysis features to dataframe. Args: df (pandas.core.frame.DataFrame): Dataframe base. high (str): Name of 'high' column. low (str): Name of 'low' column. close (str): Name of 'close' column. fillna(bool): if True, fill nan values. colprefix(str): Prefix column names inserted Returns: pandas.core.frame.DataFrame: Dataframe with new features. """ # MACD indicator_macd = MACD(close=df[close], n_fast=12, n_slow=26, n_sign=9, fillna=fillna) df[f'{colprefix}trend_macd'] = indicator_macd.macd() df[f'{colprefix}trend_macd_signal'] = indicator_macd.macd_signal() df[f'{colprefix}trend_macd_diff'] = indicator_macd.macd_diff() # EMAs df[f'{colprefix}trend_ema_fast'] = EMAIndicator( close=df[close], n=12, fillna=fillna).ema_indicator() df[f'{colprefix}trend_ema_slow'] = EMAIndicator( close=df[close], n=26, fillna=fillna).ema_indicator() # Average Directional Movement Index (ADX) indicator = ADXIndicator(high=df[high], low=df[low], close=df[close], n=14, fillna=fillna) df[f'{colprefix}trend_adx'] = indicator.adx() df[f'{colprefix}trend_adx_pos'] = indicator.adx_pos() df[f'{colprefix}trend_adx_neg'] = indicator.adx_neg() # Vortex Indicator indicator = VortexIndicator(high=df[high], low=df[low], close=df[close], n=14, fillna=fillna) df[f'{colprefix}trend_vortex_ind_pos'] = indicator.vortex_indicator_pos() df[f'{colprefix}trend_vortex_ind_neg'] = indicator.vortex_indicator_neg() df[f'{colprefix}trend_vortex_ind_diff'] = indicator.vortex_indicator_diff() # TRIX Indicator indicator = TRIXIndicator(close=df[close], n=15, fillna=fillna) df[f'{colprefix}trend_trix'] = indicator.trix() # Mass Index indicator = MassIndex(high=df[high], low=df[low], n=9, n2=25, fillna=fillna) df[f'{colprefix}trend_mass_index'] = indicator.mass_index() # CCI Indicator indicator = CCIIndicator(high=df[high], low=df[low], close=df[close], n=20, c=0.015, fillna=fillna) df[f'{colprefix}trend_cci'] = indicator.cci() # DPO Indicator indicator = DPOIndicator(close=df[close], n=20, fillna=fillna) df[f'{colprefix}trend_dpo'] = indicator.dpo() # KST Indicator indicator = KSTIndicator(close=df[close], r1=10, r2=15, r3=20, r4=30, n1=10, n2=10, n3=10, n4=15, nsig=9, fillna=fillna) df[f'{colprefix}trend_kst'] = indicator.kst() df[f'{colprefix}trend_kst_sig'] = indicator.kst_sig() df[f'{colprefix}trend_kst_diff'] = indicator.kst_diff() # Ichimoku Indicator indicator = IchimokuIndicator(high=df[high], low=df[low], n1=9, n2=26, n3=52, visual=False, fillna=fillna) df[f'{colprefix}trend_ichimoku_a'] = indicator.ichimoku_a() df[f'{colprefix}trend_ichimoku_b'] = indicator.ichimoku_b() indicator = IchimokuIndicator(high=df[high], low=df[low], n1=9, n2=26, n3=52, visual=True, fillna=fillna) df[f'{colprefix}trend_visual_ichimoku_a'] = indicator.ichimoku_a() df[f'{colprefix}trend_visual_ichimoku_b'] = indicator.ichimoku_b() # Aroon Indicator indicator = AroonIndicator(close=df[close], n=25, fillna=fillna) df[f'{colprefix}trend_aroon_up'] = indicator.aroon_up() df[f'{colprefix}trend_aroon_down'] = indicator.aroon_down() df[f'{colprefix}trend_aroon_ind'] = indicator.aroon_indicator() # PSAR Indicator indicator = PSARIndicator(high=df[high], low=df[low], close=df[close], step=0.02, max_step=0.20, fillna=fillna) df[f'{colprefix}trend_psar'] = indicator.psar() df[f'{colprefix}trend_psar_up'] = indicator.psar_up() df[f'{colprefix}trend_psar_down'] = indicator.psar_down() df[f'{colprefix}trend_psar_up_indicator'] = indicator.psar_up_indicator() df[f'{colprefix}trend_psar_down_indicator'] = indicator.psar_down_indicator( ) return df