Esempio n. 1
0
    def ExecuteTrendFollowing(self, exchange, moneta, tool, risultato):

        #Attention: static stoploss and dynamic stoploss cannot be activated simultaneously

        tool.attivazione_stoploss_statico = 0  #with zero not activated, with 1 activated
        tool.attivazione_stoploss_dinamico = 1  # with zero not activated, with 1 activated
        tool.profitto = 0.4  #minimum percentage of profit
        tool.stoploss_1 = 0.8  #percentage of stoploss
        tool.stoploss_2 = 2.0  #second level stoploss percentage (not active for now)
        tool.commissioni = 0.25  #percentage of fees in buy and sell
        tool.nrtransizioni = 2000  #do not use
        tool.stoploss_dinamico_moltiplicatore = 0.997  #multiplier of the trailing stop
        tool.stoploss_dinamico_formula = "row.close * tool.stoploss_dinamico_moltiplicatore"  #formula per il calcolo dello stoploss dinamico (trailing stop)
        tool.attivazione_stoploss_dinamico_limiti = 1  #with zero not activated, with 1 activated. It works if dynamic stoploss is activated
        tool.stoploss_dinamico_min_profitto = 0.30  #minimum profit compared to lastbuy if activated stoploss_dinamico_limiti
        tool.stoploss_dinamico_max_perdita = 2  #max loss in percentage compared to lastbuy if activated stoploss_dinamico_limiti
        tool.hours = 36  #timedelta from now
        tool.periodo = '5m' #candlestick timeframe

        self.nome = " Test Strategy Trend Following "

        candle = candlestick.Candlestick()

        self.df1 = candle.getCandle(exchange, moneta, tool.hours, tool.periodo)

        moneta = moneta

        exchange = exchange

        self.df1 = self.df1.apply(pd.to_numeric)

        #-------------Indicators and oscillators 
        self.df1['rsi'] = ta.RSI(self.df1.close.values, timeperiod=14)
        self.df1['adx'] = ta.ADX(self.df1['high'].values,
                                 self.df1['low'].values,
                                 self.df1['close'].values,
                                 timeperiod=14)

        # Bollinger bands with qtpylib--------------------------------------
        """ bollinger = qt.bollinger_bands(qt.typical_price(self.df1), window=20, stds=2)
        self.df1['lower'] = bollinger['lower']
        self.df1['middle'] = bollinger['mid']
        self.df1['upper'] = bollinger['upper'] """
        #------------------------------------------------------------------
        # Bollinger bands with TA library
        self.df1['upper'], self.df1['middle'], self.df1['lower'] = ta.BBANDS(
            self.df1['close'].values, timeperiod=5,nbdevup=1,nbdevdn=1, matype=1)  
        self.df1['upper2'], self.df1['middle2'], self.df1[
            'lower2'] = ta.BBANDS(self.df1['close'].values, timeperiod=5,nbdevup=1.6,nbdevdn=1.6, matype=1)
        self.df1['upper3'], self.df1['middle3'], self.df1[
            'lower3'] = ta.BBANDS(self.df1['close'].values, timeperiod=5,nbdevup=2,nbdevdn=2, matype=1)
        #------------------------------------------------------------------    
        self.df1['PrezzoMed'] = self.df1['close'].mean()
        self.df1['STDDEV'] = ta.STDDEV(self.df1['close'].values,
                                       timeperiod=15,
                                       nbdev=1)
        self.df1['macd'], self.df1['macdsignal'], self.df1[
            'macdhist'] = ta.MACD(self.df1.close.values,
                                  fastperiod=12,
                                  slowperiod=26,
                                  signalperiod=9)
        self.df1['minus_di'] = ta.MINUS_DI(self.df1['high'].values,
                                           self.df1['low'].values,
                                           self.df1['close'].values,
                                           timeperiod=25)
        self.df1['plus_di'] = ta.PLUS_DI(self.df1['high'].values,
                                         self.df1['low'].values,
                                         self.df1['close'].values,
                                         timeperiod=25)
        self.df1['sar'] = ta.SAR(self.df1['high'].values,
                                 self.df1['low'].values,
                                 acceleration=0,
                                 maximum=0)
        self.df1['mom'] = ta.MOM(self.df1['close'].values, timeperiod=14)
        self.df1['atr'] = ta.ATR(self.df1['high'].values,
                                 self.df1['low'].values,
                                 self.df1['close'].values,
                                 timeperiod=14)
        self.df1['ema'] = ta.EMA(self.df1['close'].values, timeperiod=20)
        self.df1['ema1'] = ta.EMA(self.df1['close'].values, timeperiod=28)
        self.df1['ema2'] = ta.EMA(self.df1['close'].values, timeperiod=35)
        self.df1['ema3'] = ta.EMA(self.df1['close'].values, timeperiod=48)
        self.df1['ema50'] = ta.EMA(self.df1['close'].values, timeperiod=50)
        self.df1['dema20']= ta.DEMA(self.df1['close'].values, timeperiod=20)
        self.df1['dema50']= ta.DEMA(self.df1['close'].values, timeperiod=50)
        self.df1['tema20']= ta.TEMA(self.df1['close'].values, timeperiod=5)
        self.df1['tema50']= ta.TEMA(self.df1['close'].values, timeperiod=20)
        self.df1['cci'] = ta.CCI(self.df1['high'].values,
                                 self.df1['low'].values,
                                 self.df1['close'].values,
                                 timeperiod=14)
        
        #ta lib moving average
        self.df1['shortma']= ta.SMA(self.df1['close'].values, timeperiod=10)
        self.df1['longma']= ta.SMA(self.df1['close'].values, timeperiod=20)
        
        # MFI
        self.df1['mfi'] = ta.MFI(self.df1['high'].values,self.df1['low'].values, self.df1['close'].values, self.df1['volume'].values, timeperiod=14)

        # Stoch
        self.df1['slowk'],self.df1['slowd'] = ta.STOCH(self.df1['high'].values,self.df1['low'].values, self.df1['close'].values)
        
        
        # Hammer: values [0, 100] - pattern recognised
        self.df1['CDLHAMMER'] = ta.CDLHAMMER(self.df1['open'].values,self.df1['high'].values,self.df1['low'].values, self.df1['close'].values)
        
        # Inverted Hammer: values
        self.df1['CDLINVERTEDHAMMER'] = ta.CDLINVERTEDHAMMER(self.df1['open'].values,self.df1['high'].values,self.df1['low'].values, self.df1['close'].values)   
        
         # Engulfing
        self.df1['CDLENGULFING'] = ta.CDLENGULFING(self.df1['open'].values,self.df1['high'].values,self.df1['low'].values, self.df1['close'].values)
        
        # Hiddake
        self.df1['CDLHIKKAKE'] = ta.CDLHIKKAKE(self.df1['open'].values,self.df1['high'].values,self.df1['low'].values, self.df1['close'].values)
        
        # Doji
        self.df1['CDLDOJI'] = ta.CDLDOJI(self.df1['open'].values,self.df1['high'].values,self.df1['low'].values, self.df1['close'].values)
        
        # DojiStar
        self.df1['CDLDOJISTAR'] = ta.CDLDOJISTAR(self.df1['open'].values,self.df1['high'].values,self.df1['low'].values, self.df1['close'].values)
        
        # Stoch fast
        self.df1['fastk'], self.df1['fastd'] = ta.STOCHF(self.df1.high.values, self.df1.low.values, self.df1.close.values)
        
        # Inverse Fisher transform on RSI, values [-1.0, 1.0] (https://goo.gl/2JGGoy)
        rsi = 0.1 * (self.df1['rsi'] - 50)
        self.df1['fisher_rsi'] =(np.exp(2 * rsi) - 1) / (np.exp(2 * rsi) + 1)

        # EMA - Exponential Moving Average
        self.df1['ema5'] = ta.EMA(self.df1.close.values, timeperiod=5)
        self.df1['ema10'] = ta.EMA(self.df1.close.values, timeperiod=10)
        self.df1['ema50'] = ta.EMA(self.df1.close.values, timeperiod=50)
        self.df1['ema100'] = ta.EMA(self.df1.close.values, timeperiod=100)

        # SMA - Simple Moving Average
        self.df1['sma'] = ta.SMA(self.df1.close.values, timeperiod=40)
        
        #-----------------------------------------------------------------------

        self.df1['Sellsignal'] = 0
        self.df1['Buysignal'] = 0

        #---------------------example 1 strategy buy and sell ----------------------------------------
        #-------------Buy conditions----------------------------------------------------------
        """ self.df1.loc[(((
        (self.df1['macd'] > self.df1['macdsignal']) &
        (self.df1['cci'] <= -50.0)))),'BuySignal'] = 1 """

        #-------------Sell conditions----------------------------------------------------------
        """ self.df1.loc[(((
        (self.df1['macd'] < self.df1['macdsignal']) &
        (self.df1['cci'] >= 100.0)))),'SellSignal'] = -1 """

        #------------------------example 2 strategy buy and sell---------------------------------------
        #-------------Buy conditions----------------------------------------------------------
        """ self.df1.loc[(((
        (self.df1['adx'] > 25) &
        (self.df1['mom'] < 0) &
        (self.df1['minus_di'] > 25) &
        (self.df1['plus_di'] < self.df1['minus_di'])))),'BuySignal'] = 1 """
        #-------------Sell conditions----------------------------------------------------------
        """ self.df1.loc[(((
        (self.df1['adx'] > 25) &
        (self.df1['mom'] > 0) &
        (self.df1['minus_di'] > 25) &
        (self.df1['plus_di'] > self.df1['minus_di'])))),'SellSignal'] = -1 """
        
        # --------------------------------------------------------------------------
        #example 3 strategy macd and midprice with qtpylib Sell & Buy
        #-------------Sell conditions----------------------------------------------------------
        self.df1.loc[(((
            self.qt.crossed_below(self.df1['macd'], self.df1['macdsignal'])))), 'Sellsignal'] = -1
        #-------------Buy conditions----------------------------------------------------------
        self.df1.loc[(((
            self.qt.crossed_above(self.df1['macd'], self.df1['macdsignal'])) & (self.df1['close'] < self.df1['PrezzoMed']))), 'Buysignal'] = 1 
        
        # --------------------------------------------------------------------------
        #example 4 strategy Bollinger Bands with rsi 
        #-------------Buy conditions----------------------------------------------------------
        """ self.df1.loc[
            ((self.df1['close'] < self.df1['lower']) &  	    
		    (self.df1['rsi'] < 30)
	        ),'Buysignal'] = 1
        #-------------Sell conditions----------------------------------------------------------
        self.df1.loc[
            ((self.df1['close']>self.df1['upper']) | 
            (self.df1['rsi'] > 70)
            ),'Sellsignal'] = -1  """
        
        #---------------------------------------------------------------------------
        #example 5 Bollinger Bands with rsi qtpylib library Sell & Buy
        #-------------Buy conditions----------------------------------------------------------
        """ self.df1.loc[
            (
                    (self.df1['rsi'] < 30) &
                    (self.df1['close'] < self.df1['lower'])

            ),
            'Buysignal'] = 1
        #------------Sell conditions--------------------------------------------    
        self.df1.loc[
            (
                    (self.df1['rsi'] > 70)

            ),
            'Sellsignal'] = -1 """
        
        # --------------------------------------------------------------------------
        #example 6 strategy longma and shortma with qtpylib  Sell & Buy
        #-------------Sell conditions----------------------------------------------------------    
        """ self.df1.loc[(((
           self.qt.crossed_below(self.df1['shortma'], self.df1['longma'])))), 'Sellsignal'] = -1
        #-------------Buy and Sell conditions----------------------------------------------------------
        self.df1.loc[(((
            self.qt.crossed_above(self.df1['shortma'], self.df1['longma'])) & (self.df1['close'] < self.df1['PrezzoMed']))), 'Buysignal'] = 1 
        """
        #--------------------------------------------------------------------------      
        #example 7 strategy with qtpylib and TA-lib Sell & Buy
        #-------------Buy conditions--------------------------------
        """ self.df1.loc[
            (
                (self.df1['rsi'] < 28) &
                (self.df1['rsi'] > 0) &
                (self.df1['close'] < self.df1['sma']) &
                (self.df1['fisher_rsi'] < -0.94) &
                (self.df1['mfi'] < 16.0) &
                (
                    (self.df1['ema50'] > self.df1['ema100']) |
                    (qt.crossed_above(self.df1['ema5'], self.df1['ema10']))
                ) &
                (self.df1['fastd'] > self.df1['fastk']) &
                (self.df1['fastd'] > 0)
            ),
            'Buysignal'] = 1
        #------------Sell conditions---------------------------------------------
        self.df1.loc[
            (
                (self.df1['sar'] > self.df1['close']) &
                (self.df1['fisher_rsi'] > 0.3)
            ),
            'Sellsignal'] = -1 """
            
        # ----------------------------------------------------------------------
        #example 8 strategy - multiple indicators with pattern indicator HAMMER
        #------------------Sell conditions--------------------------------------
        """ self.df1.loc[
            (
                (self.df1['rsi'] < 30) &
                (self.df1['slowk'] < 20) &
                (self.df1['lower'] > self.df1['close']) &
                (self.df1['CDLHAMMER'] == 100)
            ),
            'Buysignal'] = 1
        #---------------Buy conditions------------------------------------------
        self.df1.loc[
            (
                (self.df1['sar'] > self.df1['close']) &
                (self.df1['fisher_rsi'] > 0.3)
            ),
            'Sellsignal'] = -1 """
        # ----------------------------------------------------------------------    
        #example 9 strategy pattern strategy ENGULFING strategy Sell and Buy
        #---------------Sell conditions------------------------------------------
        """ print(self.df1['CDLENGULFING'].values)
           
        self.df1.loc[
            (
                           
                (self.df1['CDLENGULFING'].values < -99) 
            ),
            'Buysignal'] = 1
        #---------------Buy conditions------------------------------------------    
        self.df1.loc[
            (
                (self.df1['CDLENGULFING'].values >  99)
            ),
            'Sellsignal'] = -1  """
            
        #---------------------------------------------------------------------------------
        #example 10 strategy Bollinger Bands with rsi with technical indicators Sell & Buy
         
        """risultati_index_buy = self.df1.index[self.df1['CDLINVERTEDHAMMER'] == 100].tolist() 
        risultato_last_index = self.df1.index[-1]
         
        if ((risultati_index_buy == None) or (risultato_last_index == None) or (risultato_last_index == '') or (len(risultati_index_buy) == 0)):
            print('None Result')
        else:
            risultato_last_index = str(risultati_index_buy[-1])
            risultato_last_index = risultato_last_index[:-3]
            risultato_last_index = (str(risultato_last_index))[:-3] #rimozione dei tre caratteri
            data1 = datetime.fromtimestamp(int(risultato_last_index))
            data2 = datetime.fromtimestamp(int(risultato_last_index))
            print(data2,data1)
            print(self.df1)
        #------------------Buy conditions----------------------------------
        self.df1.loc[(
                    self.df1['CDLINVERTEDHAMMER'] == 100
                    ),'CDLHIKKAKE_CLOSE'] = self.df1['close'] 
        
        self.df1.loc[
            (
                (self.df1['close'] < self.df1['lower3'])             
            )
                ,'Buysignal'] = 1
        #------------------Sell conditions----------------------------------
        self.df1.loc[
            (
            self.qt.crossed_above(self.df1['dema20'], self.df1['dema50'])
            ),'Sellsignal'] = -1 
        """   
        #---------------------------------------------------------------------- 
        #example 11 strategy DOJISTAR strategy Sell and Buy  
        #---------------Buy conditions------------------------------------------
        """ self.df1.loc[
            (
                (self.df1['CDLDOJISTAR'].values == -100) 
            ),
            'Buysignal'] = 1
        #---------------Sell conditions----------------------------------------    
        self.df1.loc[
            (
                (self.df1['CDLHIKKAKE'].values == 200)
            ),
            'Sellsignal'] = -1   """
        #-----------------------------------------------------------------------
        #example 12 strategy  DEMA of EMA BuySignal and SellSignal
        #---------------Buy conditions------------------------------------------
        """ self.df1.loc[(((
           self.qt.crossed_below(self.df1['ema50'], self.df1['dema200'])))), 'BuySignal'] = 1
        #---------------Sell conditions------------------------------------------
        self.df1.loc[
            (
                (self.df1['CDLHIKKAKE'].values > 99)

            ),
            'Sellsignal'] = -1   """
        
        #---------------------------trailing stoploss---------------------------
        
        #example 1

        #tool.stoploss_dinamico_formula = "row.close * tool.stoploss_dinamico_moltiplicatore" #formula for calculating dynamic stoploss (trailing stop)

        #example 2

        tool.stoploss_dinamico_formula = "row.ema3"

        x = []
        y = []
        balance = []
        lower_vect = []
        lower2_vect = []
        upper_vect = []
        upper2_vect = []
        pattern_vect = []
        close_vect = []
        buysignal_vect = []
        sellsignal_vect = []
        prezzmed_vect = []
        stdev_vect = []
        stoplosssignal_vect = []
        stoplossprezzo_vect = []
        ema_vect = []
        ema_long_vect = []
        ema_short_vect = []
        date = []
        volume_vect = []
        macd_vect = []
        macd_signal_vect = []
        macd_hist_vect = []
        atr_vect = []
        rsi_vect = []
        
        i = 0
        
        for row in self.df1.itertuples():
            
            a = row.Index / 1000.0
            b = datetime.fromtimestamp(a)

            self.stoploss = self.getStoploss(row, i, tool)

            logging.info("-----------Loop line processing " + str(i))
            logging.info("1) self.stoploss value = " + str(self.stoploss))

            if (i > 0):

                stoplossprezzo_vect.append(self.stoplossprezzo)

                logging.info(
                    "2) Value of i greater than zero not first loop for i =" +
                    str(i))

                logging.info("2.1) Value of self.stoplossprezzo = " +
                             str(self.stoplossprezzo))

            else:

                self.stoplossprezzo = row.close * 0.99

                logging.info(
                    "2) Value of i equal to zero first loop for i = " + str(i))

                stoplossprezzo_vect.append(self.stoplossprezzo)

                logging.info("2.1) Value of self.stoplossprezzo = " +
                             str(self.stoplossprezzo))

            if (self.stoploss == 1):

                logging.info(
                    "3) self.stoploss value = 1 after getstoploss method ")

            x.append(i)
            y.append(row.close)

            if (row.Sellsignal == 0
                    and self.stoploss == 0) or (row.Sellsignal == 1
                                                and self.stoploss == 1):

                logging.info("4) Value of self.stoploss before If for sell " +
                             str(self.stoploss))
                logging.info("4.1) Value of row.Sellsignal " +
                             str(row.Sellsignal))

                sellsignal_vect.append(np.nan)

                stoplosssignal_vect.append(np.nan)

            else:

                if (self.stoploss == 1):

                    logging.info("5) self.stoploss value = 1 else before if ")
                    logging.info(
                        "5.1) Indication of sell in presence of self.stoploss = 1"
                    )

                    if (self.sell == 0) and (self.buy == 1):

                        logging.info(
                            "5.2) Sell with self.stoploss = 1 self.stoploss = "
                            + str(self.stoploss))
                        logging.info(
                            "5.2.1) Sell with self.stoploss = 1 self.sell = " +
                            str(self.sell))
                        logging.info(
                            "5.2.2) Sell with self.stoploss = 1  self.buy = " +
                            str(self.buy))
                        
                        #increases variable by 1 num_of_trades by one
                        self.nr_of_trades = self.nr_of_trades+1
                        
                        sellsignal_vect.append(row.close)

                        stoplosssignal_vect.append(row.close)

                        percentualecommissioni = (
                            float(row.close) / 100) * float(tool.commissioni)

                        logging.info(
                            "5.3) Percentage of fees in presence of self.stoploss = 1"
                            + str(percentualecommissioni))

                        balance.append(
                            [row.close - (percentualecommissioni), 1])
                        
                        if ((row.close - percentualecommissioni) > self.lastbuy):
                            self.nr_positive_trades = self.nr_positive_trades +1
                        elif ((row.close - percentualecommissioni) < self.lastbuy):
                            self.nr_negative_trades = self.nr_negative_trades +1
                        else:
                            print('Non risulta positiva ne negativa')

                        self.totalecommissioni = self.totalecommissioni + percentualecommissioni

                        logging.info(
                            "5.4) Total fees in presence of self.stoploss = 1 "
                            + str(self.totalecommissioni))

                        self.sell = 1

                        self.buy = 0

                        self.stoploss = 0

                        logging.info(
                            "5.5) Assign value zero to self.stoploss = " +
                            str(self.stoploss))
                        logging.info("5.6) Assign value 1 to self.sell = " +
                                     str(self.sell))
                        logging.info("5.7) Assign value zero to self.buy = " +
                                     str(self.buy))

                    else:

                        sellsignal_vect.append(np.nan)

                        stoplosssignal_vect.append(np.nan)

                        self.stoploss = 0

                else:

                    stoplosssignal_vect.append(np.nan)

                    if ((self.sell == 0) and (self.buy == 1)
                            and (tool.attivazione_stoploss_dinamico == 0)):

                        logging.info(
                            "6.0) Sell ​​normal not in the presence of dynamic stoploss"
                        )
                        logging.info("6.1) Value of self.sell: " +
                                     str(self.sell))
                        logging.info("6.2) Value of self.buy: " +
                                     str(self.buy))
                        logging.info(
                            "6.3) Dynamic stoploss activation parameter value: "
                            + str(tool.attivazione_stoploss_dinamico))

                        price1 = float(self.lastbuy) + (
                            (float(self.lastbuy)) / 100) * float(tool.profitto)
                        logging.info("6.4) Value of self.lastbuy: " +
                                     str(self.lastbuy))
                        logging.info("6.5) Price1 price of sell: " +
                                     str(price1))
                        logging.info("6.6) Profit parameters: " +
                                     str(tool.profitto))

                        if (float(row.close) > float(price1)):

                            logging.info(
                                "6.7) Sell in presence of row.close greater than value of price1"
                            )
                            logging.info("6.8) Value of row.close: " +
                                         str(row.close))
                            logging.info("6.9) Value of sell price: " +
                                         str(price1))
                            #increases variable by 1 num_of_trades by one
                            
                            self.nr_positive_trades = self.nr_positive_trades +1

                            
                            sellsignal_vect.append(row.close)

                            percentualecommissioni = (float(
                                row.close) / 100) * float(tool.commissioni)

                            logging.info(
                                "6.9.1) Percentage of fees in presence of self.stoploss = 1 "
                                + str(percentualecommissioni))

                            balance.append(
                                [row.close - (percentualecommissioni), 1])

                            self.totalecommissioni = self.totalecommissioni + percentualecommissioni

                            logging.info(
                                "6.9.2) Total of fees in presence of self.stoploss = 1"
                                + str(self.totalecommissioni))

                            self.sell = 1
                            self.buy = 0
                            self.stoploss = 0

                            logging.info(
                                "6.9.3) Assign value zero to self.stoploss = "
                                + str(self.stoploss))
                            logging.info(
                                "6.9.4) Assign value 1 to self.sell = " +
                                str(self.sell))
                            logging.info(
                                "6.9.5) Assign value 0 to self.buy = " +
                                str(self.buy))

                        else:

                            sellsignal_vect.append(np.nan)

                    else:

                        sellsignal_vect.append(np.nan)

            if ((row.Buysignal == 0 or row.Buysignal == '0')):

                logging.info(
                    "7) Value of self.stoploss in if row.BuySignal = 0 " +
                    str(self.stoploss))
                logging.info("7.1) Value of row.Buysignal " +
                             str(row.Buysignal))

                buysignal_vect.append(np.nan)

            else:

                if ((row.Buysignal == 1 or row.Buysignal == '1')):

                    logging.info("8) Value of row.Buysignal " +
                                 str(row.Buysignal))

                    if (self.buy == '0' or self.buy == 0):

                        logging.info(
                            "8.1) Buy in presence of self.stoploss =  " +
                            str(self.stoploss))
                        logging.info("8.2) Value of self.sell = " +
                                     str(self.sell))
                        logging.info("8.3) Value of self.buy = " +
                                     str(self.buy))
                        
                        
                        buysignal_vect.append(row.close)

                        percentualecommissioni = (
                            float(row.close) / 100) * float(tool.commissioni)

                        logging.info(
                            "8.4) Percentage of fees in presence of self.stoploss = 1 "
                            + str(percentualecommissioni))

                        self.totalecommissioni = self.totalecommissioni + percentualecommissioni

                        logging.info(
                            "8.5) Total of fees in presence of stoploss = 1" +
                            str(self.totalecommissioni))

                        balance.append([(-row.close - percentualecommissioni),
                                        0])

                        self.buy = 1

                        self.sell = 0

                        logging.info(
                            "8.5.1) Assign value zero to self.stoploss = " +
                            str(self.stoploss))
                        logging.info(
                            "8.5.2) Assign value zero to self.sell = " +
                            str(self.sell))
                        logging.info("8.5.3) Assign value 1 to self.buy = " +
                                     str(self.buy))

                        if (tool.attivazione_stoploss_dinamico == 1):

                            logging.info(
                                "8.6) Value of tool.attivazione_stoploss_dinamico equal to : "
                                + str(tool.attivazione_stoploss_dinamico))

                            self.stoplossprezzo = eval(
                                tool.stoploss_dinamico_formula)

                            logging.info(
                                "8.6.1) Value of self.stoplossprezzo " +
                                str(self.stoplossprezzo))

                        else:

                            self.stoplossprezzo = (row.close - (
                                (row.close / 100) * tool.stoploss_1))

                            logging.info(
                                "8.7) Value of self.stoplossprezzo with tool.attivazione_stoploss_dinamico equal to 1 = "
                                + str(self.stoplossprezzo))

                        self.lastbuy = row.close

                        logging.info("8.8) Value of self.lastbuy" +
                                     str(self.lastbuy))
                        logging.info("8.9.0) Value of self.stoploss = " +
                                     str(self.stoploss))
                        logging.info("8.9.1) Value of self.sell = " +
                                     str(self.sell))
                        logging.info("8.9.2) Value of self.buy = " +
                                     str(self.buy))
                        logging.info("8.9.3) Value of self.stoplossprezzo = " +
                                     str(self.stoplossprezzo))
                        logging.info("8.9.4) Value of self.lastbuy = " +
                                     str(self.lastbuy))
                        logging.info(
                            "8.9.5) Value of  tool.attivazione_stoploss_dinamico = "
                            + str(tool.attivazione_stoploss_dinamico))
                        logging.info(
                            "8.9.6) Value of tool.attivazione_stoploss_statico = "
                            + str(tool.attivazione_stoploss_statico))

                    else:
                        buysignal_vect.append(np.nan)

                else:
                    buysignal_vect.append(np.nan)

            #add indicators,oscillators and others
            prezzmed_vect.append(row.PrezzoMed)
            stdev_vect.append(row.STDDEV)
            ema_vect.append(row.ema3)
            date.append(b)
            rsi_vect.append(row.rsi)
            #pattern_vect.append(row.CDLHIKKAKE_CLOSE)
            volume_vect.append(row.volume)
            lower2_vect.append(row.lower2)
            upper2_vect.append(row.upper2)
            ema_long_vect.append(row.tema50)
            ema_short_vect.append(row.tema20)
            lower_vect.append(row.lower)
            upper_vect.append(row.upper)
            macd_vect.append(row.macd)
            macd_signal_vect.append(row.macdsignal)
            macd_hist_vect.append(row.macdhist)
            atr_vect.append(row.atr)

            i = i + 1

        self.valorestrategia = self.getValoreStrategia(balance)

        tool.setVisualizzaGrafico(1)

        if (tool.visualizzagrafico == 1 or tool.visualizzagrafico == '1'):

            ds = draw.Draw()

            ds.setNrGrafici(2)

            ds.draw_graphic(moneta, x, y, self.nr_of_trades, self.nr_positive_trades,self.nr_negative_trades, buysignal_vect, sellsignal_vect,
                            prezzmed_vect, stoplossprezzo_vect, stdev_vect,
                            self.nome, self.valorestrategia, date, ema_vect,
                            rsi_vect,pattern_vect,volume_vect,lower2_vect,
                            upper2_vect,ema_short_vect,ema_long_vect,lower_vect,upper_vect,macd_vect,macd_signal_vect,macd_hist_vect,atr_vect)
Esempio n. 2
0
def CDLDOJI(DataFrame):
    res = talib.CDLDOJI(DataFrame.open.values, DataFrame.high.values,
                        DataFrame.low.values, DataFrame.close.values)
    return pd.DataFrame({'CDLDOJI': res}, index=DataFrame.index)
Esempio n. 3
0
def appendAllTAData(df=pd.DataFrame([])):
    resDF = pd.DataFrame([])

    # 函数名:AD名称:ChaikinA/DLine累积/派发线(Accumulation/DistributionLine)
    # 简介:MarcChaikin提出的一种平衡交易量指标,以当日的收盘价位来估算成交流量,用于估定一段时间内该证券累积的资金流量。
    # 计算公式:A/D=昨日A/D+多空对比*今日成交量多空对比=[(收盘价-最低价)-(最高价-收盘价)]/(最高价-最低价)
    # 若最高价等于最低价:多空对比=(收盘价/昨收盘)-1
    # 研判:1、A/D测量资金流向,向上的A/D表明买方占优势,而向下的A/D表明卖方占优势
    #       2、A/D与价格的背离可视为买卖信号,即底背离考虑买入,顶背离考虑卖出
    #       3、应当注意A/D忽略了缺口的影响,事实上,跳空缺口的意义是不能轻易忽略的
    # A/D指标无需设置参数,但在应用时,可结合指标的均线进行分析例子:real=AD(high,low,close,volume)
    resDF['AD'] = ta.AD(df['max_price'].values, df['min_price'].values,
                        df['price'].values, df['vol'].values)
    # 函数名:ADOSC名称:Chaikin A/D Oscillator Chaikin震荡指标
    # 简介:将资金流动情况与价格行为相对比,检测市场中资金流入和流出的情况
    # 计算公式:fastperiod A/D - slowperiod A/D
    # 研判:1、交易信号是背离:看涨背离做多,看跌背离做空
    #       2、股价与90天移动平均结合,与其他指标结合
    #       3、由正变负卖出,由负变正买进
    # 例子:real = ADOSC(high, low, close, volume, fastperiod=3, slowperiod=10)
    resDF['ADOSC'] = ta.ADOSC(df['max_price'].values,
                              df['min_price'].values,
                              df['price'].values,
                              df['vol'].values,
                              fastperiod=3,
                              slowperiod=10)
    resDF['ADX'] = ta.ADX(df['max_price'].values, df['min_price'].values,
                          df['price'].values)
    resDF['ADXR'] = ta.ADXR(df['max_price'].values,
                            df['min_price'].values,
                            df['price'].values,
                            timeperiod=14)
    resDF['APO'] = ta.APO(df['price'].values,
                          fastperiod=12,
                          slowperiod=26,
                          matype=0)
    resDF['aroondown'], resDF['aroonup'] = ta.AROON(df['max_price'].values,
                                                    df['min_price'].values,
                                                    timeperiod=14)
    resDF['AROONOSC'] = ta.AROONOSC(df['max_price'].values,
                                    df['min_price'].values,
                                    timeperiod=14)
    resDF['ATR'] = ta.ATR(df['max_price'].values,
                          df['min_price'].values,
                          df['price'].values,
                          timeperiod=14)
    resDF['AVGPRICE'] = ta.AVGPRICE(df['price_today_open'].values,
                                    df['max_price'].values,
                                    df['min_price'].values, df['price'].values)
    resDF['upperband'], resDF['middleband'], resDF['lowerband'] = ta.BBANDS(
        df['price'].values, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)
    resDF['BETA'] = ta.BETA(df['max_price'].values,
                            df['min_price'].values,
                            timeperiod=5)
    resDF['BOP'] = ta.BOP(df['price_today_open'].values,
                          df['max_price'].values, df['min_price'].values,
                          df['price'].values)
    resDF['CCI'] = ta.CCI(df['max_price'].values,
                          df['min_price'].values,
                          df['price'].values,
                          timeperiod=10)[-1]
    # 函数名:CDL2CROWS名称:Two Crows 两只乌鸦
    # 简介:三日K线模式,第一天长阳,第二天高开收阴,第三天再次高开继续收阴,收盘比前一日收盘价低,预示股价下跌。
    # 例子:integer = CDL2CROWS(open, high, low, close)
    resDF['CDL2CROWS'] = ta.CDL2CROWS(df['price_today_open'].values,
                                      df['max_price'].values,
                                      df['min_price'].values,
                                      df['price'].values)
    # 函数名:CDL3BLACKCROWS名称:Three Black Crows 三只乌鸦
    # 简介:三日K线模式,连续三根阴线,每日收盘价都下跌且接近最低价,每日开盘价都在上根K线实体内,预示股价下跌。
    # 例子:integer = CD3BLACKCROWS(open, high, low, close)
    resDF['CDL3BLACKCROWS'] = ta.CDL3BLACKCROWS(df['price_today_open'].values,
                                                df['max_price'].values,
                                                df['min_price'].values,
                                                df['price'].values)
    # 函数名:CDL3INSIDE名称: Three Inside Up/Down 三内部上涨和下跌
    # 简介:三日K线模式,母子信号+长K线,以三内部上涨为例,K线为阴阳阳,第三天收盘价高于第一天开盘价,第二天K线在第一天K线内部,预示着股价上涨。
    # 例子:integer = CDL3INSIDE(open, high, low, close)
    resDF['CDL3INSIDE'] = ta.CDL3INSIDE(df['price_today_open'].values,
                                        df['max_price'].values,
                                        df['min_price'].values,
                                        df['price'].values)
    # 函数名:CDL3LINESTRIKE名称: Three-Line Strike 三线打击
    # 简介:四日K线模式,前三根阳线,每日收盘价都比前一日高,开盘价在前一日实体内,第四日市场高开,收盘价低于第一日开盘价,预示股价下跌。
    # 例子:integer = CDL3LINESTRIKE(open, high, low, close)
    resDF['CDL3LINESTRIKE'] = ta.CDL3LINESTRIKE(df['price_today_open'].values,
                                                df['max_price'].values,
                                                df['min_price'].values,
                                                df['price'].values)
    # 函数名:CDL3OUTSIDE名称:Three Outside Up/Down 三外部上涨和下跌
    # 简介:三日K线模式,与三内部上涨和下跌类似,K线为阴阳阳,但第一日与第二日的K线形态相反,以三外部上涨为例,第一日K线在第二日K线内部,预示着股价上涨。
    # 例子:integer = CDL3OUTSIDE(open, high, low, close)
    resDF['CDL3OUTSIDE'] = ta.CDL3OUTSIDE(df['price_today_open'].values,
                                          df['max_price'].values,
                                          df['min_price'].values,
                                          df['price'].values)
    # 函数名:CDL3STARSINSOUTH名称:Three Stars In The South 南方三星
    # 简介:三日K线模式,与大敌当前相反,三日K线皆阴,第一日有长下影线,第二日与第一日类似,K线整体小于第一日,第三日无下影线实体信号,成交价格都在第一日振幅之内,预示下跌趋势反转,股价上升。
    # 例子:integer = CDL3STARSINSOUTH(open, high, low, close)
    resDF['CDL3STARSINSOUTH'] = ta.CDL3STARSINSOUTH(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDL3WHITESOLDIERS名称:Three Advancing White Soldiers 三个白兵
    # 简介:三日K线模式,三日K线皆阳,每日收盘价变高且接近最高价,开盘价在前一日实体上半部,预示股价上升。
    # 例子:integer = CDL3WHITESOLDIERS(open, high, low, close)
    resDF['CDL3WHITESOLDIERS'] = ta.CDL3WHITESOLDIERS(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLABANDONEDBABY名称:Abandoned Baby 弃婴
    # 简介:三日K线模式,第二日价格跳空且收十字星(开盘价与收盘价接近,最高价最低价相差不大),预示趋势反转,发生在顶部下跌,底部上涨。
    # 例子:integer = CDLABANDONEDBABY(open, high, low, close, penetration=0)
    resDF['CDLABANDONEDBABY'] = ta.CDLABANDONEDBABY(
        df['price_today_open'].values,
        df['max_price'].values,
        df['min_price'].values,
        df['price'].values,
        penetration=0)
    # 函数名:CDLADVANCEBLOCK名称:Advance Block 大敌当前
    # 简介:三日K线模式,三日都收阳,每日收盘价都比前一日高,开盘价都在前一日实体以内,实体变短,上影线变长。
    # 例子:integer = CDLADVANCEBLOCK(open, high, low, close)
    resDF['CDLADVANCEBLOCK'] = ta.CDLADVANCEBLOCK(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLBELTHOLD名称:Belt-hold 捉腰带线
    # 简介:两日K线模式,下跌趋势中,第一日阴线,第二日开盘价为最低价,阳线,收盘价接近最高价,预示价格上涨。
    # 例子:integer = CDLBELTHOLD(open, high, low, close)
    resDF['CDLBELTHOLD'] = ta.CDLBELTHOLD(df['price_today_open'].values,
                                          df['max_price'].values,
                                          df['min_price'].values,
                                          df['price'].values)
    # 函数名:CDLBREAKAWAY名称:Breakaway 脱离
    # 简介:五日K线模式,以看涨脱离为例,下跌趋势中,第一日长阴线,第二日跳空阴线,延续趋势开始震荡,第五日长阳线,收盘价在第一天收盘价与第二天开盘价之间,预示价格上涨。
    # 例子:integer = CDLBREAKAWAY(open, high, low, close)
    resDF['CDLBREAKAWAY'] = ta.CDLBREAKAWAY(df['price_today_open'].values,
                                            df['max_price'].values,
                                            df['min_price'].values,
                                            df['price'].values)
    # 函数名: CDLCLOSINGMARUBOZU 名称:Closing Marubozu 收盘缺影线
    # 简介:一日K线模式,以阳线为例,最低价低于开盘价,收盘价等于最高价,预示着趋势持续。
    # 例子:integer = CDLCLOSINGMARUBOZU(open, high, low, close)
    resDF['CDLCLOSINGMARUBOZU'] = ta.CDLCLOSINGMARUBOZU(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLCONCEALBABYSWALL名称: Concealing Baby Swallow 藏婴吞没
    # 简介:四日K线模式,下跌趋势中,前两日阴线无影线,第二日开盘、收盘价皆低于第二日,第三日倒锤头,第四日开盘价高于前一日最高价,收盘价低于前一日最低价,预示着底部反转。
    # 例子:integer = CDLCONCEALBABYSWALL(open, high, low, close)
    resDF['CDLCONCEALBABYSWALL'] = ta.CDLCONCEALBABYSWALL(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLCOUNTERATTACK
    # 名称:Counterattack 反击线
    # 简介:二日K线模式,与分离线类似。
    # 例子:integer = CDLCOUNTERATTACK(open, high, low, close)
    resDF['CDLCOUNTERATTACK'] = ta.CDLCOUNTERATTACK(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLDARKCLOUDCOVER名称:Dark Cloud Cover 乌云压顶
    # 简介:二日K线模式,第一日长阳,第二日开盘价高于前一日最高价,收盘价处于前一日实体中部以下,预示着股价下跌。
    # 例子:integer = CDLDARKCLOUDCOVER(open, high, low, close, penetration=0)
    resDF['CDLDARKCLOUDCOVER'] = ta.CDLDARKCLOUDCOVER(
        df['price_today_open'].values,
        df['max_price'].values,
        df['min_price'].values,
        df['price'].values,
        penetration=0)
    # 函数名: CDLDOJI
    # 名称:Doji 十字
    # 简介:一日K线模式,开盘价与收盘价基本相同。
    # 例子:integer = CDLDOJI(open, high, low, close)
    resDF['CDLDOJI'] = ta.CDLDOJI(df['price_today_open'].values,
                                  df['max_price'].values,
                                  df['min_price'].values, df['price'].values)
    # 函数名: CDLDOJISTAR
    # 名称:Doji Star 十字星
    # 简介:一日K线模式,开盘价与收盘价基本相同,上下影线不会很长,预示着当前趋势反转。
    # 例子:integer = CDLDOJISTAR(open, high, low, close)
    resDF['CDLDOJISTAR'] = ta.CDLDOJISTAR(df['price_today_open'].values,
                                          df['max_price'].values,
                                          df['min_price'].values,
                                          df['price'].values)
    # 函数名:CDLDRAGONFLYDOJI名称:Dragonfly Doji 蜻蜓十字/T形十字
    # 简介:一日K线模式,开盘后价格一路走低,之后收复,收盘价与开盘价相同,预示趋势反转。
    # 例子:integer = CDLDRAGONFLYDOJI(open, high, low, close)
    resDF['CDLDRAGONFLYDOJI'] = ta.CDLDRAGONFLYDOJI(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLENGULFING名称:Engulfing Pattern 吞噬模式
    # 简介:两日K线模式,分多头吞噬和空头吞噬,以多头吞噬为例,第一日为阴线,第二日阳线,第一日的开盘价和收盘价在第二日开盘价收盘价之内,但不能完全相同。
    # 例子:integer = CDLENGULFING(open, high, low, close)
    resDF['CDLENGULFING'] = ta.CDLENGULFING(df['price_today_open'].values,
                                            df['max_price'].values,
                                            df['min_price'].values,
                                            df['price'].values)
    # 函数名:CDLEVENINGDOJISTAR名称:Evening Doji Star 十字暮星
    # 简介:三日K线模式,基本模式为暮星,第二日收盘价和开盘价相同,预示顶部反转。
    # 例子:integer = CDLEVENINGDOJISTAR(open, high, low, close, penetration=0)
    resDF['CDLEVENINGDOJISTAR'] = ta.CDLEVENINGDOJISTAR(
        df['price_today_open'].values,
        df['max_price'].values,
        df['min_price'].values,
        df['price'].values,
        penetration=0)
    # 函数名:CDLEVENINGSTAR名称:Evening Star 暮星
    # 简介:三日K线模式,与晨星相反,上升趋势中,第一日阳线,第二日价格振幅较小,第三日阴线,预示顶部反转。
    # 例子:integer = CDLEVENINGSTAR(open, high, low, close, penetration=0)
    resDF['CDLEVENINGSTAR'] = ta.CDLEVENINGSTAR(df['price_today_open'].values,
                                                df['max_price'].values,
                                                df['min_price'].values,
                                                df['price'].values,
                                                penetration=0)
    # 函数名:CDLGAPSIDESIDEWHITE名称:Up/Down-gap side-by-side white lines 向上/下跳空并列阳线
    # 简介:二日K线模式,上升趋势向上跳空,下跌趋势向下跳空,第一日与第二日有相同开盘价,实体长度差不多,则趋势持续。
    # 例子:integer = CDLGAPSIDESIDEWHITE(open, high, low, close)
    resDF['CDLGAPSIDESIDEWHITE'] = ta.CDLGAPSIDESIDEWHITE(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLGRAVESTONEDOJI名称:Gravestone Doji 墓碑十字/倒T十字
    # 简介:一日K线模式,开盘价与收盘价相同,上影线长,无下影线,预示底部反转。
    # 例子:integer = CDLGRAVESTONEDOJI(open, high, low, close)
    resDF['CDLGRAVESTONEDOJI'] = ta.CDLGRAVESTONEDOJI(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLHAMMER
    # 名称:Hammer 锤头
    # 简介:一日K线模式,实体较短,无上影线,下影线大于实体长度两倍,处于下跌趋势底部,预示反转。
    # 例子:integer = CDLHAMMER(open, high, low, close)
    resDF['CDLHAMMER'] = ta.CDLHAMMER(df['price_today_open'].values,
                                      df['max_price'].values,
                                      df['min_price'].values,
                                      df['price'].values)
    # 函数名:CDLHANGINGMAN
    # 名称:Hanging Man 上吊线
    # 简介:一日K线模式,形状与锤子类似,处于上升趋势的顶部,预示着趋势反转。
    # 例子:integer = CDLHANGINGMAN(open, high, low, close)
    resDF['CDLHANGINGMAN'] = ta.CDLHANGINGMAN(df['price_today_open'].values,
                                              df['max_price'].values,
                                              df['min_price'].values,
                                              df['price'].values)
    # 函数名:CDLHARAMI名称:Harami Pattern 母子线
    # 简介:二日K线模式,分多头母子与空头母子,两者相反,以多头母子为例,在下跌趋势中,第一日K线长阴,第二日开盘价收盘价在第一日价格振幅之内,为阳线,预示趋势反转,股价上升。
    # 例子:integer = CDLHARAMI(open, high, low, close)
    resDF['CDLHARAMI'] = ta.CDLHARAMI(df['price_today_open'].values,
                                      df['max_price'].values,
                                      df['min_price'].values,
                                      df['price'].values)
    # 函数名:CDLHARAMICROSS名称:Harami Cross Pattern 十字孕线
    # 简介:二日K线模式,与母子县类似,若第二日K线是十字线,便称为十字孕线,预示着趋势反转。
    # 例子:integer = CDLHARAMICROSS(open, high, low, close)
    resDF['CDLHARAMICROSS'] = ta.CDLHARAMICROSS(df['price_today_open'].values,
                                                df['max_price'].values,
                                                df['min_price'].values,
                                                df['price'].values)
    # 函数名:CDLHIGHWAVE
    # 名称:High-Wave Candle 风高浪大线
    # 简介:三日K线模式,具有极长的上/下影线与短的实体,预示着趋势反转。
    # 例子:integer = CDLHIGHWAVE(open, high, low, close)
    resDF['CDLHIGHWAVE'] = ta.CDLHIGHWAVE(df['price_today_open'].values,
                                          df['max_price'].values,
                                          df['min_price'].values,
                                          df['price'].values)
    # 函数名:CDLHIKKAKE名称:Hikkake Pattern 陷阱
    # 简介:三日K线模式,与母子类似,第二日价格在前一日实体范围内,第三日收盘价高于前两日,反转失败,趋势继续。
    # 例子:integer = CDLHIKKAKE(open, high, low, close)
    resDF['CDLHIKKAKE'] = ta.CDLHIKKAKE(df['price_today_open'].values,
                                        df['max_price'].values,
                                        df['min_price'].values,
                                        df['price'].values)
    # 函数名:CDLHIKKAKEMOD名称:Modified Hikkake Pattern 修正陷阱
    # 简介:三日K线模式,与陷阱类似,上升趋势中,第三日跳空高开;下跌趋势中,第三日跳空低开,反转失败,趋势继续。
    # 例子:integer = CDLHIKKAKEMOD(open, high, low, close)
    resDF['CDLHIKKAKEMOD'] = ta.CDLHIKKAKEMOD(df['price_today_open'].values,
                                              df['max_price'].values,
                                              df['min_price'].values,
                                              df['price'].values)
    # 函数名:CDLHOMINGPIGEON名称:Homing Pigeon 家鸽
    # 简介:二日K线模式,与母子线类似,不同的的是二日K线颜色相同,第二日最高价、最低价都在第一日实体之内,预示着趋势反转。
    # 例子:integer = CDLHOMINGPIGEON(open, high, low, close)
    resDF['CDLHOMINGPIGEON'] = ta.CDLHOMINGPIGEON(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLIDENTICAL3CROWS名称:Identical Three Crows 三胞胎乌鸦
    # 简介:三日K线模式,上涨趋势中,三日都为阴线,长度大致相等,每日开盘价等于前一日收盘价,收盘价接近当日最低价,预示价格下跌。
    # 例子:integer = CDLIDENTICAL3CROWS(open, high, low, close)
    resDF['CDLIDENTICAL3CROWS'] = ta.CDLIDENTICAL3CROWS(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLINNECK名称:In-Neck Pattern 颈内线
    # 简介:二日K线模式,下跌趋势中,第一日长阴线,第二日开盘价较低,收盘价略高于第一日收盘价,阳线,实体较短,预示着下跌继续。
    # 例子:integer = CDLINNECK(open, high, low, close)
    resDF['CDLINNECK'] = ta.CDLINNECK(df['price_today_open'].values,
                                      df['max_price'].values,
                                      df['min_price'].values,
                                      df['price'].values)
    # 函数名:CDLINVERTEDHAMMER名称:Inverted Hammer 倒锤头
    # 简介:一日K线模式,上影线较长,长度为实体2倍以上,无下影线,在下跌趋势底部,预示着趋势反转。
    # 例子:integer = CDLINVERTEDHAMMER(open, high, low, close)
    resDF['CDLINVERTEDHAMMER'] = ta.CDLINVERTEDHAMMER(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLKICKING
    # 名称:Kicking 反冲形态
    # 简介:二日K线模式,与分离线类似,两日K线为秃线,颜色相反,存在跳空缺口。
    # 例子:integer = CDLKICKING(open, high, low, close)
    resDF['CDLKICKING'] = ta.CDLKICKING(df['price_today_open'].values,
                                        df['max_price'].values,
                                        df['min_price'].values,
                                        df['price'].values)
    # 函数名:CDLKICKINGBYLENGTH名称:Kicking - bull/bear determined by the longer marubozu 由较长缺影线决定的反冲形态
    # 简介:二日K线模式,与反冲形态类似,较长缺影线决定价格的涨跌。
    # 例子:integer = CDLKICKINGBYLENGTH(open, high, low, close)
    resDF['CDLKICKINGBYLENGTH'] = ta.CDLKICKINGBYLENGTH(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLLADDERBOTTOM名称:Ladder Bottom 梯底
    # 简介:五日K线模式,下跌趋势中,前三日阴线,开盘价与收盘价皆低于前一日开盘、收盘价,第四日倒锤头,第五日开盘价高于前一日开盘价,阳线,收盘价高于前几日价格振幅,预示着底部反转。
    # 例子:integer = CDLLADDERBOTTOM(open, high, low, close)
    resDF['CDLLADDERBOTTOM'] = ta.CDLLADDERBOTTOM(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLLONGLEGGEDDOJI名称:Long Legged Doji 长脚十字
    # 简介:一日K线模式,开盘价与收盘价相同居当日价格中部,上下影线长,表达市场不确定性。
    # 例子:integer = CDLLONGLEGGEDDOJI(open, high, low, close)
    resDF['CDLLONGLEGGEDDOJI'] = ta.CDLLONGLEGGEDDOJI(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLLONGLINE
    # 名称:Long Line Candle 长蜡烛
    # 简介:一日K线模式,K线实体长,无上下影线。
    # 例子:integer = CDLLONGLINE(open, high, low, close)
    resDF['CDLLONGLINE'] = ta.CDLLONGLINE(df['price_today_open'].values,
                                          df['max_price'].values,
                                          df['min_price'].values,
                                          df['price'].values)
    # 函数名:CDLMARUBOZU
    # 名称:Marubozu 光头光脚/缺影线
    # 简介:一日K线模式,上下两头都没有影线的实体,阴线预示着熊市持续或者牛市反转,阳线相反。
    # 例子:integer = CDLMARUBOZU(open, high, low, close)
    resDF['CDLMARUBOZU'] = ta.CDLMARUBOZU(df['price_today_open'].values,
                                          df['max_price'].values,
                                          df['min_price'].values,
                                          df['price'].values)
    # 函数名:CDLMATCHINGLOW名称:Matching Low 相同低价
    # 简介:二日K线模式,下跌趋势中,第一日长阴线,第二日阴线,收盘价与前一日相同,预示底部确认,该价格为支撑位。
    # 例子:integer = CDLMATCHINGLOW(open, high, low, close)
    resDF['CDLMATCHINGLOW'] = ta.CDLMATCHINGLOW(df['price_today_open'].values,
                                                df['max_price'].values,
                                                df['min_price'].values,
                                                df['price'].values)
    # 函数名:CDLMATHOLD名称:Mat Hold 铺垫
    # 简介:五日K线模式,上涨趋势中,第一日阳线,第二日跳空高开影线,第三、四日短实体影线,第五日阳线,收盘价高于前四日,预示趋势持续。
    # 例子:integer = CDLMATHOLD(open, high, low, close, penetration=0)
    resDF['CDLMATHOLD'] = ta.CDLMATHOLD(df['price_today_open'].values,
                                        df['max_price'].values,
                                        df['min_price'].values,
                                        df['price'].values,
                                        penetration=0)
    # 函数名:CDLMORNINGDOJISTAR名称:Morning Doji Star 十字晨星
    # 简介:三日K线模式,基本模式为晨星,第二日K线为十字星,预示底部反转。
    # 例子:integer = CDLMORNINGDOJISTAR(open, high, low, close, penetration=0)
    resDF['CDLMORNINGDOJISTAR'] = ta.CDLMORNINGDOJISTAR(
        df['price_today_open'].values,
        df['max_price'].values,
        df['min_price'].values,
        df['price'].values,
        penetration=0)
    # 函数名:CDLMORNINGSTAR名称:Morning Star 晨星
    # 简介:三日K线模式,下跌趋势,第一日阴线,第二日价格振幅较小,第三天阳线,预示底部反转。
    # 例子:integer = CDLMORNINGSTAR(open, high, low, close, penetration=0)
    resDF['CDLMORNINGSTAR'] = ta.CDLMORNINGSTAR(df['price_today_open'].values,
                                                df['max_price'].values,
                                                df['min_price'].values,
                                                df['price'].values,
                                                penetration=0)
    # 函数名:CDLONNECK名称:On-Neck Pattern 颈上线
    # 简介:二日K线模式,下跌趋势中,第一日长阴线,第二日开盘价较低,收盘价与前一日最低价相同,阳线,实体较短,预示着延续下跌趋势。
    # 例子:integer = CDLONNECK(open, high, low, close)
    resDF['CDLONNECK'] = ta.CDLONNECK(df['price_today_open'].values,
                                      df['max_price'].values,
                                      df['min_price'].values,
                                      df['price'].values)
    #  函数名:CDLPIERCING名称:Piercing Pattern 刺透形态
    # 简介:两日K线模式,下跌趋势中,第一日阴线,第二日收盘价低于前一日最低价,收盘价处在第一日实体上部,预示着底部反转。
    # 例子:integer = CDLPIERCING(open, high, low, close)
    resDF['CDLPIERCING'] = ta.CDLPIERCING(df['price_today_open'].values,
                                          df['max_price'].values,
                                          df['min_price'].values,
                                          df['price'].values)
    # 函数名:CDLRICKSHAWMAN名称:Rickshaw Man 黄包车夫
    # 简介:一日K线模式,与长腿十字线类似,若实体正好处于价格振幅中点,称为黄包车夫。
    # 例子:integer = CDLRICKSHAWMAN(open, high, low, close)
    resDF['CDLRICKSHAWMAN'] = ta.CDLRICKSHAWMAN(df['price_today_open'].values,
                                                df['max_price'].values,
                                                df['min_price'].values,
                                                df['price'].values)
    # 函数名:CDLRISEFALL3METHODS名称:Rising/Falling Three Methods 上升/下降三法
    # 简介: 五日K线模式,以上升三法为例,上涨趋势中,第一日长阳线,中间三日价格在第一日范围内小幅震荡,第五日长阳线,收盘价高于第一日收盘价,预示股价上升。
    # 例子:integer = CDLRISEFALL3METHODS(open, high, low, close)
    resDF['CDLRISEFALL3METHODS'] = ta.CDLRISEFALL3METHODS(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLSEPARATINGLINES名称:Separating Lines 分离线
    # 简介:二日K线模式,上涨趋势中,第一日阴线,第二日阳线,第二日开盘价与第一日相同且为最低价,预示着趋势继续。
    # 例子:integer = CDLSEPARATINGLINES(open, high, low, close)
    resDF['CDLSEPARATINGLINES'] = ta.CDLSEPARATINGLINES(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLSHOOTINGSTAR名称:Shooting Star 射击之星
    # 简介:一日K线模式,上影线至少为实体长度两倍,没有下影线,预示着股价下跌
    # 例子:integer = CDLSHOOTINGSTAR(open, high, low, close)
    resDF['CDLSHOOTINGSTAR'] = ta.CDLSHOOTINGSTAR(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLSHORTLINE
    # 名称:Short Line Candle 短蜡烛
    # 简介:一日K线模式,实体短,无上下影线。
    # 例子:integer = CDLSHORTLINE(open, high, low, close)
    resDF['CDLSHORTLINE'] = ta.CDLSHORTLINE(df['price_today_open'].values,
                                            df['max_price'].values,
                                            df['min_price'].values,
                                            df['price'].values)
    # 函数名:CDLSPINNINGTOP
    # 名称:Spinning Top 纺锤
    # 简介:一日K线,实体小。
    # 例子:integer = CDLSPINNINGTOP(open, high, low, close)
    resDF['CDLSPINNINGTOP'] = ta.CDLSPINNINGTOP(df['price_today_open'].values,
                                                df['max_price'].values,
                                                df['min_price'].values,
                                                df['price'].values)
    # 函数名:CDLSTALLEDPATTERN名称:Stalled Pattern 停顿形态
    # 简介:三日K线模式,上涨趋势中,第二日长阳线,第三日开盘于前一日收盘价附近,短阳线,预示着上涨结束。
    # 例子:integer = CDLSTALLEDPATTERN(open, high, low, close)
    resDF['CDLSTALLEDPATTERN'] = ta.CDLSTALLEDPATTERN(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLSTICKSANDWICH名称:Stick Sandwich 条形三明治
    # 简介:三日K线模式,第一日长阴线,第二日阳线,开盘价高于前一日收盘价,第三日开盘价高于前两日最高价,收盘价于第一日收盘价相同。
    # 例子:integer = CDLSTICKSANDWICH(open, high, low, close)
    resDF['CDLSTICKSANDWICH'] = ta.CDLSTICKSANDWICH(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLTAKURI名称:Takuri (Dragonfly Doji with very long lower shadow) 探水竿
    # 简介:一日K线模式,大致与蜻蜓十字相同,下影线长度长。
    # 例子:integer = CDLTAKURI(open, high, low, close)
    resDF['CDLTAKURI'] = ta.CDLTAKURI(df['price_today_open'].values,
                                      df['max_price'].values,
                                      df['min_price'].values,
                                      df['price'].values)
    # 函数名:CDLTASUKIGAP名称:Tasuki Gap 跳空并列阴阳线
    # 简介:三日K线模式,分上涨和下跌,以上升为例,前两日阳线,第二日跳空,第三日阴线,收盘价于缺口中,上升趋势持续。
    # 例子:integer = CDLTASUKIGAP(open, high, low, close)
    resDF['CDLTASUKIGAP'] = ta.CDLTASUKIGAP(df['price_today_open'].values,
                                            df['max_price'].values,
                                            df['min_price'].values,
                                            df['price'].values)
    # 函数名:CDLTHRUSTING名称:Thrusting Pattern 插入
    # 简介:二日K线模式,与颈上线类似,下跌趋势中,第一日长阴线,第二日开盘价跳空,收盘价略低于前一日实体中部,与颈上线相比实体较长,预示着趋势持续。
    # 例子:integer = CDLTHRUSTING(open, high, low, close)
    resDF['CDLTHRUSTING'] = ta.CDLTHRUSTING(df['price_today_open'].values,
                                            df['max_price'].values,
                                            df['min_price'].values,
                                            df['price'].values)
    # 函数名:CDLTRISTAR
    # 名称:Tristar Pattern 三星
    # 简介:三日K线模式,由三个十字组成,第二日十字必须高于或者低于第一日和第三日,预示着反转。
    # 例子:integer = CDLTRISTAR(open, high, low, close)
    resDF['CDLTRISTAR'] = ta.CDLTRISTAR(df['price_today_open'].values,
                                        df['max_price'].values,
                                        df['min_price'].values,
                                        df['price'].values)
    # 函数名:CDLUNIQUE3RIVER名称:Unique 3 River 奇特三河床
    # 简介:三日K线模式,下跌趋势中,第一日长阴线,第二日为锤头,最低价创新低,第三日开盘价低于第二日收盘价,收阳线,收盘价不高于第二日收盘价,预示着反转,第二日下影线越长可能性越大。
    # 例子:integer = CDLUNIQUE3RIVER(open, high, low, close)
    resDF['CDLUNIQUE3RIVER'] = ta.CDLUNIQUE3RIVER(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLUPSIDEGAP2CROWS名称:Upside Gap Two Crows 向上跳空的两只乌鸦
    # 简介:三日K线模式,第一日阳线,第二日跳空以高于第一日最高价开盘,收阴线,第三日开盘价高于第二日,收阴线,与第一日比仍有缺口。
    # 例子:integer = CDLUPSIDEGAP2CROWS(open, high, low, close)
    resDF['CDLUPSIDEGAP2CROWS'] = ta.CDLUPSIDEGAP2CROWS(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    # 函数名:CDLXSIDEGAP3METHODS名称:Upside/Downside Gap Three Methods 上升/下降跳空三法
    # 简介:五日K线模式,以上升跳空三法为例,上涨趋势中,第一日长阳线,第二日短阳线,第三日跳空阳线,第四日阴线,开盘价与收盘价于前两日实体内,第五日长阳线,收盘价高于第一日收盘价,预示股价上升。
    # 例子:integer = CDLXSIDEGAP3METHODS(open, high, low, close)
    resDF['CDLXSIDEGAP3METHODS'] = ta.CDLXSIDEGAP3METHODS(
        df['price_today_open'].values, df['max_price'].values,
        df['min_price'].values, df['price'].values)
    resDF['CMO'] = ta.CMO(df['price'].values, timeperiod=14)
    resDF['CORREL'] = ta.CORREL(df['max_price'].values,
                                df['min_price'].values,
                                timeperiod=30)
    resDF['DEMA'] = ta.DEMA(df['price'].values, timeperiod=30)
    resDF['DX'] = ta.DX(df['max_price'].values,
                        df['min_price'].values,
                        df['price'].values,
                        timeperiod=14)
    resDF['EMA'] = ta.EMA(df['price'].values, timeperiod=30)
    resDF['HT_DCPERIOD'] = ta.HT_DCPERIOD(df['price'].values)
    resDF['HT_DCPHASE'] = ta.HT_DCPHASE(df['price'].values)
    resDF['inphase'], resDF['quadrature'] = ta.HT_PHASOR(df['price'].values)
    resDF['sine'], resDF['leadsine'] = ta.HT_SINE(df['price'].values)
    resDF['HT_TRENDLINE'] = ta.HT_TRENDLINE(df['price'].values)
    resDF['HT_TRENDMODE'] = ta.HT_TRENDMODE(df['price'].values)
    resDF['KAMA'] = ta.KAMA(df['price'].values, timeperiod=30)
    resDF['LINEARREG'] = ta.LINEARREG(df['price'].values, timeperiod=14)
    resDF['LINEARREG_ANGLE'] = ta.LINEARREG_ANGLE(df['price'].values,
                                                  timeperiod=14)
    resDF['LINEARREG_INTERCEPT'] = ta.LINEARREG_INTERCEPT(df['price'].values,
                                                          timeperiod=14)
    resDF['LINEARREG_SLOPE'] = ta.LINEARREG_SLOPE(df['price'].values,
                                                  timeperiod=14)
    resDF['MA'] = ta.MA(df['price'].values, timeperiod=30, matype=0)
    resDF['macd'], resDF['macdsignal'], resDF['macdhist'] = ta.MACD(
        df['price'].values, fastperiod=12, slowperiod=26, signalperiod=9)
    resDF['macd'], resDF['macdsignal'], resDF['macdhist'] = ta.MACDEXT(
        df['price'].values,
        fastperiod=12,
        fastmatype=0,
        slowperiod=26,
        slowmatype=0,
        signalperiod=9,
        signalmatype=0)
    resDF['macd'], resDF['macdsignal'], resDF['macdhist'] = ta.MACDFIX(
        df['price'].values, signalperiod=9)
    #resDF['mama'], resDF['fama'] = ta.MAMA               (df['price'].values, fastlimit=0, slowlimit=0)
    resDF['MAX'] = ta.MAX(df['price'].values, timeperiod=30)
    resDF['MAXINDEX'] = ta.MAXINDEX(df['price'].values, timeperiod=30)
    resDF['MEDPRICE'] = ta.MEDPRICE(df['max_price'].values,
                                    df['min_price'].values)
    resDF['MFI'] = ta.MFI(df['price_today_open'].values,
                          df['max_price'].values,
                          df['min_price'].values,
                          df['price'].values,
                          timeperiod=14)
    resDF['MIDPOINT'] = ta.MIDPOINT(df['price'].values, timeperiod=14)
    resDF['MIDPRICE'] = ta.MIDPRICE(df['max_price'].values,
                                    df['min_price'].values,
                                    timeperiod=14)
    resDF['MIN'] = ta.MIN(df['price'].values, timeperiod=30)
    resDF['MININDEX'] = ta.MININDEX(df['price'].values, timeperiod=30)
    resDF['min'], resDF['max'] = ta.MINMAX(df['price'].values, timeperiod=30)
    resDF['minidx'], resDF['maxidx'] = ta.MINMAXINDEX(df['price'].values,
                                                      timeperiod=30)
    resDF['MINUS_DI'] = ta.MINUS_DI(df['max_price'].values,
                                    df['min_price'].values,
                                    df['price'].values,
                                    timeperiod=14)
    resDF['MINUS_DM'] = ta.MINUS_DM(df['max_price'].values,
                                    df['min_price'].values,
                                    timeperiod=14)
    resDF['MOM'] = ta.MOM(df['max_price'].values, timeperiod=10)
    resDF['NATR'] = ta.NATR(df['max_price'].values,
                            df['min_price'].values,
                            df['price'].values,
                            timeperiod=14)
    # 函数名:OBV 名称:On Balance Volume 能量潮
    # 简介:Joe Granville提出,通过统计成交量变动的趋势推测股价趋势计算公式:以某日为基期,逐日累计每日上市股票总成交量,若隔日指数或股票上涨,则基期OBV加上本日成交量为本日OBV。隔日指数或股票下跌,则基期OBV减去本日成交量为本日OBV
    # 研判:1、以“N”字型为波动单位,一浪高于一浪称“上升潮”,下跌称“跌潮”;上升潮买进,跌潮卖出
    #       2、须配合K线图走势
    #       3、用多空比率净额法进行修正,但不知TA-Lib采用哪种方法
    #          多空比率净额= [(收盘价-最低价)-(最高价-收盘价)] ÷( 最高价-最低价)×成交量
    # 例子:real = OBV(close, volume)
    resDF['OBV'] = ta.OBV(df['price'].values, df['vol'].values)
    #     resDF['PLUS_DI']             = ta.PLUS_DI
    #     resDF['PLUS_DM']             = ta.PLUS_DM
    resDF['PPO'] = ta.PPO(df['price'].values,
                          fastperiod=12,
                          slowperiod=26,
                          matype=0)
    resDF['ROC'] = ta.ROC(df['price'].values, timeperiod=10)
    resDF['ROCP'] = ta.ROCP(df['price'].values, timeperiod=10)
    resDF['ROCR'] = ta.ROCR(df['price'].values, timeperiod=10)
    resDF['ROCR100'] = ta.ROCR100(df['price'].values, timeperiod=10)
    resDF['RSI'] = ta.RSI(df['price'].values, timeperiod=14)
    resDF['SAR'] = ta.SAR(df['max_price'].values,
                          df['min_price'].values,
                          acceleration=0,
                          maximum=0)
    resDF['SAREXT'] = ta.SAREXT(df['max_price'].values,
                                df['min_price'].values,
                                startvalue=0,
                                offsetonreverse=0,
                                accelerationinitlong=0,
                                accelerationlong=0,
                                accelerationmaxlong=0,
                                accelerationinitshort=0,
                                accelerationshort=0,
                                accelerationmaxshort=0)
    resDF['SMA'] = ta.SMA(df['price'].values, timeperiod=30)
    resDF['STDDEV'] = ta.STDDEV(df['price'].values, timeperiod=5, nbdev=1)
    #     resDF['STOCH']               = ta.STOCH
    #     resDF['STOCHF']              = ta.STOCHF
    resDF['fastk'], resDF['fastd'] = ta.STOCHRSI(df['price'].values,
                                                 timeperiod=14,
                                                 fastk_period=5,
                                                 fastd_period=3,
                                                 fastd_matype=0)
    resDF['SUM'] = ta.SUM(df['price'].values, timeperiod=30)
    resDF['T3'] = ta.T3(df['price'].values, timeperiod=5, vfactor=0)
    resDF['TEMA'] = ta.TEMA(df['price'].values, timeperiod=30)
    resDF['TRANGE'] = ta.TRANGE(df['max_price'].values, df['min_price'].values,
                                df['price'].values)
    resDF['TRIMA'] = ta.TRIMA(df['price'].values, timeperiod=30)
    resDF['TRIX'] = ta.TRIX(df['price'].values, timeperiod=30)
    resDF['TSF'] = ta.TSF(df['price'].values, timeperiod=14)
    resDF['TYPPRICE'] = ta.TYPPRICE(df['max_price'].values,
                                    df['min_price'].values, df['price'].values)
    #     resDF['ULTOSC']              = ta.ULTOSC
    resDF['VAR'] = ta.VAR(df['price'].values, timeperiod=5, nbdev=1)
    resDF['WCLPRICE'] = ta.WCLPRICE(df['max_price'].values,
                                    df['min_price'].values, df['price'].values)
    #     resDF['WILLR']               = ta.WILLR
    resDF['WMA'] = ta.WMA(df['price'].values, timeperiod=30)

    return resDF
 df['CDL2CROWS'] = talib.CDL2CROWS(op, hp, lp, cp)
 df['CDL3BLACKCROWS'] = talib.CDL3BLACKCROWS(op, hp, lp, cp)
 df['CDL3INSIDE'] = talib.CDL3INSIDE(op, hp, lp, cp)
 df['CDL3LINESTRIKE'] = talib.CDL3LINESTRIKE(op, hp, lp, cp)
 df['CDL3OUTSIDE'] = talib.CDL3OUTSIDE(op, hp, lp, cp)
 df['CDL3STARSINSOUTH'] = talib.CDL3STARSINSOUTH(op, hp, lp, cp)
 df['CDL3WHITESOLDIERS'] = talib.CDL3WHITESOLDIERS(op, hp, lp, cp)
 df['CDLABANDONEDBABY'] = talib.CDLABANDONEDBABY(op, hp, lp, cp)
 df['CDLADVANCEBLOCK'] = talib.CDLADVANCEBLOCK(op, hp, lp, cp)
 df['CDLBELTHOLD'] = talib.CDLBELTHOLD(op, hp, lp, cp)
 df['CDLBREAKAWAY'] = talib.CDLBREAKAWAY(op, hp, lp, cp)
 df['CDLCLOSINGMARUBOZU'] = talib.CDLCLOSINGMARUBOZU(op, hp, lp, cp)
 df['CDLCONCEALBABYSWALL'] = talib.CDLCONCEALBABYSWALL(op, hp, lp, cp)
 df['CDLCOUNTERATTACK'] = talib.CDLCOUNTERATTACK(op, hp, lp, cp)
 df['CDLDARKCLOUDCOVER'] = talib.CDLDARKCLOUDCOVER(op, hp, lp, cp)
 df['CDLDOJI'] = talib.CDLDOJI(op, hp, lp, cp)
 df['CDLDOJISTAR'] = talib.CDLDOJISTAR(op, hp, lp, cp)
 df['CDLDRAGONFLYDOJI'] = talib.CDLDRAGONFLYDOJI(op, hp, lp, cp)
 df['CDLENGULFING'] = talib.CDLENGULFING(op, hp, lp, cp)
 df['CDLEVENINGDOJISTAR'] = talib.CDLEVENINGDOJISTAR(op, hp, lp, cp)
 df['CDLEVENINGSTAR'] = talib.CDLEVENINGSTAR(op, hp, lp, cp)
 df['CDLGAPSIDESIDEWHITE'] = talib.CDLGAPSIDESIDEWHITE(op, hp, lp, cp)
 df['CDLGRAVESTONEDOJI'] = talib.CDLGRAVESTONEDOJI(op, hp, lp, cp)
 df['CDLHAMMER'] = talib.CDLHAMMER(op, hp, lp, cp)
 df['CDLHANGINGMAN'] = talib.CDLHANGINGMAN(op, hp, lp, cp)
 df['CDLHARAMI'] = talib.CDLHARAMI(op, hp, lp, cp)
 df['CDLHARAMICROSS'] = talib.CDLHARAMICROSS(op, hp, lp, cp)
 df['CDLHIGHWAVE'] = talib.CDLHIGHWAVE(op, hp, lp, cp)
 df['CDLHIKKAKE'] = talib.CDLHIKKAKE(op, hp, lp, cp)
 df['CDLHIKKAKEMOD'] = talib.CDLHIKKAKEMOD(op, hp, lp, cp)
 df['CDLHOMINGPIGEON'] = talib.CDLHOMINGPIGEON(op, hp, lp, cp)
Esempio n. 5
0
df['CDL2CROWS'] = talib.CDL2CROWS(open, high, low, close)
df['CDL3BLACKCROWS'] = talib.CDL3BLACKCROWS(open, high, low, close)
df['CDL3INSIDE'] = talib.CDL3INSIDE(open, high, low, close)
df['CDL3LINESTRIKE'] = talib.CDL3LINESTRIKE(open, high, low, close)
df['CDLBREAKAWAY'] = talib.CDLBREAKAWAY(open, high, low, close)
df['CDLADVANCEBLOCK'] = talib.CDLADVANCEBLOCK(open, high, low, close)
df['BETA'] = talib.BETA(high, low, timeperiod=5)
df['CORREL'] = talib.CORREL(high, low, timeperiod=30)
df['AD'] = talib.AD(high, low, close, volume)
df['TSF'] = talib.TSF(close, timeperiod=14)
df['CDLDARKCLOUDCOVER'] = talib.CDLDARKCLOUDCOVER(open,
                                                  high,
                                                  low,
                                                  close,
                                                  penetration=0)
df['CDLDOJI'] = talib.CDLDOJI(open, high, low, close)
df['CDLMORNINGDOJISTAR'] = talib.CDLMORNINGDOJISTAR(open,
                                                    high,
                                                    low,
                                                    close,
                                                    penetration=0)
df['CDLMORNINGSTAR'] = talib.CDLMORNINGSTAR(open,
                                            high,
                                            low,
                                            close,
                                            penetration=0)
df['CDLONNECK'] = talib.CDLONNECK(open, high, low, close)
df['CDLPIERCING'] = talib.CDLPIERCING(open, high, low, close)
df['CDLRICKSHAWMAN'] = talib.CDLRICKSHAWMAN(open, high, low, close)
df['CDLRISEFALL3METHODS'] = talib.CDLRISEFALL3METHODS(open, high, low, close)
df['CDLSEPARATINGLINES'] = talib.CDLSEPARATINGLINES(open, high, low, close)
Esempio n. 6
0
    def findPattern(self, data, dict, saveDict):
        data = data.head(4)
        data = data[::-1]

        check = talib.CDLMORNINGSTAR(data['Open'], data['High'], data['Low'],
                                     data['Close'])
        if (check.tail(1).item() != 0):
            dict[
                'Pattern'] = colorText.BOLD + colorText.GREEN + 'Morning Star' + colorText.END
            saveDict['Pattern'] = 'Morning Star'
            return True

        check = talib.CDLMORNINGDOJISTAR(data['Open'], data['High'],
                                         data['Low'], data['Close'])
        if (check.tail(1).item() != 0):
            dict[
                'Pattern'] = colorText.BOLD + colorText.GREEN + 'Morning Doji Star' + colorText.END
            saveDict['Pattern'] = 'Morning Doji Star'
            return True

        check = talib.CDLEVENINGSTAR(data['Open'], data['High'], data['Low'],
                                     data['Close'])
        if (check.tail(1).item() != 0):
            dict[
                'Pattern'] = colorText.BOLD + colorText.FAIL + 'Evening Star' + colorText.END
            saveDict['Pattern'] = 'Evening Star'
            return True

        check = talib.CDLEVENINGDOJISTAR(data['Open'], data['High'],
                                         data['Low'], data['Close'])
        if (check.tail(1).item() != 0):
            dict[
                'Pattern'] = colorText.BOLD + colorText.FAIL + 'Evening Doji Star' + colorText.END
            saveDict['Pattern'] = 'Evening Doji Star'
            return True

        check = talib.CDLLADDERBOTTOM(data['Open'], data['High'], data['Low'],
                                      data['Close'])
        if (check.tail(1).item() != 0):
            if (check.tail(1).item() > 0):
                dict[
                    'Pattern'] = colorText.BOLD + colorText.GREEN + 'Ladder Bottom' + colorText.END
                saveDict['Pattern'] = 'Bullish Ladder Bottom'
            else:
                dict[
                    'Pattern'] = colorText.BOLD + colorText.FAIL + 'Ladder Bottom' + colorText.END
                saveDict['Pattern'] = 'Bearish Ladder Bottom'
            return True

        check = talib.CDL3LINESTRIKE(data['Open'], data['High'], data['Low'],
                                     data['Close'])
        if (check.tail(1).item() != 0):
            if (check.tail(1).item() > 0):
                dict[
                    'Pattern'] = colorText.BOLD + colorText.GREEN + '3 Line Strike' + colorText.END
            else:
                dict[
                    'Pattern'] = colorText.BOLD + colorText.FAIL + '3 Line Strike' + colorText.END
            saveDict['Pattern'] = '3 Line Strike'
            return True

        check = talib.CDL3BLACKCROWS(data['Open'], data['High'], data['Low'],
                                     data['Close'])
        if (check.tail(1).item() != 0):
            dict[
                'Pattern'] = colorText.BOLD + colorText.FAIL + '3 Black Crows' + colorText.END
            saveDict['Pattern'] = '3 Black Crows'
            return True

        check = talib.CDL3INSIDE(data['Open'], data['High'], data['Low'],
                                 data['Close'])
        if (check.tail(1).item() != 0):
            if (check.tail(1).item() > 0):
                dict[
                    'Pattern'] = colorText.BOLD + colorText.GREEN + '3 Outside Up' + colorText.END
                saveDict['Pattern'] = '3 Inside Up'
            else:
                dict[
                    'Pattern'] = colorText.BOLD + colorText.FAIL + '3 Outside Down' + colorText.END
                saveDict['Pattern'] = '3 Inside Down'
            return True

        check = talib.CDL3OUTSIDE(data['Open'], data['High'], data['Low'],
                                  data['Close'])
        if (check.tail(1).item() != 0):
            if (check.tail(1).item() > 0):
                dict[
                    'Pattern'] = colorText.BOLD + colorText.GREEN + '3 Outside Up' + colorText.END
                saveDict['Pattern'] = '3 Outside Up'
            else:
                dict[
                    'Pattern'] = colorText.BOLD + colorText.FAIL + '3 Outside Down' + colorText.END
                saveDict['Pattern'] = '3 Outside Down'
            return True

        check = talib.CDL3WHITESOLDIERS(data['Open'], data['High'],
                                        data['Low'], data['Close'])
        if (check.tail(1).item() != 0):
            dict[
                'Pattern'] = colorText.BOLD + colorText.GREEN + '3 White Soldiers' + colorText.END
            saveDict['Pattern'] = '3 White Soldiers'
            return True

        check = talib.CDLHARAMI(data['Open'], data['High'], data['Low'],
                                data['Close'])
        if (check.tail(1).item() != 0):
            if (check.tail(1).item() > 0):
                dict[
                    'Pattern'] = colorText.BOLD + colorText.GREEN + 'Bullish Harami' + colorText.END
                saveDict['Pattern'] = 'Bullish Harami'
            else:
                dict[
                    'Pattern'] = colorText.BOLD + colorText.FAIL + 'Bearish Harami' + colorText.END
                saveDict['Pattern'] = 'Bearish Harami'
            return True

        check = talib.CDLHARAMICROSS(data['Open'], data['High'], data['Low'],
                                     data['Close'])
        if (check.tail(1).item() != 0):
            if (check.tail(1).item() > 0):
                dict[
                    'Pattern'] = colorText.BOLD + colorText.GREEN + 'Bullish Harami Cross' + colorText.END
                saveDict['Pattern'] = 'Bullish Harami Cross'
            else:
                dict[
                    'Pattern'] = colorText.BOLD + colorText.FAIL + 'Bearish Harami Cross' + colorText.END
                saveDict['Pattern'] = 'Bearish Harami Cross'
            return True

        check = talib.CDLMARUBOZU(data['Open'], data['High'], data['Low'],
                                  data['Close'])
        if (check.tail(1).item() != 0):
            if (check.tail(1).item() > 0):
                dict[
                    'Pattern'] = colorText.BOLD + colorText.GREEN + 'Bullish Marubozu' + colorText.END
                saveDict['Pattern'] = 'Bullish Marubozu'
            else:
                dict[
                    'Pattern'] = colorText.BOLD + colorText.FAIL + 'Bearish Marubozu' + colorText.END
                saveDict['Pattern'] = 'Bearish Marubozu'
            return True

        check = talib.CDLHANGINGMAN(data['Open'], data['High'], data['Low'],
                                    data['Close'])
        if (check.tail(1).item() != 0):
            dict[
                'Pattern'] = colorText.BOLD + colorText.FAIL + 'Hanging Man' + colorText.END
            saveDict['Pattern'] = 'Hanging Man'
            return True

        check = talib.CDLHAMMER(data['Open'], data['High'], data['Low'],
                                data['Close'])
        if (check.tail(1).item() != 0):
            dict[
                'Pattern'] = colorText.BOLD + colorText.GREEN + 'Hammer' + colorText.END
            saveDict['Pattern'] = 'Hammer'
            return True

        check = talib.CDLINVERTEDHAMMER(data['Open'], data['High'],
                                        data['Low'], data['Close'])
        if (check.tail(1).item() != 0):
            dict[
                'Pattern'] = colorText.BOLD + colorText.GREEN + 'Inverted Hammer' + colorText.END
            saveDict['Pattern'] = 'Inverted Hammer'
            return True

        check = talib.CDLSHOOTINGSTAR(data['Open'], data['High'], data['Low'],
                                      data['Close'])
        if (check.tail(1).item() != 0):
            dict[
                'Pattern'] = colorText.BOLD + colorText.FAIL + 'Shooting Star' + colorText.END
            saveDict['Pattern'] = 'Shooting Star'
            return True

        check = talib.CDLDRAGONFLYDOJI(data['Open'], data['High'], data['Low'],
                                       data['Close'])
        if (check.tail(1).item() != 0):
            dict[
                'Pattern'] = colorText.BOLD + colorText.GREEN + 'Dragonfly Doji' + colorText.END
            saveDict['Pattern'] = 'Dragonfly Doji'
            return True

        check = talib.CDLGRAVESTONEDOJI(data['Open'], data['High'],
                                        data['Low'], data['Close'])
        if (check.tail(1).item() != 0):
            dict[
                'Pattern'] = colorText.BOLD + colorText.FAIL + 'Gravestone Doji' + colorText.END
            saveDict['Pattern'] = 'Gravestone Doji'
            return True

        check = talib.CDLDOJI(data['Open'], data['High'], data['Low'],
                              data['Close'])
        if (check.tail(1).item() != 0):
            dict['Pattern'] = colorText.BOLD + 'Doji' + colorText.END
            saveDict['Pattern'] = 'Doji'
            return True

        check = talib.CDLENGULFING(data['Open'], data['High'], data['Low'],
                                   data['Close'])
        if (check.tail(1).item() != 0):
            if (check.tail(1).item() > 0):
                dict[
                    'Pattern'] = colorText.BOLD + colorText.GREEN + 'Bullish Engulfing' + colorText.END
                saveDict['Pattern'] = 'Bullish Engulfing'
            else:
                dict[
                    'Pattern'] = colorText.BOLD + colorText.FAIL + 'Bearish Engulfing' + colorText.END
                saveDict['Pattern'] = 'Bearish Engulfing'
            return True

        dict['Pattern'] = ''
        saveDict['Pattern'] = ''
        return False
Esempio n. 7
0
def _extract_feature(candle, params):
    o = candle.open
    h = candle.high
    l = candle.low
    c = candle.close
    v = candle.volume

    # OHLCV
    features = pd.DataFrame()
    features['open'] = o
    features['high'] = h
    features['low'] = l
    features['close'] = c
    features['volume'] = v

    # RSI
    features['rsi_s'] = ta.RSI(c, timeperiod=params['rsi_timeperiod_s'])
    features['rsi_m'] = ta.RSI(c, timeperiod=params['rsi_timeperiod_m'])
    features['rsi_l'] = ta.RSI(c, timeperiod=params['rsi_timeperiod_l'])

    # STOCHF
    fastk, fastd = ta.STOCHF(h,
                             l,
                             c,
                             fastk_period=params['stockf_fastk_period_s'],
                             fastd_period=params['stockf_fastd_period_s'],
                             fastd_matype=ta.MA_Type.T3)
    change_stockf = calc_change(fastk, fastd)
    change_stockf.index = fastk.index
    features['fastk_s'] = fastk
    features['fastd_s'] = fastd
    features['fast_change_s'] = change_stockf
    fastk, fastd = ta.STOCHF(h,
                             l,
                             c,
                             fastk_period=params['stockf_fastk_period_m'],
                             fastd_period=params['stockf_fastd_period_m'],
                             fastd_matype=ta.MA_Type.T3)
    change_stockf = calc_change(fastk, fastd)
    change_stockf.index = fastk.index
    features['fastk_m'] = fastk
    features['fastd_m'] = fastd
    features['fast_change_m'] = change_stockf
    fastk, fastd = ta.STOCHF(h,
                             l,
                             c,
                             fastk_period=params['stockf_fastk_period_l'],
                             fastd_period=params['stockf_fastd_period_l'],
                             fastd_matype=ta.MA_Type.T3)
    change_stockf = calc_change(fastk, fastd)
    change_stockf.index = fastk.index
    features['fastk_l'] = fastk
    features['fastd_l'] = fastd
    features['fast_change_l'] = change_stockf

    # WILLR
    features['willr_s'] = ta.WILLR(h,
                                   l,
                                   c,
                                   timeperiod=params['willr_timeperiod_s'])
    features['willr_m'] = ta.WILLR(h,
                                   l,
                                   c,
                                   timeperiod=params['willr_timeperiod_m'])
    features['willr_l'] = ta.WILLR(h,
                                   l,
                                   c,
                                   timeperiod=params['willr_timeperiod_l'])

    # MACD
    macd, macdsignal, macdhist = ta.MACDEXT(
        c,
        fastperiod=params['macd_fastperiod_s'],
        slowperiod=params['macd_slowperiod_s'],
        signalperiod=params['macd_signalperiod_s'],
        fastmatype=ta.MA_Type.T3,
        slowmatype=ta.MA_Type.T3,
        signalmatype=ta.MA_Type.T3)
    change_macd = calc_change(macd, macdsignal)
    change_macd.index = macd.index
    features['macd_s'] = macd
    features['macdsignal_s'] = macdsignal
    features['macdhist_s'] = macdhist
    features['change_macd_s'] = change_macd
    macd, macdsignal, macdhist = ta.MACDEXT(
        c,
        fastperiod=params['macd_fastperiod_m'],
        slowperiod=params['macd_slowperiod_m'],
        signalperiod=params['macd_signalperiod_m'],
        fastmatype=ta.MA_Type.T3,
        slowmatype=ta.MA_Type.T3,
        signalmatype=ta.MA_Type.T3)
    change_macd = calc_change(macd, macdsignal)
    change_macd.index = macd.index
    features['macd_m'] = macd
    features['macdsignal_m'] = macdsignal
    features['macdhist_m'] = macdhist
    features['change_macd_m'] = change_macd

    # ROCP
    rocp = ta.ROCP(c, timeperiod=params['rocp_timeperiod_s'])
    change_rocp = calc_change(
        rocp, pd.Series(np.zeros(len(candle)), index=candle.index))
    change_rocp.index = rocp.index
    features['rocp_s'] = rocp
    features['change_rocp_s'] = change_rocp
    rocp = ta.ROCP(c, timeperiod=params['rocp_timeperiod_m'])
    change_rocp = calc_change(
        rocp, pd.Series(np.zeros(len(candle)), index=candle.index))
    change_rocp.index = rocp.index
    features['rocp_m'] = rocp
    features['change_rocp_m'] = change_rocp
    rocp = ta.ROCP(c, timeperiod=params['rocp_timeperiod_l'])
    change_rocp = calc_change(
        rocp, pd.Series(np.zeros(len(candle)), index=candle.index))
    change_rocp.index = rocp.index
    features['rocp_l'] = rocp
    features['change_rocp_l'] = change_rocp

    # ボリンジャーバンド
    bb_upper, bb_middle, bb_lower = ta.BBANDS(
        c,
        timeperiod=params['bbands_timeperiod_s'],
        nbdevup=params['bbands_nbdevup_s'],
        nbdevdn=params['bbands_nbdevdn_s'],
        matype=ta.MA_Type.T3)
    bb_trend1 = pd.Series(np.zeros(len(candle)), index=candle.index)
    bb_trend1[c > bb_upper] = 1
    bb_trend1[c < bb_lower] = -1
    bb_trend2 = pd.Series(np.zeros(len(candle)), index=candle.index)
    bb_trend2[c > bb_middle] = 1
    bb_trend2[c < bb_middle] = -1
    features['bb_upper_s'] = bb_upper
    features['bb_middle_s'] = bb_middle
    features['bb_lower_s'] = bb_lower
    features['bb_trend1_s'] = bb_trend1
    features['bb_trend2_s'] = bb_trend2
    bb_upper, bb_middle, bb_lower = ta.BBANDS(
        c,
        timeperiod=params['bbands_timeperiod_m'],
        nbdevup=params['bbands_nbdevup_m'],
        nbdevdn=params['bbands_nbdevdn_m'],
        matype=ta.MA_Type.T3)
    bb_trend1 = pd.Series(np.zeros(len(candle)), index=candle.index)
    bb_trend1[c > bb_upper] = 1
    bb_trend1[c < bb_lower] = -1
    bb_trend2 = pd.Series(np.zeros(len(candle)), index=candle.index)
    bb_trend2[c > bb_middle] = 1
    bb_trend2[c < bb_middle] = -1
    features['bb_upper_m'] = bb_upper
    features['bb_middle_m'] = bb_middle
    features['bb_lower_m'] = bb_lower
    features['bb_trend1_m'] = bb_trend1
    features['bb_trend2_m'] = bb_trend2
    bb_upper, bb_middle, bb_lower = ta.BBANDS(
        c,
        timeperiod=params['bbands_timeperiod_l'],
        nbdevup=params['bbands_nbdevup_l'],
        nbdevdn=params['bbands_nbdevdn_l'],
        matype=ta.MA_Type.T3)
    bb_trend1 = pd.Series(np.zeros(len(candle)), index=candle.index)
    bb_trend1[c > bb_upper] = 1
    bb_trend1[c < bb_lower] = -1
    bb_trend2 = pd.Series(np.zeros(len(candle)), index=candle.index)
    bb_trend2[c > bb_middle] = 1
    bb_trend2[c < bb_middle] = -1
    features['bb_upper_l'] = bb_upper
    features['bb_middle_l'] = bb_middle
    features['bb_lower_l'] = bb_lower
    features['bb_trend1_l'] = bb_trend1
    features['bb_trend2_l'] = bb_trend2

    # 出来高
    features['obv'] = ta.OBV(c, v)
    features['ad'] = ta.AD(h, l, c, v)
    features['adosc_s'] = ta.ADOSC(h,
                                   l,
                                   c,
                                   v,
                                   fastperiod=params['fastperiod_adosc_s'],
                                   slowperiod=params['slowperiod_adosc_s'])

    # ローソク足
    features['CDL2CROWS'] = ta.CDL2CROWS(o, h, l, c)
    features['CDL3BLACKCROWS'] = ta.CDL3BLACKCROWS(o, h, l, c)
    features['CDL3INSIDE'] = ta.CDL3INSIDE(o, h, l, c)
    features['CDL3LINESTRIKE'] = ta.CDL3LINESTRIKE(o, h, l, c)
    features['CDL3OUTSIDE'] = ta.CDL3OUTSIDE(o, h, l, c)
    features['CDL3STARSINSOUTH'] = ta.CDL3STARSINSOUTH(o, h, l, c)
    features['CDL3WHITESOLDIERS'] = ta.CDL3WHITESOLDIERS(o, h, l, c)
    features['CDLABANDONEDBABY'] = ta.CDLABANDONEDBABY(o,
                                                       h,
                                                       l,
                                                       c,
                                                       penetration=0)
    features['CDLADVANCEBLOCK'] = ta.CDLADVANCEBLOCK(o, h, l, c)
    features['CDLBELTHOLD'] = ta.CDLBELTHOLD(o, h, l, c)
    features['CDLBREAKAWAY'] = ta.CDLBREAKAWAY(o, h, l, c)
    features['CDLCLOSINGMARUBOZU'] = ta.CDLCLOSINGMARUBOZU(o, h, l, c)
    features['CDLCONCEALBABYSWALL'] = ta.CDLCONCEALBABYSWALL(o, h, l, c)
    features['CDLCOUNTERATTACK'] = ta.CDLCOUNTERATTACK(o, h, l, c)
    features['CDLDARKCLOUDCOVER'] = ta.CDLDARKCLOUDCOVER(o,
                                                         h,
                                                         l,
                                                         c,
                                                         penetration=0)
    features['CDLDOJI'] = ta.CDLDOJI(o, h, l, c)
    features['CDLDOJISTAR'] = ta.CDLDOJISTAR(o, h, l, c)
    features['CDLDRAGONFLYDOJI'] = ta.CDLDRAGONFLYDOJI(o, h, l, c)
    features['CDLENGULFING'] = ta.CDLENGULFING(o, h, l, c)
    features['CDLEVENINGDOJISTAR'] = ta.CDLEVENINGDOJISTAR(o,
                                                           h,
                                                           l,
                                                           c,
                                                           penetration=0)
    features['CDLEVENINGSTAR'] = ta.CDLEVENINGSTAR(o, h, l, c, penetration=0)
    features['CDLGAPSIDESIDEWHITE'] = ta.CDLGAPSIDESIDEWHITE(o, h, l, c)
    features['CDLGRAVESTONEDOJI'] = ta.CDLGRAVESTONEDOJI(o, h, l, c)
    features['CDLHAMMER'] = ta.CDLHAMMER(o, h, l, c)
    features['CDLHANGINGMAN'] = ta.CDLHANGINGMAN(o, h, l, c)
    features['CDLHARAMI'] = ta.CDLHARAMI(o, h, l, c)
    features['CDLHARAMICROSS'] = ta.CDLHARAMICROSS(o, h, l, c)
    features['CDLHIGHWAVE'] = ta.CDLHIGHWAVE(o, h, l, c)
    features['CDLHIKKAKE'] = ta.CDLHIKKAKE(o, h, l, c)
    features['CDLHIKKAKEMOD'] = ta.CDLHIKKAKEMOD(o, h, l, c)
    features['CDLHOMINGPIGEON'] = ta.CDLHOMINGPIGEON(o, h, l, c)
    features['CDLIDENTICAL3CROWS'] = ta.CDLIDENTICAL3CROWS(o, h, l, c)
    features['CDLINNECK'] = ta.CDLINNECK(o, h, l, c)
    features['CDLINVERTEDHAMMER'] = ta.CDLINVERTEDHAMMER(o, h, l, c)
    features['CDLKICKING'] = ta.CDLKICKING(o, h, l, c)
    features['CDLKICKINGBYLENGTH'] = ta.CDLKICKINGBYLENGTH(o, h, l, c)
    features['CDLLADDERBOTTOM'] = ta.CDLLADDERBOTTOM(o, h, l, c)
    features['CDLLONGLEGGEDDOJI'] = ta.CDLLONGLEGGEDDOJI(o, h, l, c)
    features['CDLMARUBOZU'] = ta.CDLMARUBOZU(o, h, l, c)
    features['CDLMATCHINGLOW'] = ta.CDLMATCHINGLOW(o, h, l, c)
    features['CDLMATHOLD'] = ta.CDLMATHOLD(o, h, l, c, penetration=0)
    features['CDLMORNINGDOJISTAR'] = ta.CDLMORNINGDOJISTAR(o,
                                                           h,
                                                           l,
                                                           c,
                                                           penetration=0)
    features['CDLMORNINGSTAR'] = ta.CDLMORNINGSTAR(o, h, l, c, penetration=0)
    features['CDLONNECK'] = ta.CDLONNECK(o, h, l, c)
    features['CDLPIERCING'] = ta.CDLPIERCING(o, h, l, c)
    features['CDLRICKSHAWMAN'] = ta.CDLRICKSHAWMAN(o, h, l, c)
    features['CDLRISEFALL3METHODS'] = ta.CDLRISEFALL3METHODS(o, h, l, c)
    features['CDLSEPARATINGLINES'] = ta.CDLSEPARATINGLINES(o, h, l, c)
    features['CDLSHOOTINGSTAR'] = ta.CDLSHOOTINGSTAR(o, h, l, c)
    features['CDLSHORTLINE'] = ta.CDLSHORTLINE(o, h, l, c)
    features['CDLSPINNINGTOP'] = ta.CDLSPINNINGTOP(o, h, l, c)
    features['CDLSTALLEDPATTERN'] = ta.CDLSTALLEDPATTERN(o, h, l, c)
    features['CDLSTICKSANDWICH'] = ta.CDLSTICKSANDWICH(o, h, l, c)
    features['CDLTAKURI'] = ta.CDLTAKURI(o, h, l, c)
    features['CDLTASUKIGAP'] = ta.CDLTASUKIGAP(o, h, l, c)
    features['CDLTHRUSTING'] = ta.CDLTHRUSTING(o, h, l, c)
    features['CDLTRISTAR'] = ta.CDLTRISTAR(o, h, l, c)
    features['CDLUNIQUE3RIVER'] = ta.CDLUNIQUE3RIVER(o, h, l, c)
    features['CDLUPSIDEGAP2CROWS'] = ta.CDLUPSIDEGAP2CROWS(o, h, l, c)
    features['CDLXSIDEGAP3METHODS'] = ta.CDLXSIDEGAP3METHODS(o, h, l, c)

    window = 5
    features_ext = features
    for w in range(window):
        tmp = features.shift(periods=60 * (w + 1), freq='S')
        tmp.columns = [c + '_' + str(w + 1) + 'w' for c in features.columns]
        features_ext = pd.concat([features_ext, tmp], axis=1)
    return features_ext
 def execute(self):
     return np.array([
         self.open,
         self.high,
         self.low,
         self.close,
         self.volume,
         talib.HT_DCPERIOD(self.close),
         talib.HT_DCPHASE(self.close),
         talib.HT_PHASOR(self.close)[0],
         talib.HT_PHASOR(self.close)[1],
         talib.HT_SINE(self.close)[0],
         talib.HT_SINE(self.close)[1],
         talib.HT_TRENDMODE(self.close),
         talib.ADX(self.high, self.low, self.close),
         talib.ADXR(self.high, self.low, self.close),
         talib.APO(self.close),
         talib.AROON(self.high, self.low)[0],
         talib.AROON(self.high, self.low)[1],
         talib.AROONOSC(self.high, self.low),
         talib.BOP(self.open, self.high, self.low, self.close),
         talib.CCI(self.high, self.low, self.close),
         talib.CMO(self.close),
         talib.DX(self.high, self.low, self.close),
         talib.MACD(self.close)[0],
         talib.MACD(self.close)[1],
         talib.MACD(self.close)[2],
         talib.MACDEXT(self.close)[0],
         talib.MACDEXT(self.close)[1],
         talib.MACDEXT(self.close)[2],
         talib.MACDFIX(self.close)[0],
         talib.MACDFIX(self.close)[1],
         talib.MACDFIX(self.close)[2],
         talib.MFI(self.high, self.low, self.close, self.volume),
         talib.MINUS_DI(self.high, self.low, self.close),
         talib.MINUS_DM(self.high, self.low),
         talib.MOM(self.close),
         talib.PLUS_DI(self.high, self.low, self.close),
         talib.PLUS_DM(self.high, self.low),
         talib.PPO(self.close),
         talib.ROC(self.close),
         talib.ROCP(self.close),
         talib.ROCR(self.close),
         talib.ROCR100(self.close),
         talib.RSI(self.close),
         talib.STOCH(self.high, self.low, self.close)[0],
         talib.STOCH(self.high, self.low, self.close)[1],
         talib.STOCHF(self.high, self.low, self.close)[0],
         talib.STOCHF(self.high, self.low, self.close)[1],
         talib.STOCHRSI(self.close)[0],
         talib.STOCHRSI(self.close)[1],
         talib.TRIX(self.close),
         talib.ULTOSC(self.high, self.low, self.close),
         talib.WILLR(self.high, self.low, self.close),
         talib.BBANDS(self.close)[0],
         talib.BBANDS(self.close)[1],
         talib.BBANDS(self.close)[2],
         talib.DEMA(self.close),
         talib.EMA(self.close),
         talib.HT_TRENDLINE(self.close),
         talib.KAMA(self.close),
         talib.MA(self.close),
         talib.MAMA(self.close)[0],
         talib.MAMA(self.close)[1],
         talib.MIDPOINT(self.close),
         talib.MIDPRICE(self.high, self.low),
         talib.SAR(self.high, self.low),
         talib.SAREXT(self.high, self.low),
         talib.T3(self.close),
         talib.TEMA(self.close),
         talib.TRIMA(self.close),
         talib.WMA(self.close),
         talib.AVGPRICE(self.open, self.high, self.low, self.close),
         talib.MEDPRICE(self.high, self.low),
         talib.TYPPRICE(self.high, self.low, self.close),
         talib.WCLPRICE(self.high, self.low, self.close),
         talib.ATR(self.high, self.low, self.close),
         talib.NATR(self.high, self.low, self.close),
         talib.TRANGE(self.high, self.low, self.close),
         talib.AD(self.high, self.low, self.close, self.volume),
         talib.ADOSC(self.high, self.low, self.close, self.volume),
         talib.OBV(self.close, self.volume),
         talib.CDL2CROWS(self.open, self.high, self.low, self.close),
         talib.CDL3BLACKCROWS(self.open, self.high, self.low, self.close),
         talib.CDL3INSIDE(self.open, self.high, self.low, self.close),
         talib.CDL3LINESTRIKE(self.open, self.high, self.low, self.close),
         talib.CDL3OUTSIDE(self.open, self.high, self.low, self.close),
         talib.CDL3STARSINSOUTH(self.open, self.high, self.low, self.close),
         talib.CDL3WHITESOLDIERS(self.open, self.high, self.low,
                                 self.close),
         talib.CDLABANDONEDBABY(self.open, self.high, self.low, self.close),
         talib.CDLADVANCEBLOCK(self.open, self.high, self.low, self.close),
         talib.CDLBELTHOLD(self.open, self.high, self.low, self.close),
         talib.CDLBREAKAWAY(self.open, self.high, self.low, self.close),
         talib.CDLCLOSINGMARUBOZU(self.open, self.high, self.low,
                                  self.close),
         talib.CDLCONCEALBABYSWALL(self.open, self.high, self.low,
                                   self.close),
         talib.CDLCOUNTERATTACK(self.open, self.high, self.low, self.close),
         talib.CDLDARKCLOUDCOVER(self.open, self.high, self.low,
                                 self.close),
         talib.CDLDOJI(self.open, self.high, self.low, self.close),
         talib.CDLDOJISTAR(self.open, self.high, self.low, self.close),
         talib.CDLDRAGONFLYDOJI(self.open, self.high, self.low, self.close),
         talib.CDLENGULFING(self.open, self.high, self.low, self.close),
         talib.CDLEVENINGDOJISTAR(self.open, self.high, self.low,
                                  self.close),
         talib.CDLEVENINGSTAR(self.open, self.high, self.low, self.close),
         talib.CDLGAPSIDESIDEWHITE(self.open, self.high, self.low,
                                   self.close),
         talib.CDLGRAVESTONEDOJI(self.open, self.high, self.low,
                                 self.close),
         talib.CDLHAMMER(self.open, self.high, self.low, self.close),
         talib.CDLHANGINGMAN(self.open, self.high, self.low, self.close),
         talib.CDLHARAMI(self.open, self.high, self.low, self.close),
         talib.CDLHARAMICROSS(self.open, self.high, self.low, self.close),
         talib.CDLHIGHWAVE(self.open, self.high, self.low, self.close),
         talib.CDLHIKKAKE(self.open, self.high, self.low, self.close),
         talib.CDLHIKKAKEMOD(self.open, self.high, self.low, self.close),
         talib.CDLHOMINGPIGEON(self.open, self.high, self.low, self.close),
         talib.CDLIDENTICAL3CROWS(self.open, self.high, self.low,
                                  self.close),
         talib.CDLINNECK(self.open, self.high, self.low, self.close),
         talib.CDLINVERTEDHAMMER(self.open, self.high, self.low,
                                 self.close),
         talib.CDLKICKING(self.open, self.high, self.low, self.close),
         talib.CDLKICKINGBYLENGTH(self.open, self.high, self.low,
                                  self.close),
         talib.CDLLADDERBOTTOM(self.open, self.high, self.low, self.close),
         talib.CDLLONGLEGGEDDOJI(self.open, self.high, self.low,
                                 self.close),
         talib.CDLLONGLINE(self.open, self.high, self.low, self.close),
         talib.CDLMARUBOZU(self.open, self.high, self.low, self.close),
         talib.CDLMATCHINGLOW(self.open, self.high, self.low, self.close),
         talib.CDLMATHOLD(self.open, self.high, self.low, self.close),
         talib.CDLMORNINGDOJISTAR(self.open, self.high, self.low,
                                  self.close),
         talib.CDLMORNINGSTAR(self.open, self.high, self.low, self.close),
         talib.CDLONNECK(self.open, self.high, self.low, self.close),
         talib.CDLPIERCING(self.open, self.high, self.low, self.close),
         talib.CDLRICKSHAWMAN(self.open, self.high, self.low, self.close),
         talib.CDLRISEFALL3METHODS(self.open, self.high, self.low,
                                   self.close),
         talib.CDLSEPARATINGLINES(self.open, self.high, self.low,
                                  self.close),
         talib.CDLSHOOTINGSTAR(self.open, self.high, self.low, self.close),
         talib.CDLSHORTLINE(self.open, self.high, self.low, self.close),
         talib.CDLSPINNINGTOP(self.open, self.high, self.low, self.close),
         talib.CDLSTALLEDPATTERN(self.open, self.high, self.low,
                                 self.close),
         talib.CDLSTICKSANDWICH(self.open, self.high, self.low, self.close),
         talib.CDLTAKURI(self.open, self.high, self.low, self.close),
         talib.CDLTASUKIGAP(self.open, self.high, self.low, self.close),
         talib.CDLTHRUSTING(self.open, self.high, self.low, self.close),
         talib.CDLTRISTAR(self.open, self.high, self.low, self.close),
         talib.CDLUNIQUE3RIVER(self.open, self.high, self.low, self.close),
         talib.CDLUPSIDEGAP2CROWS(self.open, self.high, self.low,
                                  self.close),
         talib.CDLXSIDEGAP3METHODS(self.open, self.high, self.low,
                                   self.close),
     ]).transpose()
Esempio n. 9
0
def recg_pattern_talib(df_tdata,pattern):

        opens = df_tdata['OPEN']
        highs = df_tdata['HIGH']
        lows = df_tdata['LOW']
        closes = df_tdata['CLOSE']
        
        if pattern == 'CDL2CROWS':
                pt = talib.CDL2CROWS(opens,highs,lows,closes)
        if pattern == 'CDL3BLACKCROWS':
                pt = talib.CDL3BLACKCROWS(opens,highs,lows,closes)
        if pattern == 'CDL3INSIDE':
                pt = talib.CDL3INSIDE(opens,highs,lows,closes)
        if pattern == 'CDL3LINESTRIKE':
                pt = talib.CDL3LINESTRIKE(opens,highs,lows,closes)
        if pattern == 'CDL3OUTSIDE':
                pt = talib.CDL3OUTSIDE(opens,highs,lows,closes)
        if pattern == 'CDL3STARSINSOUTH':
                pt = talib.CDL3STARSINSOUTH(opens,highs,lows,closes)
        if pattern == 'CDL3WHITESOLDIERS':
                pt = talib.CDL3WHITESOLDIERS(opens,highs,lows,closes)
        if pattern == 'CDLABANDONEDBABY':
                pt = talib.CDLABANDONEDBABY(opens,highs,lows,closes)
        if pattern == 'CDLADVANCEBLOCK':
                pt = talib.CDLADVANCEBLOCK(opens,highs,lows,closes)
        if pattern == 'CDLBELTHOLD':
                pt = talib.CDLBELTHOLD(opens,highs,lows,closes)
        if pattern == 'CDLBREAKAWAY':
                pt = talib.CDLBREAKAWAY(opens,highs,lows,closes)
        if pattern == 'CDLCLOSINGMARUBOZU':
                pt = talib.CDLCLOSINGMARUBOZU(opens,highs,lows,closes)
        if pattern == 'CDLCONCEALBABYSWALL':
                pt = talib.CDLCONCEALBABYSWALL(opens,highs,lows,closes)
        if pattern == 'CDLCOUNTERATTACK':
                pt = talib.CDLCOUNTERATTACK(opens,highs,lows,closes)
        if pattern == 'CDLDARKCLOUDCOVER':
                pt = talib.CDLDARKCLOUDCOVER(opens,highs,lows,closes)
        if pattern == 'CDLDOJI':
                pt = talib.CDLDOJI(opens,highs,lows,closes)
        if pattern == 'CDLDOJISTAR':
                pt = talib.CDLDOJISTAR(opens,highs,lows,closes)
        if pattern == 'CDLDRAGONFLYDOJI':
                pt = talib.CDLDRAGONFLYDOJI(opens,highs,lows,closes)
        if pattern == 'CDLENGULFING':
                pt = talib.CDLENGULFING(opens,highs,lows,closes)
        if pattern == 'CDLEVENINGDOJISTAR':
                pt = talib.CDLEVENINGDOJISTAR(opens,highs,lows,closes)
        if pattern == 'CDLEVENINGSTAR':
                pt = talib.CDLEVENINGSTAR(opens,highs,lows,closes)
        if pattern == 'CDLGAPSIDESIDEWHITE':
                pt = talib.CDLGAPSIDESIDEWHITE(opens,highs,lows,closes)
        if pattern == 'CDLGRAVESTONEDOJI':
                pt = talib.CDLGRAVESTONEDOJI(opens,highs,lows,closes)
        if pattern == 'CDLHAMMER':
                pt = talib.CDLHAMMER(opens,highs,lows,closes)
        if pattern == 'CDLHANGINGMAN':
                pt = talib.CDLHANGINGMAN(opens,highs,lows,closes)
        if pattern == 'CDLHARAMI':
                pt = talib.CDLHARAMI(opens,highs,lows,closes)
        if pattern == 'CDLHARAMICROSS':
                pt = talib.CDLHARAMICROSS(opens,highs,lows,closes)
        if pattern == 'CDLHIGHWAVE':
                pt = talib.CDLHIGHWAVE(opens,highs,lows,closes)
        if pattern == 'CDLHIKKAKE':
                pt = talib.CDLHIKKAKE(opens,highs,lows,closes)
        if pattern == 'CDLHIKKAKEMOD':
                pt = talib.CDLHIKKAKEMOD(opens,highs,lows,closes)
        if pattern == 'CDLHOMINGPIGEON':
                pt = talib.CDLHOMINGPIGEON(opens,highs,lows,closes)
        if pattern == 'CDLIDENTICAL3CROWS':
                pt = talib.CDLIDENTICAL3CROWS(opens,highs,lows,closes)
        if pattern == 'CDLINNECK':
                pt = talib.CDLINNECK(opens,highs,lows,closes)
        if pattern == 'CDLINVERTEDHAMMER':
                pt = talib.CDLINVERTEDHAMMER(opens,highs,lows,closes)
        if pattern == 'CDLKICKING':
                pt = talib.CDLKICKING(opens,highs,lows,closes)
        if pattern == 'CDLKICKINGBYLENGTH':
                pt = talib.CDLKICKINGBYLENGTH(opens,highs,lows,closes)
        if pattern == 'CDLLADDERBOTTOM':
                pt = talib.CDLLADDERBOTTOM(opens,highs,lows,closes)
        if pattern == 'CDLLONGLEGGEDDOJI':
                pt = talib.CDLLONGLEGGEDDOJI(opens,highs,lows,closes)
        if pattern == 'CDLLONGLINE':
                pt = talib.CDLLONGLINE(opens,highs,lows,closes)
        if pattern == 'CDLMARUBOZU':
                pt = talib.CDLMARUBOZU(opens,highs,lows,closes)
        if pattern == 'CDLMATCHINGLOW':
                pt = talib.CDLMATCHINGLOW(opens,highs,lows,closes)
        if pattern == 'CDLMATHOLD':
                pt = talib.CDLMATHOLD(opens,highs,lows,closes)
        if pattern == 'CDLMORNINGDOJISTAR':
                pt = talib.CDLMORNINGDOJISTAR(opens,highs,lows,closes)
        if pattern == 'CDLMORNINGSTAR':
                pt = talib.CDLMORNINGSTAR(opens,highs,lows,closes)
        if pattern == 'CDLONNECK':
                pt = talib.CDLONNECK(opens,highs,lows,closes)
        if pattern == 'CDLPIERCING':
                pt = talib.CDLPIERCING(opens,highs,lows,closes)
        if pattern == 'CDLRICKSHAWMAN':
                pt = talib.CDLRICKSHAWMAN(opens,highs,lows,closes)
        if pattern == 'CDLRISEFALL3METHODS':
                pt = talib.CDLRISEFALL3METHODS(opens,highs,lows,closes)
        if pattern == 'CDLSEPARATINGLINES':
                pt = talib.CDLSEPARATINGLINES(opens,highs,lows,closes)
        if pattern == 'CDLSHOOTINGSTAR':
                pt = talib.CDLSHOOTINGSTAR(opens,highs,lows,closes)
        if pattern == 'CDLSHORTLINE':
                pt = talib.CDLSHORTLINE(opens,highs,lows,closes)
        if pattern == 'CDLSPINNINGTOP':
                pt = talib.CDLSPINNINGTOP(opens,highs,lows,closes)
        if pattern == 'CDLSTALLEDPATTERN':
                pt = talib.CDLSTALLEDPATTERN(opens,highs,lows,closes)
        if pattern == 'CDLSTICKSANDWICH':
                pt = talib.CDLSTICKSANDWICH(opens,highs,lows,closes)
        if pattern == 'CDLTAKURI':
                pt = talib.CDLTAKURI(opens,highs,lows,closes)
        if pattern == 'CDLTASUKIGAP':
                pt = talib.CDLTASUKIGAP(opens,highs,lows,closes)
        if pattern == 'CDLTHRUSTING':
                pt = talib.CDLTHRUSTING(opens,highs,lows,closes)
        if pattern == 'CDLTRISTAR':
                pt = talib.CDLTRISTAR(opens,highs,lows,closes)
        if pattern == 'CDLUNIQUE3RIVER':
                pt = talib.CDLUNIQUE3RIVER(opens,highs,lows,closes)
        if pattern == 'CDLUPSIDEGAP2CROWS':
                pt = talib.CDLUPSIDEGAP2CROWS(opens,highs,lows,closes)
        if pattern == 'CDLXSIDEGAP3METHODS':
                pt = talib.CDLXSIDEGAP3METHODS(opens,highs,lows,closes)

        return pt
Esempio n. 10
0
    def all_candles(self):
        bullish = []  #uptrending market
        bearish = []  #down trending markets
        fill = 0
        candles = [
            {
                'candle':
                'two_crows',
                'count': (talib.CDL2CROWS(self.open, self.high, self.low,
                                          self.close)),
                'percent':
                -54
            },
            {
                'candle':
                'three_blk_crows',
                'count': (talib.CDL3BLACKCROWS(self.open, self.high, self.low,
                                               self.close)),
                'percent':
                -78
            },
            {
                'candle':
                'three_inside_up',
                'count': (talib.CDL3INSIDE(self.open, self.high, self.low,
                                           self.close)),
                'percent':
                65
            },
            #fpound both bullish: 84 bearish: 65
            {
                'candle':
                'three_line_strike',
                'count': (talib.CDL3LINESTRIKE(self.open, self.high, self.low,
                                               self.close)),
                'percent':
                fill
            },
            {
                'candle':
                'three_outside_up',
                'count': (talib.CDL3OUTSIDE(self.open, self.high, self.low,
                                            self.close)),
                'percent':
                75
            },
            {
                'candle':
                'three_starts_in_the_south',
                'count': (talib.CDL3STARSINSOUTH(self.open, self.high,
                                                 self.low, self.close)),
                'percent':
                86
            },
            {
                'candle':
                'three_white_soldiers',
                'count': (talib.CDL3WHITESOLDIERS(self.open, self.high,
                                                  self.low, self.close)),
                'percent':
                82
            },
            #found in both bearish = 69 bullish = 70
            {
                'candle':
                'abandoned_baby',
                'count': (talib.CDLABANDONEDBABY(self.open, self.high,
                                                 self.low, self.close)),
                'percent':
                fill
            },
            {
                'candle':
                'advanced_block',
                'count': (talib.CDLADVANCEBLOCK(self.open, self.high, self.low,
                                                self.close)),
                'percent':
                64
            },
            #found in both bearish = 68 bullish = 71
            {
                'candle':
                'belt_hold',
                'count': (talib.CDLBELTHOLD(self.open, self.high, self.low,
                                            self.close)),
                'percent':
                fill
            },
            #found in both bearish = 63 bullish = 59
            {
                'candle':
                'breakaway',
                'count': (talib.CDLBREAKAWAY(self.open, self.high, self.low,
                                             self.close)),
                'percent':
                fill
            },
            #too close to tell, RIP
            {
                'candle':
                'closing_marubozu',
                'count': (talib.CDLCLOSINGMARUBOZU(self.open, self.high,
                                                   self.low, self.close)),
                'percent':
                fill
            },
            {
                'candle':
                'concealing_baby_swallow',
                'count': (talib.CDLCONCEALBABYSWALL(self.open, self.high,
                                                    self.low, self.close)),
                'percent':
                -75
            },
            #can't find number
            {
                'candle':
                'counterattack',
                'count': (talib.CDLCOUNTERATTACK(self.open, self.high,
                                                 self.low, self.close)),
                'percent':
                fill
            },
            {
                'candle':
                'dark_cloud_cover',
                'count': (talib.CDLDARKCLOUDCOVER(self.open,
                                                  self.high,
                                                  self.low,
                                                  self.close,
                                                  penetration=0)),
                'percent':
                -60
            },
            #too many to be sure
            {
                'candle':
                'doji',
                'count': (talib.CDLDOJI(self.open, self.high, self.low,
                                        self.close)),
                'percent':
                fill
            },
            #too many to be sure
            {
                'candle':
                'doji_star',
                'count': (talib.CDLDOJISTAR(self.open, self.high, self.low,
                                            self.close)),
                'percent':
                fill
            },
            #indecision
            {
                'candle':
                'dragonfly_doji',
                'count': (talib.CDLDRAGONFLYDOJI(self.open, self.high,
                                                 self.low, self.close)),
                'percent':
                fill
            },
            #found in both bearish = 79 bullish = 63
            {
                'candle':
                'engulfing_pattern',
                'count': (talib.CDLENGULFING(self.open, self.high, self.low,
                                             self.close)),
                'percent':
                fill
            },
            {
                'candle':
                'evening_doji_star',
                'count': (talib.CDLEVENINGDOJISTAR(self.open,
                                                   self.high,
                                                   self.low,
                                                   self.close,
                                                   penetration=0)),
                'percent':
                -71
            },
            {
                'candle':
                'evening_star',
                'count': (talib.CDLEVENINGSTAR(self.open,
                                               self.high,
                                               self.low,
                                               self.close,
                                               penetration=0)),
                'trend':
                'bear',
                'percent':
                -72
            },
            #cannot find
            {
                'candle':
                'gap_side_by_side',
                'count': (talib.CDLGAPSIDESIDEWHITE(self.open, self.high,
                                                    self.low, self.close)),
                'percent':
                fill
            },
            #indecision
            {
                'candle':
                'gravestone_doji',
                'count': (talib.CDLGRAVESTONEDOJI(self.open, self.high,
                                                  self.low, self.close)),
                'percent':
                fill
            },
            {
                'candle':
                'hammer',
                'count': (talib.CDLHAMMER(self.open, self.high, self.low,
                                          self.close)),
                'percent':
                60
            },
            {
                'candle':
                'hangning_man',
                'count': (talib.CDLHANGINGMAN(self.open, self.high, self.low,
                                              self.close)),
                'percent':
                59
            },
            {
                'candle':
                'harami_pattern',
                'count': (talib.CDLHARAMI(self.open, self.high, self.low,
                                          self.close)),
                'percent':
                53
            },
            #found in both bearish = 55 bullish = 57
            {
                'candle':
                'harami_cross_pattern',
                'count': (talib.CDLHIGHWAVE(self.open, self.high, self.low,
                                            self.close)),
                'percent':
                fill
            },
            #indecision
            {
                'candle':
                'high_wave_candle',
                'count': (talib.CDLHIGHWAVE(self.open, self.high, self.low,
                                            self.close)),
                'percent':
                fill
            },
            #cannot find, i guess
            {
                'candle':
                'hikkake_pattern',
                'count': (talib.CDLHIKKAKE(self.open, self.high, self.low,
                                           self.close)),
                'percent':
                fill
            },
            #cannot find, i guess
            {
                'candle':
                'modified_hikkake_pattern',
                'count': (talib.CDLHIKKAKEMOD(self.open, self.high, self.low,
                                              self.close)),
                'percent':
                fill
            },
            {
                'candle':
                'homing_pigeon',
                'count': (talib.CDLHOMINGPIGEON(self.open, self.high, self.low,
                                                self.close)),
                'percent':
                -56
            },
            {
                'candle':
                'indentical_three_crows',
                'count': (talib.CDLIDENTICAL3CROWS(self.open, self.high,
                                                   self.low, self.close)),
                'percent':
                -79
            },
            {
                'candle':
                'in_neck_pattern',
                'count': (talib.CDLINNECK(self.open, self.high, self.low,
                                          self.close)),
                'percent':
                -53
            },
            {
                'candle':
                'inverted_hammer',
                'count': (talib.CDLINVERTEDHAMMER(self.open, self.high,
                                                  self.low, self.close)),
                'percent':
                -65
            },
            #found in both bearish = 54 bullish = 53
            {
                'candle':
                'kicking',
                'count': (talib.CDLKICKING(self.open, self.high, self.low,
                                           self.close)),
                'percent':
                fill
            },
            #cannot find, i guess
            {
                'candle':
                'kicking_by_longer',
                'count': (talib.CDLKICKINGBYLENGTH(self.open, self.high,
                                                   self.low, self.close)),
                'percent':
                fill
            },
            {
                'candle':
                'ladder_bottom',
                'count': (talib.CDLLADDERBOTTOM(self.open, self.high, self.low,
                                                self.close)),
                'percent':
                56
            },
            {
                'candle':
                'long_legged_doji',
                'count': (talib.CDLLONGLEGGEDDOJI(self.open, self.high,
                                                  self.low, self.close)),
                'percent':
                51
            },
            #cannot find, i guess
            {
                'candle':
                'long_line_candle',
                'count': (talib.CDLLONGLINE(self.open, self.high, self.low,
                                            self.close)),
                'percent':
                fill
            },
            #too many to be sure
            {
                'candle':
                'marubozu',
                'count': (talib.CDLMARUBOZU(self.open, self.high, self.low,
                                            self.close)),
                'percent':
                fill
            },
            {
                'candle':
                'matching_low',
                'count': (talib.CDLMATCHINGLOW(self.open, self.high, self.low,
                                               self.close)),
                'percent':
                -61
            },
            {
                'candle':
                'mat_hold',
                'count': (talib.CDLMATHOLD(self.open,
                                           self.high,
                                           self.low,
                                           self.close,
                                           penetration=0)),
                'percent':
                78
            },
            {
                'candle':
                'morning_doji_star',
                'count': (talib.CDLMORNINGDOJISTAR(self.open,
                                                   self.high,
                                                   self.low,
                                                   self.close,
                                                   penetration=0)),
                'percent':
                fill
            },
            {
                'candle':
                'morning_star',
                'count': (talib.CDLMORNINGSTAR(self.open,
                                               self.high,
                                               self.low,
                                               self.close,
                                               penetration=0)),
                'percent':
                76
            },
            {
                'candle':
                'on_neck_pattern',
                'count': (talib.CDLONNECK(self.open, self.high, self.low,
                                          self.close)),
                'percent':
                -56
            },
            {
                'candle':
                'piercing_pattern',
                'count': (talib.CDLPIERCING(self.open, self.high, self.low,
                                            self.close)),
                'percent':
                64
            },
            #indecision
            {
                'candle':
                'rickshaw_man',
                'count': (talib.CDLRICKSHAWMAN(self.open, self.high, self.low,
                                               self.close)),
                'percent':
                fill
            },
            {
                'candle':
                'rise_fall_three_method',
                'count': (talib.CDLRISEFALL3METHODS(self.open, self.high,
                                                    self.low, self.close)),
                'percent':
                74
            },
            #found in both bearish = 63 bullish = 72
            {
                'candle':
                'separating_lines',
                'count': (talib.CDLSEPARATINGLINES(self.open, self.high,
                                                   self.low, self.close)),
                'percent':
                fill
            },
            #too many to be sure
            {
                'candle':
                'shooting_star',
                'count': (talib.CDLSHOOTINGSTAR(self.open, self.high, self.low,
                                                self.close)),
                'percent':
                fill
            },
            #indecision
            {
                'candle':
                'short_line_candle',
                'count': (talib.CDLSHORTLINE(self.open, self.high, self.low,
                                             self.close)),
                'percent':
                fill
            },
            #indecision
            {
                'candle':
                'spinning_top',
                'count': (talib.CDLSPINNINGTOP(self.open, self.high, self.low,
                                               self.close)),
                'percent':
                fill
            },
            #cannot find, i guess
            {
                'candle':
                'stalled_pattern',
                'count': (talib.CDLSTALLEDPATTERN(self.open, self.high,
                                                  self.low, self.close)),
                'percent':
                fill
            },
            {
                'candle':
                'stick_sandwich',
                'count': (talib.CDLSTICKSANDWICH(self.open, self.high,
                                                 self.low, self.close)),
                'percent':
                -62
            },
            {
                'candle':
                'takuri',
                'count': (talib.CDLTAKURI(self.open, self.high, self.low,
                                          self.close)),
                'percent':
                66
            },
            {
                'candle':
                'tasuki_gap',
                'count': (talib.CDLTASUKIGAP(self.open, self.high, self.low,
                                             self.close)),
                'percent':
                54
            },
            {
                'candle':
                'thrusting_pattern',
                'count': (talib.CDLTHRUSTING(self.open, self.high, self.low,
                                             self.close)),
                'percent':
                57
            },
            #found in both bearish = 52 bullish = 60
            {
                'candle':
                'tristar',
                'count': (talib.CDLTRISTAR(self.open, self.high, self.low,
                                           self.close)),
                'percent':
                fill
            },
            {
                'candle':
                'unique_three_river',
                'count': (talib.CDLUNIQUE3RIVER(self.open, self.high, self.low,
                                                self.close)),
                'percent':
                -60
            },
            {
                'candle':
                'upside_gap_two_crows',
                'count': (talib.CDLUPSIDEGAP2CROWS(self.open, self.high,
                                                   self.low, self.close)),
                'percent':
                60
            },
            #found in both bearish = 59 bullish = 62
            {
                'candle':
                'gap_three_methods',
                'count': (talib.CDLXSIDEGAP3METHODS(self.open, self.high,
                                                    self.low, self.close)),
                'percent':
                fill
            }
        ]
        i = 0
        candle_exists = 0
        for item in candles:
            for i in range(len(item['count'])):
                if item['count'][i] > 0:
                    candle_exists += 1
                elif item['count'][i] < 0:
                    candle_exists -= 1
            i = 0
            if (candle_exists > 0):
                bullish.append({
                    'name': item['candle'],
                    'percent': item['percent']
                })
            if (candle_exists < 0):
                bearish.append({
                    'name': item['candle'],
                    'percent': item['percent']
                })
            candle_exists = 0
        # bullish_2 = bullish[-1:]
        # bearish_2 = bearish[-1:]

        return bullish, bearish
Esempio n. 11
0
def doji(px):
    sig = ta.CDLDOJI(px.open, px.high, px.low, px.close)
    return sig[-1]
Esempio n. 12
0
def icic_fut_transform(data):
    data.drop_duplicates(subset='date', keep="first", inplace=True)
    feature_frame = pd.DataFrame()
    feature_frame['Hour'] = data['date'].apply(lambda x: x.hour)
    feature_frame['ret1'] = data.close.pct_change()
    feature_frame['ret2'] = data.close.pct_change(2)
    feature_frame['ret5'] = data.close.pct_change(5)
    feature_frame['ret20'] = data.close.pct_change(20)
    feature_frame['ret30'] = data.close.pct_change(30)

    feature_frame['retl1'] = data.low.pct_change()
    feature_frame['retl2'] = data.low.pct_change(2)
    feature_frame['retl5'] = data.low.pct_change(5)
    feature_frame['reth1'] = data.high.pct_change()
    feature_frame['reth2'] = data.high.pct_change(2)
    feature_frame['reth5'] = data.high.pct_change(5)

    feature_frame['retr5'] = feature_frame.ret1.rolling(5).sum()
    feature_frame['retr10'] = feature_frame.ret1.rolling(10).sum()
    feature_frame['retr20'] = feature_frame.ret1.rolling(20).sum()
    feature_frame['retr40'] = feature_frame.ret1.rolling(40).sum()

    # Standard Deviation
    feature_frame['std5'] = feature_frame.ret1.rolling(5).std()
    feature_frame['std10'] = feature_frame.ret1.rolling(10).std()
    feature_frame['std20'] = feature_frame.ret1.rolling(20).std()
    feature_frame['std40'] = feature_frame.ret1.rolling(30).std()

    feature_frame['vel1'] = (2 * data.close - data.high - data.low)
    feature_frame['vel5'] = feature_frame.vel1.rolling(5).sum()
    feature_frame['vel10'] = feature_frame.vel1.rolling(10).sum()
    feature_frame['vel20'] = feature_frame.vel1.rolling(20).sum()
    feature_frame['vel40'] = feature_frame.vel1.rolling(30).sum()

    feature_frame['stdv5'] = feature_frame.vel1.rolling(5).std()
    feature_frame['stdv10'] = feature_frame.vel1.rolling(10).std()
    feature_frame['stdv20'] = feature_frame.vel1.rolling(20).std()
    feature_frame['stdv40'] = feature_frame.vel1.rolling(30).std()

    feature_frame['stdv5'] = data.volume.rolling(5).std()
    feature_frame['stdvv10'] = data.volume.rolling(10).std()
    feature_frame['stdvv20'] = data.volume.rolling(20).std()
    feature_frame['stdvv40'] = data.volume.rolling(30).std()

    # ADDED volume profile and acc, this reduced low vol peformance but increased the high vol performance

    feature_frame['vol1'] = data.volume.diff()
    feature_frame['vol5'] = data.volume.diff(5)
    feature_frame['vol10'] = data.volume.diff(10)
    feature_frame['vol20'] = data.volume.diff(20)
    feature_frame['vol40'] = data.volume.diff(30)

    feature_frame['vols5'] = data.volume.rolling(5).sum()
    feature_frame['vols10'] = data.volume.rolling(10).sum()
    feature_frame['vols20'] = data.volume.rolling(20).sum()
    feature_frame['vols40'] = data.volume.rolling(30).sum()

    feature_frame['acc1'] = feature_frame.vel1.diff()
    feature_frame['acc5'] = feature_frame.vel1.diff(5)
    feature_frame['acc10'] = feature_frame.vel1.diff(10)
    feature_frame['acc20'] = feature_frame.vel1.diff(20)
    feature_frame['acc40'] = feature_frame.vel1.diff(30)

    # Candlestick Patterns
    feature_frame['HAMMER'] = ta.CDLHAMMER(data.open, data.high, data.low,
                                           data.close)
    feature_frame['DOJI'] = ta.CDLDOJI(data.open, data.high, data.low,
                                       data.close)
    feature_frame['SHOOTINGSTAR'] = ta.CDLSHOOTINGSTAR(data.open, data.high,
                                                       data.low, data.close)

    # changed the timeperiod from 14 to 30
    feature_frame['AROONOSC'] = ta.AROONOSC(data.high, data.low, timeperiod=30)
    feature_frame['AROONOSC10'] = ta.AROONOSC(data.high,
                                              data.low,
                                              timeperiod=10)
    feature_frame['AROONOSC20'] = ta.AROONOSC(data.high,
                                              data.low,
                                              timeperiod=20)
    feature_frame['AROONOSC5'] = ta.AROONOSC(data.high, data.low, timeperiod=5)

    feature_frame['RSI'] = ta.RSI(data.close, timeperiod=30)
    feature_frame['RSI14'] = ta.RSI(data.close, timeperiod=14)
    feature_frame['RSI10'] = ta.RSI(data.close, timeperiod=10)

    feature_frame['ADXR'] = ta.ADXR(data.high,
                                    data.low,
                                    data.close,
                                    timeperiod=30)
    feature_frame['ADXR'] = ta.ADXR(data.high,
                                    data.low,
                                    data.close,
                                    timeperiod=15)

    feature_frame['ATR30'] = ta.ATR(data.high,
                                    data.low,
                                    data.close,
                                    timeperiod=30)
    feature_frame['ATR'] = ta.ATR(data.high,
                                  data.low,
                                  data.close,
                                  timeperiod=5)
    feature_frame['ATR10'] = ta.ATR(data.high,
                                    data.low,
                                    data.close,
                                    timeperiod=10)
    feature_frame['ATR20'] = ta.ATR(data.high,
                                    data.low,
                                    data.close,
                                    timeperiod=20)
    # Adding jump
    feature_frame['Jump'] = data.open - data.close.shift(1)
    feature_frame['Jump5'] = data.open - data.close.shift(5)
    feature_frame['Jump10'] = data.open - data.close.shift(10)
    feature_frame['Jump20'] = data.open - data.close.shift(20)
    feature_frame['Jump30'] = data.open - data.close.shift(30)

    return feature_frame.dropna()
Esempio n. 13
0
def Candlesticks_Pattern(data):
    data["Upside/Downside Gap Three Methods"] = ta.CDLXSIDEGAP3METHODS(
        data["Open"], data["High"], data["Low"], data["Close"])
    data["Upside Gap Two Crows"] = ta.CDLUPSIDEGAP2CROWS(
        data["Open"], data["High"], data["Low"], data["Close"])
    data["Unique 3 River"] = ta.CDLUNIQUE3RIVER(data["Open"], data["High"],
                                                data["Low"], data["Close"])
    data["Tristar Pattern"] = ta.CDLTRISTAR(data["Open"], data["High"],
                                            data["Low"], data["Close"])
    data["Thrusting Pattern"] = ta.CDLTHRUSTING(data["Open"], data["High"],
                                                data["Low"], data["Close"])
    data["Tasuki Gap"] = ta.CDLTASUKIGAP(data["Open"], data["High"],
                                         data["Low"], data["Close"])
    data["Takuri (Dragonfly Doji with very long lower shadow)"] = ta.CDLTAKURI(
        data["Open"], data["High"], data["Low"], data["Close"])
    data["Stick Sandwich"] = ta.CDLSTICKSANDWICH(data["Open"], data["High"],
                                                 data["Low"], data["Close"])
    data["Stalled Pattern"] = ta.CDLSTALLEDPATTERN(data["Open"], data["High"],
                                                   data["Low"], data["Close"])
    data["Spinning Top"] = ta.CDLSPINNINGTOP(data["Open"], data["High"],
                                             data["Low"], data["Close"])
    data["Short Line Candle"] = ta.CDLSHORTLINE(data["Open"], data["High"],
                                                data["Low"], data["Close"])
    data["Shooting Star"] = ta.CDLSHOOTINGSTAR(data["Open"], data["High"],
                                               data["Low"], data["Close"])
    data["Separating Lines"] = ta.CDLSEPARATINGLINES(data["Open"],
                                                     data["High"], data["Low"],
                                                     data["Close"])
    data["Rising/Falling Three Methods"] = ta.CDLRISEFALL3METHODS(
        data["Open"], data["High"], data["Low"], data["Close"])
    data["Rickshaw Man"] = ta.CDLRICKSHAWMAN(data["Open"], data["High"],
                                             data["Low"], data["Close"])
    data["Piercing Pattern"] = ta.CDLPIERCING(data["Open"], data["High"],
                                              data["Low"], data["Close"])
    data["On-Neck Pattern"] = ta.CDLONNECK(data["Open"], data["High"],
                                           data["Low"], data["Close"])
    data["Morning Star"] = ta.CDLMORNINGSTAR(data["Open"], data["High"],
                                             data["Low"], data["Close"])
    data["Morning Doji Star"] = ta.CDLMORNINGDOJISTAR(data["Open"],
                                                      data["High"],
                                                      data["Low"],
                                                      data["Close"])
    data["Mat Hold"] = ta.CDLMATHOLD(data["Open"], data["High"], data["Low"],
                                     data["Close"])
    data["Matching Low"] = ta.CDLMATCHINGLOW(data["Open"], data["High"],
                                             data["Low"], data["Close"])
    data["Marubozu"] = ta.CDLMARUBOZU(data["Open"], data["High"], data["Low"],
                                      data["Close"])
    data["Long Line Candle"] = ta.CDLLONGLINE(data["Open"], data["High"],
                                              data["Low"], data["Close"])
    data["Long Legged Doji"] = ta.CDLLONGLEGGEDDOJI(data["Open"], data["High"],
                                                    data["Low"], data["Close"])
    data["Ladder Bottom"] = ta.CDLLADDERBOTTOM(data["Open"], data["High"],
                                               data["Low"], data["Close"])
    data[
        "Kicking - bull/bear determined by the longer marubozu"] = ta.CDLKICKINGBYLENGTH(
            data["Open"], data["High"], data["Low"], data["Close"])
    data["Kicking"] = ta.CDLKICKING(data["Open"], data["High"], data["Low"],
                                    data["Close"])
    data["Inverted Hammer"] = ta.CDLINVERTEDHAMMER(data["Open"], data["High"],
                                                   data["Low"], data["Close"])
    data["Identical Three Crows"] = ta.CDLIDENTICAL3CROWS(
        data["Open"], data["High"], data["Low"], data["Close"])
    data["Two Crows"] = ta.CDL2CROWS(data["Open"], data["High"], data["Low"],
                                     data["Close"])
    data["Three Black Crows"] = ta.CDL3BLACKCROWS(data["Open"], data["High"],
                                                  data["Low"], data["Close"])
    data["Three Inside Up/Down"] = ta.CDL3INSIDE(data["Open"], data["High"],
                                                 data["Low"], data["Close"])
    data["Three-Line Strike"] = ta.CDL3LINESTRIKE(data["Open"], data["High"],
                                                  data["Low"], data["Close"])
    data["Three Outside Up/Down"] = ta.CDL3OUTSIDE(data["Open"], data["High"],
                                                   data["Low"], data["Close"])
    data["Three Stars In The South"] = ta.CDL3STARSINSOUTH(
        data["Open"], data["High"], data["Low"], data["Close"])
    data["Three Advancing White Soldiers"] = ta.CDL3WHITESOLDIERS(
        data["Open"], data["High"], data["Low"], data["Close"])
    data["Abandoned Baby"] = ta.CDLABANDONEDBABY(data["Open"], data["High"],
                                                 data["Low"], data["Close"])
    data["Advance Block"] = ta.CDLADVANCEBLOCK(data["Open"], data["High"],
                                               data["Low"], data["Close"])
    data["Belt-hold"] = ta.CDLBELTHOLD(data["Open"], data["High"], data["Low"],
                                       data["Close"])
    data["Breakaway"] = ta.CDLBREAKAWAY(data["Open"], data["High"],
                                        data["Low"], data["Close"])
    data["Closing Marubozu"] = ta.CDLCLOSINGMARUBOZU(data["Open"],
                                                     data["High"], data["Low"],
                                                     data["Close"])
    data["Concealing Baby Swallow"] = ta.CDLCONCEALBABYSWALL(
        data["Open"], data["High"], data["Low"], data["Close"])
    data["Counterattack"] = ta.CDLCOUNTERATTACK(data["Open"], data["High"],
                                                data["Low"], data["Close"])
    data["Dark Cloud Cover"] = ta.CDLDARKCLOUDCOVER(data["Open"], data["High"],
                                                    data["Low"], data["Close"])
    data["Doji"] = ta.CDLDOJI(data["Open"], data["High"], data["Low"],
                              data["Close"])
    data["Doji Star"] = ta.CDLDOJISTAR(data["Open"], data["High"], data["Low"],
                                       data["Close"])
    data["Dragonfly Doji"] = ta.CDLDRAGONFLYDOJI(data["Open"], data["High"],
                                                 data["Low"], data["Close"])
    data["Engulfing Pattern"] = ta.CDLENGULFING(data["Open"], data["High"],
                                                data["Low"], data["Close"])
    data["Evening Doji Star"] = ta.CDLEVENINGDOJISTAR(data["Open"],
                                                      data["High"],
                                                      data["Low"],
                                                      data["Close"])
    data["Evening Star"] = ta.CDLEVENINGSTAR(data["Open"], data["High"],
                                             data["Low"], data["Close"])
    data["Up/Down-gap side-by-side white lines"] = ta.CDLGAPSIDESIDEWHITE(
        data["Open"], data["High"], data["Low"], data["Close"])
    data["Gravestone Doji"] = ta.CDLGRAVESTONEDOJI(data["Open"], data["High"],
                                                   data["Low"], data["Close"])
    data["Hammer"] = ta.CDLHAMMER(data["Open"], data["High"], data["Low"],
                                  data["Close"])
    data["Hanging Man"] = ta.CDLHANGINGMAN(data["Open"], data["High"],
                                           data["Low"], data["Close"])
    data["Harami Pattern"] = ta.CDLHARAMI(data["Open"], data["High"],
                                          data["Low"], data["Close"])
    data["Harami Cross Pattern"] = ta.CDLHARAMICROSS(data["Open"],
                                                     data["High"], data["Low"],
                                                     data["Close"])
    data["High-Wave Candle"] = ta.CDLHIGHWAVE(data["Open"], data["High"],
                                              data["Low"], data["Close"])
    data["Hikkake Pattern"] = ta.CDLHIKKAKE(data["Open"], data["High"],
                                            data["Low"], data["Close"])
    data["Modified Hikkake Pattern"] = ta.CDLHIKKAKEMOD(
        data["Open"], data["High"], data["Low"], data["Close"])
    data["Homing Pigeon"] = ta.CDLHOMINGPIGEON(data["Open"], data["High"],
                                               data["Low"], data["Close"])

    return (data)
Esempio n. 14
0
def pattern_recognition(candles: np.ndarray, pattern_type: str, penetration: int = 0, sequential: bool = False) -> \
        Union[int, np.ndarray]:
    """
    Pattern Recognition

    :param candles: np.ndarray
    :param penetration: int - default = 0
    :param pattern_type: str
    :param sequential: bool - default=False

    :return: int | np.ndarray
    """
    warmup_candles_num = get_config('env.data.warmup_candles_num', 240)
    if not sequential and len(candles) > warmup_candles_num:
        candles = candles[-warmup_candles_num:]

    if pattern_type == "CDL2CROWS":
        res = talib.CDL2CROWS(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDL3BLACKCROWS":
        res = talib.CDL3BLACKCROWS(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDL3INSIDE":
        res = talib.CDL3INSIDE(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDL3LINESTRIKE":
        res = talib.CDL3LINESTRIKE(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDL3OUTSIDE":
        res = talib.CDL3OUTSIDE(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDL3STARSINSOUTH":
        res = talib.CDL3STARSINSOUTH(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDL3WHITESOLDIERS":
        res = talib.CDL3WHITESOLDIERS(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLABANDONEDBABY":
        res = talib.CDLABANDONEDBABY(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2],
                                     penetration=penetration)
    elif pattern_type == "CDLADVANCEBLOCK":
        res = talib.CDLADVANCEBLOCK(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLBELTHOLD":
        res = talib.CDLBELTHOLD(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLBREAKAWAY":
        res = talib.CDLBREAKAWAY(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLCLOSINGMARUBOZU":
        res = talib.CDLCLOSINGMARUBOZU(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLCONCEALBABYSWALL":
        res = talib.CDLCONCEALBABYSWALL(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLCOUNTERATTACK":
        res = talib.CDLCOUNTERATTACK(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLDARKCLOUDCOVER":
        res = talib.CDLDARKCLOUDCOVER(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2],
                                      penetration=penetration)
    elif pattern_type == "CDLDOJI":
        res = talib.CDLDOJI(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLDOJISTAR":
        res = talib.CDLDOJISTAR(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLDRAGONFLYDOJI":
        res = talib.CDLDRAGONFLYDOJI(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLENGULFING":
        res = talib.CDLENGULFING(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLEVENINGDOJISTAR":
        res = talib.CDLEVENINGDOJISTAR(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2],
                                       penetration=penetration)
    elif pattern_type == "CDLEVENINGSTAR":
        res = talib.CDLEVENINGSTAR(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2], penetration=penetration)
    elif pattern_type == "CDLGAPSIDESIDEWHITE":
        res = talib.CDLGAPSIDESIDEWHITE(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLGRAVESTONEDOJI":
        res = talib.CDLGRAVESTONEDOJI(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLHAMMER":
        res = talib.CDLHAMMER(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLHANGINGMAN":
        res = talib.CDLHANGINGMAN(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLHARAMI":
        res = talib.CDLHARAMI(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLHARAMICROSS":
        res = talib.CDLHARAMICROSS(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLHIGHWAVE":
        res = talib.CDLHIGHWAVE(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLHIKKAKE":
        res = talib.CDLHIKKAKE(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLHIKKAKEMOD":
        res = talib.CDLHIKKAKEMOD(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLHOMINGPIGEON":
        res = talib.CDLHOMINGPIGEON(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLIDENTICAL3CROWS":
        res = talib.CDLIDENTICAL3CROWS(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLINNECK":
        res = talib.CDLINNECK(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLINVERTEDHAMMER":
        res = talib.CDLINVERTEDHAMMER(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLKICKING":
        res = talib.CDLKICKING(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLKICKINGBYLENGTH":
        res = talib.CDLKICKINGBYLENGTH(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLLADDERBOTTOM":
        res = talib.CDLLADDERBOTTOM(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLLONGLEGGEDDOJI":
        res = talib.CDLLONGLEGGEDDOJI(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLLONGLINE":
        res = talib.CDLLONGLINE(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLMARUBOZU":
        res = talib.CDLMARUBOZU(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLMATCHINGLOW":
        res = talib.CDLMATCHINGLOW(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLMATHOLD":
        res = talib.CDLMATHOLD(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2], penetration=penetration)
    elif pattern_type == "CDLMORNINGDOJISTAR":
        res = talib.CDLMORNINGDOJISTAR(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2],
                                       penetration=penetration)
    elif pattern_type == "CDLMORNINGSTAR":
        res = talib.CDLMORNINGSTAR(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2], penetration=penetration)
    elif pattern_type == "CDLONNECK":
        res = talib.CDLONNECK(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLPIERCING":
        res = talib.CDLPIERCING(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLRICKSHAWMAN":
        res = talib.CDLRICKSHAWMAN(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLRISEFALL3METHODS":
        res = talib.CDLRISEFALL3METHODS(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLSEPARATINGLINES":
        res = talib.CDLSEPARATINGLINES(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLSHOOTINGSTAR":
        res = talib.CDLSHOOTINGSTAR(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLSHORTLINE":
        res = talib.CDLSHORTLINE(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLSPINNINGTOP":
        res = talib.CDLSPINNINGTOP(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLSTALLEDPATTERN":
        res = talib.CDLSTALLEDPATTERN(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLSTICKSANDWICH":
        res = talib.CDLSTICKSANDWICH(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLTAKURI":
        res = talib.CDLTAKURI(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLTASUKIGAP":
        res = talib.CDLTASUKIGAP(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLTHRUSTING":
        res = talib.CDLTHRUSTING(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLTRISTAR":
        res = talib.CDLTRISTAR(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLUNIQUE3RIVER":
        res = talib.CDLUNIQUE3RIVER(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLUPSIDEGAP2CROWS":
        res = talib.CDLUPSIDEGAP2CROWS(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    elif pattern_type == "CDLXSIDEGAP3METHODS":
        res = talib.CDLXSIDEGAP3METHODS(candles[:, 1], candles[:, 3], candles[:, 4], candles[:, 2])
    else:
        raise ValueError('pattern type string not recognised')

    return res / 100 if sequential else res[-1] / 100
def doji(px):
    sig = ta.CDLDOJI(px.open.values, px.high.values, px.low.values,
                     px.close.values)
    return sig[-1]
def get_exogenous_data(data, **kwargs):
    """
    :param data: DataFrame of underlying market info, should include ['open', 'close', 'low', 'high', 'volumn', 'money'] columns, where 'money' is trading amount.
    :param kwargs: parameter for construction of new variables
    :return: dict of the addictional varibales
    """
    open = data['open']
    high = data['high']
    low = data['low']
    close = data['close']
    volume = data['volume']
    all_para = kwargs.keys()  # may be useful in the future??
    indicators_df = pd.DataFrame()
    """
    get all the technical indicators, reference: https://mrjbq7.github.io/ta-lib/doc_index.html
    """
    """momentum indicators"""
    indicators_df['ADX'] = talib.ADX(
        high, low, close, timeperiod=14)  # Average Directional Movement Index
    indicators_df['ADXR'] = talib.ADXR(
        high, low, close,
        timeperiod=14)  # Average Directional Movement Index Rating
    indicators_df['APO'] = talib.APO(close,
                                     fastperiod=12,
                                     slowperiod=26,
                                     matype=0)  # Absolute Price Oscillator
    indicators_df['aroondown'], indicators_df['aroonup'] = talib.AROON(
        high, low, timeperiod=14)  # Aroon
    indicators_df['AROONOSC'] = talib.AROONOSC(
        high, low, timeperiod=14)  # Aroon Oscillator
    indicators_df['BOP'] = talib.BOP(open, high, low,
                                     close)  # Balance Of Power
    indicators_df['CCI'] = talib.CCI(high, low, close,
                                     timeperiod=14)  # Commodity Channel Index
    indicators_df['CMO'] = talib.CMO(
        close, timeperiod=14)  # Chande Momentum Oscillator
    indicators_df['DX'] = talib.DX(high, low, close,
                                   timeperiod=14)  # Directional Movement Index
    indicators_df['macd1'], indicators_df[
        'macdsignal1'], macdhist = talib.MACD(
            close, fastperiod=12, slowperiod=26,
            signalperiod=9)  # Moving Average Convergence/Divergence
    indicators_df['macd2'], indicators_df[
        'macdsignal2'], macdhist = talib.MACDEXT(
            close,
            fastperiod=12,
            fastmatype=0,
            slowperiod=26,
            slowmatype=0,
            signalperiod=9,
            signalmatype=0)  # MACD with controllable MA type
    indicators_df['macd3'], indicators_df[
        'macdsignal3'], macdhist = talib.MACDFIX(
            close,
            signalperiod=9)  # Moving Average Convergence/Divergence Fix 12/26
    indicators_df['MFI'] = talib.MFI(high, low, close, volume,
                                     timeperiod=14)  # Money Flow Index
    indicators_df['MINUS_DI'] = talib.MINUS_DI(
        high, low, close, timeperiod=14)  # Minus Directional Indicator
    indicators_df['MINUS_DM'] = talib.MINUS_DM(
        high, low, timeperiod=14)  # Minus Directional Movement
    indicators_df['MOM'] = talib.MOM(close, timeperiod=10)  # Momentum
    indicators_df['PLUS_DI'] = talib.PLUS_DI(
        high, low, close, timeperiod=14)  # Plus Directional Indicator
    indicators_df['PLUS_DM'] = talib.PLUS_DM(
        high, low, timeperiod=14)  # Plus Directional Movement
    indicators_df['PPO'] = talib.PPO(close,
                                     fastperiod=12,
                                     slowperiod=26,
                                     matype=0)  # Percentage Price Oscillator
    indicators_df['ROC'] = talib.ROC(
        close, timeperiod=10)  # Rate of change : ((price/prevPrice)-1)*100
    indicators_df['ROCP'] = talib.ROCP(
        close, timeperiod=10
    )  # Rate of change Percentage: (price-prevPrice)/prevPrice
    indicators_df['ROCR'] = talib.ROCR(
        close, timeperiod=10)  # Rate of change ratio: (price/prevPrice)
    indicators_df['ROCR100'] = talib.ROCR100(
        close,
        timeperiod=10)  # Rate of change ratio 100 scale: (price/prevPrice)*100
    indicators_df['RSI'] = talib.RSI(close,
                                     timeperiod=14)  # Relative Strength Index
    indicators_df['slowk'], indicators_df['slowd'] = talib.STOCH(
        high,
        low,
        close,
        fastk_period=5,
        slowk_period=3,
        slowk_matype=0,
        slowd_period=3,
        slowd_matype=0)  # Stochastic
    indicators_df['fastk'], indicators_df['fastd'] = talib.STOCHF(
        high, low, close, fastk_period=5, fastd_period=3,
        fastd_matype=0)  # Stochastic Fast
    indicators_df['S-RSIk'], indicators_df['S-RSId'] = talib.STOCHRSI(
        close, timeperiod=14, fastk_period=5, fastd_period=3,
        fastd_matype=0)  # Stochastic Relative Strength Index
    indicators_df['TRIX'] = talib.TRIX(
        close,
        timeperiod=30)  # 1-day Rate-Of-Change (ROC) of a Triple Smooth EMA
    indicators_df['ULTOSC'] = talib.ULTOSC(
        high, low, close, timeperiod1=7, timeperiod2=14,
        timeperiod3=28)  # Ultimate Oscillator
    indicators_df['WILLR'] = talib.WILLR(high, low, close,
                                         timeperiod=14)  # Williams' %R
    """Volume indicators"""
    indicators_df['AD'] = talib.AD(high, low, close,
                                   volume)  # Chaikin A/D Line
    indicators_df['ADOSC'] = talib.ADOSC(
        high, low, close, volume, fastperiod=3,
        slowperiod=10)  # Chaikin A/D Oscillator
    indicators_df['OBV'] = talib.OBV(close, volume)  # On Balance Volume
    """Volatility indicators"""
    indicators_df['ATR'] = talib.ATR(high, low, close,
                                     timeperiod=14)  # Average True Range
    indicators_df['NATR'] = talib.NATR(
        high, low, close, timeperiod=14)  # Normalized Average True Range
    indicators_df['TRANGE'] = talib.TRANGE(high, low, close)  # True Range
    """Cycle Indicators"""
    indicators_df['HT_DCPERIOD'] = talib.HT_DCPERIOD(
        close)  # Hilbert Transform - Dominant Cycle Period
    indicators_df['HT_DCPHASE'] = talib.HT_DCPHASE(
        close)  # Hilbert Transform - Dominant Cycle Phase
    indicators_df['inphase'], indicators_df['quadrature'] = talib.HT_PHASOR(
        close)  # Hilbert Transform - Phasor Components
    indicators_df['sine'], indicators_df['leadsine'] = talib.HT_SINE(
        close)  # Hilbert Transform - SineWave
    indicators_df['HT_TRENDMODE'] = talib.HT_TRENDMODE(
        close)  # Hilbert Transform - Trend vs Cycle Mode
    """Pattern Recognition"""
    indicators_df['CDL2CROWS'] = talib.CDL2CROWS(open, high, low,
                                                 close)  # Two Crows
    indicators_df['CDL3BLACKCROWS'] = talib.CDL3BLACKCROWS(
        open, high, low, close)  # Three Black Crows
    indicators_df['CDL3INSIDE'] = talib.CDL3INSIDE(
        open, high, low, close)  # Three Inside Up/Down
    indicators_df['CDL3LINESTRIKE'] = talib.CDL3LINESTRIKE(
        open, high, low, close)  # Three-Line Strike
    indicators_df['CDL3OUTSIDE'] = talib.CDL3OUTSIDE(
        open, high, low, close)  # Three Outside Up/Down
    indicators_df['CDL3STARSINSOUTH'] = talib.CDL3STARSINSOUTH(
        open, high, low, close)  # Three Stars In The South
    indicators_df['CDL3WHITESOLDIERS'] = talib.CDL3WHITESOLDIERS(
        open, high, low, close)  # Three Advancing White Soldiers
    indicators_df['CDLABANDONEDBABY'] = talib.CDLABANDONEDBABY(
        open, high, low, close, penetration=0)  # Abandoned Baby
    indicators_df['CDLADVANCEBLOCK'] = talib.CDLADVANCEBLOCK(
        open, high, low, close)  # Advance Block
    indicators_df['CDLBELTHOLD'] = talib.CDLBELTHOLD(open, high, low,
                                                     close)  # Belt-hold
    indicators_df['CDLBREAKAWAY'] = talib.CDLBREAKAWAY(open, high, low,
                                                       close)  # Breakaway
    indicators_df['CDLCLOSINGMARUBOZU'] = talib.CDLCLOSINGMARUBOZU(
        open, high, low, close)  # Closing Marubozu
    indicators_df['CDLCONCEALBABYSWALL'] = talib.CDLCONCEALBABYSWALL(
        open, high, low, close)  # Concealing Baby Swallow
    indicators_df['CDLCOUNTERATTACK'] = talib.CDLCOUNTERATTACK(
        open, high, low, close)  # Counterattack
    indicators_df['CDLDARKCLOUDCOVER'] = talib.CDLDARKCLOUDCOVER(
        open, high, low, close, penetration=0)  # Dark Cloud Cover
    indicators_df['CDLDOJI'] = talib.CDLDOJI(open, high, low, close)  # Doji
    indicators_df['CDLDOJISTAR'] = talib.CDLDOJISTAR(open, high, low,
                                                     close)  # Doji Star
    indicators_df['CDLDRAGONFLYDOJI'] = talib.CDLDRAGONFLYDOJI(
        open, high, low, close)  # Dragonfly Doji
    indicators_df['CDLENGULFING'] = talib.CDLENGULFING(
        open, high, low, close)  # Engulfing Pattern
    indicators_df['CDLEVENINGDOJISTAR'] = talib.CDLEVENINGDOJISTAR(
        open, high, low, close, penetration=0)  # Evening Doji Star
    indicators_df['CDLEVENINGSTAR'] = talib.CDLEVENINGSTAR(
        open, high, low, close, penetration=0)  # Evening Star
    indicators_df['CDLGAPSIDESIDEWHITE'] = talib.CDLGAPSIDESIDEWHITE(
        open, high, low, close)  # Up/Down-gap side-by-side white lines
    indicators_df['CDLGRAVESTONEDOJI'] = talib.CDLGRAVESTONEDOJI(
        open, high, low, close)  # Gravestone Doji
    indicators_df['CDLHAMMER'] = talib.CDLHAMMER(open, high, low,
                                                 close)  # Hammer
    indicators_df['CDLHANGINGMAN'] = talib.CDLHANGINGMAN(
        open, high, low, close)  # Hanging Man
    indicators_df['CDLHARAMI'] = talib.CDLHARAMI(open, high, low,
                                                 close)  # Harami Pattern
    indicators_df['CDLHARAMICROSS'] = talib.CDLHARAMICROSS(
        open, high, low, close)  # Harami Cross Pattern
    indicators_df['CDLHIGHWAVE'] = talib.CDLHIGHWAVE(open, high, low,
                                                     close)  # High-Wave Candle
    indicators_df['CDLHIKKAKE'] = talib.CDLHIKKAKE(open, high, low,
                                                   close)  # Hikkake Pattern
    indicators_df['CDLHIKKAKEMOD'] = talib.CDLHIKKAKEMOD(
        open, high, low, close)  # Modified Hikkake Pattern
    indicators_df['CDLHOMINGPIGEON'] = talib.CDLHOMINGPIGEON(
        open, high, low, close)  # Homing Pigeon
    indicators_df['CDLIDENTICAL3CROWS'] = talib.CDLIDENTICAL3CROWS(
        open, high, low, close)  # Identical Three Crows
    indicators_df['CDLINNECK'] = talib.CDLINNECK(open, high, low,
                                                 close)  # In-Neck Pattern
    indicators_df['CDLINVERTEDHAMMER'] = talib.CDLINVERTEDHAMMER(
        open, high, low, close)  # Inverted Hammer
    indicators_df['CDLKICKING'] = talib.CDLKICKING(open, high, low,
                                                   close)  # Kicking
    indicators_df['CDLKICKINGBYLENGTH'] = talib.CDLKICKINGBYLENGTH(
        open, high, low,
        close)  # Kicking - bull/bear determined by the longer marubozu
    indicators_df['CDLLADDERBOTTOM'] = talib.CDLLADDERBOTTOM(
        open, high, low, close)  # Ladder Bottom
    indicators_df['CDLLONGLEGGEDDOJI'] = talib.CDLLONGLEGGEDDOJI(
        open, high, low, close)  # Long Legged Doji
    indicators_df['CDLLONGLINE'] = talib.CDLLONGLINE(open, high, low,
                                                     close)  # Long Line Candle
    indicators_df['CDLMARUBOZU'] = talib.CDLMARUBOZU(open, high, low,
                                                     close)  # Marubozu
    indicators_df['CDLMATCHINGLOW'] = talib.CDLMATCHINGLOW(
        open, high, low, close)  # Matching Low
    indicators_df['CDLMATHOLD'] = talib.CDLMATHOLD(open,
                                                   high,
                                                   low,
                                                   close,
                                                   penetration=0)  # Mat Hold
    indicators_df['CDLMORNINGDOJISTAR'] = talib.CDLMORNINGDOJISTAR(
        open, high, low, close, penetration=0)  # Morning Doji Star
    indicators_df['CDLMORNINGSTAR'] = talib.CDLMORNINGSTAR(
        open, high, low, close, penetration=0)  # Morning Star
    indicators_df['CDLONNECK'] = talib.CDLONNECK(open, high, low,
                                                 close)  # On-Neck Pattern
    indicators_df['CDLPIERCING'] = talib.CDLPIERCING(open, high, low,
                                                     close)  # Piercing Pattern
    indicators_df['CDLRICKSHAWMAN'] = talib.CDLRICKSHAWMAN(
        open, high, low, close)  # Rickshaw Man
    indicators_df['CDLRISEFALL3METHODS'] = talib.CDLRISEFALL3METHODS(
        open, high, low, close)  # Rising/Falling Three Methods
    indicators_df['CDLSEPARATINGLINES'] = talib.CDLSEPARATINGLINES(
        open, high, low, close)  # Separating Lines
    indicators_df['CDLSHOOTINGSTAR'] = talib.CDLSHOOTINGSTAR(
        open, high, low, close)  # Shooting Star
    indicators_df['CDLSHORTLINE'] = talib.CDLSHORTLINE(
        open, high, low, close)  # Short Line Candle
    indicators_df['CDLSPINNINGTOP'] = talib.CDLSPINNINGTOP(
        open, high, low, close)  # Spinning Top
    indicators_df['CDLSTALLEDPATTERN'] = talib.CDLSTALLEDPATTERN(
        open, high, low, close)  # Stalled Pattern
    indicators_df['CDLSTICKSANDWICH'] = talib.CDLSTICKSANDWICH(
        open, high, low, close)  # Stick Sandwich
    indicators_df['CDLTAKURI'] = talib.CDLTAKURI(
        open, high, low,
        close)  # Takuri (Dragonfly Doji with very long lower shadow)
    indicators_df['CDLTASUKIGAP'] = talib.CDLTASUKIGAP(open, high, low,
                                                       close)  # Tasuki Gap
    indicators_df['CDLTHRUSTING'] = talib.CDLTHRUSTING(
        open, high, low, close)  # Thrusting Pattern
    indicators_df['CDLTRISTAR'] = talib.CDLTRISTAR(open, high, low,
                                                   close)  # Tristar Pattern
    indicators_df['CDLUNIQUE3RIVER'] = talib.CDLUNIQUE3RIVER(
        open, high, low, close)  # Unique 3 River
    indicators_df['CDLUPSIDEGAP2CROWS'] = talib.CDLUPSIDEGAP2CROWS(
        open, high, low, close)  # Upside Gap Two Crows
    indicators_df['CDLXSIDEGAP3METHODS'] = talib.CDLXSIDEGAP3METHODS(
        open, high, low, close)  # Upside/Downside Gap Three Methods

    return indicators_df
def main():
    # read csv file and transform it to datafeed (df):
    df = pd.read_csv(current_dir + "/" + base_dir + "/" + in_dir + "/" +
                     in_dir + '_' + stock_symbol + '.csv')

    # set numpy datafeed from df:
    df_numpy = {
        'Date': np.array(df['date']),
        'Open': np.array(df['open'], dtype='float'),
        'High': np.array(df['high'], dtype='float'),
        'Low': np.array(df['low'], dtype='float'),
        'Close': np.array(df['close'], dtype='float'),
        'Volume': np.array(df['volume'], dtype='float')
    }

    date = df_numpy['Date']
    openp = df_numpy['Open']
    high = df_numpy['High']
    low = df_numpy['Low']
    close = df_numpy['Close']
    volume = df_numpy['Volume']

    #########################################
    ##### Pattern Recognition Functions #####
    #########################################

    #CDL2CROWS - Two Crows
    cdl2crows = ta.CDL2CROWS(openp, high, low, close)

    #CDL3BLACKCROWS - Three Black Crows
    cdl3blackcrows = ta.CDL3BLACKCROWS(openp, high, low, close)

    #CDL3INSIDE - Three Inside Up/Down
    cdl3inside = ta.CDL3INSIDE(openp, high, low, close)

    #CDL3LINESTRIKE - Three-Line Strike
    cdl3linestrike = ta.CDL3LINESTRIKE(openp, high, low, close)

    #CDL3OUTSIDE - Three Outside Up/Down
    cdl3outside = ta.CDL3OUTSIDE(openp, high, low, close)

    #CDL3STARSINSOUTH - Three Stars In The South
    cdl3starinsouth = ta.CDL3STARSINSOUTH(openp, high, low, close)

    #CDL3WHITESOLDIERS - Three Advancing White Soldiers
    cdl3whitesoldiers = ta.CDL3WHITESOLDIERS(openp, high, low, close)

    #CDLABANDONEDBABY - Abandoned Baby
    cdlabandonbaby = ta.CDLABANDONEDBABY(openp,
                                         high,
                                         low,
                                         close,
                                         penetration=0)

    #CDLADVANCEBLOCK - Advance Block
    cdladvanceblock = ta.CDLADVANCEBLOCK(openp, high, low, close)

    #CDLBELTHOLD - Belt-hold
    cdlbelthold = ta.CDLBELTHOLD(openp, high, low, close)

    #CDLBREAKAWAY - Breakaway
    cdlbreakway = ta.CDLBREAKAWAY(openp, high, low, close)

    #CDLCLOSINGMARUBOZU - Closing Marubozu
    cdlclosingmarubozu = ta.CDLCLOSINGMARUBOZU(openp, high, low, close)

    #CDLCONCEALBABYSWALL - Concealing Baby Swallow
    cdlconcealbabyswall = ta.CDLCONCEALBABYSWALL(openp, high, low, close)

    #CDLCOUNTERATTACK - Counterattack
    cdlcounterattack = ta.CDLCOUNTERATTACK(openp, high, low, close)

    #CDLDARKCLOUDCOVER - Dark Cloud Cover
    cdldarkcloudcover = ta.CDLDARKCLOUDCOVER(openp,
                                             high,
                                             low,
                                             close,
                                             penetration=0)

    #CDLDOJI - Doji
    cdldoji = ta.CDLDOJI(openp, high, low, close)

    #CDLDOJISTAR - Doji Star
    cdldojistar = ta.CDLDOJISTAR(openp, high, low, close)

    #CDLDRAGONFLYDOJI - Dragonfly Doji
    cdldragonflydoji = ta.CDLDRAGONFLYDOJI(openp, high, low, close)

    #CDLENGULFING - Engulfing Pattern
    cdlengulfing = ta.CDLENGULFING(openp, high, low, close)

    #CDLEVENINGDOJISTAR - Evening Doji Star
    cdeveningdojistar = ta.CDLEVENINGDOJISTAR(openp,
                                              high,
                                              low,
                                              close,
                                              penetration=0)

    #CDLEVENINGSTAR - Evening Star
    cdeveningstar = ta.CDLEVENINGSTAR(openp, high, low, close, penetration=0)

    #CDLGAPSIDESIDEWHITE - Up/Down-gap side-by-side white lines
    cdlgapsidesidewhite = ta.CDLGAPSIDESIDEWHITE(openp, high, low, close)

    #CDLGRAVESTONEDOJI - Gravestone Doji
    cdlgravestonedoji = ta.CDLGRAVESTONEDOJI(openp, high, low, close)

    #CDLHAMMER - Hammer
    cdlhammer = ta.CDLHAMMER(openp, high, low, close)

    #CDLHANGINGMAN - Hanging Man
    cdlhangman = ta.CDLHANGINGMAN(openp, high, low, close)

    #CDLHARAMI - Harami Pattern
    cdlharami = ta.CDLHARAMI(openp, high, low, close)

    #CDLHARAMICROSS - Harami Cross Pattern
    cdlharamicross = ta.CDLHARAMICROSS(openp, high, low, close)

    #CDLHIGHWAVE - High-Wave Candle
    cdlhighwave = ta.CDLHIGHWAVE(openp, high, low, close)

    #CDLHIKKAKE - Hikkake Pattern
    cdlhikakke = ta.CDLHIKKAKE(openp, high, low, close)

    #CDLHIKKAKEMOD - Modified Hikkake Pattern
    cdlhikkakemod = ta.CDLHIKKAKEMOD(openp, high, low, close)

    #CDLHOMINGPIGEON - Homing Pigeon
    cdlhomingpigeon = ta.CDLHOMINGPIGEON(openp, high, low, close)

    #CDLIDENTICAL3CROWS - Identical Three Crows
    cdlidentical3crows = ta.CDLIDENTICAL3CROWS(openp, high, low, close)

    #CDLINNECK - In-Neck Pattern
    cdlinneck = ta.CDLINNECK(openp, high, low, close)

    #CDLINVERTEDHAMMER - Inverted Hammer
    cdlinvertedhammer = ta.CDLINVERTEDHAMMER(openp, high, low, close)

    #CDLKICKING - Kicking
    cdkicking = ta.CDLKICKING(openp, high, low, close)

    #CDLKICKINGBYLENGTH - Kicking - bull/bear determined by the longer marubozu
    cdkickingbylength = ta.CDLKICKINGBYLENGTH(openp, high, low, close)

    #CDLLADDERBOTTOM - Ladder Bottom
    cdlladderbottom = ta.CDLLADDERBOTTOM(openp, high, low, close)

    #CDLLONGLEGGEDDOJI - Long Legged Doji
    cdllongleggeddoji = ta.CDLLONGLEGGEDDOJI(openp, high, low, close)

    #CDLLONGLINE - Long Line Candle
    cdllongline = ta.CDLLONGLINE(openp, high, low, close)

    #CDLMARUBOZU - Marubozu
    cdlmarubozu = ta.CDLMARUBOZU(openp, high, low, close)

    #CDLMATCHINGLOW - Matching Low
    cdlmatchinglow = ta.CDLMATCHINGLOW(openp, high, low, close)

    #CDLMATHOLD - Mat Hold
    cdlmathold = ta.CDLMATHOLD(openp, high, low, close, penetration=0)

    #CDLMORNINGDOJISTAR - Morning Doji Star
    cdlmorningdojistar = ta.CDLMORNINGDOJISTAR(openp,
                                               high,
                                               low,
                                               close,
                                               penetration=0)

    #CDLMORNINGSTAR - Morning Star
    cdlmorningstar = ta.CDLMORNINGSTAR(openp, high, low, close, penetration=0)

    #CDLONNECK - On-Neck Pattern
    cdlonneck = ta.CDLONNECK(openp, high, low, close)

    #CDLPIERCING - Piercing Pattern
    cdlpiercing = ta.CDLPIERCING(openp, high, low, close)

    #CDLRICKSHAWMAN - Rickshaw Man
    cdlrickshawman = ta.CDLRICKSHAWMAN(openp, high, low, close)

    #CDLRISEFALL3METHODS - Rising/Falling Three Methods
    cdlrisefall3methods = ta.CDLRISEFALL3METHODS(openp, high, low, close)

    #CDLSEPARATINGLINES - Separating Lines
    cdlseperatinglines = ta.CDLSEPARATINGLINES(openp, high, low, close)

    #CDLSHOOTINGSTAR - Shooting Star
    cdlshootingstar = ta.CDLSHOOTINGSTAR(openp, high, low, close)

    #CDLSHORTLINE - Short Line Candle
    cdlshortline = ta.CDLSHORTLINE(openp, high, low, close)

    #CDLSPINNINGTOP - Spinning Top
    cdlspinningtop = ta.CDLSPINNINGTOP(openp, high, low, close)

    #CDLSTALLEDPATTERN - Stalled Pattern
    cdlstalledpattern = ta.CDLSTALLEDPATTERN(openp, high, low, close)

    #CDLSTICKSANDWICH - Stick Sandwich
    cdlsticksandwich = ta.CDLSTICKSANDWICH(openp, high, low, close)

    #CDLTAKURI - Takuri (Dragonfly Doji with very long lower shadow)
    cdltakuri = ta.CDLTAKURI(openp, high, low, close)

    #CDLTASUKIGAP - Tasuki Gap
    cdltasukigap = ta.CDLTASUKIGAP(openp, high, low, close)

    #CDLTHRUSTING - Thrusting Pattern
    cdlthrusting = ta.CDLTHRUSTING(openp, high, low, close)

    #CDLTRISTAR - Tristar Pattern
    cdltristar = ta.CDLTRISTAR(openp, high, low, close)

    #CDLUNIQUE3RIVER - Unique 3 River
    cdlunique3river = ta.CDLUNIQUE3RIVER(openp, high, low, close)

    #CDLUPSIDEGAP2CROWS - Upside Gap Two Crows
    cdlupsidegap2crows = ta.CDLUPSIDEGAP2CROWS(openp, high, low, close)

    #CDLXSIDEGAP3METHODS - Upside/Downside Gap Three Methods
    cdlxsidegap3methods = ta.CDLXSIDEGAP3METHODS(openp, high, low, close)

    df_save = pd.DataFrame(
        data={
            'date': np.array(df['date']),
            'cdl2crows': cdl2crows,
            'cdl3blackcrows': cdl3blackcrows,
            'cdl3inside': cdl3inside,
            'cdl3linestrike': cdl3linestrike,
            'cdl3outside': cdl3outside,
            'cdl3starinsouth': cdl3starinsouth,
            'cdl3whitesoldiers': cdl3whitesoldiers,
            'cdlabandonbaby': cdlabandonbaby,
            'cdladvanceblock': cdladvanceblock,
            'cdlbelthold': cdlbelthold,
            'cdlbreakway': cdlbreakway,
            'cdlclosingmarubozu': cdlclosingmarubozu,
            'cdlconcealbabyswall': cdlconcealbabyswall,
            'cdlcounterattack': cdlcounterattack,
            'cdldarkcloudcover': cdldarkcloudcover,
            'cdldoji': cdldoji,
            'cdldojistar': cdldojistar,
            'cdldragonflydoji': cdldragonflydoji,
            'cdlengulfing': cdlengulfing,
            'cdeveningdojistar': cdeveningdojistar,
            'cdeveningstar': cdeveningstar,
            'cdlgapsidesidewhite': cdlgapsidesidewhite,
            'cdlgravestonedoji': cdlgravestonedoji,
            'cdlhammer': cdlhammer,
            'cdlhangman': cdlhangman,
            'cdlharami': cdlharami,
            'cdlharamicross': cdlharamicross,
            'cdlhighwave': cdlhighwave,
            'cdlhikakke': cdlhikakke,
            'cdlhikkakemod': cdlhikkakemod,
            'cdlhomingpigeon': cdlhomingpigeon,
            'cdlidentical3crows': cdlidentical3crows,
            'cdlinneck': cdlinneck,
            'cdlinvertedhammer': cdlinvertedhammer,
            'cdkicking': cdkicking,
            'cdkickingbylength': cdkickingbylength,
            'cdlladderbottom': cdlladderbottom,
            'cdllongleggeddoji': cdllongleggeddoji,
            'cdllongline': cdllongline,
            'cdlmarubozu': cdlmarubozu,
            'cdlmatchinglow': cdlmatchinglow,
            'cdlmathold': cdlmathold,
            'cdlmorningdojistar': cdlmorningdojistar,
            'cdlmorningstar': cdlmorningstar,
            'cdlonneck': cdlonneck,
            'cdlpiercing': cdlpiercing,
            'cdlrickshawman': cdlrickshawman,
            'cdlrisefall3methods': cdlrisefall3methods,
            'cdlseperatinglines': cdlseperatinglines,
            'cdlshootingstar': cdlshootingstar,
            'cdlshortline': cdlshortline,
            'cdlspinningtop': cdlspinningtop,
            'cdlstalledpattern': cdlstalledpattern,
            'cdlsticksandwich': cdlsticksandwich,
            'cdltakuri': cdltakuri,
            'cdltasukigap': cdltasukigap,
            'cdlthrusting': cdlthrusting,
            'cdltristar': cdltristar,
            'cdlunique3river': cdlunique3river,
            'cdlupsidegap2crows': cdlupsidegap2crows,
            'cdlxsidegap3methods': cdlxsidegap3methods
        })

    df_save.to_csv(current_dir + "/" + base_dir + "/" + out_dir + '/' +
                   stock_symbol + "/" + out_dir + '_ta_pattern_reognition_' +
                   stock_symbol + '.csv',
                   index=False)
Esempio n. 18
0
from matplotlib.pylab import date2num

df_data = pd.read_csv('my_data.csv')
df_data.datetime = df_data.datetime.apply(pd.to_datetime)

df_data.set_index('datetime', drop=True, inplace=True)

Open = df_data.loc[:, 'SHFE.cu1805.open']
High = df_data.loc[:, 'SHFE.cu1805.high']
Low = df_data.loc[:, 'SHFE.cu1805.low']
Close = df_data.loc[:, 'SHFE.cu1805.close']

MACD, Signalline, MACDhist = talib.MACD(Close, fastperiod=12, slowperiod=26, signalperiod=9)

########################################
integer = talib.CDLDOJI(Open, High, Low, Close)
integer = talib.CDL3WHITESOLDIERS(Open, High, Low, Close)
integer = integer/100*Close
x = integer.where(integer!=0)

fig = plt.figure(figsize=(30, 15))
y=len(Close)
date = np.linspace(0,y,y)
candleAr = []
ax1 = plt.subplot2grid((10,4),(0,0),rowspan=5,colspan=4)
candlestick2_ochl(ax1,Open[:1000],Close[:1000],High[:1000],Low[:1000],width=1,colorup='r',colordown='g', alpha=0.75)
ax1.scatter(date[:1000], x[:1000], marker='.')
plt.savefig('2.png', dpi=300)
#plt.show()

Esempio n. 19
0
    def calc(self,stockCode):
        cursor=self.connection.cursor()
        cursor.execute("select date,open,high,low,close,volume from histDaily where code=%s and date>=%s and date<=%s",(stockCode,self.fromDate,self.toDate))
        result = cursor.fetchall()

        ohlc=[]
        for row in result:
            ohlc.append((row[0],row[1],row[2],row[3],row[4],row[5]))
        cursor.close()

        oprice=np.asfarray(np.asarray(ohlc)[:,1])
        hprice=np.asfarray(np.asarray(ohlc)[:,2])
        lprice=np.asfarray(np.asarray(ohlc)[:,3])
        cprice=np.asfarray(np.asarray(ohlc)[:,4])
        # cat a |awk '{print "self.__write(\""$1"\",stockCode,ohlc,ta."$1"(oprice,hprice,lprice,cprice))"}'

        self.__write("CDL2CROWS", stockCode, ohlc, ta.CDL2CROWS(oprice, hprice, lprice, cprice))
        self.__write("CDL3BLACKCROWS", stockCode, ohlc, ta.CDL3BLACKCROWS(oprice, hprice, lprice, cprice))
        self.__write("CDL3INSIDE", stockCode, ohlc, ta.CDL3INSIDE(oprice, hprice, lprice, cprice))
        self.__write("CDL3LINESTRIKE", stockCode, ohlc, ta.CDL3LINESTRIKE(oprice, hprice, lprice, cprice))
        self.__write("CDL3OUTSIDE", stockCode, ohlc, ta.CDL3OUTSIDE(oprice, hprice, lprice, cprice))
        self.__write("CDL3STARSINSOUTH", stockCode, ohlc, ta.CDL3STARSINSOUTH(oprice, hprice, lprice, cprice))
        self.__write("CDL3WHITESOLDIERS", stockCode, ohlc, ta.CDL3WHITESOLDIERS(oprice, hprice, lprice, cprice))
        self.__write("CDLABANDONEDBABY", stockCode, ohlc, ta.CDLABANDONEDBABY(oprice, hprice, lprice, cprice))
        self.__write("CDLADVANCEBLOCK", stockCode, ohlc, ta.CDLADVANCEBLOCK(oprice, hprice, lprice, cprice))
        self.__write("CDLBELTHOLD", stockCode, ohlc, ta.CDLBELTHOLD(oprice, hprice, lprice, cprice))
        self.__write("CDLBREAKAWAY", stockCode, ohlc, ta.CDLBREAKAWAY(oprice, hprice, lprice, cprice))
        self.__write("CDLCLOSINGMARUBOZU", stockCode, ohlc, ta.CDLCLOSINGMARUBOZU(oprice, hprice, lprice, cprice))
        self.__write("CDLCONCEALBABYSWALL", stockCode, ohlc, ta.CDLCONCEALBABYSWALL(oprice, hprice, lprice, cprice))
        self.__write("CDLCOUNTERATTACK", stockCode, ohlc, ta.CDLCOUNTERATTACK(oprice, hprice, lprice, cprice))
        self.__write("CDLDARKCLOUDCOVER", stockCode, ohlc, ta.CDLDARKCLOUDCOVER(oprice, hprice, lprice, cprice))
        self.__write("CDLDOJI", stockCode, ohlc, ta.CDLDOJI(oprice, hprice, lprice, cprice))
        self.__write("CDLDOJISTAR", stockCode, ohlc, ta.CDLDOJISTAR(oprice, hprice, lprice, cprice))
        self.__write("CDLDRAGONFLYDOJI", stockCode, ohlc, ta.CDLDRAGONFLYDOJI(oprice, hprice, lprice, cprice))
        self.__write("CDLENGULFING", stockCode, ohlc, ta.CDLENGULFING(oprice, hprice, lprice, cprice))
        self.__write("CDLEVENINGDOJISTAR", stockCode, ohlc, ta.CDLEVENINGDOJISTAR(oprice, hprice, lprice, cprice))
        self.__write("CDLEVENINGSTAR", stockCode, ohlc, ta.CDLEVENINGSTAR(oprice, hprice, lprice, cprice))
        self.__write("CDLGAPSIDESIDEWHITE", stockCode, ohlc, ta.CDLGAPSIDESIDEWHITE(oprice, hprice, lprice, cprice))
        self.__write("CDLGRAVESTONEDOJI", stockCode, ohlc, ta.CDLGRAVESTONEDOJI(oprice, hprice, lprice, cprice))
        self.__write("CDLHAMMER", stockCode, ohlc, ta.CDLHAMMER(oprice, hprice, lprice, cprice))
        self.__write("CDLHANGINGMAN", stockCode, ohlc, ta.CDLHANGINGMAN(oprice, hprice, lprice, cprice))
        self.__write("CDLHARAMI", stockCode, ohlc, ta.CDLHARAMI(oprice, hprice, lprice, cprice))
        self.__write("CDLHARAMICROSS", stockCode, ohlc, ta.CDLHARAMICROSS(oprice, hprice, lprice, cprice))
        self.__write("CDLHIGHWAVE", stockCode, ohlc, ta.CDLHIGHWAVE(oprice, hprice, lprice, cprice))
        self.__write("CDLHIKKAKE", stockCode, ohlc, ta.CDLHIKKAKE(oprice, hprice, lprice, cprice))
        self.__write("CDLHIKKAKEMOD", stockCode, ohlc, ta.CDLHIKKAKEMOD(oprice, hprice, lprice, cprice))
        self.__write("CDLHOMINGPIGEON", stockCode, ohlc, ta.CDLHOMINGPIGEON(oprice, hprice, lprice, cprice))
        self.__write("CDLIDENTICAL3CROWS", stockCode, ohlc, ta.CDLIDENTICAL3CROWS(oprice, hprice, lprice, cprice))
        self.__write("CDLINNECK", stockCode, ohlc, ta.CDLINNECK(oprice, hprice, lprice, cprice))
        self.__write("CDLINVERTEDHAMMER", stockCode, ohlc, ta.CDLINVERTEDHAMMER(oprice, hprice, lprice, cprice))
        self.__write("CDLKICKING", stockCode, ohlc, ta.CDLKICKING(oprice, hprice, lprice, cprice))
        self.__write("CDLKICKINGBYLENGTH", stockCode, ohlc, ta.CDLKICKINGBYLENGTH(oprice, hprice, lprice, cprice))
        self.__write("CDLLADDERBOTTOM", stockCode, ohlc, ta.CDLLADDERBOTTOM(oprice, hprice, lprice, cprice))
        self.__write("CDLLONGLEGGEDDOJI", stockCode, ohlc, ta.CDLLONGLEGGEDDOJI(oprice, hprice, lprice, cprice))
        self.__write("CDLLONGLINE", stockCode, ohlc, ta.CDLLONGLINE(oprice, hprice, lprice, cprice))
        self.__write("CDLMARUBOZU", stockCode, ohlc, ta.CDLMARUBOZU(oprice, hprice, lprice, cprice))
        self.__write("CDLMATCHINGLOW", stockCode, ohlc, ta.CDLMATCHINGLOW(oprice, hprice, lprice, cprice))
        self.__write("CDLMATHOLD", stockCode, ohlc, ta.CDLMATHOLD(oprice, hprice, lprice, cprice))
        self.__write("CDLMORNINGDOJISTAR", stockCode, ohlc, ta.CDLMORNINGDOJISTAR(oprice, hprice, lprice, cprice))
        self.__write("CDLMORNINGSTAR", stockCode, ohlc, ta.CDLMORNINGSTAR(oprice, hprice, lprice, cprice))
        self.__write("CDLONNECK", stockCode, ohlc, ta.CDLONNECK(oprice, hprice, lprice, cprice))
        self.__write("CDLPIERCING", stockCode, ohlc, ta.CDLPIERCING(oprice, hprice, lprice, cprice))
        self.__write("CDLRICKSHAWMAN", stockCode, ohlc, ta.CDLRICKSHAWMAN(oprice, hprice, lprice, cprice))
        self.__write("CDLRISEFALL3METHODS", stockCode, ohlc, ta.CDLRISEFALL3METHODS(oprice, hprice, lprice, cprice))
        self.__write("CDLSEPARATINGLINES", stockCode, ohlc, ta.CDLSEPARATINGLINES(oprice, hprice, lprice, cprice))
        self.__write("CDLSHOOTINGSTAR", stockCode, ohlc, ta.CDLSHOOTINGSTAR(oprice, hprice, lprice, cprice))
        self.__write("CDLSHORTLINE", stockCode, ohlc, ta.CDLSHORTLINE(oprice, hprice, lprice, cprice))
        self.__write("CDLSPINNINGTOP", stockCode, ohlc, ta.CDLSPINNINGTOP(oprice, hprice, lprice, cprice))
        self.__write("CDLSTALLEDPATTERN", stockCode, ohlc, ta.CDLSTALLEDPATTERN(oprice, hprice, lprice, cprice))
        self.__write("CDLSTICKSANDWICH", stockCode, ohlc, ta.CDLSTICKSANDWICH(oprice, hprice, lprice, cprice))
        self.__write("CDLTAKURI", stockCode, ohlc, ta.CDLTAKURI(oprice, hprice, lprice, cprice))
        self.__write("CDLTASUKIGAP", stockCode, ohlc, ta.CDLTASUKIGAP(oprice, hprice, lprice, cprice))
        self.__write("CDLTHRUSTING", stockCode, ohlc, ta.CDLTHRUSTING(oprice, hprice, lprice, cprice))
        self.__write("CDLTRISTAR", stockCode, ohlc, ta.CDLTRISTAR(oprice, hprice, lprice, cprice))
        self.__write("CDLUNIQUE3RIVER", stockCode, ohlc, ta.CDLUNIQUE3RIVER(oprice, hprice, lprice, cprice))
        self.__write("CDLUPSIDEGAP2CROWS", stockCode, ohlc, ta.CDLUPSIDEGAP2CROWS(oprice, hprice, lprice, cprice))
        self.__write("CDLXSIDEGAP3METHODS", stockCode, ohlc, ta.CDLXSIDEGAP3METHODS(oprice, hprice, lprice, cprice))

        self.connection.close()
        self.connection2.close()
Esempio n. 20
0
def candles(source):
	open = source['Open']
	high = source['High']
	low = source['Low']
	close = source['Close']

	source = source.join(pd.Series(talib.CDL2CROWS(open, high, low, close), name='CDL2CROWS'))
	source = source.join(pd.Series(talib.CDL3BLACKCROWS(open, high, low, close), name='CDL3BLACKCROWS'))
	source = source.join(pd.Series(talib.CDL3INSIDE(open, high, low, close), name='CDL3INSIDE'))
	source = source.join(pd.Series(talib.CDL3OUTSIDE(open, high, low, close), name='CDL3OUTSIDE'))
	source = source.join(pd.Series(talib.CDL3STARSINSOUTH(open, high, low, close), name='CDL3STARSINSOUTH'))
	source = source.join(pd.Series(talib.CDL3WHITESOLDIERS(open, high, low, close), name='CDL3WHITESOLDIERS'))
	source = source.join(pd.Series(talib.CDLABANDONEDBABY(open, high, low, close), name='CDLABANDONEDBABY'))
	source = source.join(pd.Series(talib.CDLADVANCEBLOCK(open, high, low, close), name='CDLADVANCEBLOCK'))
	source = source.join(pd.Series(talib.CDLBELTHOLD(open, high, low, close), name='CDLBELTHOLD'))
	source = source.join(pd.Series(talib.CDLBREAKAWAY(open, high, low, close), name='CDLBREAKAWAY'))
	source = source.join(pd.Series(talib.CDLCLOSINGMARUBOZU(open, high, low, close), name='CDLCLOSINGMARUBOZU'))
	source = source.join(pd.Series(talib.CDLCONCEALBABYSWALL(open, high, low, close), name='CDLCONCEALBABYSWALL'))
	source = source.join(pd.Series(talib.CDLCOUNTERATTACK(open, high, low, close), name='CDLCOUNTERATTACK'))
	source = source.join(pd.Series(talib.CDLDARKCLOUDCOVER(open, high, low, close), name='CDLDARKCLOUDCOVER'))
	source = source.join(pd.Series(talib.CDLDOJI(open, high, low, close), name='CDLDOJI'))
	source = source.join(pd.Series(talib.CDLDOJISTAR(open, high, low, close), name='CDLDOJISTAR'))
	source = source.join(pd.Series(talib.CDLDRAGONFLYDOJI(open, high, low, close), name='CDLDRAGONFLYDOJI'))
	source = source.join(pd.Series(talib.CDLENGULFING(open, high, low, close), name='CDLENGULFING'))
	source = source.join(pd.Series(talib.CDLEVENINGDOJISTAR(open, high, low, close), name='CDLEVENINGDOJISTAR'))
	source = source.join(pd.Series(talib.CDLEVENINGSTAR(open, high, low, close), name='CDLEVENINGSTAR'))
	source = source.join(pd.Series(talib.CDLGAPSIDESIDEWHITE(open, high, low, close), name='CDLGAPSIDESIDEWHITE'))
	source = source.join(pd.Series(talib.CDLGRAVESTONEDOJI(open, high, low, close), name='CDLGRAVESTONEDOJI'))
	source = source.join(pd.Series(talib.CDLHAMMER(open, high, low, close), name='CDLHAMMER'))
	source = source.join(pd.Series(talib.CDLHANGINGMAN(open, high, low, close), name='CDLHANGINGMAN'))
	source = source.join(pd.Series(talib.CDLHARAMI(open, high, low, close), name='CDLHARAMI'))
	source = source.join(pd.Series(talib.CDLHARAMICROSS(open, high, low, close), name='CDLHARAMICROSS'))
	source = source.join(pd.Series(talib.CDLHIGHWAVE(open, high, low, close), name='CDLHIGHWAVE'))
	source = source.join(pd.Series(talib.CDLHIKKAKE(open, high, low, close), name='CDLHIKKAKE'))
	source = source.join(pd.Series(talib.CDLHIKKAKEMOD(open, high, low, close), name='CDLHIKKAKEMOD'))
	source = source.join(pd.Series(talib.CDLHOMINGPIGEON(open, high, low, close), name='CDLHOMINGPIGEON'))
	source = source.join(pd.Series(talib.CDLIDENTICAL3CROWS(open, high, low, close), name='CDLIDENTICAL3CROWS'))
	source = source.join(pd.Series(talib.CDLINNECK(open, high, low, close), name='CDLINNECK'))
	source = source.join(pd.Series(talib.CDLINVERTEDHAMMER(open, high, low, close), name='CDLINVERTEDHAMMER'))
	source = source.join(pd.Series(talib.CDLKICKING(open, high, low, close), name='CDLKICKING'))
	source = source.join(pd.Series(talib.CDLKICKINGBYLENGTH(open, high, low, close), name='CDLKICKINGBYLENGTH'))
	source = source.join(pd.Series(talib.CDLLADDERBOTTOM(open, high, low, close), name='CDLLADDERBOTTOM'))
	source = source.join(pd.Series(talib.CDLLONGLEGGEDDOJI(open, high, low, close), name='CDLLONGLEGGEDDOJI'))
	source = source.join(pd.Series(talib.CDLLONGLINE(open, high, low, close), name='CDLLONGLINE'))
	source = source.join(pd.Series(talib.CDLMARUBOZU(open, high, low, close), name='CDLMARUBOZU'))
	source = source.join(pd.Series(talib.CDLMATCHINGLOW(open, high, low, close), name='CDLMATCHINGLOW'))
	source = source.join(pd.Series(talib.CDLMATHOLD(open, high, low, close), name='CDLMATHOLD'))
	source = source.join(pd.Series(talib.CDLMORNINGDOJISTAR(open, high, low, close), name='CDLMORNINGDOJISTAR'))
	source = source.join(pd.Series(talib.CDLMORNINGSTAR(open, high, low, close), name='CDLMORNINGSTAR'))
	source = source.join(pd.Series(talib.CDLONNECK(open, high, low, close), name='CDLONNECK'))
	source = source.join(pd.Series(talib.CDLPIERCING(open, high, low, close), name='CDLPIERCING'))
	source = source.join(pd.Series(talib.CDLRICKSHAWMAN(open, high, low, close), name='CDLRICKSHAWMAN'))
	source = source.join(pd.Series(talib.CDLRISEFALL3METHODS(open, high, low, close), name='CDLRISEFALL3METHODS'))
	source = source.join(pd.Series(talib.CDLSEPARATINGLINES(open, high, low, close), name='CDLSEPARATINGLINES'))
	source = source.join(pd.Series(talib.CDLSHOOTINGSTAR(open, high, low, close), name='CDLSHOOTINGSTAR'))
	source = source.join(pd.Series(talib.CDLSHORTLINE(open, high, low, close), name='CDLSHORTLINE'))
	source = source.join(pd.Series(talib.CDLSPINNINGTOP(open, high, low, close), name='CDLSPINNINGTOP'))
	source = source.join(pd.Series(talib.CDLSTALLEDPATTERN(open, high, low, close), name='CDLSTALLEDPATTERN'))
	source = source.join(pd.Series(talib.CDLSTICKSANDWICH(open, high, low, close), name='CDLSTICKSANDWICH'))
	source = source.join(pd.Series(talib.CDLTAKURI(open, high, low, close), name='CDLTAKURI'))
	source = source.join(pd.Series(talib.CDLTASUKIGAP(open, high, low, close), name='CDLTASUKIGAP'))
	source = source.join(pd.Series(talib.CDLTHRUSTING(open, high, low, close), name='CDLTHRUSTING'))
	source = source.join(pd.Series(talib.CDLTRISTAR(open, high, low, close), name='CDLTRISTAR'))
	source = source.join(pd.Series(talib.CDLUNIQUE3RIVER(open, high, low, close), name='CDLUNIQUE3RIVER'))
	source = source.join(pd.Series(talib.CDLUPSIDEGAP2CROWS(open, high, low, close), name='CDLUPSIDEGAP2CROWS'))
	source = source.join(pd.Series(talib.CDLXSIDEGAP3METHODS(open, high, low, close), name='CDLXSIDEGAP3METHODS'))

	return source
Esempio n. 21
0
def TA(S, s, c):
    S = S.fillna(0)
    ope = numpy.asfarray(S.Open)
    high = numpy.asfarray(S.High)
    low = numpy.asfarray(S.Low)
    close = numpy.asfarray(S.Close)
    volume = numpy.asfarray(S.Volume)

    ##ROI calculation
    ROI = [(close[i + 1] - close[i]) / close[i] for i in range(len(close) - 1)]
    ROI.append(0)  #add zero value for last day
    d = pandas.DataFrame(ROI, index=S.index, columns=['ROI'])
    d.to_csv("C:\\Users\\...\\Documents\\Data_TA\\{0}\\ROI_{1}.csv".format(
        s, c))

    ##Baselines
    try:
        bah.append((S.Close['2013-04-30'] - S.Close['2002-05-01']) /
                   S.Close['2002-05-01'])
        sah.append((-S.Close['2013-04-30'] + S.Close['2002-05-01']) /
                   S.Close['2002-05-01'])
    except:
        bah.append((S.Close['2013-04-30'] - S.Close['2002-05-02']) /
                   S.Close['2002-05-02'])
        sah.append((-S.Close['2013-04-30'] + S.Close['2002-05-02']) /
                   S.Close['2002-05-02'])

    rp.append(
        numpy.dot(numpy.random.uniform(-1, 1, len(S)), numpy.asfarray(ROI)))

    ##talib application
    #overlap
    BBANDS = ta.BBANDS(close)
    DEMA = ta.DEMA(close)
    EMA = ta.EMA(close)
    HT_TRENDLINE = ta.HT_TRENDLINE(close)
    KAMA = ta.KAMA(close)
    MA = ta.MA(close)
    MAMA = ta.MAMA(close)
    MIDPOINT = ta.MIDPOINT(close)
    MIDPRICE = ta.MIDPRICE(high, low)
    SAR = ta.SAR(high, low)
    SAREXT = ta.SAREXT(high, low)
    SMA = ta.SMA(close)
    T3 = ta.T3(close)
    TEMA = ta.TEMA(close)
    TRIMA = ta.TRIMA(close)
    WMA = ta.WMA(close)
    #momentum
    ADX = ta.ADX(high, low, close)
    ADXR = ta.ADXR(high, low, close)
    APO = ta.APO(close)
    AROON = ta.AROON(high, low)
    AROONOSC = ta.AROONOSC(high, low)
    BOP = ta.BOP(ope, high, low, close)
    CCI = ta.CCI(high, low, close)
    CMO = ta.CMO(close)
    DX = ta.DX(high, low, close)
    MACD = ta.MACD(close)
    MACDEXT = ta.MACDEXT(close)
    MFI = ta.MFI(high, low, close, volume)
    MINUS_DI = ta.MINUS_DI(high, low, close)
    MINUS_DM = ta.MINUS_DM(high, low)
    MOM = ta.MOM(close)
    PLUS_DI = ta.PLUS_DI(high, low, close)
    PLUS_DM = ta.PLUS_DM(high, low)
    PPO = ta.PPO(close)
    ROC = ta.ROC(close)
    ROCP = ta.ROCP(close)
    ROCR = ta.ROCR(close)
    RSI = ta.RSI(close)
    STOCH = ta.STOCH(high, low, close)
    STOCHF = ta.STOCHF(high, low, close)
    STOCHRSI = ta.STOCHRSI(close)
    TRIX = ta.TRIX(close)
    ULTOSC = ta.ULTOSC(high, low, close)
    WILLR = ta.WILLR(high, low, close)
    #volume
    AD = ta.AD(high, low, close, volume)
    ADOSC = ta.ADOSC(high, low, close, volume)
    OBV = ta.OBV(close, volume)
    #cycle
    HT_DCPERIOD = ta.HT_DCPERIOD(close)
    HT_DCPHASE = ta.HT_DCPHASE(close)
    HT_PHASOR = ta.HT_PHASOR(close)
    HT_SINE = ta.HT_SINE(close)
    HT_TRENDMODE = ta.HT_TRENDMODE(close)
    #price
    AVGPRICE = ta.AVGPRICE(ope, high, low, close)
    MEDPRICE = ta.MEDPRICE(high, low)
    TYPPRICE = ta.TYPPRICE(high, low, close)
    WCLPRICE = ta.WCLPRICE(high, low, close)
    #volatility
    ATR = ta.ATR(high, low, close)
    NATR = ta.NATR(high, low, close)
    TRANGE = ta.TRANGE(high, low, close)
    #pattern
    CDL2CROWS = ta.CDL2CROWS(ope, high, low, close)
    CDL3BLACKCROWS = ta.CDL3BLACKCROWS(ope, high, low, close)
    CDL3INSIDE = ta.CDL3INSIDE(ope, high, low, close)
    CDL3LINESTRIKE = ta.CDL3LINESTRIKE(ope, high, low, close)
    CDL3OUTSIDE = ta.CDL3OUTSIDE(ope, high, low, close)
    CDL3STARSINSOUTH = ta.CDL3STARSINSOUTH(ope, high, low, close)
    CDL3WHITESOLDIERS = ta.CDL3WHITESOLDIERS(ope, high, low, close)
    CDLABANDONEDBABY = ta.CDLABANDONEDBABY(ope, high, low, close)
    CDLADVANCEBLOCK = ta.CDLADVANCEBLOCK(ope, high, low, close)
    CDLBELTHOLD = ta.CDLBELTHOLD(ope, high, low, close)
    CDLBREAKAWAY = ta.CDLBREAKAWAY(ope, high, low, close)
    CDLCLOSINGMARUBOZU = ta.CDLCLOSINGMARUBOZU(ope, high, low, close)
    CDLCONCEALBABYSWALL = ta.CDLCONCEALBABYSWALL(ope, high, low, close)
    CDLCOUNTERATTACK = ta.CDLCOUNTERATTACK(ope, high, low, close)
    CDLDARKCLOUDCOVER = ta.CDLDARKCLOUDCOVER(ope, high, low, close)
    CDLDOJI = ta.CDLDOJI(ope, high, low, close)
    CDLDOJISTAR = ta.CDLDOJISTAR(ope, high, low, close)
    CDLDRAGONFLYDOJI = ta.CDLDRAGONFLYDOJI(ope, high, low, close)
    CDLENGULFING = ta.CDLENGULFING(ope, high, low, close)
    CDLEVENINGDOJISTAR = ta.CDLEVENINGDOJISTAR(ope, high, low, close)
    CDLEVENINGSTAR = ta.CDLEVENINGSTAR(ope, high, low, close)
    CDLGAPSIDESIDEWHITE = ta.CDLGAPSIDESIDEWHITE(ope, high, low, close)
    CDLGRAVESTONEDOJI = ta.CDLGRAVESTONEDOJI(ope, high, low, close)
    CDLHAMMER = ta.CDLHAMMER(ope, high, low, close)
    CDLHANGINGMAN = ta.CDLHANGINGMAN(ope, high, low, close)
    CDLHARAMI = ta.CDLHARAMI(ope, high, low, close)
    CDLHARAMICROSS = ta.CDLHARAMICROSS(ope, high, low, close)
    CDLHIGHWAVE = ta.CDLHIGHWAVE(ope, high, low, close)
    CDLHIKKAKE = ta.CDLHIKKAKE(ope, high, low, close)
    CDLHIKKAKEMOD = ta.CDLHIKKAKEMOD(ope, high, low, close)
    CDLHOMINGPIGEON = ta.CDLHOMINGPIGEON(ope, high, low, close)
    CDLIDENTICAL3CROWS = ta.CDLIDENTICAL3CROWS(ope, high, low, close)
    CDLINNECK = ta.CDLINNECK(ope, high, low, close)
    CDLINVERTEDHAMMER = ta.CDLINVERTEDHAMMER(ope, high, low, close)
    CDLKICKING = ta.CDLKICKING(ope, high, low, close)
    CDLKICKINGBYLENGTH = ta.CDLKICKINGBYLENGTH(ope, high, low, close)
    CDLLADDERBOTTOM = ta.CDLLADDERBOTTOM(ope, high, low, close)
    CDLLONGLEGGEDDOJI = ta.CDLLONGLEGGEDDOJI(ope, high, low, close)
    CDLLONGLINE = ta.CDLLONGLINE(ope, high, low, close)
    CDLMARUBOZU = ta.CDLMARUBOZU(ope, high, low, close)
    CDLMATCHINGLOW = ta.CDLMATCHINGLOW(ope, high, low, close)
    CDLMATHOLD = ta.CDLMATHOLD(ope, high, low, close)
    CDLMORNINGDOJISTAR = ta.CDLMORNINGDOJISTAR(ope, high, low, close)
    CDLMORNINGSTAR = ta.CDLMORNINGSTAR(ope, high, low, close)
    CDLONNECK = ta.CDLONNECK(ope, high, low, close)
    CDLPIERCING = ta.CDLPIERCING(ope, high, low, close)
    CDLRICKSHAWMAN = ta.CDLRICKSHAWMAN(ope, high, low, close)
    CDLRISEFALL3METHODS = ta.CDLRISEFALL3METHODS(ope, high, low, close)
    CDLSEPARATINGLINES = ta.CDLSEPARATINGLINES(ope, high, low, close)
    CDLSHOOTINGSTAR = ta.CDLSHOOTINGSTAR(ope, high, low, close)
    CDLSHORTLINE = ta.CDLSHORTLINE(ope, high, low, close)
    CDLSPINNINGTOP = ta.CDLSPINNINGTOP(ope, high, low, close)
    CDLSTALLEDPATTERN = ta.CDLSTALLEDPATTERN(ope, high, low, close)
    CDLSTICKSANDWICH = ta.CDLSTICKSANDWICH(ope, high, low, close)
    CDLTAKURI = ta.CDLTAKURI(ope, high, low, close)
    CDLTASUKIGAP = ta.CDLTASUKIGAP(ope, high, low, close)
    CDLTHRUSTING = ta.CDLTHRUSTING(ope, high, low, close)
    CDLTRISTAR = ta.CDLTRISTAR(ope, high, low, close)
    CDLUNIQUE3RIVER = ta.CDLUNIQUE3RIVER(ope, high, low, close)
    CDLUPSIDEGAP2CROWS = ta.CDLUPSIDEGAP2CROWS(ope, high, low, close)
    CDLXSIDEGAP3METHODS = ta.CDLXSIDEGAP3METHODS(ope, high, low, close)

    f = numpy.column_stack(
        (ATR, NATR, TRANGE, HT_DCPERIOD, HT_DCPHASE, HT_PHASOR[0],
         HT_PHASOR[1], HT_SINE[0], HT_SINE[1], HT_TRENDMODE, AVGPRICE,
         MEDPRICE, TYPPRICE, WCLPRICE, ADX, ADXR, APO, AROON[0], AROON[1],
         AROONOSC, BOP, CCI, CMO, DX, MACD[0], MACD[1], MACD[2], MACDEXT[0],
         MACDEXT[1], MACDEXT[2], MFI, MINUS_DI, MINUS_DM, MOM, PLUS_DI,
         PLUS_DM, PPO, ROC, ROCP, ROCR, RSI, STOCH[0], STOCH[1], STOCHF[0],
         STOCHF[1], STOCHRSI[0], STOCHRSI[1], TRIX, ULTOSC, WILLR, CDL2CROWS,
         CDL3BLACKCROWS, CDL3INSIDE, CDL3LINESTRIKE, CDL3OUTSIDE,
         CDL3STARSINSOUTH, CDL3WHITESOLDIERS, CDLABANDONEDBABY,
         CDLADVANCEBLOCK, CDLBELTHOLD, CDLBREAKAWAY, CDLCLOSINGMARUBOZU,
         CDLCONCEALBABYSWALL, CDLCOUNTERATTACK, CDLDARKCLOUDCOVER, CDLDOJI,
         CDLDOJISTAR, CDLDRAGONFLYDOJI, CDLENGULFING, CDLEVENINGDOJISTAR,
         CDLEVENINGSTAR, CDLGAPSIDESIDEWHITE, CDLGRAVESTONEDOJI, CDLHAMMER,
         CDLHANGINGMAN, CDLHARAMI, CDLHARAMICROSS, CDLHIGHWAVE, CDLHIKKAKE,
         CDLHIKKAKEMOD, CDLHOMINGPIGEON, CDLIDENTICAL3CROWS, CDLINNECK,
         CDLINVERTEDHAMMER, CDLKICKING, CDLKICKINGBYLENGTH, CDLLADDERBOTTOM,
         CDLLONGLEGGEDDOJI, CDLLONGLINE, CDLMARUBOZU, CDLMATCHINGLOW,
         CDLMATHOLD, CDLMORNINGDOJISTAR, CDLMORNINGSTAR, CDLONNECK,
         CDLPIERCING, CDLRICKSHAWMAN, CDLRISEFALL3METHODS, CDLSEPARATINGLINES,
         CDLSHOOTINGSTAR, CDLSHORTLINE, CDLSPINNINGTOP, CDLSTALLEDPATTERN,
         CDLSTICKSANDWICH, CDLTAKURI, CDLTASUKIGAP, CDLTHRUSTING, CDLTRISTAR,
         CDLUNIQUE3RIVER, CDLUPSIDEGAP2CROWS, CDLXSIDEGAP3METHODS, BBANDS[0],
         BBANDS[1], BBANDS[2], DEMA, EMA, HT_TRENDLINE, KAMA, MA, MAMA[0],
         MAMA[1], MIDPOINT, MIDPRICE, SAR, SAREXT, SMA, T3, TEMA, TRIMA, WMA,
         AD, ADOSC, OBV))

    h = numpy.apply_along_axis(nor, 0, f)  # normalize columnwise

    df = pandas.DataFrame(
        h,
        index=S.index,
        columns=[
            'ATR', 'NATR', 'TRANGE', 'HT_DCPERIOD', 'HT_DCPHASE',
            'HT_PHASOR[0]', 'HT_PHASOR[1]', 'HT_SINE[0]', 'HT_SINE[1]',
            'HT_TRENDMODE', 'AVGPRICE', 'MEDPRICE', 'TYPPRICE', 'WCLPRICE',
            'ADX', 'ADXR', 'APO', 'AROON[0]', 'AROON[1]', 'AROONOSC', 'BOP',
            'CCI', 'CMO', 'DX', 'MACD[0]', 'MACD[1]', 'MACD[2]', 'MACDEXT[0]',
            'MACDEXT[1]', 'MACDEXT[2]', 'MFI', 'MINUS_DI', 'MINUS_DM', 'MOM',
            'PLUS_DI', 'PLUS_DM', 'PPO', 'ROC', 'ROCP', 'ROCR', 'RSI',
            'STOCH[0]', 'STOCH[1]', 'STOCHF[0]', 'STOCHF[1]', 'STOCHRSI[0]',
            'STOCHRSI[1]', 'TRIX', 'ULTOSC', 'WILLR', 'CDL2CROWS',
            'CDL3BLACKCROWS', 'CDL3INSIDE', 'CDL3LINESTRIKE', 'CDL3OUTSIDE',
            'CDL3STARSINSOUTH', 'CDL3WHITESOLDIERS', 'CDLABANDONEDBABY',
            'CDLADVANCEBLOCK', 'CDLBELTHOLD', 'CDLBREAKAWAY',
            'CDLCLOSINGMARUBOZU', 'CDLCONCEALBABYSWALL', 'CDLCOUNTERATTACK',
            'CDLDARKCLOUDCOVER', 'CDLDOJI', 'CDLDOJISTAR', 'CDLDRAGONFLYDOJI',
            'CDLENGULFING', 'CDLEVENINGDOJISTAR', 'CDLEVENINGSTAR',
            'CDLGAPSIDESIDEWHITE', 'CDLGRAVESTONEDOJI', 'CDLHAMMER',
            'CDLHANGINGMAN', 'CDLHARAMI', 'CDLHARAMICROSS', 'CDLHIGHWAVE',
            'CDLHIKKAKE', 'CDLHIKKAKEMOD', 'CDLHOMINGPIGEON',
            'CDLIDENTICAL3CROWS', 'CDLINNECK', 'CDLINVERTEDHAMMER',
            'CDLKICKING', 'CDLKICKINGBYLENGTH', 'CDLLADDERBOTTOM',
            'CDLLONGLEGGEDDOJI', 'CDLLONGLINE', 'CDLMARUBOZU',
            'CDLMATCHINGLOW', 'CDLMATHOLD', 'CDLMORNINGDOJISTAR',
            'CDLMORNINGSTAR', 'CDLONNECK', 'CDLPIERCING', 'CDLRICKSHAWMAN',
            'CDLRISEFALL3METHODS', 'CDLSEPARATINGLINES', 'CDLSHOOTINGSTAR',
            'CDLSHORTLINE', 'CDLSPINNINGTOP', 'CDLSTALLEDPATTERN',
            'CDLSTICKSANDWICH', 'CDLTAKURI', 'CDLTASUKIGAP', 'CDLTHRUSTING',
            'CDLTRISTAR', 'CDLUNIQUE3RIVER', 'CDLUPSIDEGAP2CROWS',
            'CDLXSIDEGAP3METHODS', 'BBANDS[0]', 'BBANDS[1]', 'BBANDS[2]',
            'DEMA', 'EMA', 'HT_TRENDLINE', 'KAMA', 'MA', 'MAMA[0]', 'MAMA[1]',
            'MIDPOINT', 'MIDPRICE', 'SAR', 'SAREXT', 'SMA', 'T3', 'TEMA',
            'TRIMA', 'WMA', 'AD', 'ADOSC', 'OBV'
        ])
    df.to_csv("C:\\Users\\...\\Documents\\Data_TA\\{0}\\{1}.csv".format(s, c))
Esempio n. 22
0
 def candlestickmethod(self, dataframe):
     return np.argwhere(
         np.array(
             talib.CDLDOJI(dataframe['open'], dataframe['high'], dataframe['low'], dataframe['close'])
         )
     ).squeeze()
Esempio n. 23
0
                                           ohlc_df['high'],
                                           ohlc_df['low'],
                                           ohlc_df['close'])
 ohlc_df['CDLCLOSINGMARUBOZU'] = ta.CDLCLOSINGMARUBOZU(
     ohlc_df['open'], ohlc_df['high'], ohlc_df['low'],
     ohlc_df['close'])
 ohlc_df['CDLCONCEALBABYSWALL'] = ta.CDLCONCEALBABYSWALL(
     ohlc_df['open'], ohlc_df['high'], ohlc_df['low'],
     ohlc_df['close'])
 ohlc_df['CDLCOUNTERATTACK'] = ta.CDLCOUNTERATTACK(
     ohlc_df['open'], ohlc_df['high'], ohlc_df['low'],
     ohlc_df['close'])
 ohlc_df['CDLDARKCLOUDCOVER'] = ta.CDLDARKCLOUDCOVER(
     ohlc_df['open'], ohlc_df['high'], ohlc_df['low'],
     ohlc_df['close'])
 ohlc_df['CDLDOJI'] = ta.CDLDOJI(ohlc_df['open'], ohlc_df['high'],
                                 ohlc_df['low'], ohlc_df['close'])
 ohlc_df['CDLDOJISTAR'] = ta.CDLDOJISTAR(ohlc_df['open'],
                                         ohlc_df['high'],
                                         ohlc_df['low'],
                                         ohlc_df['close'])
 ohlc_df['CDLDRAGONFLYDOJI'] = ta.CDLDRAGONFLYDOJI(
     ohlc_df['open'], ohlc_df['high'], ohlc_df['low'],
     ohlc_df['close'])
 ohlc_df['CDLENGULFING'] = ta.CDLENGULFING(ohlc_df['open'],
                                           ohlc_df['high'],
                                           ohlc_df['low'],
                                           ohlc_df['close'])
 ohlc_df['CDLEVENINGDOJISTAR'] = ta.CDLEVENINGDOJISTAR(
     ohlc_df['open'], ohlc_df['high'], ohlc_df['low'],
     ohlc_df['close'])
 ohlc_df['CDLEVENINGSTAR'] = ta.CDLEVENINGSTAR(
Esempio n. 24
0
 def CDLDOJI(self, name, **parameters):
     data = self.__data[name]
     return talib.CDLDOJI(data, **parameters)
Esempio n. 25
0
def enhance_with_indicators(data):
    set = []

    OPEN = data[:, Candle.OPEN]
    HIGH = data[:, Candle.HIGH]
    LOW = data[:, Candle.LOW]
    CLOSE = data[:, Candle.CLOSE]
    VOLUME = data[:, Candle.VOLUME]

    low_high = talib.BBANDS(CLOSE,
                            timeperiod=14,
                            nbdevup=2,
                            nbdevdn=2,
                            matype=1)
    low_high = np.asarray([low_high[0][-1], low_high[2][-1]]).reshape(-1, 1)
    low_high_scaler = StandardScaler()
    low_high_scaler.fit(low_high)

    one = np.asarray([-1, 1]).reshape(-1, 1)
    one_scaler = StandardScaler()
    one_scaler.fit(one)

    hundred = np.asarray([-100, 100]).reshape(-1, 1)
    hundred_scaler = StandardScaler()
    hundred_scaler.fit(hundred)

    thousand = np.asarray([-1000, 1000]).reshape(-1, 1)
    thousand_scaler = StandardScaler()
    thousand_scaler.fit(thousand)

    million = np.asarray([-1000000, 1000000]).reshape(-1, 1)
    million_scaler = StandardScaler()
    million_scaler.fit(million)

    set.append(scale(OPEN, low_high_scaler))
    set.append(scale(HIGH, low_high_scaler))
    set.append(scale(LOW, low_high_scaler))
    set.append(scale(CLOSE, low_high_scaler))
    #Bollinger Bands are envelopes plotted at a standard deviation level above and below a simple moving average of the price.
    set.append(
        scale(
            talib.BBANDS(CLOSE, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0),
            low_high_scaler))  #121.03399999999903 19719.281591268886
    set.append(
        scale(
            talib.BBANDS(CLOSE, timeperiod=14, nbdevup=2, nbdevdn=2, matype=1),
            low_high_scaler))
    #The DEMA uses two exponential moving averages (EMAs) to eliminate lag, as some traders view lag as a problem.
    set.append(scale(talib.DEMA(CLOSE, timeperiod=10),
                     low_high_scaler))  #122.0 19573.564771355504
    set.append(scale(talib.DEMA(CLOSE, timeperiod=21),
                     low_high_scaler))  #122.0 19546.76082510694
    set.append(scale(talib.DEMA(CLOSE, timeperiod=100),
                     low_high_scaler))  #123.84710711425136 19578.715808186673
    #However, whereas SMA simply calculates an average of price data, EMA applies more weight to data that is more current.
    set.append(scale(talib.EMA(CLOSE, timeperiod=10),
                     low_high_scaler))  #122.0 19499.362560116417
    set.append(scale(talib.EMA(CLOSE, timeperiod=21),
                     low_high_scaler))  #122.0 19433.26416788178
    set.append(scale(talib.EMA(CLOSE, timeperiod=100),
                     low_high_scaler))  #122.11270000000005 19059.124645340504
    #The HTTrendline at a specific bar gives the current Hilbert Transform Trendline as instantaneously measured at that
    #bar. In its Series form, the Instantaneous Trendline appears much like a Moving Average, but with minimal lag
    #compared with the lag normally associated with such averages for equivalent periods.
    set.append(scale(talib.HT_TRENDLINE(CLOSE),
                     low_high_scaler))  #122.0 19471.324
    #Kaufman's Adaptive Moving Average (KAMA) is a moving average designed to account for market noise or volatility.
    #KAMA will closely follow prices when the price swings are relatively small and the noise is low.
    set.append(scale(talib.KAMA(CLOSE, timeperiod=10),
                     low_high_scaler))  #122.0 19397.611724437047
    set.append(scale(talib.KAMA(CLOSE, timeperiod=21),
                     low_high_scaler))  #122.0 19336.434082122203
    set.append(scale(talib.KAMA(CLOSE, timeperiod=100),
                     low_high_scaler))  #123.61 19301.746826077375
    #The MESA adaptive moving average is a trend-following indicator. It adapts to price movements in a very unique way,
    #based on the rate of change (ROC), as measured by the Hilbert Transform Discriminator.
    set.append(
        scale(talib.MAMA((HIGH + LOW) / 2., fastlimit=0.5, slowlimit=0.05),
              low_high_scaler))  #121.04112572694972 19494.294994956996
    set.append(scale(talib.MIDPOINT(CLOSE, timeperiod=5),
                     low_high_scaler))  #122.0 19544.95
    set.append(scale(talib.MIDPRICE(LOW, HIGH, timeperiod=5),
                     low_high_scaler))  #122.0 19562.6
    #The parabolic SAR indicator, developed by J. Welles Wilder Jr., is used by traders to determine trend direction
    # and potential reversals in price.
    set.append(
        scale(talib.SAR(HIGH, LOW, acceleration=0.02, maximum=0.2),
              low_high_scaler))  #122.0 19660.0
    #A simple moving average (SMA) is an arithmetic moving average calculated by adding recent prices and then dividing
    # that figure by the number of time periods in the calculation average.
    set.append(scale(talib.SMA(CLOSE, timeperiod=5),
                     low_high_scaler))  #122.0 19553.340000000037
    set.append(scale(talib.SMA(CLOSE, timeperiod=25),
                     low_high_scaler))  #122.0 19405.74400000004
    set.append(scale(talib.SMA(CLOSE, timeperiod=50),
                     low_high_scaler))  #122.0 19286.443999999996
    #The Triple Exponential Moving Average (T3) developed by Tim Tillson attempts to offer a moving average with better
    #smoothing then traditional exponential moving average. It incorporates a smoothing technique which allows it to
    #plot curves more gradual than ordinary moving averages and with a smaller lag.
    set.append(scale(talib.T3(CLOSE, timeperiod=5, vfactor=0),
                     low_high_scaler))  #122.0 19498.31237177043
    set.append(
        scale(talib.T3(CLOSE, timeperiod=10, vfactor=0),
              low_high_scaler))  #122.0 19419.991324685387
    set.append(
        scale(talib.T3(CLOSE, timeperiod=21, vfactor=0),
              low_high_scaler))  #122.84310194419339 19306.63501695168
    #The triple exponential moving average was designed to smooth price fluctuations, thereby making it easier to
    #identify trends without the lag associated with traditional moving averages (MA).
    set.append(scale(talib.TEMA(CLOSE, timeperiod=7),
                     low_high_scaler))  #122.0 19617.222402494965
    set.append(scale(talib.TEMA(CLOSE, timeperiod=15),
                     low_high_scaler))  #122.0 19586.42515855386
    #The Triangular Moving Average is basically a double-smoothed Simple Moving Average that gives more weight to the
    #middle section of the data interval. The TMA has a significant lag to current prices and is not well-suited to
    #fast moving markets.
    set.append(scale(talib.TRIMA(CLOSE, timeperiod=5),
                     low_high_scaler))  #122.0 19567.31111092877
    set.append(scale(talib.TRIMA(CLOSE, timeperiod=25),
                     low_high_scaler))  #122.0 19459.8816568341
    set.append(scale(talib.TRIMA(CLOSE, timeperiod=50),
                     low_high_scaler))  #122.0 19359.257076923175
    #The weighted moving average (WMA) is a technical indicator that assigns a greater weighting to the most recent data
    #points, and less weighting to data points in the distant past. The WMA is obtained by multiplying each number in
    #the data set by a predetermined weight and summing up the resulting values.
    set.append(scale(talib.WMA(CLOSE, timeperiod=5),
                     low_high_scaler))  #122.0 19567.840000466134
    set.append(scale(talib.WMA(CLOSE, timeperiod=10),
                     low_high_scaler))  #122.0 19527.127272724356
    set.append(scale(talib.WMA(CLOSE, timeperiod=21),
                     low_high_scaler))  #122.0 19479.342424127473
    set.append(scale(talib.WMA(CLOSE, timeperiod=50),
                     low_high_scaler))  #122.0 19355.600000135404
    set.append(scale(talib.WMA(CLOSE, timeperiod=100),
                     low_high_scaler))  #122.21647326732675 19265.66566335264
    set.append(scale(talib.LINEARREG(CLOSE, timeperiod=14),
                     low_high_scaler))  # 122.0 19585.157142857144
    set.append(
        scale(talib.LINEARREG_INTERCEPT(CLOSE, timeperiod=14),
              low_high_scaler))  #121.54000000000003 19643.968571428577
    set.append(scale(talib.TSF(CLOSE, timeperiod=14),
                     low_high_scaler))  #122.0 19609.668131868133

    #ADX stands for Average Directional Movement Index and can be used to help measure the overall strength of a trend.
    #The ADX indicator is an average of expanding price range values.
    set.append(
        scale(talib.ADX(HIGH, LOW, CLOSE, timeperiod=10),
              hundred_scaler))  #0.0 99.99999999999963
    set.append(
        scale(talib.ADX(HIGH, LOW, CLOSE, timeperiod=14),
              hundred_scaler))  #0.0 99.9999999940751
    set.append(
        scale(talib.ADX(HIGH, LOW, CLOSE, timeperiod=21),
              hundred_scaler))  #0.0 99.99998408446837
    #ADXR stands for Average Directional Movement Index Rating. ADXR is a component of the Directional Movement System
    #developed by Welles Wilder.
    set.append(
        scale(talib.ADXR(HIGH, LOW, CLOSE, timeperiod=14),
              hundred_scaler))  #0.0 99.9999999892742
    #The Aroon indicator is a technical indicator that is used to identify trend changes in the price of an asset,
    #as well as the strength of that trend. In essence, the indicator measures the time between highs and the time
    #between lows over a time period. ... The indicator signals when this is happening, and when it isn't
    set.append(scale(talib.AROON(HIGH, LOW), hundred_scaler))  #0.0 100.0
    #The Directional Movement Index, or DMI, is an indicator developed by J. ... An optional third line, called
    #directional movement (DX) shows the difference between the lines. When +DI is above -DI, there is more upward
    #pressure than downward pressure in the price.
    set.append(scale(talib.DX(HIGH, LOW, CLOSE, timeperiod=5),
                     hundred_scaler))  #0.0 100.0
    set.append(scale(talib.DX(HIGH, LOW, CLOSE, timeperiod=21),
                     hundred_scaler))  #0.0 100.0
    set.append(scale(talib.DX(HIGH, LOW, CLOSE, timeperiod=50),
                     hundred_scaler))  #0.0 100.0
    set.append(
        scale(talib.MFI(HIGH, LOW, CLOSE, VOLUME, timeperiod=14),
              hundred_scaler))  #-5.888410733172162e-08 100.00000000707982
    set.append(
        scale(talib.MFI(HIGH, LOW, CLOSE, VOLUME, timeperiod=26),
              hundred_scaler))  #-1.3802451942902055e-09 100.00000001185656
    set.append(
        scale(talib.MFI(HIGH, LOW, CLOSE, VOLUME, timeperiod=100),
              hundred_scaler))  #-5.3901183535126315e-08 100.00000000091877
    set.append(
        scale(talib.MINUS_DI(HIGH, LOW, CLOSE, timeperiod=14),
              hundred_scaler))  #0.0 99.99999996020233
    set.append(
        scale(talib.PLUS_DI(HIGH, LOW, CLOSE, timeperiod=14),
              hundred_scaler))  #0.0 100.0
    set.append(scale(talib.RSI(CLOSE, timeperiod=14),
                     hundred_scaler))  #0.0 100.0
    set.append(
        scale(
            talib.STOCH(HIGH,
                        LOW,
                        CLOSE,
                        fastk_period=5,
                        slowk_period=3,
                        slowk_matype=0,
                        slowd_period=3,
                        slowd_matype=0),
            hundred_scaler))  #-1.0137076363510762e-12 100.00000000000279
    set.append(
        scale(
            talib.STOCHF(HIGH,
                         LOW,
                         CLOSE,
                         fastk_period=5,
                         fastd_period=3,
                         fastd_matype=0),
            hundred_scaler))  #-1.0137076363510762e-12 100.0000000000012
    set.append(
        scale(
            talib.STOCHRSI(CLOSE,
                           timeperiod=14,
                           fastk_period=5,
                           fastd_period=3,
                           fastd_matype=0),
            hundred_scaler))  #-1.2166564052525548e-12 100.00000000000011
    set.append(
        scale(
            talib.ULTOSC(HIGH,
                         LOW,
                         CLOSE,
                         timeperiod1=7,
                         timeperiod2=14,
                         timeperiod3=28),
            hundred_scaler))  # 0.0 100.00000032481957
    set.append(
        scale(talib.CDL3WHITESOLDIERS(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #0 100
    set.append(scale(talib.CDLDOJI(OPEN, HIGH, LOW, CLOSE),
                     hundred_scaler))  #0 100
    set.append(
        scale(talib.CDLDRAGONFLYDOJI(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #0 100
    set.append(
        scale(talib.CDLGRAVESTONEDOJI(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #0 100
    set.append(scale(talib.CDLHAMMER(OPEN, HIGH, LOW, CLOSE),
                     hundred_scaler))  #0 100
    set.append(
        scale(talib.CDLHOMINGPIGEON(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #0 100
    set.append(
        scale(talib.CDLINVERTEDHAMMER(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #0 100
    set.append(
        scale(talib.CDLLADDERBOTTOM(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #0 100
    set.append(
        scale(talib.CDLLONGLEGGEDDOJI(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #0 100
    set.append(
        scale(talib.CDLMATCHINGLOW(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #0 100
    set.append(
        scale(talib.CDLMORNINGDOJISTAR(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #0 100
    set.append(
        scale(talib.CDLMORNINGSTAR(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #0 100
    set.append(scale(talib.CDLPIERCING(OPEN, HIGH, LOW, CLOSE),
                     hundred_scaler))  #0 100
    set.append(
        scale(talib.CDLRICKSHAWMAN(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #0 100
    set.append(
        scale(talib.CDLSTICKSANDWICH(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #0 100
    set.append(scale(talib.CDLTAKURI(OPEN, HIGH, LOW, CLOSE),
                     hundred_scaler))  #0 100
    set.append(
        scale(talib.CDLUNIQUE3RIVER(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #0 100

    #Absolute Price Oscillator crossing above zero is considered bullish, while crossing below zero is bearish. A
    #positive indicator value indicates an upward movement, while negative readings signal a downward trend.
    set.append(
        scale(talib.APO(CLOSE, fastperiod=12, slowperiod=26, matype=1),
              thousand_scaler))  #-536.1910463572985 443.13971636041424
    set.append(scale(VOLUME, thousand_scaler))
    #The Commodity Channel Index (CCI) measures the current price level relative to an average price level over a given
    #period of time. CCI is relatively high when prices are far above their average.
    set.append(scale(talib.CCI(HIGH, LOW, CLOSE),
                     thousand_scaler))  #-466.66671166042244 466.66673951370416
    #Moving average convergence divergence (MACD) is a trend-following momentum indicator that shows the relationship
    #between two moving averages of a security’s price.
    set.append(
        scale(talib.MACD(CLOSE, fastperiod=5, slowperiod=14, signalperiod=5),
              thousand_scaler))  # -536.1910463572985 443.13971636041424
    set.append(
        scale(talib.MACD(CLOSE, fastperiod=12, slowperiod=26, signalperiod=9),
              thousand_scaler))  #-536.1910463572985 443.13971636041424
    set.append(
        scale(talib.MACD(CLOSE, fastperiod=14, slowperiod=50, signalperiod=25),
              thousand_scaler))  # -536.1910463572985 443.13971636041424
    set.append(scale(talib.ATR(HIGH, LOW, CLOSE),
                     thousand_scaler))  #0.0 672.1715311610562
    set.append(scale(talib.HT_DCPHASE(CLOSE),
                     hundred_scaler))  #-44.99298332517037 314.99654478107004
    set.append(
        scale(talib.LINEARREG_SLOPE(CLOSE, timeperiod=14),
              hundred_scaler))  #-222.33604395604476 152.37032967033085
    set.append(
        scale(talib.STDDEV(CLOSE, timeperiod=5, nbdev=1),
              thousand_scaler))  #0.0 709.4023698851089

    set.append(scale(talib.MINUS_DM(HIGH, LOW, timeperiod=14),
                     thousand_scaler))  #0.0 2909.3760999618785
    set.append(scale(talib.MOM(CLOSE, timeperiod=10),
                     thousand_scaler))  #-2508.0 1711.2000000000007
    set.append(scale(talib.MOM(CLOSE, timeperiod=25),
                     thousand_scaler))  # -2508.0 1711.2000000000007
    set.append(scale(talib.PLUS_DM(HIGH, LOW, timeperiod=14),
                     thousand_scaler))  #0.0 3697.0008310558483
    set.append(scale(talib.ADOSC(HIGH, LOW, CLOSE, VOLUME),
                     thousand_scaler))  #-1843.4418435977714 1237.4131984846026
    set.append(scale(talib.TRANGE(HIGH, LOW, CLOSE),
                     thousand_scaler))  #0.0 4000.0
    set.append(scale(talib.HT_PHASOR(CLOSE),
                     thousand_scaler))  #-2873.977625168652 3422.2535328187428

    #The Balance of Power indicator measures the market strength of buyers against sellers by assessing the ability of
    #each side to drive prices to an extreme level. The calculation is: Balance of Power = (Close price – Open price) /
    #(High price – Low price) The resulting value can be smoothed by a moving average.
    set.append(scale(talib.BOP(OPEN, HIGH, LOW, CLOSE), one_scaler))  #-1.0 1.0
    set.append(scale(talib.ROCP(CLOSE, timeperiod=10),
                     one_scaler))  #-0.30688987999999995 0.46745909457773854
    set.append(scale(talib.ROCR(CLOSE, timeperiod=10),
                     one_scaler))  #0.69311012 1.4674590945777386
    set.append(scale(talib.TRIX(CLOSE, timeperiod=30),
                     one_scaler))  #-0.6044429731575707 0.434667877456385
    set.append(scale(talib.HT_SINE(CLOSE),
                     one_scaler))  #-0.9999999999996187 0.9999999999940317
    set.append(scale(talib.HT_TRENDMODE(CLOSE), one_scaler))  #0 1

    set.append(
        scale(talib.PPO(CLOSE, fastperiod=12, slowperiod=26, matype=0),
              hundred_scaler))  #-13.640389725420714 13.383459677599681
    set.append(scale(talib.ROC(CLOSE, timeperiod=10),
                     hundred_scaler))  #-30.688987999999995 46.74590945777386
    set.append(scale(talib.NATR(HIGH, LOW, CLOSE),
                     one_scaler))  #0.0 7.881777549670427
    set.append(scale(talib.HT_DCPERIOD(CLOSE),
                     hundred_scaler))  #6.91050087362864 49.99951053223339
    set.append(scale(talib.CORREL(HIGH, LOW, timeperiod=30),
                     one_scaler))  #-2.4748737341529163 2.2135943621178655

    set.append(scale(talib.AD(HIGH, LOW, CLOSE, VOLUME),
                     million_scaler))  #-3719.2404462314116 199644.25743563366
    set.append(scale(talib.OBV(CLOSE, VOLUME),
                     million_scaler))  #-23849.75116020021 29139.83770172981
    set.append(scale(talib.BETA(HIGH, LOW, timeperiod=5),
                     million_scaler))  #-2971957.111723269 1250567.1172035346
    set.append(
        scale(talib.VAR(CLOSE, timeperiod=5, nbdev=1),
              million_scaler))  #-1.4901161193847656e-07 503251.7223986089

    # The Aroon Oscillator is a trend-following indicator that uses aspects of the Aroon Indicator (Aroon Up and Aroon
    # Down) to gauge the strength of a current trend and the likelihood that it will continue. Readings above zero
    # indicate that an uptrend is present, while readings below zero indicate that a downtrend is present.
    set.append(scale(talib.AROONOSC(HIGH, LOW),
                     hundred_scaler))  # -100.0 100.0
    # The Chande Momentum Oscillator (CMO) is a technical momentum indicator developed by Tushar Chande. The CMO
    # indicator is created by calculating the difference between the sum of all recent higher closes and the sum of all
    # recent lower closes and then dividing the result by the sum of all price movement over a given time period.
    set.append(scale(talib.CMO(CLOSE, timeperiod=5),
                     hundred_scaler))  # -100.0 100.0
    set.append(scale(talib.CMO(CLOSE, timeperiod=14),
                     hundred_scaler))  # -99.99999998652726 100.0
    set.append(scale(talib.CMO(CLOSE, timeperiod=25),
                     hundred_scaler))  # -99.99854211548185 100.0
    set.append(scale(talib.CDL3INSIDE(OPEN, HIGH, LOW, CLOSE),
                     hundred_scaler))  #-100 100
    set.append(
        scale(talib.CDL3LINESTRIKE(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 100
    set.append(scale(talib.CDL3OUTSIDE(OPEN, HIGH, LOW, CLOSE),
                     hundred_scaler))  #-100 100
    set.append(
        scale(talib.CDLABANDONEDBABY(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 100
    set.append(scale(talib.CDLBELTHOLD(OPEN, HIGH, LOW, CLOSE),
                     hundred_scaler))  #-100 100
    set.append(
        scale(talib.CDLBREAKAWAY(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 100
    set.append(
        scale(talib.CDLCLOSINGMARUBOZU(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 100
    set.append(
        scale(talib.CDLCOUNTERATTACK(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 100
    set.append(scale(talib.CDLDOJISTAR(OPEN, HIGH, LOW, CLOSE),
                     hundred_scaler))  #-100 100
    set.append(
        scale(talib.CDLENGULFING(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 100
    set.append(
        scale(talib.CDLGAPSIDESIDEWHITE(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 100
    set.append(scale(talib.CDLHARAMI(OPEN, HIGH, LOW, CLOSE),
                     hundred_scaler))  #-100 100
    set.append(
        scale(talib.CDLHARAMICROSS(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 100
    set.append(scale(talib.CDLHIGHWAVE(OPEN, HIGH, LOW, CLOSE),
                     hundred_scaler))  #-100 100
    set.append(scale(talib.CDLKICKING(OPEN, HIGH, LOW, CLOSE),
                     hundred_scaler))  #-100 100
    set.append(
        scale(talib.CDLKICKINGBYLENGTH(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 100
    set.append(scale(talib.CDLLONGLINE(OPEN, HIGH, LOW, CLOSE),
                     hundred_scaler))  #-100 100
    set.append(scale(talib.CDLMARUBOZU(OPEN, HIGH, LOW, CLOSE),
                     hundred_scaler))  #-100 100
    set.append(
        scale(talib.CDLRISEFALL3METHODS(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 100
    set.append(
        scale(talib.CDLSEPARATINGLINES(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 100
    set.append(
        scale(talib.CDLSHORTLINE(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 100
    set.append(
        scale(talib.CDLSPINNINGTOP(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 100
    set.append(
        scale(talib.CDLTASUKIGAP(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 100
    set.append(scale(talib.CDLTRISTAR(OPEN, HIGH, LOW, CLOSE),
                     hundred_scaler))  #-100 100
    set.append(
        scale(talib.CDLXSIDEGAP3METHODS(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 100
    set.append(
        scale(talib.LINEARREG_ANGLE(CLOSE, timeperiod=14),
              hundred_scaler))  #-89.74230272272693 89.62397563202859

    set.append(
        scale(talib.WILLR(HIGH, LOW, CLOSE, timeperiod=14),
              hundred_scaler))  # -100.00000000000001 0.0
    #The Two Crows is a three-line bearish reversal candlestick pattern. The pattern requires confirmation, that is,
    #the following candles should break a trendline or the nearest support area which may be formed by the first
    #candle's line. If the pattern is not confirmed it may act only as a temporary pause within an uptrend.
    set.append(scale(talib.CDL2CROWS(OPEN, HIGH, LOW, CLOSE),
                     hundred_scaler))  #-100 0
    set.append(
        scale(talib.CDL3BLACKCROWS(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 0
    set.append(
        scale(talib.CDLADVANCEBLOCK(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  # -100 0
    set.append(
        scale(talib.CDLDARKCLOUDCOVER(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 0
    set.append(
        scale(talib.CDLEVENINGDOJISTAR(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 0
    set.append(
        scale(talib.CDLEVENINGSTAR(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 0
    set.append(
        scale(talib.CDLHANGINGMAN(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 0
    set.append(
        scale(talib.CDLIDENTICAL3CROWS(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 0
    set.append(scale(talib.CDLINNECK(OPEN, HIGH, LOW, CLOSE),
                     hundred_scaler))  #-100 0
    set.append(scale(talib.CDLONNECK(OPEN, HIGH, LOW, CLOSE),
                     hundred_scaler))  #-100 0
    set.append(
        scale(talib.CDLSHOOTINGSTAR(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 0
    set.append(
        scale(talib.CDLSTALLEDPATTERN(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 0
    set.append(
        scale(talib.CDLTHRUSTING(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-100 0

    set.append(scale(talib.CDLHIKKAKE(OPEN, HIGH, LOW, CLOSE),
                     hundred_scaler))  #-200 200
    set.append(
        scale(talib.CDLHIKKAKEMOD(OPEN, HIGH, LOW, CLOSE),
              hundred_scaler))  #-200 200

    return np.concatenate(set)
Esempio n. 26
0
 def __generate_technical_indicators(self, close_values, high_values, low_values, open_values,
                                     volume_values):
     features = pd.DataFrame()
     features['short_sma'] = talib.SMA(close_values, 5)
     features['long_sma'] = talib.SMA(close_values, 20)
     features['sma_diff'] = features.long_sma - features.short_sma
     features['stochf0'] = talib.STOCHF(high=high_values, low=low_values, close=close_values)[0]
     features['stochf1'] = talib.STOCHF(high=high_values, low=low_values, close=close_values)[1]
     features['rsi'] = talib.RSI(close_values, 20)
     features['ad'] = talib.AD(high=high_values, low=low_values, close=close_values, volume=volume_values)
     features['dema'] = talib.DEMA(close_values)
     features['ema'] = talib.EMA(close_values)
     features['ht_trendiline'] = talib.HT_TRENDLINE(close_values)
     features['kama'] = talib.KAMA(close_values)
     features['midpoint'] = talib.MIDPOINT(close_values)
     features['midprice'] = talib.MIDPRICE(high=high_values, low=low_values)
     features['sar'] = talib.SAR(high=high_values, low=low_values)
     features['sarext'] = talib.SAREXT(high=high_values, low=low_values)
     features['adx'] = talib.ADX(high=high_values, low=low_values, close=close_values)
     features['adxr'] = talib.ADXR(high=high_values, low=low_values, close=close_values)
     features['apo'] = talib.APO(close_values)
     features['aroon0'] = talib.AROON(high=high_values, low=low_values)[0]
     features['aroon1'] = talib.AROON(high=high_values, low=low_values)[1]
     features['aroonosc'] = talib.AROONOSC(high=high_values, low=low_values)
     features['bop'] = talib.BOP(open=open_values, high=high_values, low=low_values, close=close_values)
     features['cmo'] = talib.CMO(close_values)
     features['dx'] = talib.DX(high=high_values, low=low_values, close=close_values)
     features['macdfix0'] = talib.MACDFIX(close_values)[0]
     features['macdfix1'] = talib.MACDFIX(close_values)[1]
     features['macdfix2'] = talib.MACDFIX(close_values)[2]
     features['mfi'] = talib.MFI(high=high_values, low=low_values, close=close_values, volume=volume_values)
     features['minus_di'] = talib.MINUS_DI(high=high_values, low=low_values, close=close_values)
     features['minus_dm'] = talib.MINUS_DM(high=high_values, low=low_values)
     features['mom'] = talib.MOM(close_values)
     features['plus_di'] = talib.PLUS_DI(high=high_values, low=low_values, close=close_values)
     features['plus_dm'] = talib.PLUS_DM(high=high_values, low=low_values)
     features['ppo'] = talib.PPO(close_values)
     features['roc'] = talib.ROC(close_values)
     features['stochf0'] = talib.STOCHF(high=high_values, low=low_values, close=close_values)[0]
     features['stochf1'] = talib.STOCHF(high=high_values, low=low_values, close=close_values)[1]
     features['stochrsi0'] = talib.STOCHRSI(close_values)[0]
     features['stochrsi1'] = talib.STOCHRSI(close_values)[1]
     # data_set['trix'] = talib.TRIX(close_values)
     features['ultosc'] = talib.ULTOSC(high=high_values, low=low_values, close=close_values)
     features['willr'] = talib.WILLR(high=high_values, low=low_values, close=close_values)
     features['adosc'] = talib.ADOSC(high=high_values, low=low_values, close=close_values, volume=volume_values)
     features['obv'] = talib.OBV(close_values, volume_values)
     features['ht_dcperiod'] = talib.HT_DCPERIOD(close_values)
     features['ht_dcphase'] = talib.HT_DCPHASE(close_values)
     features['ht_phasor0'] = talib.HT_PHASOR(close_values)[0]
     features['ht_phasor1'] = talib.HT_PHASOR(close_values)[1]
     features['ht_sine0'] = talib.HT_SINE(close_values)[0]
     features['ht_sine1'] = talib.HT_SINE(close_values)[1]
     features['ht_trendmode'] = talib.HT_TRENDMODE(close_values)
     features['atr'] = talib.ATR(high=high_values, low=low_values, close=close_values)
     features['trange'] = talib.TRANGE(high=high_values, low=low_values, close=close_values)
     features['CDL2CROWS'] = talib.CDL2CROWS(open=open_values, high=high_values, low=low_values, close=close_values)
     features['CDL3BLACKCROWS'] = talib.CDL3BLACKCROWS(open=open_values, high=high_values, low=low_values,
                                                       close=close_values)
     features['CDL3INSIDE'] = talib.CDL3INSIDE(open=open_values, high=high_values, low=low_values,
                                               close=close_values)
     features['CDL3LINESTRIKE'] = talib.CDL3LINESTRIKE(open=open_values, high=high_values, low=low_values,
                                                       close=close_values)
     features['CDL3OUTSIDE'] = talib.CDL3OUTSIDE(open=open_values, high=high_values, low=low_values,
                                                 close=close_values)
     features['CDL3STARSINSOUTH'] = talib.CDL3STARSINSOUTH(open=open_values, high=high_values, low=low_values,
                                                           close=close_values)
     features['CDL3WHITESOLDIERS'] = talib.CDL3WHITESOLDIERS(open=open_values, high=high_values, low=low_values,
                                                             close=close_values)
     features['CDLABANDONEDBABY'] = talib.CDLABANDONEDBABY(open=open_values, high=high_values, low=low_values,
                                                           close=close_values)
     features['CDLADVANCEBLOCK'] = talib.CDLADVANCEBLOCK(open=open_values, high=high_values, low=low_values,
                                                         close=close_values)
     features['CDLBELTHOLD'] = talib.CDLBELTHOLD(open=open_values, high=high_values, low=low_values,
                                                 close=close_values)
     features['CDLBREAKAWAY'] = talib.CDLBREAKAWAY(open=open_values, high=high_values, low=low_values,
                                                   close=close_values)
     features['CDLCLOSINGMARUBOZU'] = talib.CDLCLOSINGMARUBOZU(open=open_values, high=high_values, low=low_values,
                                                               close=close_values)
     features['CDLCONCEALBABYSWALL'] = talib.CDLCONCEALBABYSWALL(open=open_values, high=high_values, low=low_values,
                                                                 close=close_values)
     features['CDLCOUNTERATTACK'] = talib.CDLCOUNTERATTACK(open=open_values, high=high_values, low=low_values,
                                                           close=close_values)
     features['CDLDARKCLOUDCOVER'] = talib.CDLDARKCLOUDCOVER(open=open_values, high=high_values, low=low_values,
                                                             close=close_values)
     features['CDLDOJI'] = talib.CDLDOJI(open=open_values, high=high_values, low=low_values, close=close_values)
     features['CDLDOJISTAR'] = talib.CDLDOJISTAR(open=open_values, high=high_values, low=low_values,
                                                 close=close_values)
     features['CDLDRAGONFLYDOJI'] = talib.CDLDRAGONFLYDOJI(open=open_values, high=high_values, low=low_values,
                                                           close=close_values)
     features['CDLENGULFING'] = talib.CDLENGULFING(open=open_values, high=high_values, low=low_values,
                                                   close=close_values)
     features['CDLEVENINGDOJISTAR'] = talib.CDLEVENINGDOJISTAR(open=open_values, high=high_values, low=low_values,
                                                               close=close_values)
     features['CDLEVENINGSTAR'] = talib.CDLEVENINGSTAR(open=open_values, high=high_values, low=low_values,
                                                       close=close_values)
     features['CDLGAPSIDESIDEWHITE'] = talib.CDLGAPSIDESIDEWHITE(open=open_values, high=high_values, low=low_values,
                                                                 close=close_values)
     features['CDLGRAVESTONEDOJI'] = talib.CDLGRAVESTONEDOJI(open=open_values, high=high_values, low=low_values,
                                                             close=close_values)
     features['CDLHAMMER'] = talib.CDLHAMMER(open=open_values, high=high_values, low=low_values, close=close_values)
     features['CDLHANGINGMAN'] = talib.CDLHANGINGMAN(open=open_values, high=high_values, low=low_values,
                                                     close=close_values)
     features['CDLHARAMI'] = talib.CDLHARAMI(open=open_values, high=high_values, low=low_values, close=close_values)
     features['CDLHARAMICROSS'] = talib.CDLHARAMICROSS(open=open_values, high=high_values, low=low_values,
                                                       close=close_values)
     features['CDLHIGHWAVE'] = talib.CDLHIGHWAVE(open=open_values, high=high_values, low=low_values,
                                                 close=close_values)
     features['CDLHIKKAKE'] = talib.CDLHIKKAKE(open=open_values, high=high_values, low=low_values,
                                               close=close_values)
     features['CDLHIKKAKEMOD'] = talib.CDLHIKKAKEMOD(open=open_values, high=high_values, low=low_values,
                                                     close=close_values)
     features['CDLHOMINGPIGEON'] = talib.CDLHOMINGPIGEON(open=open_values, high=high_values, low=low_values,
                                                         close=close_values)
     features['CDLIDENTICAL3CROWS'] = talib.CDLIDENTICAL3CROWS(open=open_values, high=high_values, low=low_values,
                                                               close=close_values)
     features['CDLINNECK'] = talib.CDLINNECK(open=open_values, high=high_values, low=low_values, close=close_values)
     features['CDLINVERTEDHAMMER'] = talib.CDLINVERTEDHAMMER(open=open_values, high=high_values, low=low_values,
                                                             close=close_values)
     features['CDLKICKING'] = talib.CDLKICKING(open=open_values, high=high_values, low=low_values,
                                               close=close_values)
     features['CDLKICKINGBYLENGTH'] = talib.CDLKICKINGBYLENGTH(open=open_values, high=high_values, low=low_values,
                                                               close=close_values)
     features['CDLLADDERBOTTOM'] = talib.CDLLADDERBOTTOM(open=open_values, high=high_values, low=low_values,
                                                         close=close_values)
     features['CDLLONGLEGGEDDOJI'] = talib.CDLLONGLEGGEDDOJI(open=open_values, high=high_values, low=low_values,
                                                             close=close_values)
     features['CDLLONGLINE'] = talib.CDLLONGLINE(open=open_values, high=high_values, low=low_values,
                                                 close=close_values)
     features['CDLMARUBOZU'] = talib.CDLMARUBOZU(open=open_values, high=high_values, low=low_values,
                                                 close=close_values)
     features['CDLMATCHINGLOW'] = talib.CDLMATCHINGLOW(open=open_values, high=high_values, low=low_values,
                                                       close=close_values)
     features['CDLMATHOLD'] = talib.CDLMATHOLD(open=open_values, high=high_values, low=low_values,
                                               close=close_values)
     features['CDLMORNINGDOJISTAR'] = talib.CDLMORNINGDOJISTAR(open=open_values, high=high_values, low=low_values,
                                                               close=close_values)
     features['CDLMORNINGSTAR'] = talib.CDLMORNINGSTAR(open=open_values, high=high_values, low=low_values,
                                                       close=close_values)
     features['CDLONNECK'] = talib.CDLONNECK(open=open_values, high=high_values, low=low_values, close=close_values)
     features['CDLPIERCING'] = talib.CDLPIERCING(open=open_values, high=high_values, low=low_values,
                                                 close=close_values)
     features['CDLRICKSHAWMAN'] = talib.CDLRICKSHAWMAN(open=open_values, high=high_values, low=low_values,
                                                       close=close_values)
     features['CDLRISEFALL3METHODS'] = talib.CDLRISEFALL3METHODS(open=open_values, high=high_values, low=low_values,
                                                                 close=close_values)
     features['CDLSEPARATINGLINES'] = talib.CDLSEPARATINGLINES(open=open_values, high=high_values, low=low_values,
                                                               close=close_values)
     features['CDLSHOOTINGSTAR'] = talib.CDLSHOOTINGSTAR(open=open_values, high=high_values, low=low_values,
                                                         close=close_values)
     features['CDLSHORTLINE'] = talib.CDLSHORTLINE(open=open_values, high=high_values, low=low_values,
                                                   close=close_values)
     features['CDLSPINNINGTOP'] = talib.CDLSPINNINGTOP(open=open_values, high=high_values, low=low_values,
                                                       close=close_values)
     features['CDLSTALLEDPATTERN'] = talib.CDLSTALLEDPATTERN(open=open_values, high=high_values, low=low_values,
                                                             close=close_values)
     features['CDLSTICKSANDWICH'] = talib.CDLSTICKSANDWICH(open=open_values, high=high_values, low=low_values,
                                                           close=close_values)
     features['CDLTAKURI'] = talib.CDLTAKURI(open=open_values, high=high_values, low=low_values, close=close_values)
     features['CDLTASUKIGAP'] = talib.CDLTASUKIGAP(open=open_values, high=high_values, low=low_values,
                                                   close=close_values)
     features['CDLTHRUSTING'] = talib.CDLTHRUSTING(open=open_values, high=high_values, low=low_values,
                                                   close=close_values)
     features['CDLTRISTAR'] = talib.CDLTRISTAR(open=open_values, high=high_values, low=low_values,
                                               close=close_values)
     features['CDLUNIQUE3RIVER'] = talib.CDLUNIQUE3RIVER(open=open_values, high=high_values, low=low_values,
                                                         close=close_values)
     features['CDLUPSIDEGAP2CROWS'] = talib.CDLUPSIDEGAP2CROWS(open=open_values, high=high_values, low=low_values,
                                                               close=close_values)
     features['CDLXSIDEGAP3METHODS'] = talib.CDLXSIDEGAP3METHODS(open=open_values, high=high_values, low=low_values,
                                                                 close=close_values)
     return features
Esempio n. 27
0
def CDLDOJI(data):
    res = talib.CDLDOJI(data.open.values, data.high.values, data.low.values,
                        data.close.values)
    return pd.DataFrame({'CDLDOJI': res}, index=data.index)
Esempio n. 28
0
def CDLDOJI(data, **kwargs):
    _check_talib_presence()
    popen, phigh, plow, pclose, pvolume = _extract_ohlc(data)
    return talib.CDLDOJI(popen, phigh, plow, pclose, **kwargs)
Esempio n. 29
0
 def CDLDOJI(Open, High, Low, Close):
     integer = pd.DataFrame()
     for i in High.columns:
         integer[i] = ta.CDLDOJI(Open[i], High[i], Low[i], Close[i])
     return integer
Esempio n. 30
0
                                               np.array(df['High']),
                                               np.array(df['Low']),
                                               np.array(df['Adj Close']))
df['Concealing_Baby_Swallow'] = ta.CDLCONCEALBABYSWALL(
    np.array(df['Open']), np.array(df['High']), np.array(df['Low']),
    np.array(df['Adj Close']))
df['Counterattack'] = ta.CDLCOUNTERATTACK(np.array(df['Open']),
                                          np.array(df['High']),
                                          np.array(df['Low']),
                                          np.array(df['Adj Close']))
df['Dark_Cloud_Cover'] = ta.CDLDARKCLOUDCOVER(np.array(df['Open']),
                                              np.array(df['High']),
                                              np.array(df['Low']),
                                              np.array(df['Adj Close']),
                                              penetration=0)
df['Doji'] = ta.CDLDOJI(np.array(df['Open']), np.array(df['High']),
                        np.array(df['Low']), np.array(df['Adj Close']))
df['Doji_Star'] = ta.CDLDOJISTAR(np.array(df['Open']), np.array(df['High']),
                                 np.array(df['Low']),
                                 np.array(df['Adj Close']))
df['Dragonfly_Doji'] = ta.CDLDRAGONFLYDOJI(np.array(df['Open']),
                                           np.array(df['High']),
                                           np.array(df['Low']),
                                           np.array(df['Adj Close']))
df['Engulfing_Pattern'] = ta.CDLENGULFING(np.array(df['Open']),
                                          np.array(df['High']),
                                          np.array(df['Low']),
                                          np.array(df['Adj Close']))
df['Evening_Doji_Star'] = ta.CDLEVENINGDOJISTAR(np.array(df['Open']),
                                                np.array(df['High']),
                                                np.array(df['Low']),
                                                np.array(df['Adj Close']),