def get_technical_indicators(dataset): # Create 7 and 21 days Moving Average dataset['ma5'] = dataset['Close'].rolling(window=5).mean() dataset['ma10'] = dataset['Close'].rolling(window=10).mean() # Create MACD dataset['26ema'] = func.EMA(dataset['Close'],26) dataset['12ema'] = func.EMA(dataset['Close'],12) dataset['MACD'] = (dataset['12ema']-dataset['26ema']) # Create Bollinger Bands dataset['10sd'] = dataset['Close'].rolling(10).std() dataset['upper_band'] = dataset['ma5'] + (dataset['10sd']*2) dataset['lower_band'] = dataset['ma10'] - (dataset['10sd']*2) # Create Exponential moving average dataset['ema'] = dataset['Close'].ewm(com=0.5).mean() # Create Momentum dataset['momentum'] = func.MOM(dataset['Close'],20) # ROC dataset['roc'] = func.ROC(dataset['Close'],10) # Willam dataset['wpr'] = func.WILLR(dataset['High'], dataset['Low'], dataset['Close'], timeperiod=14) # ATR dataset['atr'] = func.ATR(dataset['High'], dataset['Low'], dataset['Close'], timeperiod=14) return dataset
def test_unstable_period(): a = np.arange(10, dtype=float) r = func.EMA(a, 3) assert_np_arrays_equal(r, [np.nan, np.nan, 1, 2, 3, 4, 5, 6, 7, 8]) talib.set_unstable_period('EMA', 5) r = func.EMA(a, 3) assert_np_arrays_equal(r, [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 6, 7, 8]) talib.set_unstable_period('EMA', 0)
def test_compatibility(): a = np.arange(10, dtype=float) talib.set_compatibility(0) r = func.EMA(a, 3) assert_np_arrays_equal(r, [np.nan, np.nan, 1, 2, 3, 4, 5, 6, 7, 8]) talib.set_compatibility(1) r = func.EMA(a, 3) assert_np_arrays_equal(r, [ np.nan, np.nan, 1.25, 2.125, 3.0625, 4.03125, 5.015625, 6.0078125, 7.00390625, 8.001953125 ]) talib.set_compatibility(0)
def add_moving_average(df: pd.DataFrame, mat_window_: list): """ Adds moving averages columns to the DataFrame of historical prices :param df: pandas.Dataframe with historical prices :param mat_window_: list [moving average type, time window] defining moving averages to calculate Example ma_type_window_ = [['EMA', 13], ['WMA', 55]] """ for ma_ in mat_window_: # Extract params ma_type_, time_window_ = ma_ ma_type_ = ma_type_.upper() column_name_ = f'{ma_type_.title()}{time_window_:0>2}' # Identify, calculate and add moving average column to the DataFrame if ma_type_ == 'SMA': # Simple Moving Average # Visit https://www.investopedia.com/terms/s/sma.asp df[column_name_] = df['Close'].rolling(window=time_window_).mean() elif ma_type_ == 'EMA': # Exponential Moving Average # Visit https://www.investopedia.com/terms/e/ema.asp df[column_name_] = func.EMA(df['Close'], time_window_) elif ma_type_ == 'WMA': # Weighted Moving Average # Visit https://www.investopedia.com/terms/l/linearlyweightedmovingaverage.asp df[column_name_] = func.WMA(df['Close'], time_window_) else: logging.warning(f'ERROR: Calculation of moving average: {ma_type_}, not supported.')
return dataset #%% TI ma5 = Close.rolling(window=5).mean()['2007-02-08':] print(sum(sum(np.isnan(ma5.values)))) ma5_open = Open.rolling(window=5).mean()['2007-02-08':] print(sum(sum(np.isnan(ma5_open.values)))) ma10 = Close.rolling(window=10).mean()['2007-02-08':] print(sum(sum(np.isnan(ma10.values)))) ma10_open = Open.rolling(window=10).mean()['2007-02-08':] print(sum(sum(np.isnan(ma10_open.values)))) ema_26 = Close.apply(lambda x: func.EMA(x, 26), axis=0)['2007-02-08':] print(sum(sum(np.isnan(ema_26.values)))) ema_26_open = Open.apply(lambda x: func.EMA(x, 26), axis=0)['2007-02-08':] print(sum(sum(np.isnan(ema_26_open.values)))) ema_12 = Close.apply(lambda x: func.EMA(x, 12), axis=0)['2007-02-08':] print(sum(sum(np.isnan(ema_12.values)))) ema_12_open = Open.apply(lambda x: func.EMA(x, 12), axis=0)['2007-02-08':] print(sum(sum(np.isnan(ema_12_open.values)))) sd_10 = Close.rolling(10).std()['2007-02-08':] print(sum(sum(np.isnan(sd_10.values)))) sd_10_open = Open.rolling(10).std()['2007-02-08':] print(sum(sum(np.isnan(sd_10_open.values)))) bb_up = (ma5 + sd_10 * 2)['2007-02-08':]
def test_EMAEMA(): result = func.EMA(series, timeperiod=2) result = func.EMA(result, timeperiod=2) i = np.where(~np.isnan(result))[0][0] assert_true(len(series) == len(result)) assert_equals(i, 2)
def test_EMAEMA(): result = func.EMA(series, timeperiod=2) result = func.EMA(result, timeperiod=2) i = np.where(~np.isnan(result))[0][0] assert len(series) == len(result) assert i == 2