Exemple #1
0
    def init(self, base_data):
        base_data = base_data.sort_values("date")

        kd = StochasticOscillator(
            high=base_data["max"],
            low=base_data["min"],
            close=base_data["close"],
            n=self.kdays,
        )
        rsv_ = kd.stoch().fillna(50)

        _k = np.zeros(base_data.shape[0])
        _d = np.zeros(base_data.shape[0])
        for i, r in enumerate(rsv_):
            if i == 0:
                _k[i] = 50
                _d[i] = 50
            else:
                _k[i] = _k[i - 1] * 2 / 3 + r / 3
                _d[i] = _d[i - 1] * 2 / 3 + _k[i] / 3

        base_data["K"] = _k
        base_data["D"] = _d

        base_data.index = range(len(base_data))

        base_data["signal"] = 0
        base_data.loc[base_data["K"] <= self.kd_lower, "signal"] = 1
        base_data.loc[base_data["K"] >= self.kd_upper, "signal"] = -1
        return base_data
Exemple #2
0
    def create_trade_sign(self, stock_price: pd.DataFrame) -> pd.DataFrame:
        stock_price = stock_price.sort_values("date")
        kd = StochasticOscillator(
            high=stock_price["max"],
            low=stock_price["min"],
            close=stock_price["close"],
            n=self.kdays,
        )
        rsv_ = kd.stoch().fillna(50)
        _k = np.zeros(stock_price.shape[0])
        _d = np.zeros(stock_price.shape[0])
        for i, r in enumerate(rsv_):
            if i == 0:
                _k[i] = 50
                _d[i] = 50
            else:
                _k[i] = _k[i - 1] * 2 / 3 + r / 3
                _d[i] = _d[i - 1] * 2 / 3 + _k[i] / 3

        stock_price["K"] = _k
        stock_price["D"] = _d
        stock_price.index = range(len(stock_price))
        stock_price["signal"] = 0
        stock_price.loc[stock_price["K"] <= self.kd_lower, "signal"] = 1
        stock_price.loc[stock_price["K"] >= self.kd_upper, "signal"] = -1
        return stock_price
def get_indicators(df):
    """
        Add set of technical indicators to the dataframe, return original data frame with new features
    """
    feature_df = df.copy()
    feature_df['RSI'] = RSIIndicator(close=df[CLOSE]).rsi()
    feature_df['Stochastic'] = StochasticOscillator(high=df[HIGH],
                                                    low=df[LOW],
                                                    close=df[CLOSE]).stoch()
    feature_df['Stochastic_signal'] = StochasticOscillator(
        high=df[HIGH], low=df[LOW], close=df[CLOSE]).stoch_signal()
    feature_df['ADI'] = AccDistIndexIndicator(
        high=df[HIGH], low=df[LOW], close=df[CLOSE],
        volume=df[VOLUME]).acc_dist_index()
    feature_df['OBV'] = OnBalanceVolumeIndicator(
        close=df[CLOSE], volume=df[VOLUME]).on_balance_volume()
    feature_df['ATR'] = AverageTrueRange(high=df[HIGH],
                                         low=df[LOW],
                                         close=df[CLOSE]).average_true_range()
    feature_df['ADX'] = ADXIndicator(high=df[HIGH],
                                     low=df[LOW],
                                     close=df[CLOSE]).adx()
    feature_df['ADX_pos'] = ADXIndicator(high=df[HIGH],
                                         low=df[LOW],
                                         close=df[CLOSE]).adx_pos()
    feature_df['ADX_neg'] = ADXIndicator(high=df[HIGH],
                                         low=df[LOW],
                                         close=df[CLOSE]).adx_neg()
    feature_df['MACD'] = MACD(close=df[CLOSE]).macd()
    feature_df['MACD_diff'] = MACD(close=df[CLOSE]).macd_diff()
    feature_df['MACD_signal'] = MACD(close=df[CLOSE]).macd_signal()
    return feature_df
Exemple #4
0
 def create_trade_sign(self, stock_price: pd.DataFrame) -> pd.DataFrame:
     stock_price = stock_price.sort_values("date")
     kd = StochasticOscillator(
         high=stock_price["max"],
         low=stock_price["min"],
         close=stock_price["close"],
         n=self.k_days,
     )
     rsv_ = kd.stoch().fillna(50)
     _k = np.zeros(stock_price.shape[0])
     _d = np.zeros(stock_price.shape[0])
     for i, r in enumerate(rsv_):
         if i == 0:
             _k[i] = 50
             _d[i] = 50
         else:
             _k[i] = _k[i - 1] * 2 / 3 + r / 3
             _d[i] = _d[i - 1] * 2 / 3 + _k[i] / 3
     stock_price["K"] = _k
     stock_price["D"] = _d
     stock_price.index = range(len(stock_price))
     stock_price["diff"] = stock_price["K"] - stock_price["D"]
     stock_price.loc[(stock_price.index < self.k_days), "diff"] = np.nan
     stock_price["diff_sign"] = stock_price["diff"].map(
         lambda x: 1 if x >= 0 else (-1 if x < 0 else 0))
     stock_price["diff_sign_yesterday"] = (
         stock_price["diff_sign"].shift(1).fillna(0).astype(int))
     stock_price["signal"] = 0
     stock_price.loc[((stock_price["diff_sign"] > 0)
                      & (stock_price["diff_sign_yesterday"] < 0)),
                     "signal", ] = 1
     stock_price.loc[((stock_price["diff_sign"] < 0)
                      & (stock_price["diff_sign_yesterday"] > 0)),
                     "signal", ] = -1
     return stock_price
Exemple #5
0
 def calc(self, dataframe):
     stoch = StochasticOscillator(close=dataframe.close,
                                  low=dataframe.low,
                                  high=dataframe.high,
                                  n=self.params.get("period"),
                                  d_n=self.params.get("d_period"))
     dataframe["{}_k".format(self.col_name())] = stoch.stoch()
     return dataframe
Exemple #6
0
 def create_trade_sign(self, stock_price: pd.DataFrame) -> pd.DataFrame:
     stock_price = stock_price.sort_values("date")
     kd = StochasticOscillator(
         high=stock_price["max"],
         low=stock_price["min"],
         close=stock_price["close"],
         n=self.kdays,
         d_n=self.ddays,
     )
     stock_price["K"] = kd.stoch()
     stock_price["D"] = kd.stoch_signal()
     stock_price.index = range(len(stock_price))
     stock_price["signal"] = 0
     stock_price.loc[stock_price["K"] <= self.kd_lower, "signal"] = 1
     stock_price.loc[stock_price["K"] >= self.kd_upper, "signal"] = -1
     return stock_price
Exemple #7
0
 def analyze(self):
     stochastic_df = StochasticOscillator(self.df.high,
                                          self.df.low,
                                          self.df.close,
                                          n=5)
     self.df["stoch_k"] = stochastic_df.stoch()
     self.df["stoch_d"] = stochastic_df.stoch_signal()
     self.df["high_close"] = ((self.df.high - self.df.close) /
                              (self.df.high + self.df.close / 2) * 100)
     self.df["buy_signal"] = (
         ((self.df['stoch_k'] > self.df['stoch_d']) &
          (self.df['stoch_k'].shift(1) < self.df['stoch_d'].shift(1))) &
         (self.df['stoch_d'] < 26))
     self.df["stoch_buy_signal_early"] = (
         (self.df['stoch_k'] < self.df['stoch_d']) &
         ((self.df["stoch_d"]) - self.df["stoch_k"] < 3) &
         (self.df['stoch_d'] < 26))
Exemple #8
0
 def setUpClass(cls):
     cls._df = pd.read_csv(cls._filename, sep=',')
     cls._params = dict(high=cls._df['High'],
                        low=cls._df['Low'],
                        close=cls._df['Close'],
                        n=14,
                        d_n=3,
                        fillna=False)
     cls._indicator = StochasticOscillator(**cls._params)
Exemple #9
0
    def init(self, base_data):
        base_data = base_data.sort_values("date")

        kd = StochasticOscillator(
            high=base_data["max"],
            low=base_data["min"],
            close=base_data["close"],
            n=self.kdays,
            d_n=self.ddays,
        )
        base_data["K"] = kd.stoch()
        base_data["D"] = kd.stoch_signal()

        base_data.index = range(len(base_data))

        base_data["signal"] = 0
        base_data.loc[base_data["K"] <= self.kd_lower, "signal"] = 1
        base_data.loc[base_data["K"] >= self.kd_upper, "signal"] = -1
        return base_data
Exemple #10
0
 def setUpClass(cls):
     cls._df = pd.read_csv(cls._filename, sep=",")
     cls._params = dict(
         high=cls._df["High"],
         low=cls._df["Low"],
         close=cls._df["Close"],
         window=14,
         smooth_window=3,
         fillna=False,
     )
     cls._indicator = StochasticOscillator(**cls._params)
Exemple #11
0
    def init(self, base_data):
        base_data = base_data.sort_values("date")

        kd = StochasticOscillator(
            high=base_data["max"],
            low=base_data["min"],
            close=base_data["close"],
            n=self.kdays,
        )
        rsv_ = kd.stoch().fillna(50)

        _k = np.zeros(base_data.shape[0])
        _d = np.zeros(base_data.shape[0])
        for i, r in enumerate(rsv_):
            if i == 0:
                _k[i] = 50
                _d[i] = 50
            else:
                _k[i] = _k[i - 1] * 2 / 3 + r / 3
                _d[i] = _d[i - 1] * 2 / 3 + _k[i] / 3

        base_data["K"] = _k
        base_data["D"] = _d

        base_data.index = range(len(base_data))

        base_data["diff"] = base_data["K"] - base_data["D"]
        base_data.loc[(base_data.index < self.kdays), "diff"] = np.nan

        base_data["bool_diff"] = base_data["diff"].map(
            lambda x: 1 if x >= 0 else (-1 if x < 0 else 0))
        base_data["bool_diff_shift1"] = (
            base_data["bool_diff"].shift(1).fillna(0).astype(int))

        base_data["signal"] = 0
        base_data.loc[((base_data["bool_diff"] > 0)
                       & (base_data["bool_diff_shift1"] < 0)), "signal", ] = 1
        base_data.loc[((base_data["bool_diff"] < 0)
                       & (base_data["bool_diff_shift1"] > 0)), "signal", ] = -1
        return base_data
def add_momentum_indicators(data: pd.DataFrame) -> pd.DataFrame:
    """Adds the momentum 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.
    """
    rsi = RSIIndicator(data['close'])
    stoch_osc = StochasticOscillator(data['high'], data['low'], data['close'])

    data.loc[:, 'rsi'] = rsi.rsi()
    data.loc[:, 'stoch_osc'] = stoch_osc.stoch()
    data.loc[:, 'stoch_osc_signal'] = stoch_osc.stoch_signal()

    return data
Exemple #13
0
class TestStochasticOscillator(unittest.TestCase):
    """
    https://school.stockcharts.com/doku.php?id=technical_indicators:stochastic_oscillator_fast_slow_and_full
    """

    _filename = 'ta/tests/data/cs-soo.csv'

    def setUp(self):
        self._df = pd.read_csv(self._filename, sep=',')
        self._indicator = StochasticOscillator(
            high=self._df['High'], low=self._df['Low'], close=self._df['Close'], n=14, d_n=3, fillna=False)

    def tearDown(self):
        del(self._df)

    def test_so(self):
        target = 'SO'
        result = self._indicator.stoch()
        pd.testing.assert_series_equal(self._df[target].tail(), result.tail(), check_names=False)

    def test_so_signal(self):
        target = 'SO_SIG'
        result = self._indicator.stoch_signal()
        pd.testing.assert_series_equal(self._df[target].tail(), result.tail(), check_names=False)
Exemple #14
0
def add_momentum_ta(
    df: pd.DataFrame,
    high: str,
    low: str,
    close: str,
    volume: 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.
        volume (str): Name of 'volume' 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.
    """

    # Relative Strength Index (RSI)
    df[f"{colprefix}momentum_rsi"] = RSIIndicator(close=df[close],
                                                  window=14,
                                                  fillna=fillna).rsi()

    # Stoch RSI (StochRSI)
    indicator_srsi = StochRSIIndicator(close=df[close],
                                       window=14,
                                       smooth1=3,
                                       smooth2=3,
                                       fillna=fillna)
    df[f"{colprefix}momentum_stoch_rsi"] = indicator_srsi.stochrsi()
    df[f"{colprefix}momentum_stoch_rsi_k"] = indicator_srsi.stochrsi_k()
    df[f"{colprefix}momentum_stoch_rsi_d"] = indicator_srsi.stochrsi_d()

    # TSI Indicator
    df[f"{colprefix}momentum_tsi"] = TSIIndicator(close=df[close],
                                                  window_slow=25,
                                                  window_fast=13,
                                                  fillna=fillna).tsi()

    # Ultimate Oscillator
    df[f"{colprefix}momentum_uo"] = UltimateOscillator(
        high=df[high],
        low=df[low],
        close=df[close],
        window1=7,
        window2=14,
        window3=28,
        weight1=4.0,
        weight2=2.0,
        weight3=1.0,
        fillna=fillna,
    ).ultimate_oscillator()

    # Stoch Indicator
    indicator_so = StochasticOscillator(
        high=df[high],
        low=df[low],
        close=df[close],
        window=14,
        smooth_window=3,
        fillna=fillna,
    )
    df[f"{colprefix}momentum_stoch"] = indicator_so.stoch()
    df[f"{colprefix}momentum_stoch_signal"] = indicator_so.stoch_signal()

    # Williams R Indicator
    df[f"{colprefix}momentum_wr"] = WilliamsRIndicator(
        high=df[high], low=df[low], close=df[close], lbp=14,
        fillna=fillna).williams_r()

    # Awesome Oscillator
    df[f"{colprefix}momentum_ao"] = AwesomeOscillatorIndicator(
        high=df[high], low=df[low], window1=5, window2=34,
        fillna=fillna).awesome_oscillator()

    # Rate Of Change
    df[f"{colprefix}momentum_roc"] = ROCIndicator(close=df[close],
                                                  window=12,
                                                  fillna=fillna).roc()

    # Percentage Price Oscillator
    indicator_ppo = PercentagePriceOscillator(close=df[close],
                                              window_slow=26,
                                              window_fast=12,
                                              window_sign=9,
                                              fillna=fillna)
    df[f"{colprefix}momentum_ppo"] = indicator_ppo.ppo()
    df[f"{colprefix}momentum_ppo_signal"] = indicator_ppo.ppo_signal()
    df[f"{colprefix}momentum_ppo_hist"] = indicator_ppo.ppo_hist()

    # Percentage Volume Oscillator
    indicator_pvo = PercentageVolumeOscillator(volume=df[volume],
                                               window_slow=26,
                                               window_fast=12,
                                               window_sign=9,
                                               fillna=fillna)
    df[f"{colprefix}momentum_pvo"] = indicator_pvo.pvo()
    df[f"{colprefix}momentum_pvo_signal"] = indicator_pvo.pvo_signal()
    df[f"{colprefix}momentum_pvo_hist"] = indicator_pvo.pvo_hist()

    if not vectorized:
        # KAMA
        df[f"{colprefix}momentum_kama"] = KAMAIndicator(close=df[close],
                                                        window=10,
                                                        pow1=2,
                                                        pow2=30,
                                                        fillna=fillna).kama()

    return df
                     n_fast=12,
                     n_sign=9,
                     fillna=False)

    MACD_INDICATOR = "MACD_indicator"

    # print(indicator)
    df[MACD_INDICATOR] = indicator.macd()
    df["MACD_SIGNAL_indicator"] = indicator.macd_signal()

    # print(df)
    """For Relative Strength: Stochastics (14,7,3)"""

    indicator = StochasticOscillator(close=df["close_price"],
                                     high=df["high_price"],
                                     low=df["low_price"],
                                     n=14,
                                     d_n=3,
                                     fillna=False)

    #print(indicator)
    df["STOCH_indicator"] = indicator.stoch()
    df["STOCH_SIGNAL_indicator"] = indicator.stoch_signal()
    #print(df)

    #print(df.columns)

    try:
        indicator = ADXIndicator(high=df["high_price"],
                                 low=df["low_price"],
                                 close=df["close_price"],
                                 n=14,
Exemple #16
0
def get_stock_predictions():
    start = time.time()
    ticker = request.args.get('ticker')
    date = -1

    np.random.seed(312)

    try:
        

        df = stocks[ticker].copy()
        df['return'] = df['PRC'].pct_change()
        df.drop( columns = ['COMNAM'], inplace = True)
        df.set_index('date', inplace=True, drop=True)
        df['1_day_return'] = df['return'].shift(-1)
        df['1_day_return'] = np.where(df['1_day_return'] > 0, 1, 0)

        ewma = pd.Series.ewm

        df['Fast_Exp_Moving_Avg'] = df['PRC'].transform(lambda x: ewma(x, span = 12).mean())
        df['Slow_Exp_Moving_Avg'] = df['PRC'].transform(lambda x: ewma(x, span = 26).mean())
        df['Momentum_Factor'] = df['Fast_Exp_Moving_Avg']/df['Slow_Exp_Moving_Avg']

        df['Moving_Avg'] = df['PRC'].transform(lambda x: x.rolling(window=20).mean())
        df['Moving_Std_Deviation'] = df['PRC'].transform(lambda x: x.rolling(window=20).std())  
        
        df['Ultimate_Oscillator'] = UltimateOscillator(df['ASKHI'], df['BIDLO'], df['PRC'], fillna = True).uo()
        df['RSI_Indicator'] = RSIIndicator(df['PRC'], 14, False).rsi()
        df['Stochastic_Oscillator'] = StochasticOscillator(df['ASKHI'], df['BIDLO'], df['PRC'], 14, 3, True).stoch()

        # print("3")
        n_fast = 12
        n_slow = 26
        df['MACD'] = df['Slow_Exp_Moving_Avg'] - df['Fast_Exp_Moving_Avg']

        # Bollinger Bands
        df['BollingerB_UP'] =  df['Moving_Avg'] + df['Moving_Std_Deviation']*2
        df['BollingerB_DOWN'] = df['Moving_Avg'] - df['Moving_Std_Deviation']*2

        if stocks_industry.get(ticker) != None:
            industry = stocks_industry.get(ticker).lower().replace(" ", "_")

            industry_df = pd.read_csv(f'../database/industry_info/{industry}_returns.csv')
            industry_df.set_index('date', inplace=True, drop=True)
            df['avg_industry_return'] = industry_df['avg_return']

        df.dropna(inplace = True)
        X = df[df.columns[~df.columns.isin(['1_day_return','TICKER'])]]
        y = df.loc[:, '1_day_return']

    except:
        return jsonify({})

    xgb = XGBClassifier(random_state=0, seed = 312)

    xgb.fit(X.iloc[:-1], y.iloc[:-1])

    predict_for = pd.DataFrame(X.iloc[date]).T
    print(predict_for)

    # print(xgb.predict(X))
    answer = xgb.predict_proba(predict_for)[0]
    prediction = xgb.predict(predict_for)[0]
    confidence = max(answer) * 100

    feature_scores = xgb._Booster.get_score()
    
    descriptors = {'OPENPRC': 'The open price', 
               'SHROUT': 'The number of shares outstanding', 
               'Moving_Avg': 'The average price of the stock over a rolling window of 20 days', 
               'Ultimate_Oscillator': 'Larry Williams’ (1976) signal, a momentum oscillator designed to capture momentum across three different timeframes.',
               'VOL': 'The volume traded today',
               'Stochastic_Oscillator': 'Developed in the late 1950s by George Lane. The stochastic oscillator presents the location of the closing price of a stock in relation to the high and low range of the price of a stock over a period of time, typically a 14-day period.',
               'BIDLO': 'The lowest bid price today',
               'ASKHI': 'The highest asking price today',
               'Slow_Exp_Moving_Avg': 'This is a first-order infinite impulse response filter that applies weighting factors which decrease exponentially. Basically, a fancy moving average.',
               'return': 'The return of the stock today, i.e. perentage change from the price yesterday to the price today',
               'RSI_Indicator': 'Compares the magnitude of recent gains and losses over a specified time period to measure speed and change of price movements of a security. It is primarily used to attempt to identify overbought or oversold conditions in the trading of an asset.',
               'BollingerB_DOWN': 'Developed by John Bollinger, Bollinger Bands® are volatility bands placed above and below a moving average. Volatility is based on the standard deviation, which changes as volatility increases and decreases',
               'BollingerB_UP': 'Developed by John Bollinger, Bollinger Bands® are volatility bands placed above and below a moving average. Volatility is based on the standard deviation, which changes as volatility increases and decreases',
               'Momentum_Factor': 'Simple Momentum of the stock',
               'PRC': 'The closing price of the stock',
               'MACD': 'A trend-following momentum indicator that shows the relationship between two moving averages of prices. The MACD is calculated by subtracting the 26-day exponential moving average (EMA) from the 12-day EMA',
               'Fast_Exp_Moving_Avg': 'This is a first-order infinite impulse response filter that applies weighting factors which decrease exponentially. Basically, a fancy moving average.',
               'avg_industry_return': 'The Average returns of the industry the stock is a part of.',
               'Moving_Std_Deviation': 'The standard deviation over a period of 20-days'
               }

    links = {'OPENPRC': '', 
            'SHROUT': '', 
            'Moving_Avg': 'https://en.wikipedia.org/wiki/Moving_average', 
            'Ultimate_Oscillator': 'http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:ultimate_oscillator',
            'VOL': '',
            'Stochastic_Oscillator': 'https://school.stockcharts.com/doku.php?id=technical_indicators:stochastic_oscillator_fast_slow_and_full',
            'BIDLO': '',
            'ASKHI': '',
            'Slow_Exp_Moving_Avg': 'https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average',
            'return': '',
            'RSI_Indicator': 'https://www.investopedia.com/terms/r/rsi.asp',
            'BollingerB_DOWN': 'https://school.stockcharts.com/doku.php?id=technical_indicators:bollinger_bands',
            'BollingerB_UP': 'https://school.stockcharts.com/doku.php?id=technical_indicators:bollinger_bands',
            'Momentum_Factor': 'https://school.stockcharts.com/doku.php?id=technical_indicators:rate_of_change_roc_and_momentum',
            'PRC': '',
            'MACD': 'https://www.investopedia.com/terms/m/macd.asp',
            'Fast_Exp_Moving_Avg': 'https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average',
            'avg_industry_return': '',
            'Moving_Std_Deviation': 'https://en.wikipedia.org/wiki/Moving_average'
            }

    classes = ['High', 'High', 'High', 'Medium', 'Medium', 'Medium', 'Medium', 'Medium', 'Low', 'Low', 'Low', 'Low', 'Low', 'Low',  'Almost None', 'Almost None', 'Almost None', 'Almost None', 'Almost None', 'Almost None']

    scores = [[feature, weight]for feature, weight in feature_scores.items()]

    scores.sort(key = lambda x: x[1], reverse = True)

    for i, score in enumerate(scores):
        feature = score[0]
        score[1] = str(score[1])
        score.append(classes[i])
        score.append(descriptors[feature])
        score.append(links[feature])

    results = {
        'prediction' : str(prediction),
        'confidence' : str(confidence),
        'feature_importance': feature_scores,
        'descriptions' : scores 
    }
    end = time.time()

    print(end - start)
    
    return jsonify(results)
 def STOCHASTIC(self, df):
     df_STOCH = df.copy()
     stoch = StochasticOscillator(df['High'], df['Low'], df['Close'])
     df['%K'] = stoch.stoch()
     df['%D'] = stoch.stoch_signal()
     return df
    iloc is primarily integer position based (from 0 to length-1 of the axis), but may also be used with a boolean array.
    '''
    period = 30
    df['SMA_Close'] = talib.SMA(df["Close"], timeperiod=period)
    print('Time #1 batch TI: ' + str(time.time() - start_time) + ' seconds')
    start_time = time.time()
    # Stochastic Oscillator (SO)
    period = 14
    sma_period = 3
    StochasticOscillator = ta.momentum.StochasticOscillator(high=df["High"],
                                                            low=df["Low"],
                                                            close=df["Close"],
                                                            n=period,
                                                            d_n=sma_period,
                                                            fillna=False)
    df['SO'] = StochasticOscillator.stoch()

    # Momentum (M)
    period = 3
    df['Momentum'] = talib.MOM(df["Close"], timeperiod=period)

    # Price Rate Of Change (ROC)
    '''
    Description:
    is a pure momentum oscillator that measures the percent change in price from one period to the next
    The ROC calculation compares the current price with the price “n” periods ago
    '''
    period = 12
    RateOfChange = ta.momentum.ROCIndicator(close=df["Close"],
                                            n=period,
                                            fillna=False)
Exemple #19
0
    def ta(self):
        self.df = self.data
        # print(self.df)
        # dfh = self.datah
        # CCI Indicator
        # low
        try:
            self.avoid = False
            difff = float(self.df.tail(1)["high"]) - float(
                self.df.tail(1)["low"])
            iin = 1
            high1 = 0
            high2 = 0
            low1 = 1000000
            low2 = 1000000
            self.golong = False
            self.goshort = False
            # self.dfm2 = self.df.iloc[1:, ]
            # self.dfm1 = self.df.iloc[1:30, ]
            # column1 = self.dfm1["high"]
            # high1 = column1.max()
            #
            # column2 = self.dfm2["high"]
            # high2 = column2.max()
            #
            # column3 = self.dfm1["low"]
            # low1 = column3.min()
            #
            # column4 = self.dfm2["low"]
            # low2 = column4.min()

            # while iin<251:
            #     if(float(self.df.iloc[iin]["high"])>high2):
            #         high2=float(self.df.iloc[iin]["high"])
            #     if(float(self.df.iloc[iin]["low"])<low2):
            #         low2=float(self.df.iloc[iin]["low"])
            #
            #     if (float(self.df.iloc[iin]["high"]) > high1) and (iin>220):
            #         high1 = float(self.df.iloc[iin]["high"])
            #     if (float(self.df.iloc[iin]["low"]) < low1) and (iin>220):
            #         low1 = float(self.df.iloc[iin]["low"])
            #
            #     iin += 1
            #
            # if (float(self.df.iloc[0]["high"]) > high1) and (float(self.df.iloc[0]["high"]) < high2):
            #     self.goshort = True
            # if (float(self.df.iloc[0]["low"]) < low1) and (float(self.df.iloc[0]["low"]) > low2):
            #     self.golong = True

            # RSI
            self.df["rsi"] = RSIIndicator(
                close=self.df['close'],
                window=20,
                fillna=False,
            ).rsi()
            # Stoch
            self.df["stoch"] = StochasticOscillator(
                high=self.df['high'],
                low=self.df['low'],
                close=self.df['close'],
                window=20,
                fillna=False,
            ).stoch()
            # Stoch Signal
            self.df["stoch_signal"] = StochasticOscillator(
                high=self.df['high'],
                low=self.df['low'],
                close=self.df['close'],
                window=20,
                smooth_window=3,
                fillna=False,
            ).stoch_signal()
            # CCI
            self.df["trend_cci"] = CCIIndicator(
                high=self.df['high'],
                low=self.df['low'],
                close=self.df['close'],
                window=20,
                constant=0.015,
                fillna=False,
            ).cci()
            # normal 1h
            # dfh["trend_cci"] = CCIIndicator(
            #     high=dfh['high'],
            #     low=dfh['low'],
            #     close=dfh['close'],
            #     window=20,
            #     constant=0.015,
            #     fillna=False,
            # ).cci()
            # print(self.df["rsi"])
        except:
            print("some errors here")
        try:
            self.rsi = float(self.df.tail(1)["rsi"])
            self.stoch = float(self.df.tail(1)["stoch"])
            self.stoch_signal = float(self.df.tail(1)["stoch_signal"])
            self.cci = float(self.df.tail(1)["trend_cci"])
            # print(self.cc5l)
            # print(self.cc5n)
            # print(self.cc5h)
            # self.cch = float(self.datah.tail(1)["trend_cci"])
        except:
            print("some errors in convert...")
Exemple #20
0
    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
Exemple #21
0
def add_momentum_ta(df: pd.DataFrame,
                    high: str,
                    low: str,
                    close: str,
                    volume: str,
                    fillna: bool = False,
                    colprefix: str = "") -> 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

    Returns:
        pandas.core.frame.DataFrame: Dataframe with new features.
    """

    # Relative Strength Index (RSI)
    df[f'{colprefix}momentum_rsi'] = RSIIndicator(close=df[close],
                                                  n=14,
                                                  fillna=fillna).rsi()

    # TSI Indicator
    df[f'{colprefix}momentum_tsi'] = TSIIndicator(close=df[close],
                                                  r=25,
                                                  s=13,
                                                  fillna=fillna).tsi()

    # Ultimate Oscillator
    df[f'{colprefix}momentum_uo'] = UltimateOscillator(high=df[high],
                                                       low=df[low],
                                                       close=df[close],
                                                       s=7,
                                                       m=14,
                                                       len=28,
                                                       ws=4.0,
                                                       wm=2.0,
                                                       wl=1.0,
                                                       fillna=fillna).uo()

    # Stoch Indicator
    indicator = StochasticOscillator(high=df[high],
                                     low=df[low],
                                     close=df[close],
                                     n=14,
                                     d_n=3,
                                     fillna=fillna)
    df[f'{colprefix}momentum_stoch'] = indicator.stoch()
    df[f'{colprefix}momentum_stoch_signal'] = indicator.stoch_signal()

    # Williams R Indicator
    df[f'{colprefix}momentum_wr'] = WilliamsRIndicator(high=df[high],
                                                       low=df[low],
                                                       close=df[close],
                                                       lbp=14,
                                                       fillna=fillna).wr()

    # Awesome Oscillator
    df[f'{colprefix}momentum_ao'] = AwesomeOscillatorIndicator(
        high=df[high], low=df[low], s=5, len=34, fillna=fillna).ao()

    # KAMA
    df[f'{colprefix}momentum_kama'] = KAMAIndicator(close=df[close],
                                                    n=10,
                                                    pow1=2,
                                                    pow2=30,
                                                    fillna=fillna).kama()

    # Rate Of Change
    df[f'{colprefix}momentum_roc'] = ROCIndicator(close=df[close],
                                                  n=12,
                                                  fillna=fillna).roc()
    return df
Exemple #22
0
 def setUp(self):
     self._df = pd.read_csv(self._filename, sep=',')
     self._indicator = StochasticOscillator(
         high=self._df['High'], low=self._df['Low'], close=self._df['Close'], n=14, d_n=3, fillna=False)